Travaux pratiques de traitement dimage
P. Falgayrettes
FOURIER ET LES IMAGES
1" Objectif de ce travail :
Le travail propos ici consiste manipuler le spectre des images et d couvrir
les relations entre les espaces direct et de Fourier.
2" Petite histoire : Jean-Baptiste que l'on appelait Joseph...
N le 21 mars 1768 Auxerre mort le 16 mai 1830 Paris
lu acad micien libre le 27 mai 1816. Le 29 mai, l'Acad mie est avis e que le roi Louis XVIII
n'approuve pas cette lection. Une nouvelle lection le 12 mai 1817 (pour la section de physique
g n rale) est confirm e par le roi le 23 mai 1817.
lu Secr taire perp tuel pour les sciences math matiques le 18 novembre 1822
Il fut lu Membre de l'Acad mie fran aise le 14 d cembre 1826
Math maticien, Joseph Fourier est l'auteur de travaux fondamentaux sur la th orie de la chaleur.
Il est l'un des initiateurs de la th orie math matique des ph nom nes physiques.
Joseph Fourier consacra ses premiers travaux l' tude de th or mes
g n raux relatifs la r solution d' quations alg briques. Il pr senta un
m moire sur ce sujet devant l'Acad mie des sciences le 9 d cembre 1789.
En 1794, il est nomm l ve l' cole normale, puis r p titeur l' cole
polytechnique, poste qu'il occupa jusqu'en 1797. Recrut par Gaspard
Monge, il partit en 1798 avec les scientifiques de l'exp dition d' gypte.
Bonaparte cr a l'Institut d' gypte selon un plan inspir de celui de Paris et le
d signa pour en tre le Secr taire perp tuel. Joseph Fourier s journa en
gypte jusqu'en 1801 o il mena des travaux scientifiques, historiques,
administratifs et diplomatiques. Il fut charg d' crire la "Pr face historique" de l'ouvrage
"Description de l' gypte" (1809) qui regroupe l'ensemble des observations faites au cours de
l'exp dition.
son retour en France en 1802, il fut nomm pr fet du d partement de l'Is re. Son nom reste
attach des grands travaux (ass chement des marais de Bourgoin, ouverture de la route de
Grenoble Turin). Il trouva cependant suffisamment de temps pour effectuer en quelques ann es
l'essentiel de son Suvre scientifique. Le 21 d cembre 1807, il soumit la premi re Classe de
l'Institut national des sciences et des arts un premier m moire intitul "Th orie de la propagation
de la chaleur dans les solides". La section de g om trie de l'Institut mit au concours la question
"Donner la th orie math matique des lois de la propagation de la chaleur, et comparer le r sultat
de cette th orie des exp riences exactes". Apr s une vive pol mique comprenant notamment
Jean-Baptiste Biot, Louis de Lagrange et Pierre-Simon de Laplace, l'Institut couronna les travaux
de Fourier en 1812 par le grand Prix de Math matiques de l'Institut.
R voqu de la vie publique en mai 1815, lu Membre de l'Acad mie des sciences en 1817, puis
Secr taire perp tuel pour la division des math matiques en 1822, il consacra l'essentiel de son
temps cette fonction tout en continuant publier des travaux scientifiques ("M moire d'analyse
ind termin e sur le calcul des conditions d'in galit s", "Sur de nouvelles exp riences
thermo lectriques", "Analyse des quations d termin es"...).
1
Travaux pratiques de traitement dimage
P. Falgayrettes
Il mourut le 16 mai 1830. Son loge fut prononc par Fran ois Arago.
Joseph Fourier tait aussi Membre de la Royal Society of London (1823).
R f rence Site web de l'acad mie des sciences :
http://www.academie-sciences.fr/MEMBRES/in_memoriam/Fourier/Fourier_oeuvre.htm
Transform e Directe FreqIma =
M 1
k=0
Ima . e
2.j. pi .
n.i l.j
M.N
N 1
l=0
Transform e Inverse Ima =
1
Publicité
M.N
M 1
.
k=0
FreqIma[ m , n].e
2.j. pi .
n.i l.j
M.N
N 1
l=0
Ima est l'image et i,j sont les coordonn es du domaine spatial.
FreqIma est l'image et m,n sont les coordonn es du domaine fr quentiel.
M, N sont les dimensions de l'image.
3 . MANIPULATIONS :
3.1 . Transform e de Fourier 1D :
Dans cette premi re partie, on vous propose de revoir rapidement comment est construite la
Transform e de Fourier Discr te (FFT) sur un signal 2D :
Pour commencer, ouvrez l'image porte.bmp :
MaPorte=imread('porte.bmp');
Vous savez pr sent que limage est disponible sous la forme dune matrice de valeurs
cod es sur 8 bits. Pour certaines op rations, il est important de noter que le r sultat obtenu
est plus pr cis, voire tr s diff rents, si les calculs sont r alis s sur des valeurs r elles. Pour
convertir limage en flottant :
MaPorte = double(MaPorte) ;
Limage en niveau de gris est form e de Nlin lignes, Ncol colonnes et 1 seul plan. Ces
informations sont r cup rables facilement gr ce :
Pour afficher l'image :
= size(MaPorte) ;
figure(1); image(MaPorte);
matlab permet de calculer la FFT d'un signal 1D (un vecteur) gr ce la fonction :
Freq_MonSignal = fft(MaSignal);
Attention : votre image est un signal 2D r el et sa fft est complexe (la fonction abs() donne le module).
Essayez de regarder ce qu'il se passe si vous faites la fft sur la ligne Nlin/2 de votre image.
Tracez ce spectre.
Effectuez la m me op ration sur la premi re ligne de l'image. Conclusion ?
Sachant que le spectre d'un signal chantillonn est p riodique, effectuez les instructions
suivantes pour rendre votre espace des fr quences p riodique :
Freq_periodique=Freq_ligne;
for u=2:16
Freq_periodique= ;
end
Tracez les spectres Freq_ligne et Freq_periodique,
Calculez la fft inverse (fonction ifft(MonSpectre) )du nouveau spectre. Conclusion ?
Sur les spectres trac s, vous observez que l'axe des abscisses repr sente l'indice du point
2
Travaux pratiques de traitement dimage
P. Falgayrettes
calcul et non la fr quence. Vous pouvez aussi vous rendre compte que le trac repr sente
les fr quences entre 0 et Fech/2 sur les indices 0 Nlin/2 et les fr quences entre -Fech/2 et
0 pour les indices Nlin/2 Nlin.
Changez l' chelle de l'axe des abscisses.
plot (abs(Freq_periodique));
v=axis; % r cup re les valeurs des chelles sur x et y
axis( ); % modifie les valeurs sur
l'axe x uniquement !
Le spectre obtenue doit ressembler quelque chose que vous connaissez.
Sous matlab, il existe une fonction qui permet d'effectuer ce d calage d'axe. Essayez :
figure(3);
FFT_ligne=fft(Im1(Nlin/2,:));
FFT_ligne=fftshift(FFT_ligne); % recentrage de l'origine des
Publicité
fr quences au centre de la fen tre
plot (abs(FFT_ligne)); % trace le module du spectre
3.2 . La Transform e de Fourier 2D :
Vous avez revue vos classiques sur la transform e 1D. Revenons aux images. Matlab
permet de calculer la fft d'une image (commande fft2, regardez l'aide)
Affichez la transform e de Fourier 2D de 'MaPorte.bmp'.
Sachant que les valeurs du module obtenues peuvent tre grandes, vous devrez ajuster les
amplitudes du spectre aux valeurs de couleurs disponibles.
Image_affiche=FFT_MaPorte.... % mise l' chelle des niveaux
de gris
image(Image_affiche);
colormap(pink(256)); % meilleure visibilit du spectre
axis('image');
Remarque : Vous pouvez utilisez la fonction 'imagesc()' de matlab la place de 'image()' qui permet de
recadrer automatiquement les valeurs dans l'intervalle des couleurs disponibles.
3.3 . Animez votre Transform e de Fourier 2D !
Vous ma trisez parfaitement les affichages dans le domaine fr quentiel.
On se propose de r aliser une petite application didactique :
a) Cr ez une image 512x512 contenant un cosinus aux fr quences fox=1/ Tox suivant x
et foy=1/Toy suivant y qui utilise tous les niveaux de gris disponibles. Affichez l'image
cr e.
b) Calculez la fft de cette image et affichez en le module
Faites une boucle qui reprend les tapes a) et b) en changeant la valeur de la fr quence
chaque passage dans la boucle (utilisez imshow(Image); drawnow; pour forcer
l'affichage).
Tox=0; % d finition de la p riode suivant x
Toy=0; % d finition de la p riode suivant y
while(Tox<=1024)
Tox=Tox+1;
3
Travaux pratiques de traitement dimage
P. Falgayrettes
Toy=Toy+1;
for i=1:128
for j=1:128
mon_cos(i,j)=double(128(1+cos(2pi*(i/Tox+j/Toy))));
end
end
figure (1);
imshow(((mon_cos-min(min(mon_cos)))*1/(max(max(mon_cos)))-
min(min(mon_cos))));
drawnow;
colormap(pink(256));
axis('image');
figure (2);
colormap(pink(256));
axis('image');
FFT_MonCos=fft2(mon_cos);
FFT_MonCos=fftshift(FFT_MonCos);
Image_affiche=abs(FFT_MonCos);
imshow(((Image_affiche-min(min(Image_affiche)))*256/
(max(max(Image_affiche)))-min(min(Image_affiche))));
drawnow;
end
4 . COMPRESSION :
Vous allez maintenant effectuer une compression JPEG. Cette compression utilise la
transform e en Cosinus Discret (DCT). Vous verrez que ce type de compression assume une
perte d'information lors de l'op ration.
4.1 . Principe :
Ce type de compression repose sur plusieurs tapes :
Publicité
d couper l'image en blocs de taille identique (8x8 en pratique).
calculer la DCT de chaque bloc.
repr senter le r sultat de la DCT 2D en regroupant les pixels de tous les blocs par
ordre de coefficient.
supprimer les blocs de coefficients qui repr sentent les fr quences les plus lev es.
calculer les DCT inverse de chaque bloc.
regrouper les blocs dans une m me image.
4.2 . Manipulation :
Pour commencer, il est int ressant de regarder le r sultat obtenu en effectuant la
DCT de l'image compl te. Utilisez l'image 'Clown.bmp'.
MonClown=imread('clown.bmp');
figure (1);
imagesc(DCT);
colormap(gray(256));
DCT=dct2(MonClown);
4
Travaux pratiques de traitement dimage
P. Falgayrettes
Affichez le r sultat de cette DCT :
% affichage du r sultat
figure (2);
imagesc(DCT);
colormap(pink(256));
Remarquez que l'origine des fr quences se trouvent en haut gauche de l'image.
Ci-dessous, vous trouverez les codes qui vous permettent de r aliser ces diff rentes tapes.
Mettre z ro les pixels qui sont au-del de la bissectrice rouge figure ci-dessous.
DCT(0,0)
Pixels
conserver
Pixels mis 0
Calulez la DCT inverse et afficher l'image obtenue (image 'Ma_DCT_inv').
Estimez l'erreur induite par la mise z ro des pixels en faisant la diff rence entre
l'image originale et 'Ma_DCT_inv'.
D coupage des blocs & calcul DCT par bloc :
tbloc=8; % taille du bloc dans l'image (2,4,8,16,...)
%D coupage des blocs & calcul DCT par bloc
for i=1:round(Ncol/tbloc)
for j=1:round(Nlin/tbloc)
% D coupage des blocs
for k=1:tbloc
for l=1:tbloc
%i,j,k,l
bloc(k,l)=I((i-1)tbloc+k,(j-1)tbloc+l);
end
end
% calcul DCT d'un bloc
dct_image(i,j,:,:) = dct2(bloc);
end
end
Premier type d'affichage du r sultat :
Dans ce mode de repr sentation de la DCT2d, on conserve la localisation des blocs de
limage originale : observez lirr gularit spatiale de la r partition de linformation.
% reconstitution des blocs DCT en une image avec pr servation
de la position des blocs de limage originale
for i=1:round(Ncol/tbloc)
for j=1:round(Nlin/tbloc)
Publicité
for k=1:tbloc
for l=1:tbloc
DCT1((i-1)tbloc+k,(j-1)tbloc+l) = dct_image(i,j,k,l);
end
end
end
end
% affichage du r sultat
figure (2);
5
Travaux pratiques de traitement dimage
P. Falgayrettes
imagesc(DCT1)
colormap(gray(256));
Deuxi me type d'affichage du r sultat :
Dans ce mode de repr sentation, on regroupe maintenant les pixels de tous les blocs par
coefficient (tous les premiers pixels de chaque bloc sont regroup s dans un bloc, tous les
second pixels sont regroup s dans un second bloc, etc.). Vous utiliserez ce mode d'affichage
pour valuer le niveau de d gradation acceptable de votre compression.
% mode de repr sentation de la DCT2d par regroupement des
pixels de tous les blocs par coefficient.
for k=1:tbloc
for l=1:tbloc
for i=1:Ncol/tbloc
for j=1:Nlin/tbloc
DCT2((k-1)Ncol/tbloc+i,(l-1)Nlin/tbloc+j) = dct_image(i,j,k,l);
end
end
end
end
% affichage du r sultat
figure (3);
imagesc(DCT2)
colormap(gray(256));
Reconstruction de l'image : d compression
%Reconstruction par DCT inverse de l'image
for i=1:round(Ncol/tbloc)
for j=1:round(Nlin/tbloc)
bloc=idct2(masque.*reshape(dct_image(i,j,:,:),tbloc,t
bloc));
for k=1:tbloc
for l=1:tbloc
ImReconstitue((i-1)tbloc+k,(j-1)tbloc+l) = bloc(k,l);
end
end
end
end
% affichage
figure (4);
imagesc(ImReconstitue)
colormap(gray(256));
Notez que dans cette derni re op ration appara t une variable nomm e
masque . Il s'agit d'une matrice de dimension (tbloc x tbloc) que vous
pouvez remplir de 0 et de 1. Un 0 signifie que vous perdrez cette partie de la
zone de fr quences, alors qu'un 1 signifie au contraire que vous souhaitez
conserver ces fr quences. Essayez diff rentes solutions.
Rappel : les basses fr quences sont en haut et gauche de votre image dans la repr sentation 2.
6