图像特征提取(七)——ORB特征原理

        ORB算法的论文来自"ORB: an efficient alternative to SIFT or SURF",作者是OpenCV维护和开发的公司willowgarage的,论文名字起的很牛气,摘要里说,ORB算法比sift算法效率高两个数量级。江湖上流传的说法是ORB算法综合性能在各种测评里是最好的。

        ORB算法是在FAST关键点检测+BRIEF特征上做的。

一、特征点的检测

        图像的特征点可以简单的理解为图像中比较显著的点,如轮廓点,较暗区域中的亮点,较亮区域中的暗点等。ORB采用FAST(features from accelerated segment test)算法来检测特征点。FAST核心思想就是找出那些卓尔不群的点,即拿一个点跟它周围的点比较,如果它和其中大部分的点都不一样就可以认为它是一个特征点。

备注:每个小方格代表一个像素,方格内的颜色只是为了便于区分,不代表该像素点的颜色。

Fast算法详见:https://mp.csdn.net/postedit/80970032此处不做详解

二、特征点的描述

2.1计算特征描述子

得到特征点后我们需要以某种方式描述这些特征点的属性。这些属性的输出我们称之为该特征点的描述子(Feature Descritors).ORB采用BRIEF算法来计算一个特征点的描述子。BRIEF算法的核心思想是在关键点P的周围以一定模式选取N个点对,把这N个点对的比较结果组合起来作为描述子。



Brief算法详见:https://mp.csdn.net/postedit/84591134

2.2理想的特征点描述子应该具备的属性

在现实生活中,我们从不同的距离,不同的方向、角度,不同的光照条件下观察一个物体时,物体的大小,形状,明暗都会有所不同。但我们的大脑依然可以判断它是同一件物体。理想的特征描述子应该具备这些性质。即,在大小、方向、明暗不同的图像中,同一特征点应具有足够相似的描述子,称之为描述子的可复现性(鲁棒性)。

                                               

当以某种理想的方式分别计算上图中红色点的描述子时,应该得出同样的结果。即描述子应该对光照(亮度)不敏感,具备尺度一致性(大小 ),旋转一致性(角度)等。

上面我们用BRIEF算法得到的描述子并不具备以上这些性质。因此我们得想办法改进我们的算法。ORB并没有解决尺度一致性问题,在OpenCV的ORB实现中采用了图像金字塔来改善这方面的性能。ORB主要解决BRIEF描述子不具备旋转不变性的问题。

回顾一下BRIEF描述子的计算过程:在当前关键点P周围以一定模式选取N个点对,组合这N个点对的T操作的结果就为最终的描述子。当我们选取点对的时候,是以当前关键点为原点,以水平方向为X轴,以垂直方向为Y轴建立坐标系。当图片发生旋转时,坐标系不变,同样的取点模式取出来的点却不一样,计算得到的描述子也不一样,这是不符合我们要求的。因此我们需要重新建立坐标系,使新的坐标系可以跟随图片的旋转而旋转。这样我们以相同的取点模式取出来的点将具有一致性。

打个比方,我有一个印章,上面刻着一些直线。用这个印章在一张图片上盖一个章子,图片上分处直线2头的点将被取出来。印章不变动的情况下,转动下图片,再盖一个章子,但这次取出来的点对就和之前的不一样。为了使两次取出来的点一样,我需要将章子也旋转同一个角度再盖章。(取点模式可以认为是章子上直线的分布情况)

ORB在计算BRIEF描述子时建立的坐标系是以关键点为圆心,以关键点和取点区域的质心的连线为X轴建立二维坐标系。

在图1中,P为关键点。圆内为取点区域,每个小格子代表一个像素。现在我们把这块圆心区域看做一块木板,木板上每个点的质量等于其对应的像素值。根据积分学的知识我们可以求出这个密度不均匀木板的质心Q。计算公式如下。其中R为圆的半径。

我们知道圆心是固定的而且随着物体的旋转而旋转。当我们以PQ作为坐标轴时(图2),在不同的旋转角度下,我们以同一取点模式取出来的点是一致的。这就解决了旋转一致性的问题。

特征点的匹配

ORB算法最大的特点就是计算速度快 。 这首先得益于使用FAST检测特征点,FAST的检测速度正如它的名字一样是出了名的快。再次是使用BRIEF算法计算描述子,该描述子特有的二进制串的表现形式不仅节约了存储空间,而且大大缩短了匹配的时间。

例如特征点A、B的描述子如下。

A:10101011

B:10101010

我们设定一个阈值,比如80%。当A和B的描述子的相似度大于90%时,我们判断A,B是相同的特征点,即这2个点匹配成功。在这个例子中A,B只有最后一位不同,相似度为87.5%,大于80%。则A和B是匹配的。

我们将A和B进行异或操作就可以轻松计算出A和B的相似度。而异或操作可以借组硬件完成,具有很高的效率,加快了匹配的速度。

特征点的匹配

三、ORB算法论文中该算法的步骤:

1. 假设给定一副图。

论文第3节:先用oFAST算法,检测关键点的位置。所谓oFAST,就是orientation的FAST,增加了计算关键点的角点方向。

2. 对这个图,用FAST算法,找出关键点的位置。

3. 对于关键点,用Harris角点检测,选取前N个最好的点。

4. FAST算法不能处理多尺度图像,如果需要处理多尺度的话,就对原来的图像作金字塔,然后对每个图都进行步骤2和3的处理。

5. 对于每个角点,根据Intensity Centroid算法,计算角点的方向。

论文第4节:rBRIEF,旋转敏感的BRIEF,Rotation-Aware Brief

6. brief算法是无向的。

7. 将5中计算出来的角点方向作为brief的方向,进行旋转,就得到了有向的brief,也就是steered brief。steered brief导致区分性能有所下降。这一块,作者在4.2节中说,brief特征的每个bit的值或者是0,或者是1,因此均值是0.5,variance大。从图3可以看出,brief特征的均值在0很多,距离均值0.5比较远,而steered brief特征,加入角点的方向之后,特征均值的分布就比较平均了,也就是说,相对均值0.5来说,variance变小了。variance越大,区分性能越好,这很好理解,差异性越大,表明特征之间的差别越大,越好分类,如果都特征都差不多,接近均值,就不好分了。因此,steered brief的性能肯定不如brief。那么,为什么呢steered brief会导致variance变小呢,也许是图像的角点的方向,在统计学上存在某种性质使得variance变小。另一个是特征之间的相关性。对brief和steered brief作pca,它们的主要能量都在前10~15个主成份上。

8. 用一种贪婪学习算法筛选具有高variance和高不相关的steered brief,结果称之为rBRIEF。

9. ORB特征,就是oFAST和rBRIEF的组合。

参考文章:

https://www.jianshu.com/p/9ee6b2145eaa

http://blog.sina.com.cn/s/blog_916b71bb0100w9al.html

https://cloud.tencent.com/developer/article/1084432

猜你喜欢

转载自blog.csdn.net/qq_37764129/article/details/84639047