TP-traitement-audio-visuel/TP8/exercice_2macro.m
2023-06-22 20:47:16 +02:00

91 lines
2.3 KiB
Matlab

clear;
close all;
% Paramètres à régler :
nb_iterations = 20;
epsilon = 0.01;
lambda = 100;
% Mise en place de la figure pour affichage :
taille_ecran = get(0,'ScreenSize');
L = taille_ecran(3);
H = taille_ecran(4);
figure('Name','Decomposition structure + texture par le modele ROF','Position',[0,0,L,0.5*H]);
tiledlayout(1,3, 'Padding', 'none', 'TileSpacing', 'compact');
% Lecture et affichage de l'image u :
% u = imread('Images/pilier.png');
u = imread('Images/macro.jpg');
u = double(u);
[nb_lignes,nb_colonnes,nb_canaux] = size(u);
% subplot(1,3,1);
nexttile(1);
imagesc(uint8(u));
axis equal;
axis off;
title('Image','Units', 'normalized', 'Position', [0.5, 0.88]);
% Calcul des matrices Dx et Dy :
nb_pixels = nb_lignes*nb_colonnes;
e = ones(nb_pixels,1);
Dx = spdiags([-e e],[0 nb_lignes],nb_pixels,nb_pixels);
Dx(nb_pixels-nb_lignes+1:nb_pixels,:) = 0;
Dy = spdiags([-e e],[0 1],nb_pixels,nb_pixels);
Dy(nb_lignes:nb_lignes:nb_pixels,:) = 0;
% Seconds membres des systèmes à résoudre :
b = zeros(nb_lignes*nb_colonnes,nb_canaux);
for c = 1:nb_canaux
u_c = u(:,:,c);
b(:,c) = u_c(:);
end
% Affichage de la structure initiale :
u_barre = u;
% subplot(1,3,2);
nexttile(2);
imagesc(uint8(u_barre));
axis equal;
axis off;
title('Structure (000%)','Units', 'normalized', 'Position', [0.5, 0.88]);
% Affichage de la texture initiale :
% subplot(1,3,3);
nexttile(3);
imagesc(uint8(u-u_barre));
axis equal;
axis off;
title('Texture (000%)','Units', 'normalized', 'Position', [0.5, 0.88]);
delete("saves/exo2macro.gif")
export_fig(gcf, "saves/exo2macro.gif", '-png', '-painters', '-m2', '-append');
drawnow;
for it = 1:nb_iterations
for c = 1:nb_canaux
% Mise à jour de la structure :
u_barre(:,:,c) = calcul_structure_2(u_barre(:,:,c),b(:,c),Dx,Dy,lambda,epsilon);
end
% Affichage de la structure :
% subplot(1,3,2);
nexttile(2);
imagesc(uint8(u_barre));
axis equal;
axis off;
title(['Structure (' num2str(100*it/nb_iterations,'%03.0f') '%)'],'Units', 'normalized', 'Position', [0.5, 0.88]);
% Affichage de la texture :
% subplot(1,3,3);
nexttile(3);
imagesc(uint8(u-u_barre));
axis equal;
axis off;
title(['Texture (' num2str(100*it/nb_iterations,'%03.0f') '%)'],'Units', 'normalized', 'Position', [0.5, 0.88]);
drawnow;
export_fig(gcf, "saves/exo2macro.gif", '-png', '-painters', '-m2', '-append');
end