Documente Academic
Documente Profesional
Documente Cultură
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:
Î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.
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.
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;
/* 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:
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;
}