目标
在这一章,
我们将看到ORB的基础知识
理论
作为一个OpenCV爱好者,关于这个球体最重要的一点是它来自于“OpenCV实验室”。这一算法是由伊桑鲁布利、文森特拉博、库尔特科诺利奇和加里r布拉德斯基在他们的纸球中提出的:在2011年,这是一种有效的筛选或冲浪的替代品。正如标题所言,在计算成本、匹配性能和主要专利方面,这是一个不错的选择。是的,筛选和冲浪都是专利的,你应该为它的使用付钱。但是球体不是!!!
ORB基本上是快速keypoint检测器和简短描述符的融合,并进行了许多修改以提高性能。首先,它快速地找到关键点,然后应用哈里斯角度量来发现其中的N个点。它还使用金字塔来产生多尺度特征。但有一个问题是,FAST不能计算方向。那么旋转不变性呢?作者提出了以下修改。
简介有一个重要的属性,每个位特征都有一个大的方差,一个平均值接近0。5。但是一旦它沿着关键点方向,它就失去了这个性质,变得更加分散。高方差使特征更具鉴别性,因为它对输入有不同的响应。另一个可取的特性是让测试不相关,因为每个测试都将对结果做出贡献。为了解决所有这些问题,ORB在所有可能的二进制测试中进行了贪婪的搜索,以找到具有高方差和接近0。5的值,并且不相关。结果被称为r简报。
对于描述符匹配,在传统的LSH上进行改进的多探针LSH是被使用的。这篇文章说,ORB比冲浪和筛选快得多,而且ORB描述符比冲浪更好。在低功率设备的全景拼接等方面,ORB是一个不错的选择。
ORB的OpenCV
像往常一样,我们必须创建一个ORB对象,其中包含函数、cv.ORB()或者使用特性2d通用接口。它有许多可选参数。最有用的是nFeatures表示最大数量的功能被保留(默认500),scoreType表示是否哈里斯分数或快速分数等级的功能(默认情况下,哈里斯分数)等。另一个参数,WTA_K决定面向生产的每个元素的点数量的简短的描述符。默认情况下是2,即一次选择2个点。在这种情况下,为了匹配,通常使用法线距离。如果wtak是3或4,它需要3或4个点来产生简短的描述符,那么匹配距离是由normhamming2定义的。
下面是一个简单的代码,它显示了ORB的使用。
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('sp.jpg',0)
# Initiate ORB detector
orb = cv.ORB_create()
# 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 = cv.drawKeypoints(img, kp, None, color=(0,255,0), flags=0)
plt.imshow(img2), plt.show()