12.1 3차원 기하와 캘리브레이션
Calibrataion : 어떤 좌표계 상의 점 → 다른 좌표계의 점

1) 세계 좌표계와 카메라 좌표계
카메라는 세계 좌표계를 기준으로 이동 $\textbf{t}=\left(t_x,t_y,t_z\right)$ 과 회전 $ r_1, r_2, \ldots, r_9 $ 진행
세계 좌표계를 카메라 좌표계로 변환 :
$ (x_w,y_w,z_w)\to(x_c,y_c,z_c) $
회전과 이동이 작용하는 것을 나타내기 위해 보통 3 x 4 행렬 $(\textbf{R}|\textbf{t})$ 사용 (외부 행렬 extrinsic matrix)
$\begin{pmatrix}x_c\\y_c\\z_c\end{pmatrix}=\begin{pmatrix}r_1&r_2&r_3&t_x\\r_4&r_5&r_6&t_y\\r_7&r_8&r_9&t_z\\\end{pmatrix}\begin{pmatrix}x_w\\y_w\\z_w\\1\\\end{pmatrix}=(\textbf{R}|\textbf{t})\begin{pmatrix}x_w\\y_w\\z_w\\1\\\end{pmatrix}$
2) 영상 좌표계
3차원 점 $ (x_c,y_c,z_c) $ 은 영상 공간 $(u,v) $ 점으로 투영됨
$f$ : 카메라 좌표계에서 영상 평면까지 거리 | 초점거리, focal length
삼각비에 의해 아래 식 성립 :
$x = \dfrac{f x_c}{z_c},\; y = \dfrac{f y_c}{z_c}$
$ x', y', z' $ : 동차 좌표를 구성하는 요소

동차 좌표 : n차원 사영 공간을 n+1개의 좌표로 나타내는 좌표계
ex. 2차원 공간은 3개의 좌표 $(x,y,z)$ 로 나타냄, 3차원 공간은 4개의 좌표 $(x,y,w,z)$로 나타냄
3D → 2D 투영식에는 나눗기가 존재하는데 나누기는 행렬로 나타낼 수 없음
- 연산은 곱셈, 덧셈인 선형 형태로 존재해야 함
EX)
2D 좌표 $(u,v)$ → 동차 좌표 → $(u',v',w')$
실제 좌표 : $u=\frac{u'}{w'},v=\frac{v'}{w'}$
마지막 좌표 $w$로 나누면 실제 좌표 나옴
$x-y$ 좌표계의 원점은 $(0,0)$, $u-v$ 좌표계를 기준으로 하면 $(c_x, c_y)$
$x$축과 $y$축이 기울 수 있기 때문에 $\gamma $ 반영함
(문헌에 따라 기울임이 없다고 가정해서 $\gamma = 0$으로 설정하기도 함.
$\textbf{K}$ : 카메라 내부 파라미터, 내부 행렬(intrinsic matrix
$\begin{pmatrix}u'\\v'\\w'\end{pmatrix}=\begin{pmatrix}f_x&\gamma&c_x\\0&f_y&c_y\\0&0&1\\\end{pmatrix}\begin{pmatrix}x_c\\y_c\\z_c\end{pmatrix}=\textbf{K}\begin{pmatrix}x_c\\y_c\\z_c\end{pmatrix}$
요소 한 개씩 뜯어보면 다음과 같이 진행됨
- $x_c$가 초점거리 $f_x$에 의해 확대되고, $y_c$가 $\gamma$를 통해 기울임이 보정되며, 중심점 $c_x$가 $z_c$를 통해 동차좌표 형태로 보정
- $y_c$가 초점거리 $f_y$에 의해 확대되고, 중심점 $c_y$가 $z_c$를 통해 동차좌표 형태로 보정
- 깊이 값 $z_c$를 그대로 반영
$\begin{pmatrix} u' \\ v' \\ w' \end{pmatrix} = \begin{pmatrix} f_x x_c + \gamma y_c + c_x z_c \\ f_y y_c + c_y z_c \\ z_c \end{pmatrix}$
동차 좌표 정규화 진행 :
$u = \dfrac{u'}{z_c} = \dfrac{f_x x_c}{z_c} + \dfrac{\gamma y_c}{z_c} + c_x$
$v = \dfrac{v'}{z_c} = \dfrac{f_y y_c}{z_c} + c_y$
동차 좌표 → 보통 좌표로 변환
$u = \dfrac{u'}{w'},\; v = \dfrac{v'}{w'}$
[최종 순서]
1. 카메라를 통해 세계 좌표계를 기준으로 $(x_w, y_w, z_w)$ 측정
2. 카메라 외부 행렬 $(\textbf{R}|\textbf{t})$ 을 통해 카메라 좌표계 $(x_c, y_c, z_c)$로 변환
3. $\textbf{R}$을 통해 영상 평면의 동차 좌표 $(u', v', w')$로 변환
4. 보통 좌표로 변환 $(u,v)$
'AI > Computer Vision' 카테고리의 다른 글
| [CV] SR 기법에서 사용되는 Loss function (0) | 2024.12.17 |
|---|---|
| [Yolov10] Custom Data 실습 코드 (1) | 2024.11.18 |
| [Vision Transformer(ViT)] 코드 설명 및 인자 정리 (0) | 2024.09.23 |
| [멀티모달] 이미지 캡션 생성 (0) | 2024.05.30 |
| [실전! 컴퓨터 비전을 위한 머신러닝] 06. 전처리 (1) | 2023.10.28 |