48 lines
1.4 KiB
Matlab
48 lines
1.4 KiB
Matlab
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);
|