Sunteți pe pagina 1din 11

Segmentarea Split and Merge

Proiect disciplina Prelucrarea Numerică a Imaginilor

PROFESOR ÎNDRUMĂTOR, STUDENT,

Asist.dr.ing. Camelia Florea Costin Paul Dan

04.01.2011
Cuprins:

Cuprins…………………………………………………………………………………………...…..2
1.Sinteza proiectului……………………………………………………………………………….....3
2.Planificarea activităţii………………………………………………………………………………3
3.Fundamentare teoretică…………………………………………………………………………….4
3.1.Segmentarea prin divizare (“splitting”)…………………………………………………..4
3.2.Segmentarea prin divizare şi unificare (“split and merge”)………………………………4
3.3Segmentarea prin extindere(“merging”)…………………………………………………..4
3.4.Segmentarea prin extindere şi unificare………………………………………………….5
4.Implementarea soluţiei adoptate……………………………………………………………………6
4.1.Principiul algoritmului de divizare prin regiuni successive……………………………...6
4.2.Principiul algoritmului pentru fuzionarea regiunilor……………………………………..7
4.3.Principiul algoritmului segmentare prin divizare şi unificare……………………………7
5.Rezultate experimentale……………………………………………………………………………8
6.Bibliografie………………………………………………………………………………………..10
7.Anexe……………………………………………………………………………………………...10
1.Sinteza proiectului:

Proiectul realizat are ca scop aplicarea unui algoritm asupra unei imagini , algoritm care
realizează o segmentare de tip “divizare si unificare” ,prin care se doreste extragerea
caracteristicilor din imagine. Extragerea acestor caracteristici se bazează pe determinarea zonelor
din imagine care conţin pixeli cu caracteristici similare de stralucire, culoare sau textură.
Principiul segmentării prin diviziune constă in spargerea in mai multe regiuni a unei zone
mari, de exemplu întreaga imagine. Dacă după această spargere regiunile obţinute nu sunt omogene,
se continuă spargerea până când se obţin regiuni omogene. Regiunile similare se unifică, iar apoi se
divizează regiunile care nu au fost unificate.
Algoritmul folosit pentru segmentarea “split and merge” a fost transpus si realizat cu
ajutorul programatorului Borland C++ Builder Enterprise v6.0. Algoritmul folosit porneşte de la
premisa că întreaga imagine este omogenă. Dacă acest lucru este fals, imaginea este divizată în
patru regiuni. Procedura de divizare se aplică recursiv până când se obţin numai regiuni omogene.
O imagine segmentată conţine mai multe regiuni, pixelii fiecărei regiuni având aceeaşi
intensitate , culoare sau textură.

2.Planificarea activităţii:

Săptămâna Cerinţe îndeplinte Timp necesar pentru realizare Procent(%) de


de proiect realizare a proiectului
11.10.2010 Alegerea proiectului
25.10.2010 Găsirea documentaţiei Aprox. 1-2 h 25%
privind tema aleasă de
proiect
22.11.2010 Implementarea a 10% din Aprox. 2-3 h 30%
partea practică
6.12.2010 Implementarea a 90% din Aprox. 1-2 zile 60%
partea practică
4.01.2011 Realizarea şi predarea Aprox. 2-3 zile 90%
proiectului
3.Fundamentare teoretică:

Segmentarea imaginilor a devenit o problemă , datorită creşterii dramatice în ultimii ani a


utilizării calculatorului si in special a internetului. Pentru acest aspect au fost creeaţi diverşi
algoritmi. Printre aceştia, s-a dovedit pe parcurs că algoritmul “split and merge ” este extrem de
folosit datorită eficienţei si simplităţii sale în acest sector de prelucrarea de imagini.
Segmentarea imaginilor se bazează pe extragerea caracteristicilor din imagini, si anume
determinarea zonelor din imagine care conţin pixeli cu caracteristici similare , culoare sau textură.
Practic, acesta este un process care implică partiţionarea unei imagini in mai multe astfel de
regiuni, verificând un anumit criteriu(cum ar fi de exemplu, culoarea). Unirea acestor regiuni
trebuie sa restabileasca imaginea initială la sfârşit.
Procesul de segmentare este un pas extrem de important pentru extragerea de informaţii de
calitate ale imaginii. Fiecare regiune segmentată este conectată la vecinii săi si oferă informaţii
calitative, cum ar fi mărime, culoare sau formă.
Metodele de segmentare se impart în următoarele categorii:

