Sunteți pe pagina 1din 11

Universitatea tefan Cel Mare Suceava Facultatea de Inginerie Electric i Stiina Calculatoarelor Specializarea Calculatoare

Segmentarea unei imagini. Tehnici automate utilizate n detecia pragului.

ndrumtor: ef lucrri drd. ing. Petrov Simion

Student:

- Suceava 2007 -

1141a

Remus PRODAN

Grupa:

Cuprins:

1.Segmentarea imaginilor

1.1 Introducere..3 1.2 Tehnici de segmentare4

2.Aplicatia practica.7

1.Segmetarea imaginilor

1.1 Introducere

Segmentarea imaginilor se refera la descompunerea unei scene (imagini) n componentele sale. n urma procesului de segmentare vor fi extrase din imagine obiecte distincte, regiuni ce satisfac anumite criterii de uniformitate, sau alte elemente. Se propune o definitie matematizata a procesului de segmentare, si anume segmentarea unei imagini f este definita ca partitionarea [completa] a lui f ntr-un ansamblu de multimi disjuncte nevide si conexe, ce satisfac fiecare un anumit criteriu C, criteriu ce nu mai este respectat pentru reuniunea oricaror doua elemente ale partitiei. Alegerea unei tehnici specifice de segmentare (partitionare a imaginii) este legata de mai multe aspecte caracteristice imaginii de analizat si cerintelor utilizatorului. Dupa natura si continutul imaginii, tehnicile de segmentare trebuie sa tina cont de prezenta n imagine a diverse categorii de artefacte: - reflexii iluminare neomogena - zgomot suprapus infomatiei utile - zgomot suprapus infomatiei utile Dupa primitivele de extras, tehnicile de segmentare se mpart n doua categorii fundamentale: - tehnicile de segmentare orientate pe regiuni si - tehnicile de segmentare orientate pe contur. Primitivele extrase din imagine sunt regiuni (forme) si zone texturate pentru tehnicile orientate pe regiuni, sau entitati de tip discontinuitate (frontiere, segmente de dreapta, unghiuri) pentru tehnicile orientate pe contur. n cadrul segmentarii orientate pe regiuni se disting cteva categorii principale de tehnici: - etichetarea imaginilor binare

- segmentarea pe histograma - cresterea si fuziunea regiunilor - segmentarea texturilor - segmentarea prin metode de clustering Tehnicile principale de segmentare orientata pe contururi sunt: - extragerea contururilor prin metode de gradient si derivative - extragerea contururilor prin metode neliniare - extragerea contururilor prin metode liniare optimale - extragerea contururilor prin modelare matematica n cele ce urmeaza se prezinta doar o parte dintre aceste tehnici, pe care le consideram cele mai semnificative.

1.2 Tehnici de segmentare

n general, operatia de segmentare orientata pe regiuni urmareste extragerea din imagine a zonelor (regiunilor) ocupate de diferitele obiecte prezente n scena. Un obiect se defineste ca o entitate caracterizata de un set de parametri ale caror valori nu se modifica n diferitele puncte ce apartin entitatii considerate. Mai simplu, putem spune ca obiectul are proprietatea de uniformitate a parametrilor de definitie. 1. Segmentarea bazata pe histograma Unul dintre cei mai simpli parametri de definitie este nivelul de gri al punctului. Nivelul de gri corespunde n scena unei proprietati fizice ce este preluat de senzorul de imagine si asociat luminantei imaginii. n acest caz, histograma imaginii (functia de densitate de probabilitate a variabilei aleatoare discrete ale carei realizari sunt nivelele de gri din imagine) reflecta distributia n scena a proprietatii fizice nregistrate. Pentru o imagine f de M N pixeli si L nivele de gri, histograma este definita ca probabilitatea de aparitie n imagine a diferitelor nivele de gri posibile. Daca nivelul de gri (respectiv proprietatea fizica pe care acesta o reprezinta) caracterizeaza n mod suficient obiectele din scena, histograma imaginii va prezenta o structura de moduri dominante - intervale de nivele de gri ce apar cu probabilitate mai mare. Fiecare asemenea mod (maxim al histogramei) va reprezenta o anumita categorie de obiecte. Ca exemplu imediat se poate cita cazul imaginilor obtinute prin scanarea documentelor scrise si a tipariturilor sau imaginile n infrarosu (temperatura punctelor este asociata nivelelor de gri astfel nct mai fierbinte nsemna mai alb). Pentru toate aceste tipuri de imagini histograma este de tipul celei prezentate n figura urmatoare.

