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

  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)。为了加速,从金字塔的最顶层(默认是第五层)逐层计算(默认计算到第3层)。第二步(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只沿梯度方向优化)。每个特征点有一个单独的深度滤波器,深度值被设定为高斯分布与均匀分布的加权和(作者论证了这种假设比单一高斯分布要好,更详细的解读可以参考REMODE),高斯分布描述内点的分布,均匀分布描述外点的分布。深度值滤波器在初始化时,不确定度是很大的(如果是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.

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

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

    版权声明:本文为博主原创文章,未经博主允许不得转载. 本系列文章旨在总结主流视觉SLAM算法的框架,对比各个算法在子模块的差异,最终提炼出融合各个算法优点的架构. PTAM[1]是视觉SLAM领域里程 ...

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

    版权声明:本文为博主原创文章,未经博主允许不得转载. ORB-SLAM[1]完全继承了PTAM(http://www.cnblogs.com/zonghaochen/p/8442699.html)的衣 ...

  3. SLAM学习笔记(2)SLAM算法

    SLAM算法分为三类:Kalman滤波.概率滤波.图优化 Kalman滤波方法包括EKF.EIF:概率滤波包括RBPF,FastSLAM是RBPF滤波器最为成功的实例, 也是应用最为广泛的SLAM方法 ...

  4. 视觉SLAM的主要功能模块分析

    视觉SLAM的主要功能模块分析 一.基本概念 SLAM (simultaneous localization and mapping),也称为CML (Concurrent Mapping and L ...

  5. 转:SLAM算法解析:抓住视觉SLAM难点,了解技术发展大趋势

    SLAM(Simultaneous Localization and Mapping)是业界公认视觉领域空间定位技术的前沿方向,中文译名为“同步定位与地图构建”,它主要用于解决机器人在未知环境运动时的 ...

  6. 经典视觉SLAM框架

    经典视觉SLAM框架 整个视觉SLAM流程包括以下步骤: 1. 传感器信息读取.在视觉SLAM中主要为相机图像信息的读取和预处理. 2. 视觉里程计(Visual Odometry,VO).视觉里程计 ...

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

    原文地址:http://www.cnblogs.com/zjiaxing/p/5548265.html 在目前实际的视觉SLAM中,闭环检测多采用DBOW2模型https://github.com/d ...

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

    在目前实际的视觉SLAM中,闭环检测多采用DBOW2模型https://github.com/dorian3d/DBoW2,而bag of words 又运用了数据挖掘的K-means聚类算法,笔者只 ...

  9. (转) SLAM系统的研究点介绍 与 Kinect视觉SLAM技术介绍

          首页 视界智尚 算法技术 每日技术 来打我呀 注册     SLAM系统的研究点介绍 本文主要谈谈SLAM中的各个研究点,为研究生们(应该是博客的多数读者吧)作一个提纲挈领的摘要.然后,我 ...

随机推荐

  1. ZJNU 2353 - UNO

    大模拟,但是题目好像有些地方表述不清 根据UNO在初中曾被别人虐了很久很久的经历 猜测出了原本的题意 本题中的+2虽然有颜色,但是也可以当作原UNO游戏中的+4黑牌 即在某人出了+2后,可以出不同颜色 ...

  2. Spring学习之Aspectj开发实现AOP

    Aspectj是一个基于Java语言的Aop框架,它提供了强大的Aop功能. Aspectj简介: 1.Aspectj是一个面向切面的框架,它扩展了Java语言,它定义了一个Aop语法. 2.所以它有 ...

  3. PAT Advanced 1154 Vertex Coloring (25) [set,hash]

    题目 A proper vertex coloring is a labeling of the graph's vertices with colors such that no two verti ...

  4. LGOJ3747 六省联考2017 分手是祝愿

    这两天遇到不少这种"人类智慧题"了,感觉都是很巧妙的 Description link 现在有 \(n\) 盏灯,设每一次操作控制第 \(i\) 占灯,而改变状态的灯就是 \(i\ ...

  5. 爬虫—GEETEST滑动验证码识别

    一.准备工作 本次使用Selenium,浏览器为Chrome,并配置好ChromDriver 二.分析 1.模拟点击验证按钮:可以直接使用Selenium完成.    2.识别滑块的缺口位置:先观察图 ...

  6. MySQL--重定向输出内容

    参考:http://www.cnblogs.com/emanlee/p/4233602.html select current_date()  into outfile 'dest_path';

  7. 使用pycharm遇到问题排查过程

    一.安装Python 下载路径:https://www.python.org/downloads/ 二.配置环境变量 安装Python后,配置环境变量,将安装目录添加到Path中: 使用pycharm ...

  8. CSP模拟赛3游记

    老师说这次题比较难,深表同意,还是只有90min. T1有还几个坑点,呜呜呜,感觉有点像斗地主的超级简化版. T2:不难但是特别复杂需要70+行代码,比龙虎斗好想但比较难写,但还是成功打挂. T3:根 ...

  9. Matlab高级教程_第二篇:Matlab相见恨晚的模块_01_定时器

    MATLAB的定时器功能(timer函数): 1 从MATLAB6.5版本开始,MATLAB开始支持定时器.相对于传统的pause函数来说,定时器要强大的多,不仅可以等效实现pause的功能,还可以显 ...

  10. Matlab高级教程_第一篇:Matlab基础知识提炼_04

    第八节:几大MATLAB的数据类型 8.1 数值型 8.2 字符和字符串 创建用' ' 8.3 函数句柄 8.4 结构体 创建用. 语法:struct('field', var1,'field2',' ...