TRAITEMENT DES IMAGES NUMERIQUES

 

 

 

 

 

 

 

 

 

EGALISATION D’HISTOGRAMME

 

 

TAUVY Alexandre

CARAYON Nicolas

SOISSONS Sébastien

 

 

Projet réalisé sous la direction du Pr Henri MAITRE

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


I.Introduction. 4

II. Qu’est-ce qu’une image ?. 4

III. Qu’est-ce qu’un histogramme ?. 6

a)     Définition. 6

b)     Sensibilité de l’image aux modifications d’histogrammes. 7

IV. Entropie. 9

a)     entropie d’ordre 0. 9

V. Pourquoi est-il nécessaire de modifier l’histogramme ?. 10

VI. Les algorithmes mathématiques. 10

a)     l’expansion de dynamiques. 10

b)     Egalisation d’histogramme. 14

Algorithme. 14

Résultats. 15

2ème algorithme. 20

Comparaison des résultats du 1er algorithme avec ceux du 2ème 21

Pourquoi les programmes d’égalisation d’histogramme ne produisent pas en général des images avec des histogrammes plats ?. 23

calcul de l’entropie d’ordre 0. 24

Egalisation filtrée. 25

c)     découpage de l’image. 27

découpage de l’image en petite surface. 27

Application de l’égalisation sur un voisinage. 28

d)     découpage de l’histogramme. 30

VII. les manipulations d’images et d’histogrammes pour rendre un histogramme plat 33

a)     égalisation d’histogramme par addition aléatoire. 33

b)     aplanissement 37

c)     ecrêtage. 40

d)     transformation en histogramme plat 43

VIII. Extension à une image couleur 49

a)     Quelle méthode appliquer à quel type d’image ?. 49

IX. conclusion. 56

X. A propos de ce document…... 57


I.Introduction

 

Les développements technologiques de ces vingt dernières années ont permis aux systèmes numériques d’envahir notre quotidien. Que ce soient des applications multimédia qu’utilise monsieur Tout le monde tous les jours chez lui ou au bureau ou les applications les plus pointues de la recherche scientifique, il n’est plus à démontrer que le numérique occupe une place de choix dans le monde actuel.

Parmi les grandes composantes des systèmes numériques, une grande importance est accordée à l’image. Que ce soit pour l’échange de photographies via le net ou la reconnaissance de formes sur des images médicales en passant par l’imagerie satellite et toutes ses applications, les enjeux économiques et humains sont de taille.

La représentation et le traitement des images numériques font l’objet de recherches très actives à l’heure actuelle. Les traitements sont nombreux, et parmi eux on compte l’égalisation d’histogramme dont l’objectif principal est l’augmentation du contraste d’une image (afin de la rendre plus agréable à l’œil, ou d’extraire une information particulière par exemple).

Ce rapport se focalise entièrement sur ce traitement précis et a pour vocation de présenter, après avoir posé quelques définitions essentielles, les diverses techniques pouvant être mises en œuvre ainsi que leurs limites.

 

 

 

II. Qu’est-ce qu’une image ?

 

-         Une image monochrome est une fonction à 2 dimensions de l’intensité lumineuse, f(x,y), où x et y sont des coordonnées spatiales et la valeur de f en (x,y) est proportionnelle à la luminosité (« brigthness ») de l’image en ce point.

 

-         pour une image en couleur, f est un vecteur dont chaque composante donne la luminosité de l’image au point (x,y) relativement à l’espace des couleurs choisi (ex : RVB, XYZ, Lab, …).

 

-         Une image numérique (« digital ») est une image f(x,y) dont à la fois le domaine spatial et la luminosité ont été discrétisés. Elle est représentée par une matrice d’entiers pour l’image monochrome :

 

 

 

 

ou par 3 matrices d’entiers pour une image couleur. (chacune représentant un sous-espace de l’espace des couleurs. ex : la couleur rouge dans le système RVB) :

 

 

 

 

 

 


Zone de Texte: BZone de Texte: V                   

 

 

 

La valeur de la luminosité numérisée est appelée  niveau de gris (« grey level »).

En général, on considère que les images sont codées sur 256 niveaux de gris.

Chaque élément de la matrice est appelé un « pixel » ou un « pel » qui vient de l’expression « picture element ».

 


III. Qu’est-ce qu’un histogramme ?

 

a)   Définition

 

 

 

 

 

 

 

L’histogramme d’une image est une fonction discrète. Elle représente le nombre de pixels en fonction du niveau de gris.

Lorsque cette fonction est normalisée entre 0 et 1 pour tous les niveaux de gris, on peut la voir comme une densité de probabilité qui fournit la probabilité de trouver un certain niveau de gris de l’image.

Ainsi le niveau de gris d’un pixel devient une variable aléatoire dont la valeur dépend du résultat d’une expérience aléatoire sous-jacente. D’où un traitement statistique des images.

 

b)   Sensibilité de l’image aux modifications d’histogrammes

 

Estournet a fait réaliser plusieurs copies d’une même photo sur des supports variés : papiers photographiques de marques, de gradations et de duretés différentes. L’analyse de ces documents montre clairement de grandes différences d’histogrammes, différences bien plus remarquables que celles qui affectent les images elles-mêmes. On en déduit que l’histogramme de l’image non seulement n’est pas significatif mais aussi peut être modifié artificiellement sans que l’aspect extérieur de l’image n’en soit beaucoup affecté, et surtout sans que la signification de l’image ne soit altérée.


 

 

 

              figure. Images obtenues en manipulant l’histogramme d’une image.

 

 

