Classification des détecteurs, des extracteurs et les allumettes
je suis nouveau à opencv et j'essaie de mettre en œuvre la correspondance d'image entre deux images. Dans ce but, j'essaie de comprendre la différence entre les descripteurs de caractéristiques, les extracteurs de descripteurs et les matrices de descripteurs. Je suis tombé sur beaucoup de termes et j'ai essayé de les lire sur le site de documentation d'opencv, mais je n'arrive pas à comprendre les concepts. J'ai compris la différence de base ici. différence entre la détection D'une caractéristique et L'Extraction D'un descripteur
mais je suis tombé sur les termes suivants en étudiant sur le sujet:
FAST, GFTT, SIFT, SURF, MSER, STAR, ORB, BRISK, FREAK, BRIEF
je comprends comment rapide, SIFT, SURF travailler, mais ne semble pas pouvoir comprendre que l'un des ci-dessus sont seulement des détecteurs et qui sont des extracteurs.
puis il y a les allumettes.
FlannBased, BruteForce, knnMatch et probablement d'autres.
après quelques lectures, j'ai pensé que certains assemblages ne pouvaient être utilisés qu'avec certains Extracteurs comme expliqué ici. Comment fonctionne OpenCV Orb Feature Detector? La classification donnée est assez claire mais c'est seulement pour quelques extracteurs et je ne comprends pas la différence entre le flotteur et uchar.
donc en gros, quelqu'un peut s'il vous plaît
- classer les types de détecteurs, extracteurs et matches en fonction du flotteur et de l'uchar, comme indiqué, ou un autre type de classification?
- expliquer la différence entre la classification des flotteurs et celle des uchar ou quelle que soit la classification utilisée?
- comment initialiser (coder) différents types de détecteurs, extracteurs et matches?
je sais que c'est demander beaucoup, mais je vais être très reconnaissant. Remercier.
1 réponses
je comprends comment rapide, SIFT, SURF travailler, mais ne semble pas comprendre ceux qui ne sont que des détecteurs et qui sont des extracteurs.
Fondamentalement, à partir de la liste des détecteurs/extracteurs (lien vers les articles: RAPIDE , GFTT , EIPD , SURF , MSER , STAR , ORB , BRISK , FREAK , BRIEF ), certains ne sont que des détecteurs de caractéristiques ( FAST, GFTT ), d'autres sont à la fois des détecteurs de caractéristiques et des extracteurs de descripteurs ( SIFT, SURF, Orb, FREAK ).
si je me souviens bien, bref n'est qu'un extracteur de descripteurs, il a donc besoin de fonctionnalités détectées par d'autres un algorithme comme FAST ou ORB.
pour être sûr de ce qui est, vous devez soit parcourir l'article lié à l'algorithme ou parcourir la documentation opencv pour voir qui a été mis en œuvre pour la classe FeatureDetector
ou qui était pour la classe DescriptorExtractor
.
Q1: classer les types de détecteurs, extracteurs et matches en fonction de: float et uchar, comme mentionné, ou un autre type de classification?
Q2: expliquer la différence entre la classification des flotteurs et celle des uchar ou quelle que soit la classification utilisée?
en ce qui concerne questions 1 et 2 , pour les classer comme flottant et uchar, le lien que vous avez déjà posté est la meilleure référence que je connaisse, peut-être que quelqu'un pourra le compléter.
Q3: indiquer comment initialiser (coder) différents types de détecteurs, extracteur et les allumettes?
répondant à question 3 , OpenCV a fait le code pour utiliser les différents types tout à fait la même - Principalement, vous devez choisir un détecteur de caractéristique. La plupart de la différence est dans le choix du type de matcher et vous avez déjà mentionné les 3 Que OpenCV A. Votre meilleur pari ici est de lire la documentation, exemples de code , et les questions connexes de débordement de pile. En outre, certains billets de blog sont un excellent source d'information, comme ces série de référentiels de détecteur de fonctionnalités par Ievgen Khvedchenia (le blog n'est plus disponible donc j'ai dû créer une copie de texte brut à partir de son cache google).
Matchers sont utilisés pour trouver si un descripteur est similaire à un autre descripteur d'une liste. Vous pouvez comparer votre descripteur de requête avec tous les autres descripteurs de la liste ( BruteForce ) ou vous utilisez un mieux heuristique ( FlannBased, knnMatch ). Le problème est que les heuristiques ne fonctionnent pas pour tous les types de descripteurs. Par exemple, l'implémentation basée sur Flann ne fonctionnait qu'avec les descripteurs float
, mais pas avec les descripteurs uchar
(mais depuis 2.4.0, FlannBased avec LSH index peut être appliqué aux descripteurs uchar).
citant cette application-Solut blog post à propos des DescriptorMatcher
types:
le Descripteurmatcher vient dans les variétés " FlannBased", "BruteForceMatcher", "BruteForce-L1"et" BruteForce-HammingLUT". Le "FlannBased" matcher utilise la bibliothèque flann (fast pour approximate voisins les plus proches) bibliothèque sous le capot d'effectuer plus rapidement, mais correspondance approximative. Les versions" BruteForce -* " searchent de façon exhaustive le dictionnaire pour trouver la correspondance la plus proche pour un trait d'image à un mot dans le dictionnaire.
certaines des combinaisons les plus populaires sont:
la Fonction des Détecteurs de Decriptor Extracteurs / types de Rapprochement
-
(FAST, SURF) / SURF / FlannBased
-
(FAST, SIFT) / SIFT / FlannBased
-
(RAPIDE, ORB) / ORBE / Bruteforce
-
(FAST, ORB) / BRIEF / Bruteforce
-
(FAST, SURF) / FREAK / Bruteforce
vous avez peut-être aussi remarqué qu'il y a quelques adaptateurs (dynamique, pyramide, grille) aux détecteurs. L'App-Solut blog post résume très bien leur utilisation:
(...) et il y a aussi un couple de les adaptateurs que l'on peut utiliser pour changer le comportement des détecteurs de points clés. Par exemple le
Dynamic
adaptateur qui ajuste un seuil de détection spécifique au type de détecteur jusqu'à ce qu'il y ait suffisamment de points clés dans une image ou l'adaptateurPyramid
qui construit une pyramide gaussienne pour détecter les points sur les multiples Scales. L'adaptateurPyramid
est utile pour les descripteurs de ne sont pas invariant d'échelle.
:
-
ce blog post de Yu Lu fait une description sommaire très agréable sur SIFT, FAST, SURF, BRIEF, ORB, BRISK et FREAK.
-
ces série de billets de Gil Levi font aussi des résumés détaillés pour plusieurs de ces algorithmes (bref, ORB, BRISK et FREAK).