ORB-SLAM2源码详解

  • 大小:2.50 MB
  • 类型:技术文档
  • 格式:PDF
  • 审核:陆梦菡
  • 热度:593
  • 更新:2020-11-28 08:54:56
vip 立即下载( 2.50 MB )
关注公众号免费下载
版权投诉 / 资源反馈(本资源由用户 魏欣怡 投稿)

在这篇文章里我们主要开始对跟踪线程进行介绍: 在orb_slam整体编程思路及代码解析(1)中我们发现,Tracking线程的入口是TrackMonocular,其中GrabImageMonocular返回位姿。 FUNCTION1:Tracking的构造函数 默认把跟踪状态设为NO_IMAGES_YET,定位跟踪模式,默认的其他参数,诸如字典,图像画布,地图画布,地图,关键帧数据库等都是system.cc类里定义的对象。也从配置文件中传入了相机的内参,图像校正系数,帧率,图像金字塔和角点提取的基本参数,这些参数都是这个类的元素等。 tracking过程都会用到mpORBextractorLeft作为特征点提取器, 在单目初始化的时候,会用mpIniORBextractor来作为特征点提取器,两者的区别是后者比前者最多提出的点数多一倍。 FUNCTION1.1:ORBextractor的构造函数 是构造函数,传入features_num最多提取的特征点的数量,scale_factor金字塔图像之间的尺度参数,levels_num金字塔的层数,default_fast_threshold默认fast 角点检测的时候的阈值,为了防止用默认阈值fast角点检测检测的特征数过少,添加设置min_fast_threshold最小的fast特征检测阈值,以保证检测的特征数目。每一层都有一些属性参数,比如mvScaleFactor、mvLevelSigma2、mvInvScaleFactor、mvInvLevelSigma2等,以及给每层分配待提取的特征数,具体通过等比数列求和的方式,求出每一层应该提取的特征数,把每一层的特征点数都放在mnFeaturesPerLevel中,值得注意的是第零层的特征点数是nfeatures(1-1/scaleFactor)/(1-(1/scaleFactor)^nlevels),然后下一层是上一层点数的1/scaleFactor倍。以此类推,最后一层兜底。然后复制训练的模板,在计算描述子的时候会用到。最后通过求x坐标对应在半径为HALF_PATCH_SIZE的圆上的y坐标,标出了一个圆形区域用来求特征点方向。相关内容可以参考Oriented FAST and Rotated BRIEF。 FUNCTION2:GrabImageMonocular 这个函数先把图片转换成了灰度图像,然后跟据跟踪的状态构造关键帧,再是进行跟踪得到当前帧的位姿。 FUNCTION2.1:Frame的构造函数 传入图像,时间戳,特征点提取器,字典,内参矩阵等参数来构造关键帧,首先把要构造金字塔的相关参数给Frame类中的跟金字塔相关的元素。然后提取ORB特征, 这一步调用了重载了函数调用操作符operator()。 FUNCTION2.1.1:operator() 传入的图像必须是灰度图像,然后构造图像金字塔。相关内容可以参考: ORB_SLAM2 源码阅读 ORB_SLAM2::ORBextractor。 FUNCTION2.1.1.1:ComputePyramid(image) 这个函数通过传入的图像来构造nlevel层金字塔,level层是level-1层用resize函数得到大小为level-1层大小的scale倍的线性插值后的图像,为了方便做一些卷积计算,所以用copyMakeBorder函数来做边界填充。填充类型是BORDER_REFLECT_101(反射101),例如:gfedcb|abcdefgh|gfedcba。 FUNCTION2.1.1.2:ComputeKeyPointsOctTree(allKeypoints) 这个函数为了计算金字塔每一层的兴趣点,找到FAST关键点,在操作上是依次针对图像金字塔的每一层图像进行的,首先在图像四周去掉长度为EDGE_THRESHOLD-3个单位的像素点的边界,对去掉边界后的图像网格化,每个窗口的大小为w个像素点的大小,然后依次在划分好的窗口中提取FAST关键点,这样做的目的是为了使得每个网格都有特征,从而使得特征点在图像上的分布相对均匀点。如果存在有的窗口中提取的特征点数为0,则降低阈值继续提取,然后对提取出了的关键点换算出其位于(level层的被裁掉边界图像)的位置,并每个窗口中的关键点存入vToDistributeKeys容器中,vToDistributeKeys容器就暂时保存着level层图像的关键点。然后将这些特征点送入DistributeOctTree函数,剔除一些关键点。将剔除后留下的关键点存入allKeypoints[level]容器中。 FUNCTION2.1.1.2.1:DistributeOctTree(vToDistributeKeys, minBorderX, maxBorderX, minBorderY, maxBorderY,mnFeaturesPerLevel[level], level); 先用(maxX-minX)/(maxY-minY)来确定四叉数有几个初始节点,这里有 bug,如果输入的是一张 宽高比 小于 0.5 的图像,nIni 计算得到 0,下一步计算 hX 会报错,例如round(640/480)=1,所以只有一个初始节点,(UL,UR,BL,BR)就会分布到被裁掉边界后的图像的四个角。把所有的关键点分配给属于它的节点,当节点所分配到的关键点的个数为1时就不再进行分裂,当节点没有分配到关键点时就删除此节点。再根据兴趣点分布,利用四叉树方法对图像进行划分区域,当bFinish的值为true时就不再进行区域划分,首先对目前的区域进行划分,把每次划分得到的有关键点的子区域设为新的节点,将nToExpand参数加一,并插入到节

