0. Introduction
Pose Esitmation(특히 3D)는 2차원, 3차원 위의 Position을 Supervision으로 이용하는 경우가 많다. 절대적으로 같은 점이어도, 좌표계(Coordinate System)에 따라 정말 다양하게 표현할 수 있는데, 좌표계에 대한 이해 없이는 이를 해석하기 어렵고, 조작하기 힘들다.
나도 초기에는 좌표계에 대한 이해없이 주먹구구식으로 문제를 해결해 왔는데, Trial & Error가 너무 잦아 효율도 안나오고 금방 한계에 부딪혔다. 이번 기회에 정보도 공유하고 다시 공부할겸 좌표계에 대한 글을 작성한다.
이 글에선 (1) 각 좌표계의 정의 (2) 카메라 파라미터를 다룰 예정이다.
1. Coordinate System
3D Coordinate
3D Coordinate System은 3차원 위에서 좌표를 표현하기 위해 설정된 시스템이다. 3D Pose Estimation에서는 관절의 위치값을 표현하기 위해 사용되기도 한다. 이 개념의 좀 더 일반적인 용례는 카메라로 사진을 찍는 과정에서 3차원 물체가 2차원으로 Projection 되는 과정을 설명할때 주로 사용된다. 3D Coordinate System은 World Coordinate, Camera Coordinate가 존재한다.
1. World Coordinate
World 좌표계는 실세계의 공간을 좌표계로 표현한 것인데, 이때 좌표계를 만들기 위한 기준점과 축은 기록하는 사람이 임의로 잡아서 사용한다. 예를 들어 기준점은 촬영장 스튜디오의 구석의 모서리가 될 수 있고, 축은 각 벽면을 따라서 설정할 수 있다. 좌표계는 일종의 약속이므로 그 기준이 일관적이기만 하면 된다.
2. Camera Cooridnate
World Coordinate가 현실의 한 점을 임의로 정한 좌표계라면, Camera Coordinate는 카메라를 기준으로 정한 좌표계이다. 좌표계를 만들기 위한 기준점은 렌즈의 중심인 초점, 카메라의 정면 방향을 Z 축, 카메라의 오른쪽을 X축, 카메라의 아래 방향을 Y축으로 사용한다.
3. Pixel(Image) Coordinate (2D)
카메라를 통해 사진을 찍으면, 3차원의 한 점이 카메라의 렌즈를 지나 2차원 평면위의 한 점으로 투영(Projection)된다. 이때 이 평면의 좌표계를 Pixel(Image) Coordinate 이라고 부른다. 일반적으로 좌측 상단 모서리를 기준점으로 잡으며, 가로를 X축 세로를 Y축으로 사용한다.
3D 점과, 그에 대응되는 2D 점을 이은 선을 Ray라고하는데, 이 Ray위에 있는 모든 3D점은 똑같은 2D 좌표로 Projection 된다. 즉 3D 점이 있으면 어느 2D 점에 투영되는지 알 수 있지만, 반대는 불가능하다.
4. Normalized Image Coordinate
가상의 2D 좌표계이다. 카메라로 촬영을 할때, 같은 장면을 같은 카메라 위치와 회전으로 촬영을 해도 찍히는 이미지가 다르다. 내부 파라미터 때문인데, 내부 파라미터는 카메라의 자체의 특성과 설정값으로 이루어져 있다. Normalized Image Coordinate(이하 정규좌표계)는 내부 파라미터의 영향을 없애고 좌표계의 단위를 정규화한 좌표계이다. 직관적으로 표현하면 이미지 평면을 이동시켜서 Focal Length가 1인 지점으로 옮긴것인데. 자세한 내용은 다음글인 변환에서 자세히 설명한다.
2. Camera Paramter
피사의 사탑 사진을 생각해보면 [위도, 경도, 해발고도](Wolrd Coordinate) 위에서 피사의 사탑 위치는 항상 같을 것이다.(기울어져서 달라질수도 있겠지만 그건 논외..) 그러나, 피사의 사탑을 찍은 사진은 정확히 동일한 시점에 찍어도 정말 다양한 사진이 나올 수 있다.
이는 크게 두 가지 요인 때문인데, (1) 카메라의 위치와, 렌즈의 회전정도에 따라 Camera Coordinate에서 피사의 사탑 좌표가 바뀌고 (2) Camera Coordinate에서 Image Plane으로 Projection될 때 초점거리(줌)과 주점의 좌표에 따라 Projection 되는 이미지가 달라지기 때문이다.
영상 처리에선 이런 요인들을 외부와 내부로 나눠 (1) Extrinsic Parameter (2) Intrinsic Parameter로 정의한다.
1. Extrinsic Parameter
Extrinsic Parameter는 World Coordinate간 Camera Coordinate 변환을 결정하기 위한 파라미터들이다. 두 좌표계 사이의 회전()과 평행이동로 이루어져 있는데, 카메라의 위치&방향과 World 좌표계의 기준점과 축에 따라 달라진다. 주로 4x4 행렬로 표현되는데 수식은 다음과 같다.
은 World에서의 Camera 방향을 의미한다. 위의 사진을 예를들면, World와 Camera의 축 방향 자체가 다르기 때문에, World의 점을 Camera 좌표계에서의 점으로 바꾸려면 회전이 필요하다. 이때의 회전 정도를 Rotation Matrix인 으로 표현한다.
는 Camera 자체의 좌표(Cam Translation)로 자주 헷갈리곤 하는데 (내가 그랬다.) 정확히는 Camera 좌표계에서 World의 기준점 위치이다. World에서의 Cam Translation을 얻고싶으면 다음의 식을 사용하면 된다.
2. Intrinsic Parameter
Intrinsic Parameter는 카메라 자체의 내부적인 파라미터들이며, Image Coordinate으로 Projection할 때 주로 사용된다. 내부 파라미터는 (1) Focal Length, (2) Principal Point (3), Skew Coefficient로 이루어져있으며, 3x4 행렬로 표현된다. 가끔 마지막 열을 제거한 3x3 행렬로도 표현된다.
1.
Focal Length
렌즈의 중심과 이미지 센서 사이의 거리이며, 로 표현된다. 이 때의 단위는 Pixel이다.
2.
Principal Point
렌즈의 중심에서 이미지 센서에 내린 수선의 발의 픽셀 좌표이며 로 표현된다. 이미지 중심과 다를 수도 있다.
3.
Skew Coefficient
이미지 센서의 축이 기울어 있는 정도이며 로 나타낸다. 대부분의 현대 카메라는 이다.
3. Conclusion
이번 글에선 3D Joint의 Transfomation과 Projection을 하기위해서 필수적으로 이해해야하는 Coordinate과 Parameter에 대해 다루었다. 다음 글에선 Parameter Matrix를 통해 Coordinate간 변환을 하는 방법과 그 코드에 대해 다룰 예정이다.
참고한 글 :