117 lines
2.8 KiB
Mathematica
117 lines
2.8 KiB
Mathematica
|
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');
|