컴퓨터그래픽스 - Camera Model

milkbottle·2024년 3월 31일
0

컴퓨터그래픽스

목록 보기
2/7

Camera Model

카메라는 3차원의 사물을 2차원으로 투영하는 역할을 한다. 그 원리를 파헤쳐보자.

Transformation

카메라 앞에 어떠한 물체가 존재할 때, 이를 변환하는 방법은 어떤게 있을까? 예를들어보면..

1. 10cm 내 기준 왼쪽으로 이동시키기
2. 시계방향으로 90도 회전하기
3. 확대 및 축소하기(카메라쪽으로 물체를 가져가거나 뒤로가기)
등등이 있을 것이다.

이러한 행동들을 모두 변환(Transformation)이라고 부른다.

그리고 이 변환은 계산하기 쉽도록 행렬로 표현되며 다음으로 표현한다.

ResultPosition=TransformationMatrixOriginalPositionResult Position = Transformation Matrix \ast Original Position

행렬이기에 이를 만족하면 Transformation Groups라고 부른다.


참고로 \ast는 결합법칙에 사용하는 결합과 같은 말이다.

변환을 하나의 행렬 A라고 불렀을 때,

  1. A변환과 B변환을 같이하면, A\astB를 묶은 변환과 같다. (결합법칙 성립)
  2. A변환과 그대로 가만히있는 I변환(항등)=I변환과 A변환=A변환이 같다.
  3. A변환을하고 A의 역변환을하면 그대로 가만히있는 I변환과 같다.

이해를 쉽게 도와주자면, A변환이 카메라쪽으로 1m 다가오는 변환이라고 하자.

B변환은 90도 시계방향으로 둘리는 변환이라고 하자.

그러면 1번은 카메라쪽으로 1m 가깝게 물체를 옮기고, 시계방향으로 90도 돌리는 것과,

시계방향으로 90도 돌리고 카메라쪽으로 1m 가깝게 물체를 옮기는 것과 같다는 말이다.

실제로 이 두가지의 결과는 같을 것이다.

2번은 쉬울 것이다 3번에서는 A의 역변환은 카메라쪽으로 1m 다가오는 것의 반대인, 카메라반대쪽으로 1m 뒤로빼는 것을 의미한다.

이제 Transformation의 종류들을 2차원의 기준으로 설명하겠다.

Translation

