Actualmente extiendo una biblioteca de imágenes utilizada para categorizar imágenes y quiero encontrar imágenes duplicadas, imágenes transformadas e imágenes que contienen o están contenidas en otras imágenes.
He probado la implementación SIFT de OpenCV y funciona muy bien pero sería bastante lento para múltiples imágenes. Demasiado rápido, pensé que podría extraer las características y guardarlas en una base de datos, ya que muchos otros metadatos relacionados con imágenes ya se están reteniendo allí.Comparación de las características de SIFT almacenadas en una base de datos mysql
¿Cuál sería la forma más rápida de comparar las características de una nueva imagen con las características de la base de datos?
Por lo general, la comparación se hace calculando la distancia euclidiana usando kd-trees, FLANN, o con el Pyramid Match Kernel que encontré en otro hilo aquí en SO, pero aún no he investigado mucho.
Ya que no sé de una manera de ahorrar y buscar un kd-árbol en una base de datos de manera eficiente, estoy actualmente sólo ver tres opciones:
* Vamos MySQL calcular la distancia euclídea a todas las características de la base de datos , aunque estoy seguro de que tomará un tiempo irrazonable para más de unas pocas imágenes.
* Cargue todo el conjunto de datos en la memoria al principio y construya los kd-tree (s). Esto probablemente sea rápido, pero con mucha memoria. Además, todos los datos deberían transferirse desde la base de datos.
* Guardar los árboles generados en la base de datos y cargarlos a todos, sería el método más rápido pero también generaría grandes cantidades de tráfico ya que con las nuevas imágenes los árboles-kd tendrían que reconstruirse y enviarse al servidor.
Estoy usando la implementación SIFT de OpenCV, pero no estoy totalmente equivocado. Si hay un extractor de funciones más adecuado para esta tarea (y más o menos igualmente robusto) me alegra que alguien pueda sugerir uno.
OpenCV ya incluye una implementación de SURF así como Kd-Trees para la coincidencia (ya no es necesario SIFT). Y: Esto no está directamente relacionado con su pregunta, pero es posible que desee considerar la coincidencia de histogramas (u otras características globales) primero. De esta forma, posiblemente podría reducir drásticamente la cantidad de pares de imágenes para compararlas con las características lentas de alta dimensión al eliminar de antemano todos los candidatos con histogramas muy diferentes. – zerm