Sie sind auf Seite 1von 42

Chapitre 2

Notions de traitement dimages

Transformation ponctuelle Table de conversion (des couleurs)

Introduction (1/2)

3 types doprations en traitement dimage:


- m : indice des lignes - n : indice des colonnes

Transformation point point

Transformation locale vers un point

En traitement dimage, on peut considrer 3 types de transformations. Les deux premiers types de transformation sont prsents sur la figure ci-dessus : de point point, telle que la valeur P(m0, n0) dun pixel de limage rsultat b dpende uniquement de la valeur P(m0, n0) dun pixel de limage dentre a . Typiquement, les coordonnes (m0, n0) sont gales aux coordonnes (m0, n0) ; dune zone locale vers un point. Cette fois la valeur dun pixel de limage b ou dun lment de b dpend dun ensemble de pixels de a pris au sein dune fentre R(m, n). Cette fentre est typiquement forme dun nombre limit de pixels localiss autour du pixel (m0, n0) de limage dentre a. Par exemple, R(m, n) peut-tre un bloc rectangulaire de taille (K L) pixels, ou plus gnralement un voisinage de pixels autour de (m0, n0) et qui conserve sa forme et sa taille quelles que soient les coordonnes (m0, n0).

Introduction (2/2)
Transformation globale vers un point

Caractrisation de ces transformations


Complexit Opration Caractrisation
- la valeur de sortie, une coordonne spcifique, dpend uniquement de la valeur dentre la mme coordonne. - la valeur de sortie, une coordonne spcifique, dpend des valeurs dentre dans le voisinage de cette mme coordonne. - la valeur de sortie, une coordonne spcifique, dpend de toutes les valeurs de limage dentre.

par pixel
constant P N

Point Locale Globale

Taille Image : N x N ; taille du voisinage : p x p ; complexit: en nombre doprations par pixel

Le dernier type de transformation est prsent sur la figure ci-dessus. - transformation globale vers un point. La valeur calcule dun lment (m0, n0) de la sortie dpend de la totalit des pixels de limage dentre a. Cest typiquement la cas lorsque lon transforme globalement limage du domaine spatial vers le domaine frquentiel. La transformation de Fourier discrte (TFD) ou la transformation en cosinus discrte (TCD) sont des exemples bien connus (et qui seront dvelopps dans un chapitre ultrieur) o chaque composante frquentielle X(X, Y) est fonction de lensemble des pixels de limage transformer. Si nous considrons la complexit du traitement en terme de nombre doprations ncessaires pour obtenir une donne de limage de sortie, cette complexit est trs lie au type de traitement effectu : de 1 N (pour une image carre (N N) ), ou de 1 P si on considre un oprateur mettant en uvre une fentre de taille (P P) pixels, tel une convolution (cf. filtrage linaire). Un dernier aspect considrer concerne les temps daccs en mmoire image, plus ou moins rguliers, ce qui peut ralentir srieusement le temps de traitement de limage.

Systme de traitement dimages numriques : structure typique


Sortie Vido Image

(a)

Numrisation

Mmorisation

Affichage

Bus du processeur Bus image Image Display Contrleur Sortie Video de laffichage Vido Controler

(b)

Contrleur Video Vido Controler

Image Mmorisation Memory

Image Traitement Processor

Bus du processeur
4

La structure typique dun systme de traitement dimage est illustr par la figure ci-dessus. Nous dcouvrons en haut un exemple simple dune chane de traitement constitue de la numrisation du signal vido analogique (chantillonnage puis quantification) produisant les donnes de limage numrique. Ces donnes peuvent ensuite tre stockes en mmoire image la frquence dchantillonnage de la vido. Elles peuvent enfin tre transmises la seconde partie du systme et/ou affiches laide dun moniteur. Le traitement de limage numrique est effectu laide dun processeur. En bas, une unit ddie au traitement dimage prsente une architecture particulire. Elle est compose dun processeur capable de raliser des oprations (aussi bien linaires que nonlinaires) en temps rel sur des fentres de taille limite (par exemple (33) ou (55) ), des transformations ponctuelles sur limage avant et/ou aprs son traitement (utile laffichage).

Transformation ponctuelle
v

Transformations ponctuelles
fait correspondre un niveau donn de gris ou de couleur u du signal dentre e, un nouveau niveau de gris ou de couleur v du signal de sortie s, i.e. v = f ( u ). les transformations ponctuelles sont utilises, souvent en visualisation, pour mettre en vidence des pixels satisfaisant une proprit donne.

Une transformation ponctuelle peut facilement tre ralise partir de donnes numriques. Elle correspond la transformation dune valeur (scalaire) en une autre (scalaire ou vectorielle pour une image couleur). Elle est entirement dtermine par la fonction donnant les valeurs de sortie correspondant chacune des valeurs dentre. Lusage dune transformation ponctuelle permet, entre autres, de modifier lapparence de limage laffichage (exemple : affichage de fausses couleurs partir dune image en niveaux de gris), ou encore de modifier le niveau entrant de gris ou de couleur afin de compenser certaines non-linarits dues au systme daffichage (moniteur). Une autre utilisation possible est la modification du contraste de limage afin de le rehausser.

Transformation ponctuelle pour laffichage


Principe (pour une image en niveau de gris)
Chaque pixel de limage dentre Ie, ayant le niveau de gris Ng, a une niveau de gris transform en T(Ng) dans limage de sortie Is grce lutilisation dune table de mise en correspondance

Ie

