algorithm - img - atributo title de la imagen
Cálculo de la diferencia entre imágenes. (7)
Aquí hay un código que escribí, hace 4 años en java yikes que hace comparaciones de imágenes usando histogramas. no mire ninguna otra parte que no sea buildHistograms ()
https://jpicsort.dev.java.net/source/browse/jpicsort/ImageComparator.java?rev=1.7& view = markup
Tal vez sea útil, al menos si está utilizando Java.
¿Saben de algún algoritmo que pueda usarse para calcular la diferencia entre 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 todas ellas (o tal vez lo haga).
Por cálculo me refiero a lo que la Levenshtein_distance o la distancia de Hamming es para cuerdas.
De ninguna manera necesito la respuesta correcta para un proyecto o algo, simplemente encontré el sitio web y me puse muy curioso. Sé que Digg paga por un servicio similar para su sitio web.
Aquí hay una página de similitud de imágenes , pero es para polígonos. Puedes convertir tu imagen en un número finito de polígonos en función del color y la forma, y ejecutar este algoritmo en cada uno de ellos.
Las medidas más simples serán los enfoques basados en errores de RMS, por ejemplo:
Probablemente se combinen con sus nociones de medidas de distancia, pero sus resultados solo son significativos si tiene dos imágenes que ya están muy cerca, por ejemplo, si observa qué tan bien un esquema de compresión particular conservó la imagen original. Además, el mismo resultado de cualquiera de las comparaciones puede significar muchas cosas diferentes, dependiendo del tipo de artefactos que haya (mire el documento que cito a continuación para ver algunos ejemplos de fotos de RMS / PSNR que pueden ser engañosas).
Más allá de esto, hay todo un campo de investigación dedicado a la similitud de imagen. No soy un experto, pero aquí hay algunos consejos:
Se ha trabajado mucho en enfoques que utilizan la reducción de la dimensionalidad (PCA, SVD, análisis de valores propios, etc.) para seleccionar los componentes principales de la imagen y compararlos en diferentes imágenes.
Otros enfoques (particularmente imágenes médicas) utilizan técnicas de segmentation para seleccionar partes importantes de las imágenes, luego comparan las imágenes según lo que se encuentra
Otros más han tratado de idear medidas de similitud que eviten algunas fallas del error RMS y PSNR. Hubo un artículo bastante bueno sobre la medida de similitud estructural del dominio espacial (SSIM) , que trata de imitar las percepciones de la gente del error de imagen en lugar de las nociones matemáticas directas del error. Los mismos muchachos hicieron una versión mejorada de traducción / rotación invariante utilizando el análisis de wavelet en este documento sobre WSSIM .
Parece que TinEye usa vectores de características con valores para muchos atributos para hacer su comparación. Si busca en su sitio, finalmente accede a la página de Ideé Labs , y sus preguntas frecuentes tienen algunos (pero no muchos) detalles específicos sobre el algoritmo:
P: ¿Cómo funciona la búsqueda visual?
R: La tecnología de búsqueda visual de Idée utiliza algoritmos sofisticados para analizar cientos de atributos de imagen como color, forma, textura, luminosidad, complejidad, objetos y regiones. Estos atributos forman una firma digital compacta que describe la apariencia de cada imagen y estas firmas. son calculados por e indexados por nuestro software. Al realizar una búsqueda visual, nuestro motor de búsqueda compara rápidamente estas firmas para obtener resultados visualmente similares.
Esto no es de ninguna manera exhaustivo (es solo un puñado de técnicas que he encontrado en el curso de mi propia investigación), pero si busca en Google artículos técnicos o revisa los procedimientos de conferencias recientes sobre procesamiento de imágenes, seguramente lo encontrará. Más métodos para esto. No es un problema resuelto, pero esperamos que estos indicadores te den una idea de lo que implica.
Las técnicas de correlación harán que un partido salte. Si son archivos JPEG, podría comparar los coeficientes dominantes para cada bloque de 8x8 y obtener una coincidencia decente. Esto no es exactamente una correlación, sino que se basa en una traducción de coseno, por lo que es un primo hermano.
Lo que TinEye hace es una especie de hash sobre la imagen o partes de ella (consulte 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 subcadenas del mismo, para saber si las imágenes son similares / idénticas o si una está contenida en otra.
Una técnica es utilizar histogramas de color . Puede usar algoritmos de aprendizaje automático para encontrar imágenes similares en función de la representación que utilice. Por ejemplo, el algoritmo k-means de uso común. He visto otras soluciones que intentan analizar las líneas verticales y horizontales en la imagen después de usar la detección de bordes . También se utiliza el análisis de textura .
Un paper reciente agrupó imágenes de la web de picasa. También puedes probar el algoritmo de agrupamiento en el que estoy trabajando.