Sunteți pe pagina 1din 5

Operatii de contrastare bazate pe histograma

imaginii
Pentru o imagine f de M N pixeli si L nivele de gri, histograma este
definita (2.10)
ca probabilitatea (frecventa relativa) de aparitie n imagine a diferitelor
nivele de gri
posibile.
h(i) = 1
MN
M1
m=0
N1
n=0

(i f(m, n)) , i= 0, 1, ...L 1 (2.10)


Din punct de vedere statistic, putem considera valoarea fiecarui pixel al
imaginii ca o
realizare particulara a unei variabile aleatoare asociata nivelelor de gri, caz
n care histograma
(2.10) este functia de densitate de probabilitate a acestei variabile
aleatoare.
Fiind o functie de densitate de probabilitate, histograma oricarei imagini
verifica conditia
de normare
L1
i=0

h(i) = 1.
Din punct de vedere practic, calculul histogramei unei imagini nseamna
parcurgerea
punct cu punct a imaginii si contorizarea numarului de nivele de gri
ntlnite. Presupunnd
L nivele de gri posibile n imaginea de dimensiuni NRLIN si NRCOL, codul
26
urmator aloca pentru fiecare nivel de gri posibil cte un unsigned int, ce va
contoriza
numarul de aparitii ale nivelului de gri respectiv. Pentru fiecare punct al
imaginii se
incrementeaza pozitia din histograma ce corespunde valorii de gri din acel
pixel. Ceea
ce rezulta n final difera de histograma descrisa de (2.10) prin constanta
de normare
numarul total de puncte ale imaginii (deci MN sau NRLIN*NRCOL); este
evident ca
valorile obtinute pot fi normate pentru a obtine o functie de densitate de
probabilitate
prin mpartirea cu NRLIN*NRCOL si definirea histogramei ca fiind formata
din real sau

float.
histo=(unsigned int*)malloc(L*sizeof (unsigned int));
for (i=0;i<L;i++)
histo[i]=0;
for (i=0;i<NRLIN;i++)
for (j=0;j<NRCOL;j++)
histo[imagine[i][j]]++;
n Matlab, implementarea oricarei functii este cu att mai eficienta (din
punctul de vedere
al timpului de rulare) cu ct sunt evitate structurile repetitive (n particular
buclele for).
Cum, pentru calculul histogramei, ciclarea nu poate fi evitata (deci trebuie
parcurse fie
toate punctele imaginii, fie toate nivelele de gri), se alege varianta care
implica repetarea
minima a ciclarii:
histo=zeros(1,L);
for i=1:L
p=find(imagine==i);
histo(i)=length(p);
% histo(i)=length(p)/prod(size(imagine));
end
Functia find (functie standard a pachetului Matlab) returneaza pozitiile
(indicii) la care
este gasita valoarea i nmatricea imagine (adica ntoarce pozitiile
punctelor ce au valoarea
i); numarnd aceste puncte (deci calculnd lungimea vectorului n care sunt
stocate) se
gaseste numarul de puncte ce au respectivul nivel de gri. Normarea
histogramei se poate
face fara a modifica declaratiile de definire a structurilor (pentru Matlab
este indiferent
daca se stocheaza ntregi sau numere cu parte zecimala). Acesta
structura estemai rapida
dect cea prin care se parcurgea toata imaginea deoarece se foloseste o
singura bucla de
lungime L (si nu doua bucle imbricate, de lungime totala NRLIN*NRCOL),
iar functia
find este rapida, fiind o functie precompilata.
Histograma imaginii ofera informatii asupra plasamentului n nuanta a
continutului
imaginii (vezi figura 2.8). La majoritatea imaginilor exista o distributie
neuniforma a
nivelelor de gri; exista nivele de gri predominante si exista nivele de gri
folosite putin sau
27

