60 lines
1.6 KiB
Matlab
Executable file
60 lines
1.6 KiB
Matlab
Executable file
%--------------------------------------------------------------------------
|
||
% ENSEEIHT - 2SN MM - Traitement des donnŽes audio-visuelles
|
||
% TP6 - Restauration d'images
|
||
% exercice_0 : dŽbruitage avec mod<6F>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<73>me :
|
||
b = u0;
|
||
|
||
% Matrice A du syst<73>me :
|
||
Lap = -Dx'*Dx -Dy'*Dy;
|
||
lambda = 2; % Poids de la rŽgularisation
|
||
A = speye(nb_pixels) -lambda*Lap;
|
||
|
||
% RŽsolution du syst<73>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")
|