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

60 lines
1.6 KiB
Matlab

clear;
close all;
eta = 0.05;
% Lecture de l'image u :
u = double(imread('Images/Barbara.png'));
[nb_lignes,nb_colonnes] = size(u);
% Calcul du spectre s :
s = fft2(u);
s = fftshift(s); % Permet de positionner l'origine (0,0) au centre
% Création de la grille :
[f_x,f_y] = meshgrid(1:nb_colonnes,1:nb_lignes);
% Positionnement de l'origine (0,0) au centre
f_x = f_x / nb_colonnes - 0.5;
f_y = f_y / nb_lignes - 0.5;
% Calcul des coeffs :
coeffs = 1 ./ (1 + (f_x.^2 + f_y.^2)/eta);
% Calcul du spectre modifié :
s_barre = s .* coeffs;
% Calcul de l'image modifiée :
u_barre = real(ifft2(ifftshift(s_barre)));
% Mise en place de la figure pour affichage :
taille_ecran = get(0,'ScreenSize');
L = taille_ecran(3);
H = taille_ecran(4);
figure('Name','Decomposition par modification du spectre','Position',[0.2*L,0,0.8*L,H]);
tiledlayout(2,3, 'Padding', 'none', 'TileSpacing', 'compact');
% Affichage des images u, u_barre et u-u_barre :
% subplot(2,3,1);
nexttile;
affichage(u,'$x$','$y$','Image $u$');
% subplot(2,3,2);
nexttile;
affichage(u_barre,'$x$','$y$','Image $\overline{u}$');
% subplot(2,3,3);
nexttile;
affichage(u-u_barre,'$x$','$y$','Image $\overline{u}^c$');
% Affichage du logarithme du module des spectres s, s_barre et s-s_barre :
% subplot(2,3,4);
nexttile;
affichage(log(abs(s)),'$f_x$','$f_y$','Spectre $\log|s|$');
% subplot(2,3,5);
nexttile;
affichage(log(abs(s_barre)),'$f_x$','$f_y$','Spectre $\log|\overline{s}|$');
% subplot(2,3,6);
nexttile;
affichage(log(abs(s-s_barre)),'$f_x$','$f_y$','Spectre $\log|\overline{s}^c|$');
export_fig(gcf, "saves/exo1bis.png", '-png', '-painters', '-m2');