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

视觉SLAM——特征点法与直接法对比以及主流开源方案对比 ORB LSD SVO DSO单目视觉SLAM可以根据其前端视觉里程计或是后端优化的具体实现算法进行分类:前端可以分为特征点法与直接法,后端可以分为基于滤波器和基于非线性优化。其中在后端上目前已经公认基于非线性优化的方法在同等计算量的情况下,比滤波器能取得更好的结果。而前端的两种方法则各有优劣。本文将具体分析直接法相较于特征点法的优劣处,并具体介绍目前主流的开源方案,以供大家参考。

大家好,又见面了,我是你们的朋友全栈君。

前言

单目视觉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详解》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145986.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java反射——内省(Introspector)以及BeanUtils内省框架

    Java反射——内省(Introspector)以及BeanUtils内省框架讨论内省的前提是需要了解Java中的反射,如果需要了解反射的话,可以点击下方的文章Java中的反射机制介绍为什么要学内省?开发框架时,经常需要使用java对象的属性来封装程序的数据,每次都使用反射技术完成此类操作过于麻烦,所以JDK里提供了一套API,专门用于操作java对象的属性。既然内省是专门用于操作java对象属性的,那首先得搞懂什么是对象的属性1、什么是java对象的属性呢…

    2022年5月12日
    41
  • java tomcat 环境变量配置_手把手教你如何配置tomcat环境变量「建议收藏」

    java tomcat 环境变量配置_手把手教你如何配置tomcat环境变量「建议收藏」我们下载安装了tomcat,那么tomcat环境变量配置怎么配置?下面小编就和大家分享下tomcat环境变量的配置。首先介绍安装JDK和Tomcat一、安装JDK和Tomcat1、安装JDK:直接运行jdk-7-windows-i586.exe可执行程序,默认安装即可。备注:路径可以其他盘符,不建议路径包含中文名及特殊符号。2、安装Tomcat:直接解压缩下载文件“apache-tomcat-7….

    2022年5月31日
    29
  • 某次心血来潮的破解案例

    某次心血来潮的破解案例背景前面遇到一个so解密的问题,学习了一波IDA。无聊之际,买了个游戏来耍耍,突发奇想,想着尝试一些花里胡哨的东西,于是有了以下内容。逻辑分析与实现寻找对应代码实现dl

    2021年12月13日
    64
  • MybatisPlus 分布式Id

    MybatisPlus 分布式Id对于分布式id,有很多方案,现在大多数用的是基于雪花算法snowflake的实现,美团有leaf,百度有uid-generator,我这里记录下苞米豆在MybatisPlus3中的分布式id实现简单介绍下雪花算法雪花算法也叫雪花id,是一个64bit的整型数据,原生的snowflake是这样的:最高位不用,41bit保存时间戳,单位是毫秒,10bit的机器位,12bit的唯一序列号,可以理解是某一毫秒内,某台机器生成了不重复的序列号10bit一般一会分为5bit的datacen

    2025年6月20日
    2
  • autoconf 手册

    autoconf 手册 AutoconfCreatingAutomaticConfigurationScriptsEdition2.13,forAutoconfversion2.13December1998byDavidMacKenzieandBenElliston   目录介绍创建configure脚本

    2022年5月27日
    23
  • office2013产品密钥_office365激活密钥

    office2013产品密钥_office365激活密钥HV7BJ-R6GCT-VHBXD-YH4FD-GTH2T87XPX-M3D6G-W4D39-VKVKR-DB8C7HM7R6-FP6QB-XTDC3-MT442-FVPKMXJBYM-62WK4-RCT9Y-XG3HQ-M2CMKHMYY4-TR62Q-9TT76-BDBHK-WPRPTHV7BJ-R6GCT-VHBXD-YH4FD-GTH2Thttp://zhida…

    2022年10月9日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号