서울시립대학교 인공지능학과 정지영 교수님의 컴퓨터 비전 개론 수업을 정리함을 미리 알립니다.
Contents
3D 물체를 카메라의 2D 이미지 플레인에 사영하는 방식에 대해 자세히 알아볼 것이다
1. Camera parameters
2. Projective transformation
3. Different projections – canonical, weak perspective, orthographic
Camera parameters (4−1)
1. Euclidean 좌표계에서의 3D -> 2D
핀홀 카메라 그리고 일반적인 Euclidean 좌표계로 사영이다. 좌표계를 맞춰주는 [R|T]는 일단 냅두고, K 즉 켈리브레이션 계산만 봐보자.
1) Z 방향으로 얼마나 떨어졌는지에 따라 비율로 줄이고(Perspective), 초점 거리 f를 곱해서 이미지 평면에 맞는 크기로 스케일링한다.
2) 이미지의 중심을 고려하여, 실제 센서 상의 중심 즉 Optical axis를 통과하는 중심으로 옮겨준다. # Off-set
3) 3D에서 m혹은 mm 단위를 이미지에서의 픽셀 단위로 조정하기 위해 k, l을 곱해준다. -> 여기서 보통 픽셀이 직사각형이 아니라서 k와 l이 같은 값이 되고, 즉 알파와 베타는 같은 값이 된다.
뭐 간단하다. 근데 여기서 문제가 발생한다. 이게 과연 선형 변환일까?
-> 아니다. z로 나눠주기에 이건 선형 계산이라고 할 수 없다. 행렬 곱은 항상 선형 변환만 표현할 수 있기 때문에 우리는 이걸 행렬 곱으로 표현할 수 없다.
이 때 사용되는 것이 바로 Homogeneous coordinates이다. 우리는 이 좌표계를 사용하므로써 이 3D -> 2D 사영 과정을 행렬 곱으로 표현할 수 있게 된다.
2. Projective transformation in the homogeneous coordinate system # 일단 K[I|0]
homogeneous coordinate system를 사용하게 되면 위와 같은 행렬 M을 통해 표현할 수 있게 된다. 이 경우 M = K[I|O]인 경우 즉 카메라 기준 좌표계와 세계 좌표계가 일치하는 경우이다. 즉 순수하게 K[I|0]만 일단 보자는 거다.
cf. 최종 M = K[R|T] = KR[T|-C]였다. 모르겠다면 2장가서 다시 보고 오자.... 좌표계가 일치했다고 가정하니까 R = I, C = 0인거다.
homo 좌표에서 유클리디언 좌표로 넘어가는 과정에서 자연스럽게 z값을 나누게 되고, 이 때 모든게 완벽하게 적용된다.
이 때 센서가 광축 optical axis에 수직으로 장착되지 않았을 때 발생하는 왜곡인 skewness를 고려해줄 수 있다. 다음이 바로 최종 행렬 K이다. 계속 말하지만 K[I | 0]으로도 표현할 수 있음을 잘 알고 있어야한다.
K는 그냥 3X3이다. 근데 얘만 있는게 아니라 K[IO]가 세트임을 꼭 알고 있어야한다. 좌표 변환이 필요한 경우 I, 0 자리에 성분이 추가된다.
이 때 켈리브레이션 행렬 K의 자유도 Degrees of freedom은 α, β, Θ, Cx, Cy 총 5이다.
K의 파라미터 종류 및 의미 α: 픽셀 단위의 Focal Length β: 픽셀 단위의 Focal Length Θ: 옵티컬 축과 센서 평면 사이의 각도. 직각이어야 틀어져 있지 않은 것임 Cx: 이미지의 중심 좌표 principal point Cy: 이미지의 중심 좌표 principal point
일반적으로 다음과 같은 파라미터를 생략할 수 있다. Θ = 90도: 센서 플레인과 옵티컬 축이 직각으로 잘 맞물려있는 경우 α = β: x와 y 방향 픽셀 크기가 같다고 가정 즉 정사각형 픽셀 -> 3개의 파라미터만 남긴다.
K[I|O]까지 봤다. 계속 기억하자. 이건 카메라 좌표계 = 세계 좌표계라 K[I|O]다.
3. World reference system # 세계 좌표계와 카메라 좌표계를 일치시켜주기
카메라를 한 대만 사용할 때는 카메라 기준 좌표계를 세계 좌표계와 일치 시켜서 편하게 M = K[I|0]만 사용해서 사영을 표현할 수 있다. 하지만... 만약에 카메라가 한 대 더 추가되면 어떨까?
1번 카메라는 계속 K[I]0] 써서 사영하면 된다. 하지만 카메라 2번은 K[R❘T]를 사용해야한다. 물론 카메라마다 K도 다르긴하다 ㅇㅇ...
물체는 1번 카메라의 좌표계 즉 일치된 세계 좌표계 기준으로 표현될 것이다. 이 좌표를 그대로 사용하면 사영에 오류가 발생한다.
그렇기에 우리는 이를 새로운 카메라 좌표계로 바꿔줄 필요가 있다. 이 때 사용하는게 바로 [R|T]이다. 아래 4번 연산을 한 번 보고 오자.
*******주의! 헷갈리는 점******
우린 월드 좌표계 기준을 이동하고, 정렬을 위해 회전해준다! 이걸 잘 기억하자. # 이동 -> 회전
K[I|0]는 고정이다! 즉 3D -> 2D 과정은 K[I|0]이 고정이다. 좌표계를 바꾸고 싶다면 연산들을 추가하는 것이다. # K[I|O] 뒤 추가
기억하자 세계를 카메라 기준에 맞게 옮기는 거다. 카메라가 중심이다.
결과 K[R|T] 행렬이 만들어졌다. -RC = T로 치환하라.
총 자유도는 11이다. K에 5개, 그리고 회전과 이동에 관련하여 R에 3개, T에 3개가 있었다.
4. homogeneous coordinates를 사용한 2D 선형 변환 행렬
뭐하나 싶겠지만... 2D에서 자주 하던 이동, 스케일링, 회전을 homogeneous 좌표 시스템에서 표현해보는 것이다. 이를 확장해서 3D에서도 적용해보면서 결국 세계 좌표계 기준을 카메라 좌표계 기준으로 바꾸기 위한 [R|T] = R[I |0] 행렬을 구하게 된다.
1) 2D translation, 자유도 2
ㅇㅇ.. 이건 중학교에서 배운다. 이걸 이제 homogeneous coordinates로 표현해보자.
2) 2D Scaling, 자유도 2 -> Sx = Sy이면 자유도 1
S
3) 2D Rotation, 자유도 1
반시계가 국룰이다.
이를 한 번에 표현하면 다음과 같은 하나의 행렬로 표현할 수 있다. 연산의 순서가 바뀌면 결과가 달라질 수 있으므로 연산 순서는 스케일링 -> 회전 -> 이동임을 기억하고 있자. # 스 회 이
최종 행렬
5. homogeneous coordinates를 사용한 3D 선형 변환 행렬
계속 말하지만 우리는 3번에서 본 [R|T] 즉 세계 좌표를 카메라 기준 좌표로 바꾸기 위한 선형 변환들을 보고 있다. 이걸 다 보면 3번으로 돌아가서 이해해보자. 3D에서는 스케일링은 주로 일어나지 않기에 이동과 회전만 보고 넘어가자. 2D랑 크게 다르진 않다.
1) 3D Translation, 자유도 3, 4X4
2) 3D rotation of points, 자유도 3, 4X4
이게 좀 다르다. 왜 회전 행렬인데 자유도가 3일까? Pitch(X), yaw(Y), roll(Z) 기준의 각도 3개를 모두 생각해야하기 때문이다.
Properties of Projective transformation (4−2)
1. Properties of projective transformation**
좌: 평행한 직선 쌍이 같은 소실점에서 만나는 사진 / 우: Horizon Line 예시
1) Points project to points # 점은 점으로 사영된다 2) Lines project to lines # 선은 선으로 사용된다 3) Distant objects look smaller # 먼 거리 물체는 작아진다 4) Angles are not preserved # 각도는 보존되지 않는다 5) Parallel lines meet # 평행 선은 만난다 -> "평행한 직선 쌍"은 한 점 Vanishing point에서 모인다. -> 이 무한대의 점을 Ideal Points 이상점 혹은 Vanishing Point 이라고 한다. x,y,0T로 표현한다. -> 모든 이상점은 하나의 선 Line at Infinity = Horizion/ Vanish line 위에 놓인다.
그림을 그릴 때 가상의 소실점을 잡고 그림을 그리면 잘 그려진다 ㅇㅇ. 이걸 One-Point Perspective라고 한다.
2. 열 벡터로 간단하게 표현하기
이제 모든 사영 행렬 M = K[R|T]를 알게 되었다. 이 행렬은 3X4 행렬이다. 이를 열 벡터를 사용하여 간단하게도 표현할 수 있다.
만약 좌표계도 일치하고, K 행렬이 포컬 랭스 요소만 포함한다면 아래와 같이 간단하다면 다음과 같이 표현할 수도 있다.
Different projections – canonical, weak(=para) perspective, orthographic (4−3)
2장에서 직교 사영, 스케일 직교사영, para perspective 등을 공부했었다. 이걸 좀 더 집중해서 알아보자.
1. Canonical Projective Transformation
2. Weak perspective projection
장면의 깊이 변화가 카메라로 부터의 거리에 비해 작을 때 사용할 수 있다.
m3과 변환 전 좌표를 내적하면 1이 나올 것이다. 즉 homo z 성분이 1이 나올 것이고 나눠도 같다 ㅇㅇ..
이렇게 하면 Z 값에 따라 X, Y값이 영향 받지 않으므로 즉 깊이에 따라 영향 받지 않으므로 그냥 다 같이 있는 것 처럼 사영된다.
멀리 있던 가까이 있던 ㅇㅇ 그냥 다 같은 크기로 사영한다.. 즉 깊이에 따른 스케일링이 없는 것이다.