2011-11-30 16 views
6

Quiero comparar los descriptores SURF en una imagen (A), con los descriptores en varias otras imágenes (B, C, D, ..) para encontrar la imagen más similar a A. Los descriptores tienen 64 dimensiones.Comparar descriptores SURF en una imagen con una lista de descriptores en otras imágenes

Usando C# y Emgu, la coincidencia se hace comparando los descriptores de A con B, luego con C, luego con D's, y así sucesivamente. Esto es muy lento cuando el recuento de imágenes supera 10, porque muchos descriptores irrelevantes deben buscarse.

Para acelerar el proceso, el camino correcto (según los artículos) parece ser construir un árbol kd para los descriptores en (B, C, D, ..) para encontrar rápidamente el descriptor en A. El árbol kd se divide en dimensiones de acuerdo con el nivel. La primera división se decide por la 1ª dimensión, la segunda división por la 2.ª dimensión, etc. Sin embargo, cuando el número de dimensiones es alto para los descriptores (64), el beneficio de usar un árbol KD se reduce.

Así que mi pregunta es: ¿qué experiencia o conocimiento tiene con el uso de un árbol KD/otro método para que coincida con los descriptores SURF de una imagen (A) a varias imágenes (B, C, D ..). ¿Qué funciona bien y no tan bien y has hecho algo como esto?

FLANN sería una opción aquí, ya que es utilizado por OpenCV, pero no puedo encontrar una versión para C#. Aproximadamente Nearest Boor también sería una opción para acelerar el árbol kd, pero ¿funciona bien con las imágenes que coinciden?

Saludos Morten

Respuesta

0

Usted puede tratar de FLANN en C o C++. No es muy complicado.

Sin embargo, estoy probando FLANN en C++, pero el tiempo de coincidencia (usando funciones SURF, FLANN, consulta en 1,000 imágenes) es muy largo, de 20 segundos a 400 segundos (dependiendo del número de vectores de función por imagen).

Cuestiones relacionadas