# Histogramme (imagerie numérique)

En imagerie numérique, l’histogramme est la représentation graphique de la distribution des pixels d'une l'image, ou d'une partie d'image, selon leur intensité. La forme la plus classique répartit la plage d'intensité sur l'axe horizontal, le noir ou les tons sombres étant situés à l'origine du graphique. En tenant compte du nombre de pixels, l'histogramme peut être représenté en termes de proportions ou de probabilités.
Descriptions élémentaires des images, les histogrammes sont au cœur des processus d'acquisition et des opérations de traitement d'images.
Diverses opérations peuvent produire des histogrammes dérivés d'un histogramme original et correspondant à des transformations de l'image initiale. L'analyse de leurs histogrammes permet la comparaison de variantes d'images selon différents paramètres.

## Définition

Pour une seule composante ou une image monochrome, l'histogramme est défini comme une fonction discrète qui associe à chaque valeur d'intensité le nombre de pixels ayant cette valeur. La détermination de l'histogramme consiste à compter le nombre de pixels pour chaque intensité présente dans l'image. Une quantification, qui regroupe quelques valeurs en une seule classe, peut améliorer la représentation ou le traitement de la distribution.

## Distributions inégales

Dans la plupart des contextes, hors le cas des images assimilables à des images binaires, les images de qualité ont un histogramme plus ou moins équilibré avec des valeurs présentes pour un grand nombre d'intensités réparties entre les hautes et les basses valeurs. A contrario, une image pauvre en valeurs moyennes, aura une distribution d'histogramme en U ; la forme inverse (cloche resserrée ou pic) traduisant le défaut d'une image grisâtre, mal contrastée. De même, un tassement des valeurs d'un côté ou de l'autre est la marque d'une image globalement sombre (sous-exposée) ou claire (sur-exposée).
Ces défauts, éventuellement cumulés, sont réductibles par une des opérations d'égalisation.

## Expression probabiliste

Les histogrammes sont en général normalisés en divisant la valeur de chaque classe par le nombre de pixels. La valeur d'une classe varie alors entre 0 et 1, et peut s'interpréter comme la probabilité d'occurrence de la classe dans l'image. L'histogramme peut alors être vu comme une densité de probabilité. Pour une image {x} en niveaux de gris codée sur $L$ niveaux, on définit n$_k$ le nombre d'occurrences du niveau x$_k$. La probabilité d'occurrence d'un pixel de niveau x$_k$ dans l'image est :
    $\ p_{x}(x_{k})=p(x=x_{k})={\frac {n_{k}}{n}},\quad 0\leq k<L$
avec n le nombre de pixels de l'image, et p$_x$ définit alors l'histogramme normalisé sur [0,1].
On définit également l'histogramme cumulé, somme partielle des probabilités d'occurrence :
    $P(x_{k})=\sum _{j=0}^{k}p_{x}(x_{j})$
Il peut s'interpréter comme la fonction de répartition associée à la variable aléatoire {x}.

## Exemple

Exemple de construction d'un histogramme d'une image couleur, dans l'espace RGB, sur les composantes rouge et bleue uniquement : Chaque composante est quantifiée en quatre intervalles, ce qui donne un nombre de classes de $4^{2}=16$. On peut alors représenter la table suivante par un histogramme 3D, où l'axe $x$ représente la composante bleue, l'axe $y$ représente la composante rouge et l'axe vertical est le nombre de pixels de chaque classe. Cet histogramme n'est pas normalisé.
| | | Rouge | Rouge | Rouge | Rouge |
| | | 0-63 | 64-127 | 128-191 | 192-255 |
| Bleu | 0-63 | 43 | 78 | 18 | 0 |
| Bleu | 64-127 | 45 | 67 | 33 | 2 |
| Bleu | 128-191 | 127 | 58 | 25 | 8 |
| Bleu | 192-255 | 140 | 47 | 47 | 13 |

## Propriétés

Les histogrammes ne sont pas modifiés par certaines transformations de l'image, telles que les rotations et les translations, ainsi que dans une moindre mesure les changements de point de vue, et les changements d'échelle.
Une propriété intéressante est leur facilité de calcul, puisqu'il ne s'agit que de comptage de pixels, ce qui se prête bien à une implémentation matérielle. Les histogrammes sont donc souvent utilisés pour des applications temps-réel.

