ORB-SLAM 是西班牙 Zaragoza 大学的 Raúl Mur-Arta 编写的视觉 SLAM 系统。 它是一个完整的 SLAM 系统,包括视觉里程计、跟踪、回环检测,是一种完全基于稀疏特征点的单目 SLAM 系统,同时还有单目、双目、RGBD 相机的接口。其核心是使用 ORB (Orinted FAST and BRIEF) 作为整个视觉 SLAM 中的核心特征。

ORB-SLAM 基本延续了 PTAM 的算法框架,但对框架中的大部分组件都做了改进, 归纳起来主要有 4 点:

1、ORB-SLAM 选用了 ORB 特征, 基于 ORB 描述量的特征匹配和重定位, 都比 PTAM 具有更好的视角不变性。此外, 新增三维点的特征匹配效率更高, 因此能更及时地扩展场景。扩展场景及时与否决定了后续帧是否能稳定跟踪。
2、ORBSLAM 加入了循环回路的检测和闭合机制, 以消除误差累积。系统采用与重定位相同的方法来检测回路(匹配回路两侧关键帧上的公共点), 通过方位图 (Pose Graph) 优化来闭合回路。
3、PTAM 需要用户指定 2 帧来初始化系统, 2 帧间既要有足够的公共点, 又要有足够的平移量. 平移运动为这些公共点提供视差 (Parallax) , 只有足够的视差才能三角化出精确的三维位置。ORB-SLAM 通过检测视差来自动选择初始化的 2 帧。
4、PTAM 扩展场景时也要求新加入的关键帧提供足够的视差, 导致场景往往难以扩展. ORB-SLAM 采用一种更鲁棒的关键帧和三维点的选择机制——先用宽松的判断条件尽可能及时地加入新的关键帧和三维点, 以保证后续帧的鲁棒跟踪; 再用严格的判断条件删除冗余的关键帧和不稳定的三维点,以保证 BA 的效率和精度。

ORB-SLAM 的整体系统框架图:

1、ORB特征点提取算法的简介

Oriented FAST and Rotated BRIEF,简称ORB,该特征检测算子是在著名的FAST特征检测和BRIEF特征描述子的基础上提出来的,其运行时间远远优于SIFT和SURF,可应用于实时性特征检测。ORB特征检测具有尺度和旋转不变性,对于噪声及其透视变换也具有不变性,良好的性能使得利用ORB在进行特征描述时的应用场景十分广泛。ORB特征检测主要分为以下两个步骤:
(1)方向FAST特征点检测
(2)BRIEF特征描述。

2、方向FAST特征点检测

FAST特征点检测最早是由Edward Rosten和Tom Drummond于2006年在《Machine learning for high-speed corner detection》中提出,并在2010年稍作修改之后发表了《Feature From Accelerated Segment Test》,简称FAST。注意:FAST只是一种特点检测算法,并不涉及特征点的描述。

ORB采用的是FAST算子检测特征点,然后再给检测到的特征点加个特征方向信息,构成oFAST。解决了FAST算子不带有方向的严重缺陷。

FAST角点检测是一种基于机器学习的快速角点特征的检测算法,具有方向的FAST关键点检测是对兴趣点所在圆周上的16个像素点进行判断,其核心思想就是找出那些卓尔不群的点,也就是拿出一个点跟它周围足够多的点比较,如果这个点和周围足够多的点不一样,那么就认为它是一个FAST角点.考虑图像中的任意一个像素点和以这个像素点为中心的区域,通常情况下,该区域选择圆形区域。如下图所示:要判断P点是否为角点:将P点的灰度值和它邻域内的16个像素点的灰度值进行比较,如果P点的像素值和圆圈上邻域内n个连续的像素点的像素值相减大于阈值t,那么就认为点P是一个角点。
FAST角点检测计算的时间复杂度小,检测效果突出。FAST角点检测为加速该算法,通常首先对圆周上的点集进行排序,排序使得其计算过程大大得到了优化。FAST多尺度特性通过建立图像金字塔获得,引入灰度质心法用于实现特征点方向。

