Tengo una base de datos muy grande de imágenes jpeg, alrededor de 2 millones. Me gustaría hacer una búsqueda difusa de duplicados entre esas imágenes. Las imágenes duplicadas son dos imágenes que tienen muchos (alrededor de la mitad) de sus píxeles con valores idénticos y el resto están desactivados por aproximadamente +/- 3 en sus valores R/G/B. Las imágenes son idénticas a simple vista. Es la clase de diferencia que obtendrías al volver a comprimir un jpeg.¿Cómo puedo reconocer imágenes ligeramente modificadas?
Ya tengo una forma infalible de detectar si dos imágenes son idénticas: sumo el brillo delta sobre todos los píxeles y lo comparo con un umbral. Este método ha demostrado ser 100% exacto, pero hacer 1 foto contra 2 millones es increíblemente lento (horas por foto).
Me gustaría tomar las huellas dactilares de las imágenes de forma que solo pudiera comparar las huellas dactilares en una tabla hash. Incluso si puedo reducir de manera confiable la cantidad de imágenes que necesito comparar con solo 100, estaría en buena forma para comparar de 1 a 100. ¿Cuál sería un buen algoritmo para esto?
Siempre es bueno ver publicaciones revisadas por pares sobre SO. +1 –
Utilicé min-Hash con resultados fantásticos. En resumen: 24 horas para indexar 1 millón de fotos. 20 imágenes clasificadas por segundo. Gracias por el puntero! – Eyal
¿Hay algún código fuente disponible? – Lothar