![](https://csdnimg.cn/release/download_crawler_static/18269840/bg3.jpg)
(1/Z
2
)Kexp(
ξ
∧
)P,K为相机内参,R、t表示相机外参(李代数
为
ξ
),Z
2
表示深度值,式中隐含了齐次和非齐次间的转换。如
果考虑图像中所有匹配的特征点则得到如下函数:
T
k
=
R
k,k-1
t
k,k-1
1 1
=argmin
T
k
∑
i
‖
p
i
k
-p
i
k-1
‖
2
=
argmin
ξ
∑
i
‖
u
i
-
1
Z
i
Kexp(
ξ
∧
)p
i
‖
2
然后使用李代数上的扰动模型分析其导数,并通过高斯牛
顿等优化方法得到两帧间的相对变换,具体做法又叫做捆集优
化(bundleadjustment,BA)
[19]
,在编程上一般采用 generalgraph
optimization(G2O)等优化库实现。
c)3D3D主要是激光 SLAM采用迭代最近点(ICP)求解。
在 VSLAM中可以在 RGBDSLAM中使用,但由于 RGBD相机
的限制,仅适用于室内,而且适用于小的场景。这是由于深度
的估计不准,导致误差比 3D2D大。直观的感觉是相机得到
的 3D位置误差较大(相机方向性好,距离信息误差大),3D2D
只使用一次深度信息,但是 3D3D采用两次深度信息,导致计
算的精确度降低,所以在普通相机中一般回避 3D3D的方式。
112 直接法
特征点法有几个问题:a)关键点的提取和描述子的计算
非常耗时,如果保证
SLAM实时运行,需要 30fps,也就是每帧
图像的处理 时间 约 30ms,而 实 时 性 最 好 的 ORB也需 要 近
20ms/frame
[5]
;b)特征点法仅使用了图像中几百个特征点,占
整个图像几十万个像素的很小部分,丢弃了大量可以利用的图
像信息;
c)特征点的寻找是根据人类自己设计的检测算法,并
不完善,有些图像没有明显的纹理,有些图像的纹理比较相似,
这些情况下特征点法的 VSLAM就很难运行;d)特征点法只能
得到空间的稀疏三维点云,离稠密地图尚有一定的距离,与用
于机器人导航的地图差距就更大了。
直接法根据像素灰度信息估计相机的运动,几乎不用计算
关键点和描述子,省去了计算关键点和描述子的时间,可用于
在特征点缺失但是有图像灰度梯度的场合(当然对于一张白
墙,它也无能为力)。相比于特征点法只能构建稀疏点云地图
(构建半稠密或稠密需要采取其他技巧),直接法具备构建半
稠密和稠密地图的能力。与特征点法中特征点的特性不变有
所不同,直接法的不变量是对应像素点的灰度值。首先假设两
个像素点在第一帧与第二帧之间灰度值保持不变,如图 8所
示,
P
1
和 P
2
的灰度值是一样的,直接法的思路是根据当前相
机的位姿估计来寻找 P
2
的位置,如果相机位姿不好,P
2
和 P
1
的外观会有明显差别。为了减少这个差别,通过优化相机位姿
来寻找与 P
1
更相似的 P
2
。这就是在灰度不变的假设下,直接
采用两帧图像中的匹配像素的灰度值构建光度误差的优化函
数,改变相机位姿使之最小化。根据图像像素
P的情况,直接
法分为稀疏、半稠密和稠密直接法。P如果是稀疏关键点,称
之为稀疏直接法;P如果是图像中梯度明显的点,称之为半稠
密法;
P如果是图像中的所有像素,称之为稠密法。
直接法的优化问题构建是考虑某个空间点 P[X,Y,Z]
T
,
P
1
、P
2
分别为投影坐标,设第一个相机为初始点,第二个相机
相对变换为 R、t(李代数为
ξ
),Z
1
和 Z
2
是对应的深度值,K为
相机的内参,那么投影方程分别为 P
1
=[
u
1
v
1
]
T
=(1/Z
1
)KP
和 P
2
=[
u
2
v
2
]
T
=(1/Z
2
)K(RP+t)=(1/Z
2
)Kexp(
ξ
∧
)P,
测量误差为 P
1
和 P
2
的灰度差 e=I
1
(p
1
)-I
2
(p
2
)。优化的目
标是改变相机位姿使所有误差和减小,考虑图像所有像素,构
建优化函数(整幅图像像素
P
i
的误差二范数和,优化变量为相
机位姿)minJ(
ξ
)=
∑
N
i=1
e
T
i
e
i
。其中:e
i
表示图像中所有对应的 P
1
和 P
2
的灰度差。与特征点法一样,也需要推导李代数的导数
[5]
和采用优化库求解。同样地,直接法也有自己的局限,首先它需
要满足光度不变性假设,这对相机提出了很高的要求,而且稠密
法因为需要计算图像的所有像素(
640×480就是 30万个像
素),很难在现有 CPU上实时运行。在前端,特征点法和直接法
最大的区别在于:直接法是依赖于梯度搜索,如果两帧采集时间
过大,可能图像运动距离过大,导致灰度不规则变化,从而梯度
搜索的优化函数进入局部最小,无法给出较好的优化解;特征点
法对运动和光照有一定的鲁棒性,是根据特征点对距离和光照
的鲁棒性来决定的,这也是未来 SLAM发展的决定因素之一。
12 回环检测
回环检测就是利用传感器有效地检测出以前经过这里,它
对于 SLAM系统意义非常重要
[21]
,因为无论数据多么精确、模
型多么优秀,系统的累积误差始终存在。如果能正确地检测到
回环,对构建全局一致性地图是非常有帮助的,另一方面可以
利用回环检测对跟踪失败后的情况进行重定位。在 VLSAM
中,回环检测大多数做法是基于外观比较图像间的相似性
[22]
。
如果用特征点的方式,比如采用
SIFT特征描述一幅图像,首先
每个 SIFT矢量都是 128维的,假设每幅图像通常都包含 1000
个 SIFT特征,在进行图像相似度计算时,这个计算量非常大,
所以通常不会直接采用特征点,而是采用词袋模型。
词袋模型(bagofwords,BoW)
[23]
早期是一种文本表征方
法,后引入到计算机视觉领域,逐渐成为一种很有效的图像特
征建模方法
[24]
。它通过提取图像特征,再将特征进行分类构建
视觉字典,然后采用视觉字典中的单词集合可以表征任一幅图
像。换句话说,通过 BoW 可以把一张图片表示成一个向量。这
对判断图像间的关联很有帮助,所以目前比较流行的回环解决
方案都是采用的 BoW 及其基 础 上 衍 生 的 算 法 IABMAP
[25]
、
FABMAP
[26,27]
是在滤波框架下计算回环概率,RTABMAP
[28]
采
用关键帧比较相似性,DLoopDetector
[23]
(在 DBoW2基础上开发
的回环检测库)采用连续帧的相似性检测判断是否存在回环。
回环检测主要由 BoW 模块、算法模块、验证模块三部分组成。
a)BoW 模块分为:(a)图像预处理,假设训练集有 M幅图
像,将图像标准化为 patch,统一格式和规格;(b)特征提取,假
设 M幅图像,对每一幅图像提取特征,共提取出 N个 SIFT特
征;(c)特征聚类,采用 Kmeans算法把 N个对象分为 K个簇
(视觉单词表),使簇内具有较高的相似度,而簇间相似度较
低;(d)统计得到图像的码本,每幅图像以单词表为规范对该
幅图像的每一个 SIFT特征点计算它与单词表中每个单词的距
离,最近的加
1,便得到该幅图像的码本;还需要码本矢量归一
化,因为每一幅图像的 SIFT特征个数不定,所以需要归一化。
b)算法模块分为两种:
(
a)贝叶斯估计方法。采用 BoW 描述机器人每一位置的
场景图像,估计已获取图像与对应位置的先验概率,对当前时
刻计算该新场景图像与已访问位置匹配的后验概率,概率大于
阈值则标记为闭环。
(b)相似性方法。有了字典以后,给定任意特征点 f
i
,只要
在字典树中逐层查找,最后都能找到与之对应的单词
w
i
。通
常字典足够大,可以说它们来自同一类物体。但是这种方法对
所有单词都是同样对待,常规的做法是采用 TFIDF(term fre
quencyinversedocumentfrequency)
[29]
。TF(某个特征 在 一 幅
图像中出现的频率)的思想是某单词在一幅图像中经常出现,
它的区分度就越高;IDF的思想是某单词在字典中出现的频率
越低,则图像分类时的区分度越高。设所有特征数量为 n,某
个节点 w
i
所含的特征数量为 n
i
,那么该单词的 IDF为 IDF
i
=
logn/n
i
;设图像 A中单词 w
i
出现了 n
i
次,一共出现的单词次数
是 n,则 TF
i
=n
i
/n;定义 w
i
的权重为
η
i
=TF
i
×IDF
i
。将权重
应用于图像 A,得到词袋向量 v
A
{(w
1
,
η
1
),(w
2
,
η
2
),…,
(w
N
,
η
N
)}。通过 L
1
范数计算 A、B图像的相似度 s(v
A
-v
B
)=
·3821·
第 5期 邹 雄,等:基于特征点法和直接法 VSLAM的研究