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