68 lines
2 KiB
Mathematica
68 lines
2 KiB
Mathematica
|
clear;
|
||
|
close all;
|
||
|
|
||
|
% Lecture de l'image u :
|
||
|
u = imread('Images/grille.png');
|
||
|
u = double(rgb2gray(u));
|
||
|
[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
|
||
|
|
||
|
% Partition de s :
|
||
|
exemple = input('Pour effectuer la partition du spectre d''une grille, tapez 1, 2 ou 3 : ');
|
||
|
epaisseur = 10;
|
||
|
switch exemple
|
||
|
case 1
|
||
|
c_milieu = round(nb_colonnes/2);
|
||
|
x = [c_milieu-epaisseur c_milieu-epaisseur c_milieu+epaisseur c_milieu+epaisseur];
|
||
|
y = [1 nb_lignes nb_lignes 1];
|
||
|
case 2
|
||
|
l_milieu = round(nb_lignes/2);
|
||
|
x = [1 nb_colonnes nb_colonnes 1];
|
||
|
y = [l_milieu-epaisseur l_milieu-epaisseur l_milieu+epaisseur l_milieu+epaisseur];
|
||
|
case 3
|
||
|
epaisseur = sqrt(2)*epaisseur;
|
||
|
x = [nb_colonnes-epaisseur nb_colonnes nb_colonnes epaisseur 1 1];
|
||
|
y = [1 1 1+epaisseur nb_lignes nb_lignes nb_lignes-epaisseur];
|
||
|
end
|
||
|
selection = roipoly(s,x,y);
|
||
|
|
||
|
% Calcul du spectre modifié :
|
||
|
s_barre = selection.*s;
|
||
|
|
||
|
% 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/exo0_" + num2str(exemple) + ".png", '-png', '-painters', '-m2');
|