A. Dai, M. Nießner, M. Zollhöfer, S. Izadi, and C. Theobalt, “BundleFusion: Real-time Globally Consistent 3D Reconstruction using On-the-fly Surface Re-integration,” arXiv:1604.01093 [cs], Apr. 2016.
重点是位姿的估计,位姿优化后从减去原来的TSDF减去权重然后用新的位姿累积进去的方式很有意思。
现在的在线方法存在的问题:
- 需要时间计算在线对应,这妨碍真正的实时计算
- 帧到帧或者帧到model的位姿估计容易失败
- 只支持基于无结果点的表示,限制了scan的质量和应用
核心是一个鲁棒的位姿估计策略,最优化全局相机位姿集合的每一帧,通过使用一个有效的局部到全局分层方式考虑RGBD输入的全部历史。
需要达到的目的:
- 高质量的曲面模型,需要有纹理的连续曲面
- 任意尺度,在小尺度场景和大尺度场景都能保证全局结构和局部高精度
- 全局模型一致性,矫正漂移、误差和畸变,关键是在线重访问之前的区域或者回环
- 鲁棒的相机跟踪,跟着通常在特征点稀少的区域失败,因此需要重定位
- 即时(on-the-fly)模型更新,输入数据需要累积到一个3D表示中,困难是更新模型需要和最新的位姿估计一致
- 实时频率
主要贡献:
- 实时的全局位姿alignment框架,考虑了全部输入帧的历史,移除了临时跟踪方法的易失败和不精确性,通过局部到全局的分层优化策略实现任意尺度的能力
- 稀疏到稠密的alignment策略,保证带有回环的全局一致性结构和高精度的位姿alignment保证局部曲面细节
- 新的RGBD累积策略保证实时性和连续的3D模型更新在改进全局位姿估计时是可以进行的
- 大尺度几何和纹理的重建,重访问区域模型修复,从跟踪失败中复原,对漂移鲁棒并且连续回环
Overview
核心是有效的全局位姿优化算法,在每一帧都连续进行位姿优化并且根据新计算的位姿估计更新重建结果。
使用稀疏到稠密的全局位姿优化。先使用稀疏特征对应得到粗糙的全局alignment,稀疏的特征提供了内含的回环检测和重定位。然后通过稠密的光度和几何一致性改进。稀疏对应是使用SIFT特征在所有的输入帧之间对应,意思就是检测到的SIFT关键点与之前所有的帧匹配并小心滤除误匹配以避免错误的回环。
在分层局部到全局位姿优化的过程中,第一层中每连续的n帧结合成一个块(chunk),在第二层中所有的块都互相连接起来并且进行全局优化。和子地图类似。使用当前的时间窗口构造chunk,chunk中的帧有时间顺序,这也是该方法中唯一的时间假设,chunk之间没有时间依赖关系。
全局位姿alignment
输入是由消费级传感器获取的实时RGBD流,和为时空align后的颜色和深度数据。 目标是找到输入序列帧之间的3D对应,然后找到最优的刚体相机变换集让所有的帧都尽可能align到最好。 变换将第帧局部相机坐标映射到世界坐标系,假设第一帧定义世界坐标系。
寻找特征对应
首先使用特征检测进行两帧之间的稀疏对应,特征检测、特征匹配和对应滤除步骤。对于新的每一帧,都检测SIFT特征并且将其和之前看到的所有帧进行匹配。每两帧之间潜在的匹配将被过滤以去除明确错误的部分并得到一系列有效的对应作为全局位姿优化的的输入。
为了使outliers最少,使用几何和光度一致性过滤匹配集。
关键点对应滤波器
对于一对帧和,检测到一些中点和中点的对应,一个关键点对应滤波器找到一系列展现稳定分布和一致性刚体变换的对应。对应被贪婪的收集起来,对于每个新加起来的对应都计算一个刚体变换,其使用Kabsch算法将当前对应关系和集合的RMSD最小化。通过和点的协方差和它们的交叉协方差检查匹配决定的变换是否会有歧义(比如都在一条直线上等),如果这些条件中任意一个很高就认为系统不稳定。如果由得到的重投影误差很高或者被判断不稳定,则移除这些对应关系,直到没有这样的情况或者对应关系过少不能确定刚体变换。如果和之间不能得到有效的变换,那么移除它们之间所有的对应关系。
曲面区域滤波器
该文章认为特征张成的曲面区域足够大,如果张成的区域物理尺寸太小会导致歧义。估计的关键点集和的关键点集张成的曲面空间,构造其带方向的bounding box,两个主轴构成面的面积如果过小这个匹配集被移除掉。
稠密验证
最后进行稠密的双边几何和光度验证步骤。对于帧和,使用关键点对应滤波器得到的相关变换 align 和的坐标系。测量平均深度差异,法线差异和两个方向上的重投影误差去找到有效的像素对应。当一帧新的RGDB图像获取时,它被滤波和下采样的颜色与深度信息和为了效率被缓存。相机的空间坐标和每个对应的法线也都被计算和缓存。表示下采样图像的相机内参,从到完整的重投影误差为:
其中,,。
然而,它对遮挡误差是敏感的,因此对于很高的深度差值、法线差异或者图像一致性缺少的对应都去除掉。所以在处潜在的的对应如果满足以下要求则被认为有效:
法线是否应该使用旋转矩阵而不是刚体变换矩阵?和之间的匹配无效,当重投影误差太大或者有效对应不够时。
分层优化
输入序列被分为一些短的连续帧组成的chunk。在最低层,在chunk内为局部alignment做优化。在第二层,chunk之间使用带有每个chunk相关特征的代表性关键帧进行全局align。
局部chunk内位姿优化
局部位姿优化的目的是计算最好的chunk内相对于chunk内第一帧的alignments ,chunk内的第一帧定义了chunk内的参考帧。有效的对应在chunk内任意两帧之间进行寻找。如果chunk中任意一对图像的重投影误差太大,那么这个chunk被忽略并且不被用于全局优化。
每个chunk的关键帧
一旦一个chunk被处理完了,定义chunk中的第一帧RGBD数据为该chunk的关键帧。同时计算关键帧特征集。基于chunk优化后的位姿轨迹,计算chunk内特征点在世界空间中的3D坐标集。这些3D坐标可能由于帧间匹配包含几个索引。为了找到关键帧特征集,将之前发现的chunk内匹配的特征点索引收集起来。如果它们在时间空间中坐标一致,则将它们在最小二乘条件下合并为最好的3D表示。这些特征点变换到关键帧空间得到关键帧特征集。一旦全局关键帧和关键帧特征集被创建之后,chunk数据将被销毁,在第二层位姿alignment过程中不被需要。
全局的chunk内位姿优化
全局关键帧之间的稀疏对应搜索和滤除与chunk内类似,但是是发生在所有关键帧和它们特征集的水平上。如果一个全局关键帧没有发现和之前任意关键帧匹配上,则被标记为无效的但是保留在队伍中待定,如果在未来发现匹配上的关键帧可以重新验证。全局位姿优化为所有的全局关键帧计算最好的全局alignment ,因此所有的chunk都被全局align。在全局关键帧找到对应之后进行chunk内align。
使用能量函数最优化
在chunk或者关键帧集合的位姿alignment都使用这个。保存中所有帧的自由度参数为:
中保存3个旋转未知量和3个平移未知量,是变量的总数量。最终的alignment目标为:
是线性增加的,先让系数项得到一个好的全局结构,再让稠密项优化,以此实现粗糙到精密的alignment。
稀疏匹配
任意一对帧中对应特征点的距离和:
是第帧和第帧中所有的对应关系集合。
稠密匹配
由于稠密匹配优化计算太大,因此只使用限制的帧对集合。当帧对之间的夹角比较小并且有非空的观测重叠部分,则考虑将其包含进中。稠密匹配的优化包含光度和几何:
photo一致性使用RGB图像亮度的梯度误差优化:
几何项是点到平面误差
动态的3D重建
获得实时且全局一致的重建结果关键是基于新优化得到的相机位姿更新3D模型。通过累计和去累计来更新,可以将一帧数据从其原来的位置处移除并增加到新的位姿。