前言

单目视觉SLAM可以根据其前端视觉里程计或是后端优化的具体实现算法进行分类:前端可以分为特征点法与直接法,后端可以分为基于滤波器和基于非线性优化。其中在后端上目前已经公认基于非线性优化的方法在同等计算量的情况下,比滤波器能取得更好的结果。而前端的两种方法则各有优劣。

本文将具体分析直接法相较于特征点法的优劣处,并具体介绍目前主流的开源方案,以供大家参考。

直接法与特征点法的对比

“ 直接法最大的贡献在于,以更整体、更优雅的方式处理了数据关联问题。特征点法需要依赖重复性较强的特征提取器,以及正确的特征匹配,才能得正确地计算相机运动。而直接法,则并不要求一一对应的匹配,只要先前的点在当前图像当中具有合理的投影残差,我们就认为这次投影是成功的。而成功与否,主要取决于我们对地图点深度以及相机位姿的判断,并不在于图像局部看起来是什么样子。”

优势:
1)节省特征提取与匹配的大量时间,易于移植到嵌入式系统中,以及与IMU进行融合;
2)使用的是像素梯度而不必是角点,可以在特征缺失的场合使用,如环境中存在许多重复纹理或是缺乏角点,但出现许多边缘或光线变量不明显区域;
3)可以进行稠密或半稠密的地图重建;

劣势:
1)灰度不变是一个强假设,难以满足(易受曝光和模糊影像);
2)单像素区没有区分度,需要计算图像块或是相关性;
3)直接法成功的前提,是目标函数从初始值到最优值之间一直是下降的,然而图像非凸。因此需要有一个相当不错的初始估计,还需要一个质量较好的图像;
4)难以实现地图复用回环检测、丢失后的重定位等:除非存储所有的关键帧图像,否则很难利用先前建好的地图;即使有办法存储所有关键帧的图像,那么在重用地图时,我们还需要对位姿有一个比较准确的初始估计——这通常是困难的。

数据关联和位姿估计,在直接法中是耦合的,而在特征点法中则是解耦的。耦合的好处,在于能够更整体性地处理数据关联;而解耦的好处,在于能够在位姿不确定的情况下,仅利用图像信息去解数据关联问题。所以直接法理应更擅长求解连续图像的定位,而特征点法则更适合回环检测与重定位。此外,稀疏直接法更适用于实时性较高而计算资源有限的场合。

常用开源方案对比

MonoSLAM

2007年提出,是第一个实时单目SLAM系统。
前端:追踪非常稀疏的特征点(Shi-Tomasi角点);
后端:扩展卡尔曼滤波,以相机当前状态和所有路标点为状态量,更新其均值和方差。

缺点:应用场景很窄;路标数量有限;稀疏特征点容易丢失;存在EKF所存在的局限性。

PTAM

2007年 Parallel Tracking and Mapping
前端线程(Tracking):通过匀速运动模型预测当前帧方位,搜索FAST角点,并根据匹配关系优化帧方位,若跟踪失败开始重定位,跟踪成功则判断是否满足关键帧条件。
后端线程(Mapping):沿极线匹配不同关键帧之间的图像特征点,通过三角化恢复三维位置,并对所有关键帧和三维点运行BA。

特点:
1、提出并实现了跟踪和建图过程的并行化,首次区分出前后端的概念。
2、第一个使用非线性优化,引入了关键帧机制:把几个关键图像串起来,然后优化其轨迹和地图。
3、PTAM同时是一个增强现实软件:根据估计的相机位姿,可以在虚拟的平面上放置虚拟物体。

缺点:场景小,跟踪容易丢失。

ORB-SLAM

2015年提出。
关于ORB-SLAM更多的分析将单独开一个博客来讨论。

三线程的SLAM方案:
Tracking线程:对新来的图像提取ORB特征点,并与最近的关键帧进行比较,计算特征点的位置并粗略估计相机位姿;
Local Mapping线程:求解BA问题,包括局部空间内的特征点和相机位姿;
Loop Closing (and Full BA)线程:对全局的地图与关键帧进行回环检测,消除累计误差,优化只有相机位姿组成的位姿图。

