Camera Pose & Camera Calibration

Henry·2023년 5월 6일
0

3D Vision

목록 보기
3/3
post-thumbnail

본 포스트는 Flexible Camera Calibration By Viewing a Plane From Unknown Orientations [Zhang et al. ICCV 1999]를 참고하였다.

Mapping to pixel coordinates

2차원 좌표 xx와 3차원 좌표 XcamX_{cam}의 관계는 다음과 같다.

x=K[I0]XcamXcam=[Rt]Xworld\begin{aligned} x &= K[I|0]X_{cam} \\ X_{cam} &= [R|t]X_{world} \\ \end{aligned}

이 때 XcamX_{cam}은 원점 기준 3차원 좌표계이며 월드 좌표계의 3차원 좌표 XworldX_{world}는 회전 변환을 통해서 XcamX_{cam}이 될 수 있을 것이다.

Camera Extrinsic matrix

위 수식 Xcam=[Rt]XworldX_{cam} = [R|t]X_{world}에서 [Rt][R|t]는 무엇일까?
[Rt][R|t]를 정확히 표현하면 다음과 같다.

[R3×3T3×101×31]4×4\begin{bmatrix} R_{3 \times 3} & T_{3 \times 1} \\ 0_{1 \times 3} & 1 \end{bmatrix}_{4 \times 4}

[RT][R|T]는 extrinsic matrix이고 카메라 좌표계와 월드 좌표계 사이의 변환을 의미하는 matrix이며 이는 월드 좌표에서 카메라 중심의 위치와 카메라의 방향을 정의한다.

RR은 회전(Rotation)을, TT는 평행이동(Translation)을 의미한다. 동시에, TTXworldX_{world}의 원점(CC)을 3차원 카메라 중심 좌표계에 투영한 위치를 의미한다.

CC는 또한 다음과 같이 계산될 수 있다.

C=R1T=RTTC = -R^{-1}T = -R^TT

RRTT는 월드 좌에서 3차원 카메라 좌표로의 변환을 의미하므로 카메라와 무관한 외부 파라미터이다. 이것이 extrinsic matrix로 불리는 이유이기도 하다.

extrinsic matrix는 먼저 intrinsic matrix를 구하고 이미 샘플링 된 3차원 월드 좌표와 2차원 이미지 좌표 간의 매칭 쌍을 이용해 구한다. Mapping to pixel coordinates에 있는 수식을 그대로 따라가는 셈이다.

Camera extrinsic matrix의 DoF(Degree of Freedom)는 얼마일까?

3차원 rotation을 의미하는 RR은 다음과 같다.

R=[cos(β)cos(γ)sin(α)sin(β)cos(γ)cos(α)sin(γ)cos(α)sin(β)cos(γ)+sin(α)sin(γ)cos(β)sin(γ)sin(α)sin(β)sin(γ)+cos(α)cos(γ)cos(α)sin(β)sin(γ)sin(α)cos(γ)sin(β)sin(α)cos(β)cos(α)cos(β)]R = \begin{bmatrix} cos(\beta)cos(\gamma) & sin(\alpha)sin(\beta)cos(\gamma)-cos(\alpha)sin(\gamma) & cos(\alpha)sin(\beta)cos(\gamma)+sin(\alpha)sin(\gamma) \\ cos(\beta)sin(\gamma) & sin(\alpha)sin(\beta)sin(\gamma)+cos(\alpha)cos(\gamma) & cos(\alpha)sin(\beta)sin(\gamma)-sin(\alpha)cos(\gamma) \\ -sin(\beta) & sin(\alpha)cos(\beta) & cos(\alpha)cos(\beta) \\ \end{bmatrix}

RRα,β,γ\alpha, \beta, \gamma를 통해 결정되므로 RR에 의한 DoF는 33이며
TTCC가 투영된 3차원 좌표이므로 TT에 의한 DoF 또한 33이다.

따라서 Camera extrinsic matrix의 DoF는 66이다.

World to Cam & Cam to World

그렇다면 임의의 3차원 좌표를 카메라 원점 기준 3차원 좌표로 옮기는 공식은 무엇일까?

Xcam=[Rw2ctw2c]XworldX_{cam} = [R_{w2c}|t_{w2c}]X_{world}

이 수식은 임의의 3차원 좌표 XworldX_{world}를 카메라 원점의 3차원 좌표 XcamX_{cam}으로 mapping 하는 공식이다.
이러한 변환은 SLAM과 같은 mapping application이나 simultaneous localization 등에 적극 활용된다.

카메라 원점 3차원 좌표에서 임의의 3차원 좌표로 옮기는 공식은 무엇일까?

Xworld=[Rc2wtc2w]XcamX_{world} = [R_{c2w}|t_{c2w}]X_{cam}

공식 자체는 카메라를 알 때 world 좌표를 구하는 공식으로 보이지만 사실 tracking과 같이 know object의 world 좌표를 알 때 영상으로 좌표를 옮겨오는 task에서 주로 사용된다.

