ORB特征检测算法

来源:互联网 发布:java 多线程 编辑:程序博客网 时间:2024/06/01 07:32

论文:ORB: an efficient alternative to SIFT or SURF


ORB特征检测算法是将FAST特征点检测方法与BRIEF特征描述子结合起来,并针对它们的缺点进行了改进和优化。

FAST特征点检测算法:

       FAST特征点检测的具体过程,可以参考之前的博客。
       FAST特征点是没有尺度不变性的,在该论文中,提出构建了金字塔,在金字塔的每一层上利用FAST方法检测特征点,并利用Harris角点响应函数,挑选出Harris角点响应值最大的N个特征点。
      FAST特征点是没有方向的,在该论文中,提出了利用重心来求得特征点的方向,也就是对于特征点P,在其邻域内利用如下公式计算重心位置C,那么P与C的连线方向就是特征点P的方向。

      其中,I(x, y)是点(x,y)处的灰度值,那么重心C为:

      特征点P与重心C的夹角定义为FAST特征点的方向:

      为了提高该方法的旋转不变形,需要确保(x, y)在以P为中心,r为半径的圆形区域内,也就是x, y[-r, r]
      此外,在求特征点的方向时,除了上述方法,还有其他两种方法。MAX法:将特征点P邻域内最大梯度方向作为特征点的方向;BIN方法:类似于SIFT,在特征点邻域内计算梯度直方图,选取梯度直方图中最大值对应的方向为特征点的方向。在论文中指出,这两种方法不如重心法。

BRIEF特征描述子:

       BRIEF特征描述子的具体过程,可以参考之前的博客。
       BRIEF特征描述子不具有旋转不变性,在该论文中针对这一缺点,提出了Steer BRIEF。对于一个特征点,它的BRIEF描述子是一个长度为n的二进制码串,该二进制码串是由特征点周围的n对点(2n个点)生成的,我们可以将这2n个点(xi, yi)组成一个矩阵S。为了使得BRIEF特征描述子具有旋转不变性,论文中提出利用特征点的方向θ以及对应的旋转矩阵构建S的一个矫正版本




      实际上,我们可以把角度离散化,即把360度分为30份,然后,对这30个角度,分别求得计算对应的,这样就创建了一个查找表。之后,我们根据特征点的方向,快速得到对应的点对集合
      为了减少噪声的干扰,在计算BRIEF描述子时,选取5*5区域的平均灰度值代替原来一个单点的灰度值。
      
      BRIEF特征描述子具有以下特性:对于n维的二进制码串的每一个比特位,满足均值为0.5,方差很大的高斯分布。方差很大,意味着区分性比较强,那么不同特征点的描述子有较大的差异性,不容易造成误匹配。但是,将BRIEF沿着特征点的方向调整为Steer BRIEF后,方差很小,各个成分之间的相关性比较大。为了减少Steer BRIEF的方差亏损以及二进制码串的相关性,该论文提出了利用贪婪学习方法来选择点对集合。进一步改进后的算法称为rBRIEF具体如下:
.


主要参考博客:
http://www.cnblogs.com/ronny/p/4083537.html
http://blog.csdn.net/gh_home/article/details/51511471