Remarque : il faut s’imposer une contrainte pour que l’aspect de l’image demeure assez inchangé :

Les relations d’ordre entre niveaux de gris ne doivent pas être perdues : c'est-à-dire que si n1 et n2 sont 2 niveaux de gris vérifiant  n1< n2, alors on les transformera en m1 et m2 tels que m1< m2.


IV. Entropie

 

Suivant les idées de Shannon, l’entropie est une mesure statistique du contenu d’information d’un message. Elle est donc adaptée à caractériser les images, chacune d’entre elles étant prise comme un message spécifique.

 

a)   entropie d’ordre 0

Suivant l’idée précédente, Hartley en 1925 attribue à un symbole i émis par une source stationnaire avec une probabilité pi, la quantité d’information :

 

 

 Shannon définit alors l’information moyenne par symbole ou entropie par :

 

 

Considérant une image comme une source stationnaire de pixels, l’entropie se mesure donc à partir du seul histogramme de l’amplitude.

Utilisant les propriétés de la fonction log(x), on montre que l’entropie est maximale pour une répartition uniforme de probabilité Smax=log(n).

En terme d’histogramme, cela se traduit par un histogramme rigoureusement plat :

 

 

C’est cette notion d’entropie qui va être le fondement de tous les algorithmes présentés. En effet toutes nos méthodes vont viser à maximiser l’entropie d’ordre 0.

V. Pourquoi est-il nécessaire de modifier l’histogramme ?

 

Supposons que l’on ne puise discerner que très peu de détails dans une image. La raison la plus probable est que les pixels qui représentent différents objets ou différentes parties d’un objet ont un niveau de gris très proche. Ceci est illustré par la figure suivante : l’histogramme de l’image « mauvaise » est très resserré alors que celui de l’image « bonne » est plus étalé.

 

 

 

VI. Les algorithmes mathématiques

 

a)   l’expansion de dynamiques

 

Cela consiste à étaler la dynamique de l’image qui est contenue dans l’intervalle [a,b], sur les 256 niveaux de gris disponibles :

 

 

Pour cela, on utilise la transformation linéaire T suivante :

 

 

 

 

 

 

Soit n le niveau de gris du pixel (i,j) de l’image de départ :

 

 

 

 

 

où M représente l’amplitude d’arrivée (en général M=255).

et round(.) est la fonction qui arrondit à l’entier le plus proche.

L’introduction de round(.) provient du caractère discret de l’image et de la quantification linéaire des 256 niveaux de gris.

 

Pour améliorer les performances de cet algorithme, nous n’avons plus considéré a et b dans la formule mais a’ et b’.

 

Obtention de a’ : on parcourt l’histogramme de l’image de gauche à droite. On s’arrête lorsque l’on a atteint 1% du nombre total de pixels. L’abscisse de ce point nous fournit a’.

 

Obtention de b’ : on parcourt l’histogramme de l’image de droite à gauche cette fois-ci. On s’arrête lorsque l’on a atteint 1% du nombre total de pixels. L’abscisse de ce point nous fournit b’.

 

 

Zone de Texte: Niveaux de gris d’arrivée

Ce seuil permet d’améliorer l’expansion pour des images dont l’histogramme a l’allure suivante : très peu de pixels ayant des niveaux de gris proches de 0, et très peu de pixels ayant  des niveaux de gris proches de 255 

 

 

Si on avait utilisé l’algorithme sans seuillage, la dynamique s’étalant de 0 à 255 notre algorithme n’aurait eu aucun effet. (avec a=0 et b=255, on obtient T(n)=n, ce qui correspond à une invariance des niveaux de gris).

Mais grâce au seuillage, l’algorithme permettra un meilleur étalement de la dynamique, les différences importantes de pixels dans chaque niveau de gris se verront réduites.

 

                  

 

                        

 

Ce traitement se trouve être vraiment significatif pour les images dont l’histogramme est resserré comme nous le montre l’exemple précédent.

L’étalement de cette dynamique permet de discerner des détails invisibles sur l’image originale.

Cet algorithme n’a aucun effet sur les images dont l’histogramme occupe quasiment toute la plage des niveaux de gris ainsi que sur les images dont l’histogramme possède un pic en 0 et un pic en 255 comme le damier par exemple :

Dans ce cas a=0 et b=255 d’où T(n)=n, l’algorithme n’a aucun effet alors que l’on voit pertinemment que la dynamique n’est pas « tellement » étalée.

 

Il n’a non plus aucun effet intéressant sur les images pathologiques (comme par exemple une image dont l’histogramme est quasiment un dirac. Cet algorithme se contente alors de translater le pic, ce qui bien sûr n’a aucun intérêt pratique) :

 

 

 

Remarque :

 

Cet algorithme n’a pas pour but de rendre l’histogramme d’une image plat. Il ne sert qu’à étaler la dynamique sur tous les niveaux de gris disponibles. Toutefois c’est un prétraitement nécessaire pour le bon fonctionnement des algorithmes développés ci-après. C’est pour cette raison que nous avons jugé bon de le développer.

 

