目录
1 视觉里程计(VO)
视觉SLAM的基本框架已经学习,其中由两部分非常重要,那就是前端和后端。视觉前端就被成为视觉里程计(VO),其根据相邻图像的信息,估计出粗略的相机位姿,给后端提供较好的位姿初始值。
视觉里程计的实现方法分两种:
①对图像提取特征点的特征点法
②不对图像进行特征提取的直接法
基于特征点法的前端,长久以来(直到现在)被认为是视觉里程计的主流方法。它运行稳定,对光照、动态物体不敏感,是目前比较成熟的解决方案。
所以先来学习下特征点法。
2 基于特征点法的视觉里程计算法
基于特征点法的视觉里程计的工作原理是:
首先,从图像中提取特征点。特征点在相机视角发生少量变化后会保持不变。
然后,在其他图像中匹配这些相同的特征点,根据位姿估计算法估计相机的位姿以及特征点的空间位置。这些点被称为路标点,也就是图像特征。
2.1 特征点
通过对视觉里程计的工作原理的了解,我们可以知道,特征点在相机少量运动之后需要保持稳定。让计算机能在以后的图像序列中重新找到那个点,然后产生关联。这样我们才能设计算法求出两帧图像帧之间对应的相机运动。
现在已经出现了很多关于特征点的研究,比如SIFT,SURF,ORB等,他们有以下良好的性质:
1、可重复性:可以在不同的图像中找到。
2、可区别性:不同的特征点有不同的表达。
3、高效率:同一图像中,特征点数量远小于像素的数量(在能够明显表示此图像特征的情况下用更少的像素信息,这可以在后面的计算中显著提高计算效率)。
4、局部性:特征点仅可以表示一小片图像区域。
特征点由关键点和描述子两部分组成。可以这样说:关键点是指该特征点在图像里的位置,有些特征点还具有朝向、大小等信息。描述子通常是一个向量,按照某种人为设计的方式,描述了该关键点周围像素的信息。所以只要两个特征点的描述子在向量空间上距离相近,就可以认为他们是相同的特征点。
前面说现在已经有了很多著名的特征点,其中ORB特征点在视觉SLAM领域应用最多。因为ORB特征点在保持了特征子具有旋转,尺度不变性的同时,速度方面提升明显,对于实时性要求很高的 SLAM来说是一个很好的选择。
2.2 ORB特征点的提取与匹配
ORB特征点全称为“Oriented FAST and Rotated BRIEF ”,是一种改进的FAST角点。带有旋转不变性和尺度不变性。
下面看它是怎么带有旋转不变性和尺度不变性的。
提取 ORB 特征分为两个步骤:
- FAST 角点提取:找出图像中的” 角点”。相较于原版的 FAST, ORB 中计算了特征点的主方向,为后续的 BRIEF 描述子增加了旋转不变特性。
- BRIEF 描述子:对前一步提取出特征点的周围图像区域进行描述。
2.2.1 关键点与描述子
FAST角点不具有方向性,相机旋转一下就变成了别的特征点。它以固定半径3的圆选取像素点进行比较,这使得相近在远近运动时,特征点也改变了。
针对 FAST 角点不具有方向性和尺度的弱点,ORB 添加了尺度和旋转的描述。
尺度不变性由构建图像金字塔,并在金字塔的每一层上检测角点来实现。
特征的旋转是由灰度质心法实现的。
图像金字塔比较容易理解,指对图像进行不同层次的降采样,以获得不同分辨率的图像。来表示相机离特征点远近这么一个感觉。
灰度质心法
用灰度质心法解决其旋转问题。
-
第1步:我们定义该区域图像的矩为:
其中, p , q p,q p,q取0或1; I ( x , y ) I(x,y) I(x,y)表示在像素坐标 ( x , y ) (x,y) (x,y)处图像的灰度值; m p q m_{pq} mpq表示图像的矩。
在半径为 R R R的圆形图像区域,沿两个坐标轴 x , y x,y x,y方向的图像矩分别为:
圆形区域内所有像素的灰度值总和为:
-
第2步:求出图像的质心为:
-
第3步:然后关键点的“主方向”就可以表示为从圆形图像形心 O O O 指向质心 C C C的方向向量 O C ⃗ \vec{OC} OC</