deloc. Operatiile de mbunatatire a imaginilor (pentru mbunatatirea


perceptiei vizuale)
au ca scop redistribuirea nivelelor de gri, astfel ca acestea sa ocupe
ntreaga gama de
variatie disponibila, n mod uniform: aceasta este egalizarea de
histograma [9], [18].
Fig. 2.8: Imagine cu nivele de gri si histograma acesteia
Scopul egalizarii de histograma este deci obtinerea unei distributii
uniforme a nivelelor de
gri; imaginea rezultata va prezenta cea mai mare mbunatatire a
contrastului, distribuit
regulat n ntreaga gama dinamica a nivelelor de gri. Din punct de vedere
matematic,
egalizarea de histograma nseamna transformarea unei distributii oarecari
(descrisa de histograma
imaginii initiale) ntr-o distributie uniforma. Considernd variabilele
aleatoare
X(, x) si Y (, y) legate prin Y = g(X), atunci ntre functiile de densitate de
probabilitate
a celor doua variabile aleatoare exista relatia [16]:
fY (y) = fX(x)
1 (g1(y))

|x=g1(y)
Daca dorim ca functia de densitate de probabilitate fY (y) sa fie uniforma
(n conditiile
n care functia de densitate de probabilitate fX(x) este data), atunci
nseamna ca vom
avea

(g1(y))

=1
kfX (g1(y)). Rezolvarea acestei ecuatii produce solutia y = g(x) =
x

fX(t)dt.
Pentru cazul particular al imaginilor, variabila aleatoare X ia valori naturale nivelele
de gri. Functia de densitate de probabilitate fX(x) este histograma
[normata] a imaginii
iar functia de transformare devine y = g(x) =
x
0

fX(t)dt. Tinnd seama ca valorile de


gri sunt discrete, integrala se transforma n suma si acesta forma nu
este altceva dect

28
histograma cumulativa a imaginii; daca h este histograma imaginii, atunci
g(x) = H(x) =
x
i=0

h(i) (2.11)
Valorile functiei trebuie nsa redistribuite n intervalul permis de valori de
gri, ceea ce
duce la deducerea formulei care exprima noile valori de gri:
v=

H(u) H(0)
MN H(0)
(L 1) + 0.5

(2.12)
O varianta de cod care realizeaza egalizarea de histograma este
prezentata n continuare.
Trebuie remarcat ca modul de calcul al histogramei cumulative este de tip
iterativ,
bazndu-se pe formula H(x) = H(x 1) + h(x), ce se poate deduce imediat
din (2.11).
Mai trebuie de asemenea remarcat ca se foloseste o histograma
nenormata.
gri_nou=(unsigned int *) malloc (L*sizeof(unsigned int));
histo_cum=(unsigned int *) malloc (L*sizeof(unsigned int));
tot=NRLIN*NRCOL;
histo_cum[0]=histo[0];
for (i=1;i<L;i++)
histo_cum[i]=histo_cum[i-1]+histo[i];
for (i=0;i<L;i++)
gri_nou[i]=round((histo_cum[i]-histo_cum[0])*(L-1)/(tot-histo_cum[0]));
Figurile urmatoare prezinta o imagine originala (lena) si rezultatul
egalizarii de histogram
a, precum si histogramele originale si egalizate (figura 2.9). Ceea ce se
remarca
cu usurinta este diferenta dintre histograma obtinuta si histograma
perfect uniforma
dorita. Unul dintre efectele secundare notabile este introducerea de nivele
de gri lipsa n
histograma egalizata (aspectul n pieptene al acesteia).
Imagine originala Imagine dupa egalizarea de histograma
29
0 50 100 150 200 250 300
0
200
400

600
800

Fig. 2.9: Histograma imaginii lena, nainte si dupa egalizare


Alte variante de egalizare a histogramei [18] folosesc histograme modificate
ale imaginii
(prin contabilizarea doar a anumitor pixeli) sau limiteaza amplitudinea
vrfurilor histogramei,
redistribuind uniform pixelii n exces.
Tehnica de egalizare a histogramei poate fi extinsa prin realizarea unei
histograme de
forma impusa (dar oarecare) a imaginii rezultat; aceasta metoda este
denumita specificare
de histograma [9], [5].
O ultima remarca se poate referi la validitatea introducerii tehnicilor de
mbunatatire a
histogramei n categoria de operatii punctuale. Majoritatea autorilor
considera ca orice
operatie care este echivalenta cu modificarea paletei de culoare a imaginii
este o operatie
punctuala. n acelasi timp nsa, noile valori de gri ale fiecarui punct sunt
calculate pe
baza histogramei imaginii, deci pe baza unei masuri ce ia n calcul valorile
din ntreaga
imagine; din acest punct de vedere, egalizarea de histograma poate fi
inclusa n categoria
operatiilor integrale.
30

S-ar putea să vă placă și