Come cambiano la matrice di trasformazione e la matrice della fotocamera quando si indicizzano i pixel da -1 a 1 invece che da 0 a N-1
Sto cercando di deformare i fotogrammi per la sintesi della vista. In particolare, dato un frame1 e le pose di frame1 e frame2, sto cercando di deformare frame1 in posa / vista di frame2. Per questo, sto indicizzando le posizioni dei pixel come$[0,M-1]$ e $[0,N-1]$rispettivamente per le direzioni y e x. Il mio codice funziona perfettamente (tranne le regioni occluse, che portano a buchi).
Sto guardando questo documento di sintesi della vista . Il codice rilasciato dagli autori invece indicizza i pixel nell'intervallo$[-1,1]$. L'uso diretto di matrici di trasformazione e fotocamera fornisce coordinate trasformate non valide. Puoi per favore spiegare come dovrei cambiare la trasformazione e le matrici della fotocamera in modo che funzioni per gli indici dei pixel nell'intervallo$[-1,1]$?
Maggiori dettagli :
ho implementato il warping in Python usando le equazioni seguenti. Data una posizione dei pixel$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$ è il punto in frame1 e $p_2$ è il punto corrispondente in frame2. $P_1$ è il punto del mondo 3D nella visualizzazione di frame1 e $P_2$ è lo stesso punto 3D nella vista di frame2. $T$ è la trasformazione tra le viste di frame1 e frame2. $Z$ è la vera profondità di punto $p_1$in vista di frame1. K è la matrice intrinseca della fotocamera. cappello ($\hat{p})$ viene utilizzato per le coordinate proiettive.
Calcolo il file $4 \times 4$ matrice di trasformazione $T$ come segue: $$T = \begin{bmatrix} R & t \\ 0 & 1 \\ \end{bmatrix}$$ Dove $R$ è la matrice di rotazione e $t$ è la traduzione.
Il $3 \times 3$ matrice della fotocamera $K$ è dato da $$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}$$ Dove $H=W=240$ sono l'altezza e la larghezza dei telai, $hfov=60,\ vfov=45$
In breve, quali modifiche dovrei apportare alle matrici $T$ & $K$?
Risposte
Prima di tentare di rispondere a questa domanda, vediamo prima cosa fa la matrice di trasformazione della telecamera. Considera il punto 3d
$$ P_1 = [X_1, Y_1, Z_1]^T $$
La pre-moltiplicazione per matrice della fotocamera dà
$$ 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} $$
Come possiamo vedere, $W/2$ a $K[1,1]$ bilancia $x$ valore e il $W/2$ a $K[1,3]$aggiunge un offset. Quindi, se$x \in [-1,1]$ quindi da questo ridimensionamento e compensazione, otteniamo $x \in [0,W]$.
Al contrario, quando $x \in [0,W]$, dovremmo usare la matrice della fotocamera come definita in precedenza. Quindi quando$x \in [-1,1]$, non dovremmo aggiungere il ridimensionamento o l'offset. Pertanto, solo la matrice della telecamera deve essere modificata in
$$K = \begin{bmatrix} \frac{1}{tan(hfov/2)} & 0 & 0 \\ 0 & \frac{1}{tan(vfov/2)} & 0 \\ 0 & 0 & 1 \\ \end{bmatrix}$$