b)   Egalisation d’histogramme

Algorithme

 

L’égalisation d’histogramme est un procédé par lequel on force tous les niveaux de gris de l’image à être équiprobables.

 

Supposons que les niveaux de gris de l’image originale soient donnés par les valeurs de la variable r et par les valeurs de la variable s pour l’image traitée.

On cherche une transformation  s  = T(r) telle que la densité de probabilité pr(r) soit transformée en ps(s).

Puisque pr(r) est la densité de probabilité de la variable aléatoire r, le nombre de pixels dont le niveau de gris est dans l’intervalle [r, r+dr] est pr(r)dr.

La transformation recherchée transforme [r, r+dr] en [s, s+ds].

Le nombre de pixels dans [s, s+ds] sera le même que dans [r,r+dr], mais dans le cas de l’image traitée, il sera donné par ps(s)ds :

 

 

On cherche ps(s) = c = constante (histogramme plat).

Comme nous travaillons dans le cas normalisé et en supposant que l’on considère les niveaux de gris appartenent à [0,255], on prend . La formule finale est donc :

 

 

 

Cette formule est exacte dans le cas continu.

Malheureusement une image est discrète, notre formule devient donc :

 

 

 

 

on pose .

pr représente l’histogramme normalisé de l’image originale.

C représente l’histogramme cumulé normalisé de cette image.

Finalement :

 

 

Voici quelques résultats obtenus par le biais de cet algorithme :

 

           

Résultats

 

figure. image originale accompagnée de son histogramme et de son histogramme cumulé.

figure. image traitée par l’algorithme d’égalisation, accompagnée de son histogramme

 

On voit nettement l’amélioration produite par l’application de l’algorithme d’égalisation.

L’image originale était une image très claire, en effet la majeure partie de l’histogramme est concentrée après 150 qui représentent les niveaux de gris « clairs ».

L’algorithme a donc étalé la dynamique, mais il a aussi équilibré les niveaux de gris. Ainsi, les niveaux de gris ne sont plus concentrés après 150, mais on a quasiment autant de pixels avec un niveau de gris supérieur à 150 que de pixels avec un niveau de gris inférieur à 150.

C’est l’égalisation.

Intéressons-nous à la partie de l’image contenue dans l’ellipse rouge.

Sur l’image originale, on distingue peu les deux visages tant ils sont clairs, tandis que sur l’image égalisée, c’est flagrant, on distingue parfaitement les visages et mêmes certains détails quasiment invisibles au préalable.

Cet algorithme fonctionne particulièrement bien dans le cas d’une image « normale » (non pathologique, c’est-à-dire qui occupe au moins 50% des niveaux de gris).

 

Par contre cet algorithme se révèle catastrophique sur une image pathologique comme le montre l’exemple suivant :

 

En effet comme on peut le prévoir, l’histogramme cumulé ressemble fortement à un échelon :

 

 

figure. à gauche l’histogramme, à droite l’histogramme cumulé normalisé.

 

 

 

D’après cet histogramme cumulé on aura un traitement correct pour les pixels dont le niveau de gris est compris entre 100 et 160 qui seront transformés en des pixels de niveaux de gris compris entre 0 et 50. Pour tous les autres, ils vont se retrouver agglutiner autour de 244.

Le pic a translaté de 175 à 244, mais l’histogramme ne s’est pas du tout aplati.

 

Cette translation de pic est encore plus flagrante sur l’exemple suivant :

L’histogramme cumulé est associé est :

figure. à gauche l’histogramme, à droite l’histogramme cumulé normalisé.

 

 

 

Cet exemple montre que finalement si l’image est constitué de strictement quelques diracs, l’image égalisée ne perdra pas sa cohérence, les niveaux de gris vont être translatés. Dans le cas du carré 4 couleurs les pics sont translatés vers la droite, éclaircissant ainsi chaque case.

L’algorithme ne permet toutefois pas du tout d’obtenir une nouvelle image avec un histogramme plat, mais elle ne détruit pas la cohérence de l’image contrairement au cas précédent.

Si l’histogramme de l’image originale peut être schématiquement associé à « une somme de sinus cardinaux carrés », le traitement est catastrophique, il détruit complètement l’image comme nos pauvres libellule ci-dessus.

 

2ème algorithme

 

L’algorithme qui va être présenté est celui que l’on peut trouver dans la toolbox « image processing » de Matlab sous le nom de histeq(.).

 

Il s’inspire fortement de l’algorithme précédent avec une variante :

L’algorithme recherche la transformation T qui minimise :

 

                                              

 

où c0 représente l’histogramme cumulé de l’image originale et c1 l’histogramme cumulé d’un histogramme plat pour tous les niveaux de gris k.

Cette minimisation est faite sous contraintes :

T doit être monotone et c1(T(a)) ne peut pas dépasser c0(a) de plus de la moitié H(a) où H représente l’histogramme de l’image originale.

Comparaison des résultats du 1er algorithme avec ceux du 2ème 

 

figure. à gauche utilisation du 1er algorithme, à droite utilisation du 2ème 

 

 

 

 

Le 2ème algorithme semble plus efficace que le premier sur une image non pathologique comme le prouve l’histogramme de droite.

 

Concernant les images pathologiques :

