camera projection matrix : 3D space의 point --> 2D image plane 변환

모두 동차좌표계로 나타냄

 

변환의 두 factor : camera rotation & translation, pixel transformation/camera calibration matrix K

 

" 사진을 바라보되, 단순히 2D 이미지가 아니라 사람 앞에 카메라가 놓여 있다고 생각. 사람은 picture를 통해서 세상을 바라고 보고 있음. 2D plane의 점들에 있어서, 카메라맨과 그 점 사이에 선을 형성함. 그 ray는 3D space 에서 ray를 형성하고, 그 ray 의 집합은 physical space 의 평행선 집합에 해당하며, 무한대의 동일한 지점에 모두 수렴함. 그 무한대 점들이 2D plane으로 돌아와 project될 때, 동일한 점에 project 되는데, 그것이 소실점임."

 

 

두 개의 좌표계가 있음

1) 3rd person perspective, world cooridinate system

2) 1st person perspective, my coordinate system

-  world에 대해서 fist person perspective 으로서 어디에 위치하는지

- space에서 어디를 향하고 있는지(oriented), world coordinate system에 상대적으로 XY포지션이 어떻게 되는지

- 즉, "where are we in the space?"

 

 

rotation matrix 를 어떻게 recover 할 수 있을까? 

- translation 은 일단 무시하고, vanishing point를 활용한다

- rotation matrix에는 3차원의 방향이 있는데, 3D space에서 모든 축에 대한 상대적인 각도를 알아야 함

 

- vanishing point z in 3D world coordinate system

     - X = 0, Y = 0, Z = 1

     - point at infinity 임을 가리키기 위해 마지막 요소는 0

     --> (0, 0, 1, 0)

- vanishing point z in 2D image

     - z 방향이인 선들의 교차점에 의해 형성됨

     - finite coordinate system 에서의 한 점 = vz

 

우측 하단 수식 확인

- z point at infinity 가 (0, 0, 1, 0) 이기 때문에 rotation matrix의 두 요소와 translation을 제거하게 됨: r3만 남음

- 즉, camera projection matrix의 네 열 중 세 열을 제거하게 됨

--> matrix K 가 r3(rotation의 세번째 열) 을 변형하는 것이 됨

--> 3D에서 Z 방향의 3차원 축이 있을 때, 이를 pixel space로 이미지화 하면 이 소실점을 xy 위치로 보게 됨; 다른 angle들, translation까지 사라짐

- 만약 카메라를 좌우상하로 움직여도 동일한 소실점은 그대로 유지

 

- r3를 구하기 위해서는 K 역행렬로 xy공간의 pixel 을 변환

     - 이때 r3은 rotation matrix의 열이므로 "so it must have a normed one (?)"

     - 이 벡터를 denormallize(비정규화) 하여 r3을 구할 수 있음

- 이 r3은 무슨 의미일까?

 

pan, tilt, yaw 용어 관련한 참고 자료!

"Some of you might be familiar with the pan-tilt-yaw representation rotation. If I were flying a plane, I can see myself panning around, tilting up and down, and yawing in space."

 

world의 z축은 camera pan과 tilt 에 의해 transform 된다

α - pan

β - tilt

 

r3은 α, β 관점에서 아래 벡터와 같이 표현된다

 

한편, yaw angle(rotation around z axis)도 평행선 집합으로 알아낼 수 있을까? no

- 왜냐하면 z 방향의 소실점이 주어졌을 때 소실점 z가 움직인다고 볼 수 없기 때문(?)

 

rotation의 모든 세 각도를 알아내기 위해서는 수직하는 두 소실점을 알아야 한다.

 

- 가로로 가로질러 가는 도로로 나타내지는 소실점이 하나 더 있음 -> x 방향으로 가는 소실점 형성

- r3 : vz 로 구할 수 있음 (z축 대응)

- r1 : K역행렬로 변환한 vx (x축 대응)

- x축과 z축이 수직 관계이므로

---> r2 = r1 * r3

-----> 두 개의 소실점을 통해 rotation matrix 를 완전히 복구함

 

- 역행렬 K 변환을 통해서 2D pixel coordinates를 optical world 에서 optical ray에 해당하는 ray 로 변환할 수 있음

- "Now we have a scale factor Z which needs to be taken out and this is easily done, because we know all the three columns r1, r2, r3 have normal one"

- normal one 갖도록 r1, r2, r3을 renormalize함

 

[Exercises]

- 수평선 방향으로 소실점을 계산할 수 있으며, K 역행렬을 통해 소실점을 pixel coordinates에서 optical coordinates으로 변환할 수 있음

- y 방향으로도 소실점 계산

 

- norm one 갖도록 정규화 --> rotation matrix의 열들을 구했음

- 물리세계에서 서로 수직하는 선들이 필요함

 

--> rotation matrix의 모든 열값을 가지는 상태에서 camera pan-tilt 등 물리적 의미를 구할 수 있음

 

 

물리세계에서의 수직하는 두 선을 통해 world에 대한 camera의 상대적인 방향 구하기

 

여기에 더해 translation, 즉 카메라의 위치도 구할 수 있을까?

 

translation vector t도 구해보자

 

3D 세계를 보는 대신에 ground plane 을 바라보기로 함

이 경우 world coordinates는 (X, Y, 0, 1)이며 image로 project되었을 때는 동차좌표 (u, v, 1)

--> rotation 에서는 r3가 제거됨

 

homography matrix H = K * r1, r2, t 

 

H토타는 physical ground plane의 4 points 그리고 그에 상응하는 image plane 4 points로 근사할 수 있음

H토타를 구하면 rotation, translation을 추적, 구할 수 있음

 

H토타에 K 역행렬 취하면 optical world 로 돌아가 H가 됨

- 즉, H = [r1, r2, t]

- 이때 r1, r2의 norm은 1

- r1, r2의 정규화를 통해 t 벡터를 찾을 수 있음 

 

'인공지능 > pose estimation' 카테고리의 다른 글

ROMP 이해하기  (0) 2022.08.10
Impersonator++ 이해하기  (0) 2022.08.10
Camera Calibration  (0) 2022.05.11
How to Compute Intrinsics from Vanishing Points  (0) 2022.05.11
3D World to First Person Transformation  (0) 2022.05.10
복사했습니다!