Découvrez notre Chaîne YouTube "Devenir Ingénieur"

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

Click to rate this post!
[Total: 1 Average: 5]

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée.

Anti-Robot *

You have successfully subscribed to the newsletter

There was an error while trying to send your request. Please try again.

FPGA | Arduino | Matlab | Cours will use the information you provide on this form to be in touch with you and to provide updates and marketing.