[Introduction] Projective geometry in camera models
Chapter1. Introduction.
A tour of Multiple View Geometry
해당 챕터는 MVG를 공부하기에 앞서서 어떤 내용들이 다루어지는지에 대한 brief sketch를 보여준다.
Projective transformation
Camera는 실제 3차원 물체를 2차원 이미지로 투영시켜서 보여준다.
이 과정은 projective transformation의 한 예라고 할 수 있다.
그런데 반듯한 직사각형 모양의 피사체도 카메라가 어디서 촬영했는지에 따라 제각각의 모양으로 투영된다.
이 projective transformation에서 변환 전 후가 동일하게 보장되는 것은 무엇일까?
모양은 확실하게 아님을 위의 예시로부터 알 수 있었다.
길이 또한 제각각 달라지는 것으로 보아 길이도 보장되지 않음을 알 수 있다.
이와 마찬가지로 각도, 거리, 길이의 비율 등등 모두 보장되지 않는다...
그렇다면 projective transformation에서 보장되는 것이 뭐가 있을까?
Straightness는 보장이 된다.
3차원에서 직선인 물체는 projective transformation을 거쳐도 직선으로 남아있음을 알 수 있다.
Projective space
우리는 euclidean space에 대해선 빠삭하다.
하지만 euclidean space는 우리가 앞으로 풀고자 하는 문제를 대입시켜서 풀기에는 적합하지 않다.
2D Euclidean space를 한 번 생각해보자.
서로 다른 두 개의 line은 항상 한 점에서 교차한다.
하지만 평행한 두 개의 선은 실제로 만나지 않는다. 그래서 이 경우에 이 두 선은 'point at infinity'에서 만난다고 한다.
하지만 이는 'Infinity does not exist' 라는 주장에 어긋난다.
이러한 euclidean space의 문제점은 우리가 앞으로 풀어야 할 문제를 대입하기에 적합하지 않게 만든다.
따라서 사람들은 euclidean space를 한 차원 확장한 projective space를 정의한다.
실제로 대부분의 많은 computer vision 문제들은 이 projective space에서 풀게 된다.
Projective space에서는 평행한 두 직선이 만나는 'ideal point'를 정의할 수 있다.
Projective space는 새로운 속성을 갖는 어려운 space가 아니라 euclidean space의 확장이기 때문에,
우리가 익숙해 하는 euclidean space의 concept들을 대부분 그대로 적용할 수 있다.
단지 projective space에서는 euclidean space에서 두 개의 직선은 한 점에서 항상 만나도록 하는 성질을 만족하게끔 확장시킨 것이라고 보면 된다.
Homogeneous Coordinates
개인적으로는 위와 같은 그림이 projective space를 가장 잘 설명한다고 생각한다.
해당 그림은 2D euclidean space와 2D projective space를 보여준다.
우리가 흔히 생각하는 2D euclidean 공간은 $z = 1$인 평면이고, 2D projective space는 그림 전체에서 나타난다.
여기서 2D euclidean 공간을 나타내기 위해서는 2개의 좌표값만 있으면 되기 때문에 기존의 cartesian coordinate로 $x_c = (2, 3)$과 같이 표현할 수 있다.
하지만 같은 점을 2D projective space에서 나타내기 위해서는 2개의 좌표값으로는 표현할 수 없다.
새로운 축인 $z$축에 대한 값도 표시를 해야하기 때문이다.
그렇다고 cartesian coordinate로 $x_c = (2,3,1)$과 같이 표현할 수는 없다.
이렇게 되면 $x_c$는 2D point가 아니라 3D point가 되어버리기 때문이다.
따라서 혼동하지 않기 위해서 우리는 projective space의 geometric objects를 표현하기 위해서 새로운 좌표계인 homogeneous coordinate system을 도입했다.
Homogeneous coordinate system은 앞으로도 굉장히 자주 쓰이기 때문에 반드시 숙지해야 한다.
지금은 간략하게 homogeneous coordinate가 왜 필요한가에 대해서만 다룬다.
Camera projection
Camera projection은 카메라의 원리에 의해 3차원 물체를 2차원 평면에 투영시키는 과정을 의미한다.
그리고 이 과정을 모델링하기 위해서 주로 사용되는 방법은 central projection이다.
Central proejction은 아래 그림을 통해 설명을 대신하겠다.
여기서 center of projection은 $O$이다.
Camera projection은 단순히 생각하면 $\mathbb{p}^3$에서 $\mathbb{p}^2$로의 mapping 연산이다.
3차원 공간의 한 점을 $\mathbb{p}^3$ 공간에서 homogeneous coordinate로 아래와 같이 표현할 수 있다.
$$X = \begin{bmatrix} X \\ Y \\ Z \\ T \end{bmatrix}$$
그리고 이 때의 center of projection을 아래와 같다고 하자.
$$O =\begin{bmatrix} 0 \\ 0 \\ 0 \\ 1 \end{bmatrix}$$
이 때, $X$의 $x,y,z$값은 고정하고 $T$ 값만 변경시켜서 얻어지는 점들의 집합은 $O$에서 $X$를 지나는 ray와 같고,
이 ray의 모든 점들은 image plane에서 하나의 점에 mapping 된다.
한 점에 대한 camera projection 연산을 homogeneous coordinate로 나타내면 아래와 같은 linear mapping으로 나타낼 수 있다.
$$\begin{bmatrix} x \\ y \\ w \end{bmatrix} = P_{3\times4}\begin{bmatrix} X \\ Y \\ Z \\ T \end{bmatrix}$$
Camera as points
Central projection에서 $\mathbb{p}^3$의 점들은 $\mathbb{p}^2$의 점들로 mapping됨을 알 수 있다.
Center of projection을 지나는 ray 위의 모든 점들은 결국 이미지에서 동일한 점으로 투영된다.
따라서 투영 관점으로 보았을 때, ray 위의 모든 점들은 결국 동일하다고 볼 수 있다.
한 단계 나아가서, 우리는 center of projection을 지나는 ray는 image point를 나타낸다고 생각할 수 있다.
그러면 결국 모든 image points들의 집합은 camera center를 지나는 모든 ray들의 집합과 같다고 생각할 수 있다.
우리가 center of projection $(0, 0, 0, 1)^T$에서 출발해서 $(X,Y,Z,T)^T$를 지나는 ray를 $(X,Y,Z)$로 정의하면,
$(0,0,0,1)^T$에서 점$(X,Y,Z,T)^T$ 의 상수배인 $(kX,kY,kZ,kT)^T$를 지나는 ray $k(X,Y,Z)$도 역시 $(X,Y,Z)$와 동일한 ray임을 알 수 있다.
따라서 이 ray를 표현하는 방식은 그 자체로 이미 homogeneous coordinate 임을 알 수 있다.
아래 그림을 한 번 보자.
위의 그림은, 3차원 점 $X_1, X_2, X_3, X_4$들이 이미지로 투영되는 과정을 보여준다. (central projection)
여기서 주목해야 할 것은, center of projection $C_1, C_2$의 위치에 따라서 사용되는 ray가 달라진다는 점이다.
투영에 사용되는 camera matrix가 달라도, center of projection이 같으면 (왼쪽 그림) 같은 ray들이 image를 구성하는데에 같은 ray들이 사용되고, 결국 동일한 이미지라고 볼 수 있다.
(우리는 앞에서 image point와 ray를 동일하게 생각하였다)
이런 equivalence를 "projectively equivalent" 라고 책에서는 표현하였다.
Projectively equivalent하면 3차원 점과 center of projection에 대한 정보를 몰라도 서로 서로에 대해서 mapping이 가능하다.