Estos algoritmos son generalmente a base de huella digital. La huella dactilar es una estructura de datos razonablemente pequeña, algo así como un código hash largo. Sin embargo, los objetivos de la función de huella digital son opuestos a los objetivos de la función hash. Una buena función hash debería generar códigos muy diferentes para objetos muy similares (pero no iguales). La función de huella dactilar debería, por el contrario, generar la misma huella dactilar para imágenes similares.
Solo para darle un ejemplo, esta es una función de huella dactilar (no muy buena): cambie el tamaño de la imagen a 32x32 cuadrados, normalice y cuantifique los colores, reduciendo el número de colores a 256. Luego, tiene Huella digital de 1024 bytes para la imagen. Simplemente mantenga una tabla de huellas dactilares => [lista de URLs de imágenes]. Cuando necesite buscar imágenes similares a una imagen determinada, simplemente calcule su valor de huella digital y encuentre la lista de imágenes correspondiente. Fácil.
Lo que no es fácil: para ser útil en la práctica, la función de huella digital debe ser robusta contra cultivos, transformaciones afines, cambios de contraste, etc. La construcción de buenas funciones de huellas dactilares es un tema de investigación separado. Muy a menudo se ajustan a mano y utilizan una gran cantidad de heurísticas (es decir,utilice el conocimiento sobre los contenidos fotográficos típicos, sobre el formato de imagen/datos adicionales en EXIF, etc.)
Otra variación es utilizar más de una función de huella digital, intente aplicar cada una de ellas y combine los resultados. En realidad, es similar a encontrar textos similares. Solo en lugar de "bolsa de palabras", la búsqueda de similitud de imágenes utiliza una "bolsa de huellas dactilares" y determina cuántos elementos de una bolsa son los mismos que los elementos de otra bolsa. Cómo hacer que esta búsqueda sea eficiente es otro tema.
Ahora, con respecto a los artículos/papeles. No pude encontrar un buen artículo que brindara una visión general de los diferentes métodos. La mayoría de los artículos públicos que conozco abordan la mejora específica de métodos específicos. Podría recomendar comprobar estos:
"Content Fingerprinting Using Wavelets". Este artículo es sobre huellas dactilares de audio usando wavelets, pero el mismo método se puede adaptar para huellas digitales de imágenes.
PERMUTATION GROUPING: INTELLIGENT HASH FUNCTION DESIGN FOR AUDIO & IMAGE RETRIEVAL. Información sobre hashes sensibles a la localidad.
Bundling Features for Large Scale Partial-Duplicate Web Image Search. Un muy buen artículo, habla sobre SIFT y características de agrupamiento para la eficiencia. También tiene una buena bibliografía al final
Enlace interesante ... policía ortográfica: creo que el sitio se llama realmente "TinEye", no "TinyEye". :) –
@Zack Mulgrew, arreglado. – mmcdole