MATLAB Answers

Homography Matrix

Asked by Tejas Kulkarni on 15 Jan 2012

Can somebody please help me in understanding how to calculate an homography matrix in matlab.

  1 Comment

Lalit Patil on 22 Jan 2013

I am finding homography matrix in another way and it is 3*3

So, i want to know that in image where to apply or what to do of this homography matrix.?

Why we are finding this matrix..?


No products are associated with this question.

1 Answer

Answer by David Young
on 15 Jan 2012

You don't say what you are starting from. If you have a set of matched input and output points, one possible method is given here. A simple implementation is below.

function v = homography_solve(pin, pout)
% HOMOGRAPHY_SOLVE finds a homography from point pairs
%   V = HOMOGRAPHY_SOLVE(PIN, POUT) takes a 2xN matrix of input vectors and
%   a 2xN matrix of output vectors, and returns the homogeneous
%   transformation matrix that maps the inputs to the outputs, to some
%   approximation if there is noise.
%   This uses the SVD method of
% David Young, University of Sussex, February 2008
if ~isequal(size(pin), size(pout))
    error('Points matrices different sizes');
if size(pin, 1) ~= 2
    error('Points matrices must have two rows');
n = size(pin, 2);
if n < 4
    error('Need at least 4 matching points');
% Solve equations using SVD
x = pout(1, :); y = pout(2,:); X = pin(1,:); Y = pin(2,:);
rows0 = zeros(3, n);
rowsXY = -[X; Y; ones(1,n)];
hx = [rowsXY; rows0; x.*X; x.*Y; x];
hy = [rows0; rowsXY; y.*X; y.*Y; y];
h = [hx hy];
if n == 4
    [U, ~, ~] = svd(h);
    [U, ~, ~] = svd(h, 'econ');
v = (reshape(U(:,9), 3, 3)).';

If your initial data is in some other form, such as camera position parameters relative to the plane, please say.

EDIT - added:

To apply the resulting matrix to a set of points, you can use the following function.

function y = homography_transform(x, v)
% HOMOGRAPHY_TRANSFORM applies homographic transform to vectors
%   Y = HOMOGRAPHY_TRANSFORM(X, V) takes a 2xN matrix, each column of which
%   gives the position of a point in a plane. It returns a 2xN matrix whose
%   columns are the input vectors transformed according to the homography
%   V, represented as a 3x3 homogeneous matrix.
q = v * [x; ones(1, size(x,2))];
p = q(3,:);
y = [q(1,:)./p; q(2,:)./p];


Jason Rebello
on 23 Sep 2012

Hi, First of all thanks for the code it really helped. But can you explain to me why exactly are u reshaping only the last column. Im new to matlab so I dont really pick up on things fast. v = (reshape(U(:,9), 3, 3)).'; ?? Thanks, Jason

Erez Farhan
on 14 Jun 2013

Hi, David- thanks for your post. Please note: I believe your solution doesn't account for normalization of the homography matrix- which can be done by dividing it by it's second singular value.

on 19 Jun 2013

can this be applied for 2D to 3D projection??

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply today