He escrito un programa de computadora que puede detectar monedas en una imagen estática (.jpeg, .png, etc.) usando algunas técnicas estándar para la visión por computadora (Desenfoque gaussiano, umbral, Transformación de Hough, etc.). Utilizando las proporciones de las monedas recogidas de una imagen dada, puedo establecer con certeza qué monedas son cuáles. Sin embargo, deseo agregar a mis niveles de confianza y también determinar si una moneda que deduzco que es de tipo A (a partir de relaciones de radio) también es del color correcto [u] r. El problema es que para monedas británicas et al. (cobre, plata, oro), los colores respectivos (especialmente de cobre a oro) son muy similares.
Tengo una rutina que extrae el color medio de una moneda dada en términos del "espacio de color" RedGreenBlue (RGB) y las rutinas para convertir este color en "espacio de color" HueSaturationBrightness (HSB o HSV).
No es muy agradable trabajar con RGB al intentar diferenciar entre los tres colores de monedas (vea la imagen adjunta [básica] para ver un ejemplo). Tengo los siguientes rangos y valores típicos para los colores de los diferentes tipos de monedas:
Nota: el valor típico aquí es uno seleccionado usando una media 'en cuanto a píxeles' de una imagen real.
**Copper RGB/HSB:** typicalRGB = (153, 117, 89)/(26, 0.42, 0.60).
**Silver RGB/HSB:** typicalRGB = (174, 176, 180)/(220, 0.03, 0.71).
**Gold RGB/HSB:** typicalRGB = (220, 205, 160)/(45, 0.27, 0.86)
Primero intenté usar la 'distancia euclidiana' entre un color de moneda promedio dado (usando RGB) y los valores típicos para cada tipo de moneda dado anteriormente tratando los valores RGB como un vector; para el cobre tendríamos:
donde el valor más pequeño de la diferencia ( ) nos dirá qué tipo de moneda es más probable que sea. Este método ha demostrado ser muy inexacto.
También he intentado solo comparar el tono de las monedas con los valores típicos de los tipos proporcionados anteriormente. Aunque en teoría esto proporciona un "espacio de color" mucho mejor para lidiar con los niveles variables de brillo y saturación de las imágenes, tampoco fue lo suficientemente preciso.
Pregunta: ¿Cuál es el mejor método para determinar un tipo de monedas basado en el color (de una imagen estática)?
Muchas gracias por tu tiempo.
Editar 1
Nota: He probado todas las ideas que se analizan a continuación y no he logrado casi nada. La variación en las condiciones de iluminación (incluso dentro de la misma imagen) hace que este problema sea muy difícil y debe tenerse en cuenta.
Edición 2 (Resumen del resultado)
Gracias por sus respuestas. Investigaciones propias (incluyendo sus respuestas y comentarios) han resaltado cuán difícil es tratar este problema en el caso genérico de iluminación arbitraria, cámara arbitraria (dispositivo móvil), fluctuación en el color de la moneda (incluso para la misma especie / tipo) Primero examiné el reconocimiento del color de la piel (un campo de investigación muy activo) como punto de partida y todavía hay numerosos problemas incluso con el reconocimiento del color de la piel solo para los caucásicos (consulte este documento para una revisión de las técnicas actuales), y el hecho de que este problema contiene tres objetos de color distintos, todos los cuales pueden tener cromacias continuas y variables, hacen que este tema de la visión por computadora sea muy difícil de clasificar y tratar en consecuencia (de hecho, podría hacer un buen doctorado en él) !).
Miré en el Método de restricción de gama desde la muy útil publicación de DW a continuación. Esto fue a primera vista muy prometedor como un paso de preprocesamiento para transformar la imagen y los objetos de monedas separados en colores que son independientes de las condiciones de iluminación. Sin embargo, incluso esta técnica no funciona a la perfección (e implica una biblioteca de imágenes / histogramas para mapeos, en los que no quiero entrar) y tampoco lo hacen las metodologías mucho más complejas de la arquitectura de redes neuronales. De hecho, este documento establece en abstracto que:
"current machine colour constancy algorithms are not good enough for colour-based
object recognition.".
Eso no quiere decir que no haya muchos documentos más actualizados sobre este tema, pero no puedo encontrarlos y no parece ser un área de investigación muy activa en este momento.
La respuesta de AVB también fue útil y he examinado L A B * brevemente.
"The nonlinear relations for L*, a*, and b* are intended to mimic the nonlinear
response of the eye. Furthermore, uniform changes of components in the L*a*b* colour
space aim to correspond to uniform changes in perceived colour, so the relative
perceptual differences between any two colours in L*a*b* can be approximated by
treating each colour as a point in a three dimensional space."
Por lo que he leído, la transformación a este espacio de color para las imágenes dependientes de mi dispositivo será difícil, pero analizaré esto en detalle (con miras a algún tipo de implementación) cuando tenga un poco más de tiempo.
No estoy conteniendo la respiración para encontrar una solución concreta a este problema y, después del intento con L A B *, estaré descuidando el color de la moneda y buscando asegurar mis algoritmos de detección geométrica actuales (Transformación Elíptica Hough precisa, etc.).
Gracias a todos. Y como nota final a esta pregunta, aquí está la misma imagen con un nuevo algoritmo de detección geométrica, que no tiene reconocimiento de color: