ORB特征点

来源:互联网 发布:国家数据恢复中心费用 编辑:程序博客网 时间:2024/04/25 20:43

绪论

假如我有2张美女图片,我想确认这2张图片中美女是否是同一个人。这太简单了,以我专研岛国动作片锤炼出来的火眼金睛只需轻轻扫过2张图片就可以得出结论。但是,如果我想让计算机来完成这个功能就困难重重了:再性感的美女在计算机眼中也只是0-1组成的数据而已。一种可行的方法是找出2张图片中的特征点描述这些特征点的属性然后比较这2副图片的特征点的属性。如果有足够多的特征点具有相同的属性,那么就可以认为2副图片中的美女是同一个人。

  下面我们来看看ORB算法如何完成这这个过程。

1.特征点的检测

    图像的特征点可以简单的理解为图像中比较显著显著的点,如轮廓点,较暗区域中的亮点,较亮区域中的暗点等。

 

         


                原图                                            轮廓线(可能的特征点)

 

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

                                        

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

FAST具体计算过程:

1. 从图片中选取一个像素点P,下面我们将判断它是否是一个特征点。我们首先把它的密度(即灰度值)设为Ip

2. 设定一个合适的阙值t :当2个点的灰度值之差的绝对值大于t时,我们认为这2个点不相同。

3. 考虑该像素点周围的16个像素。(见上图) 

4. 现在如果这16个点中有连续的n个点都和点不同,那么它就是一个角点。 这里n设定为12。       

5. 我们现在提出一个高效的测试,来快速排除一大部分非特征点的点。该测试仅仅检查在位置1、9、5和13四个位置的像素(首先检查1和9,看它们是否和点相同。如果是,再检查5和13)。如果是一个角点,那么上述四个像素点中至少有3个应该和点相同。如果都不满足,那么不可能是一个角点。

                                                    

                                           图中红色的点为使用FAST算法找到的特征点。

2.特征点的描述

 2.1计算特征描述子

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

                                


具体来讲分为以下几步。                              

1.以关键点P为圆心,以d为半径做圆O

2.在圆O内某一模式选取N个点对。这里为方便说明,N=4,实际应用中N可以取512.

假设当前选取的4个点对如上图所示分别标记为:

链接地址         

链接地址

3.定义操作T


       

4.分别对已选取的点对进行T操作,将得到的结果进行组合。

假如:

         


则最终的描述子为:1011

 

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

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

                             


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

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

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

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

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

                             

 

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

我们知道FAST特征点是没有尺度不变性的,所以我们可以通过构建高斯金字塔,然后在每一层金字塔图像上检测角点,来实现尺度不变性。那么,对于局部不变性,我们还差一个问题没有解决,就是FAST特征点不具有方向,ORB的论文中提出了一种利用灰度质心法来解决这个问题,灰度质心法假设角点的灰度与质心之间存在一个偏移,这个向量可以用于表示一个方向。对于任意一个特征点pp来说,我们定义pp的邻域像素的矩为:

mpq=x,yxpyqI(x,y)

其中I(x,y)I(x,y)为点(x,y)(x,y)处的灰度值。那么我们可以得到图像的质心为:

C=(m10m00,m01m00)C=(m10m00,m01m00)

那么特征点与质心的夹角定义为FAST特征点的方向:


θ=arctan(m01,m10)

为了提高方法的旋转不变性,需要确保xxyy在半径为rr的圆形区域内,即
x,yx,y∈[−r,r]r等于邻域半径。


             


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

3.特征点的匹配

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

例如特征点AB的描述子如下。

A10101011

B10101010

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

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

 


                                         OpenCVORB算法的匹配结果

本文转自http://www.aiuxian.com/article/p-1728722.html

x,y[r,r]x,y∈[−r,r]rr等于邻域半径。
0 0
原创粉丝点击