3.1.Segmentarea prin divizare (“splitting”):


Se pleacă de la o zonă mare, de exemplu întreaga imagine, care se sparge în mai multe regiuni.Dacă
regiunile obţinute nu sunt omogene, se continuă spargerea până când se obţin regiuni omogene(care
satisfac un anumit criteriu de omogenitate, după caz.)

3.2.Segmentarea prin divizare şi unificare (“split and merge”):


Se pleacă de le regiuni de mărime medie, de exemplu pătrate de mărime fixă, se unifică regiunile
similare şi apoi se divizează regiunile care nu au fost unificate (Fig.1).

3.3 Segmentarea prin extindere(“merging”):


Pornind de la o regiune mică, de exemplu de un pixel, se dizolvă regiunea treptat, până când
criteriul de extindere nu mai este satisfăcut.

3.4 Segmentarea prin extindere şi unificare:


O imagine segmentată conţine mai multe regiuni, pixelii fiecărei regiuni având aceeaşi intensitate ,
culoare sau textură.
Metodele pure de unificare sunt, din punct de computaţional relativ scumpe şi necesită
resurse destul de mari, deoarece pornesc iniţial de la regiuni mici(puncte individuale). Putem realiza
acest lucru mult mai eficient prin divizarea recursivă a imaginii în regiuni mici si mai mici până
când toate regiunile individuale sunt coerente, apoi tot recursiv fuzionarea acestora pentru a
produce regiuni mai mari coerente.
Structura de bază de reprezentare este una de tip piramidal, adică o regiune pătrat de
dimensiune m x n , un nivel al unei piramide are 4 subregiuni de marime m/2 si n/2 care o
alcătuiesc.De obicei, algoritmul porneste de la ipoteza iniţială că intreaga imagine este o singură
regiune, apoi calculează criteriul de omogenitate pentru a vedea dacă este adevărat(TRUE). Dacă,
condiţia nu este îndeplinită (FALSE), regiunea pătrat este subdivizată în alte 4 regiuni mai mici.
Acest proces este repetat şi pe fiecare dintre subregiunile create până când nu mai necesită
divizare.Aceste regiuni rezultate sunt îmbinate , în cazul în care sunt similare, pentru a rezulta
regiuni noi neregulate. Problema apare (cel puţin din punct de vedere al programării) când orice
două regiuni pot fi fuzionate în cazul în care sunt adiacente şi în cazul în care regiunea mai mare
îndeplineşte criteriile de omogenitate, dar regiunile care sunt adiacente pot avea “părinţi” diferiţi
sau să fie la diferite niveluri(de exemplu, diferite în mărime), în structura piramidală. Procesul se
termină atunci când nu se mai pot efectua unificări în continuare.

În mod obişnuit, algoritmul începe cu existenţa unei singure regiuni, dar pot apărea excepţii
şi este posibil să înceapă la un nivel intermediar.În acest caz este posibil ca patru regiuni să fi
fuzionat pentru a forma o regiune părinte. Pentru simplificare, se presupune că se va începe cu o
singură regiune, de exemplu imaginea de ansamblu.Apoi , procesul de divizare este simplu. În
procesul de divizare se stochează o listă a imaginilor neomogene, pentru a putea fi prelucrată in
etajul următor. Cele omogene nu mai fac obiectul prelucrării, şi sunt stocate pe un nivel de regiuni.
Cele neomogene urmează a fi prelucrate, iar când lista se epuizează, imaginea rezultată este
imaginea finală rezultată în urma aplicării algoritmului “Split and Merge” asupra imaginii originale.

4.Implementarea soluţiei adoptate:

Algoritmul ales pentru realizarea segmentării “Split and Merge” este un algoritm prin
divizare recursivă. Acesta porneşte de la premisa că intreaga imagine este omogenă.Dacă acest
lucru nu este adevărat, imaginea este divizată în patru regiuni, care mai departe acestea vor deveni
regiuni părinte în structura piramidală ce urmează a fi constituită. Procedura de divizare este
aplicată recursiv până când se obţin numai regiuni omogene.
Algoritmul de segmentare prin divizare recursivă produce o imagine segmentată care poate
fi reprezentată printr-un arbore cuadric(Fig.3).

