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

48 lines
1.4 KiB
Matlab
Raw Permalink Blame History

clear;
close all;
taille_ecran = get(0,'ScreenSize');
L = taille_ecran(3);
H = taille_ecran(4);
% Lecture et affichage de l'image :
I = imread('Lena.png');
pas_decimation = 6;
I = I(1:pas_decimation:end,1:pas_decimation:end,:); % DŽcimation de l'image
I = double(rgb2gray(I));
[nb_lignes,nb_colonnes] = size(I);
nb_pixels = nb_lignes*nb_colonnes;
figure('Name','Image originale','Position',[0,0,0.5*L,0.7*H]);
imagesc(I);
axis equal;
axis off;
hold on;
colormap gray;
drawnow;
% Indices absolus des paires de pixels voisins :
ind_pixels = reshape(1:nb_pixels,nb_lignes,nb_colonnes);
[voisins,distances] = voisinage(ind_pixels);
% Variation de profondeur entre pixels voisins :
d_z = delta_z(I,voisins,distances);
% SymŽtrisation des paires de pixels voisins :
voisins = [voisins ; flip(voisins,2)];
d_z = [d_z ; d_z];
% Matrice creuse dŽcrivant le syst<73>me de voisinage des "8 plus proches voisins" :
M_voisins = sparse(voisins(:,1),voisins(:,2),1,nb_pixels,nb_pixels);
% Matrice creuse contenant les variations de profondeur entre pixels voisins :
M_d_z = sparse(voisins(:,1),voisins(:,2),d_z,nb_pixels,nb_pixels);
% Algorithme du fast marching :
figure('Name','Front d''onde du fast marching','Position',[0.5*L,0,0.5*L,0.7*H]);
z = fast_marching(M_voisins,M_d_z,nb_lignes,nb_colonnes);
% Affichage du rŽsultat :
close(2);
figure('Name','Reeclairage du relief reconstruit','Position',[0.5*L,0,0.5*L,0.7*H]);
z = reshape(z,nb_lignes,nb_colonnes);
reeclairage(z);