Given Three Points Compute Affine Transformation

awhipp picture awhipp · Apr 9, 2014 · Viewed 16.9k times · Source

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.

Answer

Shai picture Shai · Apr 9, 2014

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!