目录

  • 3 视觉里程计前端
    • 3.1 帧管理
    • 3.2 点管理
  • 4 结果
    • 4.1 定量比较
    • 4.2 参数研究
    • 4.3 几何与光度噪声研究
    • 4.4 定性结果
  • 5 结论
  • 致谢
  • 参考文献

3 视觉里程计前端

前端是算法的一部分,

  • 确定组成误差项EphotoE_{photo}Ephoto​的集合F\mathcal{F}F、Pi\mathcal{P}_iPi​和obs(p)obs(\pmb{p})obs(pp)。它决定使用哪些点和帧,以及在哪些帧中一个点是可见的——特别是,这包括异常点去除和遮挡检测。
  • 提供新参数的初始化,需要优化高度非凸能量函数EphotoE_{photo}Ephoto​。作为经验法则,图像III的线性化仅在1-2个像素半径内有效;因此,计算p′\pmb{p}'pp′所涉及的所有参数都应该精确地初始化,使p′\pmb{p}'pp′相差不超过1-2个像素。
  • 决定一个点/帧何时应该被边缘化。

因此,前端需要替换许多在间接设置中由关键点探测器(确定可见性和点选择)和初始化程序(如RANSAC)完成的操作。注意,这里描述的许多步骤都是针对单目情况的。例如,使用立体相机可以更直接地获得初始深度值,而集成IMU可以显著地增强——甚至直接提供——新帧的位姿初始化。

3.1 帧管理

我们的方法总是保持一个不超过NfN_fNf​的活动关键帧窗口(我们使用Nf=7N_f=7Nf​=7)。每一帧都是基于这些参考帧开始跟踪的(步骤1)。然后它要么被丢弃,要么被用来创建一个新的关键帧(步骤2)。一旦创建了新的关键帧和相应的新点,总光度误差公式(8)就得到了优化。然后,我们边缘化一个或多个帧(步骤3)。

步骤1:初始帧跟踪。当一个新的关键帧被创建时,所有的活跃点都被投影到关键帧中,并略微扩张,创建一个半稠密的深度图。使用传统的两帧直接图像对齐、多尺度图像金字塔和恒定运动模型来初始化新帧。图7显示了一些示例——我们发现,进一步增加密度在准确性或鲁棒性方面几乎没有好处,而显著增加了运行时间。注意,当对图像进行向下缩放时,如果源像素中至少有一个像素具有像文献[24]中那样的深度值,那么该像素将被分配一个深度值,这将显著增加较粗分辨率上的密度。

图7 用于初始帧跟踪的示例深度地图。最上面一行显示原始图像,最下面一行显示颜色编码的深度图。由于我们在主动优化中针对的是固定数量的点,它们在纹理密集的场景中变得更加稀疏(左),而在只有少量信息图像区域可供采样的场景中(右),它们的密度与LSD-SLAM相似。

如果一帧的最终RMSE超过前一帧的两倍,我们假设直接图像对齐失败,并试图通过在不同方向上进行多达27个不同的小旋转来恢复。这种恢复跟踪只在最粗糙的金字塔级别上执行,每次尝试大约需要0.5毫秒。请注意,这个类似RANSAC的过程很少被调用,比如当相机移动得非常快或颤抖的时候。紧组合IMU时,这种做法可能会变得不必要。

