来自知乎:

  SFM和vSLAM基本讨论的是同一问题,不过SFM是vision方向的叫法,而vSLAM是robotics方向的叫法。

  vSLAM所谓的mapping,vision方向叫structure;vSLAM所谓的location,我们vision方向叫camera pose。

但是从出发点考虑的话,SFM主要是要完成3D reconstuction,而vSLAM主要是要完成localization。这样设计的优化目标就完全不同了。

  从方法论的角度上考虑的话,传统的SFM是不要求prediction的,real-time是不要求的。但是对于vSLAM而言prediction是必须的,因为vSLAM的终极目标是要real-time navigation。

而传统的vSLAM也把主要精力放在prediction上面,而且是借助非camera的外界的手段来predict(运动模型?状态方程?),例如acceleration sensor。

传统SFM则把精力放在feature tracking上面了。

  直到最近,SFM开始利用图片间的optical flow做prediction,而vSLAM则更加的注重了feature tracking。所以就目前而言两个领域似有大融和趋势。


Andres Davison做了一个非常精彩的关于15年来基于视觉的SLAM的总结。过去10-15年来最典型的几个SLAM系统如下:

  • MonoSLAM

  • PTAM

  • FAB-MAP

  • DTAM

  • KinectFusion


   
  日常场景,基于多视角Multi-view重建,不使用RGBD方式的话,就选SfM(Structure from Motion)+MVS(Multi View Stereo)+SR(Surface Reconstruction)+TM(Texture Mapping)套路啦,这是传统基于多视几何的路子,原理就是利用多张图像间的特征点匹配求解相机内外参数和三维空间点的位置,也就是稀疏点云(一堆点),之后再让它浓一点,变成连续的,再加点颜色和纹理,data flow大致是:
  当然做到dense点云的话看起来就比较逼真了,想把点连起来变成连续多边形网格(也就是表面)再加上纹理信息,就是可以各种玩的3D模型了。商业软件很多了,上面已经有一些不错的例子,Pix4Dmapper是一款专门用于无人机航拍图像重建的产品,效率质量惊人,当然用于地面场景应用也是可以的。如果不怕麻烦的话,这里主要介绍一些research的例子:

