34 votos

¿Cuál es la forma más precisa de determinar el color de un objeto?

He escrito un programa de ordenador que puede detectar monedas en una imagen estática (.jpeg, .png, etc.) el uso de algunas técnicas estándar de visión de computadora (Desenfoque Gaussiano, umbralización, Hough-Transformar etc.). El uso de las proporciones de monedas recogido de una determinada imagen, que puedo establecer con certeza que las monedas son las que. Sin embargo, quiero añadir a mis niveles de confianza y también determinar si una moneda que deduzco que ser de tipo a (a partir de relaciones de radio) es también de la correcta colo[u]r. El problema es que para los Británicos monedas et al. (cobre, plata, oro), los respectivos colores (esp. de cobre de oro) son muy similares.

Tengo una rutina que extrae el promedio de color de una determinada moneda en términos de la RedGreenBlue (RGB) 'espacio de color' y rutinas para convertir este color en HueSaturationBrightness (HSB o VHS) 'color-espacio".

RGB no es muy agradable trabajar con en el intento de diferenciar entre las tres monedas de colores (ver adjunto [básico] imagen 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 de aquí es uno de los seleccionados, utilizando un "pixel-sabio' 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) 

Probé por primera vez el uso de la "distancia Euclidiana" entre un determinado media moneda de color (el uso de RGB) y los valores típicos para cada tipo moneda dada anteriormente el tratamiento de los valores RGB como un vector; para el cobre tendríamos:

$$D_{cobre} = \sqrt((R_{tipo} - R_{cobre})^{2} + (G_{tipo} - G_{cobre})^{2} + (B_{tipo} - B_{cobre})^{2})$$

donde el valor más pequeño de la diferencia ($D$) nos diría que el tipo de dado de la moneda es más probable que sea. Este método ha demostrado ser muy imprecisos.

También he probado solo comparar el tono de las monedas con los valores típicos de los tipos proporcionados por encima. Aunque en teoría esto proporciona una mejor "espacio de color" para lidiar con brillo variable y los niveles de saturación de las imágenes, no era lo suficientemente preciso.

Pregunta: ¿Cuál es el mejor método para determinar un tipo de monedas basadas en el color (a partir de una imagen estática)?

Muchas gracias por su tiempo.

Typical Coin Colors

Edición 1

Nota: he probado todas las ideas que se discuten a continuación y que han logrado nada. La variación en las condiciones de iluminación (incluso dentro de la misma imagen) hacen de este un problema muy difícil y debe ser tomado en consideración.

Edición 2 (Sumario de Resultados)

Gracias por sus respuestas. Además de la investigación de mi propia (incluyendo sus respuestas y comentarios) ha puesto de relieve lo difícil de este problema es lidiar con en el caso genérico de arbitraria de iluminación, arbitrarias de la cámara (dispositivo móvil), la fluctuación de la moneda de color (incluso para la misma especie/tipo), etc. La primera vez que miré en el color de la piel (reconocimiento de un campo muy activo de investigación) como un punto de partida y todavía hay muchos problemas, incluso con el reconocimiento del color de la piel para los Caucásicos solo (vea este artículo para una revisión de las técnicas actuales), y el hecho de que este problema tiene tres diferentes colores de los objetos que pueden tener continuo y variable chromacities hacer este tema de la visión de computadora muy difícil de clasificar y tratar en consecuencia (en realidad se podría hacer un buen Tel. D. en ella!).

Me miró dentro de la Gama de Restricción Método de la muy útil el post por D. W. a continuación. Esto fue a primera vista muy prometedor como un pre-procesamiento de paso para transformar la imagen y las diferentes monedas de los objetos a los colores que son independientes de las condiciones de iluminación. Sin embargo, incluso esta técnica no funciona a la perfección (y consiste en una biblioteca de imágenes/histogramas para las asignaciones – que yo no quiero entrar en) y tampoco la mucho más compleja Arquitectura de Red Neuronal metodologías. De hecho, este papel de los estados en el resumen que:

"current machine colour constancy algorithms are not good enough for colour-based 
 object recognition.".

Que no es para decir que no hay mucho más arriba-a-fecha de artículos sobre este tema, pero no los encuentro y no parece ser un área de investigación activa en este momento.

La respuesta por AVB fue también muy útil y he mirado en 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 de este espacio de color para mi dispositivo dependiente de las imágenes va a ser difícil, pero voy a mirar en detalle en esto (con vista a algún tipo de aplicación) cuando tengo un poco más de tiempo.

No estoy conteniendo la respiración para una solución concreta a este problema y después de que el intento con L*a*B* I será descuidar la moneda de color y buscando seguro de que mi actual geométricas algoritmos de detección (precisa Elíptica Hough Transformar etc.).

Gracias a todos ustedes. Y como nota final a esta pregunta, aquí está la misma imagen con un geométricas nuevo algoritmo de detección, que no tiene color de reconocimiento:

enter image description here

7voto

Nicholas Puntos 1730

Dos cosas, para empezar.

Uno, definitivamente no trabajar en RGB. Su valor por defecto debe ser de Laboratorio (aka CIE L*a*b*) espacio de color. Descartar L. A partir de tu imagen se ve como el a de coordenadas le da la mayor cantidad de información, pero probablemente debería hacer un análisis de componentes principales en a y b y trabajo a lo largo de la primera (la más importante) de los componentes, sólo para mantener las cosas simples. Si esto no funciona, usted puede tratar de cambiar a un modelo 2D.

Para conseguir una sensación para él, en a los tres amarillento monedas han Ets por debajo de 6, y los medios de 137 ("oro"), 154 y 162 -- debe ser distinguible.

Segundo, el problema de iluminación. Aquí tendrás que definir cuidadosamente el problema. Si desea distinguir cerca de los colores bajo cualquier tipo de iluminación y en cualquier contexto-que no puede, no como este, de todos modos. Si sólo está preocupado acerca de las variaciones locales en el brillo, el Laboratorio de la mayoría va a tomar el cuidado de este. Si usted quiere ser capaz de trabajar bajo la luz del día y la luz incandescente, se puede asegurar la uniformidad en el fondo blanco, como en el ejemplo de la imagen? En general, ¿cuáles son sus condiciones de iluminación?

Además, su imagen fue tomada con un bastante barato de la cámara, por lo que se ve. Es probable que tenga algún tipo de balance automático de blancos, que se mete hasta los colores muy mal -- desactivarlo si usted puede. También se ve como la imagen fue codificado en YCbCr en algún momento (esto pasa mucho si es una cámara de vídeo) o en una variante de JPG; la información de color es severamente submuestreada. En el caso de que en realidad podría ser bueno, significa que la cámara ha hecho un poco de eliminación de ruido para usted en los canales de color. Por otro lado, probablemente significa que en algún punto la información de color también fue cuantificada más fuerte que el brillo -- que no es tan bueno. Lo principal aquí es -- la cámara de los asuntos, y lo que debe hacer, depende de la cámara que se va a utilizar.

Si cualquier cosa, aquí no tiene sentido-dejar un comentario.

6voto

UK Visa Works Puntos 29

En el espíritu de la lluvia de ideas, voy a compartir algunas ideas que usted puede intentar:

  1. Trate de Tono más? Parece que Tono le dio un buen discriminador entre la plata y el cobre/oro, aunque no entre el cobre y el oro, al menos en el único ejemplo que mostré aquí. Han examinado el uso de la Tonalidad en mayor detalle, para ver si podría ser viable característica para distinguir la plata de cobre/oro?

    Podría comenzar por reunir a un montón de imágenes de ejemplo, que usted tiene manualmente etiquetados, de computación y el Tono de cada una de las monedas en cada imagen. Entonces usted puede intentar histogramming de ellos, para ver si el Tono se ve como una forma plausible para discriminar. También podría probar a mirar en el promedio de Tono de cada una de las monedas, por un puñado de ejemplos como el que aquí se presenta. También podría tratar de Saturación, de igual manera, que parecía que podría ser útil también.

    Si esto falla, puede que desee editar tu pregunta para mostrar lo que he probado y dar algunos ejemplos para ilustrar de la manera más concisa de por qué esto es difícil o cuando se produce un error.

  2. Otros espacios de color? Del mismo modo, usted puede tratar de transformar a rg cromaticidad y, a continuación, haciendo experimentos para ver si el resultado es útil en la distinción de plata de cobre/oro. Es posible que esto podría ayudar a ajustar la iluminación de la variación, por lo que podría ser vale la pena intentarlo.

  3. Verificación de diferencias relativas entre las monedas, en lugar de buscar en cada una de las monedas en el aislamiento? Tengo entendido que, a partir de las proporciones de tallas de moneda (radios), tiene una hipótesis inicial para el tipo de cada una de las monedas. Si usted tiene $n$ monedas, este es un $$n-vector. Sugiero probar toda esta compuesto de hipótesis de una sola vez, en lugar de $n$ los tiempos de prueba de su hipótesis para cada una de las monedas en su propio.

    ¿Por qué esta ayuda? Bien, puede dejar que usted puede tomar ventaja de la relativa colores de las monedas de uno a otro, que debe estar más cerca de invariantes con respecto a la iluminación (suponiendo relativamente uniforme de la iluminación) de cada una de las monedas individuales de tono. Por ejemplo, para cada par de monedas, usted puede calcular la diferencia de sus matices y comprobar si esto corresponde a lo que se espera dar a su hipótesis acerca de sus dos identidades. O, se podría generar una $n$-vector $p$ con la predicción de tonos para el $n$ monedas; calcular $$n-vector $o$ con el observado tonos para el $n$ monedas; clúster de cada uno; y comprobar que hay una correspondencia uno a uno entre tonos. O, dado que los vectores p$, o$, usted puede comprobar si existe una transformación simple $T$ tal que $o \aprox T(p)$, es decir, $o_i \aprox T(p_i)$ tiene para cada i. Puede que tenga que experimentar con diferentes posibilidades para la clase de $T$'s que te permiten. Un ejemplo de la clase es el conjunto de funciones $T(x)=x+c \pmod{360}$, donde la constante $c$ rangos de todas las posibilidades.

  4. Comparar para hacer referencia a las imágenes? En lugar de utilizar el color de la moneda, usted podría considerar la posibilidad de intentar igualar lo que está impreso en la moneda. Por ejemplo, digamos que usted ha detectado una moneda de $C$ en la imagen, y la hipótesis es una moneda de una libra. Usted podría tomar una imagen de referencia de $R$ de un billete de una libra de la moneda y probar si $R$ parece coincidir con $C$.

    Usted tendrá que dar cuenta de las diferencias en la pose. Permítanme empezar asumiendo que usted tiene una cabeza-en la imagen de la moneda, como en la imagen de ejemplo. Entonces lo principal que debe tener en cuenta es la rotación: no sabemos a priori cuánto $C$ es girado. Un enfoque simple podría ser barrido a través de una gama de posibles ángulos de rotación de $\theta$, girar $R$ $\theta$, y comprobar si $R_\theta$ parece coincidir con $C$. Para la prueba de un partido, se puede utilizar un simple basada en píxeles diff métrica: es decir, para cada coordenada $(x,y)$, calcular $D(x,y) = R_\theta(x,y) - C(x,y)$ (la diferencia entre el valor del píxel en $R_\theta$ y el valor del píxel en $C$); a continuación, utilice $L_2$ norma (suma de cuadrados) o somesuch combinar todos los de la diferencia de valores en una sola métrica de cómo cerrar un partido (es decir, $\sum_{(x,y)} D(x,y)^2$). Usted tendrá que utilizar una lo suficientemente pequeño incremento de paso que el pixel diff es probable que funcione. Por ejemplo, en la imagen de ejemplo, el de una libra de la moneda tiene un radio de aproximadamente 127 píxeles; si usted barrido a través de los valores de $\theta$, con un incremento de $0.25$ grados en cada paso, a continuación, sólo tendrá que tratar acerca de 1460 diferentes valores de rotación, y el error en la circunferencia de la moneda en la aproximación más cercana a la verdadera $\theta$ debe ser en la mayoría de los aproximadamente una cuarta parte de un píxel, que es lo suficientemente pequeño para que el píxel diff podrían funcionar OK.

    Usted puede experimentar con múltiples variaciones de esta idea. Por ejemplo, se podría trabajar con una versión en escala de grises de la imagen RGB completo, y el uso de un $L_2$ norma sobre todas las tres R,G,B diferencias; el HSB, y el uso de un $L_2$ norma sobre los tres H,S,B diferencias; o trabajar solo con el Tono, la Saturación o el Brillo de avión. También, otra posibilidad sería la primera ejecución de un detector de bordes en ambos $R$ y $C$, a continuación, coincide con la resultante de la imagen de bordes.

    De robustez, es posible que tenga varios diferentes imágenes de referencia para cada una de las monedas (de hecho, cada lado de la moneda), y probar todas las imágenes de referencia para encontrar la mejor coincidencia.

    Si las imágenes de las monedas no son tomados directamente de la cabeza, entonces, como un primer paso que usted puede desear para el cálculo de la elipse que representa el perímetro de la moneda de $C$ en la imagen y deducir el ángulo en el que la moneda es que se está visualizando. Esto le permitirá calcular lo $R$ vería en ese ángulo, antes de realizar el cotejo.

  5. Comprobar cómo el color varía como una función de la distancia desde el centro? Aquí hay una posible paso intermedio entre "la moneda medias de color" (un único número, es decir, 0-dimensional) y "toda la imagen de la moneda" (una imagen de 2 dimensiones). Para cada moneda, se podría calcular un 1-dimensional de vectores o de la función $f$, donde $f(r)$ representa el promedio de color de los píxeles a una distancia de aproximadamente $r$ desde el centro de la moneda. Entonces, usted puede tratar de coincidir con el vector $f_C$ por una moneda de $C$ en su imagen contra el vector $f_R$ para una imagen de referencia de $R$ de la moneda.

    Esto podría dejar correcta para la iluminación de las diferencias. Por ejemplo, usted podría ser capaz de trabajar en escala de grises, o en un solo bitplane (por ejemplo, Tono o Saturación o Brillo). O, usted podría ser capaz de primer normalizar la función $f$ restando la media: $g(r) = f(r)-\mu$, donde $\mu$ es el promedio de color de la moneda --, a continuación, tratar de coincidir con $g_C$ $g_R$.

    Lo bueno de este enfoque es que usted no necesita para inferir cuánto la moneda fue girado: la función $f$ es la rotación-invariante.

    Si desea experimentar con esta idea, me gustaría calcular la función $f_C$ para una variedad de diferentes imágenes de ejemplo y gráfico ellos. A continuación, usted debe ser capaz de inspeccionar visualmente para ver si la función parece tener una forma relativamente consistente, independientemente de la iluminación. Usted podría probar esto por múltiples posibilidades diferentes (escala de grises, cada uno de los HSB bitplanes, etc.).

    Si la moneda de $C$ no han sido fotografiados directamente en la cabeza -, pero, posiblemente, desde un ángulo, primero deberás trazar la elipse de $C$'s perímetro para deducir el ángulo desde el que fue fotografiado y, a continuación, corregir para que en el cálculo de $f$.

  6. Mira algoritmos de visión para la constancia del color. La visión por computador de la comunidad se ha estudiado la constancia del color, el problema de la corrección de una desconocida fuente de iluminación; véase, por ejemplo, esta descripción. Usted puede explorar algunos de los algoritmos derivados de este problema; no intentar deducir la fuente de iluminación y, a continuación, lo correcto, para obtener la imagen habría obtenido tenía la imagen se ha tomado con la referencia de la fuente de iluminación.

  7. Buscar en Color de Color Constante de la Indización. La idea básica de la ASOCIACIÓN, como yo lo entiendo, es la primera cancelar el desconocido fuente de iluminación mediante la sustitución de cada píxel el valor de R con la relación entre su valor de R y de uno de sus vecinos valores de R; y de manera similar para el G y B de los aviones. La idea es que (con suerte), estos coeficientes deben ahora ser en su mayoría independiente de la fuente de iluminación. Luego, una vez que estos ratios, calcula un histograma de los coeficientes presente en la imagen, y utilizar esto como una firma de la imagen. Ahora, si usted quiere comparar la imagen de la moneda de $C$ a una imagen de referencia de $R$, usted puede comparar sus firmas para ver si se parecen coincidir. En su caso, también puede ser necesario para ajustar el ángulo de la imagen de la moneda de $C$, no se había tenido en la cabeza -, pero esto parece que podría ayudar a reducir la dependencia de la fuente de iluminación.

No sé si alguna de estas tiene una oportunidad de trabajo, pero están algunas ideas que usted puede intentar.

3voto

martino Puntos 1179

Problema interesante y buen trabajo.

Trate de usar la mediana de los valores de los colores en lugar de decir. Esto será más robusto frente a valores atípicos debido a la luminosidad y la saturación. Trate de usar sólo uno de los componentes RGB en vez de tres. Elegir el componente que distingue mejor los colores. Usted podría intentar trazar los histogramas de los valores de los píxeles (por ejemplo, uno de los componentes RGB) para dar una idea de las propiedades de la distribución de píxeles. Esto podría sugerir una solución que no es inmediatamente obvio. Trate de ploting los componentes RGB en el espacio 3D a ver si siguen ningún patrón, por ejemplo, se puede estar cerca de una línea que indica que una combinación lineal de las componentes RGB puede ser una mejor clasificador de un individuo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X