视觉SLAM14讲笔记03:ch7图像特征提取与匹配

图像视觉SLAM14讲笔记03:ch7图像特征提取与匹配

我们从最简单的图像一灭度图开始说起。在一张灰度图中,每个像素位置 (xx, yy) 对 应到一个灰度值 II,所以一张宽度为 ww,高度为 hh 的图像,数学形式可以记成一个矩阵:
I(x,y)Rw×h I(x, y) \in \mathbb{R}^{w \times h}
然而,计算机并不能表达整个实数空间,所以我们只能在某个范围内,对图像进行量化。例如常见的灰度图中,我们用0-255之间整数(即一个unsigned char, —个字节)来表达图像的灰度大小。

特征点

回顾第二讲的内容,我们说过视觉SLAM主要分为视觉前端和优化后端。0前端也称为视觉里程计(VO)。它根据相邻图像的信息,估计出粗略的相机运动,给后端提供较好的初始值。VO的实现方法,按是否需要提取特征,分为特征点法的前端以及不提特征的直接法前端。基于特征点法的前端,长久以来(直到现在)被认为是视觉里程计的主流方法。它运行稳定,对光照、动态物体不敏感,是目前比较成熟的解决方案。
相比于朴素的角点,这些人工设计的特征点能够拥有如下的性质:

  1. 可重复性(Repeatability):相同的“区域”可以在不同的图像中被找到。
  2. 可区别性(Distinctiveness): 不同的"区域"有不同的表达。
  3. 高效率(Efficiency):同一图像中,特征点的数量应远小于像素的数量。
  4. 本地性(Locality):特征仅与一小片图像区域相关。

特征点由关键点(Key-point)和描述子(Descriptor)两部分组成。其中,SIFT(尺度不变特征变换,Scale-Invariant Feature Transform)当属最为经典的一种。

ORB 特征

FAST角点提取

FAST是一种角点,主要检测局部像素灰度变化明显的地方,以速度快著称。它的思想是:如果一个像素与它邻域的像素差别较大(过亮或过暗),那它更可能是角点。

针对FAST角点不具有方向性和尺度的弱点,ORB添加了尺度和旋转的描述。尺度不变性由构建图像金字塔,并在金字塔的每一层上检测角点来实现。而特征的旋转是由灰度质心法(Intensity Centroid)实现的。

质心是指以图像块灰度值作为权重的中心。其具体操作步骤如下

  1. 在一个小的图像块 B 中,定义图像块的矩为:
    mpq=x,yBxpyqI(x,y),p,q={0,1} m_{p q}=\sum_{x, y \in B} x^{p} y^{q} I(x, y), \quad p, q=\{0,1\}
  2. 通过矩可以找到图像块的质心:
    C=(m10m00,m01m00) C=\left(\frac{m_{10}}{m_{00}}, \frac{m_{01}}{m_{00}}\right)
  3. 连接图像块的几何中心 O 与质心 C,得到一个方向向量 OC,于是特征点的方向可
    以定义为:
    θ=arctan(m01/m10) \theta=\arctan \left(m_{01} / m_{10}\right)

BRIEF描述子

BRIEF是一种二进制描述子,它的描述向量由许多个0 和 1组成,这里的0和1编码了关键点附近两个像素(比如说ppqq) 的大小关系:如果ppqq大,则取1 ,反之就取 0。如果我们取了 128个这样的pp ,qq,最后就得到128维由0, 1 组成的向量。那么,ppqq如何选取呢?在作者原始的论文出给出了若干种挑选方法,大体上都是按照某种概率分布,随机地挑选ppqq的位置

特征匹配

特征匹配是视觉SLAM中极为关键的一步,宽泛地说,特征匹配解决了 SLAM中的数据关联问题(dataassociation),即确定当前看到的路标与之前看到的路标之间的对应关系。

由于图像特征的局部特性,误匹配的情况广泛存在,而且长期以来一直没有得到有效解决,目前已经成为视觉SLAM中制约性能提升的一大瓶颈。部分原因是因为场景中经常存在大量的重复纹理,使得特征描述非常相似。在这种情况下,仅利用局部特征解决误匹配是非常困难的。

不过,让我们先来看正确匹配的情况,等做完实验再同头去讨论误匹配问题。考虑两个时刻的图像。如果在图像 ItI_{t} 中提取到特征点 xtm,m=1,2,,M,x_{t}^{m}, m=1,2, \ldots, M, 在图像 It+1I_{t+1} 中提取 到特征点 xt+1n,n=1,2,,N,x_{t+1}^{n}, \quad n=1,2, \ldots, N, 如何寻找这两个集合元素的对应关系呢?最简单的特征 匹配方法就是暴力匹配(Brute-Force Matcher)。即对每一个特征点 xtm,x_{t}^{m}, 与所有的 xt+1nx_{t+1}^{n} 测量描述子的距离,然后排序,取最近的一个作为匹配点。描述子距离表示了两个特征之 间的相似程度,不过在实际运用中还可以取不同的距离度量范数。对于浮点类型的描述子,使用欧氏距离进行度量即可。而对于二进制的描述子(比如 BRIEF 这样的),我们往往使用汉明距离(Hamming distance)做为度量一两个二进制串之间的汉明距离,指的 是它们不同位数的个数。