2021年9月9日 星期四

PnP 與 Bundle Adjustment 簡介

相較於前文介紹的 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 \]

沒有留言:

張貼留言