Buts
tendre la gamme daffichage (amlioration du contraste) Correction non-linaire de limage Binarisation de limage Segmentation (dcoupage de limage en rgions composes de pixels ayant la mme valeur)
6

Le principe de base pour la transformation ponctuelle dune image numrique (monochrome) est de considrer la valeur dentre dun pixel comme une adresse et de lire le contenu de la mmoire cette adresse. Pour cela, les valeurs originales doivent avoir t converties pralablement en valeurs entires positives sur une chelle allant typiquement de 0 2L 1 (par quantification et codage des niveaux de gris sur 2L valeurs diffrentes). Pour un codage sur 8 bits par pixel, la taille de la mmoire sera de 256 octets. A chaque index i va correspondre une couleur cre par la combinaison ri, vi et bi des couleurs primaires Rouge-Vert-Bleu. En effet, les valeurs ri, vi et bi sont envoyes dans trois convertisseurs numrique-analogique (CNA) de faon venir exciter respectivement les canons Rouge, Vert, et Bleu de lcran. On obtient alors laffichage une couleur cre par la synthse additive de trois couleurs primaires (technologie cathodique). Ce type de mmoire est appele table de mise en correspondance (ou table de conversion, appele aussi LUT signifiant en anglais Look-Up Table). Elle est construite avant son utilisation : ni son contenu, ni les pixels de limage ne sont modifis durant la transformation. La faible taille de la table permet ventuellement de la modifier pendant un temps de synchronisation vido (temps pendant lequel la vido nest plus affiche lcran TV), cest une faon de raliser un fondu-enchan de transition entre 2 plans vido. Typiquement, pour des images monochromes, un systme dispose dune LUT lentre et dune seconde LUT en sortie du systme de traitement dimages numriques. Dans le cas dune image couleur, il faut donc considrer deux ensembles de trois LUTs : une LUT pour chacune des trois composantes couleur RVB.

Exemples de transformations ponctuelles typiques


Exemple 1 Is
255

La transformation identit : Is = Ie

Exemple 20 Is
255

255

Ie

Image en inverse vido inversion de lchelle en niveau de gris

255

Ie

Pour ne pas modifier les valeurs dune image, il faut utiliser une LUT transparente o le contenu ladresse du niveau de gris Ng est Ng. Cest la transformation Identit (exemple 1). Les niveaux de gris de Is correspondent donc aux niveaux de gris de Ie. Pour raliser une inversion vido (exemple 2) o une petite valeur en niveau de gris est transforme en une valeur leve et inversement, le contenu de la LUT ladresse Ng est (2L - Ng 1).

Exemples de transformations en niveaux de gris


Correction de de la dynamique des niveaux de gris (Re-scaling)
Is B

Augmentation du contraste
Ie

A 0 a b IM

Correction du gamma cran

T2 o T1 = Oprateur Identit

Deux exemples de transformations pour des images en niveaux de gris : figure du haut : tous les pixels de limage dentre Ie ayant une valeur infrieure a (respectivement suprieure b ) auront la valeur A (respectivement B ) dans limage de sortie Is. Les niveaux de gris ue dans limage Ie ayant une valeur comprise entre a et b sont transforms en une nouvelle valeur vs comprise entre A et B. vs = u e a (BA) + A . b a Le but est de faire crotre la dynamique des valeurs des pixels de lintervalle de dpart [a, b] et de rehausser le contraste. Pour laugmentation du contraste, on a (B-A) > (b-a).

figure du bas : elle montre une correction typique daffichage. Un tube cathodique est naturellement non-linaire : l'intensit lumineuse reproduite l'cran est une fonction nonlinaire de la tension d'entre. La correction gamma peut tre considre comme un procd permettant de compenser ce phnomne pour obtenir une reproduction fidle de l'intensit lumineuse. Les effets gamma sont modliss par des fonctions du type f(x)=x, o est un rel qui varie entre 2 et 2,5 dans le cas de la tlvision. Pour compenser ces effets, on modlise les gamma de lcran par une LUT, et on cre la LUT de correction inverse afin que la compose LUT correction o transformation non-linaire cran gnre une transformation identit.

Transformations continues par morceaux


Exemple Is
255

Intrt

m M 255

Ie

Mise en uvre de 2 seuils : - les valeurs entre [0, ...,m[ et ]M,...,255] sont inchanges - les pixels entre [m...M] sont mis 255 (ces pixels sont blancs )

Is

Autre transformation :

255 M m m M 255

Ie

Deux autres exemples : figure du haut : tous les pixels de limage dentre Ie dont les valeurs sont dans la gamme [m, M] sont mis 255 (ils seront donc blancs la visualisation). Pour les autres valeurs (suprieures M ou infrieures m) la valeur dentre demeure inchange. figure du bas : la transformation oppose o seuls les pixels dont les valeurs sont appartiennent lintervalle [m, M] restent inchangs, les autres valeurs de pixels sont mises 0 ( noirs ). Ces deux cas sont des exemples de transformations continues par morceaux.

La figure ci-dessus prsente, pour limage Barbara, les rsultats obtenus aprs application des LUTs continues par morceaux prsentes prcdemment.

Exercice Chapitre 2 Outils de base du traitement dimages - LUT Cet exercice est essentiellement un exercice dobservation (peu de programmation de votre part) durant lequel vous allez non seulement vous familiariser avec lutilisation de Matlab pour le traitement dimage (ce qui vous aidera pour les pratiques suivantes) mais aussi apprendre utiliser les outils de bases du traitement dimage. Lancez Matlab et mettez jour la liste des chemins dans le path browser.

Cration de LUT (Look Up Table)


1 Dbut de session partir de la console Matlab, ouvrez un nouveau fichier M-File dans lequel vous allez saisir vos commandes et dont chaque ligne (se terminant par un ; ) sera ensuite interprte. 2 Ouverture dune image Commencez par charger limage CLOWN_LUMI.BMP en niveaux de gris avec imread (jetez un coup dil laide). Observez le type des donnes. 3 Affichage et trans-typage Laffichage dune image peut se faire avec les fonctions image, imagesc et imshow. Observez les diffrences, faites galement un essai en trans-typant vos donnes. (cf. Exercice Prise en main Matlab du chapitre 1 : essayez image = double(image)) 4 Exemples de LUT Pour laffichage dune image monochrome (tableau 2-D) Matlab utilise une LUT par dfaut qui associe chaque lment de la matrice image une couleur. Cette LUT par dfaut prsente 64 couleurs diffrentes en sortie (commande colormap pour afficher les niveaux de la LUT par dfaut). Le fonctionnement est dcrit sur la figure ci dessous.

Les diffrentes valeurs i de la matrice image vont tre interprtes comme des index de la LUT par dfaut. chaque index i va correspondre une couleur cre par la combinaison ri, vi et bi des couleurs primaires Rouge-Vert-Bleu. En effet, les valeurs ri, vi et bi sont envoyes dans un Convertisseur Numrique Analogique (CNA) de faon venir exciter respectivement les canons Rouge, Vert, et Bleu de lcran. On obtient alors laffichage une couleur cre par la synthse additive de trois couleurs primaires.

Sous Matlab, il est possible de crer ses propres LUT et de les appliquer laide de la fonction colormap. Les valeurs doivent cependant tre normalises sur lintervalle [0, 1]. Prenons, par exemple, le cas simple dune matrice M de taille 33 : 5 5 1 1 2 2 3 3 5 Cette matrice comprend quatre valeurs distinctes. On se propose dafficher : 1 en noir, 2 en blanc, 3 en rouge, et 5 en vert. Pour cela on cre une LUT map4C dont les sorties sont les quatre couleurs souhaites. Pour appliquer cette LUT limage affiche, on tape la commande colormap(map4C) : M=[5 5 1;1 2 2;3 3 5] ; % Dfinition de la LUT r=[0 1 1 0]; v=[0 1 0 1]; b=[0 1 0 0]; map4C=[r v b]; image(M) colormap(map4C) Rsultats avant et aprs lutilisation de la commande colormap() :

Pour afficher une image monochrome en niveau de gris, il faut donc utiliser une LUT dont les couleurs en sortie ne sont que des nuances de gris. Dans ce cas : i[0, 255], ri = vi =bi (gnralement la valeur de luminance dun pixel dune image monochrome est code sur 8 bits, donc 256 niveaux dintensit possibles). ACTION : Rapatriez le script lutndg.m dans votre rpertoire de travail. Ce script sert crer une LUT qui permet dafficher une image monochrome en niveaux de gris (ndg). Aprs avoir ouvert et analys ce fichier script, affichez une image monochrome de votre choix et tapez la commande lutndg.m.

Voici les images avant et aprs utilisation de la LUT contenue dans le script lutndg.m :

On propose un autre exemple de cration de LUT sous Matlab : un cran daffichage gnre des effets gamma quil est possible de compenser (transformation non-linaire des niveaux de limage dentre). Pour cela, on cre la LUT inverse celle des effets gamma de lcran afin que la compose LUT correction o effets gamma constitue une LUT transparente.

Voici un exemple de script pour comparer limage avant et aprs compensation du gamma de lcran : I = imread(CLOWN_LUMI.BMP); % LUT pour afficher limage clown_lumi en niveaux de gris r=0:1/255:1; v=0:1/255:1; b=0:1/255:1; map=[r v b]; image (I); colormap(map) % LUT si on souhaite compenser le gamma de l'cran vect = 0:1/255:1; gamma_r = 2.2; % Niveau_sortie=Niveau_entre^2.2 pour le rouge gamma_v = 2.3; % Niveau_sortie=Niveau_entre^2.3 pour le vert gamma_b = 2.1; % Niveau_sortie=Niveau_entre^2.1 pour le bleu r = vect.^(1/gamma_r); v = vect.^(1/gamma_v); b = vect.^(1/gamma_b);

% on fabrique la LUT l'aide des 3 vecteurs map_gamma_inv = [r' v' b']; % pour appliquer la LUT figure image(I) colormap(map_gamma_inv); Voici les rsultats obtenus respectivement avant (image de gauche) et aprs (image de droite) lutilisation dune LUT pour compenser le gamma de lcran:

ACTION : En vous inspirant des exemple prcdents, synthtisez une LUT pour faire une inversion vido de limage CLOWN_LUMI. Ce traitement consiste raliser le ngatif (bien connu en photographie) de chaque plan de couleurs i.e. les niveaux 0 deviennent 255 et inversement, les niveaux 1 deviennent 254, ... 5 Affichage des plans R-V-B Chargez limage couleur CLOWN dans votre rpertoire de travail. Observez le type des donnes, et visualisez limage. Visualisez plan par plan limage couleur CLOWN en crant les LUTs adquates pour les plans Rouge, Vert, et Bleu (on sinspirera de lexercice clatement dune image couleur sous Matlab du chapitre 1).

Correction de lexercice sur les LUT 1 Ouvrez lditeur de commande par la mthode exercice de prise en main Matlab, Chapitre 1). de votre choix (cf.

2 Dans votre rpertoire de travail excutez la commande: I = imread(CLOWN_LUMI.BMP); I est une matrice bidimensionnelle dans le cas d'une image en niveaux de gris. Le type de donnes de I est uint8 (unsigned integer). 3 Il existe trois fonctions imshow, image, et imagesc. sous Matlab pour afficher des images :

+ imshow affiche l'image contenue dans le fichier image ou la matrice correspondante. imshow appelle imread pour lire limage depuis le fichier, mais les donnes de limage ne seront pas stockes dans le workspace. + image affiche la matrice en argument comme une image. Elle naccepte pas de fichier image en paramtre. Laffichage repose sur les valeurs de la matrice ainsi que sur la carte des couleurs actives. + imagesc affiche la matrice en argument comme une image. Contrairement image, elle effectue une remise lchelle des valeurs de la matrice avant laffichage de manire utiliser pleinement la carte des couleurs. Elle utilise donc la LUT suivante :
niveau sortie 255

0 0
2005

niveau entre min


D. BARBA

max

255
10

Afin de comparer visuellement ces trois fonctions, vous pouvez galement taper la commande figure avant chacune des commandes image, imagesc, et imshow. Ainsi Matlab ouvrira une nouvelle fentre daffichage pour chaque nouvelle image. % Visualisation des diffrences entre les fonctions daffichage figure image(I) ; figure imagesc(I) figure imshow(I) Exemple de trans-typage : I = imread(CLOWN_LUMI.BMP); J = double(I); image(J);

4 Voici un exemple de solution pour raliser le ngatif de limage CLOWN_LUMI avec une LUT : % Lecture des images Im = imread('CLOWN_LUMI.BMP'); % Cration de le LUT r=1:-1/255:0; v=1:-1/255:0; b=1:-1/255:0; lut=[r' v' b']; image(Im) colormap(lut) Voici les rsultats obtenus :

Avec une LUT adquate, il est donc possible dafficher le ngatif dune image sans stocker aucune donne supplmentaire de type image dans le workspace et sans modifier les donnes initiales de limage. 5 Dans le cas dune image couleur la donne est tri-dimensionnelle et de type uint8. Les trois plans dune image couleur sont des plans monochromes. Pour les visualiser il faut crer des LUTs adquates. Par exemple, pour visualiser le plan rouge, il faut crer une LUT dont les sorties ne soient que des niveaux de rouge. Voici les commandes pour visualiser les 3 plans R-V-B de limage couleur CLOWN : Im=imread(CLOWN.BMP) ; % Cration des LUTs vecteur=0:1/255:1; r=vecteur; v=vecteur*0; b=vecteur*0; lutr=[r v b]; r=vecteur*0; v=vecteur ; lutv=[r v b]; v=vecteur*0; b=vecteur ; lutb=[r v b]; % Affichage des plans R-V-B image(Im(:,:,1)); % Plan Rouge colormap(lutr); figure image(Im(:,:,2)); % Plan Vert colormap(lutv); figure % Plan Bleu image(Im( :, :,3)); colormap(lutb);

Voici les rsultats obtenus :

Remarque : Matlab est un outil de visualisation de donnes matricielles qui propose des LUT spcifiques. Ces LUT sont prsentes la rubrique Supported Colormaps de laide Matlab sur les colormap. Notons cependant quil nexiste pas de LUT sous Matlab pour les images couleurs : il nest pas possible de visualiser une image couleur en crant une LUT pour chacun des plans Rouge, Vert, Bleu.

Exemple dhistogramme pour une image en niveaux de gris


Pour chaque niveau de gris, compter le nombre de pixels sy rfrant Pour chaque niveau, tracer le graphe en bton du nombre de pixels (possibilit de regrouper les niveaux proches en une seule classe)

Image de 256 256 pixels, cods chacun sur 8 bits

Population de pixels pour chaque niveaux de gris [0 ; 255]

Exemple simple de calcul dhistogramme pour une image


Image A en niveaux de gris Matrice des valeurs de luminance des pixels de limage A Histogramme de limage A

2 2 2 3 2 2 2 2

2 0 0 0 0 0 0 2

2 0 1 1 1 1 0 2

2 0 1 0 1 0 0 2

2 0 1 0 1 0 0 2

2 0 1 1 1 1 0 2

2 0 0 0 0 0 0 2

2 2 2 2 2 2 2 2

L'image A comporte 3 niveaux de gris diffrents : 0, 1 et 2. Compter le nombre de pixels pour chaque niveau de gris, laide de la matrice des valeurs de luminance. Les niveaux 0, 1 et 2 sont respectivement reprsents par 24, 12 et 28 pixels reprsentation de cette population de pixels sur l'histogramme.

Histogramme cumul dune image


Image A Valeurs de luminance de A Histogramme cumul de A

2 2 2 2 2 2 2 2

2 0 0 0 0 0 0 2

2 0 1 1 1 1 0 2

2 0 1 0 1 0 0 2

2 0 1 0 1 0 0 2

2 0 1 1 1 1 0 2

2 0 0 0 0 0 0 2

2 2 2 2 2 2 2 2

Calcul d'un histogramme particulier faisant appel aux cumuls des niveaux de gris Histogramme cumul. Chaque bton cumule le nombre de pixels du niveaux de gris concern et des niveaux de gris infrieurs : les niveaux 0, 1, 2 sont donc reprsents respectivement par 24, 36 et 64 pixels. Utile pour certains traitements d'image tels que lgalisation d'histogramme ( amlioration de contraste).

Exercice Chapitre 2 Calcul dhistogrammes Cet exercice va vous familiariser avec lutilisation de la fonction Matlab imhist qui permet dafficher lhistogramme dune image. Un cas simple sur une image de faible taille est prsent afin de bien assimiler la notion dhistogramme. On vous propose ensuite de comparer les histogrammes de diffrentes images (monochromes et couleurs).

Histogramme
1 - Utilisez laide de Matlab (commande help ou helpwin) pour connatre le rle de la fonction imhist. 2 Crez la matrice im1 qui reprsente limage suivante :

avec les valeurs : - 0 pour un pixel noir ; - 127/255 pour un pixel gris ; - 1 pour un pixel blanc. Vrifiez que vos coefficients sont exacts en affichant im1 avec la fonction imagesc (vous pouvez galement crer une LUT pour obtenir un affichage en niveaux de gris. Pour appliquer cette LUT, utilisez la fonction colormap). Affichez et commentez lhistogramme de im1 obtenu avec la commande imhist(Im1,3). 3 Chargez les deux images monochromes FRUIT_LUMI , et ISABE_LUMI dans votre rpertoire de travail. Ouvrez ces deux images sous Matlab avec la fonction imread. Visualisez et comparez les histogrammes avec la fonction imhist. 4 Chargez et ouvrez limage couleur MANDRILL . Visualisez les histogrammes des diffrents plans R-V-B de cette image, en utilisant la fonction imhist plan par plan.

Correction de lexercice : Calcul dhistogrammes 1 - La commande imhist permet de calculer et dafficher lhistogramme des images en niveaux de gris. Pour les images couleurs la commande imhist est utiliser plan par plan. 2 Voici les commandes pour afficher lhistogramme de limage 44 :

im1=[127/255 127/255 0 1;127/255 0 0 1;0 127/255 0 1; 127/255 127/255 0 1] % Cration de la LUT pour afficher en niveau de gris r=[0 0.5 1]; v=[0 0.5 1]; b=[0 0.5 1]; map=[r v b]; Cration de la LUT pour afficher en niveau de gris imagesc(im1); colormap(map) ; Affichage de lhistogramme imhist(im1,3) ; Lhistogramme obtenu est le suivant :

Lhistogramme affiche le nombre de pixel pour chaque niveau de gris de limage, il ya donc 6 pixels noirs, 6 pixels gris et 4 pixels blancs (rsultat facilement observable sur limage 44 utilise).

3 Nous utilisons les images en niveaux de gris FRUIT_LUMI.BMP et ISABE_LUMI.BMP. Aprs avoir lu les fichiers images par la commande imread, nous calculons leurs histogrammes. I = imread(FRUIT_LUMI.BMP) ; J = imread(ISABE_LUMI.BMP) ; imhist(I); imhist(J); Les deux pics de populations de pixels dans lhistogramme de limage FRUIT_LUMI correspondent aux rgions les plus sombres de limage (sol, raisin, ) et aux rgions de gris moyen (intensit proche de 127 pour les pommes, le fond, ).

Histogramme et image FRUIT_LUMI

Voici lhistogramme obtenu pour limage ISABE_LUMI :

Histogramme et image ISABE_LUMI Dans ce cas les deux principaux pics de population de pixels correspondent au sol (partie la plus fonce) et larrire plan de limage (partie la plus claire).

4 Pour les images couleurs, notamment limage MANDRILL.BMP, on lit le fichier image avec la fonction imread puis on calcule son histogramme plan par plan. I = imread(MANDRILL.BMP) ; imhist(I(:,:,1)); % 1er plan : Rouge imhist(I(:,:,2)); % 2me plan : Vert imhist(I(:,:,3)); % 3me plan : Bleu

MANDRILL.BMP (Plan1 : Rouge)

MANDRILL.BMP (Plan 2 : Vert)

MANDRILL.BMP (Plan 3 : Bleu)

Chapitre 2
Notions de traitement dimages

Transformation dhistogramme

Augmentation du contraste par tirement dhistogramme


Histogramme

0 0 a b Max Is Max

Ie

Etirement dhistogramme

0 0 a b Max

Ie

tirement dhistogramme : Cette premire transformation sur lhistogramme a pour objet laugmentation du contraste dune image. Pour cela, il convient daugmenter sur lhistogramme (cf. figure du haut) lintervalle [a,b] de rpartition des niveaux de gris de limage dentre Ie . On parle alors dtirement dhistogramme. Du point de vue de la transformation (cf. figure du bas), un tirement maximal est ralis ds lors que la rpartition des niveaux de gris de limage de sortie Is occupe lintervalle maximal possible [0, Max]. Typiquement pour une image dont les niveaux sont cods sur 8 bits, lintervalle [a, b] de Ie sera tir jusqu lintervalle [0, 255] pour Is.

Exemple daugmentation du contraste

Image originale

Image contraste

La figure illustre ltirement dhistogramme sur limage Circuit. Lintervalle de limage originale Ie est [12, 182]. Aprs tirement de lhistogramme, la rpartition des niveaux de gris seffectue sur lintervalle [0, 255] et donc concerne toute lchelle des niveaux de gris cods sur 8 bits. Limage obtenue aprs tirement possde un meilleur contraste. Le contenu de limage relatif des structures de circuits lectroniques est mis en vidence.

galisation dHistogramme
Histogramme (original) # Remarque : uniquement possible avec des donnes continues
0 0 a b Max Ie

Objectif: aprs transformation,


lhistogramme devient constant

Histogramme #

aprs galisation

0 0 a b Max

Ie

galisation dhistogramme : La deuxime transformation que nous abordons maintenant a pour objet galement laugmentation du contraste dune image. Il comprend ltirement dhistogramme prsent prcdemment avec en plus une rpartition uniforme des niveaux de gris. Aprs transformation, lhistogramme devient constant : chaque niveau de gris est reprsent dans limage par un nombre constant de pixels. On parle aussi dhistogramme plat . Cette transformation nest en thorie possible que dans la mesure o lon dispose de donnes continues. Or le domaine spatial et, surtout, lchelle des niveaux de gris sont des donnes discrtes. Dans la pratique donc, lhistogramme obtenu ne sera quapproximativement constant.

Effet de la discrtisation sur lgalisation


Observation : si limage originale Ie comportent k niveaux de gris (avec k << Max), limage de sortie Is en comportera au plus k; Techniques : nous dfinissons lhistogramme cumul dune image Ie comme la fonction CIe sur [0, Max], avec des valeurs entires positives. En particulier, nous avons CIe(Max) = N o N est le nombre total de pixels dans Ie. La fonction f qui ralise lgalisation i.e. Is = f(Ie) est donne par : f(g) = Max . CIe (g) / N en particulier, nous avons f(Max) = Max. (valeur entire arrondie)

Afin de procder lgalisation, nous avons recours ce qui est appel un histogramme cumul. Cet histogramme particulier comptabilise pour un niveau de gris g donn le nombre de pixel ayant un niveau de gris e infrieur ou gal g, ce nombre est not CIe(g) . Sachant que N est le nombre total de pixels dans limage Ie, CIe(g) est donc la proportion N du nombre de pixels de Ie ayant un niveau de gris infrieur ou gal g. Le niveau de gris f(g) aprs galisation sera alors la fraction de Max correspondant cette proportion. Cette fraction est arrondie lentier le plus proche. Dans ce cas, il est tout a fait possible que, pour deux niveaux de gris de dpart g et g, on obtienne f(g) = f(g) et donc un nombre de niveaux de gris dans limage Is infrieur k , le nombre de niveaux de gris dans limage dorigine Ie.

Effet de lgalisation dhistogramme

Image originale et son histogramme

Image et son histogramme aprs galisation

Ce premier exemple dgalisation permet visuellement de rehausser les contrastes de limage. Lhistogramme obtenu aprs galisation stale bien sur toute lchelle des niveaux de gris avec un espacement accru. Les donnes discrtes des niveaux de gris ne permettent pas dobtenir un histogramme rigoureusement plat.

Augmentation du contraste :
exemples et comparaison

Original

tirement dhistogramme

- galisation

Ce deuxime exemple est accompagn du rsultat dun simple tirement dhistogramme pour effectuer la comparaison des deux transformations. Le rehaussement du contraste est plus marqu avec lgalisation dhistogramme autorisant la dtection de structures situes dans lombre. En fait, tout niveau de gris fortement reprsent est tir linverse tout niveau de gris faiblement reprsent est fusionn avec dautres niveaux proches.

Exercice Chapitre 2 Transformation dhistogrammes Cet exercice est avant tout un exercice dobservation. Il sagit ici dutiliser la dmonstration imadjdemo de Matlab pour apprcier de faon interactive les effets sur les images de diffrentes transformations : modification de LUT, ajustement de contraste, modification dhistogramme,

Ajustement de contraste et Histogramme


partir de la console Matlab, lancez la dmonstration en tapant simplement la commande imadjdemo. Cette fentre saffiche :

Cette dmonstration permet de faire de manire interactive des ajustements de luminosit, de contraste, de correction gamma et dgalisation dhistogramme. Vous pouvez alors visualiser les LUT appliques ainsi que les effets sur les images et les histogrammes. Remarque : lorsque vous modifiez la visualisation dune image avec une LUT, les donnes sources restent inchanges. 1 Choisissez limage Circuit . Modifiez la luminosit. Interprtez les rsultats. 2 De mme, modifiez le contraste et la correction gamma. Interprtez les rsultats. Essayez de raliser ces modifications sur dautres images que limage Circuit et vrifiez vos interprtations.

galisation dhistogramme
3 Toujours en utilisant la dmonstration imadjdemo, effectuez une galisation dhistogramme. Apprciez leffet sur limage et sur lhistogramme. 4 Dans votre fentre de commande Matlab, allez dans laide pour connatre le rle de la fonction histeq. Chargez limage CLOWN_LUMI dans votre rpertoire de travail et galisez son histogramme avec la commande histeq. Affichez et comparez les images et les histogrammes avant et aprs galisation.

Correction de lexercice : Transformation dhistogramme

Nous allons voir comment se transforme une image lorsque lon manipule les diffrents paramtres tels que la luminosit, le contraste, et les corrections gamma. La dmonstration imadjdemo de Matlab permet de modifier ces paramtres de faon interactive sur des images types et de visualiser les diffrences entre limage originale et limage transforme. Cette dmonstration prsente galement lvolution de lhistogramme et de la LUT de limage, on peut donc interprter les rsultats obtenus sur limage finale. 1 Voici limage Circuit avant et aprs modification de la luminosit :

En augmentant la luminosit, on remarque que la LUT volue de faon ce que les pixels de trs faibles intensits soient ramens une intensit beaucoup plus importante et que les pixels dintensit moyennes et fortes sont tous saturs en sortie au niveau maximal dintensit : 1 (plus la luminosit est forte, plus il y a de pixels de faible intensit saturs 1). Sur lhistogramme, on aperoit donc une forte concentration de population de pixels autour des hautes intensits (luminances) et un pic de population pour le niveau 1 provoqu par la saturation. Limage apparat donc claircie . En diminuant la luminosit, on observe les phnomnes inverses et limage est donc noircie . 2 En manipulant le contraste, on obtient le rsultat suivant :

En augmentant le contraste, on remarque sur la LUT que les pixels de faible intensit en entre sont saturs 0 et quinversement les pixels de forte intensit sont saturs 1. Pour lintervalle des pixels non saturs, la rpartition des niveaux de gris seffectue sur lintervalle entier [0, 1] de manire linaire. Lhistogramme est donc tir, et prsente deux pics de population de pixels : un pic de population de pixel 0 qui correspond la saturation des pixels de faible intensit, et un pic de population de pixel 1 qui correspond la saturation des pixels de forte intensit. En revanche, pour les autres niveaux, on a exploit linairement la dynamique. Limage obtenue aprs tirement possde donc un contraste plus accentu (pour les zones non satures). En modifiant les corrections gamma, on obtient le rsultat suivant :

En imagerie, le facteur gamma modlise la non linarit de la reproduction de l'intensit lumineuse. De fait, un tube cathodique est naturellement non-linaire : l'intensit lumineuse reproduite l'cran est une fonction non-linaire de la tension d'entre. la correction gamma peut tre considre comme un procd permettant de compenser ce phnomne pour obtenir une reproduction fidle de l'intensit lumineuse. Les effets gamma sont modliss par des fonctions du type f(x)=x, o x est la valeur de luminance en entre et un rel qui varie entre 2 et 2,5 dans le cas de la tlvision. Ainsi, pour compenser ces effets, on applique une LUT de la forme g(x)=x1/. Les pixels de faibles intensits dans limage dorigine sont alors amens des intensits plus leves et leur dynamique est augmente. On dtecte donc plus facilement que dans limage dorigine les dtails situs dans les zones sombres : le contraste est augment pour ces zones de faibles intensits.

3 En galisant lhistogramme, on obtient le rsultat suivant :

Lhistogramme est tir sur lensemble des niveaux de gris de faon presque uniforme : chaque niveau de gris est reprsent dans limage par un nombre de pixels qui tend vers une constante. nouveau, limage transforme prsente un contraste accentu (tirement dhistogramme). 4 Il sagit deffectuer la transformation prcdente sur une image quelconque et sans utiliser la dmonstration imadjdemo. Aprs avoir rapatri limage CLOWN_LUMI dans votre rpertoire de travail, entrez les commandes suivantes pour effectuer une galisation dhistogramme et afficher les rsultats: % LUT pour afficher en niveaux de gris r=0:1/255:1; v=r; b=r; % Egalisation de l'image I=imread('CLOWN_LUMI.BMP') ; image(I) colormap([r' v' b']) figure imhist(I); J=histeq(I); figure image(J) colormap([r' v' b']) figure imhist(J) Voici les images obtenues avant et aprs galisation :

Le contraste des niveaux de gris est effectivement nettement plus accentu sur limage de droite obtenue aprs galisation. Voici les histogrammes obtenus avant et aprs galisation :

Lhistogramme de droite obtenu aprs galisation est presque uniforme et stend sur lensemble des niveaux de gris.

Exercice Chapitre 2 Binarisation

Cet exercice a pour objectif de vous prsenter diffrentes ralisations de la binarisation dune image sous Matlab. Chargez limage ISABE_LUMI.BMP dans votre rpertoire de travail et mettez jour la liste des chemins dans le path browser. 1 Lisez et affichez limage (fonctions imread et image). Affichez lhistogramme de limage (fonction imhist) afin de choisir un seuil de binarisation. 2 La fonction im2bw (image processing toolbox) permet la binarisation dune image. Consultez laide, crez et affichez limage binaire de ISABE_LUMI laide de la fonction im2bw. 3 On se propose maintenant de crer limage binaire de ISABE_LUMI sans utiliser la fonction im2bw. Crez un script de seuillage et de binarisation. Vous pouvez utiliser des instructions classiques (if, for, ), mais comme Matlab est un langage interprt, il est prfrable de travailler en vectoriel (la commande find peut tre utile ici).

Correction de lexercice : Binarisation

La binarisation est base sur un seuillage brut. Cela signifie que si un pixel de limage a une intensit suprieure une certaine valeur de seuil, il lui sera attribu la couleur blanche sinon il sera noir. Ce procd est ralis sur chaque pixel de limage. Nous obtenons donc une image comportant seulement deux niveaux (valeur 0 ou 1). Limage est binarise.

1 Aprs avoir rapatri limage ISABE_LUMI dans votre rpertoire, entrez le script : Im=imread('ISABE_LUMI.BMP'); r=0:1/255:1; v=r; b=r; image(Im); colormap([r' v' b']); figure imhist(Im); On obtient alors lhistogramme suivant:

Le seuil de binarisation peut alors tre choisi de diffrentes faons. Dans le cas de limage ISABE_LUMI, on remarque que lhistogramme prsente deux pics de population de pixels autour des niveaux de gris 75 et 190. On peut par exemple choisir la valeur de niveau de gris mdiane entre ces deux pics. Nanmoins, il existe de nombreuses autres manires deffectuer le seuillage : valeur moyenne de lintensit sur lensemble de lhistogramme, valeur mdiane de lintervalle des niveau de gris [0, 255]),

2 On prend pour seuil de binarisation la valeur mdiane 128 de lintervalle des niveaux de gris [0, 255]. Cette valeur doit tre normalise sur lintervalle [0, 1] pour tre utilise avec la fonction im2bw. Limage binaire de ISABE_LUMI est alors obtenue par les commandes : Im=imread('ISABE_LUMI.BMP'); ImBinaire=im2bw(Im,128/255) ; imshow(ImBinaire); On obtient alors limage binaire suivante:

3 On propose 3 autres scripts pour raliser la binarisation (seuil=128). a) Le premier script sappuie sur lutilisation de boucles for . Le but est de balayer lensemble des pixels de limage. Un par un, on vrifie sils sont infrieurs ou suprieurs au seuil tabli : - si la valeur du pixel (i, j) de limage avant binarisation est infrieure au seuil, le pixel (i, j) de limage binaire sera noir (valeur 0) ; - si la valeur est suprieure au seuil, le pixel (i, j) de limage binaire sera blanc (valeur 1). Voici le script Matlab pour raliser ceci : seuil = 128; Im = imread (ISABE_LUMI.BMP); n= size(Im,1); % Nombre de lignes de limage m= size(Im,2); % Nombre de colonnes de limage for i=1:n % Balayage sur les lignes de limage for j=1:m % Balayage sur les colonnes de limage if Im(i,j) < seuil ImBinaire(i,j) = 0; else ImBinaire (i,j) = 1; end end end imshow(ImBinaire);

b) Le second script utilise la fonction find de Matlab (vite les boucles imbriques et permet un gain de temps de calcul). Cette fonction va chercher les coordonnes des pixels qui vrifient la condition passe en paramtre de la fonction find. Im=imread('ISABE_LUMI.BMP'); seuil = 128 ; ImBinaire=Im; ImBinaire(find(ImBinaire<seuil))=0; ImBinaire(find(ImBinaire>=seuil))=1; image(ImBinaire) % Cration dune LUT pour afficher en noir et blanc r=[0 1]; v=r; b=r; map=[r' v' b']; colormap(map);

c) Le troisime script illustre galement lefficacit du calcul matriciel de Matlab (gain de temps de calcul par rapport aux boucles for) : Im = imread ('ISABE_LUMI.BMP'); seuil = 128 ; ImBinaire = Im > seuil ; imshow(ImBinaire); En entrant la commande ImBinaire = Im > seuil , Matlab cre un masque logique ImBinaire de mme taille que Im. Un pixel (i, j) du masque est 1 quand la condition Im(i, j)> seuil est vraie et 0 sinon. Le masque obtenu correspond donc limage binaire souhaite.

Chapitre 2 fondamentaux du traitement dimages : transformation ponctuelle

TEST
1 Soit une image dentre monochrome Ie, de taille rectangulaire : M lignes et N pixels par ligne. Le signal associ (niveau de gris) est appel se(m, n). On effectue les trois traitements dimage suivants produisant : pour le premier, une image de sortie monochrome I1, de taille (M N). Le signal associ est appel s1(m, n) et donn par : s1 ( m , n) = m +2 k = m 2 l = n 3 n +3

s ( k, l) .
e

pour le second, une image de sortie monochrome I2, de taille (M N). Le signal associ est appel s2(m, n) et donn par : s2(m, n) = 128 + [ 255 - se(m, n) ] / 2. pour le troisime, un tableau de sortie T3, de taille (M N). Llment t(m, n) est donn par : t ( m , n) =
k =1 M

a ( k , l ) . s ( k, l) .
e l =1

Indiquez pour chacun des trois traitements, le type de transformation : globale, locale, ponctuelle. Justifiez en une phrase chacune de vos rponse.

2 Soit une image numrique monochrome reprsente sur 8 bits (niveaux de gris allant de 0 255). Construire, sous la forme dune fonction, le contenu dune Look-Up Table (LUT) telle que : a ) elle permet de gnrer un effet d inverse vido des niveaux de gris sur lintervalle [a, b], avec a = 88 et b = 148. b ) elle permet de visualiser en noir les pixels de niveaux de gris sur lintervalle [a, b] et dinverser ( inverse vido ) ceux qui sont lextrieur de [a, b] (a = 88 et b = 148). c ) elle permet de linariser laffichage sur un moniteur TV dont la fonction de transfert qui caractrise le passage niveaux de gris (ndg) vers luminance (L) est de type : L/LMAX = (ndg/255), avec LMAX= 70.

3 Soit une image monochrome, reprsentant une scne compose de 3 objets : le fond : niveaux de gris sur [0, a], un objet 1 : niveaux de gris sur [a, b], un objet 2 : niveaux de gris sur [b, 255].

On prendra a = 64 et b = 192. En utilisant un ensemble de trois LUTs, associe chacune une couleur fondamentale Rouge, Vert, Bleu (LUTR, LUTV, LUTB), on souhaite que : les pixels appartenant au fond saffichent dans la couleur jaune ; les pixels appartenant lobjet 1 saffichent en Magenta ; les pixels appartenant lobjet 2 saffichent en Cyan.

chaque fois les niveaux de luminance seront conservs. Dterminez le contenu de chacune des 3 LUTs et reprsentez graphiquement celui-ci (i.e. trois graphiques LUTX=fX(ndg) ) 4 Lhistogramme dune image numrique monochrome I0 est le suivant :

avec : a = 8 ; b = 16 ; c = 24. On effectue un tirement dhistogramme pour accrotre le contraste de limage. Quel sera le facteur dtirement maximal ? Reprsentez le nouvel histogramme obtenu avec ce facteur.

Das könnte Ihnen auch gefallen