Histogramme et applications

L’histogramme d’une image est la fonction qui associe à chaque valeur d’intensité le nombre de pixels dans l’image ayant cette valeur.

Image niveau de gris histogramme de l’image

Deux images différentes peuvent avoir le même histogramme:

 

Luminance

La luminance (ou brillance) est définie comme la moyenne de tous les pixels de l’image.
Pour augmenter la luminance, il suffit de décaler l’histogramme :

I'(i , j) = I (i , j) + b

Dans les deux images suivantes, seule la luminance est différente

Dynamique d’une image : D = [valmin , valmax ]

Contraste
Le contraste peut être défini de plusieurs façons :
Variance des niveaux de gris (N nombre de pixels dans l’image)

\frac{1}{N}\sum\limits ^{N}_{n=1}( I( i,j) -Moy)^{2}

Variation entre niveaux de gris max et min

\frac{max[ I( i,j)] -min[ I( i,j)]}{max[ I( i,j)] +min[ I( i,j)]}

Pour améliorer le contraste, il existe plusieurs techniques:

  • Transformation linéaire
  • Transformation linéaire avec saturation
  • Transformation linéaire par morceau
  • Transformation non‐linéaire
  • Égalisation de l’histogramme

Transformation linéaire
On étire la dynamique en rééchelonnant les niveaux de gris entre 0 et 255

I'( i,j) =\frac{255}{max-min} \ ( I( i,j) -min)

Exemple

Source: (*)

implémentation
Idée de base:
For ( I=0;\ i< nl;i++)
For ( j=0;j< nc;j++)

I'( i,j) =\frac{255}{max-min} \ ( I( i,j) -min)

Code Matlab

im=imread('pout.tif');
ma = max(max(im));
mi = min(max(im));
res=(im-mi).*(255./(ma-mi));
subplot ( 2 , 2 , 1 ) ; imshow(im) ; title ( 'Image originale' ) ;
subplot ( 2 , 2 , 2 ) ; imshow(res) ; title ( 'Image trasfomée avec LUT linéaire' ) ;
subplot ( 2 , 2 , 3 ) ; imhist(im) ; title ( 'Histogramme image originale' ) ;	
subplot ( 2 , 2 , 4 ) ; imhist(res) ; title ( 'Histogramme image traitée' ) ;

Transformation linéaire avec saturation

Source: (*)

Exemple avec Matlab:

im=imread('pout.tif');
mi = 80;
ma = 150;
res=(im-mi).*(255./(ma-mi));
subplot ( 2 , 2 , 1 ) ; imshow(im) ; title ( 'Image originale' ) ;
subplot ( 2 , 2 , 2 ) ; imshow(res) ; title ( 'Image transfomée avec LUT linéaire avec saturation' ) ;
subplot ( 2 , 2 , 3 ) ; imhist(im) ; title ( 'Histogramme image originale' ) ;
subplot ( 2 , 2 , 4 ) ; imhist(res) ; title ( 'Histogramme image traitée' ) ;

 

Transformation linéaire par morceaux
Source: (*)

Transformation non linéaire

Autres transformations d’histogramme

L’image négative:

positiveImage = imread('CameraMan.tif');
negativeImage = 255 - positiveImage;
subplot ( 1 , 2 , 1 ) ; imshow(positiveImage) ; title ( 'Image positive' ) ;
subplot ( 1 , 2 , 2 ) ; imshow(negativeImage) ; title ( 'Image negative' ) ;

Egalisation d’histogramme

l’égalisation d’histogramme est une méthode d’ajustement du contraste d’une image numérique qui utilise l’histogramme. Elle consiste à appliquer une transformation sur chaque pixel de l’image, et donc d’obtenir une nouvelle image à partir d’une opération indépendante sur chacun des pixels. Cette transformation est construite à partir de l’histogramme cumulé de l’image de départ.

L’égalisation d’histogramme permet de mieux répartir les intensités sur l’ensemble de la plage de valeurs possibles, en étalant l’histogramme.

Méthode :

  • On cherche à aplanir l’histogramme
  • Calcul de l’histogramme h(k) avec k appartient à [0; 255]
  • Histogramme cumulé
  • Transformation des niveaux de gris de l’image

Code Matlab:

I = imread('pout.tif');
imshow(I)
imhist(I)
I2 = histeq(I); 
subplot ( 2 , 2 , 1 ) ; imshow( I) ; title ( 'Image originale' ) ;
subplot ( 2 , 2 , 3 ) ; imhist(I) ; title ( 'Histogramme original' ) ;
subplot ( 2 , 2 , 2 ) ; imshow(I2) ; title ( 'Image traitée (égalisation d''histogramme)' ) ;
subplot ( 2 , 2 , 4 ) ; imhist(I2) ; title ( 'Histogramme égalisé' ) ;

Egalisation d’une image couleur

  • Calculer l’intensité de l’image couleur I = (R + V + B)=3
  • Calculer l’histogramme de I
  • Calculer l’histogramme cumulé de I
  • Appliquer l’égalisation de l’histogramme dans chaque plan de l’image couleur

Seuillage
Le seuillage d’image est une technique de binarisation d’image, elle consiste à transformer une image en niveau de gris en une image dont les valeurs de pixels ne peuvent avoir que la valeur 1 ou 0. On parle alors d’une image binaire ou image en noir et blanc.
Soit une image f de dimension N × M. f ( i , j ), le seuillage d’images consiste à fixer un seuil s à partir duquel tout pixel ayant une intensité supérieure ou égale au seuil s se voit attribuer la valeur 255 et le reste des pixels sera à 0. L’image binaire est obtenue par la formule suivante :

\begin{array}{l} g(i,j) =\ \ 255\ si\ f( i,j) \geqslant s\\ g(i,j) =0\ sinon \end{array}

Exemple de seuillage avec differents seuils:

I=imread('Mona_Lisa-NG.jpg');
BW1 = im2bw(I,70/256);
BW2= im2bw(I,123/256);
BW3 = im2bw(I,170/256);
level = graythresh(I);% seuil calculé avec la méthode d'Otsu
BW4 = im2bw(I,level); 
subplot(1,5,1); imshow(I); title ( 'Image originale' ) ;
subplot(1,5,2); imshow(BW1); title ( 'im binaire, seuil=70') ;
subplot(1,5,3); imshow(BW2); title ( 'im binaire, seuil=123') ;
subplot(1,5,4); imshow(BW3); title ( 'im binaire, seuil=170') ;
subplot(1,5,5); imshow(BW4); title ( 'im binaire, seuil calculé avec Otsu' ) ;

 


(*): Caroline Rougier: Traitement d’images (IF2730); Univ. de Monterial)