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

时间:2011-08-29 16:04:29

标签: android opencv alignment computer-vision

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

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

P.S。这是我的第一个问题。我不能发布超过2个链接。对于opencv文档,请使用this

1 个答案:

答案 0 :(得分: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有:

两种类型的描述符:

  • 浮点描述符:
    • SIFT
    • SURF
  • 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以来

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