figure. à gauche utilisation du 1er algorithme, à droite utilisation du 2ème 

 

 

 

On constate que ni le 1er algorithme, ni le 2ème ne sont robustes vis-à-vis des images pathologiques.

Tout comme le 1er , le 2ème algorithme détruit l’image. On peut noter que le pic ne s’est pas  translaté au même endroit dans les 2 algorithmes.

figure. à gauche utilisation du 1er algorithme, à droite utilisation du 2ème 

 

 

 

Tout comme le 1er algorithme, le second ne fait que translater les pics. La cohérence de l’image n’est pas perdue, mais l’histogramme obtenu n’a rien à voir avec un histogramme plat.

 

Pourquoi les programmes d’égalisation d’histogramme ne produisent pas en général des images avec des histogrammes plats ?

 

Dans l’analyse précédente, on a tacitement considéré que les variables r et s prenaient des valeurs continues.

En réalité bien sûr, les niveaux de gris prennent des valeurs discrètes (entiers de 0 à 255).

Dans le cas continu, il y a un nombre infini de valeurs dans l’intervalle [r,r+dr].

Dans le cas des images numériques, nous avons seulement un nombre fini de pixels dans chaque intervalle, ce qui va entraîner « des trous » dans l’histogramme comme nous montre l’exemple suivant :

 

Initialement, on a une image qui a l’histogramme suivant :

 

Initialement, on a une image qui a l’histogramme suivant :

 

 

calcul de l’entropie d’ordre 0

 

Ces 2 algorithmes ont été réalisés dans le but de maximiser l’entropie, voyons ce qu’il en est.

 

           entropie : 4.7010                        entropie : 4.6172                 entropie : 4.6172

 

figure. à gauche l’image originale, au milieu l’image traitée par le 1er algorithme, à droite l’image traitée

            par le 2ème algorithme d’égalisation

 

 

Contre toute attente l’entropie a diminué bien que nous ayons appliqué des algorithmes visant à aplatir l’histogramme !!!

Qualitativement parlant l’image a été améliorée, mais l’information contenue dans l’image quant à elle a diminué.

Cela s’explique par l’apparition des trous dans les histogrammes des images traitées comme nous l’avons expliqué plus haut.

Il va donc falloir trouver d’autres algorithmes ou pratiquer des manipulations d’histogrammes pour augmenter l’entropie.

 

Egalisation filtrée

 

On peut avoir l’idée de filtrer préalablement notre image par un filtre de Wiener et d’appliquer ensuite notre algorithme d’égalisation.

En fait il se trouve qu’effectivement pour certaines images l’entropie augmente. Mais ceci n’est pas vrai pour toutes les images comme nous allons le montrer sur les exemples suivants :

           entropie : 3.0455                             entropie : 3.0299                            entropie : 2.6930

 

 

figure. à gauche l’image originale, au milieu l’image traitée par le 1er algorithme, à droite l’image traitée

            par le 2ème algorithme d’égalisation

 

 

 

              entropie : 3.9925                           entropie : 3.9523                             entropie : 4.2515

 

figure. à gauche l’image originale, au milieu l’image traitée par le 1er algorithme, à droite l’image traitée

            par le 2ème algorithme d’égalisation

 

c)   découpage de l’image

découpage de l’image en petite surface

 

L’ide est la suivante: plutôt que d’appliquer l’algorithme directement à l’image, on va découper cette image en sous-parties et appliquer l’égalisation à chaque partie.

 

                 entropie : 3.9925                                                entropie : 5.4320

 

Cette fois-ci, l’entropie a nettement augmenté, (l’histogramme n’est toujours pas plat), mais à quel prix ! L’image est complètement détruite, elle est toute mosaïquée. Si on y réfléchit, c’est tout a fait normal car ce traitement ne permet pas du tout de prendre en compte la surface voisine. Le traitement étant indépendant sur chaque surface, la cohérence de l’image est perdue.

 

Ce traitement est à bannir pour tout type d’image.

 

 

Application de l’égalisation sur un voisinage

 

Après l’échec cuisant de la première méthode de découpage, une autre possibilité est envisageable : on considère un voisinage pour chaque pixel ( ici on utilise un carré  dont le centre est le pixel étudié), puis on applique l’égalisation à ce voisinage. On ne change la valeur que du pixel étudié et pas de tous les pixels de ce voisinage.

On effectue ce traitement pour tous les pixels de l’image.

entropie : 4.9009                                                 entropie : 4.0269

 

figure. à gauche l’image originale, à droite l’image traitée par égalisation sur un voisinage

 

 

entropie : 1.5757                                                 entropie : 3.0148

 

figure. à gauche l’image originale, à droite l’image traitée par égalisation sur un voisinage

 

 

 

Ce traitement se révèle être moins bon que l’égalisation globale pour des images « normales ». L’histogramme n’est pas plus plat et l’entropie n’est pas augmentée.

Par contre, ce traitement se révèle être meilleur pour les images pathologiques que l’égalisation globale. La dynamique est étalée et la cohérence de l’image est conservée.

Malheureusement cet algorithme est si lourd en temps de calcul qu’il est à bannir pour tout type d’image. (En effet pour une image de dimension  , l’algorithme est fois plus long que l’égalisation globale. Ce temps est inacceptable compte tenu du résultat très moyen obtenu par l’application de cet algorithme).

 

