2012-04-21 19 views
6

Estoy tomando capturas de pantalla de una aplicación y tratando de detectar si la imagen exacta se ha visto antes. Estoy buscando detectar cambios triviales como diferentes - p. si hay texto en la imagen y la ortografía cambia, eso cuenta como desajuste.Hash de imagen para imágenes muy similares

He estado utilizando con éxito un hash MD5 del contenido de una imagen de captura de pantalla para buscar en una base de datos de imágenes conocidas, y detectar si se ha visto antes.

Ahora, lo he portado a otra máquina, ya pesar de mis intentos de adaptar exactamente las configuraciones, estoy obteniendo imágenes ligeramente diferentes a la máquina anterior. Cuando digo diferente, los cambios son minúsculos: si exploto las imágenes antiguas y las nuevas y hago un giro rápido entre ellas, ¡no puedo ver una sola diferencia! No obstante, el comando compare de ImageMagick puede ver una mezcla de píxeles que son diferentes.

Así que mis hash MD5 ya no coinciden. En lugar de un simple hash MD5, necesito un image hash.

Al hacer mi investigación, encuentro que la mayoría de los hash de imágenes intentan ser bastante generosos: aceptan imágenes de tamaño, transformadas y con marca de agua, con las correspondientes coincidencias de falso positivo. Quiero un hash de imagen mucho más estricto: los únicos cambios permitidos son los cambios de color mínimos.

¿Alguien puede recomendar una biblioteca o algoritmo hash de imágenes? (No es una aplicación, como dupdetector).

Recuerde: Mis requisitos son diferentes de las muchas preguntas similares en que no quiero un algoritmo liberal como shrinking o pHash, y no quieren una herramienta de comparación como structural similarity o ImageMagick's compare.

Quiero un hash que hace que imágenes muy similares den el mismo valor hash. ¿Es eso posible?

+2

No, eso no es posible. No habría forma de saber qué descartar. Lo que es posible es desarrollar una herramienta de comparación de imágenes que tenga un umbral ajustable para ver qué tan similares deben ser dos imágenes. (Para ver por qué es imposible, imagine intentar hacer algo similar para, digamos, juegos. Para detectar, por ejemplo, si alguien acaba de cambiar unas palabras en una obra de teatro. El número debe depender de cada palabra o no. no puedes simplemente comparar los valores hash para la igualdad, tienes que medir su distancia) –

+0

Interesante. Comparar todos los cientos o miles de posibles coincidencias es inviable. Esto es algo preocupante Gracias. – Oddthinking

+0

No tiene que comparar todos los cientos o miles de posibles coincidencias. Solo tienes que comparar los que son generalmente similares. Los que son completamente diferentes no pueden coincidir. –

Respuesta

1

Puede echar un vistazo al siguiente documento llamado "Hash espectral". Es un algoritmo que está diseñado para producir códigos hash a partir de imágenes para agrupar imágenes similares (consulte los ejemplos de recuperación al final del documento). Es un buen punto de partida.

El enlace: http://www.cs.huji.ac.il/~yweiss/SpectralHashing/

Cuestiones relacionadas