TP-vision/homographie.m
2023-06-25 16:42:57 +02:00

49 lines
2 KiB
Matlab

% Estimation d'une matrice d'homographie H qui permet de passer d'une
% image I1 a une autre image I2 a partir de paires de points (homologues)
%
% H = [ h11 h12 h13 ; h21 h22 h23 ; h31 h32 h33 ]
% H possede 8 parametres independants.
% Chaque correspondance donne 2 equations.
% Ainsi pour estimer H, il faut au moins 4 paires de points.
%
% Il existe differentes manieres d'estimer H.
% Nous choisissons la resolution sous la contrainte ||h33|| = 1,
% au sens des moindres carres.
function [H] = homographie(XY_C1, XY_C2)
% Entrees :
%
% XY_C1 : matrice (NbPointsx2) contenant les coordonnees des Nbpoints dans l'image I1
% XY_C2 : matrice (NbPointsx2) contenant les coordonnees des Nbpoints HOMOLOGUES dans l'image I2
% (colonne 1 : les x, colonne 2 : les y)
%
% Sortie :
% H : la matrice d'homographie estimee
% Les parametres hij de la matrice d'homographie H sont ranges dans
% un vecteur : H = [ h11 ... h33 ]' tel que
% A * H = 0
% avec A qui depend des coordonnees de paires homologues, cf. equation (2)
% A = ( XY_C1(1,1) XY_C1(1,2) 1 0 0 0 -XY_C1(1,1)*XY_C2(1,1) -XY_C1(1,2)*XY_C2(1,1) -XY_C2(1,1)
% 0 0 0 XY_C1(1,1) XY_C1(1,2) 1 -XY_C1(1,1)*XY_C2(1,2) -XY_C1(1,2)*XY_C2(1,2) -XY_C2(1,2)
% ... etc ... )
% Stocker dans une variable le nombre de points apparies
N = size(XY_C1, 1);
% Construction des matrices/vecteurs utiles pour construire la matrice A
A = [
XY_C1(:, 1:2), ones(N, 1), zeros(N, 3), -XY_C2(:, 1) .* XY_C1(:, 1), -XY_C2(:, 1) .* XY_C1(:, 2), -XY_C2(:, 1);
zeros(N, 3), XY_C1(:, 1:2), ones(N, 1), -XY_C2(:, 2) .* XY_C1(:, 1), -XY_C2(:, 2) .* XY_C1(:, 2), -XY_C2(:, 2)
];
% Estimation des parametres de H par decomposition en valeurs singulieres
% Utiliser la fonction matlab svd :
% H est le vecteur propre associee a la plus petite valeur propre de A^TA
[~, ~, V] = svd(A' * A);
H = V(:, end);
% Former la matrice H de taille 3x3
H = reshape(H, 3, 3)';
end