特点:
1、支持单目、双目、RGBD,具有良好的泛用性;
2、ORB特征:不像SIFT和SURF那样费时,相比Harris角点又具有良好的旋转和缩放不变性;ORB提供描述子,在大范围运动时能进行回环检测和重定位;
3、单目具有自动选择系统初始化方案:基于对极几何还是基于单应性;双目和RGBD的初始化很快,且原地不动就能完成
4、关键帧的选取:先用宽松的判断条件加入新的关键帧和三维点以保证后续帧的鲁邦跟踪,再删除冗余关键帧和不稳定三维点以保证BA效率和精度。
5、回环检测防止累计误差。在运行前必须加载一个很大的ORB字典文件;

优点:
1、在静态环境下定位准确,系统非常稳定, 单目和双目版本都可以达到实时;
2、代码可读性强,易扩展, 网上也有实现和imu融合的版本。

缺点:
1、计算ORB特征耗时,三线程结构,cpu消耗大,难以移植到嵌入式设备;
2、稀疏特征点地图;
3、对动态物体很敏感,有动态物体时非常容易跟踪失败;
4、纯旋转也容易丢失。

LSD-SLAM

2014年 Large Scale Direct monocular SLAM

将直接法应用到了半稠密的单目SLAM中
1、提出了地图梯度与直接法的关系,以及像素梯度与极线方向在稠密重建中的角度关系;
2、在CPU上实现了实时半稠密场景的重建;
3、具有回环检测功能;
4、一些技巧保证追踪的实时性与稳定性:
在极线上等距离取5个点,度量其SSD;深度估计时,首先用随机数初始化深度,在估计完后又把深度均值归一化以调整尺度;度量深度不确定性时,不仅考虑三角化的几何关系,还考虑了极线与深度的夹角,归纳成一个光度不确定项;关键帧之间的约束使用了相似变换群及与之对应的李代数显式表达出尺度,在后端优化中可以将不同的尺度的场景考虑进来,减小尺度漂移现象。

缺点:
1、对相机内参和曝光非常敏感
2、在相机快速运动时容易丢失
3、依赖于特征点的方法进行回环检测

SVO

2014年 Semi-direct Visual Odemetry
基于稀疏直接法的视觉里程计:
SVO跟踪了一些关键点(角点),然后像直接法那样根据关键点周围的信息(4*4小块进行块匹配)估计相机运动及其位置 。

优点:
1、速度极快,适用于计算平台受限的场合
2、提出了深度滤波器的概念,推导了基于均匀-高斯混合分布的深度滤波器,用于关键点的位置估计,并使用了逆深度作为参数化形式。

缺点:
1、误差大,不准确
2、目标应用平台为无人机,相机运动主要为水平和上下移动,在平视相机中表现不佳。如单目初始化时使用了分解H矩阵,需要假设特征点位于平面上;在关键帧选择时,使用了平移量作为确定新的关键帧的策略,而没有考虑旋转量。
3、舍弃了后端优化和回环检测功能,没有建图功能。

DSO

2016年 DSO(Direct Sparse Odometry)
慕尼黑工业大学(TUM)计算机视觉实验室发布的一个稀疏直接法的视觉里程计。

后端使用一个由若干个关键帧组成的滑动窗口。除了维护这个窗口中的关键帧与地图点外,还会维护与优化相关的结构。特别地,这里指Gauss-Newton或Levenburg-Marquardt方法中的Hessian矩阵和b向量(仅先验部分)。

提出了光度标定,认为对相机的曝光时间、暗角、伽马响应等参数进行标定后,能够让直接法更加鲁棒。对于未进行光度标定的相机,DSO也会在优化中动态估计光度参数。

优点:可以生成相当稠密的点云,速度在正常运行的时候很快

缺点:
1、对场景光照要求高,要求尽量保持曝光时间的稳定
2、不是个完整的SLAM,它没有回环检测、地图重用、丢失后的重定位。
3、初始化部分也比较慢,当然双目或RGBD相机会容易很多。
4、代码可扩展性比较差

DSO在准确性,稳定性和速度上都比LSD好。LSD的优势在于回环检测。

参考

1、刘浩敏 , 章国锋、鲍虎军. 基于单目视觉的同时定位与地图构建方法综述
2、高翔《视觉SLAM十四讲》
3、高翔的知乎文章《DSO详解》

