Cours transformation de Fourier

publicité
Cours Traitement d'image
Transformation de Fourier
Filtrage
Modèle fréquentiel
• Le modèle fréquentiel tend à décrire l'image en termes de structures
périodiques, en la décomposant dans une base de fonctions périodiques
simples, comme des sinusoïdes
= f(x)
sin(x)
3 sin(x)
A
+ 1 sin(3x)
B
+ 0.8 sin(5x)
C
+ 0.4 sin(7x)
D
A+B
A+B+C
A+B+C+D
Modèle fréquentiel pour le traitement d’images
• Principe : Toute fonction, même non périodique, mais dont l'aire sous la
courbe est finie, peut être représentée pas l'intégrale de fonctions sinus et
cosinus, chacune multipliée par un coefficient différent
• Application :
– Convertir du domaine spatial vers le domaine fréquentiel
– Effectuer des manipulations
– Transformé inverse de la solution du domaine fréquentiel au domaine
spatial
Sans perte d’information !
Modèle fréquentiel : rappel sur les nombres
complexes
Partie Imaginaire
Z=(a,b)
b
|Z|

a
Partie Réelle
Modèle fréquentiel : rappel sur les nombres
complexes
= fonctions de bases 1D
1
x
– La longueur d’onde est 1/u.
– La fréquence est u.
1/u
Notion de fréquence spatiale
 Basses fréquences
 Zones homogènes, continues
 Hautes fréquences
 Détails, contours
6
Modèle fréquentiel : transformée de Fourier
• La transformée de Fourier permet la décomposition d'un signal
f en combinaison linéaire de sinusoïdes complexes
• Les coefficients F[u,v] dit coefficients de Fourier, fournissent
des informations sur les fréquences (u,v) et permettent des
manipulations dans le domaine fréquentiel
Modèle fréquentiel : transformée de Fourier
• Transformation de Fourier discrète
• On appelle la fonction F(u,v) le spectre
(u = 0,..., N-1; v = 0,…,M-1)
(x = 0,..., N-1; y = 0,…,M-1)
où x, y : coordonnées spatiales
u,  : coordonnées spectrales
• F = image complexe (module & phase)
Transformation de Fourier sous Matlab
[f, p]=uigetfile('*','selection de fichier');
S=imread(fullfile(p,f));
FS=fft2(double(S));
subplot(2,1,1)
module=abs(fftshift(FS));
imshow(module,[0, 100000]);colormap gray
phase=angle(fftshift(FS));
subplot(2,1,2);
imshow(phase,[-pi,pi]);colormap gray
Modèle fréquentiel : transformée de Fourier
V
• Fonctions de base :
Tableau de correspondance
entre les paramètres (u,v)
et le signal modélisé
La fréquence est
u=-2, v=2
u=-1, v=2
u=0, v=2
u=1, v=2
u=2, v=2
u=-2, v=1
u=-1, v=1
u=0, v=1
u=1, v=1
u=2, v=1
U
u=-2, v=0
u=-1, v=0
u=0, v=0
u=1, v=0
u=2, v=0
u=-2, v=-1
u=-1, v=-1
u=0, v=-1
u=1, v=-1
u=2, v=-1
u=-2, v=-2
u=-1, v=-2
u=0, v=-2
u=1, v=-2
u=2, v=-2
. La direction est u/v.
Modèle fréquentiel : transformée de Fourier
• Représentation transformée 2D : image à valeurs complexes
• Décomposition du spectre en images visibles :
– Spectre d’amplitude
– Spectre de phase
• Pour l’affichage on peut utiliser log(1 + |F(u,v)|)
Importance des deux composantes
Image reconstruite à l’aide
de l’amplitude uniquement
Image reconstruite à l’aide
de la phase uniquement
Modèle fréquentiel : transformée de Fourier
Phase d’une image plus amplitude de l’autre
Importance de la phase
DFT - DFT-1
Module
Phase
Module
13
Code sous matlab
imageA = imread('greekchurch','jpg');
imageB = imread('aishwarya','jpg');
fftA = fft2(double(imageA));
fftB = fft2(double(imageB));
fftC = abs(fftA).*exp(i*angle(fftB));
fftD = abs(fftB).*exp(i*angle(fftA));
imageC = ifft2(fftC);
imageD = ifft2(fftD);
%Calculate limits for plotting
cmin = min(min(abs(imageC)));
cmax = max(max(abs(imageC)));
dmin = min(min(abs(imageD)));
dmax = max(max(abs(imageD)));
figure, imshow(abs(imageC), [cmin cmax]), colormap gray
title('Image C Magnitude')
figure, imshow(abs(imageD), [dmin dmax]), colormap gray
title('Image D Magnitude')
Modèle fréquentiel : transformée de Fourier
Modèle fréquentiel : transformée de Fourier
a
b
a
b
c
c
Principe du zoom fréquentiel
I1: 256x256
I2: 512x512
Zoom 2 par un filtre
de type sinx/x
Domaine
spatial
TF
TF-1
Domaine
de Fourier
On entoure le spectre
de zéros : pas d’ajout
d ’information
Impact de l’insertion de 0
I2: 1024x1024
I1: 256x256
Les zéros
sont
interpolés
Insertion de 4 zéros
entre chaque pixel
Domaine
spatial
TF-1
TF
Domaine
de Fourier
2fe
2fe
Extension du
domaine fréquentiel:
de [-fe/2;fe/2] à [-2fe ;
2fe]
Périodisation du
spectre :
16 répliques centrées
sur (kfe, lfe),
k={-1,0,1,2}, l={-1,0,1,2}
On isole
2fe le motif BF -2fe
-2fe
-2fe
2fe
-2fe
Zoom quinconce dans Fourier
Une image 512x512 interpolée
Entrelacement
de I1 et I2 en
quinconce
Domaine
spatial
Les zéros
sont
interpolés
2 images I1 et I2
256X256 décalées
de 0.5 pixels
Domaine
de Fourier
TF
TF-1
Extension du domaine
fréquentiel:
du carré bleu à [-fe ;fe]
Périodisation du spectre
:
2 répliques centrées sur
On isole
le motif BF
Filtrage
I Filtres de lissage
I-1 Filtrage dans le domaine de Fourier
I-2 Filtrage par convolution
I-3 Implantation des filtres linéaires
I-4 Bruit multiplicatif
I-5 Filtres non linéaires
II Filtres dérivateurs
II-1 Filtrage dans le domaine de Fourier
II-2 Filtrage par convolution
II-3 Filtres non linéaires
Filtrage

