当前位置:主页 > 计算机电子书 > 编程资源 > ORB-SLAM2资源下载

ORB-SLAM2源码详解

2020-11-28 08:54:56 类别:ORB-SLAM2

  • 更新:2020-11-28 08:54:56
  • 大小:2.50 MB
  • 热度:536
  • 审核:聂海女
  • 类别:技术文章
  • 格式:PDF

扫二维码手机浏览

资源介绍

本站精选了一篇ORB-SLAM2类学习资源,由晏鸿轩测试纠错,内容涉及到ORB-SLAM2、源码详解、ORB-SLAM2的内容,已被754人关注,同类资源中评分为9.3分。

在这篇文章里我们主要开始对跟踪线程进行介绍: 在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参数加一,并插入到节

以上就是本次关于本资源的介绍和部分内容,我们还整理了以往更新的其它相关资源内容,可以在下方直接下载,关于相关的资源我们在下方做了关联展示,需要的朋友们也可以参考下。

你可能感兴趣的文章:

1、Docker源码分析 PDF电子书

2、Python生物信息学数据管理(含源码) PDF电子书

3、Python编程从入门到精通(资料源码视频) PDF电子书

4、Kafka技术内幕:图文详解Kafka源码设计与实现 PDF电子书

5、ARM Linux内核源码剖析 PDF电子书

6、Ceph源码分析 PDF电子书

7、云原生服务网格Istio:原理、实践、架构与源码解析 计算机书籍


下载地址

留言评论

欢迎发表评论:

联系我们

邮件联系:3522365@qq.com

QQ联系:3522365