专栏名称: 3DCV
关注工业3D视觉、SLAM、自动驾驶技术,更专注3D视觉产业的信息传播和产品价值的创造,深度聚焦于3D视觉传感器、SLAM产品,使行业产品快速连接消费者。
目录
相关文章推荐
秋叶PPT  ·  玩出花了!DeepSeek这3个隐藏操作,我 ... ·  9 小时前  
旁门左道PPT  ·  给大家看一套发布会PPT ·  22 小时前  
跟我学个P  ·  除了DeepSeek,这个AI工具做的PPT ... ·  3 天前  
跟我学个P  ·  清华大学的这份《DeepSeek》PPT手册 ... ·  3 天前  
51好读  ›  专栏  ›  3DCV

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

3DCV  · 公众号  ·  · 2024-10-25 11:54

正文

点击上方“ 3DCV ”,选择“星标”

干货第一时间送达

内容来自知乎,「3DCV」整理,如有侵权请联系删除 https://www.zhihu.com/question/64011093

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

作者 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已经完全不一样了。

作者 Qiang

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

我们看一下定义:

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

(2)三维重建(SFM):从运动恢复结构。我觉得更像是构建目标的三维模型。

然后,我们看一下流行算法的效果:SLAM----:蓝色表示运动位置。

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

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







请到「今天看啥」查看全文