web-dev-qa-db-fra.com

Comment fonctionne OpenCV ORB Feature Detector?

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 .

27
Adrian Chitescu

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:

  • descripteurs de flotteur:
    • TAMISER
    • SURF
  • descripteurs uchar:
    • ORBE
    • BREF

Et les correspondants correspondants:

  • pour les descripteurs de flotteur:
    • FlannBased
    • BruteForce<L2<float> >
    • BruteForce<SL2<float> > // depuis 2.3.1
    • BruteForce<L1<float> >
  • pour les descripteurs uchar:
    • BruteForce<Hamming>
    • BruteForce<HammingLUT>
    • FlannBased avec index LSH // depuis 2.4.0

Vous 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.

48
Andrey Kamaev