特征点匹配——ORB算法介绍

《ORB: an efficient alternative to SIFT or SURF》是Rublee等人在2011年的ICCV上发表的一篇有关于特征点提取和匹配的论文,这篇论文介绍的方法跳出了SIFT和SURF算法的专利框架,同时以极快的运行速度赢得了众多青睐。下面我简单介绍一下ORB算法的流程。

ORB算法的主要贡献如下:
(1)为FAST算法提取的特征点加上了一个特征点方向;
(2)使用带方向的BRIEF算法高效的对特征点描述符进行计算;
(3)分析了BRIEF算法得到的特征点描述符的方差和关联性;
(4)介绍了一种基于学习的去特征点关联性的BRIEF算法,优化了特征点求得的最近邻点。

下面我按照论文的结构对ORB算法进行介绍。

1、oFAST: FAST Keypoint Orientation

1.1 FAST Detector

ORB算法使用的是FAST算法提取的特征点(FAST算法介绍见我的博文特征点匹配——FAST算法介绍),在作者的实验中使用的FAST-9的算法,得到了很好的结果。
由于边缘位置对FAST算法得到的特征点有很大的影响,因此作者使用了Harris 角点检测方法对于得到的特征点进行排序,取前N个较好的角点作为特征点。

FAST算法是一种非常快的提取特征点的方法,但是对于这里来说,有两点不足:
(1)提取到的特征点没有方向;
(2)提取到的特征点不满足尺度变化。
针对特征点不满足尺度变化,作者像SIFT算法中那样,建立尺度图像金字塔,通过在不同尺度下的图像中提取特征点以达到满足尺度变化的效果。
针对提取到的特征点没有方向的问题,作者采用了Rosin提出的一种称为“intensity centroid”的方法确定了特征点的方向。
那么,就来看一下确定特征点方向的方法。

1.2 Orientation by Intensity Centroid

这种方法的主要思想就是,首先把特征点的邻域范围看成一个patch,然后求取这个patch的质心,最后把该质心与特征点进行连线,求出该直线与横坐标轴的夹角,即为该特征点的方向。
那么,怎么求取这个邻域的质心呢?
论文中提到Rosin定义了如下公式:

mpq=x,yxpyqI(x,y)
然后质心定义为:
C=(m10m00,m01m00)
然后求取向量 OC 的方向,同时如果把 x,y 的范围保持在 [r,r] 之间( r 为该特征点邻域的半径),以特征点为坐标原点,则得到的方向角为
θ=atan2(m01,m10)

作者在论文中提到,这种算法比BIN和MAX这两种求取特征点方向的方法都要好。

2、rBRIEF: Rotation-Aware Brief

2.1 Efficient Rotation of the BRIEF Operator Brief overview of BRIEF

下面我们队BRIEF算法进行一个简单的回顾:
BRIEF算法提取得到的特征点描述符是一个二进制的字符串,建设当前的一个特征点的邻域空间patch,设为 p ,那么对该面片 p 定义的一个二进制测试

τ(p;x,y):={1:p(x)<p(y)0:p(x)p(y)}
其中 p(x) 表示的是在点 x 处的图像灰度值,那么这样我们就可以得到一个 n 位的二进制串
fn(p):=1in2i1τ(p;xi,yi)
对于 xy 的坐标分布在本文中使用的是以特征点为中心的高斯分布,这种分布情况在Brief的论文原文中被证明是最好的。同样,本文中选择的 n=256
考虑到图像中有噪声的干扰,在实际的求取特征点描述符的过程中,需要对图像进行平滑操作。论文中使用的方法是,在对比操作 τ 进行的时候,不是对比的一个点,而是对比的在 3131 的patch中的若干个 55 的子窗口。
上面就是BRIEF算法的一个简单回顾,BRIEF算法形成的描述符对于旋转操作非常敏感,当旋转的角度增大时,利用BRIEF算法的描述符进行匹配的结果极大的降低。如下图所示: 特征点匹配——ORB算法介绍_第1张图片
图中x轴表示的是旋转的角度,y轴表示匹配结果中正确匹配所占的百分比。可以看出,随着旋转角度的增大,BRIEF算法的匹配效果迅速的降低,旋转角度在45度以上时,正确率几乎为0。那么这就引出了我们接下来要介绍的Steered BRIEF算法。

Steered BRIEF算法介绍

想要让BRIEF算法具有旋转不变性,那么我们需要使特征点的邻域旋转一个角度,该角度就是我们上面求得的特征点的方向角 θ 。但是这样整体旋转一个邻域的开销是比较大的,一个更加高效的做法就是旋转我们前面得到的那些邻域中的匹配点 xiyi
设生成特征点描述符的 n 个测试点对为 (xi,yi) ,定义一个 2×n 的矩阵

