Je souhaite implémenter un algorithme d'alignement basé sur les fonctionnalités à l'aide du détecteur et de l'extracteur de fonctionnalités ORB.
Jusqu'à présent, j'ai extrait les fonctionnalités en utilisant la classe ORB d'OpenCV ORB orb;
orb(gray_image,Mat(),features.keypoints,features.descriptors);
et les a mis en correspondance en utilisant la fonction knnMatch de openCV matcher.knnMatch(features1.descriptors, features2.descriptors, pair_matches,2);
Après cela, j'essaie de trouver une homographie en utilisant la fonction findHomography, mais cette fonction a besoin d'au moins 4 correspondances entre les caractéristiques de l'image, et sur la plupart des images que j'ai testées, j'en ai obtenu moins de 4.
Quelqu'un at-il utilisé cette fonctionnalité? Existe-t-il une documentation à ce sujet ou sur la classe ORB d'OpenCV (la signification des paramètres du constructeur ORB)?
P.S. Ceci est ma première question. et je ne peux pas poster plus de 2 liens. Pour la documentation opencv, utilisez this .
MISE À JOUR: Maintenant est dans la documentation OpenCV, ici: http://opencv.itseez.com/modules/features2d/doc/ feature_detection_and_description.html # orb
Une description détaillée de l'algorithme se trouve ici: http://www.willowgarage.com/sites/default/files/orb_final.pdf
Il n'est pas mentionné dans la documentation d'OpenCV mais en réalité OpenCV a:
Deux types de descripteurs:
Et les correspondants correspondants:
FlannBased
BruteForce<L2<float> >
BruteForce<SL2<float> >
// depuis 2.3.1BruteForce<L1<float> >
BruteForce<Hamming>
BruteForce<HammingLUT>
FlannBased
avec index LSH // depuis 2.4.0Vous devez donc modifier votre code pour utiliser par exemple BruteForce<Hamming>
correspondeur pour les descripteurs ORB. Il est possible d'utiliser la distance L2 ou L1 pour faire correspondre les descripteurs uchar mais les résultats seront incorrects et findHomography renvoie des résultats insatisfaisants.