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

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

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

首先複習一下對極約束blog

F矩陣適用於3D點不共面的狀況,咱們以左側相機爲參考系,約定基礎

相機內參K,並行

空間點座標P = [X, Y, Z]T; 齊次座標爲[X, Y, Z, 1]T方法

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

圖像平面座標爲pi = [u, v],i=1, 2; 齊次座標爲[u, v, 1]地圖

能夠推出pi = Kximargin

對極約束就是知足:img

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十四講

相關文章
相關標籤/搜索