相較於前文介紹的 2D feature alignment,本文介紹的 PnP 問題是當知道 n 個點在三維空間及其投影位置時,要怎麼估計此相機的位移與旋轉。假設三維空間中的點 P 的齊次座標為 \((X, Y, Z, 1)^T\),而投影到的點為 \((u_1, v_1, 1)\),則可以寫成以下式子:
\[
s\begin{bmatrix}
u_1\\
v_1\\
1
\end{bmatrix}
=
\begin{bmatrix}
t_1 &t_2 &t_3 &t_4 \\
t_5 &t_6 &t_7 &t_8 \\
t_9 &t_{10} &t_{11} &t_{12}
\end{bmatrix}
\begin{bmatrix}
X\\
Y\\
Z\\
1
\end{bmatrix}
\]也就是說,一個對應點可以寫成兩個式子。由於矩陣 t 一共有 12 個變數,所以要解此方程式需要六組對應點才能解出來。這種方法稱為 DLT (Direct Linear Transform)。
但是從代數的觀點來看,矩陣 t 其實只包含了三維的位移與三維的旋轉,而我們也提過由位移與旋轉構成的 essential matrix 的自由度為五,因此最少只需三組對應點就能求出旋轉與位移了。此方法稱為 P3P。但實務上 P3P 有兩個問題:
- 只用了三組對應點的資訊,再多也用不上了。
- 對於噪音很敏感。
因此實務上最常用的還是用 Bundle Adjustment 的方法,也就是把 PnP 問題寫成計算投影誤差的一個最佳化問題,也就是把相機旋轉、位移、以及所有的三維點擺在一起計算再來找出最佳的解。其式子為:
\[
T^* = arg\ \underset{T}{min}\ \frac{1}{2}\sum\left \| u_i - \frac{1}{s_i}KTP_i \right \|^2_2
\]
沒有留言:
張貼留言