opencv - ¿Por qué el extractor opak FREAK elimina tantos puntos clave, específicamente utilizando el detector ORB?
feature-descriptor (4)
Aparte de la eliminación de los puntos de borde, como sugiere Jav_Rock, la enorme disminución de los puntos (¿¿inconsistente ?!) realmente depende del parámetro de tamaño almacenado en keyPoint. Incluso si establece scaleNormalized en falso, con un valor flotante para el parámetro de tamaño cercano a cero, FREAK simplemente descartará este punto clave. (pero no parece poder entender por qué, ya que el parámetro de tamaño del keyPoint solo se usa si scaleNormalized es verdadero: source )
Así que asegúrese de establecer el parámetro de tamaño en algo más grande que cero (por ejemplo, uno) si no está utilizando scaleNormalization.
Y para interpretarlo como un valor con la unidad ''pixelsize'' (cuando se usa scaleNormalization).
Por cierto el tamaño mínimo de punto clave es 7 por default .
Espero que esto ayude...
Estoy utilizando la interfaz OpenCV 2.4.3 c ++ para encontrar puntos coincidentes entre dos imágenes. El primer intento fue usar SURF. El único problema es el tiempo de consumo, así que probé el nuevo extractor FREAK. Al utilizar SURF para la detección y FREAK para la descripción, me di cuenta de que FREAK reduce el número de puntos clave a casi la mitad de los detectados, y las coincidencias resultantes no eran suficientes. Esa es la razón, intenté RÁPIDO para obtener más puntos clave. Los resultados:
- Detector de SURF, extractor de SURF, BFMatcher crosscheck true, RANSAC: primera imagen de 70 puntos clave, segunda imagen de 50 puntos clave, 200 ms. 250ms. 15ms. 15ms.
- Detector SURF, extractor FREAK, comprobación cruzada BFMatcher verdadero, RANSAC: 39 puntos clave, primera imagen, 30 puntos clave, segunda imagen (después de FREAK), 200 ms., 50 ms. , 0ms., 0ms. Resulta que hay muy pocos buenos emparejamientos.
- FAST detector, FREAK extractor, BFMatcher crosscheck true, RANSAC: 120 puntos clave, 90 puntos clave (69 y 48 puntos clave después de FREAK), 10 ms., 450 ms., 15 ms., 10 ms.
Después de eso, usé ORBFeatureDetector, y está obteniendo el mismo número de puntos clave que FAST, pero después del extractor FREAK, los puntos clave resultantes son 0 para cada imagen. ¿Estoy haciendo algo mal? ¿Son los puntos clave de ORB diferentes de los obtenidos en FAST? Tal vez podría abrir otra pregunta para esto, pero tengo la última. ¿Cuál podría ser la mejor combinación de detector / extractor para obtener los mismos resultados que mis primeros experimentos con SURF, pero reduciendo el tiempo de procesamiento? Porque a medida que obtengo más puntos clave, la parte del extractor también consume más tiempo, aunque uso FREAK.
En realidad, usaste el parámetro cross check = true. Esta es también una razón por la cual se eliminan muchos de tus puntos. Este parámetro, cuando es verdadero, es costoso desde el punto de vista computacional. Se utiliza para evitar pares de descriptores que no coinciden perfectamente durante el proceso de coincidencia.
Si tiene dos conjuntos de descriptores D1 y D2, entonces, estos parámetros solo permiten pares que coinciden comúnmente en las direcciones coincidentes D1-> D2 y D2-> D1.
entonces, todo depende de su aplicación, tal vez no necesite tanta precisión de coincidencia ...
Atentamente.
Alex
FAST es solo un detector de puntos clave (sin descriptor). Si combina RÁPIDO y utiliza para la descripción (multiescala) BREVE obtendrá ORB.
FREAK elimina puntos si no puede generar un descriptor para él, muchas veces esto ocurre en el borde de la imagen, ya que no puede generar un descriptor si cae fuera de la imagen del límite. Evito este problema aplicando un ROI antes de la extracción.
También uso FAST combinado con FREAK y obtengo los mejores resultados, pero todavía tengo el problema de reducir el tiempo de extracción, que es demasiado alto para mí.