![]() |
OpenCV 4.12.0
开源计算机视觉
|
在本章中,
作为OpenCV爱好者,关于ORB最重要的事情是它来自“OpenCV实验室”。该算法由Ethan Rublee、Vincent Rabaud、Kurt Konolige和Gary R. Bradski在他们2011年的论文ORB: An efficient alternative to SIFT or SURF中提出。正如标题所说,它在计算成本、匹配性能以及最主要的专利方面,是SIFT和SURF的一个很好的替代方案。是的,SIFT和SURF是有专利的,你应该为使用它们付费。但是ORB不是!!!
ORB基本上是FAST关键点检测器和BRIEF描述符的融合,并进行了许多修改以增强性能。首先,它使用FAST找到关键点,然后应用Harris角点度量来找到其中的前N个点。它还使用金字塔来生成多尺度特征。但一个问题是,FAST不计算方向。那么旋转不变性呢?作者提出了以下修改。
它计算以位于中心的角点为中心的图像块的强度加权质心。从该角点到质心的向量方向给出了方向。为了提高旋转不变性,矩的计算使用了x和y,它们应该在半径为\(r\)的圆形区域内,其中\(r\)是图像块的大小。
现在对于描述符,ORB使用BRIEF描述符。但是我们已经看到BRIEF在旋转方面的表现很差。因此,ORB所做的是根据关键点的方向“引导”BRIEF。对于位置\((x_i, y_i)\)处的\(n\)个二元测试的任何特征集,定义一个\(2 \times n\)矩阵\(S\),它包含这些像素的坐标。然后,使用图像块的方向\(\theta\),找到其旋转矩阵并将\(S\)旋转以获得引导(旋转)版本\(S_\theta\)。
ORB将角度离散化为\(2 \pi /30\)(12度)的增量,并构建一个预计算BRIEF模式的查找表。只要关键点方向\(\theta\)在视图中保持一致,就会使用正确的点集\(S_\theta\)来计算其描述符。
BRIEF有一个重要的特性,即每个比特特征都有很大的方差,并且均值接近0.5。但是一旦它沿着关键点方向定向,它就会失去这个特性并变得更加分散。高方差使特征更具区分性,因为它对输入做出不同的响应。另一个理想的特性是测试是不相关的,因为这样每个测试都会对结果做出贡献。为了解决所有这些问题,ORB在所有可能的二元测试中运行贪婪搜索,以找到那些具有高方差和接近0.5的均值,以及不相关的测试。结果称为rBRIEF。
对于描述符匹配,使用了改进传统LSH的多探针LSH。该论文称ORB比SURF和SIFT快得多,并且ORB描述符比SURF效果更好。ORB是在低功耗设备中进行全景拼接等的不错选择。
与往常一样,我们必须使用函数cv.ORB()或使用feature2d公共接口创建一个ORB对象。它有许多可选参数。最有用的参数是nFeatures,它表示要保留的最大特征数(默认为500),scoreType表示是使用Harris分数还是FAST分数对特征进行排序(默认情况下,是Harris分数)等。另一个参数WTA_K决定了产生定向BRIEF描述符的每个元素的点数。默认情况下是2,即一次选择两个点。在这种情况下,对于匹配,使用NORM_HAMMING距离。如果WTA_K是3或4,需要3或4个点来生成BRIEF描述符,则匹配距离由NORM_HAMMING2定义。
以下是一个简单的代码,展示了ORB的用法。
请参阅下面的结果
ORB特征匹配,我们将在另一章中进行。