0. 简介

对于视觉而言,想要获得比较精细的地图信息,这离不开地图的三维重建。三维重建(3D Reconstruction)的定义就是,从一堆二维图像中恢复物体的三维结构,并进行渲染,最终在计算机中进行客观世界的虚拟现实的表达。一般的步骤如下

  1. 输入无序图像 Unstructured Images

  2. 图像对齐(Assoc.),筛选图像,构建场景图(也称为连接图)。

  3. 稀疏重建(Structure from Motion,SFM),生成稀疏的3D点云结构,该步骤的贡献是建立统一的坐标系,确定

了重建物体的尺寸,提供可靠的2D-3D多对一的匹配点对。

  1. 稠密重建(Multiple View Stereo,MVS),生成稠密的3D点云结构,该步骤的贡献生成稠密的点云。

  2. 表面重建(Mesh,Model Fitting),稠密点云转化为网格(mesh)。

  3. 纹理重建(Texture Mapping) ,纹理贴图,即对网格进行纹理坐标映射,进行贴纹理。

  4. 可视化渲染

1. 常用传感器

这种偏向离线的一些高精地图构建,现在很多的视觉感知会依赖Kinect、单目多视角、双目立体视觉等完成建图,或者使用雷达+ 相机的形式完成带有像素信息的三维点云数据的获取。下面是一些常用的三维点云获取方法

  1. 无序图像:事先不知道地点和拍摄时间

  2. Li-dar:激光雷达,准确适用不同规模的场景,车载/机载/无人机雷达,无人驾驶采用激光雷达,效率高,成本高,高效便捷
    ki-nect:微软开发,小巧灵便,实时网格建模,kfusion文章,通过time flight获取周围环境的点云数据,同时得到彩色图+深度图=一帧点云,速度快,精度不高,几十cm-1,2米之间,室内场景合适,算法框架,实时建模,kucation,得到环境的mash(彩色),slam+建模框架,目标跟踪估计相机姿态,符号距离场,涵盖三维重建和slam方向的基本知识

  3. 单目多视角:运动恢复结构得到相机姿态->多视角稠密重建->半稠密点云,需要算法和计算资源,得到工业界利用较多,多视角视频/无序图像对场景建模,匹配要暴力两两匹配,但slam中有序图像不需暴力匹配,前后帧,窗口检测匹配,在回环检测匹配量较大,很难做到实时

  4. 双目立体视觉:标定两个摄像机通过视差,得到三维深度信息图,得到点云。存在很多空洞

2. 常用算法

slam最主要的作用其实是定位建图,而定位这块其实是和SFM的方法比较一致的,虽然slam属于稀疏重建的范畴,它也没有刻意要去重建某个目标,并且要求运行速度很快,通常是在线的,否则在某些场景里面就要出事故,slam要求速度大于精度,所以slam只会在关键帧间做BA,非关键帧都会使用基于filter的方法。而SFM虽然其目的也是为了求解相机姿态,同样也能得到3d的稀疏点,它和slam最大的不同在于它要求精度更高,能做BA的地方通常都会做BA。

当然这部分其实已经基本保持一致了,我们现在也可以用VIO的方法来提取出相对位置。然后下面就是三维重建的思路,它和前面两个算法最大的区别在于它需要恢复深度图出来,至少是关键帧的深度图出来。恢复深度图的通常是立体匹配,如果是rgbd的话能直接从sensor得到。

立体匹配的方法是比较成熟的,主要分为sgm还有patchmatch。个人觉得最主要的区别在于patchmatch能利用前面slam或者sfm解算出来那些稀疏的3d点,然后在全图像平面传播。sgm只能从头开始做匹配。

然后在恢复稠密点云并完成拼接后可以将稠密点云地图建立为octomap,或者构建为TSDF(Truncated Signed Distance Field)—-TSDF通过将物体的表面与空间中其他点的距离进行编码来表示物体的形状。八叉树是一种数据结构,用于有效地存储和查询三维空间中的数据。

3. 常用3D地图表示方法

3.1 栅格地图

类似于2D栅格地图,3D地图相对比较占内存。

3.2 八叉树地图

如果某个位置上没有障碍物,那么可以用该位置上的大正方体表示,如果某个位置上是小障碍物,那就把大正方体切分到刚好可以包含这个障碍物的小正方形。这样就可以减少计算量,节约内存。而这刚好是八叉树这种数据结构,寻找障碍物先从最大的正方体开始找,然后再向由这个正方体平均分的八个正方体里去找。


3.3 体素地图

类似于八叉树地图,是由最小的正方体(体素)为单位构成的,每个体素存储一个SDF、颜色和权重。

3.4 TSDF地图

TSDF地图是截断符号距离函数场,这里的体素储存的是投影距离(projective distance),就是沿着传感器射线到已测量的表面的距离。

3.5 ESDF地图

ESDF地图是欧几里得符号距离场,在这个场里面的每一个体素都包含了距离它最近的障碍物的欧几里得距离。

4. 常用算法

4.1 RTAB-MAP

RTAB-MAP (Real-Time Appearance-Based Mapping)是用RGBD相机、立体相机或3D激光雷达的同时定位与地图构建。

4.2 TANDEM

TANDEM是一个将VO和基于学习的MVS结合的工作,并利用全局TSDF模型渲染深度的单目密集跟踪前端。并在处理端使用了新的MVS网络CVA-MVSNet,通过使用视图聚合和多阶段深度估计来利用整个关键帧窗口数据

4.3 NICE-SLAM

NICE-SLAM是基于nerf的RGB-D SLAM系统,通过引入分层场景表示,将多级局部信息结合在一起。使用预先训练的几何先验优化此表示,可以在大型室内场景上进行细节重建。与最近的神经隐式SLAM系统相比,该方法更具可扩展性、效率和稳健性。当然nerf现在也有做单目的工作了,只是目前比较吃资源

5. 参考链接

https://blog.51cto.com/u_14439393/5725777?

https://www.zhihu.com/tardis/bd/art/460559374?source_id=1001

https://blog.csdn.net/weixin_65089713/article/details/123843548