论文阅读《Direct Sparse Odometry》1

摘要

直接稀疏里程计方法(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 动机

本文提出的单目视觉里程计的直接和稀疏公式是出于以下考虑。

直接:关键点的主要好处之一是对光照和几何畸变鲁棒。例如自动曝光变化、非线性响应函数(伽马校正/白平衡)、镜头衰减(渐晕)、去马赛克伪影,甚至是由卷帘快门引起的强烈几何扭曲。然而,这种对光照变化的鲁棒性甚至不变性是以丢弃在这些变化中具有潜在价值的信息为代价的。

在这里插入图片描述

图1 直接稀疏里程计(DSO)。3D重建和跟踪轨迹,围绕建筑物进行1分40秒的视频骑行(仅限单目视觉里程计)。左下角的插图显示了开始点和结束点的特写,显示了轨迹中的累积漂移。下面一行显示了一些视频帧。

与此同时,对于介绍中提到的所有用例,数以百万计的设备将(而且已经)装备摄像头,只为计算机视觉算法提供数据,而不是捕捉图像供人类消费。这些摄像头也应该将被设计成提供一个完整的传感器模型,并以最佳服务于算法的方式捕捉数据。例如,自动曝光和伽马校正并不是未知的噪声源,而是能够提供更好的图像数据的特征——这些特征可以被纳入模型中,使获得的数据具有更多的信息。由于直接方法建模完整的图像形成过程到像素灰度,它大大受益于更精确的传感器模型。

直接公式的主要好处之一是,它不需要识别点本身,从而允许更细粒度的几何表示(像素逆深度)。此外,我们可以从所有可用数据(包括边缘和弱灰度变化)中采样,生成更完整的模型,并在纹理稀疏的环境中提供更强的鲁棒性。

稀疏。添加几何先验的主要缺点是引入了几何参数之间的相关性,这使得统计上一致的实时联合优化是不可行的(见图2)。这就是为什么现有的稠密或半稠密方法(a)忽略或粗略近似几何参数之间的相关性(橙色),和/或几何参数和相机位姿之间的相关性(绿色),以及(b)对稠密几何部分采用不同的优化方法,如原始对偶公式。

在这里插入图片描述

图2 稀疏和稠密海塞矩阵结构。左图为稀疏光束调整的海塞矩阵结构,由于几何-几何块是对角的,因此通过舒尔补可以快速求逆。在右图中,几何先验加入了部分非结构化的几何-几何相关性,这导致矩阵不仅维数大,而且还很难求逆。为了简单起见,我们不显示全局相机的内参。

此外,当今先验的表达复杂性是具有局限性的。虽然它们使三维重建更稠密、局部更准确和视觉上更吸引人,但我们发现,先验可能会引入偏差,从而降低而不是提高长期的大规模的场景的精度。请注意,随着从真实数据中学习到的更现实、更公正的先验的引入,这种情况很可能会改变。

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) TTiSE(3),将一个点从世界坐标系转换到相机坐标系。线性化的姿态增量将被表示为李代数元素 x i ∈ s e ( 3 ) x_i\in \mathfrak{se}(3) xise(3),我们直接将其写成向量 x i ∈ R 6 x_i\in \mathbb{R}^6 xiR6——稍微滥用了符号。我们进一步定义常用的操作符 ⊞ :   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} xxiTTi:=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 Πc1:Ω×RR3表示反投影,其中 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)G1(Ii(xx))(3)
在本文的其余部分中,除另有说明外, I i I_i Ii总是指经过光度校正的图像 I i ′ I_i' Ii

在这里插入图片描述

图3 光度标定。上图:图1所用相机的逆响应函数G^{-1}和镜头衰减V。下图:包含室内和室外部分的序列的毫秒级曝光t。请注意,它的变化幅度超过500倍,从0.018 ms到10.5 ms。我们不把这些量当作未知的噪声源,而是在光度误差模型中明确地说明它们。

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:=pNpwp (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Πc1(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]:=TTjTTi1(6)

在这里插入图片描述

图4 残差模式。该模式\mathcal{N}_p用于能量计算。省略右下像素以启用SSE优化处理。注意,由于我们每个点有1个未知值(它的逆深度),并且不使用正则化,我们需要|N_p|>1,以便在仅优化两帧时,所有模型参数都得到良好约束。图19显示了该模式如何影响跟踪精度的评估。

为了使我们的方法能够在没有已知曝光时间的情况下对序列进行操作,我们加入了一个由 e − a i ( I i − b i ) e^{-a_i}(I_i-b_i) eai(Iibi)给出的附加仿射亮度传递函数。请注意,与大多数以前的公式[6]和[13]相比,标量因子 e − a i e^{-a_i} eai是对数参数化的。这既防止它变成负的,并避免由乘法(即指数增加)漂移引起的数值问题。

除了使用鲁棒的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:=iFpPijobs(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展示了最终的因子图。与经典重投影误差的唯一区别是每个残差附加依赖于主帧的位姿,也就是说,每个残差项依赖于两帧而不是一帧。虽然这增加了非对角条目的位姿块的海塞矩阵,但它不影响稀疏模式后应用舒尔补边缘化的点参数。由此得到的系统可以类比地解为间接公式。请注意,雅可比矩阵相对于两帧的位姿是通过它们的相对位姿的伴随线性相关的。在实践中,当计算海塞矩阵或它的舒尔补时,这个因子可以从求和中提取出来,大大减少了由更多变量依赖引起的额外计算。

在这里插入图片描述

图5 直接稀疏模型的因子图。4个关键帧和4个点:KF1中1个点,KF2中2个点,KF3中1个点。每个能量项(公式(4)中定义的)取决于点的主帧(蓝色)、观测到该点的帧(红色)和点的逆深度(黑色)。此外,所有的项取决于全局相机内参向量c,在图中没有显示。

如果曝光时间已知,我们进一步添加一个先验使得仿射亮度传递函数为零,
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:=iF(λ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=argmaxai(axiyi)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可视化了不同变量之间的联系。

在这里插入图片描述

图6 窗口优化。红色曲线表示参数空间,由$SE(3)$中的非欧几里得相机位姿和其余欧几里得参数组成。蓝色的线对应于\zeta_0周围的切线空间,在这里我们(1)累计x上的二次边缘化先验,(2)计算高斯-牛顿步骤\delta。对于每个参数,一旦该参数成为边缘化项的一部分,切线空间就会被固定。请注意,当我们在我们的表示法中平等地对待所有参数时,对于欧氏参数、切空间和参数空间是重合的。

高斯-牛顿优化。我们计算高斯-牛顿系统如下,
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} WRn×n是包含权重的对角矩阵, r ∈ R n r\in \mathbb{R}^n rRn是堆积的残差向量, J ∈ R n × d J\in \mathbb{R}^{n\times d} JRn×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 ppIj Jgeo δgeopp((δ+x)ζ0),  Jphoto δphotork((δ+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 δ=H1b,并添加到当前状态,
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) xnewlog(δex)同样有效。

在每个更新步骤之后,我们使用 ζ 0 n e w ← x ⊞ ζ o \zeta^{new}_0\leftarrow x \boxplus \zeta_o ζ0newxζo x ← 0 x\leftarrow 0 x0更新不属于边缘化项的所有变量的 ζ 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(xx0)Tb+(xx0)TH(xx0)+c=2xT=:b (bHx0)+xTHx+=:c (c+x0THx0x0Tb)(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的切线空间保持不变。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340