Homography 矩陣通常用來描述在三維空間中共同平面上的點在兩張圖片之間的變換關係。假設圖片為 \(I_1\) 及 \(I_2\),對應的特徵點為 \(p_1\) 及 \(p_2\),而此特徵點落在三維空間中的平面 \(P\) 上,並假設此平面的方程式為:\[n^T P + d = 0, -\frac{n^T P}{d} = 1\]把此式帶回至 pinhole 相機模型的式子:\[p_2 \simeq K(RP+t), p_1 \simeq KP\]整理過後可以得到:\[p_2 \simeq K(R - \frac{tn^T}{d})K^{-1}p_1\]將中間的部分寫成 \(H\) 就得到以下式子:\[p_2 \simeq Hp_1\] 這也就是 homography 矩陣與兩張圖片上對應的特徵點的關係式。
將上式展開後可得到以下式子: \[ \begin{bmatrix} u_2\\ v_2\\ 1 \end{bmatrix} \simeq \begin{bmatrix} h_1 & h_2 & h_3 \\ h_4 & h_5 & h_6\\ h_7 & h_8 & h_9 \end{bmatrix} \begin{bmatrix} u_1\\ v_1\\ 1 \end{bmatrix} \] 在這邊用的是 \(\simeq\) 代表可以乘上一個常數,而不是等號的概念。而在實際上運算時我們通常令 \(h_9 = 1\),並得到以下兩個式子: \[ u_2 = \frac{h_1 u_1 + h_2 v_1 + h_3}{h_7 u_1 + h_8 v_1 + 1} \\ v_2 = \frac{h_4 u_1 + h_5 v_1 + h_6}{h_7 u_1 + h_8 v_1 + 1} \] 再整理過後得到以下式子: \[ u_2(h_7 u_1 + h_8 v_1 + 1) = (h_1 u_1 + h_2 v_1 + h_3) \\ v_2(h_7 u_1 + h_8 v_1 + 1) = (h_4 u_1 + h_5 v_1 + h_6) \\ u_2 = h_1 u_1 + h_2 v_1 + h_3 - h_7 u_1 u_2 - h_8 v_1 u_2 \\ v_2 = h_4 u_1 + h_5 v_1 + h_6 - h_7 u_1 v_2 - h_8 v_1 v_2 \] 因此每一組對應特徵點都可以貢獻兩個式子: \[ \begin{bmatrix} u_1 & v_1 & 1 & 0 & 0 & 0 & -u_1u_2 & -v_1u_2\\ 0 & 0 & 0 & u_1 & v_1 & 1 & -u_1v_2 & -v_1v_2 \end{bmatrix} \begin{bmatrix} h_1\\ h_2\\ h_3\\ h_4\\ h_5\\ h_6\\ h_7\\ h_8 \end{bmatrix} = \begin{bmatrix} u_2\\ v_2 \end{bmatrix} \] 要解出這組方程式至少要有四組對應的特徵點,而這個演算法又稱為 Direct Linear Transform (DLT)。
在用 DLT 求出 homography 矩陣後,下一步便是由此 homography 矩陣算出對應的旋轉矩陣 R 及平移向量 t,但此過程較複雜我們就先不介紹了。在實務上當特徵點共面或是相機只有旋轉時,fundamental 矩陣的自由度會下降形成 degenerate 的情形,此時 noise 將會支配 fundamental 多餘出來的自由度,因此我們通常會同時估計 fundamental 矩陣及 homography 矩陣,選擇 reprojection error 比較小的當作最後的結果。
參考資料
[1] 視覺 SLAM 十四講 7.3.3
沒有留言:
張貼留言