d)   découpage de l’histogramme

 

Connue sous le nom d’algorithme de Faust, cette méthode est une extension des transformations linéaires.

L’idée est de « découper » l’histogramme de l’image et d’appliquer une transformation linéaire différente à chaque morceau de celui-ci.

De manière plus précise, l’intervalle de départ ([0,255]) est découpé en plusieurs intervalles selon la règle suivante : les morceaux de l’intervalle de départ doivent être séparés par au moins 5 niveaux de gris successifs non représentés dans l’image. Une fois ces morceaux obtenus, une transformation linéaire est appliquée sur chacun d’eux sous les contraintes suivantes :

 

            - la taille de l’intervalle d’arrivée est proportionnelle au nombre de pixels dont le niveau de gris appartient à l’intervalle de départ

- la réunion de tous les intervalles d’arrivée est égale à l’intervalle [0,255]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Ce genre de transformation n’est bien sûr profitable que si l’histogramme de l’image de départ présente des modes à supports séparés par des intervalles où les niveaux de gris ne sont pas représentés. Si tous les niveaux de gris de 0 à 255 sont présents dans l’image à traiter, cette transformation est équivalente à l’identité.

 

 

Il est aisé de générer une image possédant un histogramme répondant aux critères d’application de cet algorithme (autrement dit, dont l’histogramme possède des modes à supports disjoints), il suffit simplement de concaténer deux images.

 

 

Image originale (en haut) et image transformée (en bas)

 

 

 

 

Histogrammes de l’image originale et de l’image transformée

 

 

 

Cette transformation augment nettement le contraste de la partie de l’image où se trouvent les feuilles. Ceci provient du fait que le mode de l’histogramme relatif à cette partie de l’image est plus étroit sur l’image originale que le mode relatif à l’autre partie. La taille de son support est quadruplée lors de la transformation, alors que la taille du support relatif à l’autre partie de l’image n’est que doublée.

Les choses se passent donc bien si l’histogramme de l’image de départ présente des modes bien concentrés (c’est à dire sur des supports de petite taille). L’inconvénient de cette transformation est que justement, le genre d’images possédant de tels histogrammes est rare !

 

 

 

VII. les manipulations d’images et d’histogrammes pour rendre un histogramme plat

 

Les méthodes mathématiques n’ayant pas fourni les résultats escomptés, il reste maintenant la manipulation ou la « bidouille » pour obtenir une image avec un histogramme rigoureusement plat.

Il faut toutefois trouver des manipulations astucieuses. En effet comme nous l’avons vu précédemment, il faut conserver la cohérence de l’image.

 

a)   égalisation d’histogramme par addition aléatoire

 

Des algorithmes d’aplanissement d’histogramme retournant en sortie une image dont l’histogramme est parfaitement plat sont tout à fait concevables. On peut par exemple penser à l’algorithme consistant à comparer le nombre de pixels pour chaque niveau de gris. Si ce nombre est supérieur à la moyenne de l’image, alors remplacer la valeur la valeur du niveau de gris de certains pixels de ce niveau (choisis aléatoirement et de façon uniforme) par une valeur pour laquelle le nombre de pixels est inférieure à la moyenne de l’image.

Cette idée simple, conduit à des résultats, certes excellent pour ce qui est de l’aplanissement de l’histogramme, mais retourne une image au contenu informationnel totalement distordu. En effet, cet algorithme, si on n’impose pas de contrainte supplémentaire, aura tendance à générer une image très bruitée.

Pour conserver l’allure générale de l’image, on s’impose la contrainte de respecter l’ordre des niveaux gris des pixels lors de la transformation (on impose donc à la transformation  d’être croissante).

Le principe de l’algorithme que nous avons développés s’explique très facile en procédant à une analogie avec un jeu de 256 seaux d’eau numérotés de 0 à 255 (à mettre en relation avec l’histogramme d’une image). Le but de l’opération est, à partir d’une situation initiale de transvaser l’eau des seaux de façon à ce qu’ils soient tous remplis par le même volume d’eau (le volume d’eau total divisé par le nombre de seaux).

La contrainte de croissance de la transformation se traduit dans le cas présent par le fait de s’imposer de ne vider l ‘eau d’un seau pour la verser dans un autre que si tous les seaux dont le volume d’eau était initialement supérieurs au volume final moyen et dont le numéro est inférieur au numéro du seau en question ont été traités. Ca paraît compliqué, mais un schéma clarifie les idées :

 

 

 

 

 

 

 

 

 

 

 

 

 

ETAPE 1

 

ETAPE 2

 

ETAPE 3

 
 

 

 

 

 


En appliquant l’algorithme sur diverses images, les résultats obtenus sont plus ou moins satisfaisants (cela dit toujours plus satisfaisants que si la contrainte de croissance de la transformation n’était pas imposée).

Voici un exemple d’image sur lequel l’algorithme donne de bons résultats :

 

Image originale

 

 

Image après transformation

 

 

Histogrammes de l’image originale et de l’image après transformation

 

 

Le cas extrême d’une image ne comportant qu’un seul niveau de gris met bien en évidence les limites de cet algorithme. L’image résultante est trivialement une image ne contenant que du  bruit suivant une loi uniforme. 

 

