最近在整理關於tracking中單目初始化的過程感覺沒有之前自己想象的那麼簡單 所以在次記錄一下
tracking中初始化分為單目和雙目 但因為雙目中有深度資訊所以他的初始化較為簡單,而單目相機因為無法自己獲得深度資訊所以需要一系列的過程來獲得深度資訊以恢復位姿r,t
1.選取可以作為起始兩幀的初始幀,選取如下
(1)先要構建單目初始器 若第一幀所觀測到的特徵點的個數>100則構建單目初始器
(2)若第二幀所觀察到的特徵點數》100則開始初始化過程否則返回(1)重新構建單目初始器
(3)在滿足了(1)(2)之後要將第一幀和第二幀找到的特徵點進行匹配如果匹配點數<100則需要回到(1)重新開始
2.計算兩幀之間的位姿
通過h或f模型來進行單目的初始化,得到兩幀之間的相對運動r,t 初始地圖點初始化第一幀作為世界座標
(1)通過兩個執行緒並行的計算f和h矩陣並選擇其中的乙個模型恢復出兩幀之間的相對位姿以及點雲(f用於非平面,h用於平面)
(2)根據rh的的得分rh>0.45選擇單應矩陣否則選擇基礎矩陣從h或f中恢復出位姿r,t
(3)將初始化成功的第一幀作為世界座標系,第一幀變換矩陣為單位陣,由rcw和tcw構造出tcw,tcw為世界座標系到該幀的變換矩陣即第一幀到第二幀的相對位姿
3.三角化獲得點雲深度,得到地圖點
(1)姿通過三角化獲得匹配點對的點雲深度,獲得3d點(刪除不能三角化的匹配特徵點對同時遍歷匹配的特徵點對得到3d點)用獲得的3d點構造地圖
(2)將初始化成功的第一幀和第二幀即初始關鍵幀和當前關鍵幀的描述子轉換為bow,並將關鍵幀(第一二幀)插入地圖中
4.更新關鍵幀之間的連線關係在3d點和關鍵幀之間建立邊,然後ba優化
每個邊都有乙個權重,邊的權重是該關鍵幀與當前幀共視的3d點的個數
5.將地圖點的中值深度歸一化為1並歸一化兩幀之間的變換
6.將初始化關鍵幀和當前關鍵幀插入到區域性地圖和區域性關鍵幀中同時將關鍵幀設為參考幀
以上初始化完成
同時也整理了幾個對於單目初始化有幫助理解的部落格 在此也感謝博主們!
orb 初始化 如何計算H矩陣?
h矩陣的原理是什麼?為什麼利用這4個點就可以求解h矩陣?因為一對點提供兩個方程,h矩陣是8自由度。求解方程是怎麼得到的?這個講的比較透。slam14講還是更加容易記住。入手點是這個點可以被兩個相機看到,所以可以由針孔模型得到畫素座標。再替換掉裡面的世界系座標即可。共面資訊提供了乙個約束。如何理解sl...
類初始化和例項初始化過程
類初始化過程 乙個類要建立例項需要先載入並初始化該類 main方法所在的類需要先載入和初始化 乙個子類要初始化需要先初始化父類 乙個類初始化就是執行 方法 由靜態類變數賦值 和靜態 塊組成 靜態類變數賦值 和靜態 塊從上往下執行 方法只執行一次 例項初始化過程 例項初始化就是執行 方法 方法可能過載...
記憶體初始化過程
1,物理記憶體資訊的獲取 0x15中斷,功能號 e820h,e801h,e88h 見檔案 linux arch i386 boot setup.s 執行完上面的 後,記憶體資訊被分為多條資訊放在e820map位置處,每個資訊條目長20位元組,包含乙個記憶體區間的資訊,條目數放在e820nr處。即實際...