본문 바로가기

3D Vision 공부

[CSCI 5563] 1. 3D Point Projection

좌표계에 대한 설명은 다크 프로그래머님의 블로그를 참고하여 작성했습니다.
https://darkpgmr.tistory.com/77
 

[영상 Geometry #1] 좌표계

이번 글은 컴퓨터 비전에서 가장 어렵고 골치아픈 주제중 하나인 영상 geometry(기하학?)에 대한 것입니다. 영상 Geometry는 카메라 캘리브레이션, 스테레오 매칭, structure from motion, 모션 추정, local fe

darkpgmr.tistory.com


3D Computer Vision 관련 자료는 Minnesota 대학교 박현수 교수님의 CSCI 5563
자료를 사용하였습니다.
https://www-users.cse.umn.edu/~hspark/csci5563_S2021/csci5563.html
 

https://www-users.cse.umn.edu/~hspark/csci5563_S2021/csci5563.html

Slide Lecture Readings Introduction Camera Model Ch 6 Projection Matrix Ch 6 Projective Lines Ch 8 Criminisi et al., Single View Metrology, IJCV, 2000 Camera Localization via Vanishing Points Ch 8 Image Transformation Ch 2 Linear Estimation Appendix 4, 5 S

www-users.cse.umn.edu

 

앞으로 3D Computer Vision에 관련된 내용을 차근차근 공부하며 정리해 갈 예정입니다. 

내용의 메인은 Minnesota 대학교의 박현수 교수님 강의 자료를 바탕으로 정리할 예정이며 부족하다 생각되는 부분은 추가로 여기저기서 참고하여 추가 할 예정입니다.

저의 개인적인 공부를 목적으로 정리한 글이므로 잘못된 내용이 있을 수 있습니다.

 

3D Computer Vision(Geometry)을 공부하기에 앞서 가장 기본이 되는 좌표계에 대해 설명하도록 하겠습니다.

1. Coordinate System (좌표계)

좌표계

카메라를 통해 사진을 찍게 되면 3차원의 물체가 2차원의 영상에 투영되게 되는데 3D Vision 에서 투영되는 과정은 매우 중요합니다. 따라서 투영되는 과정에 대해서 설명을 해야 하는데 투영되는 과정에 대해서 이해를 하기 위해서는 우선 좌표계에 대해서 이해해야 할 필요가 있습니다.

 

영상 Geometry에서는 크게 4개의 좌표계가 존재하는데 월드 좌표계(World Coordinate System), 카메라 좌표계(Camera Coordinate System), 픽셀 좌표계(Pixel Coordinate System), 정규 좌표계(Normalized  Image Coordinate System) 가 있습니다. 각각의 좌표계에 대해서 간단하게 설명하도록 하겠습니다.

 

1-1. World Coordinate System (월드 좌표계)

월드 좌표계는 사물의 위치를 표현하기 위해 임의로 기준을 잡은 좌표계를 의미합니다. 방의 구석이나, 물체의 현재 위치 등 임의로 기준을 잡아서 사용하게 됩니다. 좌표의 단위 또한 임의로 설정 할 수 있습니다. 다만 월드 좌표계의 단위와 카메라 좌표계의 단위는 동일해야 합니다.

(월드 좌표계는 대문자 X, Y, Z로 표기하였습니다.)

 

1-2. Camera Coordinate System (카메라 좌표계)

카메라 좌표계

카메라 좌표계란 카메라 렌즈의 중심을 기준(0, 0, 0)으로한 좌표계를 말하며 카메라의 정면방향을 Z축, 카메라의 아래방향을 Y축, 오른쪽 방향을 X축으로 설정하여 사용합니다.

(카메라 좌표계를 표현하기 위해 대문자에 아래첨자에 C를 붙여서 $ X_{c}, Y_{c}, Z_{c} $로 표기하였습니다.)

 

1-3. Pixel Coordinate System (픽셀 좌표계)

픽셀 좌표계

픽셀 좌표계란 카메라의 촬영을 통해 얻은 영상에 대한 좌표계 를 말합니다. 영상에서 원점 (0, 0)은 좌측 상단 모서리 되며 영상의 가로는 x축, 영상의 세로는 y축을 의미합니다. 영상을 촬영하게되면 3D 공간에서의 한점 (X, Y, Z)는 영상에서의 2D 점 (x, y)로 투영되게 됩니다. 3차원에서 2차원으로 투영되면서 깊이 정보(Depth)를 잃어버리게 됩니다. 깊이 정보를 잃어버렸기 때문에 추가적인 정보가 있지 않는 한 다시 3차원의 좌표로 복원하는 것은 불가능 하게 됩니다.

(픽셀 좌표계는 소문자 x, y로 표기하였습니다.)

 

1-4. Normalized Image Coordinate System (정규 이미지 좌표계)

정규 이미지 좌표계란 픽셀 좌표계에서 카메라의 내부 파라미터(Intrinsic Parameter)의 영향을 제거한 좌표계를 말합니다. 물체를 촬영시 촬영한 카메라의 초점 거리(Focal Length), 주점(Principle Point) 등 카메라의 고유한 파라미터 행렬에 의해 물체의 3차원 좌표가 2차원 픽셀 좌표계로 투영되게 되는데 (투영의 관한 자세한 내용은 다음장에서 설명하도록 하겠습니다.) 이러한 고유 값들은 일관된 기하학적 해석을 하는데 있어 문제를 발생시키게 됩니다. 따라서 카메라의 고유 값들을 제거해 정규화된 이미지 평면을 만들어 줌으로써 공통된 기하학적 특성을 갖는 환경을 만든 좌표계를 정규 이미지 좌표계 라고 합니다. 정규 이미지 좌표계는 기존의 픽셀 좌표계에서 초점거리를 1인 지점으로 옮겨놓은 이미지 평면을 말하고 정규 이미지 좌표계에서 원점은 정규이미지 평면의 중점과 광학축 $Z_{c}$의 교점 입니다.

(정규 이미지 좌표계는 소문자 u, v로 표기하였습니다.)

 

2. 3D Point Projection(3차원 점의 투영)

그림 1.

카메라로 물체를 촬영했을 때 물체의 3D좌표 $ (X, Y, Z) $는 카메라의 센서의 2D 좌표 $ (u_{ccd}, v_{ccd}) $로 투영되게 됩니다. ($ f_m $는 초점 거리를 나타내며 카메라의 센서와 카메라 렌즈 사이의 거리를 의미합니다.)

핀홀을 원점$(0, 0, 0)$ 이라고 했을 때 그림 1.과 같이 닮음비를 통해 카메라 센서에 투영된 좌표$ (u_{ccd}, v_{ccd}) $의 좌표를 계산할 수 있습니다.

 

$u_{ccd} = -f_m{\frac{X}{Z}}$

$v_{ccd} = -f_m{\frac{Y}{Z}}$ 

 

그림 2.

핀홀 카메라에서 물체의 상은 렌즈를 거쳐서 카메라 센서에 반대로 맺히게 됩니다. 그래서 항상 반대로 맺히는 부분에 대해 신경을 써야하는데 그러면 계산하기가 번거로워 지기 때문에 쉽게 계산을 할 수 있도록 투영되는 평면의 위치를 바꾸게 됩니다. 투영되는 평면의 위치를 바꾸어 기존의 $ -f_m $를 $ f_m $로 변경하게 되면 상이 똑바로 투영되게 되고 계산이 비교적 쉬워 집니다. 투영 평면의 위치를 바꾸게 되면 그림 2. 와 같이 투영된 좌표의 부호도 바뀌게 됩니다.

 

$u_{ccd} = f_m{\frac{X}{Z}}$

$v_{ccd} = f_m{\frac{Y}{Z}}$ 

 

그림 3.

지금까지 실제 물체의 좌표가 카메라의 센서 좌표로 투영되었을때의 좌표를 계산했는데 센서의 투영된 좌표는 어떻게 우리가 실제로 보게되는 영상의 좌표로 변환되게 될까요? 픽셀의 좌표로 변환되는 과정에 대해서 설명을 하도록 하겠습니다.

 

$\frac{(u_{img},\: v_{img})}{Pixel}$ ~ $\frac{(u_{ccd},\: v_{ccd})}{Metric}$ ?

 

2-1 Pixel Space (픽셀 공간)

그림 4.

카메라의 센서의 단위는 mm, 영상에서의 단위는 pixel로 두 공간에서의 단위는 서로 다릅니다. 또한 이전에 말씀드린 것 처럼 카메라 센서에서의 좌표 공간은 원점을 중심으로 잡는 반면 픽셀공간은 좌측상단을 원점으로 기준을 잡습니다. 따라서 카메라의 센서에 투영된 점 $u_{ccd}$, $v_{ccd}$가 픽셀 공간으로 이동하기 위해서는 센서 크기와 픽셀간의 Aspect ratio와 두 공간의 원점 위치를 고려하여야 합니다.

 

그림 5.

(쉽게 설명드리기 위해서 $u_{ccd}$ 는 센서의 x좌표 $u_{img}$는 영상에서의 x좌표라고 표기하였습니다. )

센서 공간과 픽셀공간의 단위가 다르기 때문에 두 공간의 비와 두 공간에서의 원점 좌표의 차이를 고려하여 다음과 같이 식을 정리할 수 있습니다.

 

센서의 가로 길이 : 영상의 가로길이 = 센서에서의 x좌표 : 영상에서의 x좌표

센서의 세로 길이 : 영상의 세로길이 = 센서에서의 y좌표 : 영상에서의 y좌표

 

비를 통해 나온 식을 $u_{img}$, $v_{img}$의 식으로 정리하면 다음과 같이 픽셀 공간으로 이동된 점의 좌표를 계산할 수 있습니다.

 

$u_{img}$ = $u_{ccd}$$\frac{w_{img}}{w_{ccd}}+p_{x}$, $v_{img}$ = $v_{ccd}$$\frac{h_{img}}{h_{ccd}}+p_{y}$

 

그림 6.

이전에 구했던 3D좌표에서 카메라 센서 공간으로 투영된 좌표 $u_{ccd}$,  $v_{ccd}$를 계산하는 식과 카메라 센서 공간에서 픽셀 공간으로 이동시키는식을 합치게 되면 그림 6. 식처럼 3D 좌표에서 영상으로 한 점이 투영되는 식을 얻을 수 있게 됩니다.

2-2 Exercise

그림 7.

문제 : 에펠탑이 영상에서 960pixel의 높이를 갖을때 초점 거리 $f_{m}$은 어떻게 되는가?

 

그림 8.

이전에 구한 식에 값들을 대입하면 $f_{m}$ 를 구할 수 있습니다.

 

그림 9.

문제 : 초점거리가 50mm 이고 에펠탑이 영상에서 960pixel의 높이를 갖을때 에펠탑 과의 거리 $Z$는 어떻게 되는가?

 

그림 10.

이 문제 또한 구한 식에 값을 대입만 하면 되므로 설명은 Skip 하도록 하겠습니다~

 

3. Camera Intrinsic Parameter(카메라 내부 파라미터)

그림 11.

지금까지 3D 좌표를 2D 픽셀 공간으로 어떻게 투영을 하게 되는지에 대해서 설명드렸습니다.

3D Vision에서는 이렇게 투영하는 식들을 나열하기보다 보기 쉽고 간단하게 표현하기 위해서 행렬로 정리하여 표현하게 됩니다. 이 투영하는 식을 행렬로 나타낸 것이 바로 Camera Intrinsic Parameter(카메라 내부 파라미터) 또는 Camera Matrix K 입니다. 다음 과정에서는 투영 하는 식들을 카메라 행렬 K로 어떻게 정리하는지에 대해서 설명드리도록 하겠습니다.

 

그림 12.

$f_{x}$는 $f_m{\frac{w_{img}}{w_{ccd}}}$,  $f_{y}$$f_m{\frac{h_{img}}{h_{ccd}}}$ 로 나타내면 기존의 투영과정을 계산하는 식은 그림 12. 에 나와있는 것 처럼 정리할 수 있습니다.

 

그림 13.

 

만약 카메라의 센서와 촬영된 영상간의 가로 길이의 비, 세로 길이의 비가 같다면 $f_{x}$와 $f_{y}$를 하나의 $f$로 정리하여 그림 13.의 식처럼 정리 할 수 있게 됩니다.

 

 

그림 14.

정리된 식에서 양변의 Z를 곱해주고 Z가 곱해진 식을 행렬로 정리하여 나타내게 되면 그림 14.에 나와있는 행렬처럼 정리를 할 수 있게 됩니다. 좌측에 곱해진 Z의 값을 $\lambda$로 치환하게 되면 그림 15.의 행렬 처럼 정리할 수 있습니다.

 

그림 15.

이렇게 정리된 $f$와 $p_{x}$, $p_{y}$로 구성된 행렬을 카메라 내부파라미터 또는 카메라 행렬 K라고 부르게 됩니다.

여기서 궁금증이 하나 생기게 됩니다. 본 강의 자료에서는 여기서 왜 좌측에 곱해진 Z의 값을 그대로 Z로 두지 않고 $\lambda$로 치환하여 표현했을까요?

 

그림 16.

카메라로 물체를 촬영하게되면 3차원의 좌표 $(X, Y, Z)$가 2차원의 픽셀공간$(u_{img}, v_{img})$으로 투영되게 되면서 카메라와 물체간의 거리 즉 Depth 정보를 잃어버리게 됩니다.

그림 17.

이렇게 투영된 좌표$(u_{img}, v_{img})$에 $K^{-1}$를 곱하여 다시 3차원의 좌표로 복원을 하려고 해도 이미 Depth 정보를 잃어버렸기 때문에 원래 3차원에서의 한점 $(X, Y, Z)$를 복원하지 못하게 되고 미지의 Depth값 $\lambda$를 갖는 하나의 직선이 되게 됩니다. ($(X, Y, Z)$는 이 직선위에 놓이게 됩니다.)

따라서 본 강의 자료에서 $Z$를 정확한 값을 알지 못하는 변수 $\lambda$로 치환하여 표현을 한 것으로 추측(?)이 됩니다.

 

이상으로 카메라로 물체를 촬영했을 때 3차원에서 2차원으로의 투영되는 계산 식과 이 식을 정리하여 표현한 행렬인 카메라 행렬 K에 대해서 설명을 마치도록 하겠습니다. 제일 처음에 말씀드렸던 대로 제가 개인적으로 공부하면서 작성한 글 입니다. 따라서 약간의 잘못된 정보가 있을 수도 있습니다. 혹시나 잘못된 정보가 있다면 댓글로 알려주시면 반영하여 수정하도록 하겠습니다. 감사합니다.

'3D Vision 공부' 카테고리의 다른 글

[CSCI 5563] 3. Projective Line  (0) 2021.11.04
[CSCI 5563] 2. Projection Matrix  (1) 2021.10.23