TP-probleme-inverse-3D/TP3/exercice_2.m
2023-06-25 16:38:01 +02:00

50 lines
1.3 KiB
Matlab

clear;
close all;
% Lecture des données :
load lapin;
valeurs_z = 1.5:0.002:2.5;
k_ref = 1; % Indice de l'image de référence
nb_images = size(I,3);
% Affichage des images :
figure('Name','Images');
for k = 1:nb_images
subplot(2,ceil(nb_images/2),k);
imagesc(I(:,:,k));
colormap gray;
axis equal;
axis off;
if k<k_ref
title(['Image I_{' num2str(k) '}'],'FontSize',15);
elseif k==k_ref
title('Image I_{ref}','FontSize',15);
else
title(['Image I_{' num2str(k-1) '}'],'FontSize',15);
end
end
drawnow;
% Érosion du masque de l'image de référence (pour tenir compte des fenêtres 3 x 3) :
masque_ref = masque(:,:,k_ref); % Masque de l'image de référence
masque_ref_9 = pretraitement(masque_ref);
masque_ref = sum(masque_ref_9,3);
masque_ref = masque_ref>=9;
% Calcul de l'erreur de reprojection :
erreur_reprojection = MVS_2(I,k_ref,masque_ref,K,R,t,valeurs_z);
% Affichage de l'erreur de reprojection en fonction de la profondeur :
figure('Name','Erreur de reprojection');
imagesc(erreur_reprojection);
xlabel('Valeur de la profondeur','FontSize',20);
ylabel('Indice du pixel','FontSize',20);
input('Tapez Entree pour afficher le relief reconstruit !');
% Affichage de la reconstruction 3D :
figure('Name','Reconstruction 3D');
[~,indices_min] = min(erreur_reprojection,[],2);
z = transpose(valeurs_z(indices_min));
affichage_surface(masque_ref,K,z);