Processing math: 18%

2013년 10월 26일 토요일

공간점의 깊이

공간 상의 한 점은 카메라 주축 면의 앞이나 뒤에 놓일 수 있다.

카메라 행렬

P = [M | p_4]=[P_1^T; P_2^T; P_3^T]
(단, 여기서 P_3는 3x4 크기의 P행렬의 3번째 행으로 1x4의 크기 벡터인 [p_{31}, p_{32}, p_{33}, p_{34}]^T이다.) 

에 의해 공간 점 X=(X,Y,Z,1)^T=(X_t, 1)^T은 이미지 점 

x=w(x,y,1)^T=PX

로 사영된다. 

카메라 중심은 C=(C_t, 1)^T이다.  카메라 중심의 사영은 PC=0이기 때문에

w=P_3^TX=P_3^T(X-C)

이다(즉, PC=0 \rightarrow P_3^T C=0이다). 여기서

P_3^T(X-C)=m_3^T(X_t-C_t)

이고 여기서 m_3는 주축선이다.
(즉, P_3^T(X-C)=P_3^T[\binom{X_t}{1}-\binom{C_t}{1}]=[m_3^T, p_{34}][\binom{X_t}{1}-\binom{C_t}{1}]=[m_3^T, p_{34}][\binom{X_t-C_t}{0}]이다)

따라서 공간 점의 깊이는 

w=m_3^T(X_t-C_t)

이다.
(동차좌표 표현에서 X의 4번째 항이 1이 아니고 T라면 X_t=X/T이다. 따라서 w의 크기는 T에 영향을 받는다.
다시 말해서, X_tC_t는 정규화가 안되었을 수 있다. 즉, 동차좌표의 마지막 항이 1이 아니고 T일 수도 있다. 따라서, T로 나누어 정규화하는 것이 필요하다 \rightarrow 나중에 X_tC_tT로 나누어 주고, m_3^T는 자신의 norm에 의해 나누어 준다.)
w는 카메라 원점에서 공간 점을 향하는 선과 주축 선의 내적이다.  

카메라 행렬은 스케일 모호성이 있기 때문에 m_3X_t, C_t처럼 정규화 되어야 한다. 

det(M)>0,
||m_3||=1

로 정규화 시키면 m_3는 양의 단위벡터이다. (MP행렬의 앞 3x3 부분으로 회전 행렬에 대응한다. 따라서 det(M)은 회전 행렬의 방향을 의미한다.)

정리하면 

w(x, y, 1)^T=P(X, Y, Z, T)^T

일때 

depth(X; P)=( sign(det M)w )/( T||m_3|| )

이다. 여기서 T, ||m||는 XP의 크기 정규화를 의미한다. sign(det M)은 회전행렬의 방향 정규화이다.
(결국, depthw의 값이다. 그런데 sign(det M)은 의해 회전 행렬의 방향에 따라 +1 또는 -1이 될 수 있다.   T와 ||m_3||는 w의 계산에 사용되는 m_3, X_t, C_t의 정규화를 위한 값이다.)

depth 값으로 공간점 X가 카메라 앞에 있는지를 일관적으로 결정할 수 있다.  





댓글 1개:

  1. 안녕하세요 Geometry에 대하여 공부하는 학생입니다.
    Rotation과 Translation으로 이루어진 4개의 솔루션중 한가지의 correct solution을 찾기 위하여 서치를 하다가 여기까지 오게 되었습니다.

    혹여나 시간이 되신다면 위에 적혀있는 w 와 m의 정의에 대해 쉽게 설명해 주실수 있으신지요 또한 이둘의 관계식도 알려주시면 감사하겠습니다

    답글삭제