步骤一:粗提取。该步能够提取大量的特征点,但是有很大一部分的特征点的质量不高。下面介绍提取方法。从图像中选取一点P,如上图1。我们判断该点是不是特征点的方法是,以P为圆心画一个半径为3pixel的圆。圆周上如果有连续n个像素点的灰度值比P点的灰度值大或者小,则认为P为特征点。一般n设置为12。为了加快特征点的提取,快速排出非特征点,首先检测1、9、5、13位置上的灰度值,如果P是特征点,那么这四个位置上有3个或3个以上的的像素值都大于或者小于P点的灰度值。如果不满足,则直接排出此点。

步骤二:机器学习的方法筛选最优特征点。简单来说就是使用ID3算法训练一个决策树,将特征点圆周上的16个像素输入决策树中,以此来筛选出最优的FAST特征点。

步骤三:非极大值抑制去除局部较密集特征点。使用非极大值抑制算法去除临近位置多个特征点的问题。为每一个特征点计算出其响应大小。计算方式是特征点P和其周围16个特征点偏差的绝对值和。在比较临近的特征点中,保留响应值较大的特征点,删除其余的特征点。

步骤四:特征点的尺度不变形。建立金字塔,来实现特征点的多尺度不变性。设置一个比例因子scaleFactor(opencv默认为1.2)和金字塔的层数nlevels(pencv默认为8)。将原图像按比例因子缩小成nlevels幅图像。缩放后的图像为:I’= I/scaleFactork(k=1,2,…, nlevels)。nlevels幅不同比例的图像提取特征点总和作为这幅图像的oFAST特征点。

步骤五:特征点的旋转不变性。ORB算法提出使用矩(moment)法来确定FAST特征点的方向。也就是说通过矩来计算特征点以r为半径范围内的质心,特征点坐标到质心形成一个向量作为该特征点的方向。矩定义如下:

其中,I(x,y)为图像灰度表达式。该矩的质心为:

假设角点坐标为O,则向量的角度即为该特征点的方向。计算公式如下:

3、BRIEF特征描述

BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度直方图描述特征点的传统方法,大大的加快了特征描述符建立的速度,同时也极大的降低了特征匹配的时间,是一种非常快速,很有潜力的算法。

由于BRIEF仅仅是特征描述子,所以事先要得到特征点的位置,可以利用FAST特征点检测算法或Harris角点检测算法或SIFT、SURF等算法检测特征点的位置。接下来在特征点邻域利用BRIEF算法建立特征描述符。

算法步骤如下:

1、为减少噪声干扰,先对图像进行高斯滤波(方差为2,高斯窗口为9x9)。
2、以特征点为中心,取SxS的邻域窗口。在窗口内随机选取一对(两个)点,比较二者像素的大小,进行如下二进制赋值。

其中,p(x),p(y)分别是随机点x=(u1,v1),y=(u2,v2)的像素值。
3、在窗口中随机选取N对随机点,重复步骤2的二进制赋值,形成一个二进制编码,这个编码就是对特征点的描述,即特征描述子。(一般N=256)
以上便是BRIEF特征描述算法的步骤。

关于一对随机点的选择方法,原作者测试了以下5种方法,其中方法(2)比较好。

这5种方法生成的256对随机点如下(一条线段的两个端点是一对):

经过上面的特征提取算法,对于一幅图中的每一个特征点,都得到了一个256bit的二进制编码。接下来对有相似或重叠部分的两幅图像进行配准。

特征配对是利用的汉明距离进行判决:

1、两个特征编码对应bit位上相同元素的个数小于128的,一定不是配对的。

2、一幅图上特征点与另一幅图上特征编码对应bit位上相同元素的个数最多的特征点配成一对。

BRIEF的优点在于速度,缺点也很明显

1:不具备旋转不变性

2:对噪声敏感

3:不具备尺度不变性

