3D Geometry (3): Camera Models
Introduction
이번 글에서는 카메라 모델에 대한 내용을 정리하겠습니다.
우선 카메라가 뭔지 살펴보겠습니다.
카메라는 3D 공간에 속한 객체를 2D 이미지로 매핑해주는 도구입니다.
Pinhole Camera
카메라의 작동 원리를 수학적으로 모델링할 때 주로 Pinhole Camera를 사용합니다.
Pinhole이란 한국말로 바늘구멍입니다.
물체에 반사된 빛이 핀홀을 통과해 들어오면, 상은 Image Plane에 맺힙니다. 카메라는 저 부분에 센서가 있습니다. 그래서 센서가 들어오는 빛을 인식하게 됩니다.
그림에서도 볼 수 있듯이 Pinhole 카메라의 특징은 상이 거꾸로 맺힌다는 점입니다.
상이 상하좌우 반전돼서 맺히는 게 싫기 때문에, 우리는 위 그림을 아래 그림처럼 확장해서 생각해 볼 수 있습니다.
Pinhole을 중심으로 Image Plane에 반대 부분에 Virtual Image Plane을 만들 수 있습니다. Virtual Image Plane은 상이 우리가 원하는 대로 맺힙니다.
이때 몇 가지 용어에 대해 정리하겠습니다.
- Image Plane: 상이 맺히는 부분
- Focal Point: Pinhole의 위치
- Focal Length: Image Plane과 Focal Point 사이의 거리
- Virtual Image Plane: 상이 뒤집히지 않으면서 이미지 Plane과 동일한 이미지가 있는 가상의 Plane
Basic Pinhol Model
이번엔 Pinhole 카메라가 3차원 공간 안에 놓여 있다고 생각해보겠습니다.
이때 Pinhole의 위치를 (0, 0, 0) 지점이라고 생각하겠습니다.
이렇게 정의 된 공간에서 한 지점 P가 있다고 가정합시다.
P = (X, Y, Z)^T
이 지점을 Virtual Image Plane으로 매핑할 수 있습니다.
삼각형의 닮은 성질에 매핑을 수행할 수 있습니다.
계산하면 아래와 같습니다.
(fX/Z, fY/Z, f)^T
추가적으로 Image Plane에서 Pinhole으로 향하는 수선을 Principal Axis 또는 Principal Ray라고 합니다.
Central Projection using Homogeneous Coordinates
지금까지 공부한 내용을 정리하면, 3차원 공간의 한 점을 Virtual Image Plane에 매핑할 수 있다는 것입니다.
이걸 수식으로 표현하면 아래와 같습니다.
3차원 공간 상의 점은 (X, Y, Z, 1)^T이고, (1을 추가한 이유는, homogeneous coordinate으로 표현하기 위해서)
매핑된 점은 (fX, fY, Z)^T입니다.
즉 3 x 4 크기의 행렬 H를 3차원 좌표에 곱하면 Virtual Image Plane에 속한 점을 구할 수 있다는 것입니다!
Principal Point Offset
근데 문제가 있습니다.
지금까지 우리가 공부한 내용은, Pinhole의 위치가 3차원 공간의 중앙에 위치했을 때를 가정했습니다.
근데, 실제로 이미지의 좌표계는 좌측 상단에서 시작합니다.
그래서 이에 대한 보정이 필요합니다. 어떻게 하냐고요? 아래와 같습니다.
(fX/Z+px, fY/Z+py)^T
요기서 (px, py)^T는 principal point라고 부릅니다. (이렇게 부르는 이유는 principal axis와 이미지가 만나는 지점이어서 그렇습니다.)
Get Heejun Park’s stories in your inbox
Join Medium for free to get updates from this writer.
이걸 수식으로 표현하면 아래와 같습니다.
근데 흔히 저 3 x 3 크기의 행렬을 Camera Calibration 행렬이라고 부릅니다.
K를 써서 위 수식을 다시 정리하면 아래와 같습니다.
참고로 Xcam이라고 하는 것은 Camera 좌표계에서의 3차원 좌표계이므로 Xcamera를 줄여서 Xcam이라고 부르는 것입니다.
Camera Rotation and Translation
3D 기하학에서는 크게 3개의 좌표계가 존재합니다.
- 2D Image상의 좌표계
- 3D 카메라 좌표계
- 3D World 좌표계
우리는 지금까지 ‘2D Image상의 좌표계’와 ‘3D 카메라 좌표계’ 사이의 관계에 대해 공부했습니다.
이번 섹션에서는 ‘3D 카메라 좌표계’와 ‘3D World 좌표계’ 사이의 관계에 대해 공부할 것입니다.
이걸 공부하는 이유가 뭐냐? 카메라는 World의 중심에 위치하지 않기 때문입니다. 그래서 Camera 좌표게를 World 좌표계에 Align하는 것이 필요합니다.
이 두 개의 좌표계 사이의 관계는 rotation과 translation으로 정의할 수 있습니다.
먼저 둘 사이의 Translation 차이가 C라면 C를 빼줍니다.
그리고 둘 사이의 rotation 차이가 R이라면 R만큼 곱해주면 됩니다.
방금 얘기한 걸 수식으로 정의하면 아래와 같습니다.
Xcam = R(X — C)
= RX –RC
이걸 좀 더 풀어 작성하면 아래와 같습니다.
(위 식에서 Xcam은 Camera 좌표게의 3차원 좌표값을 의미하며, X는 World 좌표계에서의 3차원 좌표값을 의미합니다. 헷갈리지 마세요!)
그리고 Xcam에 K를 곱하면 어떻게 되죠?
Image 좌표게에서의 2D 좌표를 구할 수 있겠죠?!
그게 바로 이거입니다.
이제 World 좌표게에서 Image 좌표계로 바로 이동이 가능해졌습니다!
정리하자면, focal length, px, py 값들은 Camera 고유의 값들이므로 Intrinsic Paramter라고 말합니다. 주로 K라고 표현합니다.
그리고, Rotation과 Translation은 외부적인 요소들이므로 Extrinsic Parameter라고 부릅니다. 이때 Rotation은 R, Translation은 C라고 표현 합니다.
Non-square pixels
지금까지 우리가 공부한 Intrinsic Parameter들의 단위는 픽셀이었습니다.
즉, focal length, px, py은 픽셀의 길이가 단위입니다.
근데 만약 픽셀이 정사각형이 아니라면?
그러면 Intrinsic Parameter를 아래와 같이 정의하면 됩니다.
Non-perpendicular Axes
가끔, 이미지 센서들의 배열이 아래 보이는 그림과 같이 똑바르지 않을 수 있습니다. (거의 이런 일은 없다고 합니다.)
이것에 대한 보정을 하기 위해 skew를 사용합니다.
s = skew









