赞
踩
本篇是SLAM前端的最后一节,直接法。
上篇提到的光流法,用于特征点的快速匹配,然后再通过重投影误差优化估计位姿。这是一种“两步走”的位姿估计法,即先匹配,再优化
直接法基于光度不变假设,将匹配步骤省略,直接构建重投影误差优化位姿。首先给出相机模型,假设空间中某点
P
P
P:
P
′
=
(
T
P
)
[
1
:
3
]
p
=
1
Z
′
K
P
′
P'=(TP)_{[1:3]} \\ p= \frac{1}{Z'} KP'
P′=(TP)[1:3]p=Z′1KP′
对于相邻两帧图像,如果上一帧
P
P
P与关键点
p
′
p'
p′对应,与当前帧上的关键点
p
p
p对应,直接法认为两点理论上的灰度值应当相同:
I
1
(
p
′
)
=
I
2
(
p
)
I_1(p')=I_2(p)
I1(p′)=I2(p)
因此,就可以构建光度误差进行优化:
e
=
I
1
(
p
)
−
I
2
(
p
′
)
min
T
∑
i
=
1
n
=
min
T
∑
i
=
1
n
∣
∣
I
1
(
p
i
)
−
I
2
(
p
i
′
)
∣
∣
2
2
e=I_1(p)-I_2(p') \\ \quad \\ \min_T \sum_{i=1}^n = \min_T \sum_{i=1}^n ||I_1(p_i) - I_2(p_i')||^2_2 \\
e=I1(p)−I2(p′)Tmini=1∑n=Tmini=1∑n∣∣I1(pi)−I2(pi′)∣∣22
那么问题就变成了如何优化上面的非线性最小二乘问题。首先还是求优化函数的梯度:
e
=
I
1
(
p
)
−
I
2
(
1
s
K
(
e
δ
∧
P
)
[
1
:
3
]
)
=
I
1
(
p
)
−
I
2
(
1
s
K
P
′
)
∇
e
=
−
∂
I
2
∂
p
′
∂
p
′
∂
P
′
∂
P
′
∂
Δ
δ
e= I_1(p) - I_2(\frac {1}{s} K(e^{\delta^\land}P)_{[1:3]}) = I_1(p) - I_2(\frac {1}{s} KP') \\ \quad \\ \nabla e = -\frac {\partial I_2}{\partial p'} \frac {\partial p'}{\partial P'} \frac {\partial P'}{\partial \Delta \delta} \\
e=I1(p)−I2(s1K(eδ∧P)[1:3])=I1(p)−I2(s1KP′)∇e=−∂p′∂I2∂P′∂p′∂Δδ∂P′
梯度的后两项,与BA中的梯度是相同的:
∂
p
′
∂
P
′
∂
P
′
∂
Δ
δ
=
−
[
1
Z
′
f
x
0
−
1
Z
′
2
f
x
X
′
0
1
Z
′
f
y
−
1
Z
′
2
f
y
Y
′
]
[
I
−
P
′
∧
]
∇
e
=
∂
I
2
∂
p
′
[
1
Z
′
f
x
0
−
1
Z
′
2
f
x
X
′
0
1
Z
′
f
y
−
1
Z
′
2
f
y
Y
′
]
[
I
−
P
′
∧
]
\frac {\partial p'}{\partial P'} \frac {\partial P'}{\partial \Delta \delta} = -
最后,使用高斯牛顿法或者LM法做非线性优化,就能得到位姿结果。
优点:从以上步骤可以看出,实际上直接法并不依赖特征点,甚至可以随机取点做优化,非常省时;可以实现半稠密,稠密建图。
缺点:只适合小运动的位姿估计;光度不变假设实际很难满足;图像非凸,优化容易陷入局部最小。使用时通常采用更多的像素点进行优化。
下篇开始,进入代码学习,Ceres+g2o
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。