VO的核心问题在于根据图像信息估计相机的运动轨迹 。通常从图像中选取具有代表性的点,并当相机运动后,从不同的图像中找到对应的相同点,从而确定相机位姿估计问题。在经典SLAM模型中,称这种点为路标,而在视觉SLAM中,路标指图像特征(Feature)。
图像特征是一组与计算任务相关的信息,计算任务取决于具体的应用。也即,特征是图像信息的另一种数字表示形式。在视觉里程计中,希望特征点在相机运动后保持稳定。仅凭借灰度值无法实现稳定性,故而需要对图像提取特征点。
特征点
特征点是图像中的一些特别的地方,如角点、边缘等具有明显辨识度的区域:
一种直观的特征提取方式就是再不同的图像中辨认角点,确定它们之间的关系。此类方式中,角点就是所谓的特征,通常有Harris角点、FAST角点、GFTT角点等算法。
实际应用中,单纯提取角点的效果并不好。故而研究者设计了许多更为稳定的局部图像特征如SIFT、ORB、SURF等,具有如下特点:
- 可重复性:相同特征可在不同图像中找到
- 可区别性:不同特征具有不同描述
- 高效率:同一图像中,特征点数量远小于像素数量
- 本地性:特征仅与一小片图像区域相关
特征点由关键点 (Key-point)和描述子 (Descriptor)两部分组成。关键点指该特征点在图像里的位置,部分特征点还包含朝向、大小等信息;描述子通常为一个向量,描述了关键点周围像素的信息。
描述子按照“外观相似的特征应该具备相似的描述子”的原则进行设计,故而当两个特征点的描述子在向量空间上的距离相近,称其为相同的特征点。
ORB特征
ORB特征的关键点称为 Oriented FAST ,是一种改进的FAST角点;它的描述子称为 BRIEF。提取ORB特征有如下两步组成:
相较于原版FAST算法,ORB通过计算特征点的主方向,为后续BRIEF描述子提供了旋转不变特性。
FAST关键点
FAST主要检测局部像素灰度变化明显的地方,以速度快出名。算法的核心思想为:当一个像素同邻域像素有较大差别(过亮、过暗)时,认定其更可能为角点。
算法设计
算法设计思路如下:
- 选取像素点
p
p
p,假定其亮度为
I
p
I_p
Ip?
- 设置阈值
T
T
T
- 以像素
p
p
p为圆心,选取半径为3的圆上的16个像素点
- 若选取的像素点中有
N
N
N个连续的点亮度大于
I
p
+
T
I_p+T
Ip?+T或小于
I
p
?
T
I_p-T
Ip??T,则认定像素点
p
p
p为特征点
- 对每个像素点进行循环执行上述步骤
对于
N
N
N,通常选取9、11、12个,分别称为FAST-9、FAST-11、FAST-12
预处理
为提高算法的搜索效率,在FAST-12算法中,增加了一步预处理过程:对每一个像素,只有当领域圆上的第1、5、9、13个像素点中任意三个像素点的亮度大于
I
p
+
T
I_p+T
Ip?+T或小于
I
p
?
T
I_p-T
Ip??T,该像素点才可能为一个特征点,否则直接排除。
角点集中问题
原始FAST角点的检测通常容易出现扎堆现象,故而在第一遍检测过后,应使用非极大值抑制(Non-maximal suppression),在一定区域内仅保留响应极大值的角点,从而避免角点集中的问题存在。
算法优缺点
FAST特征点的计算仅比较像素间亮度的差异,故而计算速度较快。但相同它具有重复性不高、分布不均匀的缺点。FAST角点不具备特征点的方向信息,同时该算法固定取半径为3的圆,存在尺度问题:远处看着想角点,接近后就发现不是角点了。
为解决此类问题,ORB特征对FAST进行改进,得到Oriented FAST
Oriented FAST
尺度不变性
针对FAST存在的尺度问题,ORB构建图像金字塔,并在每一层上检测角点。
所谓金字塔是指对图像进行不同层次的下采样,从而得到不同分辨率的图像。金字塔底层为原始图像,每上一层,进行一次固定倍率的缩放。
在特征匹配算法中,将较小的图像看成远处看过来的场景,并在金字塔上不同层上的图像上进行匹配,从而实现尺度不变性。
旋转不变性
在旋转方面,采用灰度质心算法(Intensity Centroid)进行实现。对特征点附近的图像灰度质心进行计算,所谓质心是指图像块灰度值作为权值的中心,计算方式如下:
-
在一个小的图像块B中,定义图像块的矩:
m
p
q
=
∑
x
,
y
∈
B
?
x
p
y
q
I
(
x
,
y
)
,
p
,
q
=
{
0
,
1
}
m_{pq}=\sum_{x,y\in B}\:x^py^qI(x, y),\qquad 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=\Bigl(\frac{m_{10}}{m_{00}},\frac{m_{01}}{m_{00}}\Bigr)
C=(m00?m10??,m00?m01??) -
连接图像块几何中心
O
O
O和质心
C
C
C,得到方向向量
O
C
→
\overrightarrow{OC}
OC
,从而得到特征点的方向:
θ
=
arctan
?
(
m
01
m
10
)
\theta = \arctan(\frac{m_{01}}{m_{10}})
θ=arctan(m10?m01??)
BRIEF描述子
提取到Oriented FAST关键点后,对每个点计算其描述子。
BRIEF是一种二进制描述子,其描述向量由许多个0、1组成,此处的0、1编码了关键点附近两个随机像素(p、q)的大小:若p大于q,取1,反之取0。重复选取128组(或256、512组)随机的p、q点进行编码,最终得到一个128维的由0和1构成的特征向量BRIEF-128。
BRIEF描述子能够使得特征点对光照环境发生改变时,不受较大影响。这是由于在相同的光照下,所选的p、q点之间的对比不会发生改变,从而使得最终得到的特征向量能够表征图像的特征信息。
BRIEF选取p、q的方式是随机的,也可提前定义选择的方式:
如上图,定义了五种不同的选取方式(每条边的两端为选取的p、q点)。原始BRIEF描述子不具备旋转不变性,图像在发生旋转时容易丢失。
ORB特征点对其进行改进,根据提取Oriented FAST时得到的关键点方向,计算旋转后的 Steer BRIEF描述子,从而具有旋转不变性。
对于二进制描述子,采用汉明距离(Hamming distance)作为度量单位,也即不同位数的个数。
特征匹配
特征匹配解决了视觉SLAM中数据关联的问题,也即当前图像信息中看到的路标同之前图像信息中看到的路标之间的关系。
假设在上一帧图像信息
I
t
I_t
It?中提取到的特征点为
x
t
m
m
=
1
,
2
,
?
?
,
M
x_t^m\enspace m=1,2,\cdots,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\enspace n=1,2,\cdots,N
xt+1n?n=1,2,?,N,则对于特征匹配可使用暴力匹配(Brute-Force Matcher)或快速近似最近邻匹配(FLANN)算法进行。
|