(10tx01ty001)\begin{pmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{pmatrix}로 나타낸다. 이는 x축으로 txt_x만큼, y축으로 tyt_y만큼 이동한다는 것이다.

예를 들어서 (5,2)에 물체가 존재한다고하고 (-2,4)만큼 이동한다고 하자.

그렇다면 아까 봤던 결과위치 = 변환행렬 * 원래위치로 나타내어 만족하는지 알아보자.

3x3 행렬인데 2차원이라 (x, y)좌표면 3x3 행렬과 2x1행렬은 곱하기가 안되잖아?

그래서 하나의 점위치를 (xy1)\begin{pmatrix}x\\y\\1\end{pmatrix}라고 표현한다.
1을 추가하는 이유는 추후 나올 것이다.

대입하면 (361)=(102014001)(521)\begin{pmatrix}3\\6\\1\end{pmatrix}=\begin{pmatrix} 1 & 0 & -2 \\ 0 & 1 & 4 \\ 0 & 0 &1\end{pmatrix}\ast\begin{pmatrix}5\\2\\1\end{pmatrix}이 된다.

(3, 6)으로 잘 이동한 것을 볼 수 있다!

Scale

이제는 물체가 커지는 변환을 알아보자.

물체를 이루는 모든 점들이 s배만큼 커지는 것이기 때문에 (s000s0001)\begin{pmatrix}s&0&0\\0&s&0\\0&0&1\end{pmatrix}로 표현된다.

Rotation

점이 θ\theta만큼 회전하는 변환의 식은 다음과 같다.

나는 코사사코 쁠마쁠쁠이라고 외웠다.

원리가 궁금하면 오일러 공식을 참조하라.

그런데 이 회전은 어느 점을 기준으로 회전하는지에 따라 결과가 달라질 수 있다.

빨간점을 (0,0)기준으로 회전하면 초록점으로 가고, 빨간점을 (1,0)기준으로 회전하면 파란점으로 이동한다.

그래서 Translation -> Rotate, Rotate -> Translation의 두 결과는 달라질 수 있다.

이 두개는 교환법칙을 만족하지 않는 경우도 있다는 말이다.

Euclidean (Rigid)

회전(Rotate)과 평행이동(Translation)만 한 변환을 의미한다.

이를 간단한 행렬꼴과 방정식꼴로 나타내면 다음과 같다.

가로 세로를 쪼개어 p=Rp+tp' = Rp + t로 나타낸 것이다.

Similarity (scaled Euclidean)

Euclidean Transformation에서 Scale까지 추가된 것이다.

Affine

찌그러짐을 표현하는 것이다.

Projective

정사영을 나타낸 것이다.

Imaging Geometry

카메라는 사진을 만드는데 필요한 것이 있다. 바로 축이다.

축이 있어야 좌표를 나타낼 수 있고, 이를 기하학적으로 다룰 수 있다.

이 좌표축은 coordinate라고 하는데 종류는 총 4가지이다.

  • World Coordinate
  • Camera Coordinate
  • Film Coordinate
  • Pixel Coordinate

하나하나 공부해보자.

World Coordinate

이 세상은 3차원이기 때문에 세상의 좌표계는 3차원으로(U, V, W)로 나타낸다.

이후 계산에 사용할 수 있도록 어느 특정한 지점을 (0, 0, 0)으로 둔다.

뭐 그게 그리니치 천문대일 수도있고, 내 집일 수도 있지만 말이다.

Camera Coordinate

카메라가 인식하는 좌표계로 3차원으로(X, Y, Z)로 나타낸다.

실제 세상의 좌표계 (U, V, W)를 카메라의 좌표계 (X, Y, Z)로 고정하는 것이다.

이는 카메라의 원점기준으로 회전하고, 평행이동하는 변환과 같다.(Rigid Transformation)

그리고 회전을 하고 평행이동하는 계산과 평행이동을하고 회전하는 계산의 결과가 다를 수 있다.

PC=R(PWC)PC=RPCP_C = R(P_W-C)\ne P_C=RP - C라는 말이다.

어떤 카메라는 PC=R(PWC)P_C = R(P_W-C)를 쓸 수도 있고, 다른 카메라는 PC=RPCP_C=RP - C를 쓸 수도 있다.

그런데 왜 World Coordinate는 원점이 없는데 어떻게 좌표로 나타내나?

이 세상의 카메라는 수도 없이 많다. 그래서 하나의 지점을 모두 통일해서 원점으로 표현한다.

Film Coordinate

카메라 속의 필름의 좌표계이다.

카메라가 인식한 3D 물체를 2D세상인 필름에 옮겨야하는 과정이 필요하기에, 정사영이라는 연산이 필요하다.

과거의 핀홀카메라를 생각해보자.

물체를 정확하게 한곳에 모으기 위해 핀홀을 뚫어 필름에 상을 맺히도록 한다.

피사체와 핀홀의 거리가 10이고 핀홀과 필름의 거리가 1이라면, 이미지는 피사체의 10분의 1의 크기가 될 것이다.

이런 원리로 Film Coordinate로 변환하는 것을 적용하면 된다.

P=(X,Z)는 피사체이며

P=(x,f)는 원래는 Optical axis글자의 왼쪽에 위치한 필름이지만, 그림이 길어지기에 오른쪽으로 대칭이동시킨 것이다.(아래 그림 참조)

위의 비례식이 성립한다. 이미 XX, ZZ는 알고 ff는 카메라가 조정할 수 있기에 xx값을 알 수 있다.

x=fX,y=fY,z=zx' = fX, y'=fY, z'=zx=fXZ,y=fYZx=f\frac{X}{Z}, y=f\frac{Y}{Z}에 대입하면 오른쪽의 방정식을 유도할 수 있다.

Pixel Coordinate

필름의 좌표계를 우리가 흔히아는 JPG, PNG등 에서 사용하기 위해 픽셀 좌표계로 변환한다.

이는 2차원에서 2차원으로 변환하는 것이기에 방금 배운 투영(정사영) 행렬식보다는 쉽다.

원래의 물체가 필름에 이렇게 있다고 하자.

그런데 어떠한 카메라의 픽셀은 가로로 길쭉해서 아래처럼 나올 수가 있다.

원래 물체는 세로로 길쭉했는데, 픽셀의 모양에 따라 가로로 늘어날 수가 있다는 말이다.


Ox,OyO_x,O_y는 이미지의 중심의 원점을 뜻하며, Sx,SyS_x, S_y는 픽셀의 가로, 세로 비율을 뜻한다.

이를 Affine하는 연산(여기서는 Stretch로 늘리는 역할)을 한다.


이전의 Projection과 방금 Affine을 한 변환을 합치면 위와 같은 식으로 합칠 수 있다.

MintM_{int}는 inter즉 카메라 내부에서 일어나는 변환(카메라가 이해한 좌표계->픽셀 좌표계)을 뜻한다.

정리

  • World -> Camera : Translate + Rotate(Euclidean)
  • Camera -> Film : Projection
  • Film -> Pixel : Affine

0개의 댓글