În structura reprezentată, fiecare nod este de tip părinte şi are patru fii, corespunzatori celor
patru regiuni în care se face divizarea de fiecare dată. Este suficient să se memorize în fiecare nod al
arborelui intensitatea care a fost atribuită pixelilor regiunii corespunzătoare nodului.

4.1 Principiul algoritmului de divizare prin regiuni successive:


Vom atribui imaginea originală care urmează a fi supusă algoritmului listei de procesare, pe
care o vom denumi ProcessList (Set ProcessList = FirstImage). Se extrage primul element al listei,
şi se verifică dacă regiunea este uniformă. Dacă acest lucru este confirmat(TRUE), regiunea este
salvată si adăugată la RegionList(aici se vor salva regiunile care nu mai trebuiesc modificate,
ulterior supuse operatiei de ataşare la final pentru a obţine imaginea modificată).Dacă acest lucru nu
este confirmat(FALSE) , se continuă divizarea regiunii în alte patru subregiuni şi adaugarea
acestora în ProcessList pentru prelucrare. Operaţia se continuă până când se epuizează toate
regiunile din ProcessList.
Pentru o imagine pe nivel de gri, o regiune este considerată a fi omogenă dacă deviaţia
standard de intensitate este mai mică decât o anumită valoare de prag, în cazul în care abaterea
standard este dată de relatia de mai jos(Fig4),
unde x reprezintă intensitatea medie a pixelilor N din regiune. Întrucât divizarea este destul de
simplă, algoritmul de unificare este mai complex. Se pot folosi algoritmi diversi, dar în caz general
perechile de regiuni sunt comparate pentru determinarea omogenităţii.

4.2 Principiul algoritmului pentru fuzionarea regiunilor:


După efectuarea divizării si verificării omogenităţii regiunilor, urmează fuziunea acestora în
vederea obţinerii imaginii finale. Algoritmul pentru fuziunea regiunilor are ca prin pas aşezarea
tuturor regiunilor in ProcessList, iar apoi extragerea pe rând a fiecăreia. După identificarea
regiunilor similare (după un criteriu stabilit de omogenitate), se verifică vecinii , şi dacă aceştia
există, se efectuează fuziunea şi se recalculează parametrii fiecărei regiuni, până când nu se mai pot
efectua fuziuni.

4.3 Principiul algoritmului segmentare prin divizare şi unificare:


Algoritmul “split and merge” este o procedura iterativă care include în fiecare iteraţie
divizare şi unificare, astfel:

 Dacă o regiune este neomogenă (P(R)=FALSE), ea este spartă în patru regini;


 Dacă două regiuni adiacente Ri, Rj sunt similare (P(Ri U Rj)?=TRUE), ele sunt unificate;
 Algoritmul se termină atunci când nu mai este posibilă nici spargere, mici unificare.
Algoritmul este recursiv:

 Dacă regiunea curentă nu este omogenă, ea este divizată în patru şi procedura este aplelată
recursiv;

{
/* se divide regiunea in 4 zone egale si se apeleaza functia pentru cele 4 zone*/
divideReg( N1, M1, (N1+N2)/2, (M1+M2)/2, T, N);
divideReg( (N1+N2)/2, M1, N2, (M1+M2)/2, T, N);
divideReg( N1, (M1+M2)/2, (N1+N2)/2, M2, T, N);
divideReg( (N1+N2)/2, (M1+M2)/2, N2, M2, T, N);

/* unde : - (N1, M1) – (N2,M2) sunt colturile stanga –sus si dreapta-jos ale dreptunghiului care
încadrează imaginea segmentată;
-T este pragul folosit in criteriul de omogenitate;
- in N se memoreaza numarul de regiuni rezultate din divizarea recursiva; */
}
 Dacă regiunea este omogenă, se calculează media sa şi se compară cu mediile regiunilor
vecine (pe cele patru laturi ale regiunii), verificând posibilele unificări.Astfel, dacă diferenţa
dintre media regiunii curente si media unei regiuni adiacente este sub o valoare de prag
prestabilită, atunci cele două regiuni se unifică: se calculează media valorilor pixelilor celor
două regiuni şi se atribuie pixelilor celor două regiuni în imaginea de iesire;

/* nivelul maxim de intensitate */


