clear; close all; taille_ecran = get(0,'ScreenSize'); L = taille_ecran(3); H = taille_ecran(4); % Choix des images : % dossierImages = 'Gargouille/'; dossierImages = 'Fontaine/'; im1 = 1; im2 = 2; % ext = '.JPG'; ext = '.png'; % Redimensionnement des images : facteur = 1; % Images à la verticale : % verticale = 1; verticale = 0; % Utilisation des régions d'intérêt : ROI = 0; % Options : affichage = 1; % 0 pour éviter les affichages nb_p_affiches = 400; % Noms des images : nom_1 = strcat(dossierImages,int2str(im1),ext); nom_2 = strcat(dossierImages,int2str(im2),ext); % Lecture des images : I_1 = imresize(imread(nom_1),facteur); I_2 = imresize(imread(nom_2),facteur); if verticale I_1 = permute(I_1, [2,1,3]); % On inverse lignes et colonnes I_1 = I_1(end:-1:1,:,:); % On remet l'image à l'endroit I_2 = permute(I_2, [2,1,3]); % On inverse lignes et colonnes I_2 = I_2(end:-1:1,:,:); % On remet l'image à l'endroit end % Détection des points d'intérêt : [nb_lignes,nb_colonnes,nb_canaux] = size(I_1); I_1_nvg = rgb2gray(I_1); I_2_nvg = rgb2gray(I_2); if ROI RI_1 = selection_RI(I_1,L,H); p_1 = detectMinEigenFeatures(I_1_nvg,'ROI',RI_1,'MinQuality',0.0001); RI_2 = selection_RI(I_2,L,H); p_2 = detectMinEigenFeatures(I_2_nvg,'ROI',RI_2,'MinQuality',0.0001); else p_1 = detectMinEigenFeatures(I_1_nvg,'MinQuality',0.0001); p_2 = detectMinEigenFeatures(I_2_nvg,'MinQuality',0.0001); end % Affichage des images et des points d'intérêt : if affichage figure('Name','Detection des points d''interet','Position',[0.1*L,0.4*H,0.8*L,0.5*H]); subplot(1,2,1); imagesc(I_1); title('Image gauche','FontSize',20); axis equal; axis off; hold on; plot(p_1.selectStrongest(nb_p_affiches)); subplot(1,2,2); imagesc(I_2); title('Image droite','FontSize',20); axis equal; axis off; hold on; plot(p_2.selectStrongest(nb_p_affiches)); end % Mise en correspondance : traqueur = vision.PointTracker('MaxBidirectionalError',1,'NumPyramidLevels',5); p_1 = p_1.Location; initialize(traqueur,p_1,I_1); [p_2,indices_droite] = step(traqueur,I_2); p_1_apparies = p_1(indices_droite,:); p_2_apparies = p_2(indices_droite,:); nb_paires = size(p_1_apparies,1); % Affichage des appariements : if affichage figure('Name','Mise en correspondance'); pas_affichage = max(floor(nb_paires/nb_p_affiches),1); showMatchedFeatures(I_1,I_2,p_1_apparies(1:pas_affichage:end,:),p_2_apparies(1:pas_affichage:end,:)); end % Paramètres intrinsèques de la caméra : nomFichier = strcat(dossierImages,'matK.mat'); load(nomFichier); if verticale u0 = K(1,3); v0 = K(2,3); K(1,3) = v0; K(2,3) = u0; end if facteur~=1 K = K*facteur; K(3,3) = 1; end inverse_K = inv(K); save('donnees_appariees.mat','K','inverse_K','p_1_apparies','p_2_apparies','nb_paires','I_1','I_2','nb_lignes','nb_colonnes');