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

小白学视觉

共 2531字,需浏览 6分钟

 · 2021-05-16

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

本文转自:新机器视觉Qiang


Qiang


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

我们看一下定义:

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

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

SLAM:蓝色表示运动位置。

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

图2:ORBSLAM2-运动轨迹和稠密(Dense)地图

SFM:

图3:KinectFusion-构建目标三维地图

图4:ElasticFusion-构建场景地图

我们可以看出,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的全局注册方法是同一件事情。


下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲
小白学视觉公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


浏览 22
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报