ORB-SLAM2源码学习(七)——DBoW2词袋模型

 

ORB-SLAM2里使用词袋模型来做重定向与回环检测,使用的是第三方库DBoW2。

首先,有一个离线词袋ORBvoc.txt文件(ORB-SLAM2作者提供了一个他们训练好的词典),一般这个称之为词典,为了快速查询,以空间换时间建立了一个d层的K叉树来保存词典,树的叶子节点包含了每个单词及在词典里的权重。

词典的加载

//在System对象的初始化中
    mpVocabulary = new ORBVocabulary();
    if (has_suffix(strVocFile, ".txt"))
	  bVocLoad = mpVocabulary->loadFromTextFile(strVocFile);
	else if(has_suffix(strVocFile, ".bin"))
	  bVocLoad = mpVocabulary->loadFromBinaryFile(strVocFile);

计算单张图像的词包

/**
 * @brief Bag of Words Representation
 *
 * 计算词包mBowVec和mFeatVec,其中mFeatVec记录了属于第i个node(在第4层)的ni个描述子
 * @see CreateInitialMapMonocular() TrackReferenceKeyFrame() Relocalization()
 */
void Frame::ComputeBoW()
{
    if(mBowVec.empty())
    {
        vector<cv::Mat> vCurrentDesc = Converter::toDescriptorVector(mDescriptors);
        mpORBvocabulary->transform(vCurrentDesc,mBowVec,mFeatVec,4);
    }
}

词包mBowVec和mFeatVec

    //KeyFrame.h中有
    //BoW
    DBoW2::BowVector mBowVec; ///< Vector of words to 
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值