## Homography Matrix

### Tejas Kulkarni (view profile)

on 15 Jan 2012
Latest activity Commented on by sushanth kalva

on 9 May 2016

Lalit Patil

### Lalit Patil (view profile)

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..?

## Products

No products are associated with this question.

### David Young (view profile)

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
%   http://www.robots.ox.ac.uk/%7Evgg/presentations/bmvc97/criminispaper/node3.html
% David Young, University of Sussex, February 2008
if ~isequal(size(pin), size(pout))
error('Points matrices different sizes');
end
if size(pin, 1) ~= 2
error('Points matrices must have two rows');
end
n = size(pin, 2);
if n < 4
error('Need at least 4 matching points');
end
% 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);
else
[U, ~, ~] = svd(h, 'econ');
end
v = (reshape(U(:,9), 3, 3)).';
end

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

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];
end

Erez Farhan

### Erez Farhan (view profile)

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.

pankhuri

### pankhuri (view profile)

on 19 Jun 2013

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

sushanth kalva

### sushanth kalva (view profile)

on 9 May 2016

i want to know the difference between transformation matrix and homography matrix

#### Join the 15-year community celebration.

Play games and win prizes!

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi