算法原理解析
Tracking線程中首先加載圖片幀數據集,接着從圖片幀中提取ORB特徵點,後邊就是初始化部分,初始化完成後就是跟蹤部分。本篇筆記對初始化部分和初始化完成後的部分進行如下簡單梳理。
一、初始化部分:
1.首次進入初始化
對於當前幀中關鍵點數>100的幀,用該幀來構造初始化幀和上一個幀;
並記錄當前幀中關鍵點的座標值,用於下一幀進來的時候進行特徵點匹配;
使用當前幀構造初始化器;
2.第二次進入初始化
如果當前傳入的幀的關鍵點數<=100的幀,刪除初始化器,直接返回;
對當前傳入的幀和初始化幀之間進行特徵點匹配,調用matcher.SearchForInitialization函數;
這裏如果匹配的特徵點個數<100,則釋放初始化器並直接返回;
使用初始化器進行初始化(調用Tracking.cc:MonocularInitialization–>mpInitializer->Initialize函數):
1)這裏是2d-2d根據對極幾何求解基礎矩陣和單應矩陣;
2)進而從基礎矩陣或者單應矩陣中分解出旋轉矩陣和平移變量,並進行三角化計算出了特徵點的3D世界座標;
對於Initialize函數初始化完成後不能三角化的匹配特徵點都進行刪除;
爲當前幀設置位姿(也就是上邊Initialize中求出的旋轉矩陣和平移變量組成的變換矩陣);
初始化Map相關操作
在CreateInitialMapMonocu