I/Les filtres linéaires passe bas I.1 Le filtre moyenneur 1-Partie de code : cl

I/Les filtres linéaires passe bas I.1 Le filtre moyenneur 1-Partie de code : close all clear all %%%%I/Les filtres linéaires passe bas : %%%%I.1/Le filtre moyenneur: %%1/ im1=imread('cameraman.tif'); vect = (1/9)*ones(3); imfilt_avereage=filter2(vect,im1); vect2=fspecial('average',3); imfilt_avereage2=filter2(vect2,im1,'same'); imfilt_avereage3=filter2(vect2,im1,'valid'); imfilt_avereage4=filter2(vect2,im1,'full'); figure; subplot(2,2,1),imshow(im1),title('image origine'); subplot(2,2,2),imshow(imfilt_avereage/255),title('image filtrée (same)'); subplot(2,2,3),imshow(imfilt_avereage3/255),title('image filtrée (valid)'); subplot(2,2,4),imshow(imfilt_avereage4/255),title('image filtrée (full)'); 1-il s’agit d’une erreur d’execution car la fonction imshow reçoit des valeurs normalisées de 0 à 1(non pas de 0 à 255). Pour résoudre ce probleme il y a deux méthodes : si on devise la valeur double de imfilt par 255 sinon on ajoute uinit8 à imshow. 2-L’effet de bords signifie l’apparition d’un cadre sur les bords de l’image. Same : Renvoie la partie centrale des données filtrées, qui est de la même taille que l’image d’origine.(c’est comme on n’a pas touché ls bords). Valid : L’image filtrée a une taille inferieure que l’image d’origine car valid renvoie uniquement les parties des données filtrées qui sont calculées sans bords remplis de zéro (c.a.d on a supprimé un ligne et une colonne pour chaqu’un de 4 cotés de la matrice et on a fait le calcul sans ces 4 elements) Full : L’image filtrée a une taille supérieure que l’image d’origine car full renvoie les données filtrées 2D complètes. (on remplis les 2 lignes et 2 colonnes de chaque coté de la matrice originale addées par des 0 et on calcule la nouvelle matrice qui grandes que l’originale) I.2 Le filtre gaussien : 1_Partie code pour une image niveau de gris : im2=imread('flower.png'); [r, c, w] = size(im2); %%3/ %Ajout d'un bruit gaussien : im2=imread('canoe.png'); [r, c, w] = size(im2); %%3/ %Ajout d'un bruit gaussien : im2n=imnoise(im2,'gaussian',0.02); figure; subplot(1,2,1),imshow(im2),title('Image original'); subplot(1,2,2),imshow(im2n),title('Image with gaussian noise'); %Suppression du bruit grace au filtre gaussien : sigma=10; h = fspecial('gaussian',[5 5],sigma); imfilt_gaussian=imfilter(im2n,h); figure; imshow(imfilt_gaussian),title('suppression du bruit grace au filtre gaussien'); Image originale avec bruit : Image après le filtrage gaussien : 2-filtrage d’une image couleur en deux methodes : Partie code : im2=imread('canoe.png'); [r, c, w] = size(im2); %%3/ %Ajout d'un bruit gaussien : im2n=imnoise(im2,'gaussian',0.02); figure; subplot(1,2,1),imshow(im2),title('Image original'); subplot(1,2,2),imshow(im2n),title('Image with gaussian noise'); %Suppression du bruit grace au filtre gaussien : sigma=10; h = fspecial('gaussian',[5 5],sigma); imfilt_gaussian=imfilter(im2n,h); figure; imshow(imfilt_gaussian),title('suppression du bruit grace au filtre gaussien'); Image couleur avant et après bruit : Image apres un filtrage gaussien(selon la deuxieme methode de hsv) : 4-la forme géométrique spatiale du filtre gaussien utilisé : Partie code : x = -127 : 127; y = -127 : 127; [X , Y] = meshgrid(x,y); GA=(1/(2*pi*sigma^2))*exp(-(X.^2+Y.^2)/(2*sigma^2)); figure; mesh(X,Y,GA),title('la forme géométrique spatiale du filtre gaussien'); I.3 Le filtre Wiener : 1-Parie code : w=zeros(r,c,w); for k=1:3 tmp = im2n(:,:,k); w(:,:,k) = wiener2(tmp, [6 6]); end figure; imshow(uint8(w)),title('suppression du bruit grace au filtre wiener'); 2-Affichage de l’imageaprés le filtrage de Weiner :son a choisi la meme image onion.jpeg 026. 3-La différence entre le filtrage gaussien et le filtrage par Wiener : Wiener ne caractérise pas le signal et le bruit par leur forme analytique mais plutôt par leur propriétés statistiques, le faite de minimiser une erreur quadratique qui existe entre le bruit et le signal d’origine donne un résultat meilleur par rapport a Gausse qui travaille selon sa cloche : - Sigma>1 : rendre image floue - Sigma<1 : réduire le bruit - Plus sigma est grand plus la cloche est large plus le fou sera remarquer. II/ Les filtres linéaires passe haut : 2.1 La détection de contour : Partie code : deux methodes image =imread('circuit.tif') ; Px=[-1 0 1;-1 0 1]; Imagex= filter2 (Px, image); figure, imshow(Imagex/255); Py= Px' ; Imagey=filter2(Py,image); figure, imshow(Imagey/255); edge=sqrt(Imagex.^2+ Imagey.^2); figure, imshow(edge/255); %%filtre prewitt avec la fonction fspecial H = fspecial('prewitt'); imfilt_prewitt1=imfilter(image,H); figure; imshow(imfilt_prewitt1),title('image apres filtre de prewitt'); imfilt_prewitt2=imfilter(image,H'); figure; imshow(imfilt_prewitt2),title('image apres filtre de prewitt'); edge=sqrt(double(imfilt_prewitt1).^2+ double(imfilt_prewitt2).^2); figure, imshow(edge/255); Le programme écrit en 1 est un filtre passe haut de Prewitt qui est un filtre linéaire qui détecte les contours( les hautes fréquences ) par la matrice de dérivé [-1 0 1] puis un lissage en utilisant le deuxième vecteur [1 1 1] t , il se fait sur deux directions horizontalement ( la matrice Px ) et verticalement ( la matrice Py) ,puis calculer le module pour avoir l’image filtrée (les contours de l’image originale ). 1-verticalement 2-horizontalement 3-resultat finale 2-programme qui fait la meme chose : le filtre de sobel Partie code : Sx = [-1 -2 -1;1 2 1]; Ix=filter2(Sx,image); figure,subplot(3,1,1),imshow(Ix/255); Sy=Sx'; Iy=filter2(Sy,image); subplot(3,1,2),imshow(Iy/255); edge2=sqrt(Ix.^2 + Iy.^2); subplot(3,1,3),imshow(edge2/255); 2/seuillage : Ce programme est la pour binariser l’image selon un seuil de 0.3 cad toute intensité inferieur de 0.3 devient blanc sinon elle devient noire . Partie code : BW=[r c]; seuil=0.3; for i=1:r for j=1:c if edge(i,j)/255 < seuil BW(i,j)=0; else BW(i,j)=1; end end end figure,imshow(BW),title('Image en noir et blanc (seuil=0.3)'); III. La morphologie mathématique : 1-principe de fonctionnement : Partie code : image=imread ('onion.png') ; im=image ; x=im2bw(im); se=[0 1 0;1 1 1;0 1 0]; im2=imopen(x,se); imshow(im2);title('ouverture'); se2=strel('disk',10); closebw =imclose(x,se2); figure,imshow(closebw);title('fermeture'); Ce programme a deux parties :  L’ouverture : Il s’agit d’un érosion puis dilatation par un élément structurant se qui sert a agrandir les trous puis les rendre petit par la dilatation , il supprime aussi les composantes connexes les plus petit que l’élément structurant .  Fermeture :  Il s’agit d’une dilatation puis érosion par un élément structurant se2 qui sert a éliminer les trous les plus petits que l’élément structurant , Soude les formes proches. 2-les éléments structurants : Se : c’est une matrice 3*3 quelle a forme d’un plus . Se2 : élément structurant de la forme circulaire . NOTE : on a utilisé l’image onion.png au lieu de tree.png car elle ne s’affiche pas chez nous uploads/S4/ traitementd-x27-images-belkadi-belarbi.pdf

  • 30
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Fev 07, 2022
  • Catégorie Law / Droit
  • Langue French
  • Taille du fichier 0.4370MB