카메라 캘리브레이션은 카메라의 parameter를 추정하는 과정이다. 이는 실세계의 3D point와 이미지 상의 2D 좌표 간의 정확한 관계를 결정하는데 필요한 카메라의 모든 정보를 의미한다.
전체적인 흐름은 아래 그림과 같다.

한 물체를 구멍에 관통시키면 이미지 형태로 이미지 평면에 맺히게 되고, 이 물체의 임의의 한 점을 P라고 하자. 이 그림에서 세상 좌표계와 카메라 좌표계가 나오는데, 세상 좌표계는 우리가 임의의 한 지점 및 해당 지점에서의 x축, y축, z축을 정해서 정의할 수 있고, 카메라 좌표계 또한 카메라의 렌즈가 놓인 지점에서 마찬가지로 정의할 수 있다. 세상 좌표계, 카메라 좌표계 각각에서 P 를 향해 측정해서 얻은 3차원 위치를 각각 xw, xc 로 정의하고, 세상 좌표계 기준에서 카메라의 3차원 위치를 cw 라 정의하자. f는 focal length로 카메라의 렌즈에서 이미지 평면까지의 거리이다.
Intrinsic parameters
우선 P를 이미지 평면에 투영하면, 이미지 좌표계에서의 P의 좌표인 xi를 얻을 수 있다. 이는 삼각형의 닮음 성질을 이용하여 구할 수 있다.
fxi=zcxc,fyi=zcyc
xi=zcfxc,yi=zcfyc
현실 세계에서 이미지를 촬영하기 위해 이미지 센서를 사용하는데, 이미지 평면에서는 평면의 중점을 원점으로 놓는 반면 이미지 센서에서는 평면의 좌상단을 원점으로 놓는다.

이를 고려해서 최종적으로 이미지 좌표계에서의 물체의 좌표 (u,v)는 다음과 같이 구해진다.
u=zcfxc+ox,v=zcfyc+oy
여기서 f, ox, oy가 카메라의 내부 파라미터 (intrinsics)가 된다.
하지만 이 식은 비선형적이다는 것을 알 수 있다. Estimation을 더 쉽게 하려면 선형 모델을 사용해야 한다. 선형 모델로 바꾸기 위해 동차 좌표계 (homogeneous coordinate)을 사용한다.