Considérons l’exemple de nos deux libellules qui est un cas limite :

 

Image originale

 

 

Image après transformation

 

 

 

 

Histogrammes de l’image originale et de l’image après transformation

 

 

 

On se rend bien compte que des grandes zones de l’image où les niveaux de gris sont quasiment constants se retrouvent entachées de bruit sur l’image résultante.

Pour ce genre d’image pathologique, des traitements particuliers existent, comme l’aplanissement.

 

 

 

 

 

b)   aplanissement

 

Cette méthode n’est utile que pour les images pathologiques qui possèdent un histogramme présentant un pic vers 0 si on veut un étalement des pixels sur tous les niveaux de gris.

Cet algorithme s’appuie sur une référence de remplissage des niveaux de gris qui dépend du nombre de pixel  et du nombre de niveau de gris encore à traiter. On traite tout d’abord les pixels appartenant au niveau de gris 0 jusqu’au 255ème. Si le niveau de gris 0 a trop de pixel par rapport à la référence, on rajoute les pixels en trop sur le niveau de gris 1. Puis on regarde le niveau 1 et on traite jusqu’au 255ème niveau de gris.

 

 

 

trait pointillé rouge : la référence du nombre de pixel à chaque niveau de gris

 

 

Nous testons d’abord l’aplanissement  sur une image pathologique dont l’histogramme possède un pic en 0.

 

 

 

 

 

 

 

                   Entropie : 3.2423                                            Entropie : 5.5452

 

 

Cet algorithme a permis d’avoir un histogramme presque plat, l’entropie a augmenté.

Le contraste de l’image est amélioré sauf  à gauche sur une petite bande qui reste très sombre. La bande reste sombre car elle correspond aux premiers pixels qui forment le pic de l’histogramme de départ et que l’algorithme n’a pas déplacés ou très peu. 

L’aplanissement permet d’améliorer le contraste de certaines images dont l’histogramme possède un pic vers 0 mais généralement il détruit l’image et fait des petites bandes de parasites.

 Il y a des cas on obtient pas cette bande ou l’image n’est pas modifié, par exemple le damier. 

 

 

 

 

L’image du damier est peu modifiée et il n’apparaît pas cette bande parasite qu’il y a sur les 2 autres exemples. On voit juste que le coté droit de l’image est devenu un peu plus clair.

 

En conclusion, l’aplanissement d’un pic sur dans les niveau de gris autour de 0 améliore le contraste et crée souvent une bande parasite sur l’image modifiée mais ce n’est pas toujours vrai (exemple du damier).

 

 

Pour les images ayant un histogramme relativement plat et étalé sur tous les niveaux de gris, l’aplanissement détériore peu l’image et n’améliore pas le contraste car il y a très peu de déplacement de pixels.

 

Il n’y a pas de cas général, c’est pourquoi le test sur l’image est obligatoire pour connaître le résultat de cet algorithme. L’aplanissement est un algorithme peu fiable qui fonctionne mal dans la plupart des cas.

 

Pour améliorer l’aplanissement, il faudrait déplacer les pixels d’un niveau de gris aléatoirement au lieu de prendre les premiers de la liste. Cela éviterait d’avoir une bande parasite plus ou moins grande sur l’image modifiée. L’aplanissement n’étale pas les pixels sur tous les niveaux de gris suivant l’image, c’est pourquoi on va préférer plutôt s’attarder à aplatir l’histogramme, qui donne de meilleurs résultats. Mais voyons avant l’écrêtage.   

 

c)   ecrêtage

 

Cette méthode aussi n’est utile que pour les images pathologiques qui possèdent un histogramme présentant un pic vers 255 si on veut si on veut un étalement des pixels sur tous les niveaux de gris.

Cet algorithme s’appuie sur une référence de remplissage des niveaux de gris qui dépend du nombre de pixel  et du nombre de niveau de gris encore à traiter.

On traite tout d’abord les pixels appartenant au niveau de gris du pic proche de 255 jusqu'à 0. Si le niveau de gris du pic a trop de pixel par rapport à la référence, on rajoute les pixels en trop sur le niveau de gris précédent. Puis on traite de la même façon jusqu’au niveau de gris 0.

 

 

                                                        

trait pointillé rouge : la référence du nombre de pixel à chaque niveau de gris

 

 

 

 

Nous testons d’abord l’écrêtage sur une image pathologique ayant un pic près de 255 dans son histogramme.

 

                     

 

                 Entropie : 1.5660                                            Entropie : 5.2930

 

 

Le contraste de l’image a été amélioré entre le fond et les libellules mais l’image a été très détériorée.

 

 

                      Entropie : 4.7579                                            Entropie : 5.5452

 

 

 

L’image est détériorée sur une bande assez fine verticale. Du coté droit de cette détérioration l’image n’a pas changé et à droite on obtient le même contraste avec une image beaucoup plus foncé dû au remplissage des niveaux de gris foncé. On retrouve les mêmes symptômes que dans l’aplanissement.

 

En reprenant l’exemple du damier traité avec l’aplanissement, on se rend compte que l’écrêtage donne le même type de résultat.

 

Avec l’aplanissement on obtenait le même damier avec des couleurs plus pales à droite de l’image.

Avec l’écrêtage, on obtient le damier peu modifié avec des couleurs un peu plus foncé sur la droite de l’image. 

 

