Actualmente estoy trabajando y comparando el rendimiento de varios detectores de características proporcionados por OpenCV como base para la coincidencia de características visuales.
Estoy usando descriptores SIFT . He logrado una coincidencia satisfactoria (después de rechazar malas coincidencias) al detectar las funciones MSER y DoG (SIFT) .
Actualmente, estoy probando mi código con GFTT (Buenas características para rastrear - Esquinas de Harris) para obtener una comparación, y también porque en la aplicación final, un conjunto de características GFTT estará disponible desde el proceso de seguimiento de características visuales.
Estoy utilizando cv::FeatureDetector::detect(...)
la cual me proporciona un std::vector<cv::KeyPoint>
lleno detectados características / puntos clave / regiones de interés . La estructura cv::KeyPoint
contiene información básica sobre la ubicación de la característica, así como información sobre size
y octave
en la que se ha detectado el punto clave.
Mis primeros resultados con GFTT fueron terribles hasta que comparé lo típico size
y los octave
parámetros en diferentes tipos de características:
- MSER establece el tamaño (entre 10 y 40 px) y deja la octava a 0
- DoG (SIFT) establece tanto el tamaño como la octava (relación tamaño / octava entre 20 y 40)
- GFTT los parámetros son siempre : tamaño = 3 , octava = 0
Supongo que esto se debe a que el propósito principal de las funciones de GFTT no se usaba en la coincidencia, sino solo en el seguimiento. Esto explica la baja calidad de los resultados coincidentes, ya que los descriptores extraídos de características tan pequeñas dejan de ser discriminatorios e invariables para muchas cosas , incluidos los pequeños cambios de 1 píxel.
Si fijo manualmente el size
de GFTT a 10 - 12 , consigo buenos resultados, muy similares a cuando se utiliza MSER o perro (SIFT) .
Mi pregunta es: ¿hay una mejor manera de determinar cuánto aumentar el size
(y / o octave
) que simplemente ir con 10 para ver si funciona ? Quiero evitar hardcoding el size
aumento, si es posible y determinar mediante programación, pero hardcoding está bien , siempre y cuando tengo algunos argumentos sólidos que respaldan mis elecciones de la nueva size
/ size
aumento / size
algoritmo de estimación .