[영상 Geometry #6] 이미지 투영(Imaging Geometry)

영상처리 2013. 7. 22. 16:54

(3D 비전 geometry 5번째 파트 Imaging Geometry입니다)

 

 

5. Imaging Geometry

 

이제 지금까지의 내용을 종합하여 3D 월드좌표에서 2D 픽셀좌표로의 변환 관계, 즉 이미지가 형성되는 과정을 정리해 보겠습니다.

 

설명의 편의를 위해 [영상처리] - [컴퓨터 비전에서의 Geometry #1] 좌표계의 <그림 1>을 다시 참조합니다.

 

<그림 1>

 

5.1 원근 투영 변환 (Perspective Projection Transformation)

 

먼저, 3D에서 2D로의 투영변환 행렬을 살펴보겠습니다.

 

투영변환은 3차원 공간에 있는 점을 이미지 평면에 투영시키는 변환인데, 투영변환을 모델링하는 방법에는 크게 2가지가 있습니다.

 

하나는 위 <그림 1>처럼 투영 기준점(projection reference point)을 좌표계의 원점으로 잡고 이미지 평면을 전방 Zc = d에 두는 경우이고 다른 하나는 투영시킬 이미지 평면을 좌표계 원점에 위치시키고 투영 기준점을 Zc = -d에 잡는 경우입니다.

 

먼저, <그림 1>처럼 투영 기준점을 원점으로 잡은 경우 3차원 상의 점 P를 p'으로 투영시키는 변환 행렬은 다음과 같이 주어집니다 (homogeneous 좌표 표현).

 

 --- (1)

 

즉, 투영평면이 Zc = d일 경우 (Xc, Yc, Zc, 1)는 (Xc, Yc, Zc/d) = (d*Xc/Zc, d*Yc/Zc, 1)로 투영됩니다 (s는 homogeneous 좌표표현의 scale factor로서 점 P의 depth에 해당).

 

다음으로, 만일 투영평면이 Zc = 0이고 투영 기준점을 (0, 0, -d)인 경우에는 투영변환 행렬이 다음과 같이 주어집니다.

 

 --- (2)

 

이 경우, (Xc, Yc, Zc, 1)은 (Xc, Yc, 1+Zc/d) = (d*Xc/(Zc+d), d*Yc/(Zc+d), 1)로 투영됨을 알 수 있습니다.

 

이 외에도 투영변환을 표현하는 방법은 다양합니다면 여기서는 식 (1)을 기준으로 Zc = d로의 투영변환을 다음과 같이 표현하겠습니다.

 

 --- (3)

 

 

5.2 이미지 투영 모델

 

월드 좌표계 상의 한 점 (X, Y, Z)를 이미지 평면(픽셀 좌표계) 상의 점 (x, y)로 변환시키는 행렬을 H라 하면, 그 관계식은 다음과 같습니다 (homogeneous 좌표를 사용).

 

 --- (4)

 

이 때, H는 3 × 4 행렬로서 다음과 같이 분해하여 표현할 수 있습니다.

 

 --- (5)

 

 --- (6)

 

식 (5)에서, [R|t]는 월드 좌표계를 카메라 좌표계로 바꾸는 rigid 변환 행렬, Tpers(1)는 카메라 좌표계 상의 3D 좌표를 정규 이지미평면(normalized image plane)에 투영시키는 프로젝션(projection) 행렬, K는 카메라 내부(intrinsic) 파라미터 행렬로 정규 이미지 좌표를 픽셀 좌표로 바꾸어 줍니다. Tpers(1)은 d = 1 즉, Zc = 1인 평면으로의 투영변환을 말합니다 (즉, normalized image plane으로의 투영).

 

이제 식 (6)에서 투영변환 Tpers(1)과 rigid 변환 [R|t]를 하나로 합치면 다음과 같이 좀더 간단한 표현식이 됩니다.

 

 --- (7)

 

이 때, 앞부분 K를 내부 카메라 행렬(intrinsic camera matrix)이라 부릅니다. K는 카메라 내부 파라미터 (intrinsic parameter)를 나타내고 뒷부분 rigid 변환 [R|t]은 카메라 외부 파라미터 (extrinsic parameter)를 나타냅니다. 그리고 s는 homogeneous 좌표표현의 scale factor로서 점 (X, Y, Z)의 depth에 해당합니다.

 

 

* 참고사항 1

 

다른 문제들도 마찬가지겠지만 모델이라고 하는 것이 정의하기에 따라 또 기준을 어떻게 잡느냐에 따라 다양한 방식의 표현 및 해석이 가능합니다.

 

제가 이 글에서는 3D 공간이 일단은 정규 이미지 평면에 투영된 후에 픽셀 이미지로 변환되는 것으로 설정을 했기 때문에 식 (6)과 같은 형태로 카메라 모델 수식이 표현되었습니다. 그런데 이렇게 하면 수식 자체는 식 (7)과 같이 깔끔하게 정리되지만 카메라 내부 파라미터 행렬인 K에 대한 기하학적 해석이 직관적이지 않은 문제가 있습니다.

 

그 이유는 실제 투영은 가상의 normalized 이미지 평면이 아닌 초점거리 f의 이미지 평면으로 투영되기 때문입니다. 따라서, 실제로는 투영변환이 Zc = f 평면으로의 투영인 Tpers(f)가 되어야 하며 K는 물리적인 metric 좌표 단위를 픽셀 좌표계 단위로 변환시켜주는 변환행렬이 되어야 합니다.

 

 --- (8)

 

위 식 (8)에서 f는 초점거리(카메라 좌표계 원점과 이미지 센서와의 거리), sx, sy는 이미지 센서의 metric 단위를 x, y 픽셀 단위로 바꿔주는 일종의 스케일(scale) 요소입니다. 

 

여기서 Tpers(f)를 편의상 식 (3)과는 조금 다른 형태로 표현했는데, 표현만 다를 뿐 실제로는 같은 변환입니다. 즉, Tpers(f)는 다음과 같이 2가지 형태로 표현할 수 있으며 homogeneous 좌표에서는 둘다 같은 변환입니다.

 

 --- (9)

 

결과적으로 식 (8)과 식 (7)을 비교해 보면 단지 sx*f를 fx, sy*f를 fy로 표현한 것임을 알 수 있습니다.

 

사실 식 (7)이나 식 (8)이나 모두 같은 말이며 어떤 모델 표현을 사용해도 관계는 없습니다. 하지만, 보통 일반적으로 사용되는 카메라 모델 표현은 식 (7)이므로 식 (7)의 표현을 사용하는게 좋겠습니다.

 

 

* 참고사항 2

 

식 (7)의 카메라 모델에서는 영상왜곡은 고려하지 않았습니다. 만일 영상왜곡까지 고려한다면 왜곡모델은 투영변환과 내부 파라미터 변환 사이에 들어가야 합니다. 즉, normalized 이미지 평면에 투영된 좌표 (u, v)에 대해 왜곡 파라미터를 반영한 후에 K를 통해 픽셀 좌표계로 변환해야 합니다. 영상왜곡에 대해서는 카메라 왜곡보정 - 이론 및 실제 글을 참조하기 바랍니다.

 

 

5.3 OpenCV 관련 함수

 

OpenCV 관련 함수들 목록입니다.

  • calibrateCamera(): 평면물체(planar object) 상의 점들에 대한 3D 월드좌표와 2D 이미지 픽셀 좌표 쌍들을 입력으로 주면 camera matrix K와 왜곡계수, 그리고 [R|t] 행렬을 반환해 줌. 최소 2개 이상의 서로 다른 시점(view point)에서 입력 데이터를 획득해야 하며, [R|t]는 각 시점별로 계산되어 반환됨
  • decomposeProjectionMatrix(): 3D 월드좌표를 2D 픽셀 좌표로 변환시켜주는 3 × 4 변환행렬을 입력으로 주면, 이 행렬을 카메라 행렬 K와 [R|t] 행렬로 분해해 줌
  • solvePnP() / solvePnPRansac(): 카메라 내부 파라미터 행렬 K와 3D 월드좌표 - 2D 픽셀좌표 매칭쌍들을 입력으로 주면, 카메라 외부 파라미터인 [R|t] 행렬을 계산해 줌. 최소 4개의 좌표쌍을 필요로 함

 

 

by 다크 프로그래머

 

'영상처리' 카테고리의 다른 글

[영상 Geometry #7] Epipolar Geometry  (184) 2013.07.24
[영상 Geometry #5] 3D 변환  (59) 2013.07.15
[영상 Geometry #4] Homography 보완  (38) 2013.07.12