Catégories
Algorithme Matlab projet matlab Projets traitement d'image Projets traitement du signal Traitement du signal sur matlab

Le filtre Médian avec Matlab

Objectif

  1. Savoir implémenter un filtre médian
  2. Savoir implémenter un filtre moyenneur
  3. Savoir gérer les bords d’une image
  4. Savoir ajouter le bruit à une image
  5. Savoir la différence entre le bruit gaussien et impulsionnel
  6. Etc.

Voir le tuto pour plus de détails

Filtre Médian Vs Moyenneur

Comment ajouter/supprimer les bords ?

La nouvelle fonction paddim() permet d’ajouter u supprimer les bords d’une image. Elle prend en entrée une image au NG, le nombre de pixels des bordes et le type de l’opération (ajout ou suppression des bords). Ci-dessous la définition de la fonction paddim().

function im_out =  paddim(im_in, n, Type)

if Type==0
im_in1=padarray(im_in,n);
im_in2=padarray(im_in1',n);
im_out=im_in2';
else
im_out=im_in(n+1:end-n,n+1:end-n);
end;

end

Comment implémenter un filtre médian ?

Le filtre médian est un filtre particulièrement robuste face au bruit impulsionnel contrairement au filtre moyenneur. Il entre dans la catégorie des filtres non linaires.  Car les opérations effectues aux sont de types non linaires (tri des pixels) comme le cas du filtre maximal ou minimal (voir la vidéo pour plus de détails). Ci-dessous les étapes clés de l’implémentation d’un filtre médian appliqués à chaque pixel (i,j) de l’image.

  1. Extraction de l’imagette
  2. Conversion matrice => Tableau
  3. Tri des valeurs du tableau
  4. Calcul de  l’Indice Médian
  5. Extraction de la valeur médiane
  6. Affectation de la valeur au pixel (i,j)
% Filtrage des images
for i=p+1:M-p
for j=p+1:N-p

% Filtre Médian
im0=im_in(i-p:i+p, j-p:j+p); % 1. Extraction de l'imagette
V0=im0(:); % 2. Conversion matrice => Tableau
V1=sort(V0); % 3. Tri des valeurs du tableau
Im=round(n*n/2); % 4.1 Indice Médian
Med=V1(Im); % 4.2 Extraction de la valeur médiane
im_med(i,j)=Med; % 5. Affectation de la valeur au pixel (i,j)

% Filtre Max/Min
im_maxMin(i,j)=max(V0);
%im_maxMin(i,j)=min(V0);


% Filtre Moyenneur
im_mean(i,j)=mean(V0);
end;
end;

Programme Matlab

clear all; close all; clc;




%% Traitement d'Images | Matlab #4: Filtre Médian - Filtrage non linéaire
%% www.Electronique-Mixte.fr



% Savoir implémenter un filtre médian
% Savoir implémenter le filtre Max et Min
% Savoir gérer les bords d'une image
% Savoir ajouter le bruit à une image
% Etc.





%% Image Originale

% im_rgb= imread('onion.png');
% im_rgb= imread('peppers.png');
% im_rgb= imread('cameraman.tif');
% im_rgb= imread('kids.tif');
% im_rgb= imread('mandi.tif');
% im_rgb= imread('cell.tif');
% im_rgb= imread('mri.tif');
im_rgb= imread('spine.tif');
% im_rgb= imread('moon.tif');

im_1=im2double(im_rgb);

[M,N,P]=size(im_1);
if P==3
im_in_0=rgb2gray(im_1);
else
im_in_0=im_1;
end;

% Normalisation
im_in_0=im_in_0/max(im_in_0(:));


%% Redimensionner l'image (Interpolation cubique)
% M=256; N=round(1.5*M);
% im_in_0=imresize(im_in_0,[M N],'cubic');

%% Ajout du bruit
d=0.20; im_noise=imnoise(im_in_0,'salt & pepper',d);
% v=0.2; im_noise=imnoise(im_in_0,'gaussian',v);

%% Ajout des bords
p=1; n=2*p+1; % Taille du Filtre

% Type=0: Ajout des bords
% Type/=0: Suppression des bords
Type=0;
im_in = paddim(im_noise, p, Type);

%% Filtres non linéaires
[M, N]=size(im_in);
im_maxMin=im_in; % Max (2 boucles for)
im_mean=im_in; % Min (2 boucles for)
im_med=im_in; % Médiane (2 boucles for)


% Filtrage des images
for i=p+1:M-p
for j=p+1:N-p

% Filtre Médian
im0=im_in(i-p:i+p, j-p:j+p); % 1. Extraction de l'imagette
V0=im0(:); % 2. Conversion matrice => Tableau
V1=sort(V0); % 3. Tri des valeurs du tableau
Im=round(n*n/2); % 4.1 Indice Médian
Med=V1(Im); % 4.2 Extraction de la valeur médiane
im_med(i,j)=Med; % 5. Affectation de la valeur au pixel (i,j)

% Filtre Max/Min
im_maxMin(i,j)=max(V0);
%im_maxMin(i,j)=min(V0);


% Filtre Moyenneur
im_mean(i,j)=mean(V0);
end;
end;


% Suppression des bords
Type=1;
im_maxMin = paddim(im_maxMin, n, Type);
im_mean = paddim(im_mean, n, Type);
im_med = paddim(im_med, n, Type);


%% Affichage

figure(1);
% subplot(221); imshow(im_noise);title('Image Bruitée','fontsize',16);
% subplot(222); imshow(im_maxMin); title('Filtre Max/Min','fontsize',16);
% subplot(223); imshow(im_mean); title('Filtre Moyenneur','fontsize',16);
% subplot(224); imshow(im_med); title('Filte Médian','fontsize',16);

subplot(221); imagesc(im_noise);title('Image Bruitée','fontsize',16); colormap(gray);
subplot(222); imagesc(im_maxMin); title('Filtre Max/Min','fontsize',16);colormap(gray);
subplot(223); imagesc(im_mean); title('Filtre Moyenneur','fontsize',16);colormap(gray);
subplot(224); imagesc(im_med); title('Filte Médian','fontsize',16);colormap(gray);

Accueil Traitement d'Images

Laisser un commentaire