c++ - tutorial - Clasificación de detectores, extractores y mezcladores
opencv tutorial c++ (1)
Entiendo cómo funcionan las funciones FAST, SIFT, SURF, pero parece que no pueden determinar cuáles de las anteriores son solo detectores y cuáles son extractores.
Básicamente, de esa lista de detectores / extractores de funciones (enlace a artículos: FAST , GFTT , SIFT , SURF , MSER , STAR , ORB , BRISK , FREAK , BRIEF ), algunos de ellos son solo detectores de funciones ( FAST, GFTT ), otros son ambos cuentan con detectores y descriptores extractores ( SIFT, SURF, ORB, FREAK ).
Si mal no recuerdo, BRIEF es solo un extractor de descriptores, por lo que necesita funciones detectadas por algún otro algoritmo como FAST u ORB.
Para asegurarse de cuál es cuál, debe examinar el artículo relacionado con el algoritmo o examinar la documentación de opencv para ver cuál se implementó para la clase FeatureDetector
o cuál fue para la clase DescriptorExtractor
.
Q1: clasifique los tipos de detectores, extractores y mezcladores basados en float y uchar, como se mencionó, o algún otro tipo de clasificación?
Q2: explique la diferencia entre la clasificación float y uchar o la clasificación que se use?
En cuanto a las preguntas 1 y 2 , para clasificarlas como float y uchar, el enlace que ya ha publicado es la mejor referencia que conozco, quizás alguien pueda completarlo.
Q3: mencione cómo inicializar (codificar) varios tipos de detectores, extractores y mezcladores?
Respondiendo a la pregunta 3 , OpenCV creó el código para usar los distintos tipos de la misma manera: principalmente tiene que elegir un detector de funciones. La mayor parte de la diferencia está en elegir el tipo de marcador y ya mencionaste los 3 que tiene OpenCV. Su mejor apuesta aquí es leer la documentación, ejemplos de código y preguntas relacionadas con desbordamiento de pila. Además, algunas publicaciones en el blog son una excelente fuente de información, como esta serie de benchmarks de detectores de funciones de Ievgen Khvedchenia (El blog ya no está disponible, así que tuve que crear una copia de texto sin formato de su caché de google).
Los matchers se utilizan para encontrar si un descriptor es similar a otro descriptor de una lista. Puede comparar su descriptor de consulta con todos los demás descriptores de la lista ( BruteForce ) o utilizar una mejor heurística ( FlannBased, knnMatch ). El problema es que las heurísticas no funcionan para todos los tipos de descriptores. Por ejemplo, la implementación FlannBased solía funcionar solo con descriptores float
pero no con uchar
(Pero desde 2.4.0, el índice FlannBased con LSH se puede aplicar a descripciones uchar).
Citando esta entrada del blog de App-Solut sobre los tipos de DescriptorMatcher
:
El DescriptorMatcher viene en las variedades "FlannBased", "BruteForceMatcher", "BruteForce-L1" y "BruteForce-HammingLUT". El emparejador "FlannBased" utiliza la biblioteca flanqueada (biblioteca rápida para los vecinos más cercanos) debajo del capó para realizar una coincidencia más rápida pero aproximada. Las versiones de "BruteForce- *" exploran exhaustivamente el diccionario para encontrar la coincidencia más cercana para una función de imagen con una palabra en el diccionario.
Algunas de las combinaciones más populares son:
Feature Detectors / Decriptor Extractors / Matchers types
(RÁPIDO, SURF) / SURF / FlannBased
(FAST, SIFT) / SIFT / FlannBased
(RÁPIDO, ORB) / ORB / Bruteforce
(RÁPIDO, ORB) / BRIEF / Bruteforce
(RÁPIDO, SURF) / FREAK / Bruteforce
También podría haber notado que hay algunos adaptadores (dinámico, pirámide, cuadrícula) a los detectores de funciones. La publicación del blog de App-Solut resume muy bien su uso:
(...) y también hay un par de adaptadores que se pueden usar para cambiar el comportamiento de los detectores de puntos clave. Por ejemplo, el adaptador
Dynamic
que ajusta un umbral de detección específico del tipo de detector hasta que se encuentran suficientes puntos clave en una imagen o el adaptador dePyramid
que construye una pirámide gaussiana para detectar puntos en múltiples escalas. El adaptadorPyramid
es útil para los descriptores de características que no son invariables a escala.
Otras lecturas:
Esta publicación de blog de Yu Lu ofrece una muy buena descripción resumida en SIFT, RÁPIDO, SURF, BREVE, ORB, BRISK y FREAK.
Estas series de publicaciones de Gil Levi también hacen resúmenes detallados de varios de estos algoritmos (BREVE, ORB, BRISK y FREAK).
Soy nuevo en opencv y trato de implementar la coincidencia de imágenes entre dos imágenes. Para este propósito, trato de entender la diferencia entre los descriptores de características, los extractores de descriptores y los mezcladores de descriptores. Encontré muchos términos e intenté leer sobre ellos en el sitio web de documentación de opencv, pero parece que no puedo entender bien los conceptos. Entendí la diferencia básica aquí. Diferencia entre detección de características y extracción de descriptores
Pero encontré los siguientes términos mientras estudiaba el tema:
RÁPIDO, GFTT, SIFT, SURF, MSER, STAR, ORB, BRISK, FREAK, BREVE
Entiendo cómo funcionan las funciones FAST, SIFT, SURF, pero parece que no pueden determinar cuáles de las anteriores son solo detectores y cuáles son extractores.
Luego están los matchers.
FlannBased, BruteForce, knnMatch y probablemente algunos otros.
Después de leer, calculé que ciertos mezcladores solo se pueden usar con ciertos extractores como se explica aquí. ¿Cómo funciona OpenCV ORB Feature Detector? La clasificación dada es bastante clara, pero es solo para unos pocos extractores y no entiendo la diferencia entre float y uchar.
Entonces, básicamente, alguien puede por favor
- clasificar los tipos de detectores, extractores y mezcladores basados en float y uchar, como se mencionó, o algún otro tipo de clasificación?
- explicar la diferencia entre la clasificación float y uchar o cualquiera que sea la clasificación que se use?
- mencionar cómo inicializar (codificar) varios tipos de detectores, extractores y mezcladores?
Sé que está pidiendo mucho, pero estaré muy agradecido. Gracias.