摘要
直接稀疏里程计方法(Direct Sparse Odometry, DSO)是一种基于一种新颖、高精度的稀疏直接结构和运动公式的视觉里程计方法。它结合了一个完全直接的概率模型(最小化光度误差)与所有模型参数的一致和联合优化,包括几何(在参考帧中以逆深度表示)和相机运动。这是通过丢弃在其它直接方法中使用的平滑度先验来实现的,本文在整个图像中均匀采样像素。由于我们的方法不依赖于关键点检测器或描述子,它可以自然地从所有具有灰度梯度的图像区域采样像素,包括边缘或平滑灰度变化的基本无特征的墙壁。该模型集成了完整的光度标定,考虑了曝光时间、透镜渐晕和非线性响应函数。我们在包含几个小时视频的三个不同数据集上彻底评估了我们的方法。实验表明,所提出的方法在各种真实世界环境中,无论是在跟踪精度还是鲁棒性方面,都明显优于最先进的直接和间接方法。
1 介绍
同时定位与建图(SLAM)和视觉里程计(VO)是许多新兴技术的基本组成部分——从自动驾驶汽车和无人机到虚拟现实和增强现实。近年来,SLAM和VO的实时方法取得了显著进展。长期以来,该领域以基于特征(间接)的方法为主,近年来,许多不同的方法得到了普及,即直接和稠密的表达。
直接对比间接。所有公式的基础是一个概率模型,它以噪声测量 Y Y Y为输入,并为未知和隐藏的模型参数(3D世界模型和相机运动)计算一个估计器 X X X。通常使用最大似然方法,它找到最大概率获得实际测量值的模型参数,即, X ∗ : = a r g m a x X X^{*}:=argmax_{X} X∗:=argmaxX P(Y|X)。
间接方法分两步进行。首先,对原始传感器测量数据进行预处理,生成一个中间表示,解决了部分整体问题,如计算图像中对应点的坐标。其次,将计算得到的中间值解释为概率模型中的噪声测量值 Y Y Y,以估计几何和相机运动。注意,第一步通常是通过提取和匹配稀疏的关键点来实现的,但是也存在其它选择,比如以密集的正则化的光流的形式建立对应关系。它还可以包括提取和匹配其它几何基元(如线段或曲线段)的参数表示的方法。
直接方法跳过这个预计算步骤,直接使用实际的传感器值——在特定时间周期内从特定方向接收到的光——作为概率模型中的测量 Y Y Y。
在被动视觉的情况下,直接方法因此优化光度误差,因为传感器提供光度测量。另一方面,间接方法优化了几何误差,因为预先计算的值-位置或流-矢量都是几何量。请注意,对于其它传感器形式,如深度相机或激光扫描仪(直接测量几何量),直接公式也可以优化几何误差。
稠密对比稀疏。稀疏方法只使用和重构一组选定的独立点(传统的角点),而密集方法试图使用和重构二维图像域中的所有像素。中间的方法(半密集)避免重建完整的曲面,但仍然旨在使用和重建一个(大部分连接和良好约束)子集。
然而,除了所使用的图像区域的范围之外,一个更根本的也是必然的区别在于增加了一个几何先验。在稀疏表述中,没有邻域的概念,几何参数(关键点位置)是有条件地独立于给定的相机位姿和内参。另一方面,稠密(或半稠密)方法利用所使用的图像区域的连通性来形成一个几何先验,通常有利于平滑。事实上,这样的先验是必要的,以使稠密的世界模型,仅从被动视觉观察。一般来说,这个先验是直接以额外的对数似然能量项的形式表示的。
请注意,稠密和稀疏之间的区别并不等同于直接和间接——事实上,所有四种组合都存在。
- 稀疏+间接:这是最广泛使用的表示,从一组关键点匹配中估计三维几何,从而使用没有几何先验的几何误差。例如Jin等人的研究[12],monoSLAM[4], PTAM[16]和ORB-SLAM[20]。
- 稠密+间接:该公式从密集的、正则化的光流场中或与之结合估计三维几何形状,从而将几何误差(偏离流场)与几何先验(流场的平滑度)结合起来,示例包括文献[23]和文献[27]。
- 稠密+直接:该公式采用了光度误差以及几何先验估计稠密或半稠密几何。例如DTAM[21],其前体[26],REMODE[22]和LSD-SLAM[5]。
- 稀疏+直接:这就是本文提出的表达。它优化了直接在图像上定义的光度误差,而没有结合几何先验。虽然我们不知道最近有任何使用该公式的工作,但Jin等人已经在2003年[13]提出了一种稀疏和直接的公式。然而,与他们基于扩展卡尔曼滤波器的工作相比,我们的方法使用了非线性优化框架。探索稀疏和直接组合的动机将在下一节中阐述。
此外,还有混合方法,如SVO[9],使用直接公式进行初始对齐和获取对应关系,然后切换到间接公式进行联合模型优化。
1.1 动机
本文提出的单目视觉里程计的直接和稀疏公式是出于以下考虑。
直接:关键点的主要好处之一是对光照和几何畸变鲁棒。例如自动曝光变化、非线性响应函数(伽马校正/白平衡)、镜头衰减(渐晕)、去马赛克伪影,甚至是由卷帘快门引起的强烈几何扭曲。然而,这种对光照变化的鲁棒性甚至不变性是以丢弃在这些变化中具有潜在价值的信息为代价的。
与此同时,对于介绍中提到的所有用例,数以百万计的设备将(而且已经)装备摄像头,只为计算机视觉算法提供数据,而不是捕捉图像供人类消费。这些摄像头也应该将被设计成提供一个完整的传感器模型,并以最佳服务于算法的方式捕捉数据。例如,自动曝光和伽马校正并不是未知的噪声源,而是能够提供更好的图像数据的特征——这些特征可以被纳入模型中,使获得的数据具有更多的信息。由于直接方法建模完整的图像形成过程到像素灰度,它大大受益于更精确的传感器模型。
直接公式的主要好处之一是,它不需要识别点本身,从而允许更细粒度的几何表示(像素逆深度)。此外,我们可以从所有可用数据(包括边缘和弱灰度变化)中采样,生成更完整的模型,并在纹理稀疏的环境中提供更强的鲁棒性。
稀疏。添加几何先验的主要缺点是引入了几何参数之间的相关性,这使得统计上一致的实时联合优化是不可行的(见图2)。这就是为什么现有的稠密或半稠密方法(a)忽略或粗略近似几何参数之间的相关性(橙色),和/或几何参数和相机位姿之间的相关性(绿色),以及(b)对稠密几何部分采用不同的优化方法,如原始对偶公式。
此外,当今先验的表达复杂性是具有局限性的。虽然它们使三维重建更稠密、局部更准确和视觉上更吸引人,但我们发现,先验可能会引入偏差,从而降低而不是提高长期的大规模的场景的精度。请注意,随着从真实数据中学习到的更现实、更公正的先验的引入,这种情况很可能会改变。
1.2 贡献
在本文中,我们提出了一种稀疏和直接的单目视觉里程计方法,一个示例重建如图1所示。据我们所知,这是唯一的完全直接的方法,联合优化所有涉及的模型参数的概率,包括相机位姿,相机内参,和几何参数(逆深度值)。这与混合方法(如SVO[9])形成了对比,后者恢复为联合模型优化的间接公式。
在一个滑动窗口中进行优化,旧相机位姿以及离开相机视野的点被边缘化,灵感来自[17]。与现有方法相比,我们的方法进一步充分利用了光度相机标定,包括镜头衰减、伽马校正和已知曝光时间。这种综合光度标定进一步提高了准确性和鲁棒性。
我们基于CPU的实现在笔记本电脑上实时运行。我们在三个不同的数据集(包括几个小时的视频)上进行了广泛的评估,表明它在鲁棒性和准确性方面优于其他最先进的方法(直接和间接)。通过减少设置(更少的点和活动的关键帧),它甚至可以以5倍的实时速度运行,同时仍然优于最先进的间接方法。在高且非实时设置(更多的点和活动关键帧)下,它创建的半稠密模型在密度上类似于LSD- SLAM,但更准确。
2 直接稀疏模型
我们的直接稀疏里程计是基于对最近帧的一个窗口的光度误差的持续优化,考虑到图像形成的光度标定模型。与现有的直接方法相比,我们联合优化所有涉及的参数(相机内参、相机外参和逆深度值),有效地执行了窗口稀疏光束调整的光度等效。我们保留了其他直接方法所采用的几何图形表示方法,例如,三维点在参考坐标系中表示为逆深度(因此有一个自由度)。
记号。在本文中,粗体小写字母(
x
\pmb{x}
xx)表示向量,粗体大写字母(
H
\pmb{H}
HH)表示矩阵。标量用小写字母(
t
t
t)表示,函数(包括图像)用小写字母(
I
I
I)表示。相机位姿表示为变换矩阵
T
i
∈
S
E
(
3
)
\pmb{T}_i \in SE(3)
TTi∈SE(3),将一个点从世界坐标系转换到相机坐标系。线性化的姿态增量将被表示为李代数元素
x
i
∈
s
e
(
3
)
x_i\in \mathfrak{se}(3)
xi∈se(3),我们直接将其写成向量
x
i
∈
R
6
x_i\in \mathbb{R}^6
xi∈R6——稍微滥用了符号。我们进一步定义常用的操作符
⊞
:
s
e
(
3
)
×
S
E
(
3
)
→
S
E
(
3
)
\boxplus:\ \mathfrak{se}(3) \times SE(3) \rightarrow SE(3)
⊞: se(3)×SE(3)→SE(3),利用左乘表述,即
x
i
⊞
T
i
:
=
e
x
i
^
⋅
T
i
(1)
\pmb{x}_i \boxplus \pmb{T}_i := e^{\hat{x_i}}\cdot \pmb{T}_i \tag{1}
xxi⊞TTi:=exi^⋅TTi(1)
2.1 标定
直接法是对图像建模的综合方法。除了几何相机模型(包含将3D点投射到2D图像的功能)之外,考虑光度相机模型也是有益的,它包含将传感器上的像素接收到的真实能量(辐照度)映射到相应灰度值的函数。请注意,对于间接方法,这是没有什么好处,因此被广泛忽略,因为常见的特征提取器和描述子是不变的(或高度鲁棒)光照变化。
2.1.1 几何相机标定
为了简单起见,我们为众所周知的针孔相机模型制定了我们的方法——在预处理步骤中消除径向失真。而对于广角相机,这确实减少了视野,它允许跨方法的比较,只实现有限的相机模型的选择。在本文中,我们将用 Π c : R 3 → Ω \Pi_c:\mathbb{R}^3\rightarrow \Omega Πc:R3→Ω表示投影,用 Π c − 1 : Ω × R → R 3 \Pi_c^{-1}:\Omega \times \mathbb{R}\rightarrow \mathbb{R}^3 Πc−1:Ω×R→R3表示反投影,其中 c c c表示相机的内参(对于针孔模型,这是焦距和主点)。请注意,与[2]类似,我们的方法可以扩展到其它(可逆)相机模型,尽管这确实增加了计算需求。
2.1.2 光度相机标定
我们使用[8]中使用的成像模型,它包含非线性响应函数
G
:
R
→
[
0
,
255
]
G:\mathbb{R}\rightarrow[0,255]
G:R→[0,255],以及透镜衰减(渐晕)
V
:
Ω
→
[
0
,
1
]
V:\Omega\rightarrow[0,1]
V:Ω→[0,1]。图3显示了一个来自TUM monoVO数据集的标定示例。那么,结合的模型可以由下式给出,
I
i
(
x
)
=
G
(
t
i
V
(
x
)
B
i
(
x
)
)
(2)
I_i(\pmb{x})=G(t_iV(\pmb{x})B_i(\pmb{x})) \tag{2}
Ii(xx)=G(tiV(xx)Bi(xx))(2)
其中,
B
i
B_i
Bi和
I
i
I_i
Ii为第
i
i
i帧的辐照度和观察到的像素灰度,
t
i
t_i
ti为曝光时间。该模型的第一步是对每个视频帧进行光度校正,即计算,
I
i
′
(
x
)
:
=
t
i
B
i
(
x
)
=
G
−
1
(
I
i
(
x
)
)
V
(
x
)
(3)
I'_i(\pmb{x}):=t_iB_i(\pmb{x})=\frac{G^{-1}(I_i(\pmb{x}))}{V(\pmb{x})} \tag{3}
Ii′(xx):=tiBi(xx)=V(xx)G−1(Ii(xx))(3)
在本文的其余部分中,除另有说明外,
I
i
I_i
Ii总是指经过光度校正的图像
I
i
′
I_i'
Ii′。
2.2 模型表述
我们将参考坐标系
I
i
I_i
Ii中
p
∈
Ω
i
\pmb{p} \in \Omega_i
pp∈Ωi点在目标坐标系
I
j
I_j
Ij中观测到的光度误差定义为像素小邻域上的加权SSD。我们的实验中已经表明,8个像素排列在一个稍微分散的模式(见图4),在评估所需的计算、对运动模糊的鲁棒性和提供足够信息之间给出了一个很好的权衡。注意,就所包含的信息而言,在如此小的像素邻域上评估SSD类似于为中心像素添加一阶和二阶辐照度导数常数项(除了辐照度常数)。令,
E
p
j
:
=
∑
p
∈
N
p
w
p
∥
(
I
j
[
p
′
]
−
b
j
)
−
t
j
e
a
j
t
i
e
a
i
(
I
i
[
p
]
−
b
i
)
∥
γ
(4)
E_{p_j}:=\sum_{p\in\mathcal{N}_p} w_p \bigg \Vert (I_j[\pmb{p}']-b_j)-\frac{t_je^{a_j}}{t_ie^{a_i}}(I_i[\pmb{p}]-b_i) \bigg\Vert_\gamma \tag{4}
Epj:=p∈Np∑wp∥
∥(Ij[pp′]−bj)−tieaitjeaj(Ii[pp]−bi)∥
∥γ(4)
其中
N
p
\mathcal{N}_p
Np是包含在SSD当中的像素集合;
t
i
t_i
ti和
t
j
t_j
tj分别是图像
I
i
I_i
Ii和
I
j
I_j
Ij的曝光时间;
∥
⋅
∥
\Vert \cdot \Vert
∥⋅∥是Huber范数。此外,
p
′
\pmb{p}'
pp′表示
(
p
,
d
p
)
(\pmb{p},d_p)
(pp,dp)的投影点,由下式给出,
p
′
=
Π
c
(
R
Π
c
−
1
(
p
,
d
p
)
+
t
)
(5)
\pmb{p}' = \Pi_c(\pmb{R}\Pi_c^{-1}(\pmb{p},d_p)+\pmb{t}) \tag{5}
pp′=Πc(RRΠc−1(pp,dp)+tt)(5)
其中,
[
R
t
0
1
]
:
=
T
j
T
i
−
1
(6)
\begin{bmatrix} \pmb{R} & \pmb{t} \\ 0 & 1 \end{bmatrix} := \pmb{T}_j\pmb{T}_i^{-1} \tag{6}
[RR0tt1]:=TTjTTi−1(6)
为了使我们的方法能够在没有已知曝光时间的情况下对序列进行操作,我们加入了一个由 e − a i ( I i − b i ) e^{-a_i}(I_i-b_i) e−ai(Ii−bi)给出的附加仿射亮度传递函数。请注意,与大多数以前的公式[6]和[13]相比,标量因子 e − a i e^{-a_i} e−ai是对数参数化的。这既防止它变成负的,并避免由乘法(即指数增加)漂移引起的数值问题。
除了使用鲁棒的Huber惩罚外,我们还应用了一个梯度相关的加权
w
p
w_p
wp,
w
p
:
=
c
2
c
2
+
∣
∣
∇
I
i
(
p
)
∣
∣
2
2
(7)
w_p:=\frac{c^2}{c^2+||\nabla I_i(\pmb{p})||_2^2} \tag{7}
wp:=c2+∣∣∇Ii(pp)∣∣22c2(7)
降低那些高梯度值像素的权重。该加权函数可以在概率上解释为在投影点位置
p
′
\pmb{p}'
pp′上添加小的独立的几何噪声,并立即边缘化它——近似的小几何误差。总结而言,
E
p
j
E_{p_j}
Epj取决于如下变量:(1)点的逆深度
d
p
d_p
dp;(2)相机内参
c
c
c;(3)相关帧
T
i
\pmb{T}_i
TTi和
T
j
\pmb{T}_j
TTj的位姿;(4)它们的亮度转换参数
a
i
a_i
ai、
b
i
b_i
bi、
a
j
a_j
aj和
b
j
b_j
bj。
所有帧和点的全部光度误差由下式给出,
E
p
h
o
t
o
:
=
∑
i
∈
F
∑
p
∈
P
i
∑
j
∈
o
b
s
(
p
)
E
p
j
(8)
E_{photo}:=\sum_{i\in \mathcal{F}}\sum_{p\in P_i}\sum_{j\in obs(p)} E_{p_j} \tag{8}
Ephoto:=i∈F∑p∈Pi∑j∈obs(p)∑Epj(8)
其中
i
i
i遍历所有的帧
F
\mathcal{F}
F,
p
\pmb{p}
pp遍历第
i
i
i帧的像素点集合
P
i
\mathcal{P}_i
Pi,
j
j
j遍历能观测到点
p
\pmb{p}
pp的所有帧的集合
o
b
s
(
p
)
obs(\pmb{p})
obs(pp)。图5展示了最终的因子图。与经典重投影误差的唯一区别是每个残差附加依赖于主帧的位姿,也就是说,每个残差项依赖于两帧而不是一帧。虽然这增加了非对角条目的位姿块的海塞矩阵,但它不影响稀疏模式后应用舒尔补边缘化的点参数。由此得到的系统可以类比地解为间接公式。请注意,雅可比矩阵相对于两帧的位姿是通过它们的相对位姿的伴随线性相关的。在实践中,当计算海塞矩阵或它的舒尔补时,这个因子可以从求和中提取出来,大大减少了由更多变量依赖引起的额外计算。
如果曝光时间已知,我们进一步添加一个先验使得仿射亮度传递函数为零,
E
p
r
i
o
r
:
=
∑
i
∈
F
(
λ
a
a
i
2
+
λ
b
b
i
2
)
(9)
E_{prior}:=\sum_{i\in \mathcal{F}}(\lambda_a a_i^2+\lambda_b b_i^2) \tag{9}
Eprior:=i∈F∑(λaai2+λbbi2)(9)
如果没有提供光度标定,我们设
t
i
=
1
t_i=1
ti=1和
λ
a
=
λ
b
=
0
\lambda_a=\lambda_b=0
λa=λb=0,在这种情况下,他们需要模拟相机曝光时间的未知变化。作为一个附注,应该提到的是,如果
x
i
x_i
xi和
y
i
y_i
yi都包含噪声测量(参见[7]),那么乘性因子
a
∗
=
a
r
g
m
a
x
a
∑
i
(
a
x
i
−
y
i
)
2
a^*=argmax_a \sum_i(ax_i-y_i)^2
a∗=argmaxa∑i(axi−yi)2的ML估计器是有偏差的;导致
a
a
a在无约束情况
λ
a
=
0
\lambda_a = 0
λa=0下存在漂移。虽然这通常对估计的位姿影响不大,但如果场景只包含少量的较弱的灰度变化,它可能会引入偏差。
点的维度。在提出的直接模型中,一个点仅由一个参数(参考系中的逆深度)参数化,而在间接模型中有三个未知数。为了理解这种差异的原因,我们首先注意到,在这两种情况下,3D点实际上都是连续的真实世界的3D表面上任意位置的离散样本。不同之处在于曲面上这个2D位置的定义方式。在间接方法中,它隐式定义为在使用的角点响应函数中产生最大值的点(投影到图像中)。这意味着表面和点在表面上的位置都是未知的,需要估计。在我们的直接公式中,点被简单地定义为源像素的光线照射到表面的点,因此只剩下一个未知点。除了减少参数的数量之外,这自然可以实现逆深度参数化,在高斯框架中,它更适合表示基于立体深度估计的不确定性,特别是对于距离较远的点[3]。
一致性。严格地说,提出的直接稀疏模型允许多次使用一些观测值(像素值),而另一些则完全不使用。这是因为——尽管我们的点选择策略试图通过在空间中均匀分布点来避免这种情况(参见第3.2节)——我们允许点观测重叠,从而依赖于相同的像素值。这种情况尤其发生在纹理很少的场景中,所有的点都必须从纹理图像区域的一个小子集中选择。然而,我们认为这在实践中的影响可以忽略不计,如果需要的话,可以通过删除(或降低权重)使用相同像素值的观测值来避免。
2.3 窗口优化
我们遵循Leutenegger等人[17]的方法,使用高斯-牛顿算法在滑动窗口中优化总误差(公式(8)),这在速度和灵活性之间给出了很好的权衡。为了便于表示,我们将公式(1)中定义的 ⊞ \boxplus ⊞操作符扩展到所有优化参数——对于 S E ( 3 ) SE(3) SE(3)以外的参数,它表示常规的加法。我们将使用 ζ ∈ S E ( 3 ) n × R m \zeta \in SE(3)^n \times \mathbb{R}^m ζ∈SE(3)n×Rm来表示所有优化的变量,包括相机位姿、仿射亮度参数、逆深度值和相机内参。与[17]中一样,边缘化依赖于 ζ \zeta ζ中的参数的残差将固定切线空间,在该切线空间中积累有关该参数的任何未来信息(增量更新)。我们将用 ζ 0 \zeta_0 ζ0表示这个切线空间的评估点,用 ζ = x ⊞ ζ 0 \zeta = x \boxplus \zeta_0 ζ=x⊞ζ0表示累积的增量更新。图6可视化了不同变量之间的联系。
高斯-牛顿优化。我们计算高斯-牛顿系统如下,
H
=
J
T
W
J
a
n
d
b
=
−
J
T
W
r
(10)
H = J^TWJ \ \ and \ \ b = -J^TWr \tag{10}
H=JTWJ and b=−JTWr(10)
其中
W
∈
R
n
×
n
W\in \mathbb{R}^{n\times n}
W∈Rn×n是包含权重的对角矩阵,
r
∈
R
n
r\in \mathbb{R}^n
r∈Rn是堆积的残差向量,
J
∈
R
n
×
d
J\in \mathbb{R}^{n\times d}
J∈Rn×d是
r
r
r的雅克比。
注意,对于每个点向能量贡献
∣
N
p
∣
=
8
|\mathcal{N}_p|=8
∣Np∣=8个残差。为了记号简便,下面我们只考虑一个残差
r
k
r_k
rk,以及雅可比矩阵
J
k
J_k
Jk的相关行。在优化期间,以及在边缘化时,残差总是按当前状态估计进行评估,即:
r
k
=
r
k
(
x
⊞
ζ
0
)
=
(
I
j
[
p
′
(
T
i
,
T
j
,
d
,
c
)
]
−
b
j
)
−
t
j
e
a
j
t
i
e
a
i
(
I
i
[
p
]
−
b
i
)
(11)
r_k=r_k(x\boxplus \zeta_0) \\ = (I_j[\pmb{p}'(T_i,T_j,d,c)]-b_j)-\frac{t_je^{a_j}}{t_ie^{a_i}}(I_i[\pmb{p}]-b_i) \tag{11}
rk=rk(x⊞ζ0)=(Ij[pp′(Ti,Tj,d,c)]−bj)−tieaitjeaj(Ii[pp]−bi)(11)
其中
(
T
i
,
T
j
,
d
,
c
,
a
i
,
a
j
,
b
i
,
b
j
)
:
=
x
⊞
ζ
0
(T_i,T_j,d,c,a_i,a_j,b_i,b_j):=x\boxplus\zeta_0
(Ti,Tj,d,c,ai,aj,bi,bj):=x⊞ζ0是当前残差决定的状态变量。雅可比矩阵
J
k
J_k
Jk的值是关于对
x
x
x的附加增量的,
J
k
=
∂
r
k
(
(
δ
+
x
)
⊞
ζ
0
)
∂
δ
(12)
J_k=\frac{\partial r_k((\delta +x)\boxplus \zeta_0)}{\partial \delta} \tag{12}
Jk=∂δ∂rk((δ+x)⊞ζ0)(12)
它可以分解为,
J
k
=
[
∂
I
j
∂
p
′
⏟
J
I
∂
p
′
(
(
δ
+
x
)
⊞
ζ
0
)
∂
δ
g
e
o
⏟
J
g
e
o
,
∂
r
k
(
(
δ
+
x
)
⊞
ζ
0
)
∂
δ
p
h
o
t
o
⏟
J
p
h
o
t
o
]
(13)
J_k=\bigg[ \underbrace{\frac{\partial I_j}{\partial \pmb{p}'}}_{J_I} \ \underbrace{\frac{\partial{\pmb{p}'}((\delta +x)\boxplus \zeta_0)}{\partial \delta_{geo}}}_{J_{geo}} , \ \ \underbrace{\frac{\partial r_k((\delta + x)\boxplus \zeta_0)}{\partial \delta_{photo}}}_{J_{photo}} \bigg] \tag{13}
Jk=[JI
∂pp′∂Ij Jgeo
∂δgeo∂pp′((δ+x)⊞ζ0), Jphoto
∂δphoto∂rk((δ+x)⊞ζ0)](13)
其中
δ
g
e
o
\delta_{geo}
δgeo表示“几何”参数(
T
i
,
T
j
,
d
,
c
T_i,T_j,d,c
Ti,Tj,d,c),
δ
p
h
o
t
o
\delta_{photo}
δphoto表示“光度”参数
(
a
i
,
a
j
,
b
i
,
b
j
)
(a_i,a_j,b_i,b_j)
(ai,aj,bi,bj)。我们采用两种近似方法,如下所述。
首先, J p h o t o J_{photo} Jphoto和 J g e o J_{geo} Jgeo都是在 x = 0 x=0 x=0处计算而来的。这种技术被称为“首次估计雅可比矩阵”,用于保持系统的一致性和防止虚假信息的积累。特别是,在能量中存在非线性零空间(在我们的公式中绝对位姿和比例),在不同的评估点周围添加线性化可以消除这些,从而慢慢地破坏系统。在实践中,这种近似是非常好的,因为 J p h o t o J_{photo} Jphoto和 J g e o J_{geo} Jgeo相比于增量 x x x的大小是平滑的。相比之下, J I J_I JI就不那么平滑了,但是不影响零空间。因此,取 x x x的当前值,即与残差 r k r_k rk在同一点。我们利用中心差分计算图像在整数位置的导数,然后用双线性插值。
其次,假设 J g e o J_{geo} Jgeo对于属于同一点的所有残差都是相同的,并且只对中心像素进行计算。同样,这个近似在实践中是非常好的。虽然它大大减少了所需的计算,但我们没有观察到它对使用的任何数据集的准确性有显著影响。
从产生的线性系统中,增量被计算为
δ
=
H
−
1
b
\delta=H^{-1}b
δ=H−1b,并添加到当前状态,
x
n
e
w
←
δ
+
x
(14)
x^{new} \leftarrow \delta +x \tag{14}
xnew←δ+x(14)
注意,由于第一估计雅可比矩阵近似,一个乘式公式(用
δ
⊞
(
x
⊞
ζ
0
)
\delta \boxplus(x\boxplus \zeta_0)
δ⊞(x⊞ζ0)替换公式(12)中的
(
δ
+
x
)
⊞
ζ
0
(\delta +x)\boxplus\zeta_0
(δ+x)⊞ζ0)得到完全相同的雅可比矩阵,因此乘式更新步骤
x
n
e
w
←
l
o
g
(
δ
⊞
e
x
)
x^{new}\leftarrow log(\delta \boxplus e^x)
xnew←log(δ⊞ex)同样有效。
在每个更新步骤之后,我们使用 ζ 0 n e w ← x ⊞ ζ o \zeta^{new}_0\leftarrow x \boxplus \zeta_o ζ0new←x⊞ζo和 x ← 0 x\leftarrow 0 x←0更新不属于边缘化项的所有变量的 ζ 0 \zeta_0 ζ0。实际上,这包括所有深度值以及最新关键帧的位姿。每次添加一个新的关键帧时,我们执行多达6次高斯-牛顿实验,如果 δ \delta δ足够小,就会提前中断。我们发现——因为我们从不远离最小值——不需要Levenberg-Marquardt阻尼(减慢收敛速度)。
边缘化。当活动变量集变得太大时,使用舒尔补边缘化旧的变量。与[17]相似,我们去掉所有会影响 H H H的稀疏模式的残差项。当边缘化 i i i帧时,我们首先边缘化 P i \mathcal{P}_i Pi中的所有点,以及在最后两个关键帧中没有被观察到的点。关键帧 i i i中活动点的剩余观测值从系统中删除。
边缘化的进程如下。设
E
′
E'
E′表示能量中包含所有依赖于被边缘化的状态变量的残差部分。我们首先在当前状态估计
ζ
=
x
⊞
ζ
0
\zeta=x\boxplus \zeta_0
ζ=x⊞ζ0附近计算一个高斯-牛顿近似
E
′
E'
E′。这给出了,
E
′
(
x
⊞
ζ
0
)
≈
2
(
x
−
x
0
)
T
b
+
(
x
−
x
0
)
T
H
(
x
−
x
0
)
+
c
=
2
x
T
(
b
−
H
x
0
)
⏟
=
:
b
′
+
x
T
H
x
+
(
c
+
x
0
T
H
x
0
−
x
0
T
b
)
⏟
=
:
c
′
(15)
E'(x\boxplus\zeta_0) \\ \approx2(x-x_0)^Tb+(x-x_0)^TH(x-x_0)+c\\ =2x^T\underbrace{(b-Hx_0)}_{=:b'}+x^THx+\underbrace{(c+x_0^THx_0-x_0^Tb)}_{=:c'} \tag{15}
E′(x⊞ζ0)≈2(x−x0)Tb+(x−x0)TH(x−x0)+c=2xT=:b′
(b−Hx0)+xTHx+=:c′
(c+x0THx0−x0Tb)(15)
其中
x
0
x_0
x0表示
x
x
x的当前值(
r
r
r的评估值)。常数
c
c
c和
c
′
c'
c′可降,
H
H
H和
b
b
b的定义为(10)、(11)、(12)和(13)。这是一个关于
x
x
x的二次函数,我们可以应用舒尔补边缘化变量的子集。写成线性方程组,它变成,
[
H
α
α
H
α
β
H
β
α
H
β
β
]
[
x
α
x
β
]
=
[
b
α
′
b
β
′
]
(16)
\begin{bmatrix} \pmb{H}_{\alpha\alpha} & \pmb{H}_{\alpha \beta} \\ \pmb{H}_{\beta \alpha} & \pmb{H}_{\beta \beta} \end{bmatrix} \begin{bmatrix} \pmb{x}_{\alpha} \\ \pmb{x}_{\beta} \end{bmatrix} = \begin{bmatrix} \pmb{b}'_{\alpha} \\ \pmb{b}'_{\beta} \end{bmatrix} \tag{16}
[HHααHHβαHHαβHHββ][xxαxxβ]=[bbα′bbβ′](16)
其中
β
\beta
β表示我们想要边缘化的变量块,
α
\alpha
α表示我们想要保留的变量块。应用舒尔补,产生
H
α
α
^
x
α
=
b
α
′
^
\hat{H_{\alpha \alpha}}x_{\alpha}=\hat{b'_{\alpha}}
Hαα^xα=bα′^,
H
α
α
^
=
H
α
α
−
H
α
β
H
β
β
−
1
H
β
α
(17)
\hat{H_{\alpha \alpha}} = H_{\alpha \alpha}-H_{\alpha \beta}H_{\beta \beta}^{-1}H_{\beta \alpha} \tag{17}
Hαα^=Hαα−HαβHββ−1Hβα(17)
b
α
′
^
=
b
α
′
−
H
α
β
H
β
β
−
1
b
β
′
(18)
\hat{b'_{\alpha}}=b'_{\alpha}-H_{\alpha \beta}H^{-1}_{\beta \beta}b_{\beta}' \tag{18}
bα′^=bα′−HαβHββ−1bβ′(18)
因此,
x
α
x_{\alpha}
xα上的剩余能量可以写成,
E
′
(
x
α
⊞
(
ζ
0
)
α
)
=
2
x
α
T
b
α
′
^
+
x
α
T
H
α
α
^
x
α
(19)
E'(x_{\alpha}\boxplus(\zeta_0)_{\alpha})=2x_{\alpha}^T\hat{b'_{\alpha}}+x_{\alpha}^T\hat{H_{\alpha \alpha}}x_{\alpha} \tag{19}
E′(xα⊞(ζ0)α)=2xαTbα′^+xαTHαα^xα(19)
这是一个关于
x
x
x的二次函数,可以在后续的所有优化和边缘化操作中简单地添加到全光度误差
E
p
h
o
t
o
E_{photo}
Ephoto中,取代相应的非线性项。注意,这要求在所有后续优化和边缘化步骤中,对于
E
′
E'
E′中出现的所有变量,
ζ
0
\zeta_0
ζ0的切线空间保持不变。