OpenCV ORB 特征检测器如何工作?
Posted
技术标签:
【中文标题】OpenCV ORB 特征检测器如何工作?【英文标题】:How Does OpenCV ORB Feature Detector Work? 【发布时间】:2011-11-06 03:42:08 【问题描述】:我想使用 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 构造函数参数的含义)?
附:这是我的第一个问题。我不能发布超过 2 个链接。对于 opencv 文档,请使用 this。
【问题讨论】:
【参考方案1】:更新:现在它是在 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 可能对旋转/缩放敏感,因为它使用简要描述符。我说的对吗? 无论如何,你知道我在哪里可以找到更多关于 opencv 中的 ORB 实现的信息吗?我看到 ORB 类可以接收一些参数(CommonParams),但我不知道如何设置它们。 其实ORB描述符是基于BRIEF的,但并不完全相同(ORB是Oriented Brief的缩写)。所以 ORB 对缩放比旋转更敏感。这是 OpenCV 功能的new comparison。而ORB是今年夏天才加入OpenCV的全新算法,所以我认为目前唯一解释ORB的论文是ORB作者的原创论文。 另外我应该指出,我认为 ORB 还没有被移植到 python 绑定中。 这可能是晚了,但是如果你想了解更多关于ORB的信息,原论文贴在这里:willowgarage.com/sites/default/files/orb_final.pdf它是Willow Garage专门为OpenCV写的,所以我想是相当有用(虽然我没有读过——他们去年在 ICCV 上确实有一张很好的海报!)以上是关于OpenCV ORB 特征检测器如何工作?的主要内容,如果未能解决你的问题,请参考以下文章