동차 좌표계는 n차원에서의 좌표를 n+1 차원으로 표현해주는 것이다. uv 평면이 있다고 가정했을 때, 이 평면에 대해 u~v~w~ 좌표계를 정의하자. 이때 uv 평면은 w~=1일 때의 평면이 된다. 원점과 u를 지나는 직선의 모든 점이 u의 동차 좌표를 나타낸다. 이 동차 좌표계를 사용해서 2차원에서 3차원으로 자유롭게 변환할 수 있다.
⎣⎢⎡zcuzcvzc⎦⎥⎤=⎣⎢⎡uv1⎦⎥⎤=⎣⎢⎡fxc+zcoxfyc+zcoyzc⎦⎥⎤=⎣⎢⎡f000f0oxoy1000⎦⎥⎤⎣⎢⎢⎢⎡xcyczc1⎦⎥⎥⎥⎤
Extrinsic parameters
세상 좌표계에서 정의된 점 P를 카메라 좌표계로 mapping하려면, 세상 좌표계에서 정의된 카메라의 위치 cw와 세상 좌표계와 카메라 좌표계 사이의 회전변환 R을 알아야 한다. 여기서 cw와 R이 카메라의 외부 파라미터 (extrinsics)가 된다. xc와 xw 사이의 변환 관계는 다음과 같이 정의할 수 있다.
xc=R(xw−cw)
이 식을 풀어쓰면 다음과 같은 식을 얻을 수 있고, 동차좌표계를 사용해서 회전변환 R과 이동행렬 cw를 모두 포함한 행렬로 나타낼 수 있다.
xc=⎣⎢⎡xcyczc⎦⎥⎤=⎣⎢⎡r11r21r31r12r22r32r13r23r33⎦⎥⎤⎣⎢⎡xwywzw⎦⎥⎤+⎣⎢⎡txtytz⎦⎥⎤
⎣⎢⎢⎢⎡xcyczc1⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡r11r21r310r12r22r320r13r23r330txtytz1⎦⎥⎥⎥⎤⎣⎢⎢⎢⎡xwywzw1⎦⎥⎥⎥⎤
즉, 내부 행렬과 외부 행렬을 이용해서 세상 죄표계에서 정의된 3차원 점을 이미지 좌표계에 투영할 수 있게 된다. 여기서 이 내부 행렬과 외부 행렬의 곱을 projection matrix라고 한다.
⎣⎢⎡u~v~w~⎦⎥⎤=⎣⎢⎡f000f0oxoy1000⎦⎥⎤⎣⎢⎢⎢⎡r11r21r310r12r22r320r13r23r330txtytz1⎦⎥⎥⎥⎤⎣⎢⎢⎢⎡xwywzw1⎦⎥⎥⎥⎤=⎣⎢⎡p11p21p31p12p22p32p13p23p33p14p24p34⎦⎥⎤⎣⎢⎢⎢⎡xwywzw1⎦⎥⎥⎥⎤
Camera calibration
카메라 캘리브레이션은 이 projection matrix를 estimate하는 과정이다. 절차로는 우선 우리가 상대적으로 위치를 알고 있는 물체의 사진을 찍고, 다음으로 이 물체의 3D 위치와 2D 좌표를 대응시킨다. 다음으로 이 좌표들과 projection matrix를 이용해 방정식을 세우고, 마지막으로 이를 이용해 projection matrix를 구하면 된다.
카메라 캘리브레이션을 위해 보통 촬영하는 물체는 체커보드 형태의 물체이다.

체커보드는 균일한 격자무늬를 가져서 세상 좌표계 기준으로 3차원 위치를 쉽고 정확하게 측정할 수 있다. 큐브의 코너 한 곳에 세상 좌표계를 정의하고, 이 큐브의 이미지를 촬영한다.

이제 세상 좌표계에서의 3차원 위치와 이미지 상에서의 2차원 좌표를 대응시킨다. 위 그림에서 보라색 점을 예시로 들자. 우선 체커무늬 간격을 1cm라고 하면, xw=⎣⎢⎡034⎦⎥⎤, u=[56115]로 구할 수 있다.
이러한 점들을 여러개 대응시키면 방정식을 세울 수 있다.
⎣⎢⎡u(i)v(i)1⎦⎥⎤=⎣⎢⎡p11p21p31p12p22p32p13p23p33p14p24p34⎦⎥⎤⎣⎢⎢⎢⎢⎡xw(i)yw(i)zw(i)1⎦⎥⎥⎥⎥⎤
u(i)=p31xw(i)+p32yw(i)+p33zw(i)+p34p11xw(i)+p12yw(i)+p13zw(i)+p14v(i)=p31xw(i)+p32yw(i)+p33zw(i)+p34p21xw(i)+p22yw(i)+p23zw(i)+p24
이 식을 한 쪽으로 몰아서 다음과 같이 정의할 수 있다.

2D - 3D 대응쌍을 통해 우리는 AP=0 꼴의 행렬을 도출할 수 있다. 여기에서 A 의 SVD (singular value decomposition) 값을 구하게 되면 이 때 제일 작은 고유값에 대응되는 고유벡터 P 값이 되기 때문에 SVD 결과의 V 행렬의 마지막 열벡터가 P가 된다. 이 P를 다시 행렬 형태로 나타내면 우리가 구하고자 하는 projection matrix가 된다.

이제 이 projection matrix를 분해해서 카메라 파라미터들을 구할 수 있다. 이는 QR 분해를 통해 구할 수 있다.