Figura. Histograma bimodala

Segmentarea cu prag. Tehnici de prag ( thresholding ) Separarea modurilor histogramei (si deci identificarea obiectelor din imagine, respective caractere scrise / pagini albe si obiecte fierbinti / obiecte reci) se face prin alegerea unui nivel de gri T, numit prag de segmentare. Acest prag de segmentare se alege pe minimul global al histogramei. Din imaginea initiala f de nivele de gri se construieste o imagine de etichete (imagine etichetata) g, conform transformarii descries in continuare. Imaginea etichetata va fi descrisa de doua etichete: - E0 pentru punctele al caror nivel de gri este mai mic dect pragul T si - E1 pentru punctele al caror nivel de gri este mai mare dect pragul T. Etichetele E0 si E1 pot fi: - valori numerice (0 si 1, sau 0 si 255) sau pot fi - siruri de simboluri sau alti identificatori. Transformarea anterioara este o transformare punctuala (noua valoare din punctul (m, n) depinde doar de valoarea anterioara din punctul (m, n) ) si poarta numele de binarizare.

2. Aplicaia practic
Pentru a ilustara conceptul de segmentare a imaginilor am realizat o aplicatie in Borland C++ Builder. Aceasta este o aplicatie simpla care da posibilitatea utilizatorului sa incarce o imagine si apoi sa salveze imaginea modificata (segmentata). Este o aplicatie simpla ce contine un singur formular:

Aceasta contine doua butoane pentru incarcare, respectiv salvare: butoanele Load File si Save File. Pentru a putea segmenta o imagine trebuie ca aceasta sa fie incarcata mai intai, prin intermediul butonului Load. Dupa incaracare aceasta va fi afisata in primul ImageBox. De asemenea exista si un buton care va transforma imaginea in nuante de gri si o va afisa in al-2 lea ImageBox, butonul Nuante de gri. La incarcarea unei imagini automat se va realize histograma nuantelor de gri a acesteia, care ulterior va fi utilizata pentru a realize segmentarea imaginii. Tehnica utilizata pentru segmentare este cea de detectie a pragului (thresholding). Pe scurt, aceasta tehnica este aplicata unei imagini, dupa ce aceasta a fost transformata in nuante de gri, si se alege un prag de segmentare, o valoare intre 0 si 255. Dupa ce s-a ales acest prag pixelii imaginii sunt parcursi si 6

