ORBSLAM源码理论分析2—单目初始化

本文详细解析ORBSLAM系统中的单目初始化过程,涵盖构造初始化帧、特征匹配、解算位姿、创建初始化地图等关键步骤。通过RANSAC算法计算单应矩阵和基础矩阵,评估场景模型,并在满足条件时成功三角化3D点,最终建立初始地图与关键帧的连接关系。
摘要由CSDN通过智能技术生成

1.构造初始化帧1

1.通过特征点提取得到关键点和描述子(mDescriptors),此部分参考文章《ORBSLAM源码理论分析1—特征点提取》,然后对关键点进行矫正,得到矫正的关键点(mvKeysUn)。帧1的关键点记为mvKeys1

2.构造地图点(mvpMapPoints)。地图点mvpMapPoints.size与关键点mvKeys1.size相同,此时地图点指针为NULL,即地图点为空。

3.计算图片畸变矫正之后的边界mnMinX、mnMaxX、mnMinY、mnMaxY。计算每个小网格的宽高的倒数mfGridElementWidthInv、mfGridElementWidthInv。这里的小网格是人为将图片划分的,一共有48 × \times × 64个,将用于特征匹配。得到相机的内参。
  第3步只在初始化构造帧1时执行,构造后续帧时不再有此步骤。

4.得到帧1的唯一身份识别mnId

5.得到图像金字塔的相关参数,mnScaleLevels、mfScaleFactor、mvScaleFactors、mvLevelSigma2、mvInvLevelSigma2。

6.给48 × \times × 64个小网格mGrid[i][j]分配特征点。特征点的像素坐标在哪个网格中,则特征点属于哪个网格。

7.构造外点(mvbOutlier),外点mvbOutlier.size与关键点mvKeys1.size相同,此时外点都为false。即此时认为所有关键点都为内点。

2.第一次初始化

  如果帧1的关键点mvKeys1.size < 100则输入新图片,重新构造初始化帧1。如果帧1的关键点mvKeys1.size > 100则继续往下执行。

1.将帧1构造为mInitialFramemLastFrame,即帧1 = mInitialFrame = mLastFrame

2.帧1预备参与特征匹配的点为所有特征点,所以mvbPrevMatched.size与帧1的关键点mvKeys1.size完全相同,并且存储的内容为帧1关键点mvKeys1的像素坐标(pt)
3.通过当前帧构造初始化器mpInitializer。设置一些参数,将服务于计算基础矩阵和单应矩阵。

3.构造初始化帧2

  与构造初始化帧1相似,除了步骤3外,其它步骤都执行。帧2的关键点记为mvKeys2,帧2就是mCurrentFrame。另外,为了陈述方便,在下文中帧1可记为F1, 帧2可记为F2

4.F1与F2特征匹配

  如果F2的关键点mvKeys2.size ⩽ \leqslant 100则,输入新图片,重新构造初始化F1。如果F2的关键点mvKeys2.size > 100则,继续往下执行。
  F1与F2开始特征匹配,遍历F1的关键点mvKeys1,在F2中寻找图像金字塔第0层的匹配点。以F1金字塔第0层中的一个特征点kp1为例讲解具体匹配过程。
  我们拿到了特征点kp1,根据kp1的像素坐标,比如kp1像素坐标为(20,30),找到F2中对应位置的像素点(20,30),如下图所示,红色的像素点即为此点。
      在这里插入图片描述
         帧2搜索区域示意
         
  程序中的windowSize为100,表示以红色的像素点为中心,边长为2 × \times × 100的虚线框区域。为什么有个比虚线框大的红色实线框呢?下面解释一下。
  因为我们搜寻kp1在F2中的候选匹配点时,最小搜寻单位是一个小网格,所以虽然根据windowSize实际计算出来的搜寻区域是虚线框,我们也要扩大搜寻区域,使搜寻区域包含整数个小网格。这个扩大的搜寻区域就是红色实线框。请记住虽然搜寻区域为红色实线框,但我们选取的候选匹配点都在虚线框内,超过虚线框的特征点将被直接丢弃。另外,候选匹配点有很多,匹配点有可能会在这里面诞生。
  在kp1的候选匹配点中,选取描述子与kp1描述子距离最小和次小的两个点,距离分别记为bestDistbestDist2,距离最小的那个点可能是kp1在F2中的匹配点。
  对F1图像金字塔第0层中所有特征点进行如是操作,找出F2图像金字塔第0层中的可能匹配点。那么这些可能的匹配点中,哪些是匹配点,哪些是误匹配呢?下面给出判断的条件。
  (1)最小距离bestDist < thth为一个阈值,即最小距离小于阈值。
  (2)bestDist < 0.9 × \times × bestDist2,即最小距离明显小于次小距离。
  (3)大多数可能的匹配点对的方向角差值在同一个范围内。
  满足上述三个条件的可能的匹配点对就是F1与F2的匹配点对,匹配成功的数量记为nmatches。这些匹配点对的索引存储在容器mvIniMatches中,mvIniMatches.size与F1的mvKeys1.size相同,F1与F2匹配上的点对表示为,
        mvIniMatches[i1]=i2;
i1是F1中特征点在mvKeys1中的索引,i2是F2中特征点在mvKeys2中的索引。mvIniMatches[i1]的值还可以表示为

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值