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.
% 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;