L’écrêtage permet d’améliorer le contraste de certaines images dont l’histogramme a un pic vers 255 mais généralement il détruit l’image et il fait des petites bandes de parasites. Pour les images ayant un histogramme relativement plat et étalé sur tous les niveaux de gris, l’écrêtage détériore peu l’image et n’améliore pas les contrastes.

 Il n’y a pas de cas général, c’est pourquoi le test sur l’image est obligatoire pour connaître le résultat de cet algorithme. L’écrêtage est un algorithme peu fiable, et qui fonctionne correctement (meilleur contraste sans abîmer la précision) très peu souvent.   

 

Pour améliorer l’écrêtage, il faudrait déplacer les pixels d’un niveau de gris aléatoirement au lieu de prendre les premiers de la liste. Cela éviterait d’avoir une bande parasite plus ou moins grande sur l’image modifiée. L’écrêtage n’étale pas les pixels sur tous les niveaux de gris suivant l’image, c’est pourquoi on va préférer plutôt s’attarder à aplatir l’histogramme, qui donne de meilleure résultats.     

 

 

d)   transformation en histogramme plat

 

Nous avons réalisé deux algorithmes qui rendent l’histogramme complètement plat. Le premier (hist_plat) a donné de bon résultat pour très peu d’image. Il fixe une référence de pixels par niveaux de gris, pour tous les niveaux  de gris ayant un nombre de pixel supérieur à la référence, il enlève les pixels en trop pour les répartir dans les niveaux de gris ayant un nombre de pixel inférieur à la référence.

 

 

 

 

 

 

 

     

trait pointillé rouge : la référence du nombre de pixel à chaque niveau de gris

 

 

 

 

 

 

 

 

Nous avons trouvé quelques images où hist_tout_plat fonctionne, par exemple pour cette image de feuilles d’arbres ou les pixels sont concentrés vers le niveau de gris 70 de l’histogramme. 

 

 

 

 

                       Entropie : 3.2423                                           Entropie : 5.548

 

 

Cet algorithme a amélioré le contraste et n’a pas détruit l’image. Mais il ne fonctionne pas très souvent, c’est pourquoi nous avons réalisé un autre algorithme qui rend l’histogramme plat et qui s’appuie sur un autre principe.

 

 

Le 2ème algorithme pour rendre l’histogramme plat (hist_plat2) donne de meilleurs résultats. En partant du niveaux de gris 0 jusqu’au niveau de gris 255, on remplit les niveaux de gris avec les pixels non traités ayant le plus petit niveau de gris. Donc on remplit les premiers niveaux de gris par les pixels ayant le plus bas niveaux de gris de l’image et on remplit les niveaux de gris élevés par les pixels de l’image ayant les niveaux de gris les plus élevés.

Ce qui amène à rendre plus sombre les parties déjà foncées et à rendre plus clair les parties de l’image déjà claires.

 

 

 

 

 

trait pointillé rouge : la référence du nombre de pixel à chaque niveau de gris

 

 

L’algorithme fonctionne pour de nombreuses images.

Nous avons tout d’abord essayé avec une image ayant un pic vers 0.

 

 

 

      

 

 

 

                  Entropie : 3.8439                                             Entropie : 5.5412

L’algorithme a augmenté le contraste et n’a pas détruit l’image. Les pixels étaient dans les premiers niveaux de gris et ont été étalés sur tous les niveaux de gris pour obtenir un histogramme plat. L’entropie a considérablement augmenté.

Cet algorithme fonctionne aussi avec un histogramme ayant un pic vers le niveau de gris 255.

 

 

 

 

 

 

       

             Entropie : 4.5709                                                Entropie : 5.5396

 

On remarque que pour le pic en 255, l’algorithme améliore aussi le contraste sans abîmer l’image.

 

Cette algorithme fonctionne aussi pour des images ayant des histogrammes assez étalé et quasiment plat.

 

 

 

 

                         

 

                  Entropie : 4.8626                                                  Entropie : 5.5412             

 

 

L’algorithme a augmenté le contraste et a très peu détruit l’image.

Pour les images ayant un histogramme quasiment plat, l’image modifiée est semblable à celle de départ car il y a peu de déplacement de pixel donc très peu de changement sur l’image.

 

Le 2ème algorithme (hist_tout_plat2) fonctionne avec beaucoup d’images ayant des histogrammes bien différents. Il augmente l’entropie et améliore le contraste dans de nombreuses images sans les détruire.

 

 

 

 

 

 

 

 

 

 

 

 

 


VIII. Extension à une image couleur

 

Comme dit précédemment une image couleur se présente comme la donnée de 3 matrices :

 

 

 

 

 

 

 

 

 

 


2 possibilités s’offrent à nous :

 

- on peut traiter les matrices R,V,B indépendamment les unes des autres puis les resuperposer pour former la nouvelle image.

 

- on peut créer une « image moyenne » : . On applique une égalisation à cette image moyenne. On met en mémoire cette transformation T’, puis on l’applique à R,V et B.

cette fois-ci chaque matrice a subi la même transformation.

 

a)   Quelle méthode appliquer à quel type d’image ?

 

Observons la dynamique de R,V, et B simultanément.

 

