ORB(定向快速旋转简报)

ORB(定向快速旋转简报)

目标:我们来看看球体的特征

理论

作为一个OpenCV爱好者,来自“OpenCV实验室”的ORB。ORB算法是由伊桑·鲁布利、文森特·拉伯德、库尔特·科诺里奇和加里·布拉德斯基在他们的论文《球体:2011年筛选或冲浪的有效替代品》中提出的。顾名思义,它在计算成本、匹配性能以及主要专利等方面是SIFT和SURF的一个很好的替代品。

ORB基本上是一个快速关键点检测器和简短描述符的融合,通过许多修改来提高性能。首先用快速法寻找关键点,然后用Harris角点法寻找其中的N个顶点。它还使用棱锥体生成多尺度特征。但有一个问题是,FAST不能计算方向。那么旋转不变性呢?作者提出了以下修改。

它计算位于中心角点的面片的强度加权质心。矢量从这个角点到质心的方向给出了方向。为了提高旋转不变性,用x和y计算矩,x和y应该在半径r的圆形区域内,其中r是面片的大小。

现在对于描述符,ORB使用简短的描述符。不过,我们已经看到,这场比赛在轮换中表现不佳。所以ORB所做的就是根据关键点的方向来“引导”BRIEF。对于在位置(x_i,y_i)处由n个二进制测试组成的任何特征集,定义一个包含这些像素坐标的2倍n矩阵。然后使用面片的方向,找到它的旋转矩阵,并旋转S,得到转向(旋转)版本S。

ORB将角度离散为2π/30(12度)的增量,并构造一个预计算简短模式的查找表。只要关键点方向θ在视图中是一致的,则将使用正确的点集Sθ来计算其描述符。

BRIEF有一个重要的特性,即每个位特征都有一个大的方差和一个平均值0.5分. 但一旦它沿着关键点方向定向,它就失去了这个属性,变得更加分散。高方差使特征更具区分性,因为它对输入的响应是不同的。另一个可取的特性是使测试不相关,从那时起,每个测试都将有助于结果。为了解决所有这些问题,ORB在所有可能的二进制测试中运行贪婪搜索,以找到方差和均值都接近0.5分,以及不相关。结果称为rBRIEF。

在说明符匹配方面,采用了多探针LSH算法,对传统LSH算法进行了改进。论文说ORB比SURF快得多,SIFT和ORB描述符比SURF工作得更好。在低功耗全景拼接等设备中,ORB是一个很好的选择。

OpenCV中的球体

像往常一样,我们必须用函数创建一个ORB对象,化学气相色谱仪(或使用feature2d公共接口。它有许多可选参数。最有用的是nFeatures,它表示要保留的特征的最大数量(默认值为500),scoreType表示Harris score还是FAST score来对特征进行排序(默认值为Harris score)等。另一个参数,WTA_K决定生成定向简短描述符的每个元素的点数。默认情况下是两个点。在这种情况下,对于匹配,使用范数HAMMING距离。如果WTA_K是3或4,这需要3或4个点来生成简短的描述符,则匹配距离由范数HAMMING2定义。

下面是一个简单的代码,显示了ORB的使用。

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('simple.jpg',0)

# Initiate STAR detector
orb = cv2.ORB()

# find the keypoints with ORB
kp = orb.detect(img,None)

# compute the descriptors with ORB
kp, des = orb.compute(img, kp)

# draw only keypoints location,not size and orientation
img2 = cv2.drawKeypoints(img,kp,color=(0,255,0), flags=0)
plt.imshow(img2),plt.show()

运行效果:

球体特征匹配

猜你喜欢

转载自blog.csdn.net/keny88888/article/details/106222360
ORB
今日推荐