본문 바로가기

인지/카메라

(카메라) 카메라 캘리브레이션에 대하여...

우선 카메라 캘리브레이션(calibration)은 2차원 이미지를 3차원으로 복원하기 위해 두 카메라의 통합 과정으로 생각하면 됩니다. 이 외에도 두 카메라의 캘리브레이션을 통해 거리 값을 측정하거나, 실제 카메라와 로봇의 좌표계를 통일하는 과정에서도 캘리브레이션이라는 용어가 많이 사용됩니다. 해당 글에서는 기본적인 3차원 좌표를 2차원 카메라 좌표로 변환하는 캘리브레이션에 대해 설명하겠습니다.

 

 

캘리브레이션에 대하여 자세히 설명하기 위해서 월드 좌표계카메라 좌표계에 대한 설명을 진행하겠습니다.

 

우선 월드 좌표계(World Coordinate)는 3인칭 시점에서 사물을 바라볼 때 임의로 잡을 수 있는 좌표계입니다. 즉, 우리가 임의의 원점을 잡으면 3차원 공간에 어떠한 지점이든 절대 좌표계 (x, y, z)로 표현이 가능해집니다.

월드 좌표계 (World Coordinate)

이와 반대인 개념은 카메라 좌표계(Camera Coordinate) 혹은 로컬 좌표계(Local Coordinate)입니다. 이는 1인칭 시점에서 모든 사물을 상대 좌표계로 바라봄으로 원점 또한 카메라 자체로 지정됩니다.

 

카메라 좌표계 (Camera Coordinate)

 

 

그렇다면 저희는 어떤 과정을 통해 3차원 공간의 월드 좌표계를 어떻게 2차원 공간에 거리 값(Depth)으로 변환할 수 있을까요?

 

이를 알아보기 위해 핀홀 카메라를 예시로 들어 설명하겠습니다.

 

3D 에서 2D로 좌표 변환

카메라가 3차원 공간에 있는 (X, Y, Z) 지점을 2차원 공간으로 변환하며 실제 렌즈로부터 물체까지의 거리 값을 측정한다고 가정해보자. 이때 3차원 공간에 있는 물체의 월드 좌표계 값은 (X, Y, Z)이다.

 

이를 3차원 외부(회전, 이동) 변환을 통해 좌표를 보정하고, 또 카메라 내부(초점거리, 주점, 비대칭 계수) 시스템에 맞춰 좌표를 또 보정하게 됩니다. 이러한 보정 과정을 거치면 (X, Y, Z) 3차원 좌표를 2차원 좌표로 변환 가능합니다.

 

아래는 해당 내용에 대한 수식을 핀홀 카메라를 예시를 토대로 위의 외부, 내부 변환을 다음 외부 파라미터, 내부 파라미터를 통해 설명하도록 하겠습니다.

 

카메라 변환 행력 수식

 

우선 수식에서 (X, Y, Z, 1) 값은 3차원 정보 값이며 결과 값은 (x, y, 1)로 2차원 값으로 차원수가 준 것을 확인할 수 있습니다. 또한 3 X 4 행렬 [[r11, r12, r13, t1]...] 은 [R|t] 행렬로 앞에 설명한 회전이나 평행이동 와 같은 외부 변환 요소들을 포함한 외부 파라미터 값이며 이 값은 캘리브레이션 과정을 통해 구해야 합니다.

 

다음 수식에서 보면 3 X 3 행렬 [[fx skew_cfx cx]...] A 행렬로 카메라의 내부 요소 초점거리, 주점, 비대칭 계수로 이뤄진 행렬입니다. 이 값은 카메라 자체 하드웨어를 구성할 때 정해지는 값입니다.

 

이렇게 두 내부 파라미터와 외부 파라미터로 3차원 좌표를 2차원에 투영시키기 때문에, 이 두 행렬을 통합해 Projection Matrix라고도 부릅니다.

 

그렇다면 외부 파라미터 내부 파라미터의 구성을 살펴볼까요?

 

우선 외부 파라미터부터 설명하자면 외부 파라미터는 두 좌표계 사이의 회전과 평행이동 변환으로 표현됩니다.

해당 값들은 실제 x, y, z 축에 따라 각 회전 변환과 평행이동을 모두 포함해 혼합된 행렬입니다. 더 자세한 내용은 하기 자료에서 확인 가능합니다.

 

camera-parameters (toronto.edu)

 

다음은 내부 파라미터입니다. 내부 파라미터의 구성은 초점거리(Focal Length), 주점(Principal point), 비대칭 계수(Skew coefficient)로 나타낼 수 있습니다.

 

  • 초점거리 (Focal Length)

우선 초점거리는 핀홀 카메라와 렌즈 카메라에서 다소 차이가 있어서 간단히 설명을 하겠습니다.

 

핀홀 카메라에서의 초점 거리는 핀홀 구멍에서부터 상이 맺히는 투사면까지의 거리 값이고, 렌즈 카메라에서는 레즈에서부터 렌즈의 초점이 만나는 부분까지의 거리로 계산됩니다.

 

해당 값은 수식에서 fx, fy 값으로 나타나며, 이를 구분하는 이유는 실제 캘리브레이션 과정에서 x, y 값을 따로 구분해 반환하며 실제 물리적인 가로, 세로 간격에 차이가 있을 수 있기 때문입니다. (요즘 카메라들은 잘 나와서 보통 같습니다.)

 

 

Pinhole camer vs. lens camera.

  • 주점 (Principal Point)

주점은 카메라 렌즈 혹은 핀홀의 중심에서 내린 수선의 발의 좌표 즉, 영상의 중심 지점이라 생각하면 됩니다. 하지만, 혹여 조립과정에서 센서의 수평이 어긋나면 주점과 실제 영상의 중심점이 다른 값을 가질 수 있습니다. 그러나 그럴 경우는 극히 드물어 보통은 같은 지점으로 생각합니다. 위에 수식에서 주점의 좌표는 (cx, cy)로 표현됩니다.

 

 

Pricipal Point

  • 비대칭 계수 (Skew Coefficient)

마지막으로 소개할 내용은 비대칭 계수입니다. 비대칭 계수는 이미지 센서의 cell의 기울어진 정도를 나타냅니다. 요즘 카메라는 잘 나오기 때문에 Skew가 거의 존재하지 않습니다. 그러한 이유로 보통 같은 경우 Skew_c의 값을 0으로 가정합니다.

 

Skew Coefficient

 

이상으로 카메라 캘리브레이션에 대한 내용이었습니다. 다음에는 서로 다른 두 센서의 좌표를 통일하는 과정인 센서 퓨전에 관해 설명하도록 하겠습니다.

 

감사합니다!