ORB-SLAM (四)Initializer單目初始化


一. 通過對極約束並行計算F和H矩陣初始化

  VO初始化目的是為了獲得准確的幀間相對位姿,並通過三角化恢復出初始地圖點。初始化方法要求適用於不同的場景(特別是平面場景),並且不要進行人為的干涉,例如選取視差大(large parallax)的場景(視差大代表相機移動會帶來明顯的圖像變化,通常距離相機距離越遠,距離相機光軸越近,視差越小)。ORB-SLAM中並行計算了適用於平面場景的單應性矩陣H和一般場景下的基礎矩陣F,然后通過打分選取合適的。ORB-SLAM的初始化要求是比較高的,只有在確定初始化安全的情況下,才會去初始化。

首先復習一下對極約束

F矩陣適用於3D點不共面的情況,我們以左側相機為參考系,約定

相機內參K,

空間點坐標P = [X, Y, Z]T; 齊次坐標為[X, Y, Z, 1]T

在Z=1歸一化平面上的坐標為xi = [X/Z, Y/Z, 1]T,i=1, 2

圖像平面坐標為pi = [u, v],i=1, 2; 齊次坐標為[u, v, 1]

可以推出pi = Kxi

對極約束就是滿足:

p2K-T t^R K-1 p1=0

x2t^R x1 = 0

其中 E = t^R 稱為本質矩陣(Essential Matrix),F = K-T t^R K-1基礎矩陣(Fundamental Matrix),根據匹配點的坐標p1, p2可以計算出F矩陣和E矩陣,E矩陣可以通過8點法求解線性方程組得到,然后通過對E矩陣奇異值分解E = UΣVT,注意其中奇異值應該是[σ, σ, 0]的形式,表示圖像僅在2維空間中經過了縮放。如果發現獲得奇異值不滿足,需要將矩陣投影到E所滿足的流形上。最后通過U, Σ, V計算出t和R

H矩陣適用於3D點共面的情況

設P點所在平面滿足 nTP+d=0

將其結合對極約束p2 = K(RP+t)

可以得到H矩陣與匹配點坐標p1,p2之間的關系,同樣可以通過求解線性方程然后分解矩陣的方法來獲取t和R

二. 步驟

1. 在金字塔0層上提取特征點,匹配前后兩幀,得到像素坐標下的匹配點。

2. 並行計算H矩陣和F矩陣,其中H矩陣使用歸一化的DLT(直接線性變換)方法,F矩陣使用8-點法,具體可以參考[1], H矩陣使用8個點,F矩陣使用4個點,迭代次數設定為相同,打分機制也設定平衡。

3. 如果場景接近平面,或者視差較小,可以使用單應性矩陣來解釋。通過打分機制選擇模型。

4. 利用選擇的模型,恢復運動和地圖點。分解H矩陣可以恢復出8種姿態,SVD分解E矩陣也可以恢復出4種姿態,通過深度值以及場景的先驗信息,一般可以得到唯一滿足要求的。但是小視角情況下會出現判斷錯誤的情況出現,因此ORB-SLAM中選擇使用這些備選姿態直接三角化出地圖點,再通過視角,深度以及重投影誤差來判定是否有唯一解,若沒有,則放棄,重新回到第一步去初始化。

5. 若初始化成功,則進行GlobalBundleAdjustment

相比於PTAM和LSD-SLAM,ORB在NewCollege的室外平面場景中初始化魯棒性是比較出色的。

[1] 高翔,視覺SLAM十四講


免責聲明!

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



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