ピクセルを0からN-1ではなく-1から1にインデックス付けする場合、変換行列とカメラ行列はどのように変化しますか
ビュー合成のためにフレームをワープしようとしています。具体的には、frame1とframe1およびframe2のポーズが与えられた場合、frame1をframe2のポーズ/ビューにワープしようとしています。このために、私はピクセル位置を次のようにインデックス付けしています$[0,M-1]$ そして $[0,N-1]$それぞれy方向とx方向に。私のコードは完全に機能しています(穴につながる閉塞領域を除く)。
私はこのViewSynthesisペーパーを見ています。コード範囲内のインデックスピクセル代わりに、著者が発表$[-1,1]$。変換とカメラ行列を直接使用すると、無効な変換された座標が得られます。範囲内のピクセルインデックスで機能するように、変換とカメラの行列を変更する方法を説明してください$[-1,1]$?
詳細:
以下の式を使用して、Pythonでワーピングを実装しました。与えられたピクセル位置$p_1=[x,y]^T$
$$\hat{p}_1 = [x,y,1]^T$$ $$ P_1 = Z K^{-1} \hat{p}_1$$ $$ \hat{P}_1 = [P_1^T,1]^T $$ $$ \hat{P}_2 = T \hat{P}_1 $$ $$ P_2 = \hat{P}_2[0:3] $$ $$ \hat{p}_2 = K P_2 $$ $$ p_2 = \hat{p}_2[0:2] / \hat{p}_2[2] $$
$p_1$ frame1のポイントであり、 $p_2$ frame2の対応するポイントです。 $P_1$ frame1のビューでの3Dワールドポイントであり、 $P_2$ frame2のビューで同じ3Dポイントです。 $T$ frame1とframe2のビュー間の変換です。 $Z$ 真のポイントの深さです $p_1$frame1の観点から。Kはカメラ固有のマトリックスです。帽子($\hat{p})$ 射影座標に使用されます。
私は計算します $4 \times 4$ 変換行列 $T$ 次のように: $$T = \begin{bmatrix} R & t \\ 0 & 1 \\ \end{bmatrix}$$ どこ $R$ は回転行列であり、 $t$ 翻訳です。
ザ・ $3 \times 3$ カメラマトリックス $K$ によって与えられます $$K = \begin{bmatrix} \frac{W/2}{tan(hfov/2)} & 0 & W/2 \\ 0 & \frac{H/2}{tan(vfov/2)} & H/2 \\ 0 & 0 & 1 \\ \end{bmatrix}$$ どこ $H=W=240$ フレームの高さと幅です。 $hfov=60,\ vfov=45$
つまり、行列にどのような変更を加える必要がありますか $T$ & $K$?
回答
これに答える前に、まずカメラ変換行列が何をするかを見てみましょう。3Dポイントを検討してください
$$ P_1 = [X_1, Y_1, Z_1]^T $$
カメラマトリックスを事前に乗算すると、
$$ K \cdot P_1 = \begin{bmatrix} \frac{W/2}{tan(hfov/2)} & 0 & W/2 \\ 0 & \frac{H/2}{tan(vfov/2)} & H/2 \\ 0 & 0 & 1 \\ \end{bmatrix} \begin{bmatrix} X_1 \\ Y_1 \\ Z_1 \end{bmatrix} $$
$$ = \begin{bmatrix} \frac{W/2}{tan(hfov/2)} X_1 + W/2 \\ \frac{H/2}{tan(vfov/2)} Y_1 + H/2 \\ Z_1 \end{bmatrix} $$
ご覧のとおり、 $W/2$ で $K[1,1]$ はかり $x$ 値と $W/2$ で $K[1,3]$オフセットを追加します。したがって、$x \in [-1,1]$ 次に、このスケーリングとオフセットによって、次のようになります。 $x \in [0,W]$。
逆に、 $x \in [0,W]$、前に定義したカメラマトリックスを使用する必要があります。したがって、$x \in [-1,1]$、スケーリングやオフセットを追加しないでください。したがって、カメラマトリックスのみを次のように変更する必要があります。
$$K = \begin{bmatrix} \frac{1}{tan(hfov/2)} & 0 & 0 \\ 0 & \frac{1}{tan(vfov/2)} & 0 \\ 0 & 0 & 1 \\ \end{bmatrix}$$