2010-10-26 16 views
5

Si tengo dos imágenes que son tanto la vista lateral izquierda de una misma zapatilla en diferentes estilos, ¿cómo puedo determinar por qué color (s) difieren? Tal vez es un zapato en dos estilos, un estilo tiene cordones rosas y un lado blanco, el otro tiene cordones blancos y un lado amarillo. Quiero:Necesito diferir dos imágenes para ver qué color (es) son diferentes. Algún algoritmo de nivel medio?

imagen OneColors: C1 = rosa, C2 = Blanco

imagen Dos Colores: C1 = blanco, C2 = amarillo

algoritmos Sin súper alto nivel, pero no lo hago necesita código implementado real tampoco. Tal vez solo bucles, estructuras de datos, condiciones ...

La parte real del zapato de la imagen estará sobre un fondo blanco. Estas serán fotografías similares a las que verías en endless.com o zappos.com, por lo que son muy similares, pero requieren cierta tolerancia.

+0

Por alguna razón, vienen a la mente la cuantificación, los cubos y la recuperación de imágenes basadas en el contenido. Solo estoy buscando un curso viejo que pueda ayudar a arrojar algo de luz ... – brumScouse

+0

Esto suena como una pesadilla. A menos que los zapatos estén exactamente en el mismo lugar y orientación, vas a necesitar algunas cosas bastante sofisticadas. (Por supuesto, si solo quieres colores grandes, eso podría ser simple.) – JoshD

+0

La posición y la orientación son fáciles. Camine por el borde para encontrar el zapato en el fondo, coloque cajas alrededor de los zapatos, alinee las cajas. – MStodd

Respuesta

3

Dado que parece que usted sólo quiere decir qué colores se diferencian por (sin tener en cuenta la forma, etc.) y que se puede esperar de las formas serán muy similares (aunque no idéntico), lo haría:

  1. histogramas Compute de color para cada imagen (es posible que tenga 3 histogramas para cada uno de R, G, B)
  2. ellos restar (z = abs(x - y) para cada color)
  3. Identificar los picos en el histograma (s) resultante

Cuando un área importante tiene un color diferente en cada imagen, esto le dará dos picos altos en el (los) histograma (s) final (es). (La caída de la abs() si necesita saber cuál es cuál.)

[EDIT] Como Jilles de Wit indica, es mejor buscar en las frecuencias de (R, G, B) se triplica en lugar de los colores individuales (es decir, para cada imagen, cree un histograma grande de 256 * 256 * 256 en lugar de 3 histogramas de tamaño-256). Pero en este caso, el vector de histograma es enorme y es probable que esté lleno principalmente de ceros, por lo que es una buena idea cuantificar las intensidades de 256 a 16 niveles, dando un vector más manejable de 16 * 16 * 16.

+0

Ese es un enfoque interesante. Parece que debería hacer el trabajo. – MStodd

+1

No hagas histogramas separados para R, G y B. La combinación de R, G, B hace el color. Un zapato rojo con cordones amarillos sobre un fondo negro llevaría a picos en los histogramas R, G y B alrededor de 255 y 0 y no sabría qué color los causó (podría ser rojo, azul y verde, o verde y púrpura , o rojo y cian, etc.) De lo contrario, encontrar picos en el histograma es el enfoque más sensato. –

+0

@jilles: ¿Quiere decir registrar la frecuencia de cada triple (R, G, B)? Eso suena como una buena idea. En ese caso, es probable que alguna cuantificación sea útil para evitar el manejo de vectores 256 * 256 * altamente dispersos. –

0

debería ser capaz de usar algo similar al comando 'diff' en bash, para comparar el contenido de los dos archivos directamente. Luego, puede analizar esos datos, procesarlos en colores (utilizando un gráfico hexadecimal para ayudarlo) e imprimir los diferentes colores. Para obtener resultados coherentes de diff, recomiendo encapsularlo en un archivo de texto, y luego procesar el archivo de texto. Algo como 'diff archivo1.jpeg archivo2.jpeg> diferencias.txt'

Esto se puede hacer desde un programa C bastante fácilmente. Esta es, sin embargo, una solución para un sistema basado en Unix, no sé si Windows tiene la operación disponible.

+0

Como trabajaré con imágenes comprimidas y no con mapas de bits, no creo que diff sea una opción. Además, estas van a ser fotografías, así que necesito cierto grado de tolerancia. – MStodd

Cuestiones relacionadas