48 lines
1.4 KiB
Mathematica
48 lines
1.4 KiB
Mathematica
|
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<EFBFBD>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<EFBFBD>trisation des paires de pixels voisins :
|
|||
|
voisins = [voisins ; flip(voisins,2)];
|
|||
|
d_z = [d_z ; d_z];
|
|||
|
|
|||
|
% Matrice creuse d<EFBFBD>crivant le syst<EFBFBD>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<EFBFBD>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);
|