ORB-SLAM(五)KeyFrameDataBase類


關鍵幀數據庫通過預先訓練好的詞典,維護一個向量std::vector<list<KeyFrame*> > mvInvertedFile; 該向量中mvInvertedFile[i]表示包含了第i個WordId的所有關鍵幀;

我們需要知道關鍵幀對應的vBowVec向量是一個map:

std::map<WordId, WordValue> // WordId以及單詞值,WordId是唯一的,和一個特征綁定
KeyFrameDatabase::KeyFrameDatabase (const ORBVocabulary &voc):
    mpVoc(&voc)
{
    mvInvertedFile.resize(voc.size()); // number of words
}

該類的主要作用是在回環檢測和重定位中,根據詞袋模型的特征匹配度,找到閉環候選幀和重定位候選幀,兩者之間的區別在於,需要參考關鍵幀去尋找閉環候選幀,而重定位則參考普通幀。

主要步驟是:

1. 找出與當前幀pKF有公共單詞的所有關鍵幀pKFi,不包括與當前幀相連的關鍵幀;

2. 統計所有閉環候選幀中與pKF具有共同單詞最多的單詞數,只考慮共有單詞數大於0.8*maxCommonWords以及匹配得分大於給定的minScore的關鍵幀,存入lScoreAndMatch;

3. 對於第二步中篩選出來的pKFi,每一個都要抽取出自身的共視(共享地圖點最多的前10幀)關鍵幀分為一組,計算該組整體得分(與pKF比較的),記為bestAccScore;

所有組得分大於0.75*bestAccScore的,均當作閉環候選幀。

若想改變閉環檢測候選幀的參數,根據場景鑒定閉環的閾值,可以在這里修改參數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM