1) Translation
[x′y′]=[xy]+[txty]
2) Rotation
[x′y′]=[cosθsinθ−sinθcosθ][xy]
3) Scaling
[x′y′]=[s00s][xy]
4) Shearing
[x′y′]=[1λ01][xy]
[x′y′]=[cosθsinθ−sinθcosθ][xy]+[txty]
[x′y′]=[ab−ba][xy]+[cd]
[x′y′]=[scosθssinθ−ssinθscosθ][xy]+[txty]
[x′y′]=[ab−ba][xy]+[cd]
[x′y′]=[acbd][xy]+[ef]
2. Pseudo Inverse
대응되는 (x,y), (x′,y′)이 주어졌을 때, transformation의 parameter를 찾기 위해 pseudo inverse를 이용한다.
[x′y′]=[ab−ba][xy]+[cd]
a=scosθ
b=ssinθ
위 식을 (x′,y′)에 대해 정리하면 식은 다음과 같다.
x′=ax−by+c
y′=bx+ay+d
만약 n개의 대응되는 (x,y), (x′,y′)이 주어졌을 때, 다음과 같이 식을 표현할 수 있다.
⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡x1y1x2y2⋮xnyn−y1x1−y2x2⋮−ynxn1010⋮100101⋮01⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎡abcd⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡x1′y1′x2′y2′⋮xn′yn′⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
위 식을 치환하면 AX=B로 간단하게 표현할 수 있으며 A의 역행렬이 존재하면 transformation parameter X를 구할 수 있게 된다.
이 때, A는 정방행렬이 아니므로 일반적인 방법으로는 역행렬을 구할 수 없다. 그러므로 pseudo inverse로 근사 값의 역행렬을 구한다.
X=A+B
X=(ATA)−1ATB
만약 (ATA)의 역행렬도 존재하지 않는다면 SVD를 이용한다.
A=U∑VT
U∑VTX=B
(V∑+UT)(U∑VT)X=(V∑+UT)B
X=(V∑+UT)B
Affine transformation도 동일하게 pseudo inverse로 transformation parameter를 구할 수 있다.
[x′y′]=[acbd][xy]+[ef]
x′=ax+by+e
y′=cx+dy+f
⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡x10x20⋮xn0y10y20⋮yn00x10x2⋮0xn0y10y2⋮0yn1010⋮100101⋮01⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎢⎡abcdef⎦⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡x1′y1′x2′y2′⋮xn′yn′⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
X=A+B
X=(ATA)−1ATB
1) Translation
⎣⎢⎡cosθsinθ0−sinθcosθ0001⎦⎥⎤
2) Rotation
⎣⎢⎡100010txty1⎦⎥⎤
3) Scaling
⎣⎢⎡sx000sy0001⎦⎥⎤
4) Shearing
⎣⎢⎡1λ0010001⎦⎥⎤
⎣⎢⎡x′y′1⎦⎥⎤=⎣⎢⎡ab0−ba0cd1⎦⎥⎤⎣⎢⎡xy1⎦⎥⎤
⎣⎢⎡x′y′1⎦⎥⎤=⎣⎢⎡ac0bd0ef1⎦⎥⎤⎣⎢⎡xy1⎦⎥⎤