Fltrage image sous matlab

Résolu/Fermé
etudiant ep - 27 févr. 2008 à 11:31
 nassim - 30 oct. 2017 à 14:15
Bonjour,

je dois dans le cadre d'un projet filtrer des images avec matlab afin d'en retirer le bruit . j'aimerai connaitre la syntaxe a appliquer pour traiter une image (matrice 512x512)
je voudrai également connaitre tous les filtres qu'il existe pour ce type d'image avec matlab

merci d'avance

3 réponses

uranus_1978 Messages postés 9 Date d'inscription jeudi 28 février 2008 Statut Membre Dernière intervention 18 mars 2008 40
15 mars 2008 à 12:29
bojour
ya deux types de filtre pour les imasages
_ filtre frequentiel
-- filtre frequentile

********* dans les filtre spatial on trouve:

a-filtre moyen :Le filtre moyen remplace la valeur d'un pixel par la moyenne de sa valeur et de la valeur des 8 pixels qui l'entourent . La matrice est donc une 3x3 dont chacun des membres vaut 1/9.
Le filtre moyen
_ Permet de lisser l'image (smoothing)
_ Remplace chaque pixel par la valeur moyenne de ses voisins
_ Réduit le bruit
_ Réduit les détails non-important
_ Brouille ou rend floue l'image (blur edges)
program: h=fspecial('average');
C =filter2(h,J);%J notre image,H lareponse du filtre
b-le filtre gaussien:
Le filtrage gaussien de l'image résulte de la convolution de cette fonction avec des gaussiennes en chaque point de l'image,Un inconvénient évident du filtrage gaussien est qu’il ne lisse pas uniquement le bruit, mais il gomme aussi les contours, les rendant difficilement identifiables.Le filtre gaussien donnera un meilleure lissage et une meilleure réduction du bruit que le filtre moyenne.
Programme :
h=fspecial('gaussian');
C=conv2(h,J);

c- Filtre médian : B=medfilt2(J);


*********Filtrage fréquentiel :

–C’est la modification des fréquences de l’image de départ.
–Cette modification est réalisée directement à partir de la représentation fréquentielle F(u,v), en la multipliant par la fonction de transfert du filtre G(u,v).

Cette relation permet de dire que les filtrages basés sur une convolution spatiale peuvent se réaliser très simplement par produit simple en fréquence.
On construit le filtre (sa fonction de transfert H(u,v)) directement en fréquence.

Contenu fréquencield'une image
•Basses fréquences:ce qui varie lentement (formes générales)
•Hautes fréquences:ce qui varie rapidement (détails, bords, bruit...)

a-filtre passe bas:
F=fftshift(fft2(I));
%calcul de la taille de l'image;
M=size(F,1);
N=size(F,2);
P=size(F,3);
H0=zeros(M,N);
D0=3;
M2=round(M/2);
N2=round(N/2);
H0(M2-D0:M2+D0,N2-D0:N2+D0)=1;
for i=1:M
for j=1:N
G(i,j)=F(i,j)*H0(i,j);
end
end
g=ifft2(G);
subplot(1,2,1);imshow(I);title('image originale');
subplot(1,2,2);imshow(abs(g),[0,255]);title('image filtrée');



b-filtre passe haut
Programme :
%charge;
F=fftshift(fft2(I));
%calcul de la taille de l'image;
M=size(F,1);
N=size(F,2);
P=size(F,3);
H1=ones(M,N);
D0=2;
M2=round(M/2);
N2=round(N/2);
H1(M2-D0:M2+D0,N2-D0:N2+D0)=0;
for i=1:M
for j=1:N
G(i,j)=F(i,j)*H1(i,j);
end
end
g=ifft2(G);
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 :
%charge;
F=fftshift(fft2(I));
%calcul de la taille de l'image;
M=size(F,1);
N=size(F,2);
P=size(F,3);
H0=zeros(M,N);
D0=3;
M2=round(M/2);
N2=round(N/2);
H0(M2-D0:M2+D0,N2-D0:N2+D0)=1;
n=3;
for i=1:M
for j=1:N
H(i,j)=1/(1+(H0(i,j)/D0)^(2*n));
G(i,j)=F(i,j)*H(i,j);
end
end
g=ifft2(G);
subplot(1,2,1);imshow(I);title('image originale');
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));
%calcul de la taille de l'image;
M=size(F,1);
N=size(F,2);
P=size(F,3);
H1=ones(M,N);
D0=3;
M2=round(M/2);
N2=round(N/2);
H1(M2-D0:M2+D0,N2-D0:N2+D0)=0;
n=3;
for i=1:M
for j=1:N
H(i,j)=1/(1+(H1(i,j)/D0)^(2*n));
G(i,j)=F(i,j)*H(i,j);
end
end
g=ifft2(G);
subplot(1,2,1);imshow(I);title('image originale');
subplot(1,2,2);imshow(255-abs(g),[0,255]);title('image filtrée');

remarque : si vous voulez plus dedetails consulter le livre : ""signaus et images sous matlab - GERARD BLANCHET ET MAURICE CHARBIT """

bonnnnnnn couraggggggggggge
37
Bonjour Uranus,

Merci pour les indications, ça m'a été utile puisque je cherchais à filtrer une image. En revanche, je pense qu'il y a une erreur dans ton filtre Butterworth (je prend ici l'exemple du filtre passe bas mais les mêmes remarques s'appliquent pour le filtre passe haut). Tu prends Ho(i,j) constant et égal à 1 pour les points situées à une distance D0 du centre de la matrice alors qu'en réalité H0(i,j) devrait varier avec la distance par rapport au centre (en étant nul au centre, égal à 1 à une distance D0 et en tendant vers l'infini lorsque l'on s'éloigne du centre). Pour être plus clair, si l'on prend un filtre 1D, le gain associé à un filtre de Butterworth est 1 / sqrt(1 + (w/wc)^(2n)). Avec ta fonction, tu fais comme si w/wc = cste pour w < wc et = 0 pour w>wc.

Bon courage
0
arij08 Messages postés 102 Date d'inscription lundi 27 octobre 2008 Statut Membre Dernière intervention 12 décembre 2009 11
16 nov. 2008 à 11:26
bonjour merci bien Uranus pour les filtres j'en ai besoin.
0