第七讲 视觉里程计
概要:前端视觉里程计(Visual Odometry, VO)。视觉里程计的主要任务是估算相邻图像间相机的运动,以及局部地图的样子。VO又称前端。
主要学习目标:
1.理解图像特征点的意义,并掌握在单幅图像中提取特征点及多幅图像中匹配特征点的方法。
2. 理解对极几何的原理,利用对极几何的约束,恢复出图像之间的摄像机的三维运动
3.理解PNP问题,以及利用已知三维结构与图像的对应关系求解摄像机的三维运动
4.理解ICP问题,以及利用点云的匹配关系求解摄像机的三维运动
5.理解如何通过三角化获得二维图像上对应点的三维结构
视觉里程计的算法主要分为两大类:特征点法和直接法。
- 特征点法
- 特征点:尽管灰度图像中的单个图像像素也是一种”特征“,但是我们希望特征点在相机运动后仍能保持稳定,所以我们更倾向于把图像中的角点、边缘和区块都当成图像中具有代表性的地方,但是光是如此还不够,单纯的角点并不具备尺度和旋转不变性,可能远处看是角点,近处看却不是角点,旋转后外观也会发生变化。
因此,计算机领域的研究者们提出了一些人工设计的特征点,如:SIFT、SURF、ORB等,它们拥有如下性质:
1.可重复性:相同的特征可以在不同的图像中找到。
2.可区别性:不同的特征有不同的表达方式。
3.高效率:同一图像中特征点的数量应该远远小于像素的数量。
4.本地性:特征仅与一小片图像区域相关。
- 特征点由关键点(Key-point)和描述子(Descriptor)两部分组成。
- 关键点是指该特征点在图像里的位置,有些特征点还具有朝向、大小等信息。
- 描述子通常是一个向量,按照某种人为设计方式,描述了该关键点周围像素的信息。
描述子是按照”外观相似的特征应该由相似的描述子“的原则设计的。因此,只要两个特征点的描述子在向量空间上的距离相近,就可以认为它们是同样的特征点。
- 常用特征点简介:
- SIFT:(尺度不变特征变换,Scale-Invariant Feature Transform)充分考虑了在图像变换中出现的光照、尺度、旋转等变换,但计算量庞大。
- ORB:它改进了FAST关键点检测不具备方向性的问题,并采用了速度极快的二进制描述子BRIEF。
- 同一幅图像特征点的提取速度,ORB>SURF>>SIFT。目前SLAM中ORB是质量和性能之间较好的折中选择。
-
ORB
-
提取ORB特征分为如下两个步骤:
1.FAST角点提取:找出图像中的“角点”。相较于原版的FAST,ORB中计算了特征点的主方向,为后续的BRIEF描述子增加了旋转不变特性。
2.BRIEF描述子:对前一步提取出特征点的周围图像区域进行描述。ORB对BRIEF进行了一些改进,主要是指在BRIEF中使用了先前计算的方向信息。
- FAST关键点:FAST是一种角点,主要检测局部像素灰度变化明显的地方,以速度快著称。
1.选取像素p,假设它的亮度为Ip;
2.设置一个阈值T(比如Ip的20%);
3.以像素p为中心,选取半径为3的圆上的16个像素点;
4.假如选取的圆上,有连续的N个点的亮度大于Ip+T或小于Ip-T,那么像素p可以被认为是特征点;
5.循环以上4步,对每一个像素执行相同操作。
-
FAST 描述子
论文:BRIEF: Binary Robust Independent Elementary Features
BRIEF算法的核心思想是在关键点P的周围以一定模式选取N个点对,把这N个点对的比较结果组合起来作为描述子。为了保持踩点固定,工程上采用特殊设计的固定的pattern来做
-
原始的FAST关键点没有方向信息,这样当图像发生旋转后,brief描述子也会发生变化,使得特征点对旋转不鲁棒。
-
解决方法:orientated FAST,使用灰度质心法计算特征点的方向
-
什么是灰度质心法?
所谓质心是指以图像块灰度值作为权重的中心,其具体操作步骤如下:
-
此时我们拥有了旋转不变性,但是还需要解决尺度不变性,而尺度不变性可以通过构建图像金字塔,并在图像金字塔上的每一层检测角点来实现。
金字塔底层是原始图像,每往上一层,就对图像进行一个固定倍率的缩放,如图所示:假如相机在后退,那我们能够在上一个图像金字塔的上层和下一个图像金字塔的下层中找到匹配。
通过以上方法,FAST角点便具备了尺度和旋转不变性。
- BRIEF描述子:是一种二进制描述子,其描述向量由许多个0和1组成,这里的0和1编码了关键点附近两个随机像素(比如q和p的关系):如果p比q大,则取1,反之就取0。最后得到一个二进制字符串组成的向量。
- 特征匹配:主要是计算两个特征之间的描述子距离,来刻画两个特征之间的相似程度,对于浮点类型的描述子,使用欧氏距离进行度量即可,对于二进制描述子,通常采用汉明距离(Hamming distance)作为度量-两个二进制串之间的汉明距离,指的是其不同位数的个数。
待续…