视觉SLAM算法框架解析(3) SVO

  版权声明:本文为博主原创文章,未经博主允许不得转载。

  SVO(Semi-direct Visual Odometry)[1]顾名思义是一套视觉里程计(VO)算法。相比于ORB-SLAM,它省去了回环检测和重定位的功能,不追求建立、维护一个全局地图,更看重tracking的效果,追求高计算速度、低CPU占用率,所以SVO非常适合在计算资源有限的移动设备上使用。SVO对PTAM的改进主要在两个方面:1)高效的特征匹配;2)鲁棒的深度滤波器。SVO比PTAM、ORB-SLAM计算速度快很多的最主要原因是SVO不需要每一帧都提取特征点。在tracking线程,当前帧的特征点是从上一帧用光流法传递到过来的,只有在mapping线程插入新关键帧时才需要提取特征点。另一个原因是SVO使用了深度滤波器,PTAM和ORB-SLAM只用两帧图像三角化出地图点,只要地图点没有被判定为外点,就固定不变了(除非BA阶段调整),而SVO的深度滤波器会根据多帧图片不断收敛地图点的不确定度,从而得到更可靠的地图点。因为地图点更可靠,所以SVO只需要维护更少的地图点(PTAM一般维护约160到220个特征点,SVO在fast模式下维护约120个地图点),从而加快了计算速度。

  在tracking线程,SVO综合了直接法和特征点法的优点设计了全新的三步策略。第一步(Sparse Model-based Image Alignment),用Lucas-Kanade光流法粗算当前帧的位置姿态。具体方法是:把前一帧对应的地图点投影到当前帧(初始位置姿态为单位阵),比较前一帧特征点和当前帧投影点附近区域(patch)像素灰度值的差别,通过最小化photometric error求解当前帧的位置姿态。由于这一步是粗算,为了加快计算速度,patch选取了4*4的大小,并且没有做仿射变换(affine warp)。第二步(Feature Alignment),求出特征点在当前帧的精确像素坐标。对于每个特征点单独考虑,找到和当前帧视角最接近的共视关键帧(这个关键帧和当前帧的视角差别越小,patch的形变越小,越可以更精准地匹配),然后再次用Lucas-Kanade光流法最小化photometric error。相比于第一步的粗测,这一步选取了8*8的patch,并且做仿射变换,可以得到亚像素级别的精度。第三步(Pose & Structure Refinement),通过前两步找到精确的匹配点之后,可以通过最小化重投影误差进一步优化相机姿态以及地图点位置(这一步就和patch无关了,地图点和投影点都是点,cost function是点到点的距离),这一步又分成三小步:1)Motion-only BA,地图点不变,只优化当前帧位置姿态。2)Strcture-only BA,当前帧不动,只优化地图点位置。3)Local BA,附近关键帧和可见的地图点都被优化了,这一小步在fast模式下是不做的。

  SVO之所以叫半直接法(Semi-direct)就是因为前两步估计策略像直接法(LSD-SLAM、DSO为代表)一样最小化photometric error,而第三步则和特征点法(PTAM、ORB-SLAM为代表)一样最小化重投影误差。如果省略第一步,直接从第二步开始计算会更耗时,因为为了匹配远距离的特征点需要把patch设置得很大,而且会需要剔除外点。而如果省略第二步和第三步则会产生严重的累积漂移,因为第一步只是考虑前后帧,而第三步把当前帧和关键帧、地图点对齐了。

  在mapping线程,SVO首先判定当前帧是否是关键帧(追踪成功的特征点数量是否少于一个阈值就插入新关键帧),如果是,则提取特征点、初始化深度滤波器;如果不是,则更新深度滤波器看它是否收敛,如果收敛,则生成新的地图点辅助tracking线程计算。SVO提取特征点的方式和ORB-SLAM类似,也是先构造金字塔,再划分网格提取最显著的FAST特征(如果提取不到足够显著的FAST角点,SVO2.0[2]会找梯度值最大的像素作为edgelet特征点,它和普通FAST角点在计算中的唯一差别是:在tracking线程的第二步feature alignment阶段,edgelet只沿梯度方向优化)。每个特征点有一个单独的深度滤波器,深度值被设定为高斯分布与均匀分布的加权和(作者论证了这种假设比单一高斯分布要好),高斯分布描述内点的分布,均匀分布描述外点的分布。深度值滤波器在初始化时,不确定度是很大的(如果是stereo或者RGBD相机可以直接给出接近真值的初值,深度滤波器会收敛的更快),之后每计算出新一帧的位置姿态,都可以根据几何约束沿着极线找特征点匹配,然后根据三角测量的原理得到不确定度更小的后验深度值。当不确定度小于一个阈值,这个地图点就会被建立。地图点立即就会被用来估计运动。

参考文献:

[1] Forster C, Pizzoli M, Scaramuzza D. SVO: Fast semi-direct monocular visual odometry[C]// IEEE International Conference on Robotics and Automation. IEEE, 2014:15-22.

[2] Forster C, Zhang Z, Gassner M, et al. SVO: Semidirect Visual Odometry for Monocular and Multicamera Systems[J]. IEEE Transactions on Robotics, 2017, 33(2):249-265.

[2] George Vogiatzis, Carlos Hernández. Video-based, real-time multi-view stereo ☆, ☆☆[J]. Image & Vision Computing, 2011, 29(7):434-441.

原文地址:https://www.cnblogs.com/zonghaochen/p/8448620.html

时间: 2024-11-06 12:47:02

视觉SLAM算法框架解析(3) SVO的相关文章

视觉SLAM算法框架解析(1) PTAM

