2009-03-05 8 views
25

¿Ustedes saben de algún algoritmo que pueda usarse para calcular la diferencia entre las imágenes?Calculando la diferencia entre las imágenes

Tome esta página web por ejemplo http://tineye.com/ Le da un enlace o carga una imagen y encuentra imágenes similares. Dudo que compare la imagen en cuestión con todos ellos (o tal vez sí).

Por cálculo me refiero a lo que el Levenshtein_distance o el Hamming distance es para cadenas.

De ninguna manera necesito la respuesta correcta para un proyecto ni nada, acabo de encontrar el sitio web y me puse muy curioso. Sé que digg paga por un servicio similar para su sitio web.

+0

Eso es un sitio fresco ... ¿cree que podría utilizar además de nombres de archivo coincidentes? Podría ayudar porque .... – alex

+0

Divertido: http://tineye.com/search/789b9c5d3a71fe1609725c8fab0597a825258463 – OscarRyz

+0

productOverview, realmente se parece al logotipo de stackoverflow – OscarRyz

Respuesta

21

Las medidas muy simples van a ser los enfoques basados ​​en RMS de error, por ejemplo:

Estos probablemente gel con sus nociones de medidas de distancia, pero su los resultados realmente solo son significativos si ya tienes dos imágenes que están muy cerca, como si estuvieras viendo qué tan bien un esquema de compresión particular conservaba la imagen original. Además, el mismo resultado de cualquier comparación puede significar muchas cosas diferentes, dependiendo del tipo de artefactos que haya (echa un vistazo al documento que cito a continuación para algunas fotos de ejemplo de RMS/PSNR que pueden ser engañosas).

Más allá de esto, existe todo un campo de investigación dedicado a la similitud de imágenes.No soy un experto, pero aquí hay algunas sugerencias:

  • Un montón de trabajo ha ido a enfoques que utilizan dimensionality reduction (PCA, SVD, análisis de valores propios, etc.) para escoger los componentes principales de la imagen y compararlos a través de diferentes imágenes.

  • Otros enfoques (por imágenes particularmente médica) utilizan segmentation técnicas para seleccionar una parte importante de las imágenes, a continuación, se comparan las imágenes en función de lo que se encuentra

  • Otros han tratado de diseñar medidas de similitud que se interponen en torno a algunos de los defectos del error RMS y PSNR. Hubo un documento bastante interesante sobre la medida spatial domain structural similarity (SSIM), que trata de imitar las percepciones de las personas sobre el error de imagen en lugar de nociones de error directas y matemáticas. Los mismos tipos hicieron una versión mejorada de traducción/invariante de rotación usando wavelet analysis en this paper on WSSIM.

  • Parece que TinEye utiliza vectores de características con valores para lotes de atributos para hacer su comparación. Si usted busca alrededor en su sitio, es muy probable llegar a la página Ideé Labs, y their FAQ tiene algunos (pero no demasiados) detalles sobre el algoritmo:

    Q: ¿Cómo funciona el trabajo visual de búsqueda?

    R: La tecnología de búsqueda visual de Idée utiliza algoritmos sofisticados para analizar cientos de atributos de la imagen tales como color, forma, textura, luminosidad, la complejidad, objetos y atributos regions.These formar una firma digital que describe la aparición de cada imagen, y estas firmas son calculadas e indexadas por nuestro software. Al realizar una búsqueda visual, nuestro motor de búsqueda compara rápidamente estas firmas para devolver resultados visualmente similares.

Esto es de ninguna manera exhaustiva (es sólo un puñado de técnicas que he encontrado en el curso de mi propia investigación), pero si google para documentos técnicos o mirar a través de los procedimientos de las recientes conferencias sobre la imagen procesamiento, seguramente encontrará más métodos para esto. No es un problema resuelto, pero con suerte estos indicadores te darán una idea de lo que está involucrado.

1

Lo que TinEye hace es una especie de mezcla sobre la imagen o partes de ella (ver sus FAQ). Probablemente no sea una función hash real, ya que quieren "hashes" similares para imágenes similares (o casi idénticas). Pero todo lo que necesitan hacer es comparar ese hash y probablemente sus subcadenas, para saber si las imágenes son similares/idénticas o si una está contenida en otra.

1

Aquí hay una página de image similarity, pero es para polígonos. Puede convertir su imagen en un número finito de polígonos en función del color y la forma, y ​​ejecutar estos algoritmos en cada uno de ellos.

0

Las técnicas de correlación harán saltar un partido. Si son JPEG, podrías comparar los coeficientes dominantes para cada bloque de 8x8 y obtener una pareja decente. Esto no es exactamente una correlación, pero se basa en una trasferencia de coseno, por lo que es un primo hermano.

5

Una técnica es usar color histograms. Puede usar algoritmos de aprendizaje automático para encontrar imágenes similares basadas en la representación que utiliza. Por ejemplo, el k-means algorithm comúnmente utilizado. He visto otras soluciones tratando de analizar las líneas verticales y horizontales en la imagen después de usar edge detection. Texture analysis también se usa.

Un reciente paper imágenes agrupadas de picasa web. También puedes probar el clustering algorithm en el que estoy trabajando.

4

Considere usar lossy wavelet compression y comparando los elementos más relevantes de las imágenes.

+0

He hecho algunos trabajos utilizando solo esta técnica y obtuve buenos resultados (aunque no lo suficiente como para financiar un proyecto de desarrollo completo). –

Cuestiones relacionadas