48 lines
1.7 KiB
Matlab
48 lines
1.7 KiB
Matlab
function [XY_C1, XY_C2] = apparier_POI(Im1, XY_1, Im2, XY_2, TailleFenetre, seuil)
|
|
% apparierPOI apparie les points d'interet stockes dans XY_1 et XY_2 entre
|
|
% les images Im1 et Im2 avec une fenetre de correlation de taille
|
|
% TailleFenetre
|
|
% seuil correspond au seuil utilise pour eliminer les erreurs d'appariement
|
|
% XY_C1 et XY_C2 sont les coordonnees des points de l'image 1
|
|
% apparies avec les points XY_C2 de l'image 2
|
|
|
|
% Nombre de points a mettre en correspondance
|
|
NbPoints = size(XY_1, 1);
|
|
|
|
% Calcul de ZNCC
|
|
C = apparier_Points(Im1, XY_1, Im2, XY_2, TailleFenetre);
|
|
C = abs(C);
|
|
|
|
% Recherche par methode WTA (Winner Takes All)
|
|
% Indices des maxima sur les lignes
|
|
[maxI1, ind1_2] = max(C, [], 2);
|
|
ind1_2 = ind1_2(:);
|
|
|
|
% Indices des maxima sur les colonnes
|
|
[~, ind2_1] = max(C, [], 1);
|
|
ind2_1 = ind2_1(:);
|
|
|
|
% Verification de la contrainte de symetrie
|
|
% + seuillage du score de correlation
|
|
% Cette premiere ligne doit etre modifiee pour appliquer les contraintes souhaitees
|
|
ind2ind = ind2_1(ind1_2);
|
|
ind1 = find(maxI1 > seuil & vecnorm(XY_1(ind2ind, :) - XY_1, 2, 2) <= 0);
|
|
% ind1(8) = [];
|
|
|
|
% Cette deuxieme doit etre gardee telle quelle
|
|
ind2 = ind1_2(ind1);
|
|
|
|
% Affichage des appariements
|
|
mesurex1 = XY_1(ind1, 1);
|
|
mesurey1 = XY_1(ind1, 2);
|
|
mesurex2 = XY_2(ind2, 1);
|
|
mesurey2 = XY_2(ind2, 2);
|
|
|
|
figure;
|
|
affichage_appariement(Im1, mesurex1, mesurey1, 'Points d''interet Image 1', 1, 2, 1);
|
|
affichage_appariement(Im2, mesurex2, mesurey2, 'Points d''interet correspondants Image 2', 1, 2, 2);
|
|
|
|
XY_C1 = [mesurex1(:) mesurey1(:)];
|
|
XY_C2 = [mesurex2(:) mesurey2(:)];
|
|
end
|