## September – Homography

Homography can be used to “change the perspective” of an image (set of vectors). I have used homography for the satellite footprint in my simulations: for elevation angles smaller than you can conveniently map transmitters inside the elliptical footprint to a circle for which the radially symmetric antenna pattern function can be used. The following homography matrix transforms an ellipse of parameters and to a circle of radius so that the right focus point maps to origo.  Here is a GNU Octave code:

%%Changes ellipses with parameters a > b  perspective to a sphere of radius r centered in origo. Vectors to be transformed are given in 2x1000 matrix refc.

function points = homography(refc, a,b,r)
c = sqrt(a^2 - b^2);
%%Construct the homography matrix.
X1 = [[-a -0 -1 0 0 0 a*r 0*r r]; [0 0 0 -a -0 -1 a*0 0*0 0]];
X2 = [[-c -b^2/a -1 0 0 0 c*0 b^2/a*0 0]; [0 0 0 -c -b^2/a -1 c*r b^2/a*r r]];
X3 = [[a 0 -1 0 0 0 -a*-r 0*-r -r]; [0 0 0 a -0 -1 -a*0 0*0 0]];
X4 = [[-c b^2/a -1 0 0 0 c*0 -b^2/a*0 0]; [0 0 0 -c b^2/a -1 c*-r b^2/a*r -r]];
P = [X1; X2; X3; X4];
[U,S,V] = svd(P); %Singular value composition.
h = V(:,9);
H = reshape(h, 3, 3)';
points = [];
for point = refc
homopoint = [point; 1]; %Point presented in homogeneous coordinates.
homopoint = H*homopoint;
homopoint = [homopoint(1)/homopoint(3); homopoint(2)/homopoint(3)];
points = [points homopoint];
end
figure(1)
plot(points(1,:), points(2,:), 'b','linewidth',10);
end


In the following, we are rotating a “pyramid”. It can be seen how the homography mapping can be interpreted as a change of perspective. References: