图像![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6120f8de244437ecee4ecfb2108aacef.png)
我们从最简单的图像一灭度图开始说起。在一张灰度图中,每个像素位置 (
x
x
x,
y
y
y) 对 应到一个灰度值
I
I
I,所以一张宽度为
w
w
w,高度为
h
h
h 的图像,数学形式可以记成一个矩阵:
I
(
x
,
y
)
∈
R
w
×
h
I(x, y) \in \mathbb{R}^{w \times h}
I(x,y)∈Rw×h
然而,计算机并不能表达整个实数空间,所以我们只能在某个范围内,对图像进行量化。例如常见的灰度图中,我们用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 中,定义图像块的矩为:
m p q = ∑ x , y ∈ B x p y q I ( 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\} mpq=x,y∈B∑xpyqI(x,y),p,q={0,1} - 通过矩可以找到图像块的质心:
C = ( m 10 m 00 , m 01 m 00 ) C=\left(\frac{m_{10}}{m_{00}}, \frac{m_{01}}{m_{00}}\right) C=(m00m10,m00m01) - 连接图像块的几何中心 O 与质心 C,得到一个方向向量 OC,于是特征点的方向可
以定义为:
θ = arctan ( m 01 / m 10 ) \theta=\arctan \left(m_{01} / m_{10}\right) θ=arctan(m01/m10)
BRIEF描述子
BRIEF是一种二进制描述子,它的描述向量由许多个0 和 1组成,这里的0和1编码了关键点附近两个像素(比如说 p p p和 q q q) 的大小关系:如果 p p p比 q q q大,则取1 ,反之就取 0。如果我们取了 128个这样的 p p p , q q q,最后就得到128维由0, 1 组成的向量。那么, p p p和 q q q如何选取呢?在作者原始的论文出给出了若干种挑选方法,大体上都是按照某种概率分布,随机地挑选 p p p和 q q q的位置
特征匹配
特征匹配是视觉SLAM中极为关键的一步,宽泛地说,特征匹配解决了 SLAM中的数据关联问题
(dataassociation),即确定当前看到的路标与之前看到的路标之间的对应关系。
由于图像特征的局部特性,误匹配的情况广泛存在,而且长期以来一直没有得到有效解决,目前已经成为视觉SLAM中制约性能提升的一大瓶颈。部分原因是因为场景中经常存在大量的重复纹理,使得特征描述非常相似。在这种情况下,仅利用局部特征解决误匹配是非常困难的。
不过,让我们先来看正确匹配的情况,等做完实验再同头去讨论误匹配问题。考虑两个时刻的图像。如果在图像
I
t
I_{t}
It 中提取到特征点
x
t
m
,
m
=
1
,
2
,
…
,
M
,
x_{t}^{m}, m=1,2, \ldots, M,
xtm,m=1,2,…,M, 在图像
I
t
+
1
I_{t+1}
It+1 中提取 到特征点
x
t
+
1
n
,
n
=
1
,
2
,
…
,
N
,
x_{t+1}^{n}, \quad n=1,2, \ldots, N,
xt+1n,n=1,2,…,N, 如何寻找这两个集合元素的对应关系呢?最简单的特征 匹配方法就是暴力匹配
(Brute-Force Matcher)。即对每一个特征点
x
t
m
,
x_{t}^{m},
xtm, 与所有的
x
t
+
1
n
x_{t+1}^{n}
xt+1n 测量描述子的距离,然后排序,取最近的一个作为匹配点。描述子距离表示了两个特征之 间的相似程度,不过在实际运用中还可以取不同的距离度量范数。对于浮点类型的描述子,使用欧氏距离进行度量即可。而对于二进制的描述子(比如 BRIEF 这样的),我们往往使用汉明距离
(Hamming distance)做为度量一两个二进制串之间的汉明距离,指的 是它们不同位数的个数。