with tutorial single shot recognition learning hog dog detector and c++ image-processing opencv computer-vision feature-detection

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 de Pyramid que construye una pirámide gaussiana para detectar puntos en múltiples escalas. El adaptador Pyramid es útil para los descriptores de características que no son invariables a escala.

Otras lecturas:

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

  1. clasificar los tipos de detectores, extractores y mezcladores basados ​​en float y uchar, como se mencionó, o algún otro tipo de clasificación?
  2. explicar la diferencia entre la clasificación float y uchar o cualquiera que sea la clasificación que se use?
  3. mencionar cómo inicializar (codificar) varios tipos de detectores, extractores y mezcladores?

Sé que está pidiendo mucho, pero estaré muy agradecido. Gracias.