두 수식은 inverse 관계에 있으며 따라서 다음과 같은 수식 유도가 가능하다.

Xcam=[Rw2ctw2c][Rc2wtc2w]XcamXcam=Rw2c(Rc2wXcam+tc2w)+tw2c\begin{aligned} X_{cam} &= [R_{w2c}|t_{w2c}][R_{c2w}|t_{c2w}]X_{cam} \\ X_{cam} &= R_{w2c}(R_{c2w}X_{cam} + t_{c2w}) + t_{w2c} \\ \end{aligned}

이로부터 다음과 같은 수식을 얻을 수 있다.

Rw2cRc2w=IRw2ctc2w+tc2w=0\begin{aligned} &R_{w2c}R_{c2w} = I \\ &R_{w2c}t_{c2w} + t_{c2w} = 0 \\ \end{aligned}

How to calculate Camera Calibration

Camera Calibration matrix K는 어떻게 구할까?

우리가 알 고 있는 정보는 각 이미지의 XcamX_{cam}이다. 편의를 위해 XcamX_{cam}zz좌표가 00이라 하자. 즉, X=(X1,X2,0,1)X = (X_1, X_2, 0, 1)이다.

반면 우리가 모르는 정보는 constant camera intrinsics K이며 camera pose인 RRtt도 알지 못한다.

이 때, 어떠한 카메라 상의 2차원 좌표 xx는 다음과 같다.

λRλx=K[r1,r2,r3t]XcamXcam=λK[r1,r2t][X1,X2,1]T\forall \lambda \in \mathbb{R} \\ \begin{aligned} &\lambda x = K[r_1, r_2, r_3|t]X_{cam} \\ &X_{cam} = \lambda' K[r_1, r_2|t][X_1, X_2, 1]^T \end{aligned}

λ\lambda는 scale invariant한 homography의 성질을 반영한 것이다.

마지막 수식은 3차원이였으나 z=0z=0으로 인해 2차원이 된 XcamX_{cam}과 이미지 2차원 좌표 xx 간의 homography를 의미한다.

이 경우 앞선 2D Homography 포스트에서 다룬 공식을 적용할 수 있다.

Let H=K[r1,r2t]Xcam=λH[r1,r2t]K1H=λ[r1,r2t]Let \space H = K[r_1, r_2|t] \\ X_{cam} = \lambda H[r_1, r_2|t] \Longleftrightarrow K^{-1}H = \lambda [r_1, r_2|t]

이 때, RRr1r_1r2r_2orthonomal하므로 다음과 같은 관계가 만족한다.

(i)  r1Tr2=0(ii) r1Tr1=r2Tr2=1\begin{aligned} &(i) \space\space r_1^Tr_2=0 \\ &(ii) \space r_1^Tr_1 = r_2^Tr_2 = 1 \end{aligned}

이를 이용하면 최종적으로 3×43 \times 4 projection matrix HH에 대해 다음과 같은 수식을 얻을 수 있다.

As K1[h1,h2,h3]=λ[r1,r2t]r1=K1h1r2=K1h2Put r1,r2 into (i) and (ii)As \space K^{-1}[h_1, h_2, h_3] = \lambda [r_1, r_2|t] \\ r_1 = K^{-1}h_1 \\ r_2 = K^{-1}h_2 \\ Put \space r_1, r_2 \space into \space (i) \space and \space (ii)
(iii) h1TKTK1h2(iv)  h1TKTK1h1=h2TKTK1h2\begin{aligned} &(iii) \space h_1^TK^{-T}K^{-1}h_2 \\ &(iv) \space\space h_1^TK^{-T}K^{-1}h_1 = h_2^TK^{-T}K^{-1}h_2 \end{aligned}

위 두 수식 (iii), (iv)(iii), \space (iv)을 바탕으로 최적화 기법인 Levenberg Marquardt Algorithm를 이용하여 Camera calibration matrix KK를 구할 수 있다.

Degrees of Freedom of HH

HH의 DoF(Degrees of Freedom)은 얼마일까?

HH3×43 \times 4 projection matrix이다. 먼저 HH의 식을 살펴보자.

H=K[Rt]H = K[R|t]

이미 RR의 DoF는 33, tt의 DoF는 33임을 보았다. 즉, extrinsic matrix의 DoF는 66이다.
또한 앞선 포스트에서 calibration(intrinsic) matrix KK의 DoF는 55임을 보았다.
따라서 HH의 DoF는 1111이다.

Levenberg Marquardt Algorithm

Levenberg Marquardt Algorithm에 대해서는 최적화 관련 포스트에서 다시한번 자세히 다룰 예정이다.

References

https://ieeexplore.ieee.org/document/791289
https://darkpgmr.tistory.com/142
https://eehoeskrap.tistory.com/511
https://www.semanticscholar.org/paper/Stereo-camera-system-calibration%3A-the-need-of-two-Beschi-Feng/cb01fe7e7fc8793e3d0b6ee43b8e41401af97c29
https://www.youtube.com/watch?v=dPZo74SbkeQ

profile
Intern of Arcreal

0개의 댓글