图像特征之ORB特征详解

学术需要,最近开始着手一些视觉slam的工作,首先接触了如今github上最火的开源valsm的项目--ORB-Slam,这是一种基于特征点匹配的方法。其实以前我就已经接触过一些图像特征了,比如说SURF、SIFT等经典的特征点,记得当时还依据SURF特征写过一个图像拼接的MATLAB大作业。但是说实话,当时对于图像特征这个概念我的理解是非常浅显的。这次进行视觉SLAM的学习,首先就从ORB特征点开始,这段时间的学习,我对于图像特征又有了全新的理解。希望可以通过这篇博客记录下来。

1 特征点

特征点是图像中一些特别的地方。一般而言,人工设计的特征点(比如SIFT、SURF、ORB等)都具有如下的性质: 1. 可重复性:即相同的“区域“可以在不同的图像中找到(比如将特征点比作一只猫,在图一和图二中都能找到这只猫)。 2. 可区别性:即不同的”区域“有不同的表达。 3. 高效率:在同一副图像中,特征点的数量应该远小于像素的数量。 4. 本地性:特征仅与一小片图像区域相关。

特征点关键点描述子两部分组成。

关键点通常是指该特征点在图像中的位置,有的特征点还具有朝向、大小等信息。描述子通常是一个向量,按照认为设计的方式,描述了该关键点周围像素的信息。描述子的设计原则是外观相似的特征应该有相似的描述子

2 ORB特征

ORB(Oriented FAST and Rotated BRIEF)特征也是由关键点和描述子组成。正如其英文全名一样,这种特征使用的特征点是”Oriented FAST“,描述子是”Rotated BRIEF“。其实这两种关键点与描述子都是在ORB特征出现之前就已经存在了,ORB特征的作者将二者进行了一定程度的改进,并将这两者巧妙地结合在一起,得出一种可以快速提取的特征--ORB特征。ORB特征在速度方面相较于SIFT、SURF已经有明显的提升的同时,保持了特征子具有旋转与尺度不变性。

2.1 FAST 关键点

FAST特征点检测算法由E.Rosten和T.Drummond在2006年在其论文“Machine Learning for High-speed Corner Detection”中首次提出。英文全称是“Features from Accelerated Segment Test”,可以翻译成“基于加速分割测试的特征”。从论文名字可以看出FAST是一种高效的特征点(角点)检测算法,基本上可以满足实时检测系统要求,是计算机视觉领域最主流的角点检测算法之一。虽然FAST特征检测速度很快,但首字母刚好拼成fast,真是一个美丽的巧合。

FAST的角点检测过程如下: 1. 在图像中选取像素p,假设它的亮度为Ip; 2. 设置一个阈值T(比如,Ip的20%); 3. 以像素p为中心,选取半径为3的圆上的16个像素点(如下图选取方式); 4. 假设候选的圆上有连续的N个点的亮度大于Ip+T或者小于Ip-T,那么像素p可以被认为是特征点(N通常取12,即为FAST-12,取为9和11也很常见,它们分别被称为FAST-9和FAST-11); 5. 循环上述操作,对每一个像素执行相同的操作。

![fast_speedtest](/img/orb/fast_speedtest.jpg)

加速:通常在FAST-12算法中,为了更加高效,可以添加一项预测试操作,来快速排除图像中海量的不是角点的像素。具体操作为:对于每个像素,直接检测领域圆上的第1、5、9、13个像素的亮度。只有当这四个像素中有三个同时大于Ip+T或者小于Ip-T时,当前像素才有可能是一个角点,继续进行更加严谨的判断,否则直接排除。

优化:通常,原始的FAST角点经常出现“扎堆”的现象。所以在第一遍检测之后,还需要用非极大值抑制,在一定范围内仅仅保留响应极大值的角点。这样可以有效缓解角点集中的问题。

ORB中对fast的一些改进

因为FAST特征点仅仅是比较像素间亮度的差异,所以速度非常快,但是同时它也存在一些问题,因此在ORB特征中对其进行了改进。 1. 首先FAST特征点数量很大并且不确定,而我们希望对图像提取固定数量的特征。因此,我们可以指定最终要提取的角点数量N,对原始的FAST角点分别计算Harries响应值,然后选取前N个具有最大响应值的角点作为最终的角点集合。

  1. 因为FAST角点是固定选取半径为3的圆,所以很容易知道其不具备尺度不变性。解决这个问题通过构建图像金字塔(opencv中默认的比例因子是1.2,层数为8),并在金字塔的每一层上都进行角点的检测,最终将在所有比例的图像上提取的角点作为最终的角点集合。

  2. 最后,FAST角点不具备方向性。orb解决这个问题通过灰度质心法,具体是通过分别计算区域图像中灰度值作为权重在x轴与y轴上的质心。并通过这两个质心长度的比值确定方向。

2.2 BRIEF 描述子

BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,Brief为特征描述子,对已检测到的特征点进行描述,是一种二进制编码描述子,摒弃了区域灰度直方图描述特征点的传统方法,加快特征描述子建立速度,降低特征匹配时间。

了解过SIFT和SURF描述子的人应该知道,它们一个描述子就要占用几百个字节内存空间,十分庞大,计算效率很低。而一个BRIEF描述子只需要128,256或512个比特的空间便可存储(opencv中提供了这三种长度,默认为256)。

BRIEF是一种二进制描述子,描述向量由很多0与1组成。这里0与1的确定是通过比较关键点附近两个像素灰度值的大小关系确定。

两个像素的位置确定使用了随机取点的比较,原始的BRIEF描述子不具有旋转不变性,因此在图像发生旋转时容易丢失。而在ORB中通过在FAST特征点提取阶段计算的关键点的方向信息,通过方向信息进行随机取点函数的设置,使得Rotated BRIEF 描述子具有了良好的旋转不变性

ORB中对brief的一些改进

BRIEF描述子的优点在于速度,但是缺点是不具备尺度不变性与旋转不变性并且对于噪声比较敏感,因此在ORB中同样对其进行了改进 1. 旋转不变性:在上面通过灰度质心法计算出fast关键点的方向后,在对这个点进行描述时,依据这个方向旋转启发式搜索的256对匹配点对,获得描述子的旋转不变性; 2. 尺度不变性:在关键点位于的图像金字塔上进行描述子的计算; 3. 解决噪声敏感的问题:在brief中使用的是pixel与pixel的大小来构造描述子的每一个bit;这样的后果就是对噪声敏感。在orb中不再使用pixel对,而是使用9*9的patch对,也就是对比的是patch的像素值的和(这个通过积分图可以快速计算)。

在orb论文中,提供了启发式搜索算法计算得到的256对匹配点对,可以直接拿来使用,只需要在计算时将这256对点按照特征点的方向信息进行旋转就可以了。

参考资料

  • [1] 视觉SLAM十四讲
  • [2] https://blog.csdn.net/tiandijun/article/details/40679581

图像特征之ORB特征详解
http://line.com/2018/09/16/2018-09-16-visual-feature-orb/
作者
Line
发布于
2018年9月16日
许可协议