版权声明:本文为博主原创文章,未经博主允许不得转载. 本系列文章旨在总结主流视觉SLAM算法的框架,对比各个算法在子模块的差异,最终提炼出融合各个算法优点的架构. PTAM[1]是视觉SLAM领域里程碑式的项目.在此之前,MonoSLAM[2]为代表的基于卡尔曼滤波的算法架构是主流,它用单个线程逐帧更新相机位置姿态和地图.地图更新的计算复杂度很高,为了做到实时处理(30Hz),MonoSLAM每帧图片只能用滤波的方法处理约10~12个最稳定的特征点.PTAM最大的贡献是提出了tracking.m

视觉SLAM算法框架解析(2) ORB-SLAM

版权声明:本文为博主原创文章,未经博主允许不得转载. ORB-SLAM[1]完全继承了PTAM(http://www.cnblogs.com/zonghaochen/p/8442699.html)的衣钵,并做出了两点巨大改进:1)实时回环检测:2)很鲁棒的重定位.为了实现这两点改进,ORB-SLAM把PTAM的mapping线程基于局部BA和全局BA拆分成了local mapping和loop closing两个线程,用ORB描述子替换了patch匹配,并且设计了非常优秀的地图管理策略. 在tr

经典视觉SLAM框架

引言:通过前面的推送我们已经对SLAM有了个大体的认识.(初识视觉SLAM)下面来看经典的视觉SLAM框架,了解一下视觉SLAM究竟由哪几个模块组成.本文选自<视觉SLAM十四讲:从理论到实践>. 整体视觉SLAM流程图. 整个视觉SLAM流程包括以下步骤. 传感器信息读取.在视觉SLAM中主要为相机图像信息的读取和预处理.如果是在机器人中,还可能有码盘.惯性传感器等信息的读取和同步. 视觉里程计(Visual Odometry,VO).视觉里程计的任务是估算相邻图像间相机的运动,以及局部地图

视觉SLAM之RANSAC算法用于消除图像误匹配的原理

在基于特征点的视觉SLAM中,通常情况下,在特征匹配过程中往往会存在误匹配信息,使得计算获取的位姿精度低,易产生位姿估计失败的问题,因此,剔除这些错配点有很大的必要性.常会用到RANSAC算法进行消除两两匹配图像的误匹配点,如果只停留在应用的层面上很简单,直接调用opencv函数就行,看到效果时,感觉好神奇,到底怎么实现的啊,以前一直也没弄太明白,与图像结合的博客也比较少,在查阅了一些资料后,笔者似乎明白了一点,希望笔者的总结会对您的理解有帮助. 首先先介绍一下RANSAC算法(RANdom S

视觉SLAM之词袋(bag of words) 模型与K-means聚类算法浅析(1)

在目前实际的视觉SLAM中,闭环检测多采用DBOW2模型https://github.com/dorian3d/DBoW2,而bag of words 又运用了数据挖掘的K-means聚类算法,笔者只通过bag of words 模型用在图像处理中进行形象讲解,并没有涉及太多对SLAM的闭环检测的应用. 1.Bag-of-words模型简介 Bag-of-words模型是信息检索领域常用的文档表示方法.在信息检索中,BOW模型假定对于一个文档,忽略它的单词顺序和语法.句法等要素,将其仅仅看作是若

初识视觉SLAM:用相机解决定位和建图问题

引言:视觉SLAM 是指用相机解决定位和建图问题.本文以一个小机器人为例形象地介绍了视觉SLAM的功能及特点.本文选自<视觉SLAM十四讲:从理论到实践>. SLAM 是Simultaneous Localization and Mapping 的缩写,中文译作"同时定位与地图构建".它是指搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动.如果这里的传感器主要为相机,那就称为"视觉SLAM". 假设我们组装

TLD视觉跟踪算法(转)

源:TLD视觉跟踪算法 TLD算法好牛逼一个,这里有个视频,是作者展示算法的效果,http://www.56.com/u83/v_NTk3Mzc1NTI.html.下面这个csdn博客里有人做的相关总结,感觉挺好的,收藏了!下面有个Compressive Tracking的网址,提供的代码很少,但实时性很好,matlab代码下下来就能用. 以下博文转自:http://blog.csdn.net/windtalkersm/article/details/8018980 TLD是一种算法的简称,原作

视觉SLAM实战(一):RGB-D SLAM V2

写在前面 首先打个广告.SLAM研究者交流QQ群:254787961.欢迎各路大神和小白前来交流. 看了前面三篇博文之后,是不是有同学要问:博主你扯了那么多有用没用的东西,能不能再给力一点,拿出一个我们能实际上手玩玩的东西啊?没错,接下来我们就带着大家,实际地跑一下视觉SLAM里的那些经典程序,给大家一个直观的印象——因此博文就叫"视觉SLAM实战"啦.这些程序包括: RGBD SLAM V2 SVO KinectFusion Orb-SLAM 如果你有什么建议,可以发我的邮件或来群里

视觉SLAM方向找工作经历

秋招已经过去了两个多月了,一直拖到现在2017年快完了才"舍得"写== 先说一下自己的基本情况,985硕士一枚,有还不错的一作会议论文,一直专注在视觉SLAM和三维重建方面,SLAM和三维重建内容都很多,我懂的并不够精. 虽然心里一直想早点开始准备,但是实验室的事情也比较多,还是拖到了2017年年初才开始花时间去准备,同时还在写一篇论文.实习很重要,实习基本都能留下,多一次实习多一个机会,有机会去的话能去就去.大厂的实习招聘大概在3~4月份,过完年之后就开始准备数据结构这块的知识,主要