中分析了單應矩陣(Homography)的推導過程,本文看下在實際過程中如何實際計算.
DLT(Direct Linear Transform)算法
DLT是一個 用於解決包含尺度問題的最小二乘問題的算法。假設兩幅圖像中的兩個對應特徵點(x,y,1)以及(u,v,1),用單應變換計算兩者之間的關係。
H是個3×3的矩陣,有8個自由度,所以待求未知參數有8個。
DLT算法推導過程如下:把公式(1)展開:
上式可以整理為:
Ah = 0
其中:
由未知變量的個數可知,求解出H至少需要4對匹配點。通常情況下為了得到更穩定的結果,會用到多於4對的特徵匹配。所以,這個方程會變成超定的,可以將最小二乘解作為最後的解。對A進行SVD分解就可以得到單應矩陣。
ORB-SLAM2中的實現
- p1點 變成p2點 p2 = H21 * p1
- u2 h1 h2 h3 u1
- v2 = h4 h5 h6 * v1
- 1 h7 h8 h9 1
- 或是使用叉乘得到0.
- x = H y , 向量 x和Hy 進行叉乘為0,即:
- | 0 -1 v2| |h1 h2 h3| |u1| |0|
- | 1 0 -u2| * |h4 h5 h6| * |v1| = |0|
- |-v2 u2 0| |h7 h8 h9| |1 | |0|
- u2 = (h1*u1 + h2*v1 + h3) /( h7*u1 + h8*v1 + h9)
- v2 = (h4*u1 + h5*v1 + h6) /( h7*u1 + h8*v1 + h9)
- -(h4*u1 + h5*v1 + h6) + ( h7*u1*v2 + h8*v1*v2 + h9*v2)=0 式子為0 左側加 - 號不變
- -(h1*u1 + h2*v1 + h3) + ( h7*u1*u2 + h8*v1*u2 + h9*u2)=0
- 0 0 0 -u1 -v1 -1 u1*v2 v1*v2 v2
- u1 v1 1 0 0 0 -u1*u2 - v1*u2 -u2 ×(h1 h2 h3 h4 h5 h6 h7 h8 h9)轉置 = 0
- 8對點 約束 A
- A × h = 0 求h 奇異值分解 A 得到 單元矩陣 H
閱讀更多 半杯茶的小酒杯 的文章