视觉SLAM——特征点法与直接法对比以及主流开源方案对比 ORB LSD SVO DSO相关推荐

  1. 视觉SLAM——特征点法与直接法对比以及主流开源方案对比 LSD SVO ORB DSO

    前言 单目视觉SLAM可以根据其前端视觉里程计或是后端优化的具体实现算法进行分类:前端可以分为特征点法与直接法,后端可以分为基于滤波器和基于非线性优化.其中在后端上目前已经公认基于非线性优化的方法在同 ...

  2. SVO: 视觉SLAM中特征点法与直接法结合

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 前面的话 VSLAM 是利用多视图几何理论,根据相机拍摄的图像信息 ...

  3. SLAM | 视觉SLAM中特征点法与直接法结合:SVO

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 前面的话 VSLAM 是利用多视图几何理论,根据相机拍摄的图像信息对相机进行定位并同时构建周围环境地图 ...

  4. (3分钟速通)Visual Odometry的特征点法和直接法

    光流法:(https://zhuanlan.zhihu.com/p/537113460) ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) ​ 编辑切换为居中 添加图片注释,不超过 140 ...

  5. python web框架对比_Python六大开源框架对比

    Python 是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准 库也是值得大家称赞的,Python甚至还 ...

  6. 各大媒体优劣对比_主流酱油选购对比

    酱油是不是越贵越好,牌子越大越好,或者广告曝光率越高越好,选购酱油应该关注那些参数,带着这些疑问,我专门跑当地大润发超市,现场比较各种品牌酱油的差异,以飨值友(本人非专业,只根据坊间的一些简单比较来判 ...

  7. 主流温度测量方案对比分析(含国产温度传感器芯片GX18B20)

    温度测量方案对比分析 一.概述 温度测量存在于我们生活与工作的方方面面,我们可以测量单点的温度体现整体环境温度,也可以测量多点温度,综合反应环境情况.本文针对单点测量的情况进行分析,如何从一点扩展到多 ...

  8. 主流开源OLAP对比分析

    数据库按照应用场景划分可以分为OLTP和OLAP,OLTP是针对交易型的场景比如像银行的存取款.转账类业务,OLAP是针对分析型的场景比如用于企业决策支持的BI.报表类业务. 而在OLAP领域,又可以 ...

  9. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-特征点法和特征提取和匹配实践

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

最新文章

  1. python --闭包学习
  2. mongodb 监控命令mongostat
  3. 前后端分离的思考与实践
  4. 【联盛德W806上手笔记】七、I2C
  5. 动手学CV-目标检测入门教程3:锚框(anchor)
  6. (连通图 ) Redundant Paths --POJ --3177
  7. 【报告分享】2020年5G芯片行业研究报告.pdf(附下载链接)
  8. textBox的Key_Down事件
  9. [C++11] 智能指针
  10. 一线架构师实践指南阅读体会_ADMEMS方法体系理解
  11. 2020年下半年信息系统项目管理师综合知识真题试题解析
  12. 使用NanoHttpd在Android项目中搭建服务器
  13. [从零开始学习FPGA编程-34]:进阶篇 - 基本时序电路-计数器(Verilog语言)
  14. windows server 2008 R2 补丁下载地址
  15. 微信群总是有人发广告?看我用Python写一个自动化机器人消灭他!
  16. vlc搭建流媒体转发服务器
  17. 联想win10专业版64位简体中文原版光盘镜像
  18. 邮件编码介绍及乱码的解决
  19. Android 饼图
  20. 显著性检测—学习笔记

热门文章

  1. xml与json互转 C语言实现,通过json-lib、jdom及xom定义XML和JSON格式处理工具类实现xml和json间相互转换...
  2. python立体图形,python中如何画三维的图形?
  3. PhpSpreadsheet读取单元格内容的坑
  4. python输入esc退出循环_使python在按ESC键时立即退出程序
  5. MFC 屏蔽ESC键和ENTER键关闭对话框的方法
  6. #MySQL#查找表中重复条目、删除重复条目
  7. Win10部分引起鼠标卡顿间歇性失灵的原因
  8. VUE项目--Floor组件
  9. 深圳大学计算机与软件学院2018分数线,深圳大学录取分数线2021是多少分(附历年录取分数线)...
  10. React前端性能提升长列表优化解决方案