## Types
### Images en couleur

Pour les images en couleur, on peut considérer les histogrammes des trois composantes indépendamment, mais ce n'est en général pas efficace. On construit plutôt un histogramme directement dans l'espace couleur. Les classes de l'histogramme correspondent désormais à une couleur (ou un ensemble de couleurs, en fonction de la quantification), plutôt qu'à une intensité.
Un histogramme peut être construit dans n'importe quel espace de couleur, (RVB, HSV), ou sous-ensemble de cet espace, ainsi que pour les images multispectrales ou hyperspectrales.

### Histogramme partiel ou local

Il est possible de ne calculer l'histogramme que pour toute partie de l'image, de forme arbitraire, ou au voisinage d'un point, on parle alors d'histogramme local.

### Histogramme pondéré

Un histogramme pondéré est un histogramme où la couleur d'un pixel ne vaudra pas 1 point de plus dans l'histogramme mais plutôt un poids défini en fonction de la position du pixel. Par exemple, les pixels centraux de l'image auront plus de poids dans l'histogramme (plus d'importance) que les pixels périphériques.

### Histogramme intégral

L'histogramme intégral est une représentation qui permet un calcul rapide d'histogrammes locaux, dans n'importe quelle région de l'image. La méthode a été proposée en 2005, et s'inspire de la représentation proposée pour les images intégrales.

## Traitements
### Égalisation d'histogramme

L'égalisation d'histogramme est une méthode d'ajustement du contraste d'une image 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 (0 à 255 en général pour des images 8 bits), en « étalant » l'histogramme. Théoriquement (cas continu) l'histogramme devrait même être plat (loi uniforme continue). Toutefois à cause de la discrétisation, ceci est rarement le cas.
L'égalisation est intéressante pour les images dont la totalité, ou seulement une partie, est de faible contraste (pixels d'intensité proches). La méthode est rapide, facile d'implémentation, et complètement automatique (i.e. pas de réglages).

### Spécification d'histogramme

Il n'est parfois pas pertinent de chercher à obtenir un histogramme uniforme par égalisation. La spécification d'histogramme est une méthode permettant de générer une image ayant une forme d'histogramme déterminée.
Si l'on souhaite obtenir un histogramme de forme $p_{z}$, à partir d'une image originale à $L$ niveaux de gris, d'histogramme $p_{x}$, alors la transformation est obtenue de la manière suivante :
La transformation par égalisation de l'image originale est donnée par
    $s=T(x)=(L-1)\int _{0}^{x}p_{x}(w)\,\mathrm {d} w$
La transformation par égalisation de l'image souhaitée est
    $s'=G(z)=(L-1)\int _{0}^{z}p_{z}(w)\,\mathrm {d} w$
L'égalisation de l'image originale et l'image transformée doit aboutir au même histogramme égalisé, on a donc
    $s=s'$ d'où $z=G^{-1}(T(x))$
