Computer vision/Camera

카메라 캘리브레이션(calibration)이란

hongsusoo 2024. 1. 14. 02:02

카메라 캘리브레이션은 뭘하는 걸까? 무조건 카메라 캘리브레이션이 필요한건 아닌거 같다. 예를들면 사진을 통해 추억을 기록할 때에는 굳이 캘리브레이션 작업을 할 필요는 없는거 같다. 그럼 언제 어떻게 필요하고 사용될까?

카메라 캘리브레이션이란?

카메라는 3차원의 공간을 2차원으로 projection하여 이미지을 얻어낸다. 하지만 우리는 2D 사진에서 다시 한번 3D 공간의 정보를 다시 구성해 보려고 하는 시점에서 캘리브레이션 작업이 필요하게 된다. 캘리브레이션을 정의해보면, 공간에 대한 정보를 이미지를 추출하는데 있어서 공간과 카메라 사이의 관계, 즉 카메라 내부적인 물리적인 구성을 수치적으로 표현하여 3D의 정보가 2D로 projection되는 parameter를 얻어내는 과정이라고 볼 수 있다. 

카메라 파라미터(parameter)

그림1. 카메라 파라미터 설명

우리가 살아가는 3차원 공간에 하나의 좌표계를 설정할 수 있다. 임의로 하나의 원점과 축을 잡아 월드 좌표계(Xw,Yw,Zw)를 정의할 수 있다. 그리고 이 좌표계를 정의함으로써 기준으로 다른 물체의 위치를 표현할 수 있다. 우리의 목표는 카메라를 통해서 앞서 정의한 3차원의 공간을를 2차원의 이미지로 프로젝션 시켜야 한다. 그러기 위해선 차원 하나를 날려버리는 작업이 필요하다. 차원을 하나 날려버리는 가장 좋은 방법은 월드 좌표계의 원점을 바라보며 좌표축 하나와 평행하게 촬영하게 되면 쉽게 하나의 차원을 지울 수 있다. 하지만 이 방법은 특정 위치에 있는 카메라만 가능하다.

카메라 외부 파라미터(extrinsic parameter)

카메라 자체적으로 하나의 좌표계를 설정함으로써 문제를 일반화하여 풀수 있게 된다. 이 때 정의한 카메라 기준의 좌표계를 카메라 좌표계(Xc,Yc,Zc)라고 한다. 카메라 좌표계는 Zc축이 광축과 일치하도록 만들어 둔다. 이유는 Zc축 차원을 없애 버리기 위함이다. 여기서 월드 좌표계에서 카메라 좌표계로 변환을 위해서는 rotation과 translation이 필요한데, 이 변환에 필요한 parameter를 카메라 외부 파라미터라고 한다. 외부 파라미터는 <그림1>에서와 같이 4x4 행렬로 이루어져 있고, 이는 Translation의 경우 원점 보존이 안되는 비선형성을 없애기 위해 차원을 하나 늘려 선형성을 보존시켜 matrix표현이 가능하도록 만들었다. 카메라 외부 파라미터는 단순하게 좌표계에 대한 변환만 이뤄진다.

카메라 내부 파라미터(intrinsic parameter)

카메라 내부 파라미터을 정의하기 위해서는 빛이 카메라 내부로 들어오는 상황부터 상상해보아야 한다. 빛이 렌즈를 통과하여 센서에 도달하게 된다. 이때 변경 요소로 올 수 있는 부분을 생각해보면, 렌즈와 센서이다. 세상에는 정말 많은 종류의 렌즈가 있다. 또한, 렌즈의 경우 동일한 렌즈여도 가공에 따른 차이가 발생할 수 있다. 그리고, 렌즈가 이상적으로 동일하다고 하더라도 센서와의 align이 틀어져 차이가 생길 수 있다. 이 부분에 대해서 보정해주기 위해서 카메라 내부 파라미터를 사용하게 된다. 내부 파라미터의 종류는 focal length, skew coefficient, principal point 정도가 있다.

focal length는 주점과 초점사의 거리를 의미하고 렌즈가 가지고 있는 물리적인 특성이다. skew coefficient는 비대칭계수로 이미지 센서와 렌즈가 평행하지 않아 발생하는 문제이다. 요즘은 대부분 0으로 사용한다. 마지막으로 pricipal point가 있다. 이는 주점을 의미하는데 렌즈의 주점과 이미지 센서의 센터가 틀어졌음을 의미한다. 

내부 외부 파라미터를 정리하면, <수식1>과 같다.

수식1. world to camera