Si les dynamiques sont très différentes, il vaut mieux utiliser la première méthode. On risque de faire apparaître de nouvelles couleurs dûes à la resuperposition des matrices traitées, mais souvent les images gagnent en détail de cette façon.

 

Si les dynamiques ont une allure similaire, il vaut mieux utiliser la 2ème méthode. On applique ainsi à chaque composante de l’image une transformation « moyenne ». Ainsi aucune fausse couleur n’est créée et l’image garde toute sa cohérence.

 

Tout ceci n’a pas la valeur d’axiome, ce sont seulement des résultats issus de l’expérimentation.

 

 

 

        Voici un exemple d’image dont ses 3 histogrammes (rouge, vert, bleu) sont quasi-identiques. Nous avons utilisé le même algorithme hist_tout_plat2 pour modifier les 3 composantes.

                  Image de départ                                                          image  modifiée 

            

            Composante rouge image de départ               composante rouge image modifiée

 

 

            Composante vert image de départ               composante vert image modifiée

 

              Composante bleu image de départ                     composante bleu image modifiée

 

Nous remarquons qu’en appliquant le même algorithme (hist_tout_plat2) aux 3 composantes, le résultat est bon. L’algorithme a augmenté les contrastes, les couleurs sont plus vives, plus présentes que sur l’image de départ, l’image n’a pas été détruite.

Dans beaucoup de cas, on peut utiliser le même algorithme pour chaque composante d’une image. Cependant on ne peut pas généraliser.

 

Pour les images n’ayant pas les 3 mêmes histogrammes pour RGB, il vaut mieux traiter les composantes RGB seules avec un algorithme adapté à chaque histogramme.

Voici un exemple.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                  Image de départ                                                   image modifiée

 

         Composante rouge                                                     composante rouge modifiée

 

 

 

          Composante verte                                                   composante verte modifiée

 

 

             Composante bleue                                                 composante bleue modifiée

 

 

Pour les composantes bleu et rouge, nous avons appliqué la transformation linéaire, et pour la composante bleue nous avons appliqué l’algorithme hist_tout_plat2.

Nous avons utilisé ces algorithmes après avoir fait des tests avec les autres algorithmes utilisés dans notre projet. Au début, nous pensions détruire les pics des composantes R et B grâce à un algorithme qui étale les pixels sur l’histogramme (ex : hist_tout_plat2 ou aplanissement), mais l’étalement de ces 2 composantes rendait l’image bleu de départ  rouge jaune vive sans détruire l’image (voir exemple suivant). C’est pourquoi nous avons utilisé la transformation linéaire qui augmente un peu le contraste sans étaler les pixels sur l’histogramme.

Pour la composante bleue, les pixels sont étalés entre le niveau de gris 50 et 200 de l’histogramme. Le bleu est la principale couleur de l’image, donc nous avons augmenté le contraste en étalant les pixels sur tous les niveaux de gris.

Le résultat de ce travail sur les 3 composantes a donné un bon résultat sur l’image. Les deux composantes verte et jaune dans l’image modifiée ont une couleur  plus vive dans l’image de départ, et la composante bleue a augmenté son contraste.                    

 

 

Voici un exemple qui montre que pour une image ayant ces 3 histogrammes différents, il vaut affiner la transformation de l’image en traitant chaque composante séparément au lieu d’utiliser la même transformation.

 

 

 

                  image de départ                                                    image modifiée

 

        composante rouge de l’image de départ               composante rouge de l’image modifiée

 

 

 

         composante vert de l’image de départ               composante vert de l’image modifiée

 

         composante bleue de l’image de départ               composante bleue de l’image modifiée

 

 

L’image a été détérioré, la couleur bleue dominait l’image de départ, l’image est devenu vert jaune rouge tout en améliorant les contrastes mais n’a pu rien à voir avec l’image de départ. Le contraste des composantes rouge et vert a beaucoup augmenté car leur histogramme de départ était un pic et est devenu un histogramme plat, ce qui a pour effet de mieux les faire apparaître sur l’image, ce qui a fait perdre le bleu dominant de l’image de départ.


IX. conclusion

 

Cet exposé a permis de dresser un catalogue (non exhaustif) d’algorithmes permettant ou étant supposés rendre un algorithme plat.

Tout au long de celui-ci nous nous sommes efforcés de mettre en parallèle maximisation de l’entropie et cohérence de l’image. En effet aucun traitement n’est véritablement utile s’il y a un déséquilibre entre les deux.

Nous n’avons malheureusement pas pu fournir l’algorithme miracle qui permet à partir de n’importe quelle image d’obtenir une image avec un histogramme plat.

Ce qu’il y a d’important à souligner, c’est le fait que l’on peut améliorer la qualité de l’image en combinant plusieurs des algorithmes présentés :

 

 

 

 


X. A propos de ce document…

 

Les algorithmes ont été développés sous Matlab 6. Pour obtenir une licence http://www.mathworks.com.

 

Bibliographie :

 

 

-         Cours de traitement d’image d’Henri Maître.

-    “ Image Procesing, the fundamentals”, Maria Petrou, Panagiota Bosdogianni.

-    “ Fundamentals of electronic Image Processing”, Arthur R. Weeks, Jr.

-         “Cours #8 Traitement d’image”, François Destrempes, destremp@iro.umontreal.ca.

-         « Digital image processing », Jongwon Kim