Réalisé par: HADJOUDJA AISSA
But de travail : Comparer les effets des filtres, Moyenneur et median, sur différents types de bruit.
I.
Filtrage Moyenneur : - On lire l’image lena_gray_256.tif : I=imread('lena_gray_256.tif');
-
On ajoute un bruit de type poivre et sel sur l’image : J = imnoise(I,'salt & pepper',0.02); subplot(1,2,1),imshow(I) title('Image originale') subplot(1,2,2),imshow(J) title('Image bruitée')
-
On filtre l’image avec un filtre de taille 3x3, 5x5, 7x7 : Fonction de filtre Moyenneur : function [ im ] = moyenneur( taille,J) H=(1/(taille*taille))*ones(taille); a=(taille-1)/2; B = padarray(J,[a a]); for i=1+a:256 for j=1+a:256 k=B(i-a:i+a,j-a:j+a); k=double(k); im(i-a,j-a)= sum(sum(k.*H)); end end end
Programme : %filtre de taille 3x3 im=moyenneur(3,J);
im=mat2gray(im); %filtre de taille 5x5 im2=moyenneur(5,J); im2=mat2gray(im2); %filtre de taille 7x7 im3=moyenneur(7,J); im3=mat2gray(im3); %on affiche les trois images subplot(1,3,1),imshow(im) xlabel('filtre moyenneur de taille 3') subplot(1,3,2),imshow(im2) xlabel('filtre moyenneur de taille 5') subplot(1,3,3),imshow(im3) xlabel('filtre moyenneur de taille 7')
Remarque : On observe que quand on augmente la taille du filtre, l’image va être plus lissée.
-
-
Effet du filtre Moyenneur : Lisse l’image (effet de flou) Réduit le bruit. Réduit les détails.
On lit et on affiche les images lena_gray1.tif et mask.tif :
Im2=imread('lena_gray1.tif'); Im3=imread('mask.tif');
subplot(1,2,1),imshow(im2) title('Image de lena') subplot(1,2,2),imshow(im3) title('mask')
-
Remarque : On observe qu’il y a des parties blanches sur l’image de Lena gray et le mask est noir et contient ces parties blanches. On filtre l’image im2 avec un filtre 3x3 :
Remarque : on voit que quand l’image est filtrée, les zones blanches sont un peu réduites.
-
On calcule la soustraction entre im2 et le mask dans im4 :
im2=imread('lena_gray1.tif'); im3=imread('mask.tif');
im4=minus(im2,im3); imshow(im4)
Remarque : Les parties blanches dans l’image ont remplacées par des parties noires quand on a soustrait cette image avec le mask. II.
Filtre Median : - on affiche les profils de (im1, imb) sur la ligne 160 : im1=imread('lena_gray_256.tif'); imb= imnoise(im1,'salt & pepper',0.02); figure,subimage(im1); improfile title('profile de image im1 sur 160') figure,subimage(imb); improfile title('profile de image imb sur 160')
Remarque : Après l’ajout du bruit, il apparait des pics correspond à des pixels noir et blanc causé par le bruit. -
On filtre l’image imb par un filtre median de 3x3 : Fonction de filtre median : function [ im ] = mediann(J,taille) a1=(taille*taille-1)/2; a=(taille-1)/2; B = padarray(J,[a a]); for i=1+a:256 for j=1+a:256 k(1:9)=B(i-a:i+a,j-a:j+a); v=tri(k); im(i,j)=v(a1+1); end
end im=mat2gray(im); end Fonction de tri : function [ k ] = tri( k ) n=length(k); for m=1:n-1 for h=m+1:n if k(h)>k(m) vmax=k(m); k(m)=k(h); k(h)=vmax; end end end end
Programme :
im1=imread('lena_gray_256.tif'); imb= imnoise(im1,'salt & pepper',0.02); im5=mediann(imb,3); imshow(im5) title('image filtré')
- On affiche le profil de l’image im5 sur la ligne 160 :
- On affiche les profils des images im1, imb, im5 :
im1=imread('lena_gray_256.tif'); imb= imnoise(im1,'salt & pepper',0.02); im5=mediann(imb,3); subplot(1,3,1),subimage(im1);improfile title('profile de image im1 sur 160') subplot(1,3,2),subimage(imb);improfile title('profile de image imb sur 160') subplot(1,3,3),subimage(im5);improfile title('profile de image im5 sur 160')
Remarque : on observe qu’après le filtrage, les pics causé par le bruit ont été nettoyé.
-
On compare visuellement l’image filtrée par un filtre Moyenneur 5x5 et median 3x3 :
im1=imread('lena_gray_256.tif'); imb= imnoise(im1,'salt & pepper',0.02); im5=mediann(imb,3); im6=moyenneur(5,imb); subplot(1,2,1),imshow(im6) title('image filtrée par moyenneur 5x5') subplot(1,2,2),imshow(im5) title('image filtrée par median 3x3')
Conclusion : le filtre median donne un meilleur résultat, car il a la propriété d’éliminer les grands différences des niveaux de gris causé par le bruit dans l’image.
III.
Filtrage par noyau : - Le coefficient de pondération pour normaliser M : 1 2 1 M= 2 4 2 1 2 1
[ ] 3
3
P=∑ ∑ M ij =16 i=0 j=0
-
On donne le masque du filtre : ´ =1 M M p
-
On donne le résultat du filtre appliqué sur l’image :
La fonction du filtrage par noyau : function [ im ] = noyau( J,filtre ) somme=sum(sum(filtre)); H=(1/(somme))*filtre; a=(size(filtre,1)*size(filtre,1)-1)/8; B = padarray(J,[a a]); for i=1+a:256 for j=1+a:256 k=B(i-a:i+a,j-a:j+a); k=double(k); im(i-a,j-a)= sum(sum(k.*H)); end end im=mat2gray(im); end
le programme : I=imread('lena_gray_256.tif'); J = imnoise(I,'salt & pepper',0.02); filtre=[1 2 1;2 4 2;1 2 1]; imf=noyau(J,filtre); subplot(1,2,1),imshow(J) subplot(1,2,2),imshow(imf)
Remarque : l’image résultat par ce filtre est lissée et le bruit est réduit.
-
On compare visuellement le résultat de ce filtre et celui de median 3x3 :
-
Le filtre par noyau donne un meilleur lissage et une meilleure réduction du bruit que le filtre moyenne, mais il n’élimine pas complètement le bruit. Le filtre median donne un meilleur résultat que le filtre par noyau car il a supprimé le bruit dans l’image.
-