步骤2:关键帧的创建。与ORB-SLAM类似,我们的策略是最初获取许多关键帧(大约每秒5-10帧),然后通过早期边缘化多余的关键帧来将它们稀疏化。我们结合三个标准来决定是否需要一个新的关键帧:

  1. 当视场发生变化时,需要创建新的关键帧。在初始粗跟踪过程中,我们通过均方光流(从最后一帧到最新一帧)f:=(1n∑i=1n∣∣p−p′∣∣2)12f:=(\frac{1}{n}\sum_{i=1}^n||\pmb{p}-\pmb{p}'||^2)^{\frac{1}{2}}f:=(n1​∑i=1n​∣∣pp−pp′∣∣2)21​来测量这一点。
  2. 相机平移会导致遮挡和不遮挡,这就需要拍摄更多的关键帧(即使fff可能很小)。这是由去掉平移分量的平均光流测量的,即ft:=(1n∑i=1n∣∣p−pt′∣∣2)12f_t:=(\frac{1}{n}\sum_{i=1}^n||\pmb{p}-\pmb{p}_t'||^2)^{\frac{1}{2}}ft​:=(n1​∑i=1n​∣∣pp−ppt′​∣∣2)21​,其中pt\pmb{p}_tppt​是由R=I3×3\pmb{R}=\pmb{I_{3\times3}}RR=I3×3​I3×3​warp之后的点位置。
  3. 如果相机曝光时间变化明显,应采取一个新的关键帧。这是由两帧之间的相对亮度因子测量的a:=∣log(eaj−aitjti−1)∣a:=|log(e^{a_j-a_i}t_jt_i^{-1})|a:=∣log(eaj​−ai​tj​ti−1​)∣。

作为初始对准的副产品,这三个量可以很容易地得到。最终,如果wff+wftft+waa>Tkfw_ff+w_{f_t}f_t+w_aa>T_{kf}wf​f+wft​​ft​+wa​a>Tkf​,则建立一个新关键帧,其中wfw_fwf​、wftw_{f_t}wft​​和waw_awa​为上述三个分量的权重,阈值TkfT_{kf}Tkf​默认设置为1。

步骤3:关键帧边缘化。我们的边缘化策略如下所述。令I1⋯InI_1\cdots I_nI1​⋯In​是活动关键帧集合,其中I1I_1I1​表示最新的关键帧,而InI_nIn​表示最老的关键帧。

  1. 我们总是保留最新的两个关键帧I1I_1I1​和I2I_2I2​。
  2. 在I1I_1I1​中,小于5%的点可见的帧会被边缘化。
  3. 如果超过NfN_fNf​个帧被激活,我们边缘化了使“距离得分”s(Ii)s(I_i)s(Ii​)最大化的那一个(不包括I1I_1I1​和I2I_2I2​),计算为,
    s(Ii)=d(i,1)∑j∈[3,n]∖{i}(d(i,j)+ϵ)−1(20)s(I_i)=\sqrt{d(i,1)}\sum_{j\in[3,n]\setminus \{i\}} (d(i,j) + \epsilon)^{-1} \tag{20} s(Ii​)=d(i,1)​j∈[3,n]∖{i}∑​(d(i,j)+ϵ)−1(20)
    其中d(i,j)d(i,j)d(i,j)是关键帧IiI_iIi​和IjI_jIj​之间的欧式距离,ϵ\epsilonϵ表示一个小量。该评分函数是启发式设计的,以保持活跃的关键帧在3D空间中均匀分布,使更多的关键帧接近最近的关键帧。

对关键帧进行边缘处理,首先对关键帧中所有的点进行边缘处理,然后使用2.3节中的边缘处理程序对关键帧进行边缘处理。为了保持海塞矩阵的稀疏结构,帧中所有仍然存在的点的观测都从系统中删除。虽然这显然是次优的(在实践中,大约一半的残差因为这个原因而被丢弃),但它允许有效地优化能量函数。图8显示了一个场景的示例,突出显示了活动的点集和帧集。

图8 关键帧管理。底部:优化窗口中的6个旧关键帧,覆盖其中的点(已经被边缘化的点以黑色显示)。上图显示了完整的点云,以及所有关键帧(黑色相机截锥)的位置——活动点和关键帧分别用红色和蓝色表示。嵌入图显示了新添加的关键帧,覆盖了所有向前warp的活动点,这将用于后续帧的初始对齐。

3.2 点管理

大多数现有的直接方法都着重于利用尽可能多的图像数据。为了实时实现这一目标,他们积累了早期的次优估计(线性化/深度三角化),并忽略或近似不同参数之间的相关性。在这项工作中,我们采用了一种不同的方法,而是大量的子样本数据,以便在联合优化框架中实时处理它。事实上,我们的实验表明,图像数据是高度冗余的,而且简单地使用更多的数据点的好处很快就会变平。请注意,与间接方法相比,我们的直接框架仍然允许从所有可用数据中采样,包括弱纹理或重复的区域和边缘,这确实提供了一个真正的好处(见第4节)。

我们的目标是在优化中始终保持固定数量的活动点NpN_pNp​(我们使用Np=2000N_p = 2000Np​=2000),在空间和活动帧中平均分布。在第一步中,我们在每个新的关键帧中识别NpN_pNp​个候选点(步骤1)。候选点不会立即添加到优化中,而是在后续帧中单独跟踪,生成一个粗深度值作为初始化(步骤2)。当新的点需要添加到优化中,我们选择一些候选点(从优化窗口的所有帧中)被激活,即添加到优化(步骤3)。注意,我们在每一帧中选择NpN_pNp​个候选点,但是只保留所有活动帧中的NpN_pNp​个活动点的组合。这确保我们总是有足够的候选点来激活,即使有些可能在它们离开视场或被识别为异常值时失效。

步骤1:候选点选择。我们的点选择策略旨在选择(1)均匀分布在图像中和(2)相对于其周围环境具有足够高的图像梯度幅值的点。我们将图像分割为32×3232\times3232×32块,得到一个区域自适应梯度阈值。对于每个块,我们将阈值计算为gˉ+gth\bar{g}+g_{th}gˉ​+gth​,其中gˉ\bar{g}gˉ​是块中所有像素的绝对梯度中值,gthg_{th}gth​是全局常数(我们使用gth=7g_{th} = 7gth​=7)。

为了获得图像中均匀分布的点,我们将其分成d×dd\times dd×d块,并从每个块中选择超过区域自适应阈值的梯度最大的像素。否则,我们不会从该块中选择一个像素。我们发现,从没有高梯度点的区域中包含一些梯度较弱的点通常是有益的,从弱灰度变化中捕捉信息,例如,从白色墙壁上平滑变化的照明。为了实现这一点,我们重复这个过程两次以上,分别降低梯度阈值和块大小2d2d2d和4d4d4d。块大小ddd是不断调整的,以便这个过程产生所需的点数量(如果创建了太多的点,它会在下一帧增加,否则会减少)。图9显示了一些示例场景的候选点。请注意,对于候选点的选择,我们在光度校正之前使用原始图像。

图9 候选点选择。上面一行显示原始图像,下面一行显示作为候选点添加到地图的点(每帧2000个)。第一次选择的点显示为绿色,第二次和第三次选择的点分别显示为蓝色和红色。绿色的候选点平均分布在梯度丰富的区域,而在第二和第三次增加的候选点也覆盖了灰度变化非常弱的区域,但要稀疏得多。

步骤2:候选点跟踪。在随后的帧中使用离散搜索沿着极线跟踪候选点,最小化光度误差公式(4)。根据最优匹配计算深度和相关方差,用于约束后续帧的搜索区间。这种跟踪策略的灵感来自LSD-SLAM。注意,计算深度仅在点激活时用作初始化。

步骤3:候选点激活。在一组旧的点被边缘化后,新的候选点被激活来取代它们。同样,我们的目标是在整个图像中保持均匀的空间分布。为此,我们首先将所有激活点投射到最近的关键帧上。然后我们激活候选点——同样投影到这个关键帧中——最大化到任何现有点的距离(要求在第二次或第三次块运行期间创建的候选点有更大的距离)。图7显示了得到的点在多个场景中的分布。

野值和遮挡检测。由于可用的图像数据通常包含比实时使用更多的信息,我们试图尽早识别和消除潜在的异常值。首先,在候选跟踪过程中沿极线搜索时,将最小值不够明显的点永久丢弃,大大减少了重复区域的错误匹配数量。其次,去除光度误差公式(4)超过阈值的点观测。阈值是关于各自帧中的中位数残差不断调整的。对于“糟糕”的帧(例如,包含大量运动模糊的帧),阈值将会更高,这样就不会删除所有的观察结果。对于好的帧,反过来,门槛会更低,因为我们可以更严格。

4 结果

在本节中,我们将广泛评估我们的直接稀疏单目VO算法(DSO)。我们都比较了其它单目SLAM/VO方法,并评估了重要设计和参数选择的影响。我们使用三个数据集进行评估:

  1. TUM monoVO数据集。该数据集提供了50个光度标定序列,包括105分钟的视频,录制于几十个不同的环境,室内和室外(见图11)。由于数据集只提供回环地面真实值(允许通过大环路后的累积漂移评估跟踪精度),我们使用在各自的论文中定义的对齐误差ealigne_{align}ealign​进行评估。

图11 TMU mono-VO数据集。用于评估和参数研究的50个TUM单目VO数据集序列(s_01到s_50)的每个序列的单幅图像,与DSO预测的深度图叠加。完整的数据集包含超过105分钟的视频(19万帧)。请注意所涉及的环境范围很广,从狭窄的室内走廊到宽阔的室外区域,包括森林。

  1. EuRoC MAV数据集。它包含11个双目惯性序列,包括19分钟的视频,记录在三个不同的室内环境。对于这个数据集,没有光度标定或曝光时间是可用的,因此我们省略了光度图像校正和设置(λa=λb=0\lambda_a=\lambda_b=0λa​=λb​=0)。我们评估的绝对轨迹误差eatee_{ate}eate​,这是在Sim(3)Sim(3)Sim(3)对齐后的平移RMSE。对于这个数据集,我们裁剪了每个序列的开始部分,因为它们包含非常不稳定的运动,这意味着初始化IMU偏差——我们只使用序列中MAV在空中的部分。
  2. ICL-NUIM数据集。它包含8个光线追踪序列,包括4.5分钟的视频,来自两个室内环境。对于这个数据集,不需要光度图像校正,所有曝光时间都可以设置为t=1t = 1t=1。同样,我们用绝对轨迹误差eatee_{ate}eate​来评估。

方法论。我们的目标是在现有数据的基础上进行尽可能全面的评估,因此将所有序列都向前和向后运行,每个序列运行5次(以解释非确定性行为)。对于EuRoC MAV数据集,我们进一步分别运行左右两个视频。总的来说,TUM monoVO数据集运行了500次,EuRoC MAV数据集运行了220次,ICL-NUIM数据集运行了80次,我们在20个专用工作站上运行它。我们通过不强制执行实时执行来消除对主机CPU速度的依赖,除非另有说明。对于ORB-SLAM,我们以20%的速度播放视频,而DSO是在一个顺序化的单线程实现中运行的,运行速度大约比实时慢四倍。请注意,尽管我们在大多数实验中没有强制实时执行,但我们使用了与实时比较完全相同的参数设置。

结果以累积误差图的形式总结(见图10)。它可视化了有多少个跟踪序列的误差值(eate/ealigne_{ate} /e_{align}eate​/ealign​)低于某个阈值;因此,显示在一个方法工作良好的序列上的准确性,以及鲁棒性,即在多少序列的方法中没有失败。补充材料中提供了所有运行的原始跟踪结果——以及计算数字的脚本。使用TUM monoVO数据进行的其它有趣分析,例如:相机的视场、图像分辨率或相机的运动方向的影响可以在文献[8]中找到。

图10 EuRoC MAV数据集(顶部)和ICL_NUIM数据集(底部)的结果。Sim(3)对齐后的平移RMSE。RT(虚线)表示强制的实时执行。此外,我们用5倍实时速度的低设置和ORB-SLAM来评估DSO,并将局部回环限制为在最近的t_{max} =10 s内至少观察过一次的点。

评估方法和参数设置。我们将我们的方法与(单目)ORB-SLAM[20]的开源实现进行了比较。我们还尝试对LSD-SLAM[5]和SVO[9]的开源实现进行评估,但是这两种方法在大多数序列上都失败了。一个主要的原因是他们假设亮度恒定(忽略曝光的变化),而使用的两个真实数据集都包含大量的亮度变化。

为了促进公平的比较,并允许应用来自TUM monoVO数据集的回环度量,我们禁用了ORB-SLAM的显式回环检测和重定位。注意,其它一切(包括局部和全局BA)保持不变,仍然允许ORB-SLAM检测仅通过共视性表示就能找到的增量回环。所有参数在所有序列和数据集上设置为相同的值。唯一的例外是ICL-NUIM数据集:对于这个数据集,我们将DSO中的gthg_{th}gth​设置为3,并将ORB-SLAM的FAST阈值降低到2,我们发现这能给出最好的结果。

4.1 定量比较

图10显示了两种方法在EuRoC MAV数据集和ICL-NUIM数据集上绝对轨迹的RMSEeatee_{ate}eate​(如果一个算法在序列中丢失,我们设置eate=∞e_{ate}=\inftyeate​=∞)。图12显示了TUM monoVO数据集的对齐误差ealigne_{align}ealign​,以及旋转漂移ere_rer​和尺度漂移ese_ses​。图13和图14显示了每条评价轨迹的完整结果集。

图12 TUM monoVO数据集的结果值。累积旋转漂移e_r和尺度漂移e_s在一个大环路后,以及文献[8]中定义的对齐误差。由于e_s是一个乘数因子,我们将e_s'=max(e_s, e_s^{-1})相加。实线对应于序列的非实时执行,虚线对应于强制的实时处理。对于DSO,我们还展示了在低参数设置下以5倍实时速度运行时获得的结果。

图13 全评估结果。EuRoC MAV数据集(左)和ICL_NUIM数据集(右)的所有误差值。每个正方形对应于(彩色编码)整个序列的绝对轨迹误差e_{ate}。我们将11+8个序列(水平轴)分别向前(“Fwd”)和向后(“Bwd”)运行,每个序列运行10次(垂直轴)。对于EuRoC MAV数据集,我们进一步使用左右图像流。图10显示了这些误差值聚集为累积误差图(粗体且连续的线)。

图14 全评估结果。TUM monoVO数据集的所有误差值(参见图11)。每个正方形对应于文献[8]中定义的(颜色编码)对齐误差e_{align}。我们向前(“Fwd”)和向后(“Bwd”)运行50个序列(水平轴),每个序列运行10次(垂直轴)。图12以累积误差图(粗体且连续线)的形式显示了所有这些误差值。

除了非实时评估(粗体线),我们还在Intel i7-4910MQ CPU上的强制实时设置中评估了这两种算法(虚线)。在这种模式下,我们通过允许ORB-SLAM和DSO在跟踪无法持续上升时跳过帧来加强实时性——增加漂移或可能导致完全丢失跟踪。在TUM monoVO数据集和合成ICL NUIM数据集上,直接稀疏方法在准确性和鲁棒性方面都明显优于ORB-SLAM。在EuRoC MAV数据集上,ORB-SLAM取得了较好的精度(但鲁棒性较差)。这是由于两个主要原因:(1)没有可用的光度标定,(2)序列包含许多小环路或段,其中四轴飞行器“反向跟踪”它的方式,允许ORB-SLAM的局部建图组件隐式地关闭许多小环路和一些大环路,而我们的视觉里程计公式永久地边缘所有离开视野的点和帧。我们可以通过禁止ORB-SLAM与任何没有被观察到超过tmax=10st_{max}=10stmax​=10s的关键点进行匹配来验证这一点(图10中带有圆圈标记的线)。在这种情况下,ORB-SLAM在精度方面与DSO类似,但鲁棒性较差。DSO在鲁棒性上的细微差别来自于这样一个事实:对于实时执行,跟踪新帧和关键帧的创建是并行的,因此新帧是在第二个最新的关键帧上跟踪的,而不是最新的。在一些罕见的情况下,特别是在强曝光变化时,这会导致初始图像对齐失败。

为了显示DSO的灵活性,我们包括了以5倍于[4]时记录的速度运行的结果,并减少了设置(Np=800N_p=800Np​=800个点,Nf=6N_f=6Nf​=6个活动帧,424×320424\times 320424×320图像分辨率,当一个关键帧被创建时≤4\leq4≤4的迭代次数)。即使有这样极端的设置,DSO在所有三个数据集上都实现了非常好的准确性和鲁棒性。

需要注意的是,DSO被设计为一种纯粹的视觉测量,而ORB-SLAM则构成了一个完整的SLAM系统,包括闭环检测与修正和重定位——所有这些额外的能力在这个比较中都被忽略或关闭。

运行时间。所需的计算既取决于跟踪帧的数量,也取决于创建的关键帧的数量(即,相机移动的距离)。在TUM monoVO数据集上,初始帧对齐和候选点跟踪(对每帧执行)的平均单线程运行时间为18毫秒(“减少”设置为6.5毫秒)。创建一个新的关键帧需要143毫秒(“减少”设置需要43毫秒),同样是在单个线程中。

4.2 参数研究

本节旨在使用TUM monoVO数据集评估许多不同的参数和算法设计选择。

光度标定。我们分析了光度标定的影响,验证了它实际上增加了直接方法的准确性和鲁棒性。为此,我们逐步禁用了不同的组件:

  1. 曝光(蓝色):设置ti=1t_i=1ti​=1和λa=λb=0\lambda_a=\lambda_b=0λa​=λb​=0。
  2. vignette(绿色):设置V(x)=1V(x)=1V(x)=1。
  3. 响应函数(黄色):设置G−1G^{-1}G−1等于单位阵。
  4. 亮度常数(黑色):设置λa=λb=∞\lambda_a=\lambda_b=\inftyλa​=λb​=∞,使能仿射亮度修正。

图15展示了结果。正如预期的那样,DSO在进行全光度校准时表现得非常好,尤其是与基本亮度恒定假设相比(在许多其它直接或半直接方法中使用,如LSD-SLAM或SVO)。反过来,当使用经过光度校准的图像时,ORB-SLAM表现更差。事实上,光度校准只影响关键点的选择(FAST阈值)。在这一步中,使用原始图像——特别是使用伽马校正——可以得到更好的点分布。注意,我们观察到了DSO的相同行为,因此也对原始图像进行点选择(参见第3.2节)。在所有剩余的实验中,我们使用ORB-SLAM的原始图像,以及DSO的完整光度标定(如果有的话)。

图15 光度标定。当逐步禁用光度标定时,TUM monoVO数据集上的ORB-SLAM和DSO误差。DSO作为一种直接的方法显然受益于光度标定,而ORB-SLAM作为一种间接的方法在原始图像上表现更好。因此,我们使用原始图像进行所有其它ORB- SLAM评估。

数据总量。通过改变活动点NpN_pNp​的数量以及活动窗口NfN_fNf​的帧数,我们分析了改变使用数据量的影响。注意,增加NfN_fNf​可以让每个点保持更多的观察值:对于任何点,我们只在活动帧中保持观测;因此,当边缘化一个点时,观测次数限制在NfN_fNf​(见第2.3节)。图16总结了结果。我们可以观察到,简单地使用更多数据的好处在Np=500N_p = 500Np​=500点后迅速变平。同时,在Nf=7N_f = 7Nf​=7后,活动帧数的影响不大,但运行时间呈二次增长。我们进一步评估了文献[17]中的固定滞后边缘化策略(即,总是边缘化最古老的关键帧,而不是使用拟议的距离评分):它的表现明显更差。

图16 使用数据的总量。当改变优化窗口的大小(上)和点数(下)时,TUM monoVO数据集上的误差。使用大于N_p=500个点或N_f=7个激活帧收益很小。注意,作为实时默认设置,我们使用Np = 2000和Nf = 7,主要是为了获得更稠密的重建。

数据选择。除了评估使用残差数量的影响之外,观察使用了哪些数据是很有趣的——尤其是因为直接方法的主要好处之一是能够从所有点采样,而不是只使用角点。为此,我们改变点选择的梯度阈值,gthg_{th}gth​;结果如图17所示。虽然在gth=7g_{th} = 7gth​=7附近似乎有一个最佳点(如果gthg_{th}gth​太大,对于一些场景没有足够的均匀分布的点来采样——如果它太低,会给低信噪比的数据太多的权重),但总体影响相对较低。

图17 使用数据的选择。在更改使用的数据类型时,TUM monoVO数据集上出现误差。左:不同梯度阈值$g_{th}$的误差,这似乎对算法的准确性有有限的影响。右:在不同的阈值下,仅使用FAST角点时的误差。仅使用FAST角点显著降低了准确性和鲁棒性,这表明使用来自边缘和弱纹理表面的数据的能力确实有一个真正的好处。

更有趣的是,我们分析了只使用角点的影响,通过将候选点限制在FAST。我们可以清楚地看到,只使用角点会显著降低性能。注意,对于较低的FAST阈值,许多错误的角点将沿着边缘检测,我们的方法仍然可以使用,与间接方法相比,这些点将是异常值。实际上,ORB-SLAM在使用默认阈值20时实现了最佳性能。

关键帧的数目。我们分析通过改变TkfT_{kf}Tkf​来比较获得的关键帧的数目(参见3.1节)。对于每个TkfT_{kf}Tkf​值,我们给出每秒的平均关键帧数。默认设置Tkf=1T_{kf} = 1Tkf​=1的结果是每秒8关键帧,这在实时情况下是很容易实现的。结果总结在图18中。使用太少的关键帧(每秒少于4帧)会降低鲁棒性,主要是在有强遮挡/去遮挡的情况下,例如在穿过门的时候。另一方面,使用过多的关键帧(每秒超过15帧)会降低精度。这是因为使用更多的关键帧会导致它们更早地被边缘化(因为NfN_fNf​是固定的),从而积累关于更早(且更不准确)的线性化点的线性化。

图18 关键帧的数目。当改变通过阈值T_{kf}获取的关键帧数量时,TUM monoVO数据集上的误差。

残差模式。我们测试了Np\mathcal{N}_pNp​的不同残差模式,覆盖更小或更大的区域。结果如图19所示。

图19 残差模式。在TUM monoVO数据集上的一些评估模式Np的误差。仅使用3 x 3的邻域似乎性能略差——使用比提议的8像素模式更多的邻域似乎没有什么好处——同时,使用更大的邻域增加了计算需求。请注意,这些结果可能会随使用的相机和镜头的低级属性而变化,例如点扩散函数。

4.3 几何与光度噪声研究

本文提出的直接模型与间接模型的根本区别在于噪声假设。直接方法模拟了光度噪声,即像素灰度上的加性噪声。相反,间接方法模型几何噪声,即假设关键点描述符对测光噪声具有鲁棒性,则图像平面上点(u,v)(u,v)(u,v)——位置上的加性噪声。因此,间接方法对数据中的几何噪声具有更强的鲁棒性也就不足为奇了。反过来,直接方法在存在强光度噪声的情况下表现更好——关键点描述符(纯粹在局部水平上操作)无法过滤掉这些噪声。我们通过人为地向图像中添加(a)几何噪声和(b)光度噪声,然后比较TUM monoVO数据集上的跟踪精度,进而来验证上述论点。

几何噪声。对于每一帧,我们分别生成一个低频随机流图Ng:Ω→R2N_g: \Omega \rightarrow \mathbb{R}^2Ng​:Ω→R2,方法是对3x3网格进行上采样,并填充均匀分布的随机值[−δg,δg]2[-\delta_g, \delta_g]^2[−δg​,δg​]2(使用双三次插值)。然后,我们通过将每个像素x\pmb{x}xx偏移Ng(x)N_g(\pmb{x})Ng​(xx)来扰动原始图像。
Ig′(x):=I(x+Ng(x))(21)I'_g(\pmb{x}) := I(\pmb{x}+N_g(\pmb{x})) \tag{21} Ig′​(xx):=I(xx+Ng​(xx))(21)
这个程序模拟噪声来自(未建模)卷帘快门或不准确的几何相机标定。图20展示了产生的噪声模式的示例,以及ORB-SLAM和DSO对于不同δg\delta_gδg​值的精度。正如预期的那样,我们可以清楚地观察到DSO的性能随着几何噪声的增加而迅速下降,而ORB-SLAM受到的影响要小得多。这是因为间接流程的第一步——关键点检测和提取——不受低频几何噪声的影响,因为它只在局部水平上操作。然后,第二步优化几何噪声模型——它可以很好地处理几何噪声。反过来,在直接方法中,几何噪声没有建模,因此有一个更严重的影响——事实上,对于δg>1.5\delta_g > 1.5δg​>1.5,可能不存在所有残差都在III线性化的有效半径内的状态。因此,优化完全失败(这可以通过使用一个更粗的金字塔级别来缓解)。值得注意的是,这一结果也表明,所提出的直接模型比间接方法更容易受到不准确的相机内部校准——反过来,它可能更受益于准确的非参数的内部校准。

图20 几何噪声。将低频几何噪声应用于图像的效果,模拟几何畸变,如卷帘快门(在TUM monoVO数据集上评估)。最上面一行显示了\delta_g = 2的示例图像。虽然肉眼很难看到这种效果(注意特写有轻微的偏移),但它对SLAM的精度有严重的影响,尤其是在使用直接模型时。请注意,由标准卷帘相机引起的失真很容易超过\delta_g = 3。

光度噪声。对于每一帧,我们分别生成一个高频随机模糊映射Np:Ω→R2N_p: \Omega \rightarrow \mathbb{R}^2Np​:Ω→R2,方法是上采样一个300×300300\times300300×300的网格,网格中填入均匀分布的随机值[−δp,δp]2[-\delta_p,\delta_p]^2[−δp​,δp​]2。然后,对像素x\pmb{x}xx加入标准差为Np(x)N_p(\pmb{x})Np​(xx)的各向异性模糊,对原始图像进行扰动,
Ip′(x):=∫R2ϕ(δ;Np(x)2)I(x+δ)dδ(22)I'_p(\pmb{x}) := \int_{\mathbb{R}^2} \phi(\delta; N_p(\pmb{x})^2)I(\pmb{x}+\delta)\ d\delta \tag{22} Ip′​(xx):=∫R2​ϕ(δ;Np​(xx)2)I(xx+δ) dδ(22)
其中ϕ(⋅;Np(x)2)\phi(\cdot;N_p(\pmb{x})^2)ϕ(⋅;Np​(xx)2)表示标准差为Np(x)N_p(\pmb{x})Np​(xx)的二维高斯核。图21展示了结果。我们可以观察到DSO对光度噪声比ORB-SLAM更鲁棒。这是因为(纯粹的局部)关键点匹配在高亮度噪声下失败,而联合优化亮度误差可以更好地克服引入的畸变。

图21 光度噪声。对图像应用高频非各向同性模糊的效果,模拟光度噪声(在TUM monoVO数据集上评估)。最上面一行显示了\delta_p = 6的示例图像,效果很明显。由于直接方法模拟了一个光度误差,它比间接方法对这种类型的噪声更有鲁棒性。

总而言之:虽然直接方法在校准良好的数据上优于间接方法,但它不适用于强几何噪声的存在,例如,来自卷帘快门或不准确的内参标定。在实践中,这使得间接模型更适合智能手机或现成的网络摄像头,因为它们是为人类消费而设计的——优先考虑分辨率和光敏性,而不是几何精度。反过来,直接方法在机器视觉专用摄像头捕获的数据上提供了优越的性能,因为这些摄像头更注重几何精度,而不是捕捉吸引人的图像供人类消费。请注意,这可以通过将卷帘快门紧集成到模型中来解决,例如文献[15]、[18]和[19]。

4.4 定性结果

除了精确的相机跟踪,DSO还计算所有梯度丰富区域(包括边缘)上的3D点,从而产生类似于LSD-SLAM的半稠密重建点云。密度直接对应于我们在活动窗口NpN_pNp​中保留的点的数量。图23展示了一些例子。图22显示了另外三个场景(每个数据集一个),以及一些相应的深度图。请注意,我们的方法能够通过很少的纹理跟踪场景,而间接方法失败。所示的所有重建都是简单地从里程计积累起来的,而没有集成回环。更多的定性结果见补充视频,可在网上找到。

图22 定性结果示例。每个数据集的一个场景(从左到右:V2_01_easy[1], seq_38[8]和office_1[10]),使用默认设置实时计算。下图显示了一些相应的(稀疏的)深度地图——一些场景包含很少的纹理,这使得间接方法非常具有挑战性。

图23 点的密度。对于Np = 500(上)、Np = 2000(中)和Np = 10000(下)的3D点云和一些粗深度图,即所有Np活动点投影到其中的最近的关键帧。

故障模式。对于所有的单目方法,失败的主要原因是几乎纯旋转形式的退化运动,因为没有新的点可以三角定位。这个问题被放大了,因为DSO被设计为纯视觉里程计,并且一旦点离开视野就不会重复使用。相比之下,一个完整的SLAM模拟(就像ORB-SLAM所使用的那样)允许在先前三角化的点重新进入视场时进行再利用(如4.1节所讨论的隐式回环),从而跨越一些退化的相机运动时刻。注意,这个问题源于所采用的窗口优化策略(第2.3节),而不是拟议的直接稀疏模型公式(第2.2节)所固有的。

我们还没有观察到非朗伯表面的重大问题,可能是由于集中在高梯度点。然而,当场景照明发生剧烈变化时,例如,在移动光源的存在或一天的时间发生变化时,提出的直接模型将会失效。虽然这对于短期视觉里程计测量来说通常没有问题,但需要解决这一问题,以促进长时间建图,例如通过改变能量(4)来抵消梯度方向或幅度差异,而不是绝对灰度。

5 结论

我们为运动结构恢复提出了一种新的直接的稀疏公式。它结合了直接方法的优点(可以无缝地使用和重建所有点,而不仅仅是角点)和稀疏方法的灵活性(高效和联合优化所有模型参数)。这可以通过省去其它直接方法所使用的几何先验,而不是评估像素小邻域上每个点的光度误差来很好地约束整体问题。此外,我们结合了完整的光度标定,完成了固有的相机模型,传统上只反应图像形成过程的几何成分。

我们以单目视觉里程计算法的形式实现了我们的直接和稀疏模型,逐步边缘化/消除旧状态,以保持实时性能。为此,我们开发了一个执行数据选择的前端,并为优化高度非凸能量函数提供精确的初始化。我们对几个小时的视频进行了综合评估,显示了该公式相对于最先进的间接方法的优越性。我们进一步提出了一个详尽的参数研究,表明(1)简单地使用更多的数据并不会提高跟踪精度(尽管这会使3D模型更稠密),(2)使用所有点而不是仅使用角点确实会在准确性和鲁棒性方面提供真正的增益,(3)结合光度标定确实会提高性能,特别是与基本的“亮度恒定”假设相比。

我们还通过实验证明,间接方法——对几何误差进行建模——对几何噪声(例如,由相机固有标定不良或卷帘快门引起的噪声)具有更强的鲁棒性。

直接方法反过来对光度噪声更鲁棒,并在经过良好标定的数据上达到更高的精度。我们认为这是直接公式在间接公式占主导地位十多年后最近复苏的主要原因之一。很长一段时间以来,数码图像数据的主要来源是相机,它们最初的设计目的是捕捉供人类观看的图像(如现成的网络摄像头或集成的智能手机摄像头)。在这种情况下,由卷帘和不精确的镜头引起的强烈的几何畸变倾向于间接的方法。反过来,随着3D计算机视觉成为大众市场产品(包括自动驾驶汽车和无人机,以及用于VR和AR的移动设备)的组成部分,相机正在为此专门开发,具有全局快门、精确镜头和高帧率,这使直接公式实现其全部潜力。

由于提出的直接稀疏能量公式的结构与间接方法相同,它可以与其它优化框架集成,如(双窗口)光束调整[25]或增量平滑和建图[14]。这里的主要挑战是,与间接模型相比,非凸性大大增加,这源于误差函数中包含了图像——这可能会限制我们的模型在视频处理中的使用。

致谢

这项工作得到了ERC Consolidator奖助金“3D Reloaded”和谷歌教员研究奖的支持。

参考文献

论文阅读《Direct Sparse Odometry》2相关推荐

  1. 论文阅读: Direct Monocular Odometry Using Points and Lines

    Direct Monocular Odometry Using Points and Lines Abstract 大多数VO都用点: 特征匹配 / 基于像素intensity的直接法关联. 我们做了 ...

  2. 论文阅读《Omnidirectional DSO: Direct Sparse Odometry with Fisheye Cameras》

    目录 摘要 1 介绍 2 相关工作 3 记号 4 相机模型 A 针孔模型 B 统一的全向模型 5 系统概述 A 模型表述 B 沿极线的距离估计 C 帧的管理 D 窗口优化 6 评估 A TUM SLA ...

  3. 论文阅读《Direct Sparse Odometry》1

    目录 摘要 1 介绍 1.1 动机 1.2 贡献 2 直接稀疏模型 2.1 标定 2.1.1 几何相机标定 2.1.2 光度相机标定 2.2 模型表述 2.3 窗口优化 摘要 直接稀疏里程计方法(Di ...

  4. DSO详解-Direct Sparse Odometry论文解读

    元学习论文总结||小样本学习论文总结 2017-2019年计算机视觉顶会文章收录 AAAI2017-2019 CVPR2017-2019 ECCV2018 ICCV2017-2019 ICLR2017 ...

  5. Direct Sparse Odometry (一)初始化过程中的光度误差优化

    Direct Sparse Odometry (DSO) 初始化过程中的导数推导 文章目录 Direct Sparse Odometry (DSO) 初始化过程中的导数推导 前言 一.光度误差建模 二 ...

  6. 论文阅读笔记 Sparse Representation-Based Intra Prediction for Lossless/Near Lossless Video Coding

    摘要 基于稀疏表征的帧内预测SRIP.在HEVC中有35种角度预测模式AIP,用最相似的相邻像素去表示当前待编码像素.为了编码与解码的一致,角度预测模式的参数要传到解码端,为了进一步提高编码效率,再传 ...

  7. 论文阅读《Robust Odometry Estimation for RGB-D Cameras》

    目录 摘要 1 介绍 2 相关工作 3 直接运动估计 A warping函数 B 似然函数 C 最大后验(MAP)估计 D 线性化 4 鲁棒运动估计 A 传感器模型 B 运动先验 5 评估 A 合成序 ...

  8. PVI-DSO: Leveraging Planar Regularities for Direct Sparse Visual-Inertial Odometry (阅读笔记)

    PVI-DSO 阅读笔记 #简要 #简要 PVI-DSO: <PVI-DSO: Leveraging Planar Regularities for Direct Sparse Visual-I ...

  9. 论文阅读——《Online Photometric Calibration of Auto Exposure Video for Realtime Visual Odometry and SLAM》

    论文阅读--<Online Photometric Calibration of Auto Exposure Video for Realtime Visual Odometry and SLA ...

最新文章

  1. 《数据库系统概念》7-函数、存储过程、触发器
  2. jupyter python版本_Ubuntu Desktop 16.04 LTS 下成功配置Jupyter的两个python内核版本(2.7x,3.5x)...
  3. NeuralBuild-用于Java、C#、PHP的DAO产生器
  4. 时间选择器 可以选择日期和时间
  5. java string底层实现_Java-学习日记(Shell与String底层原理)
  6. pip加速+百度镜像|清华镜像
  7. 创建应用 django
  8. Kubernetes的拐点助推器:左手开源,右手边缘计算
  9. 音频社交Clubhouse将支持空间音频,让聊天更具真实感
  10. freemaker转word xml注意事项
  11. ida pro6.4 linux安装使用
  12. 2022年全国计算机二级Access数据库程序设计模拟试题及答案
  13. 笔记本计算机无法上无线网络,笔记本连不上无线网络如何解决?
  14. win10的ie保存html文件夹,win10系统IE缓存文件夹在哪里,详细教您IE缓存文件在哪里...
  15. 变换累次积分顺序的方法和原理(图文详解)
  16. 景观生态学原理| 8 景观生态学与生物多样性保护
  17. 【Python】Python学到什么程度可以面试工作?------持续更新 ...
  18. SpringCloud-4.服务网关(GateWay)
  19. windows 下端口转发 端口映射工具 passport
  20. Unity3D 场景切换加载进度条实现

热门文章

  1. Nachos进程数量限制128、ID号分配以及基于优先级的调度算法详解
  2. [LLVM教程]LLVM之第一个语言前端
  3. Sketch教程如何实现背景局部模糊
  4. h5嵌入android的视频播放器
  5. ABAP:增强篇-MIGO过账增强之CHECK方法获取行项目
  6. 数据库基础的SQL语句
  7. 红外线测温仪方案开发
  8. 西安电子科技大学光学工程/电子信息(专业课代码851)考研经验分享
  9. vscode找不到执行文件导致更新失败
  10. 【Matlab图像去噪】改进非局部均值红外图像混合噪声【含源码 1640期】