Les filtres de lissage sont des opérateurs qui éliminent des
éléments perturbateurs / non significatifs dans les images
numériques, soit pour améliorer leur visualisation, soit pour
les simplifier en but d'un traitement postérieur :
Filtrage dans le domaine de Fourier
Filtrage passe-bas :Un filtre passe-bas est un filtre qui laisse passer les
basses fréquences et qui atténue les hautes fréquences, c'est-à-dire
les fréquences supérieures à la fréquence de coupure.

Le filtrage passe-bas est la multiplication dans le domaine fréquentiel
par une fonction porte(fonction indicatrice d'un intervalle [-umax,umax] ×
[-vmax,vmax]).
TF
TF-1
Filtrage dans le domaine de Fourier
Filtrage dans le domaine de Fourier
filtre passe bas:
F=fftshift(fft2(I));
for i=1:M
%calcul de la taille de l'image;
for j=1:N
M=size(F,1);
G(i,j)=F(i,j)*H0(i,j);
N=size(F,2);
end
P=size(F,3);
end
H0=zeros(M,N);
g=ifft2(G);
D0=3;
subplot(1,2,1);imshow(I);title('image originale');
M2=round(M/2);
subplot(1,2,2);imshow(abs(g),[0,255]);title('image
filtrée');
N2=round(N/2);
H0(M2-D0:M2+D0,N2-D0:N2+D0)=1;
b-filtre passe haut
Programme :
for i=1:M
%charge;
for j=1:N
F=fftshift(fft2(I));
%calcul de la taille de l'image;
M=size(F,1);
G(i,j)=F(i,j)*H1(i,j);
end
N=size(F,2);
end
P=size(F,3);
g=ifft2(G);
H1=ones(M,N);
D0=2;
M2=round(M/2);
N2=round(N/2);
H1(M2-D0:M2+D0,N2-D0:N2+D0)=0;
subplot(1,2,1);imshow(I);title('image originale');
subplot(1,2,2);imshow(255-abs(g),[0,255]);title('image
filtrée');
c-Filtre passe bas de Butterworth :
Programme :
for i=1:M
%charge;
for j=1:N
F=fftshift(fft2(I));
%calcul de la taille de l'image;
H(i,j)=1/(1+(H0(i,j)/D0)^(2*n));
M=size(F,1);
G(i,j)=F(i,j)*H(i,j);
N=size(F,2);
end
P=size(F,3);
H0=zeros(M,N);
end
D0=3;
g=ifft2(G);
M2=round(M/2);
subplot(1,2,1);imshow(I);title('image originale');
N2=round(N/2);
H0(M2-D0:M2+D0,N2-D0:N2+D0)=1;
n=3;
subplot(1,2,2);imshow(abs(g),[0,255]);title('image
filtrée');
d- Filtre passe haut de Butterworth :
Programme :
%charge;
F=fftshift(fft2(I));
for i=1:M
for j=1:N
%calcul de la taille de l'image;
H(i,j)=1/(1+(H1(i,j)/D0)^(2*n));
M=size(F,1);
G(i,j)=F(i,j)*H(i,j);
N=size(F,2);
end
P=size(F,3);
H1=ones(M,N);
end
D0=3;
g=ifft2(G);
M2=round(M/2);
subplot(1,2,1);imshow(I);title('image
originale');
N2=round(N/2);
H1(M2-D0:M2+D0,N2-D0:N2+D0)=0;
n=3;
subplot(1,2,2);imshow(255-abs(g),
[0,255]);title('image filtrée');
Filtrage par convolution

La multiplication dans le domaine fréquentiel correspond à la
convolution dans le domaine spatial. Un grand nombre de filtres de
lissage peut être obtenu à partir de noyaux de convolution
symétriques et normalisés (de somme égale à 1). Voici 3 famille de
filtres parmi les plus utilisés :
Filtrage par convolution
Transformation en Ondelettes
Restauration d'image
Téléchargement