ROB对于BRIEF的改进:
1、解决旋转不变性:
ORB算法采用的是:每一个特征点处,对产生的256对随机点(以256为例),将其进行旋转,后进行判别,再二进制编码。如下:S表示随机点位置(2xn的矩阵),Sθ表示旋转后的随机点的位置(2xn的矩阵),x1=(u1,v1)是一个坐标向量,其余雷同。n=256。

得到新的随机点位置后,利用积分图像进行二进制编码,即可。

2、解决噪声敏感问题:
BRIEF中,采用了9x9的高斯算子进行滤波,可以一定程度上解决噪声敏感问题,但一个滤波显然是不够的。ORB中提出,利用积分图像来解决:在31x31的窗口中,产生一对随机点后,以随机点为中心,取5x5的子窗口,比较两个子窗口内的像素和的大小进行二进制编码,而非仅仅由两个随机点决定二进制编码。(这一步可由积分图像完成)

3、解决尺度不变性
ORB算法通过构造金字塔图像序列然后提取各个图像上的ORB特征。参看方向FAST特征点检测上的步骤四。

4、ORB-SLAM的优缺点

优点:

1、Tracking的平均时间约为20ms每帧,基本可以达到实时追踪(i5-5200,2.2GHz)。
2、丢帧以后回到原来的场景,很容易就可以找回来。
3、定位的稳定性较好,姿态流畅,没有跳变。
4、在简单背景下,可以有效地追踪目标物体。

缺点:
1、构建出的地图是稀疏点云图。只保留了图像中特征点的一部分作为关键点,固定在空间中进行定位,很难描绘地图中的障碍物的存在。
2、旋转时比较容易丢帧,特别是pure rotation。
3、初始化时最好保持低速运动,对准特征和几何纹理丰富的物体。

5、ORB-SLAM2

ORB-SLAM2是在于ORB-SLAM的基础上从改进版,主要区别:
1、ORB-SLAM提出的时候只用于单目相机,而ORB-SLAM是首个基于单目,双目和RGB-D相机的开源SLAM方案,这个方案包括,回环检测,地图重用和重定位。
2、ORB_SLAM2由3+1个平行线程组成,包括跟踪、局部建图、回环检测以及在回环检测后的全局BA优化。之所以说是3+1,因为第四个线程仅在回环检测并确认后才执行。BA优化比ICP或者光度和深度误差最小方法的更加精确。
3、针对无法建图的情况,提出了一个轻量级的定位模式 ,能够更加有效的重用地图。

参考:
1、

https://zhuanlan.zhihu.com/p/47451004

2、

https://blog.csdn.net/hujingshuang/article/details/46910259

3、

https://blog.csdn.net/hujingshuang/article/details/46829627

4、

https://blog.csdn.net/hujingshuang/article/details/46984411?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-2

5、

https://blog.csdn.net/maweifei/article/details/62887831

6、

https://blog.csdn.net/lwx309025167/article/details/80365075

7、

https://blog.csdn.net/zxcqlf/article/details/80198298