{
int max =0, min = Lmax;
for(int i=M1; i<M2; i++)
for(int j=N1; j< N2; j++)
{ if(a[i][j] < min) min = a[i][j];
if(a[i][j] > max) max = a[i][j];
}

/* criteriul de omogenitate */
if(max – min < T) return 1;
else return 0;

 Dacă nici o unificare nu este posibilă, se atribuie pixelilor regiunii din imaginea de ieşire
valoarea medie a pixelilor săi;
 Dacă mai multe unificări sunt posibile, se alege cea mai bună, adică unificarea cu regiunea
vecină care are valoarea medie cea mai apropiată de valoarea medie a regiunii curente.

Algoritmul are însă un dezavantaj major: poate produce regiuni adiacente similare, care nu
corespund aceluiaşi nivel se divizare. Astfel dacă P(R) este un predicat logic care defineşte regula
de segmentare(de exemplu lmax – lmin < prag), atunci, dacă ( P(Ri U Rj)=TRUE ) => Ri si Rj sunt
regiuni similare.
Regiunile adiacente similare trebuie să fie unificate.

5.Rezultate experimentale:

În urma aplicării algoritmului de segmentare asupra unei imagini în zone omogene, în funţie de
anumite criterii prestabilite, cum ar fi de culoare, textură sau nivele de gri a rezultat(Fig.5) :
Aplicarea algoritmului segmentării divide şi unifică (Fig.6) pas cu pas asupra imaginii din
Fig.7 :
6.Bibliografie:

[Site1] 5th Slovakian-Hungarian Joint Symposium on Applied Machine Intelligence and


Informatics -Marian Bakoš - Active Contours and their Utilization at Image Segmentation –
2007:
http://www.bmf.hu/conferences/sami2007/31_Bakos.pdf
[Site2] PCVO2 Photogrammetric Computer Vision ISPRS Commission III, Symposium 2002
September 9 - 13, 2002, Graz, Austria - Marco Roggero - OBJECT SEGMENTATION
WITH REGION GROWING AND PRINCIPAL COMPONENT ANALYSIS :
http://iacl.ece.jhu.edu/segmentation_object/gvf/
[Site3] ENSTA Module D9 – ES322 - Jean-Christophe Baillie - Traitement d'Image et Vision
Artificielle- 2003
http://www.ensta.fr/~manzaner/DFR/Modules/d9.html
[Site4] Quantitative Imaging:
http://www.ph.tn.tudelft.nl/Courses/FIP/noframes/fip-Segmenta.html#Heading118
[Site5] Segmentarea imaginilor [pdf] :
http://andrei.clubcisco.ro/cursuri/4spg/Segmentarea%20imaginilor.pdf

7.Anexe:
Programul folosit ca model pentru implementare:

void divideReg(imagine a, imagine b, int N1, int M1, int N2, int M2, int T, int *N)
{// a este imaginea de intrare iar b, imaginea de iesire
//N1,M1 - N2,M2 sunt colturile dreptunghiului imaginii segmentate
// reprezinta pragul folosit in criteriul de omogenitate
// in N se memoreaza numarul de regiuni rezultate din divizarea recursiva
long s;
if(!omogen(a,N1,M1,N2,M2,T) && (N2-N1)>1 && (M2-M1)>1)
{
divideReg(a,b,N1,M1,N1+(N2-N1)/2,M1+(M2-M1)/2, T,N);
divideReg(a,b,N1+(N2-N1)/2,M1,N2,M1+(M2-M1)/2, T,N);
divideReg(a,b,N1,M1+(M2-M1)/2,N1+(N2-N1)/2,M2 T,N);
divideReg(a,b,N1+(N2-N1)/2,M1+(M2-M1)/2,N2,M2, T,N);
}
else
// regiune omogena; calculeaza media sa si o asigneaza
// pixelilor regiunii in imaginea de iesire
{
(*N)++;
s =0;
for(int i= M1; i<M2; i++)
for(int j=N1;j<N2;j++)
s+ = a[i][j];
s/=(N2-N1)*(M2-M1);
for(i=M1; i<M2; i++)
for(j=N1; j<N2; j++)
b[i][j] = (unsigned char) s;
}
return;
}

int omogen(imagine a, int N1, int M1, int N2, int M2, int T)
{
int max =0, min = Lmax; // nivelul maxim de intensitate
for(int i=M1; i<M2; i++)
for(j=N1; j<N2; j++)
{
if(a[i][j] < min) min= a[i][j];
if(a[i][j] > max) max = a[i][j];
}
if(max - min < T) return 1; // criteriul de omogenitater
else return 0;
}