Le seuillage est une opération fondamentale en traitement d’images avec Matlab. Elle consiste à transformer une image au NG (ou couleur) en une image binaire. L’opération du seuillage à pour objectifs de :
Réduire la taille de l’image: les pixels d’une image binaire ne peuvent prendre que deux valeurs (soit 0 ou 1). Le codage des pixels est « effectuer sur 1 bits contrairement aux images usuelles sur 8 bits. On constate un rapport 8 concernant l’allocation mémoire des deux images
Faciliter les traitements : il est beaucoup plus simple de traiter les images binaires contrairement aux images multi-niveaux (segmentation, labellisation, classification, etc.). Il permet de réduire l’espace des paramètres de l’image à traiter
Technique 1
On verra dans ce tuto le seuillage d’une image couleur (ou NG). Le programme est compatible avec divers formats d’images. Dans le cas d’une image RGB, on va faire les traitements pour chaque composante (R, G et B). La première technique consiste à utiliser deux boucle for et un seuil global/composante. Le choix du seuil est primordial durant l’opération du seuillage. Un mauvais choix peut entrainer par la suite des mauvais traitements de l’image.
On définit la valeur moyenne comme étant le seuil de chaque composante. Lorsque le pixel (i,j)>Seuil, alors on positionne à 1 le pixel (i,j) de l’image résultante, sinon à 0. On ferra l’opération pour chaque composante. Ci-dessous l’extrait du code de la technique.
im_2=0*im_1;
Seuil1=mean2(im_1(:,:,1));
Seuil2=mean2(im_1(:,:,2));
Seuil3=mean2(im_1(:,:,3));
for i=1:M
for j=1:N
% Composante R
if(im_1(i,j,1)>Seuil1)
im_2(i,j,1)=1;
end;
% Composante G
if(im_1(i,j,2)>Seuil2)
im_2(i,j,2)=1;
end;
% Composante B
if(im_1(i,j,3)>Seuil3)
im_2(i,j,3)=1;
end;
end;
end;
Technique 2
L’utilisation d’une double boucle for semble gourmande en temps du traitement. En particulier = lorsque la taille e l’image est importante. Matlab met à disposition la fonction im2bw() dédiée au seuillage d’une image en une ligne de code ! On peut également utiliser l’opérateur de comparaison « > ». Ci-dessous l’extrait du code Matlab.
% Par comparaison
im_2(:,:,1)=im_1(:,:,1)> Seuil1;
im_2(:,:,2)=im_1(:,:,2)> Seuil2;
im_2(:,:,3)=im_1(:,:,3)> Seuil3;
% Ou bien
im_3=0*im_1;
im_3(:,:,1)=im2bw(im_1(:,:,1),Seuil1);
im_3(:,:,2)=im2bw(im_1(:,:,2),Seuil2);
im_3(:,:,3)=im2bw(im_1(:,:,3),Seuil3);
Technique 3
Le deux techniques semblent par très efficace, car elles font la comparions pixel par pixel sans tenir en c considération les pixels voisins. La technique 3 en revanche compare la valeurs du pixel (i,j) à la valeur moyenne des pixels voisins ! Le paramètre p dans le programme indique le nombre de pixels voisins (3×3 pour p=1, 5×5 pour p=2, etc.). Ci-dessous l’extrait du code Matlab.
Voir le tuto pour plus de détails
p=3; n=2*p+1; % 5x5:
for i=p+1:M-p
for j=p+1:N-p
% Composante R
I0=im_1(i-p:i+p, j-p:j+p,1);
M=mean(I0(:));
if(M>Seuil1)
im_2(i,j,1)=1;
end;
% Composante G
I0=im_1(i-p:i+p, j-p:j+p,2);
M=mean(I0(:));
if(M>Seuil2)
im_2(i,j,2)=1;
end;
% Composante B
I0=im_1(i-p:i+p, j-p:j+p,3);
M=mean(I0(:));
if(M>Seuil3)
im_2(i,j,3)=1;
end;
end;
end;
La technique est robuste au bruit, car elle effectuer une moyenne locale des pixels de l’image avant l’opération du seuillage !
Code complet
clear all; close all; clc;
%% Traitement d'Images | Matlab #6: Seuillage - 3 Techniques
%% www.Electronique-Mixte.fr
% Comprendre la notion du seuillage et son utilité
% Savoir appliquer un seuil global à une image
% Savoir appliquer un seuil local à une image
% Etc.
%% Lecture de l'image
im_rgb= imread('coins.png');
% im_rgb= imread('bitcoin.jpg');
% im_rgb= imread('spine.tif');
% im_rgb= imread('mri.tif');
im_0=im2double(im_rgb);
[M,N,P]=size(im_0);
im_1=zeros(M,N,3);
for j=1:3
if P==3
im_1(:,:,j)=imadjust(im_0(:,:,j));
else
im_1(:,:,j)=imadjust(im_0);
end;
end;
%% Seuillage: Technique 1
im_2=0*im_1;
Seuil1=mean2(im_1(:,:,1));
Seuil2=mean2(im_1(:,:,2));
Seuil3=mean2(im_1(:,:,3));
% for i=1:M
% for j=1:N
%
% % Composante R
% if(im_1(i,j,1)>Seuil1)
% im_2(i,j,1)=1;
% end;
%
% % Composante G
% if(im_1(i,j,2)>Seuil2)
% im_2(i,j,2)=1;
% end;
%
% % Composante B
% if(im_1(i,j,3)>Seuil3)
% im_2(i,j,3)=1;
% end;
% end;
% end;
%% Seuillage: Technique 2
% Par comparaison
% im_2(:,:,1)=im_1(:,:,1)> Seuil1;
% im_2(:,:,2)=im_1(:,:,2)> Seuil2;
% im_2(:,:,3)=im_1(:,:,3)> Seuil3;
% Ou bien
im_3=0*im_1;
im_3(:,:,1)=im2bw(im_1(:,:,1),Seuil1);
im_3(:,:,2)=im2bw(im_1(:,:,2),Seuil2);
im_3(:,:,3)=im2bw(im_1(:,:,3),Seuil3);
%% Seuillage: Technique 3
p=3; n=2*p+1; % 5x5:
for i=p+1:M-p
for j=p+1:N-p
% Composante R
I0=im_1(i-p:i+p, j-p:j+p,1);
M=mean(I0(:));
if(M>Seuil1)
im_2(i,j,1)=1;
end;
% Composante G
I0=im_1(i-p:i+p, j-p:j+p,2);
M=mean(I0(:));
if(M>Seuil2)
im_2(i,j,2)=1;
end;
% Composante B
I0=im_1(i-p:i+p, j-p:j+p,3);
M=mean(I0(:));
if(M>Seuil3)
im_2(i,j,3)=1;
end;
end;
end;
%% Affichage
% figure(1);
% subplot(221); imshow(im_1);title('Image Originale','fontsize',16);
% subplot(222); imshow(im_2(:,:,1)); title('Composante R','fontsize',16);
% subplot(223); imshow(im_2(:,:,2)); title('Composante G','fontsize',16);
% subplot(224); imshow(im_2); title('Image RGB','fontsize',16);
figure(1);
subplot(131); imshow(im_1);title('Image Originale','fontsize',16);
subplot(132); imshow(im_3); title('Technique 2','fontsize',16);
subplot(133); imshow(im_2); title('Technique 3','fontsize',16);
imwrite(im_1,'im_1.png');
imwrite(im_2,'im_2.png');
Découvrez notre Chaîne YouTube "Devenir Ingénieur" Obtenir le fichier PDF Objectifs Savoir coder la volatilité d’un actif Savoir calculer la variance et la variance mobile d’un actif Comprendre la notion de la volatilité Avoir l’importance Lire la suite…
Découvrez notre Chaîne YouTube "Devenir Ingénieur" Obtenir le fichier PDF Objectifs Comprendre la notion de la tendance Savoir modéliser la tendance avec approximation linéaire Se familiariser avec la notion des cycles, fréquences, etc. Savoir la Lire la suite…
Découvrez notre Chaîne YouTube "Devenir Ingénieur" Obtenir le fichier PDF Objectifs Savoir détecter un objet en mouvement Savoir suivre un objet en mouvement Savoir tracer la trajectoire d’un objet en mouvement Savoir calculer le Lire la suite…
You have successfully subscribed to the newsletter
There was an error while trying to send your request. Please try again.
0 commentaire