OpenCV ORB功能检测器如何工作?

Adr*_*scu 27 android opencv alignment computer-vision

我想使用ORB特征检测器和提取器实现基于特征的对齐算法.
到目前为止,我使用OpenCV中的ORB类 提取了这些特征ORB orb;
orb(gray_image,Mat(),features.keypoints,features.descriptors);
,并使用openCV中的knnMatch函数进行匹配.matcher.knnMatch(features1.descriptors, features2.descriptors, pair_matches,2); 之后我尝试使用findHomography函数找到一个单应性,但是这个函数需要在图像特征之间至少有4个匹配,并且在大多数情况下我测试过的图像不到4.

有人用过这个功能吗?是否有任何关于它的文档,或关于OpenCV的ORB类(ORB构造函数参数的含义)?

PS这是我的第一个问题.我不能发布超过2个链接.对于opencv文档,请使用此方法.

And*_*aev 48

更新:现在它 OpenCV的文档中,在这里: http://opencv.itseez.com/modules/features2d/doc/feature_detection_and_description.html#orb

有关该算法的详细说明,请访问:http://www.willowgarage.com/sites/default/files/orb_final.pdf


在OpenCV文档中没有提到它,但实际上OpenCV具有:

两种类型的描述符:

  • 浮点描述符:
    • 冲浪
  • uchar描述符:
    • ORB
    • 简要

和相应的匹配器:

  • 浮点描述符:
    • FlannBased
    • BruteForce<L2<float> >
    • BruteForce<SL2<float> > //从2.3.1开始
    • BruteForce<L1<float> >
  • 对于uchar描述符:
    • BruteForce<Hamming>
    • BruteForce<HammingLUT>
    • FlannBased LSH索引//从2.4.0开始

因此,您需要修改代码以BruteForce<Hamming>用于ORB描述符的匹配器.可以使用L2或L1距离来匹配uchar描述符,但结果将不正确并且findHomography返回不令人满意的结果.

  • 谢谢你快速的回复.现在使用BruteForceMatcher可以更好地工作,但是对于一些图片我仍然得到了一些令人不满意的结果.我认为ORB可能对旋转/缩放很敏感,因为它使用了BRIEF描述符.我对吗? (2认同)