S=(x1,y1,......,xn,yn)
利用角度 θ 形成的旋转矩阵为 Rθ ,那么旋转后匹配点的坐标为
Sθ=RθS
这样,在求取特征点描述符的时候,就使用 Sθ 中的像素点即可。

2.2 Variance and Correlation

作者提到,BRIEF的一个比较好的特性是,对于所有的特征点上的每一位(bit)上的值的平均值都非常接近0.5(这里的平均值比较难理解,举个例子,比如说 n 个特征点中的所有的第 i 位的平均值),同时平均值的分布的方差较大。这样很显然有一个好处,就是方差越大说明数据的差异性越大,也就是说更能很好的区分不同的点。下图为作者取100k个特征点中的256位中各位的平均值分布,其中横坐标为平均值与0.5的差值,纵坐标是位的个数:
特征点匹配——ORB算法介绍_第2张图片
可以看出BRIEF的所有特征点各个位上的平均值分布为以0.5为均值,方差很大的一个高斯分布。
同样看上面这个图,我们发现steered BRIEF算法的结果中,所有特征点在各个位上的平均的分布则比较平均,这是因为进行旋转角度 θ 以后,均值就漂移到更加均衡的模式。
作者同时对BRIEF、Steered BRIEF和rBRIEF(后面会讲到)提取的100k个特征点的描述符进行PCA提取主成份,根据得到的特征值进行分析,如下图所示:
特征点匹配——ORB算法介绍_第3张图片
可以看出BRIEF和Steered BRIEF中前几个特征值比较大,那么基本上所有的信息都集中在这这面的若干维中,而Steered BRIEF算法得到的特征值比BRIEF的特征值小很多,因此Steered BRIEF得到的描述符的方差分布小,也就意味的区分能力比较差。
我们从另一个角度也可以证实这一点,如下图所示,实线表示的是匹配成功的点的距离的分布,虚线表示的是匹配失败的点的距离的分布,横坐标是距离,纵坐标是频率:
特征点匹配——ORB算法介绍_第4张图片
可以看出相比BRIEF和rBRIEF,steered BRIEF得到的匹配结果中,匹配失败的点的距离分布的平均值推左(论文中的push left,其实就是平均值偏小)了,这也就造成了成功和失败的点的距离中有更多的交集。同时也就意味着匹配结果的不理想。

2.3 Learning Good Binary Features

为了弥补Steered BRIEF算法造成的方差变小的缺陷,同时降低各个特征点的邻域内的匹配点对的相关性,作者使用了一种学习的方法来从邻域的所有可能的匹配点对中选出一个表现较好的子集用来生成特征点描述符。
作者首先从PASCAL 2006的图像库中提取了300k个特征点作为训练集,然后从每个特征点的 31×31 大小的邻域中穷举出所有可能的 5×5 的匹配子窗口。假设 wp 为总邻域的边长, wt 作为子窗口的边长,那么再这个邻域中一共有 N=(wpwt)2 个子窗口存在,从其中任意挑选2个子窗口,则有 (N2) 种可能的选择,然后去掉其中重叠的子窗口的匹配可能,对于作者的实验中,总共有205590种可能的匹配子窗口。
然后算法运行如下:
(1)对于每个特征点的邻域中所有可能的子窗口进行匹配,则得到205590个匹配结果,这作为一行,由于一共有300k个特征点,因此能够形成一个 300000×205590 的矩阵;
(2)对于这个矩阵,求各列的平均值,并按照离0.5的大小从小到大进行排序,并记录每列是由哪一对位置 xy 的比较构成的,每队看做一个元素,构成向量 T
(3)贪婪搜索:
*(a)取出距离0.5最近的两个位置放到 R ,并在 T 中删除;
(b)在去除 T 中距离0.5最近的两个位置,判断该位置与 R 中已经存在的关联性是否达到阈值,如果达到则抛弃当前的位置,如果没有达到则把它加入到 R 中;
(c)反复执行(a)、(b)中的操作,直到 R 中有256对,如果执行一遍没有达到256,那么提高(b)中的阈值,再次进行此操作,直到选出256对为止。*
利用这样搜索出来的256对位置生成特征点描述符的方法就是我们前面提到的rBRIEF。
至此我们讲的oFAST + rBRIEF即为ORB算法。

你可能感兴趣的:(ORB,FAST,BRIEF,特征点匹配,sift,特征点匹配)