0에서 N-1이 아닌 -1에서 1로 픽셀을 인덱싱 할 때 변환 행렬과 카메라 행렬이 어떻게 변경됩니까?

Aug 20 2020

뷰 합성을 위해 프레임을 왜곡하려고합니다. 특히 frame1과 frame1과 frame2의 포즈가 주어지면 frame1을 frame2의 포즈 / 뷰로 왜곡하려고합니다. 이를 위해 픽셀 위치를 다음과 같이 인덱싱합니다.$[0,M-1]$$[0,N-1]$y 및 x 방향에 대해 각각. 내 코드가 완벽하게 작동합니다 (구멍으로 이어지는 폐색 영역 제외).

저는 이 View Synthesis 논문을보고 있습니다. 코드 범위 인덱스 픽셀 대신 저자에 의해 발표$[-1,1]$. 변환 및 카메라 매트릭스를 직접 사용하면 잘못된 변환 좌표가 제공됩니다. 범위의 픽셀 인덱스에서 작동하도록 변환 및 카메라 매트릭스를 변경하는 방법을 설명해 주시겠습니까?$[-1,1]$?

자세한 내용 :
아래 방정식을 사용하여 파이썬에서 워핑을 구현했습니다. 주어진 픽셀 위치$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$?

답변

NagabhushanSN Aug 23 2020 at 02:46

이에 답하기 전에 먼저 카메라 변환 행렬이 무엇을하는지 살펴 보겠습니다. 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}$$