一个SLAM分为前端和后端,前端也称为视觉里程计。视觉里程计根据相邻图像的信息估计出粗略的相机运动,给后端提供较好的初始值。
视觉里程计的算法主要分为两大类:特征点法和直接法。
基于特征点法的前端,长久以来被认为是视觉里程计的主流方法,它具有稳定,对光照、动态物体不敏感的优势,是目前比较成熟的解决方案。
1.ORB特征点
特征点由关键点和描述子两部分组成,计算特征点就是提取关键点并计算描述子两件事。
关键点是指该特征点子在图像的位置,有些特征点还具有朝向、大小等信息。描述子是一个向量,按照认为设计的方式,描述该关键点周围像素的信息,描述子是按照”外观相似的特征应该有相似的描述子“的原则设计。所以两个特征点的描述子在向量空间上的距离相近,就可认为他们是同样的特征点。
ORB(Oriented FAST and Rotated BRIEF)特征,改进了FAST检测子不具有方向性问题,并采用速度极快的二进制描述子BRIEF(Binary Robust Independent Elementary Feature)。
1.FAST角点提取:找出图像中的角点。相较于原版的FAST,ORB中计算了特征点的主方向,为后续的BRIEF描述子增加了旋转不变性。
2.BRIEF描述子:对前一步提取出特征点的周围图像区域进行描述。ORB对BRIEF进行了一些改进,主要是指在BRIEF中使用了先前计算的方向信息。
在SLAM中,处于运动状态的相机拍摄出的图像旋转和尺度都有很敏感,算法实时性要求也很高。ORB特征具有很好的旋转和尺寸不变性,并且耗时很短。
1.1 FAST关键点
FAST是一种角点,主要检测局部像素灰度变化明显的地方,速度快。他的思想是:如果一个像素与邻域的像素差别较大,那么他更可能是角点、相比于其他角点检测算法,FAST只需比较像素亮度的大小,十分快捷。
FAST特征点的计算仅仅是比较像素间亮度的差异,所以速度非常快,但他也有重复性不强,分布不均匀的缺点、此外,FAST角点不具有方向信息。同时,由于他固定取半径为3的圆,存在尺度问题:远处看着像角点的地方,接近后看可能就不是角点了。
针对FAST角点不具有方向性和尺度的弱点,ORB添加了尺度和旋转的描述。尺度不变性有构建图像金字塔,并在金字塔的每一层上检测角点来实现,而特征的旋转由灰度质心法实现的。
金字塔是计算机视觉中常用的一种处理方法。金字塔底层是原始图像,每往上一层,就对图像进行一个固定倍率的缩放,这样就有了不同分辨率的图像。较小的图像可以看成远处看过来的场景。在特征匹配算法中,我们可以匹配不用层上的图像,从而实现尺度不变性。例如,如果相机在后退,那么我们应该能够在上一个图像金字塔的上层和下一个下一个图像金字塔的下层中找到匹配。
在旋转方面,我们计算特征点附近的图像灰度质心。所谓质心是指以图像块灰度值作为权重的中心。找到质心和几何中心,得到一个方向向量,就可以找到特征点的方向
通过以上两个步骤,FAST就有了尺度和旋转的描述,从而大大提升了其在不同图像之间的表述的鲁棒性。在ORB中,改进后的FAST称为Oriented FAST。
1.2 BRIEF描述子
BRIEF是一种二进制描述子,其描述向量有许多0和1组成,这里的0和1编码了关键点附近两个随机像素的大小关系:如果p比q大,则取1,反之就取0,。如果我们取了128个这样的p,q,则最后得到128维由0、1组成的向量。BRIEF使用了随机选点的比较,速度非常快,而且由于使用了二进制表达,储存起来也非常方便,适用于实时的图像匹配。
原始的BRIEF描述子不具有旋转不变性,因此在图像发生旋转时容易丢失。而ORB在FAST特征点提取阶段计算了关键点的方向,所以可以利用方向信息,计算旋转之后的“Steer BRIEF”特征使ORB的描述子具有较好的旋转不变性。
2.特征匹配
特征匹配是视觉SLAM中极为关键的一步,特征匹配解决了SLAM中的数据关联问题,即确定当前看到的路标与之前看到的路标之间的对应关系。通过对图像与图像或者图像与地图之间的描述子进行准确匹配,我们可以为后续的姿态估计、优化等操作减轻大量负担。
然而,由于图像特征的局部特征,误匹配的情况广泛存在,而长期以来一直没有得到有效解决,目前已经成为视觉SLAM中制约性能提升的一大瓶颈。部分原因是场景中经常存在大量的重复纹理,使得特征描述非常相似。在这种情况下,仅利用局部特征匹配解决误匹配是非常困难的。
最简单的特征匹配方法就是暴力匹配,即对每个特征点与所有的特征点测量描述子的距离,不过实际应用中,还可以取不同的距离度量范数。对于浮点类型的描述子,使用欧氏距离进行度量即可。对于二进制的描述子,可以使用汉明距离。