视觉SLAM14讲笔记03:ch7图像特征提取与匹配
图像
我们从最简单的图像一灭度图开始说起。在一张灰度图中,每个像素位置 (, ) 对 应到一个灰度值 ,所以一张宽度为 ,高度为 的图像,数学形式可以记成一个矩阵:
然而,计算机并不能表达整个实数空间,所以我们只能在某个范围内,对图像进行量化。例如常见的灰度图中,我们用0-255之间整数(即一个unsigned char, —个字节)来表达图像的灰度大小。
特征点
回顾第二讲的内容,我们说过视觉SLAM主要分为视觉前端和优化后端。0前端也称为视觉里程计(VO)。它根据相邻图像的信息,估计出粗略的相机运动,给后端提供较好的初始值。VO的实现方法,按是否需要提取特征,分为特征点法的前端以及不提特征的直接法前端。基于特征点法的前端,长久以来(直到现在)被认为是视觉里程计的主流方法。它运行稳定,对光照、动态物体不敏感,是目前比较成熟的解决方案。
相比于朴素的角点,这些人工设计的特征点能够拥有如下的性质:
- 可重复性(Repeatability):相同的“区域”可以在不同的图像中被找到。
- 可区别性(Distinctiveness): 不同的"区域"有不同的表达。
- 高效率(Efficiency):同一图像中,特征点的数量应远小于像素的数量。
- 本地性(Locality):特征仅与一小片图像区域相关。
特征点由关键点
(Key-point)和描述子
(Descriptor)两部分组成。其中,SIFT(尺度不变特征变换,Scale-Invariant Feature Transform)当属最为经典的一种。
ORB 特征
FAST角点提取
FAST是一种角点,主要检测局部像素灰度变化明显的地方,以速度快著称。它的思想是:如果一个像素与它邻域的像素差别较大(过亮或过暗),那它更可能是角点。
针对FAST角点不具有方向性和尺度的弱点,ORB添加了尺度和旋转的描述。尺度不变性由构建图像金字塔,并在金字塔的每一层上检测角点来实现。而特征的旋转是由灰度质心法(Intensity Centroid)实现的。
质心是指以图像块灰度值作为权重的中心。其具体操作步骤如下
- 在一个小的图像块 B 中,定义图像块的矩为:
- 通过矩可以找到图像块的质心:
- 连接图像块的几何中心 O 与质心 C,得到一个方向向量 OC,于是特征点的方向可
以定义为:
BRIEF描述子
BRIEF是一种二进制描述子,它的描述向量由许多个0 和 1组成,这里的0和1编码了关键点附近两个像素(比如说和) 的大小关系:如果比大,则取1 ,反之就取 0。如果我们取了 128个这样的 ,,最后就得到128维由0, 1 组成的向量。那么,和如何选取呢?在作者原始的论文出给出了若干种挑选方法,大体上都是按照某种概率分布,随机地挑选和的位置
特征匹配
特征匹配是视觉SLAM中极为关键的一步,宽泛地说,特征匹配解决了 SLAM中的数据关联问题
(dataassociation),即确定当前看到的路标与之前看到的路标之间的对应关系。
由于图像特征的局部特性,误匹配的情况广泛存在,而且长期以来一直没有得到有效解决,目前已经成为视觉SLAM中制约性能提升的一大瓶颈。部分原因是因为场景中经常存在大量的重复纹理,使得特征描述非常相似。在这种情况下,仅利用局部特征解决误匹配是非常困难的。
不过,让我们先来看正确匹配的情况,等做完实验再同头去讨论误匹配问题。考虑两个时刻的图像。如果在图像 中提取到特征点 在图像 中提取 到特征点 如何寻找这两个集合元素的对应关系呢?最简单的特征 匹配方法就是暴力匹配
(Brute-Force Matcher)。即对每一个特征点 与所有的 测量描述子的距离,然后排序,取最近的一个作为匹配点。描述子距离表示了两个特征之 间的相似程度,不过在实际运用中还可以取不同的距离度量范数。对于浮点类型的描述子,使用欧氏距离进行度量即可。而对于二进制的描述子(比如 BRIEF 这样的),我们往往使用汉明距离
(Hamming distance)做为度量一两个二进制串之间的汉明距离,指的 是它们不同位数的个数。