SfM:大家比较熟悉的就是Changchang Wu的 VisualSFM 啦,这是个写的比较溜的非开源福利,Changchang大神一致不公开源码,是他一行行累出来的作品,其中的SiftGPU和PBA也是大神的作品。我也算用过一些不同的SfM代码,各路大神写的,包括一些大牛组的,讲良心VSFM算是我见过鲁棒性最好的 之一(严谨脸),极少出现数据量太大、数据质量(各种因素blabla)差造成的崩、卡、完、“就是没结果”之类,虽说已有岁月包浆,但其精度和稳定性值得信赖的。非说槽点的话,也就是图像匹配和BA的效率不高,各种改进此处略去,如果只是用一下的话还是包您满意的。还有MVE、 OpenMVG (openMVG/openMVG和 COLMAP(COLMAP - Structure-From-Motion and Multi-View Stereo),现在的框架都必须追求全面,所以稍微看下主页就会发现MVS等功能都是打包的。(bundler还是要说的,但是用起来稍微麻烦,不推荐上手玩)

MVS:PMVS、CMVS,CMPMVS,以及OpenMVS,各种dense层出不穷,本人代码能力有限,对于这块还是望而生畏的(顺吐一下,还是不要去自己编译OpenMVS了。。可能新版本已改观,未求证)。OpenMVS效果还是很赞的,虽说时常出现莫名的罢工,自带了VSFM和OpenMVG的接口,贴心。

SR和TM:CV,CG,CCTV,好吧,其实OpenMVS都有啦,请自行观看cdcseacave/openMVS

另外,想自己翻来覆去把玩结果的话,Meshlab是很好的。

VisualSfM——OpenMVS,是一套比较简洁的方案,也可以把OpenMVS替换成CMPMVS。另外做重建数据是非常重要的,自己拍的话请尽量量大出奇迹,多一点视角,保证每次拍照位置的距离合适(基 线),实在懒的话就上视频了,找个软件或者自己opencv弄成帧再喂进去(感兴趣的话opencv和matlab也可以自己写重建算法,有高质量库和工程,例如普林的SfM相关课程)。一次拍的不好,可以多拍几次,看下哪里空洞补哪里,新数据加进去再跑一次就好(特征点检测匹配等中间结果慎删)。

想更多了解原理,推荐一本经典教材《计算机视觉中的多视图几何》(Multiple View Geometry in Computer Vision),超级经典。


CCCV 2017讲习班笔记-基于图像的大规模场景三维重建

 
SFM的算法流程基本如下:

[摘抄] SFM 和 Visual SLAM的更多相关文章

  1. 三维重建7:Visual SLAM算法笔记

    VSLAM研究了几十年,新的东西不是很多,三维重建的VSLAM方法可以用一篇文章总结一下. 此文是一个好的视觉SLAM综述,对视觉SLAM总结比较全面,是SLAM那本书的很好的补充.介绍了基于滤波器的 ...

  2. 泡泡一分钟:Topomap: Topological Mapping and Navigation Based on Visual SLAM Maps

    Topomap: Topological Mapping and Navigation Based on Visual SLAM Maps Fabian Bl¨ochliger, Marius Feh ...

  3. Visual SLAM

    Visual SLAM 追求直接SLAM技术,而不是使用关键点,直接操作图像强度的跟踪和映射. 作为直接方法,LSD-SLAM使用图像中的所有信息,包括边缘,而基于关键点的方法只能在拐角处使用小块.这 ...

  4. Comparison of Laser SLAM and Visual SLAM

    Comparison of Laser SLAM and Visual SLAM 目前,SLAM技术广泛应用于机器人.无人机.无人机.AR.VR等领域,依靠传感器可以实现机器的自主定位.测绘.路径规划 ...

  5. 什么是视觉Visual SLAM

    什么是视觉Visual SLAM What Is Visual SLAM? What are the origins of visual SLAM? and what are some other a ...

  6. 论文阅读:Robust Visual SLAM with Point and Line Features

    本文提出了使用异构点线特征的slam系统,继承了ORB-SLAM,包括双目匹配.帧追踪.局部地图.回环检测以及基于点线的BA.使用最少的参数对线特征采用标准正交表示,推导了线特征重投影误差的雅克比矩阵 ...

  7. [SLAM] 01 "Simultaneous Localization and Mapping" basic knowledge

    发信人: leecty (Terry), 信区: ParttimeJobPost标 题: 创业公司招SLAM 算法工程师发信站: 水木社区 (Thu Jun 16 19:18:24 2016), 站内 ...

  8. (转) 实时SLAM的未来及与深度学习的比较

          首页 视界智尚 算法技术 每日技术 来打我呀 注册     实时SLAM的未来及与深度学习的比较 The Future of Real-Time SLAM and “Deep Learni ...

  9. [SLAM] 03. ORB-SLAM2

    一年后再读SLAM~ 行业有了不少工程实践方面的突破 一.链接:https://www.zhihu.com/question/53571648/answer/176732257 目前来说,受到业界肯定 ...

随机推荐

  1. nlp资料网站

    原文地址 http://blog.sina.com.cn/s/blog_574a437f01019poo.html 昨天实验室一位刚进组的同学发邮件来问我如何查找学术论文,这让我想起自己刚读研究生时茫 ...

  2. C语言 · 还款计算

    标题: 还款计算 银行贷款的等额本息还款方法是: 每月还固定的金额,在约定的期数内正好还完(最后一个月可能会有微小的零头出入). 比如说小明在银行贷款1万元.贷款年化利率为5%,贷款期限为24个月. ...

  3. 如何查看.Net Framework版本

    地址栏输入 %systemroot%\Microsoft.NET\Framework,或win+R快捷方式打开“运行”窗口,输入%systemroot%\Microsoft.NET\Framework ...

  4. 解决space-between最后一排问题

    display:flex + justify-content: space-between 能够实现2端对齐的布局,这种布局在网页中很常见.不过这种布局方式有一个问题.举个例子,我们假设现在一排放4个 ...

  5. sbt spark2.3.1 idea打包Caused by: java.lang.ClassNotFoundException: scala.Product$class

    今天同事在服务区上面装的是最新版本的hadoop3.10和spark2.3.1,因为用scala开发, 所以我想用sbt进行开发.过程中遇到各种坑,刚开始用的jdk10,结果也报错,后来改成jdk1. ...

  6. babel配置项目目录支持转换es6语法,引入非项目目录js后,引入Js转换无效

    我遇到了一个问题,我在已经配置babel的项目中通过require引入了一个项目目录外层的另一个js文件,前期是可以成功转换并打包的,但是到了后期就不行了,报错: 这个报错的意思是,引入的js文件中有 ...

  7. window alias给cmd命令起别名

    场景: Linux的alias命令是个非常实用的工具,任何命令通过alias可以精简到很短,比如:alias l='ls -l' Windows也有alias类似的命令,就是:doskey,开启方法也 ...

  8. Linux下的搜索查找命令的详解(find)

    4.find Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大部分选项 ...

  9. VC++每个版本对应的库

    msvcp.msvcr60.71和80.dll,以及vcomp.dll(不带数字版本号)属于VC++2005版 msvcp.msvcr.vcomp90.dll属于 VC++2008版 msvcp.ms ...

  10. sql语句的存储过程中的条件处理

    SQL语句的crud操作很多可能是相似的,或者重复的,这时可以将其总结我一个存储过程,即函数,这样就可以实现代码复用,也就是函数. 这时候的控制语句就像编程语言c,java的一样,其中有很多关键词CA ...