L'image transformée peut donc être obtenue avec l'histogramme spécifié $p_{z}$, à partir des transformations $G$ (obtenue à partir de $p_{z}$) et $T$ (égalisation classique de l'image originale).

### Mesures de similarité

Dans de nombreuses applications, il est utile de calculer une distance (ou plus généralement une mesure de similarité/dissimilarité) entre histogrammes. Par exemple pour étudier les variations temporelles du contenu visuel dans une vidéo, ou pour trouver des images similaires à une image requête. On définit pour cela un certain nombre de distances pour mesurer si deux histogrammes sont « proches » l'un de l'autre. Soit $h_{1}$ et $h_{2}$ deux histogrammes de même taille $N$ (i.e. avec le même nombre de classes)
* Intersection : $d(h_{1},h_{2})=\sum _{i=1}^{N}\min \left[h_{1}(i),h_{2}(i)\right]$
* Corrélation : $d(h_{1},h_{2})={\frac {\sum _{i=1}^{N}{\bar {h}}_{1}(i){\bar {h}}_{2}(i)}{\sqrt {\sum _{i=1}^{N}{\bar {h}}_{1}(i)^{2}\sum _{i=1}^{N}{\bar {h}}_{2}(i)^{2}}}}$, où ${\bar {h}}(i)=h(i)-{\frac {1}{N}}\sum _{i=1}^{N}h(i)$.
* Chi-2 : $d(h_{1},h_{2})=\sum _{i=1}^{N}{\frac {\left[h_{1}(i)-h_{2}(i)\right]^{2}}{h_{1}(i)+h_{2}(i)}}$
De nombreuses autres mesures sont possibles, notamment la divergence de Kullback-Leibler et la distance de Bhattacharyya, puisque la comparaison d'histogrammes se ramène à une mesure de dissimilarité entre deux distributions de probabilités.

## Applications

L'histogramme est un outil de base en traitement d'images, il est utilisé dans de très nombreuses applications et méthodes.

### Rehaussement d'images

L'égalisation d'histogramme, qu'il soit global, ou appliqué de manière locale, est un outil très utilisé pour l'amélioration du contraste, et donc le rehaussement. De même, la spécification d'histogramme peut être utilisée pour le rehaussement.
Il est également possible d'utiliser les statistiques de l'histogramme (moyenne, variance) pour l'amélioration de l'intensité et du contraste.

### Segmentation en plans

Une segmentation en plans consiste à détecter les différents plans d'une vidéo. Pour cela, une méthode consiste à calculer un histogramme pour toutes les images de la vidéo, et d'étudier ensuite les variations temporelles des distances entre histogrammes consécutif. Une distance faible étant synonyme de similarité visuelle, et une distance élevé reflétant un fort changement visuel. Les changements de plans sont alors détectés comme étant les pics de ces variations temporelles.
Les histogrammes sont la méthode privilégiée pour la segmentation, qui donne les résultats parmi les plus robustes, tout en étant de faible complexité.

### Reconnaissance d'objets

Un histogramme peut être utilisé pour détecter, de manière simple, la présence d'un objet caractérisé par sa couleur spécifique.
Ceci fournit une vue d'ensemble bien plus compacte des données dans une image que de savoir la valeur exacte de chaque pixel. L'histogramme de couleurs d'une image est invariable selon la translation ou de la rotation de l'axe de vue, et varie progressivement selon l'angle de vue. Ce qui fait que l'histogramme de couleurs est un outil particulièrement intéressant pour la reconnaissance d'objets ayant une position et une rotation inconnue par rapport à la scène.
L'inconvénient principal de cet histogramme est que la représentation obtenue dépend seulement de la couleur de l'objet étudié, par ce fait il n'y a pas de moyen de distinguer la différence entre une tasse rouge et blanche d'une autre tasse blanche et rouge. En d'autres termes, l'algorithme de l'histogramme de couleurs n'a pas d'idée générale de la tasse, seulement de son nombre de couleurs, alors on ne peut la comparer avec une tasse bleue et blanche, car les informations obtenues ne seront pas semblables.

### Photographie

L'histogramme est un outil utile pour beaucoup de photographes. Il permet notamment de savoir très rapidement s'il existe des zones bouchées (noir complet) ou brûlées (blanc pur) dans la photographie. L'histogramme permet de contrôler la qualité de l'exposition de manière objective. C'est toutefois une vision théorique des choses : il est impossible à un histogramme ne comportant qu'un nombre très limité de points d'affichage de rendre compte des valeurs de tous les pixels d'une photographie en comportant des millions. Cette méthode n'est pas fiable pour exposer correctement car, en photo numérique, il importe avant tout de garder des détails dans les tons clairs. Pour vérifier s'il existe des zones de l'image surexposées le seul moyen vraiment efficace sur le terrain est la fonction de clignotement des zones écrêtées disponible sur la plupart des reflex numériques et certains autres modèles.
Il est important de considérer que l'histogramme peut être analysé correctement quel que soit l'écran utilisé et ses réglages, alors que la lecture d'une image seule ne sera pas juste si l'écran utilisé n'est pas bien calibré. L'histogramme est un moyen de vérifier certaines informations juste après la prise de vue.