ORB-SLAM学习总结相关推荐

  1. ORB SLAM学习--跑自己数据集图片序列或摄像头或视频(转)

    转自:用ORB SLAM2跑自己的数据集 使用图片序列或摄像头或视频 实践篇_不二青衣的博客-CSDN博客_orbslam2运行自己的数据集 学习 做实验参考使用,侵权则删 用ORB SLAM2跑自己 ...

  2. SLAM学习 | 论文研读《ORB: an efficient alternative to SIFT or SURF》

    SLAM学习 | 论文研读<ORB: an efficient alternative to SIFT or SURF> 1 文章翻译 Abstract(摘要) 1 Introductio ...

  3. 视觉slam学习笔记以及课后习题《第五讲特征点法视觉里程计》

    这篇博客主要记录了我在深蓝学院视觉slam课程中的课后习题,因为是为了统计知识点来方便自己以后查阅,所以有部分知识可能不太严谨,如果给大家造成了困扰请见谅,大家发现了问题也可以私信或者评论给我及时改正 ...

  4. slam学习,文章链接汇总,方便自我学习

    感谢大佬们的文章,让新手在学习道路上有指引,为方便自我学习,汇总了一部分链接 因为转载了很多篇文章,不知道应该发布应该怎么填,斗胆把汇总当成了原创,如有不妥,私必删 slam基础积累 SLAM基础积累 ...

  5. SLAM学习,小白入门到殿堂级大牛资料整理

    总结一下我接触过的SLAM算法吧,主要集中在visual slam: 特征法: ORB SLAM https://github.com/raulmur/ORB_SLAM2 优势: 在静态环境下定位准确 ...

  6. 视觉SLAM学习(三)--------SLAM 综述

    SLAM概述 参考资料分享来自本人博客:https://blog.csdn.net/Darlingqiang/article/details/78840931 SLAM一般处理流程包括track和ma ...

  7. 如何开始SLAM学习?

    作者丨王方浩@知乎 来源丨https://zhuanlan.zhihu.com/p/379070942 编辑丨3D视觉工坊 为了方便大家更好的系统学习激光SLAM,工坊邀请行业专家推出了面向工业级实战 ...

  8. SLAM学习--视觉slam学习教材推荐(附相关技术文档下载链接)

    (理论上看完前三本,足够掌握视觉slam的所有理论知识,实践部分参考各种开源代码) 一.<视觉slam十四讲>,高翔,清华大学出版社,(目前已出第二版,优先推荐) 以上教材,其实是基于国外 ...

  9. 视觉slam学习笔记以及课后习题《第三讲李群李代数》

    前言 这篇博客主要记录了我在深蓝学院视觉slam课程中的课后习题,因为是为了统计知识点来方便自己以后查阅,所以有部分知识可能不太严谨,如果给大家造成了困扰请见谅,大家发现了问题也可以私信或者评论给我及 ...

  10. SLAM学习资源分享

    SLAM学习资源分享 转载来自[SLAM],(https://mp.weixin.qq.com/s/kAdGdWDlw15ZmLzG56DOOA)如果告知侵权会删除 之前曾经总结过关于SLAM的资源, ...

最新文章

  1. gsoap(C/C++调用webservice)
  2. 数据大屏产品介绍PPT_有这些图表美化工具,十分钟配出炫酷的数据可视化大屏...
  3. 服务器配置列表在哪个文件夹,FolderMagic
  4. flink 1.9 编译: flink-shaded-asm-6 找不到
  5. 通过发送WM_GETTEXT命令获得EDIT中的信息
  6. 安装semantic-text-similarity
  7. 关于码率(Bitrate)、帧率(FPS)、分辨率和清晰度详解
  8. 论文书写各类常见格式汇总Word版
  9. 混合非线性整数规划matlab,非线性整数规划matlab
  10. CAN硬件过滤器的使用(32位宽掩码模式扩展帧)
  11. 听听那冷雨 余光中
  12. IE浏览器js 中http请求,中文传参报400错误-解决方法
  13. 如何识别Android渠道安装来源追踪?
  14. Bandicam班迪录屏 高清录制视频软件
  15. [82]redis中如何切换db
  16. python BFS最短路径问题
  17. 7-6 愤怒的牛 (25 分)
  18. 荣耀7c升鸿蒙,荣耀也能升级!鸿蒙所需配置曝光:麒麟710起步
  19. 【高效程序员系列】2、别做机器人——让工作自动化
  20. 考取华为HCIA证书需要什么流程,报培训班加考试费大概需要多少钱?

热门文章

  1. NLP学习D3-TF2chap3-4总结和代码实现(八股框架+CNN网络合集)+多线程
  2. axios是什么?如何在项目中使用?
  3. ContextConnection的子类FileConnection,HttpConnection
  4. 1.18 在每一页打印相同的表头 [原创Excel教程]
  5. 浮点数运算——加减乘除都有哈
  6. 金融数字新型基础设施创新开放联合体今日成立
  7. 【Salesforce】快速清除所有测试数据的方法,截断(Truncate)对象
  8. 支付宝当面付方案(个人免签方案)
  9. 「春招系列」30张图理解HTTP在面试中所有会出现的题
  10. IT业界十大经典谎言