¿Cómo cambian la matriz de transformación y la matriz de la cámara al indexar píxeles de -1 a 1 en lugar de 0 a N-1?

Aug 20 2020

Estoy intentando deformar los fotogramas para la síntesis de vistas. Específicamente, dado un frame1 y poses de frame1 y frame2, estoy tratando de deformar el frame1 a la pose / vista del frame2. Para esto, estoy indexando ubicaciones de píxeles como$[0,M-1]$ y $[0,N-1]$para las direcciones y y x respectivamente. Mi código funciona perfectamente (excepto las regiones ocluidas, que conducen a agujeros).

Estoy viendo este artículo de View Synthesis . El código publicado por los autores en su lugar indexa píxeles en el rango$[-1,1]$. El uso directo de matrices de transformación y cámara está dando coordenadas transformadas no válidas. ¿Puede explicar cómo debería cambiar la transformación y las matrices de la cámara para que funcione para índices de píxeles en el rango$[-1,1]$?

Más detalles :
Implementé el warping en Python usando las siguientes ecuaciones. Dada una ubicación de píxel$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$ es el punto en frame1 y $p_2$ es el punto correspondiente en frame2. $P_1$ es el punto del mundo 3D en la vista de frame1 y $P_2$ es el mismo punto 3D en la vista de frame2. $T$ es la transformación entre las vistas de frame1 y frame2. $Z$ es la verdadera profundidad de punto $p_1$a la vista de frame1. K es la matriz intrínseca de la cámara. sombrero ($\hat{p})$ se utiliza para coordenadas proyectivas.

Calculo el $4 \times 4$ matriz de transformación $T$ como sigue: $$T = \begin{bmatrix} R & t \\ 0 & 1 \\ \end{bmatrix}$$ Dónde $R$ es la matriz de rotación y $t$ es la traducción.

los $3 \times 3$ matriz de cámara $K$ es dado por $$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}$$ Dónde $H=W=240$ son la altura y el ancho de los marcos, $hfov=60,\ vfov=45$

En resumen, ¿qué cambios debo hacer en las matrices? $T$ Y $K$?

Respuestas

NagabhushanSN Aug 23 2020 at 02:46

Antes de intentar responder a esto, veamos primero qué hace la matriz de transformación de la cámara. Considere el punto 3d

$$ P_1 = [X_1, Y_1, Z_1]^T $$

Pre-multiplicar por matriz de cámara da

$$ 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} $$

Como podemos ver, $W/2$ a $K[1,1]$ escamas $x$ valor y el $W/2$ a $K[1,3]$agrega un desplazamiento. Por lo tanto, si$x \in [-1,1]$ luego, por esta escala y compensación, obtenemos $x \in [0,W]$.

Por el contrario, cuando $x \in [0,W]$, debemos usar la matriz de la cámara como se definió anteriormente. Por lo tanto cuando$x \in [-1,1]$, no deberíamos agregar la escala o compensación. Por lo tanto, solo es necesario cambiar la matriz de la cámara para

$$K = \begin{bmatrix} \frac{1}{tan(hfov/2)} & 0 & 0 \\ 0 & \frac{1}{tan(vfov/2)} & 0 \\ 0 & 0 & 1 \\ \end{bmatrix}$$