OpenCV ORB 特征检测器是如何工作的?

28
我想使用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构造函数参数的含义)的文档?

P.S. 这是我的第一个问题。我无法发布超过2个链接。要查看OpenCV文档,请使用this

1个回答

49

更新:现在可以在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有:

两种类型的描述符:

  • float描述符:
    • SIFT
    • SURF
  • uchar描述符:
    • ORB
    • BRIEF

以及相应的匹配器:

  • 对于float描述符:
    • 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>匹配器。可以对uchar描述符使用L2或L1距离进行匹配,但结果将不正确,并且findHomography返回不令人满意的结果。


2
谢谢您的迅速回复。使用BruteForceMatcher效果更好了,但其中一些图片仍然没有让我满意。我认为ORB可能会对旋转/缩放比较敏感,因为它使用BRIEF描述符。我的想法正确吗? - Adrian Chitescu
你知道在哪里可以找到更多关于OpenCV中ORB算法的实现的信息吗?我看到ORB类可以接收一些参数(常规参数),但我不知道如何设置它们。 - Adrian Chitescu
实际上,ORB描述符基于BRIEF算法,但并不完全相同(ORB是Oriented BRIEF的缩写)。因此,ORB对比旋转更加敏感。这里有一个OpenCV特征的新比较。而ORB是一种全新的算法,仅在今年夏季被添加到OpenCV中,因此我认为目前唯一解释ORB的论文是ORB作者的原始论文。 - Andrey Kamaev
1
这可能有点晚了,但如果您想获取更多关于ORB的信息,原始论文在此处发布:http://www.willowgarage.com/sites/default/files/orb_final.pdf。它是由Willow Garage专门为OpenCV编写的,因此我想它非常有用(尽管我没有阅读过它 - 他们去年在ICCV上有一张好海报!) - n00dle
@andrey:你确定只有在SIFT-SURF中才能使用L2<float>吗?在我的项目中,即使是ORB也可以使用。 - dynamic
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接