Vous êtes sur la page 1sur 6

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

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Le filtre Médian avec Matlab

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

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Le filtre Médian avec Matlab

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);

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Le filtre Médian avec Matlab

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);

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Le filtre Médian avec Matlab

[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

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Le filtre Médian avec Matlab

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

Click to rate this post!


[Total: 2 Average: 5]

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

Vous aimerez peut-être aussi