相关资源

  • 《虚拟现实:接口、应用与设计(原书第2版)》参考文献

    《虚拟现实:接口、应用与设计(原书第2版)》参考文献

    本书将虚拟现实(VR)视为一种媒介,更多聚焦于内容而非技术层面,讨论如何实现虚拟现实以及如何创建成功的虚拟现实应用。书中首先介绍相关术语和背景知识;然后重点讨论界面(接口)技术,包括交互技术、内容选择和表示问题,并新增一章讨论人类用户在虚拟现实体验中扮演的重要角色;之后讨论虚拟现实的总体设计,涉及虚拟现实体验的分类以及我们可以从过去的设计中学到的经验;最后对虚拟现实系统和应用的未来进行展望。本书适合所

    大小:28.56 MB虚拟现实配套资源

  • 《PHP程序设计》配套资源

    《PHP程序设计》配套资源

    ★书名:PHP程序设计 ★书号:978-7-115-56124-4 ★简介:PHP是一种运行于服务器端并完全跨平台的嵌入式脚本编程语言,是目前开发各类Web应用的主流语言之一。本书就是面向PHP初学者特别推出的一本入门教材。本书站在初学者的角度,以形象的比喻、丰富的图解、实用的案例、通俗易懂的语言详细讲解了PHP语言。全书共分11章,第1~7章主要讲解了Web开发概念和PHP入门、PHP基本语法、PHP流程控制和数组、函数以及应用、与网页交互、PHP访问MySQL数据库、会话

    大小:352.7 MBPHP程序设计配套资源

  • 《Adobe InDesign CC 2018经典教程(彩色版)》配套资源

    《Adobe InDesign CC 2018经典教程(彩色版)》配套资源

    内容简介 《Adobe InDesign CC 2018经典教程(彩色版)》由Adobe公司的专家编写,是Adobe InDesign CC 2018软件的正规学习用书。 《Adobe InDesign CC 2018经典教程(彩色版)》共15课,涵盖了InDesign工作区简介、InDesign基本操作、设置文档和处理页面、使用对象、排文、编辑文本、排版艺术、处理颜色、使用样式、导入和修改图形、制作表格、处理透明度、打印及导出、创建包含表单域的Adobe PDF文件、创建版面固定的EPUB 等内容。《A

    大小:720 MBAdobe配套资源

  • 《Python物理建模初学者指南》配套资源

    《Python物理建模初学者指南》配套资源

    编辑推荐 Python是一种迅速得到科学界广泛认可的计算机编程语言。本书的目的在于为Python学习者提供帮助,使他们可以通过自学掌握足以开展物理建模工作的编程技能,包括设置开源Python的编程环境,以及使用Python完成一些常见的科学运算任务,例如数据的导入和导出、数据的可视化、数值分析和模拟等。本书无需读者具备任何的编程经验。本书侧重于基础性内容,并介绍了一些广泛适用的技术,包括:● Python编程基础与脚本;● 数值数组;● 二维和

    大小:2.5 MBPython配套资源

  • 矩阵分析与计算

    矩阵分析与计算 课后答案

    《矩阵分析与计算》 是国防工业出版社出版的图书,作者是朱元国。 [1] 本书主要介绍了矩阵论有关基础理论,同时,引入矩阵计算的相关内容。 本书内容包括矩阵的标准型,向量范数与矩阵范数,矩阵分解,特征值的估计与计算,广义逆矩阵,矩阵函数,线性方程组的直接解法,线性最小二乘问题,线性方程组的迭代解法等内容,最后一章介绍线性空间与线性变换,是线性代数相关内容的简介。本书的特点之一是在介绍矩阵论有关基础理论的同时,引

    大小:22.2 MB矩阵分析课后答案

  • 《Python和Pygame游戏开发指南》配套资源

    《Python和Pygame游戏开发指南》配套资源

    编辑推荐 本书作者在国外发布英文版后,受到普遍欢迎和很好的评价。本书通过详细分析11款示例游戏的源代码,介绍Pygame库的用法。寓教于乐,轻松有趣。本书所涉及的11款示例游戏,是诸如Nibbles、Tetris、Simon、Bejeweled、Othello、Connect Four、Flood It等经典游戏的翻版。本书的Web站点http://inventwithpython.com/pygame,提供源代码下载等更多资源。 内容简介 Python语言和Pygame都是开发图形化的计算机游戏的得力工

    大小:16 MBPython游戏开发配套资源

  • 面向对象软件设计知识点整理

    大小:511 KB面向对象

  • 电机原理及拖动

    电机原理及拖动 课后答案

    该书描述了各种电机的工作原理,以及在负载状态下的工作特性。 目录 第2版前言 第1版前言 常用符号表 绪论1 第一节电机与电力拖动的发展简况1 第二节本课程的性质、任务和 学习方法6 第三节电机理论中的基本电磁定律7 第一章直流电机原理12 第一节直流电机的用途、结构及基本 工作原理12 第二节直流电机的空载磁场16 第三节直流电机的电枢绕组18 第四节直流电机的电枢反应21 第五节直流电机的电枢电动势 与电磁转矩24 第六节直流发电机25 第七节直

    大小:28.7 KB电机原理课后答案

下载地址

相关声明:

用户留言