Bagaimana matriks transformasi dan matriks kamera berubah saat mengindeks piksel dari -1 ke 1 alih-alih 0 ke N-1
Saya mencoba mengubah bingkai untuk sintesis tampilan. Secara khusus, mengingat frame1 dan pose frame1 dan frame2, saya mencoba untuk membelokkan frame1 ke pose / tampilan frame2. Untuk ini, saya mengindeks lokasi piksel sebagai$[0,M-1]$ dan $[0,N-1]$untuk arah y dan x masing-masing. Kode saya berfungsi dengan sempurna (kecuali wilayah yang tersumbat, yang menyebabkan lubang).
Saya melihat makalah View Synthesis ini . The kode yang dirilis oleh penulis bukan piksel indeks dalam kisaran$[-1,1]$. Secara langsung menggunakan transformasi dan matriks kamera memberikan koordinat transformasi yang tidak valid. Bisakah Anda jelaskan bagaimana saya harus mengubah transformasi dan matriks kamera agar berfungsi untuk indeks piksel dalam kisaran tersebut$[-1,1]$?
Lebih Detail :
Saya telah menerapkan warping dalam python menggunakan persamaan di bawah ini. Diberikan lokasi piksel$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$ adalah titik di frame1 dan $p_2$ adalah titik yang sesuai di frame2. $P_1$ adalah titik dunia 3D dalam tampilan frame1 dan $P_2$ adalah titik 3D yang sama dalam tampilan frame2. $T$ adalah transformasi antara tampilan frame1 dan frame2. $Z$ adalah titik kedalaman yang sebenarnya $p_1$dalam pandangan frame1. K adalah matriks intrinsik kamera. topi ($\hat{p})$ digunakan untuk koordinat proyektif.
Saya menghitung $4 \times 4$ matriks transformasi $T$ sebagai berikut: $$T = \begin{bmatrix} R & t \\ 0 & 1 \\ \end{bmatrix}$$ Dimana $R$ adalah matriks rotasi dan $t$ adalah terjemahannya.
Itu $3 \times 3$ matriks kamera $K$ diberikan oleh $$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}$$ Dimana $H=W=240$ adalah tinggi dan lebar bingkai, $hfov=60,\ vfov=45$
Singkatnya, perubahan apa yang harus saya lakukan pada matriks $T$ & $K$?
Jawaban
Sebelum mencoba menjawab ini, pertama mari kita lihat apa yang dilakukan matriks transformasi kamera. Pertimbangkan poin 3d
$$ P_1 = [X_1, Y_1, Z_1]^T $$
Perkalian awal dengan matriks kamera memberikan
$$ 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} $$
Seperti yang bisa kita lihat, $W/2$ di $K[1,1]$ timbangan $x$ nilai dan $W/2$ di $K[1,3]$menambahkan offset. Jadi, jika$x \in [-1,1]$ kemudian dengan penskalaan dan pengimbangan ini, kita dapatkan $x \in [0,W]$.
Sebaliknya, kapan $x \in [0,W]$, kita harus menggunakan matriks kamera seperti yang didefinisikan sebelumnya. Karena itu kapan$x \in [-1,1]$, kita tidak boleh menambahkan penskalaan atau offset. Jadi, hanya matriks kamera yang perlu diubah menjadi
$$K = \begin{bmatrix} \frac{1}{tan(hfov/2)} & 0 & 0 \\ 0 & \frac{1}{tan(vfov/2)} & 0 \\ 0 & 0 & 1 \\ \end{bmatrix}$$