介绍
当时BA算法被广泛的使用在特征点法的系统中,作者认为这些方法丢弃了图像的大部分信息。并且在稠密重建中,使用完整的BA是做不到实时的。在这篇文章中,作者提出了一种改进BA算法(基于Surfels模型),可以用单个GPU就可以实现实时稠密重建。还有一个贡献就是提出一种基准数据集,在这种数据集下测试,SLAM系统都能有更好的结果。
相关工作
与本文的提出的系统的差异
Frame-to-model tracking
这种方法的相机位姿不再进行后续优化,会导致累积误差。
Map deformation
没有使用所有可用信息。
Pose graph optimization
虽然可以简化优化问题,但也只是近似BA。
Fragment-based optimization
分层优化,虽然可以减少优化的变量,但也只是近似BA。
Indirect (feature-based) BA
这里的ORB-SLAM2和Bundlefusion效果都很好。
Direct BA
同时优化相机位姿和场景参数,但需要大量的计算时间,举了离线系统。
Benchmarking RGB-D SLAM
作者提供了基准数据集,这种数据集是同步全局快门,对比现有的数据集,重建的结果更好。
数据表示
作者使用场景表示是surfels,且只对关键帧进行BA。
关键帧作者没有作严格的筛选,每10帧,选一帧作为关键帧。
作者的surfels是一个圆盘,其包含3D圆心坐标(全局坐标系),表面的法向量,圆盘半径,描述子。 作者选择surfels是因为他们能够通过BA有效的进行融合和更新。
损失函数
遍历所有的关键帧,所有建立好关联的面元,进行几何误差,光度误差优化。
这两个误差项前面都有一个偏置 σ D − 1 \sigma_D^{-1} σD−1和 σ p − 1 \sigma_p^{-1} σp−1 ,对于第一个偏置,作者认为对于一个标定好的相机,不确定性只会出现在深度方向上,所以建立一个模型消除深度上的不确定性。第二个的不确定性在于反射,光照变化。
几何误差
将面元中心3D坐标投影到第K帧关键帧的坐标系,进而投影到第K帧关键帧像素平面,在通过深度图的深度转换到K相机坐标系。点到面的icp。
光度误差
这里I()
不是直接用亮度值,而是用的亮度的梯度图的信息(对亮度变换更加鲁棒)。这里用两个点来做,这两个点是在以面元中心
p
s
p_s
ps为圆心的圆上,而且
s
1
−
p
s
s_1-p_s
s1−ps和
s
2
−
p
s
s_2-p_s
s2−ps正交。
算法流程
创建面元
首先遍历所有关键帧,为每个关键帧创建surfels
,将关键帧分为若干个4*4
大小的网格,每个网格中至少有一个像素与一个面元关联,如果没有,则从深度图中随机选取一个深度创建一个面元s
与之关联。
面元与像素点进行关联
把面元的中心坐标投影到关键帧上,首先投影点要在这个关键帧中,
-
投影点具有深度测量;
-
深度测量值和面元的深度足够近似;
-
深度图的方向和面元的法向量足够近似;
符合上述条件,那么就建立像素到面元的关联。
面元的属性都是由创建它的那个像素计算而成。计算面元的中心 p s p_s ps,法向量 n s n_s ns,半径 r s r_s rs,描述子 d s d_s ds。
外点过滤
像素与面元关联,那么这个像素需要符合一定条件:将这个像素点的3D坐标投影到其它关键帧,记录有多少关键帧可以观测到这个像素点,和没有观测到的次数。如果没观测到的次数比观测到次数多,或者观测到的次数小于一定阈值,则认为这个像素点是外点,则不对这个像素点进行关联一个面元。
面元的法向量更新
平均所有与该面元关联的像素点的法向量,随后进行归一化。
面元的中心位置和描述子优化
在更新完面元的法向量后,对面元的中心位置,描述子通过(1)式进行优化。这里还限制面元的中心的优化方向,只允许沿着面元的法向量方向进行优化,所以优化式子为$p_s+t \cdot n_s$,只有一个优化量$t$。
描述子更新方法呢????
面元融合
在BA的第一次迭代后,开始融合具有相似属性的面元,比如法向量接近,位置接近。为了更快的找到需要融合的面元,将面元投影到所有的关键帧中,位于同一个4*4
的网格中的面元进行融合。
关键帧的位姿优化
对(1)式进行高斯牛顿法进行优化。
相机内参优化
同样对(1)式进行高斯牛顿法进行优化,不过这次优化的是相机内参,同时,使用深度偏移模型,建立真实深度与偏移的深度联系
面元清理和更新半径
与上面的外点过滤方法类似,将面元投影到每个关键帧,计算这个面元在关键帧集出现的次数。
与法向量更新方法类似,与面元关联的所有像素点,都计算出一个半径,该面元半径更新为最小的半径。
前端
本文的主要贡献是提供了一个后端稠密的BA方法。
预处理
使用双边滤波,对深度图过滤。
里程计
通过上一关键帧,估计当前帧的位姿,使用标准的直接法,其中包括几何误差,光度梯度误差。【参考文献】
回环检测
当创建一个关键帧时(每10帧),执行回环检测。使用基于二进制特征,的词袋模型,找到当前关键帧k
与历史哪个关键帧m
最相似。首先通过特征匹配估计关键帧的初始相对位姿,然后通过直接法对齐。同时也对齐m-1
,m+1
帧,如果这些对齐,都满足一定条件(变换和角度的差异),则接受这次回环。使用刚刚算出的三个相对位姿的平均相对位姿,使用位姿图优化,随后使用作者提出的BA优化。
基准数据集
动因
作者认为,在流行的TUM RGB-D 数据集中,与真实世界都多多少少有偏差,因为采集数据时,RGB图和depth图的时间不同步,深度图畸变,不能准确获得对应像素点的深度,这会导致各种RGB-D SLAM系统的运行结果也会更加不准确。
创建基准数据集
作者创建基准数据集使用两种方法,一种是作者采用同步装置、全局快门相机记录数据集;另一种是在原有数据集重建出3D模型后,通过数据集原始轨迹,重新渲染数据集。作者渲染出四种数据集,卷帘快门和异步的排列组合。基于全局快门同步数据集,卷帘快门数据集是通过估计卷帘快门的时间(第一行和最后一行的时间差)来模拟卷帘快门的效果,对于异步快门数据集,RGB图像的深度对应两张时间连续的深度图像之间深度图像。