ORB-SLAM2详解(三)自动地图初始化

ORB-SLAM2的自动地图初始化详细介绍了如何通过寻找初始对应点、计算单应性矩阵H和基础矩阵F,再通过模型选择、运动恢复(SFM)来建立地图。系统在低视差和平面场景中使用单应性矩阵,高视差非平面场景则采用基础矩阵。最后,通过集束调整优化初始化结果,确保在特征丰富、足够视差的场景中进行初始化。
摘要由CSDN通过智能技术生成

ORB-SLAM2详解(三)自动地图初始化

本人邮箱:sylvester0510@163.com,欢迎交流讨论,
欢迎转载,转载请注明网址http://blog.csdn.net/u010128736/


  系统的第一步是初始化,ORB_SLAM使用的是一种自动初始化方法。这里同时计算两个模型:用于平面场景的单应性矩阵H和用于非平面场景的基础矩阵F,然后通过一个评分规则来选择合适的模型,恢复相机的旋转矩阵R和平移向量t。

一、找到初始对应点

  在当前帧 Fc 中提取ORB特征点,与参考帧Fr进行匹配。如果匹配点对数过少,就重置参考帧。这一步骤在Tracking.cc中的Tracking::MonocularInitialization函数中。

int nmatches = matcher.SearchForInitialization(mInitialFrame,mCurrentFrame,mvbPrevMatched,mvIniMatches,100);

nmatches表示匹配到的对应点对数。

二、同时计算两个模型

  在找到对应点之后,开始调用Initializer.cc中的Initializer::Initialized函数进行初始化工作。为了计算R和t,ORB_SLAM为了针对平面和非平面场景选择最合适的模型,同时开启了两个线程,分别计算单应性矩阵 Hcr 和基础矩阵 Fcr 。如下所示:

thread threadH(&Initializer::FindHomography,this,ref(vbMatchesInliersH), ref(SH), ref(H));
thread threadF(&Initializer::FindFundamental,this,ref(vbMatchesInliersF), ref(SF), ref(F));

这里的H和F分别满足下列关系:

xc=HcrxrxTcFcrxr=0
  • 20
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值