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