Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Given Three Points Compute Affine Transformation

Tags:

I have two images and found three similar 2D points using a sift. I need to compute the affine transformation between the images. Unfortunately, I missed lecture and the information out there is a little dense for me. What would the general method be for computing this 2x3 matrix?

I have the matrix of points in a 2x3 matrix [x1 y1;x2 y2;x3 y3] but I am lost from there. Thanks for any help.

like image 807
awhipp Avatar asked Apr 09 '14 06:04

awhipp


1 Answers

Usually, an affine transormation of 2D points is experssed as

x' = A*x 

Where x is a three-vector [x; y; 1] of original 2D location and x' is the transformed point. The affine matrix A is

A = [a11 a12 a13;      a21 a22 a23;        0   0   1] 

This form is useful when x and A are known and you wish to recover x'.

However, you can express this relation in a different way. Let

X = [xi yi 1  0  0  0;       0  0 0 xi yi  1 ] 

and a is a column vector

a = [a11; a12; a13; a21; a22; a23] 

Then

X*a = [xi'; yi'] 

Holds for all pairs of corresponding points x_i, x_i'.

This alternative form is very useful when you know the correspondence between pairs of points and you wish to recover the paramters of A.
Stacking all your points in a large matrix X (two rows for each point) you'll have 2*n-by-6 matrix X multiplyied by 6-vector of unknowns a equals a 2*n-by-1 column vector of the stacked corresponding points (denoted by x_prime):

X*a = x_prime 

Solving for a:

a = X \ x_prime 

Recovers the parameters of a in a least-squares sense.

Good luck and stop skipping class!

like image 165
Shai Avatar answered Nov 15 '22 14:11

Shai