2013년 10월 26일 토요일

Direct Linear Transformation

DLT를 이용하여 공간에서 평면을 또 다른 평면으로 변환 시키는 파라메터를 구해보자.
어떤 선형변환 문제가 있다고 하자:  

$x=Ay$

여기서 $x$, $y$는 known vector이고 $A$ 행렬은 unknown이다.  (사실 이 식에는 스케일 불확실성이 들어가 있다.  엄밀하게는 $x \sim Ay$이다($x$는 $Ay$에 비례, 여기서 ~는 비례관계). 상수를 추가하여 비례를 없애면 $ax = Ay$이다. $a$는 스케일 상수이다.

DLT는 $x$와 $y$ 벡터가 주어질 때, 행렬 $A$를 구하는 방법이다. 
이런 모양은 projective geometry에서 많이 나타난다.  Homography$^{(*)}$

${x'}=Hx$

가 그런 예이다. 


DLT 풀이를 위해 양 변을 곱한다. 

$(x) \times (Ay) = 0$ 

이고 이 식은 같은 벡터  2개를 cross product하면 0이 되므로

$(x) \times (Ay) = (x) \times (x) = 0$

관계식에서 나왔다. 


이 식을 조작하여 

$Bh=0$

으로 만든다. 구하려는 미지수 행렬 $A$ 요소는 $h$ 벡터로 들어 간다.
$h$는 새로 형성된 행렬 $B$의 특이값 분해(SVD: Singular Value Decomposition)로 구한다. 


$(*)$ Homography: 평면상에 있는 점을 또 다른 평면 위 좌표로 바꾸어 준다. 이 변환은 사영 아래에서 plane-to-plane 변환이다. $x'$, $x$는 homogeneous ($3 \times 1$) 벡터이고 Homography 행렬 $H$는 ($3 \times 3$)의 평면 변환 행렬이다. 사영(perspective) 변환이므로 평면의 투사 변환이다. 


(Ex.) 
DLT를 이용하여 $x'=Hx$에서 $H$를 계산해 보자.  여기서, 대응 점 $x$, $x'$ 정보는 알고 있다. 

$x'=(u,v,w)'$이고,  $H=[h1'; h2'; h3']$이다. 

따라서, 

$H \cdot x = [h1'x; h2'x; h3'x]$

이다. 

$H$를 구하기 위해 DLT를 적용하면 

$(x') \times (H \cdot x)=0$

이다.   


$(x') \times H \cdot x = [vh3'x-wh2'x;   wh1'x-uh3'x;   uh2'x-vh1'x]$

이고, $H$를 분리하면

$[0'\  {-wx'}\   vx'; wx'\   0'\  {-ux'}; {-vx'}\  ux'\ 0'] \cdot [h1; h2; h3] = Ah = 0$

이다. $A$ 행렬은 ($3 \times 9$)이고, $h$ 행렬은 ($9 \times 1$)이다. 
그런데 $A$ 행렬의 세번째 행은 1과 2행의 조합으로 만들 수 있다:

$u \times A1+v \times A2=A3$

따라서 $A$ 행렬 세개의 행 중에서 두 개만 선형 독립이고 다음과 같다:

$[0'\  {-wx'}\   vx';   {wx'}\   0'\  {-ux'}] \cdot [h1; h2; h3] = 0$


이 식을 보면 $x$와 $x'$인 하나의 대응쌍에서 $H$에 대한 2개의 수식(constraints: 제한 조건)이 나온다. 

($3 \times 3$) 크기인 $H$ 행렬에는 9개 요소가 있다. 하지만 스케일 불확실성(즉, $H$행렬에 임의 상수를 곱해도 모두 같은 $H$가 될 수 있다)이 있다. 

때문에 마지막 요소 1개를 고정시키면(예를 들면, 마지막 값으로 나머지 8개를 나누면 

$H=[h11\ h12\ h13;\ h21\ h22\ h23;\ h31\ h32\ 1]$

이다) 8개의 요소가 남아 8 자유도가 된다. 


따라서 서로 대응되는 4개의 점이 있다면 8개의 미지수 모두를 결정할 수 있다. 
대응 점 수가 아주 많다면 위 제한 조건식을 행 방향으로 쌓으면 된다.  

A= [0'       -w1x1'    v1x1'; 
     w1x1'     0'       -u1x1'; 
    ------------------------------
       0'       -w2x2'    v2x2'; 
      w2x1'     0'       -u2x2';
     ------------------------------
           ......
            ......                        ]

$n$개의 대응 점이 있다면 $A$행렬의 크기는 ($2n \times 9$)이다. 
$Ah = 0$의 풀이는 $A$를 SVD하여 얻어진 $V$행렬의 마지막 열을 $h$로 취한다.    

[U, D, V] = svd(A)
h = V . (0 0 0...1)'








댓글 1개: