1、SLAM
SLAM是Simultaneous Location and Mapping,同时定位与地图构建。是指搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动。目的是解决自主机器人“定位”和“建图”两个问题。同时要求能够实时地,没有先验知识地进行。SLAM问题的本质是对主体自身(位姿)和周围环境空间(点云)的不确定性的估计。
2、SFM
Structure from Motion(SFM)是一个估计相机参数及三维点位置的问题。一个基本的SFM pipeline可以描述为:对每张2维图片检测特征点(feature point),对每对图片中的特征点进行匹配,只保留满足几何约束的匹配,最后执行一个迭代式的、鲁棒的SFM方法来恢复摄像机的内参(intrinsic parameter)和外参(extrinsic parameter)。并由三角化得到三维点坐标,然后使用Bundle Adjustment进行优化。
根据SfM过程中图像添加顺序的拓扑结构,SFM方法可以分为增量式(incremental/sequential SFM),全局式(global SFM),混合式(hybrid SFM),层次式(hierarchica SFM)。另外有基于语义的SFM(Semantic SFM)和基于Deep learning的SFM。
3、区别
- SLAM要求实时,数据是线性有序的,无法一次获得所有图像,部分SLAM算法会丢失过去的部分信息;基于图像的SFM不要求实时,数据是无序的,可以一次输入所有图像,利用所有信息。
- SLAM是个动态问题,会涉及到滤波,运动学相关的知识,而SFM主要涉及的还是图像处理的知识。
SLAM:以定位为主,以建图为辅;要求速度大于精度;且是朝轻量级,小型化方向发展。
SFM:以建图为主,以定位为辅;要求精度更高;朝大规模,大型动态场景的重建方向发展。
SLAM最重要的作用是定位,相机要知道自己的姿态,因为需要的姿态通常都是3d的,所以在恢复3d姿态的时候,使用pnp方法能得到不少3d点,这些3d点也能成为新的地图,但是多半是稀疏的,当然这是非直接法,直接法会计算图像梯度变换比较大的地方的深度,所以最终能得到半稀疏的地图。slam属于稀疏重建的范畴,它也没有刻意要去重建某个目标,并且要求运行速度很快,通常是在线的,否则在某些场景里面就要出事故,slam要求速度大于精度,所以slam只会在关键帧间做BA,非关键帧都会使用基于filter的方法。
SFM和SLAM的功能其实是最像的,它的目的也是为了求解相机姿态,同样也能得到3d的稀疏点,它和slam最大的不同在于它要求精度更高,能做BA的地方通常都会做BA。
4、联系
- 基本理论是一致的,都是多视角几何;
- 传统方法都需要做特征值提取与匹配;
- 都需要优化投影误差;
- 回环矫正和SfM的全局注册方法是同一件事情。