transformati in gri, daca valoarea este situate sub nivelul pragului acestora li se acorda o noua valoare, iar daca sunt deasupra pragului li se acorda alta valoare, pentru a fi identificati. Sunt diferite tehnici utilizate pentru detectia automata a pragului, una ar fi parcurgerea histogramei si identificarea maximelor, care vor reprezenta obiecte distincte in imagine. Un algoritm utilizat este acela de detectie a primelor 2 maxime: O implementare C a unui algoritm de segmentare automat este prezentat n continuare.
int i,j,k; // contoare int NMin, NMax; // numrul de maxime i minime din histogram long Max1, Max2; // valorile primelor dou maxime gsite long Hist[256], Hist1[256]; // vectori histogram //calcul histogram for( j=0; j<DY; j++) for( i=0; i<DX; i++ ) Hist[ Img1[i][j] ]++; do { // aplic filtrul nerecursiv de netezire asupra vectorului histogram Hist1[0]=(Hist[0]+Hist[1])/3; for(i=1;i<255;i++) Hist1[i] = ( Hist[i-1] + Hist[i] + Hist[i+1] ) / 3; Hist1[255] = ( Hist[254] + Hist[255] ) / 2; for( i=0; i<256; i++ ) Hist[i] = Hist1[i]; // calculeaz numrul i poziia maximelor din vectorul histogram k=1; //prin 1 ne indica ca suntem pe un minim, iar 2 - maxim j=0; NMin=0; NMax=0; Max1=0; Max2=0; for(i=0;i<256;i++) { if(i!=0 && i!=255) { if(Hist[i-1]==Hist[i] && Hist[i]==Hist[i+1]) //1=palier ; //Nimic if(Hist[i-1]==Hist[i] && Hist[i]< Hist[i+1]) //2=sfrit minim if( k == 2 ) k=1, NMin++, Min1 = Min2, Min2 = (i+j)/2; if(Hist[i-1]==Hist[i] && Hist[i]> Hist[i+1]) //3=sfrit maxim if(k==1) k=2, NMax++, Max1=Max2, Max2=(i+j)/2; if(Hist[i-1]< Hist[i] && Hist[i]==Hist[i+1]) //4=nceput maxim j=i; if(Hist[i-1]< Hist[i] && Hist[i]< Hist[i+1]) //5=ramp cresctoare ; //Nimic if(Hist[i-1]< Hist[i] && Hist[i]> Hist[i+1]) //6=maxim clar k=2, NMax++, Max1=Max2, Max2=i; if(Hist[i-1]> Hist[i] && Hist[i]==Hist[i+1]) //7=nceput minim j=i; if(Hist[i-1]> Hist[i] && Hist[i]< Hist[i+1]) //8=minim clar k=1, NMin++, Min1=Min2, Min2=i; if(Hist[i-1]> Hist[i] && Hist[i]> Hist[i+1]) //9=ramp cztoare ; //Nimic }

else if(i==0) { //nu se face nimic ... doar punctam momentul if(Hist[i]==Hist[i+1]) //1,4,7 ; //Nimic if(Hist[i]< Hist[i+1]) //2,5,8 ; //Nimic if(Hist[i]> Hist[i+1]) //3,6,9 ; //Nimic } else //i == 255 { if( Hist[i-1] == Hist[i] ) //1,2,3 if( k == 1 ) k=2, NMax++, Max1=Max2, Max2=(i+j)/2; if( Hist[i-1] < Hist[i] ) //4,5,6 k=2, NMax++, Max1=Max2, Max2=i; if( Hist[i-1] > Hist[i] ) //7,8,9 ; //Nimic } }//end for(...) } while( NMax > 2); // repet pn se obin doar dou maxime // calcul prag de segmentare situat intre Max1 si Max2 ( relativ la Max1 ) Th = ( Max2*Hist[Max2] - Max1*Hist[Max1] ) / ( Hist[Max2] - Hist[Max1] Th += Max1; //Calculeaza pragul relativ la pozitia ZERO

Pentru a vedea rezultatele acestui algoritm dupa ce incarcati imaginea apasati butonul denumit Segmentare 2 max iar in al 2-lea ImageBox va apare imaginea segmentata cu ajutorul algoritmului de mai sus. Nu tot timpul acest algoritm da rezultate, mai recomandat fiind unul recursive, dar acestia sunt algoritmi complecsi consumatori de resurse. Un exemplu este prezentat in continuare:

De asemenea am dat utilizatorului posibilitatea sa aleaga singur pragul de segmentare, pentru a putea observa efectele modificarii acestuia asupra imaginii. Acest lucru se poate face prin utilizarea unui slideBar care variaza intre valori intre 0 si 255. Un exemplu de imagine segmentata ca urmare a utilizarii acestuia este prezentata in continuare:

Dupa cum se observa obiectele a caror nuanta de gri este mai apropiata de alb se mai pot inca observa, restul find identificate cu background-ul.

10

Bibliografie
1.apollo.eed.usv.ro/~remus Segmenatrea imaginilor. 2. http://www.yov408.com/tutorials/278report.pdf 3. http://www.ph.tn.tudelft.nl/Courses/FIP/frames/fip-Segmenta.html 4.http://www.efg2.com/Lab/Library/ImageProcessing/Algorithms.htm# GeneralAlgorithms

11