Necesito una forma simple y rápida de comparar dos imágenes por similitud. Es decir, quiero obtener un valor alto si contienen exactamente lo mismo pero pueden tener un fondo ligeramente diferente y pueden ser movidos / redimensionados por unos pocos píxeles.
(Más concreto, si eso importa: una imagen es un icono y la otra imagen es una subárea de una captura de pantalla y quiero saber si esa subárea es exactamente el icono o no).
Tengo OpenCV a mano pero todavía no estoy tan acostumbrado.
Una posibilidad que pensé hasta ahora: Divide ambas imágenes en 10x10 celdas y para cada una de esas 100 celdas, compara el histograma de color. Entonces puedo establecer un valor de umbral compuesto y si el valor que obtengo está por encima de ese umbral, supongo que son similares.
Todavía no lo he intentado, pero creo que sería lo suficientemente bueno. Las imágenes ya son bastante similares (en mi caso de uso), por lo que puedo usar un valor de umbral bastante alto.
Supongo que hay docenas de otras posibles soluciones para esto que funcionarían más o menos (ya que la tarea en sí misma es bastante simple, ya que solo quiero detectar similitudes si realmente son muy similares). ¿Qué sugieres?
Hay algunas preguntas muy relacionadas / similares sobre cómo obtener una firma / huella digital / hash de una imagen:
- OpenCV / SURF ¿Cómo generar una imagen hash / huella digital / firma a partir de los descriptores?
- Huella digital de imagen para comparar la similitud de muchas imágenes
- Detección de imagen casi duplicada
- OpenCV: imagen de huella digital y comparación con base de datos .
- más , más , más , más , más , más , más
Además, me topé con estas implementaciones que tienen tales funciones para obtener una huella digital:
- pHash
- imgSeek ( repositorio de GitHub ) (GPL) basado en el documento Consulta rápida de imágenes de resolución múltiple
- coincidencia de imagen . Muy similar a lo que estaba buscando. Similar a pHash, basado en una firma de imagen para cualquier tipo de imagen, Goldberg et al . Utiliza Python y Elasticsearch.
- iqdb
- ImageHash . Soporta pHash.
- Deduplicador de imagen (imagededup) . Admite CNN, PHash, DHash, WHash, AHash.
Algunas discusiones sobre hashes de imágenes perceptuales: aquí
Un poco tópico: existen muchos métodos para crear huellas digitales de audio. MusicBrainz , un servicio web que proporciona búsqueda de canciones basada en huellas digitales, tiene una buena visión general en su wiki . Están utilizando AcoustID ahora. Esto es para encontrar coincidencias exactas (o en su mayoría exactas). Para encontrar coincidencias similares (o si solo tiene algunos fragmentos o mucho ruido), eche un vistazo a Echoprint . Una pregunta SO relacionada está aquí . Entonces parece que esto está resuelto para el audio. Todas estas soluciones funcionan bastante bien.
Aquí hay una pregunta algo más genérica sobre la búsqueda difusa en general . Por ejemplo, hay hashing sensible a la localidad y búsqueda de vecinos más cercanos .