SLAM和三维重建有什么联系和区别?

人工智能

629人已加入

描述

计算机视觉life对几个回答进行了整理,解释权归答主所有。如有侵权,请联系删除。

Qiang

回答中很多人提SLAM比三维重建多了一个L(location),我想也许可以稍微深入一点。

我们看一下定义:

(1)SLAM:同步定位与地图构建;定谁的位?相机的位,相机在机器人身上,就是定机器人的位。建谁的地图?相机经过地方的地图。二者结合,才能确定机器人在某个地图中的具体位置,和这个场景(地图)下的连续运动轨迹。

(2)三维重建(SFM):从运动恢复结构。我觉得更像是构建目标的三维模型。然后,我们看一下流行算法的效果:

SLAM:蓝色表示运动位置。

SLAM

图1:LSD-SLAM-运动轨迹和稀疏的场景地图,黄色表示位置之间的约束,这是优化问题,不展开。

SFM:

我们可以看出,SFM中构建的三维模型是很漂亮的,目标是人,就构建人,目标是是物,就构建人,目标是地图,就构建地图的三维模型,所以我更愿意定义SFM:构建目标的三维模型。

SLAM(侧重定位)和SFM(侧重建图)联系很大的,大佬们为什么要把这两个东西分开?既估计出相机的运动轨迹,又把经过所有的地方(整个场景包括人,桌子,椅子)都构建出来,这不是更perfect的方案吗?

因为.....做不到,计算量达不到。

在SLAM中,现有方法可以做到小场景下的“相对”稠密化建图(图2),而在大场景下(图1)是难以实现的。当你的目标是导航,就需要实时性的定位,大场景稠密地图的读取和储存,现有硬件条件是不可能达到的,但是,越稠密的地图才能更好的帮助机器人进行自主定位。所以,现在发展二十年之久的SLAM的遗留问题就有,稀疏地图稠密化(我构建了稀疏地图,但是为了自主导航,这个地图不够用),或者稠密地图的稀疏表达(典型工作octotree)。

SLAM中的M什么时候能变成,真正能用做语义分割和识别的dense mapping,机器人的自主性会得到极大的进步。

akkaze-郑安坤

稍微修改一下这个回答,准确点说slam应该去和sfm比较,不能直接和三维重建比较。

slam最重要的作用是定位,相机要知道自己的姿态,因为需要的姿态通常都是3d的,所以在恢复3d姿态的时候,使用pnp方法能得到不少3d点,这些3d点也能成为新的地图,但是多半是稀疏的,当然这是非直接法,直接法会计算图像梯度变换比较大的地方的深度,所以最终能得到半稀疏的地图。slam属于稀疏重建的范畴,它也没有刻意要去重建某个目标,并且要求运行速度很快,通常是在线的,否则在某些场景里面就要出事故,slam要求速度大于精度,所以slam只会在关键帧间做BA,非关键帧都会使用基于filter的方法。

然后是sfm,structure from motion,它和slam的功能其实是最像的,它的目的也是为了求解相机姿态,同样也能得到3d的稀疏点,它和slam最大的不同在于它要求精度更高,能做BA的地方通常都会做BA。

三维重建是密集重建,它和前面两个算法最大的区别在于它需要恢复深度图出来,至少是关键帧的深度图出来。恢复深度图的通常是立体匹配,如果是rgbd的话能直接从sensor得到。

立体匹配也有两种主流方法。我个人认为可以分为sgm一类,patchmatch一类。个人觉得最主要的区别在于patchmatch能利用前面slam或者sfm解算出来那些稀疏的3d点,然后在全图像平面传播。sgm只能从头开始做匹配。

当然恢复出来深度图以后还有各种深度图融合算法。因为对三维模型的表示也有好几种方式,基于三角网的,基于voxel的,基于tsdf的。每一种的融合方法都不一样。这是一个大的课题。总的来说,到这里,三维重建和slam已经完全不一样了。

育心

针对这个问题,专门请教了视觉SLAM和三维重建方面的大佬,整理如下:

区别

(1)SLAM要求实时,数据是线性有序的,无法一次获得所有图像,部分SLAM算法会丢失过去的部分信息;基于图像的SfM不要求实时,数据是无序的,可以一次输入所有图像,利用所有信息。

(2)SLAM是个动态问题,会涉及到滤波,运动学相关的知识,而SfM主要涉及的还是图像处理的知识。

联系

(1)基本理论是一致的,都是多视角几何;

(2)传统方法都需要做特征值提取与匹配;

(3)都需要优化投影误差;

(4)回环矫正和SfM的全局注册方法是同一件事情。

编辑:黄飞

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分