我们知道,一个SLAM系统分为前端和后端,其中前端也叫视觉里程计(VO),视觉里程计的作用是根据相邻图像的信息估计出一个粗略的相机运动,作为初值提供给后端。而视觉里程计的算法分为两大类:特征点法和直接法。本期我们介绍特征点法,它具有稳定,对光照、动态物体不敏感的有事,目前已经相当成熟。
SIFT/SURF/ORB特征点等人工设计的特征点,他们多多少少都具有如下性质:
1.可重复性----相同的特征可以在不同的图像上找到
2.可区别性----不同的特征具有不同的表达
3.高效率性----同一图像中,特征点的数量远小于像素点数量
4.本地性----特征仅与其邻域相关
首先,特征点是由关键点和描述子两部分组成,关键点一般指的是该特征点在图像上面的位置,有的特征点还具有朝向、大小等信息,描述子描述了其邻域像素的信息。SLAM中很少用SIFT这样奢侈的特征点因为SIFT特征在普通电脑CPU上无法实时计算。相反,FAST关键点计算相当快,但是它只是关键点,没有描述子。ORB-----Oriented FAST and Rotated BRIEF,是目前非常具有代表性的实时图像特征。它改进了FAST检测子不具有方向的问题,并且使用速度极快的二进制描述子BRIEF描述其邻域像素,对于SLAM来说是一个很好的选择。
ORB特征
ORB特征提取步骤:图像金字塔各层FAST角点提取+角点主方向计算+BRIEF描述子提取
A.FAST关键点
1.在图像中选择像素p,假设它的亮度为L
2.设置一个阈值T(比如L的20%)
3.以p为中心,选取半径为3的圆上16个像素点
4.假设选取的圆上有连续的N个点的亮度大于L+T或小于L-T,那么像素p可以被认为是特征点(N一般取12,即FAST-12.另外也有FAST-9和FAST-11)
5.使用1-4步骤遍历图像每个像素
小trick:在FAST-12中,为了更快,可以先做一个预筛选,这样可以排除大多数非角点的像素。具体操作为,对于每个像素,直接检测其邻域圆上第1,5,9,13个像素亮度。当且仅当这四个有3个像素亮度同时大于L+T或小于L-T,那么才将该像素加入候选队列进行再次筛选。此外原始的FAST角点经常出现扎堆现象,所以检测之后还需要进行非极大值抑制,在一定区域内仅保留响应极大值的情况,这在一定程度上克服了角点扎堆~
FAST特征点的计算仅仅比较像素间亮度的差异,所以速度极快,但是他存在重复性不强、分布不够均匀等缺点。此外,FAST不具有方向信息。同时,由于它固定取半径为3的圆,存在尺度问题:远处看是角点,近处看不是角点。
针对方向性问题---采用灰度质心法
计算特征点附近的图像灰度质心
1.在一个小的图像块B中,定义图像块的矩为:
2.通过矩找到图像块的质心:
3.连接图像块的几何中心O和质心C,得到一个方向向量,于是特征点的方向可以定义为
针对尺度问题---采用图像金字塔
金字塔底层是原始图像,每网上一层,就对图像进行了一个固定倍率的缩放,就相当于我们有了分辨率不同的图像。较小的图像可以看成是远处看过来的场景。在特征匹配算法中,我们可以匹配不同层上的图像,从而实现尺度不变性。
B.BRIEF描述子
BRIEF是一种二进制描述子,由0和1组成,0和1编码了关键点邻域附近两个随机像素的大小关系。ORB在FAST关键点计算时计算了关键点的方向,因此利用方向心肌计算旋转之后的“Steer BRIEF”特征使得