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

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