%-------------------------------------------------------------------------- % ENSEEIHT - 2SN MM - Traitement des donnˇes audio-visuelles % TP6 - Restauration d'images % exercice_0 : dˇbruitage avec mod¸le de Tikhonov (niveaux de gris) %-------------------------------------------------------------------------- clear close all clc % Mise en place de la figure pour affichage : taille_ecran = get(0,'ScreenSize'); L = taille_ecran(3); H = taille_ecran(4); % Lecture de l'image : u0 = double(imread('Images/cameraman_avec_bruit.tif')); [nb_lignes,nb_colonnes,nb_canaux] = size(u0); u_max = max(u0(:)); % Affichage de l'image : % subplot(1,2,1) figure; imagesc(max(0,min(1,u0/u_max)),[0 1]) colormap gray axis image off title('Image bruitee') imwrite(max(0,min(1,u0/u_max)), "saves/exo0_bruit.png") % Vectorisation de u0 : nb_pixels = nb_lignes*nb_colonnes; u0 = reshape(u0,[nb_pixels 1]); % Opˇrateur gradient : e = ones(nb_pixels,1); Dx = spdiags([-e e],[0 nb_lignes],nb_pixels,nb_pixels); Dx(end-nb_lignes+1:end,:) = 0; Dy = spdiags([-e e],[0 1],nb_pixels,nb_pixels); Dy(nb_lignes:nb_lignes:end,:) = 0; % Second membre b du syst¸me : b = u0; % Matrice A du syst¸me : Lap = -Dx'*Dx -Dy'*Dy; lambda = 2; % Poids de la rˇgularisation A = speye(nb_pixels) -lambda*Lap; % Rˇsolution du syst¸me A*u = b : u = A\b; % Affichage de l'image restaurˇe : % subplot(1,2,2) figure; imagesc(max(0,min(1,reshape(u,[nb_lignes nb_colonnes])/u_max)),[0 1]) colormap gray axis image off title('Image restauree') imwrite(max(0,min(1,reshape(u,[nb_lignes nb_colonnes])/u_max)), "saves/exo0_clean.png")