수학

perspective transform

Small Octopus 2018. 11. 27. 15:16

perspective transform = 시점 변환 , 즉, 시점에 따른 변환이라고 볼 수 있겠다.

시점에 따라서 멀리 있는 사물은 작아보이고 가까이있는 사물은 커보이는 원리이다.

핀홀모델을 살펴보면 가장 직관적으로 이해하기 쉽다.

아래 그림에서 Q가 q의 위치에 투영되었지만 q와 Q사이 직선위에 어떤 점이라도 q에 투영된다.

이런 원리를 homogeneity라고 한다. 즉, 선형방정식을 만족시키는 해가 하나가 아니라는 것이다.

만약에 Q가 광축을 따라 원점 O로 부터 멀어지면 q의 위치는 더 아래로 내려가면서 작아지는

효과가 나타난다.

위키의 내용을 정리해 보면 아래와 같다.

https://en.wikipedia.org/wiki/3D_projection

위에서 q와 Q는 월드좌표계로 볼 수 있다. -> 카메라 기준의 좌표로 바꿔서 표현되어야한다.

그리고 이상적을로 월드좌표계와 카메라 좌표계가 일치한다. -> 불일치 할 수 있다.

이러한 점을 고려하여 3차원 좌표가 투영되는 문제를 다시 정의해 보면 

: 3차원 위치(월드좌표계)

: 카메라 위치(월드좌표계)

: 카메라 회전

: 투명면의 위치(카메라좌표계)

: 투영된 2차원좌표(카메라좌표계)

위와 같이 고려해야하는 변수가 정의되고

첫째, 를 카메라 좌표계로 바꿔야 한다.

이동하고 회전하면 좌표계를 바꿀수 있다.

의 3차원 위치(카메라좌표계)

\( \textbf{x} = \textbf{a}_{x} - \textbf{c}_{x},\ \textbf{y} = \textbf{a}_{y} - \textbf{c}_{y},\ \textbf{z} = \textbf{a}_{z} - \textbf{c}_{z} \)

\( \cos(\theta_{x}) = c_{x},\ \sin(\theta_{x}) = s_{x} \)

\( \cos(\theta_{y}) = c_{y},\ \sin(\theta_{y}) = s_{y} \)

\( \cos(\theta_{z}) = c_{z},\ \sin(\theta_{z}) = s_{z} \)

\(  \textbf{d}_{x} = c_{y}(s_{z}\textbf{y} + c_{z}\textbf{x}) - s_{y}\textbf{z} \)

\( \textbf{d}_{y} = s_{x}( c_{y}\textbf{z} + s_{y}( s_{z}\textbf{y} + c_{z}\textbf{x}) ) + c_{x}(c_{z}\textbf{y} - s_{z}\textbf{x}) \)

\( \textbf{d}_{y} = c_{x}( c_{y}\textbf{z} + s_{y}( s_{z}\textbf{y} + c_{z}\textbf{x}) ) - s_{x}(c_{z}\textbf{y} - s_{z}\textbf{x}) \)

이제 카메라 좌표계로 옮겨졌으므로 간단한 삼각형의 비례성질을 이용해서 스케일을 풀면된다.

투영평면의 원점은 다를 수 있으므로 옮겨주면 된다.

위 내용을 행렬로 표현하면 아래와 같다.

위에서는 이동변환을 나중에 했는데 우선적용하는게 행렬로 표현하기 쉽다.

homogeneous coordinates로 표현하면 아래와 같다.

\( \begin{bmatrix} \textbf{f}_{x} \\ \textbf{f}_{y} \\ \textbf{f}_{w} \end{bmatrix} = \begin{bmatrix} 1 & 0 & \frac{\textbf{e}_x}{\textbf{e}_z} \\ 0 & 1 & \frac{\textbf{e}_y}{\textbf{e}_z} \\ 0 & 0 & \frac{1}{\textbf{e}_z} \end{bmatrix} \begin{bmatrix} \textbf{d}_{x} \\ \textbf{d}_{y} \\ \textbf{d}_{z} \end{bmatrix} \)

\( \textbf{f}_{x} = \textbf{d}_x + \textbf{d}_{z} \frac{e_{x}}{e_{z}} \)

\( \textbf{f}_{w} = \frac{\textbf{d}_{z}}{e_{z}} \)

\( \textbf{b}_{x} = \frac{\textbf{f}_{x}}{\textbf{f}_{w}} \)

\( \textbf{b}_{y} = \frac{\textbf{f}_{y}}{\textbf{f}_{w}} \)



그리고 화각에 대해서 생각해보면, ,가 -1 ~ 1 사이에서 정의되는 정규화된 값을 가진다고 하면

화각과 는 직접적으로 연관이 있음을 알 수 있다. 가까우면 화각이 크고 멀면 화각이 작다.

반대로 화각이 먼저 정의되고 투영평면이 결정 되수 있다.