1 | function [H] = vgg_H_from_2P_plane(P1,P2, L)
|
---|
2 | %
|
---|
3 | % [H] = vgg_H_from_2P_plane(P, L)
|
---|
4 | % [H] = vgg_H_from_2P_plane(P1, P2, L)
|
---|
5 | %
|
---|
6 | %USAGE 1:
|
---|
7 | % Returns the homography matrix from the plane whos normal is L to the
|
---|
8 | % image whos projection matrix is P. This is useful for mapping two images
|
---|
9 | % of a plane.
|
---|
10 | %USAGE 2:
|
---|
11 | % Given two camera matrices and a plane, returns the homography matrix that
|
---|
12 | % maps points from the first camera onto the second.
|
---|
13 | %
|
---|
14 | %IN:
|
---|
15 | % P,P1,P2 - 3x4 Camera matrix
|
---|
16 | % L - 1x4 Plane normal
|
---|
17 | %
|
---|
18 | %OUT:
|
---|
19 | % H - 3x3 projective homography matrix mapping points from the image
|
---|
20 | % to the world-points on the plane. Note that
|
---|
21 | %
|
---|
22 | %EXAMPLE:
|
---|
23 | % Let P1, P2 be two projection matrices and let L be the normal to
|
---|
24 | % the plane then the homography H=H1*inv(H2) maps points in P2 to
|
---|
25 | % points in P1 where:
|
---|
26 | % H1=vgg_H_from_2P_plane(P1, L)
|
---|
27 | % H2=vgg_H_from_2P_plane(P2, L)
|
---|
28 | % % And this will be the resulting image:
|
---|
29 | % [u,v]=homflow(H, size(i1,1), size(i1,2));
|
---|
30 | % t=imgwarp(i1, u,v);
|
---|
31 | %
|
---|
32 | % An alternative is to use H = P1*vgg_H_from_P_plane(P2,L).
|
---|
33 |
|
---|
34 | % $Id: vgg_H_from_2P_plane.m,v 1.2 2002/02/22 22:30:55 werner Exp $
|
---|
35 | % Yoni, Fri Apr 6 12:44:54 2001
|
---|
36 |
|
---|
37 | if nargin==2
|
---|
38 | P=P1; L=P2;
|
---|
39 |
|
---|
40 | H = P(:,1:3)*L(4) - P(:,4)*L(1:3);
|
---|
41 |
|
---|
42 | elseif nargin==3
|
---|
43 | nL=null(L);
|
---|
44 | H=P2*nL*inv(P1*nL);
|
---|
45 |
|
---|
46 | else
|
---|
47 | error('Wrong number of arguments');
|
---|
48 | end
|
---|