Sunteți pe pagina 1din 74

UNIVERSITATEA TEHNICA DIN CLUJ-NAPOCA

FACULTATEA DE ELECTRONICA, TELECOMUNICATII SI


TEHNOLOGIA INFORMATIEI
Specializarea Tehnologii i sisteme de Telecomunicaii

Contribuii la analiza i implementarea unor


metode de extragere a caracteristicilor din
imagini n vederea clasificrii lor
Lucrare de licen

PRESEDINTE COMISIE,

DECAN,
Prof.dr.ing. Marina OPA

Prof. dr. ing Monica Borda

CONDUCATOR,
Asist. ing. Anca Aptean

ABSOLVENT,
Alexandru Mihu
2010

UNIVERSITATEA TEHNICA DIN CLUJ-NAPOCA


FACULTATEA DE ELECTRONICA, TELECOMUNICATII SI
TEHNOLOGIA INFORMATIEI
CATEDRA DE COMUNICAII

Titlul temei: Contribuii la analiza i implementarea unor metode


de extragere a caracteristicilor din imagini n vederea clasificrii lor
Enunul lucrarii de licen:
Proiectul trebuie s conin metodologia de alegere a caracteristicilor extrase din imagini,
implementarea unei aplicaii Matlab de extragere a trsturilor din imaginile bazei de date pentru
clasificarea acestora. Obiectivele sunt documentarea metodelor de extragere trsturi deja
existente, clasificarea imaginilor pe baza trsturilor extrase i realizarea practic a unei aplicaii
de extragere trsturi i clasificare imagini.

Locul de executie: Laborator 211


Data emiterii temei: 20 februarie 2009
Termen de predare: 24 iunie 2010

EF CATEDR,
Prof.dr.ing. Virgil DOBROTA
CONDUCATOR,
Asist.ing. Anca Aptean

ABSOLVENT,
Alexandru Mihu

FACULTATEA DE ELECTRONIC, TELECOMUNICAII I TEHNOLOGIA INFORMAIEI

Declaraia autorului

Subsemnatul declar prin prezenta c ideile, partea de implementare i experimental,


rezultatele, analizele i concluziile cuprinse n aceast lucrare constituie efortul meu propriu, mai
puin acele elemente ce nu-mi aparin, pe care le indic i le recunosc ca atare.
Declar de asemenea, c dup tiina mea, lucrarea n aceast form este original i nu a mai fost
niciodat prezentat sau depus n alte locuri sau altor instituii dect cele indicate n mod expres
de mine.
n calitate de autor, cedez toate drepturile de utilizare i modificare a lucrrii de licen ctre
Universitatea Tehnic din Cluj-Napoca.

Cluj-Napoca, 24 iunie 2010

ABSOLVENT,
Alexandru Mihu

1. absolvent Mihu Alexandru Ioan


2. asist. ing. Aptean Anca

SINTEZA LUCRARII DE LICEN


Contribuii la analiza i implementarea unor metode de extragere a caracteristicilor
(trsturilor) din imagini n vederea clasificrii lor
Imaginile digitale, costul redus de realizare i stocare al acestora, precum i utilizarea lor
n tot mai multe domenii ale tiinei i ingineriei, au introdus o cretere a cererii de aplicaii de
analiz i clasificare a imaginilor cu o precizie ct mai mare i ntr-un timp ct de poate de scurt.
Lucrarea urmrete extracia de trsturi din imaginile ce compun baza de date pentru a
obine o acuratee de clasificare (KNN) ct mai mare. Extracia trsturilor s-a realizat prin
metode deja existente, folosite n cadrul clasificatorului WND-CHARM. Acest clasificator face
parte din mediul OME (Open Microscopy Environment). Numrul de trsturi extrase a fost
redus prin renunarea la metodele ineficiente de extragere n ceea ce privete performanele de
clasificare la 318 atribute pe imagine fa de 1024 atribute pe imagine folosite pentru formarea
vectorului de trsturi din cadrul clasificatorului WND-CHARM. Astfel, timpul de extragere al
trsturilor tuturor imaginilor din baza de date, precum i timpul de clasificare au fost micorate
semnificativ (de la 48 de ore la 3 ore i 11 minute , respectiv de la 2 secunde la mai puin de o
secund).
Prin modificarea bazei de imagini aplicaia realizat poate fi utilizat n probleme de
detecie sau recunoatere din diverse domenii.

ABSTRACT
Digital images, cheap costs of acquisition and storage, as well as increasing use in many
fields of science and engineering, introduces a demand of image analysis and classification with
high accuracy and lower classification time.
This thesis follows feature extraction from database images to obtain a high KNN
clasification accuracy. Feature extraction was achieved by existing methods used in WNDCHARM classifier, which is part of the OME environment (Open Microscopy Environment).
Number of features per image have been reduced from 1024 attributes per image used in WNDCHARM feature vector to 318 attributes per image, by removing the inefficient extraction
methods in terms of clasification performance. Thus, the time needed for feature extraction for
all database images and classification time was reduced significantly (from 48 hours to 3 hours,
respectively from 2 seconds to less than one second).
By changing the image database the application can be used in detection and recognition
problems in many field of science and engineering.

CURRICULUM VITAE

Name and surname: Alexandru Mihu


Date of birth: 16th of November 1986
Studies:
High School: Colegiul Naional Lucian Blaga, Sebe
Professional activity:
Internship at RDS & RCS S.A., technical advisor
Technical Knowledge:
Advanced PC operating and programming skills:
Microsoft Windows and Office suite; Pascal , FoxPro, C , C++ , C# , embedded C,
Java.
Electronical and mechanical CAD skills:
OrCAD suite , AutoCAD

Known languages:
English: Writing, Reading, Speaking: Very Good
German: Writing: Acceptable, Reading: Acceptable, Speaking: Acceptable
Contact address:
Address: Str.Valea Frumoasei 5C/8, Sebe, Alba
Telephone: 0746 041 672
E-mail address: mihu_alexandru_ioan@yahoo.com
I the undersigned, Alexandru Ioan Mihu, declare that all the data in this Curriculum Vitae
can be used by The Faculty of Electronics, Telecommunications and Information Technology of the
Technical University of Cluj-Napoca, for promotional pourposes and professional orientation, in the
following conditions:

Without prior consult


After prior consult
I do not agree

Cuprins
1. Stadiul actual............................................................................................................................... 1
2. Fundamentare teoretic .............................................................................................................. 2
2.1. Introducere ......................................................................................................................... 2
2.2 Transformata Wavelet continu i discret........................................................................ 3
2.2.1 Transformata Wavelet continu ................................................................................. 3
2.2.2 Transformata Wavelet discret .................................................................................. 3
2.2.3 Familii de wavelet-uri:............................................................................................... 5
2.2.4 Aplicaii ale wavelet-urilor ........................................................................................ 5
2.3 Transformata FFT............................................................................................................... 6
2.3.1 Definire transformat FFT......................................................................................... 6
2.3.2 Aplicaii ale transformatei FFT ................................................................................. 6
2.4 Transformata Radon............................................................................................................ 6
2.4.1 Definirea transformatei Radon .................................................................................. 7
2.4.2 Aplicaii ale transformatei Radon .............................................................................. 7
2.5 Caracteristicile Tamura ...................................................................................................... 8
2.5.1 Granularitatea............................................................................................................ 8
2.5.2 Contrastul................................................................................................................... 8
2.5.3 Direcionalitatea ........................................................................................................ 8
2.6 Polinoamele Zernike............................................................................................................ 9
2.6.1 Definirea polinoamelor Zernike................................................................................. 9
2.6.2 Aplicaii ale polinoamelor Zernike........................................................................... 10
2.7 Histograme multiscalare ................................................................................................... 10
2.8 Filtre orientate n patru direcii pentru obinerea "primelor 4 momente"........................ 10
2.9 Algoritmul KNN................................................................................................................ 10
2.9.1 Avantajele algoritmului KNN................................................................................... 11
2.9.2 Dezavantajele algoritmului KNN ............................................................................. 12
2.10 Fiiere MEX (MEX-files)................................................................................................. 12
3. Implementarea soluiei adoptate ............................................................................................... 13
3.1 Baza de imagini ................................................................................................................. 14
3.2 Metoda de extragere a caracteristicilor............................................................................ 15
3.2.1 Metoda de extragere a caracteristicilor din WND-CHARM.................................... 17

3.2.2 Metoda de extragere a caracteristicilor n lucrarea de fa.................................... 18


3.2.3 Evaluarea trsturilor n Weka............................................................................... 21
3.3.4 Evaluarea trsturilor n Matlab ............................................................................. 22
3.3 Determinarea parametriilor transformatei Wavelet ......................................................... 23
3.4 Modul de mprire a datelor pentru nvare i testare................................................... 24
3.5 mbuntirea performanelor........................................................................................... 25
3.5.1 Reducerea numrului de trsturi extrase din fiecare imagine.35
3.5.2 Transformarea aplicaiei ntr-un executabil ............................................................ 27
3.6 Interfaa grafic a aplicaiei ............................................................................................. 27
3.6.1 Extragerea trsturilor ............................................................................................ 28
3.6.2 Clasificarea imaginilor ............................................................................................ 28
3.6.3 Testarea clasificatorului KNN i cu alte imagini dect cele din baza de date ........ 28
4. Rezultate experimentale ............................................................................................................ 28
4.1 Rezultate experimentale Weka........................................................................................... 29
4.2 Rezultate experimentale din Matlab i din aplicaia executabil
5. Concluzii.................................................................................................................................... 35
6. Bibliografie................................................................................................................................ 37
7. Anexe ......................................................................................................................................... 39
7.1 Anexa 1 .............................................................................................................................. 39
Codul Matlab al funciei de transformare Wavelet...................................................................... 39
7.2 Anexa 2 .............................................................................................................................. 39
Codul Matlab pentru obinerea fiierului cu vectorul de trsturi............................................... 39
7.3 Anexa 3 .............................................................................................................................. 39
Codul Matlab al funciei de extragere trsturi ........................................................................... 39
7.4 Anexa 4 .............................................................................................................................. 41
Codul Matlab pentru obinerea fiierului cu liniile vectorului de caracteristici permutate......... 41
Codul Matlab pentru funcia prelucrarefisierIN........................................................................... 41
Codul Matlab pentru functia preiaDatelePtPrel........................................................................... 42
7.5 Anexa 5 .............................................................................................................................. 43
Codul Matlab pentru clasificarea KNN ........................................................................................ 43
7.6 Anexa 6 .............................................................................................................................. 44
Codul Matlab al aplicaiei GUI .................................................................................................... 44
Codul Matlab pentru metodele de extragere folosite n aplicaia GUI ........................................ 63
Codul Matlab pentru extracia trsturilor din fiecare imagine n funcie de metodele alese n
aplicaia GUI................................................................................................................................. 64

Lista de figuri
Figura 1.1 Schema procesului de recunoatere i clasificare automat a imaginilor ...................... 3
Figura 2.1 Arborele cu primele trei nivele de descompunere DWT(arborele Mallat) .................... 4
Figura 2.2 Arborele Mallat cu primele trei nivele de reconstrucie ale semnalului original........... 4
Figura 2.3 Familii de wavelet (a) Haar (b) Daubechies4 (c) Coiflet1 (d) Symlet2 (e)Meyer(f)
Morlet(g) Mexican hat..................................................................................................................... 5
Figura 2.4 Cele dou forme ale transformatei Radon- ecuaia (7) i (9)........................................ 7
Figura 2.5 Valorile Zernike n unitatea de disc ............................................................................... 9
Figura 3.1 Imagini din baza de date .............................................................................................. 14
Figura 3.2 Schema bloc a metodelor de extragere a trsturilor ................................................... 15
Figura 3.3 Schema de formare a vectorului de trsturi din cadrul WND-CHARM.................... 17
Tabel 3.1 Metode de extragere a trsturilor analizate ................................................................. 20
Figura 3.5 Schema de formare a vectorului de trsturi................................................................ 20
Figura 3.6 Structura fiierului ARFF la modul general................................................................. 21
Figura 3.7 Structura fisierului ARFF utilizat n acest lucrare ..................................................... 21
Figura 3.8 Matricele de confuzie pentru nvare, respectiv testare.............................................. 22
Figura 3.9 Transformata Wavelet a unei imagini.......................................................................... 24
Figura 3.10 Schema bloc a clasificrii KNN................................................................................. 25
Figura 3.11 Schma bloc urmat de toolbox-ul deploytool ............................................................ 27
Figura 3.12 Interfaa grafic a lucrrii........................................................................................... 27
Figura 4.1 Matrice de confuzie Weka (numrul de vecini=1) ...................................................... 29
Figura 4.2 Matricele de confuzie pentru k=3 (a),.......................................................................... 29
Figura 4.3 Matricele de confuzie pentru setul de testare (k=1,3 i 5) obinute n Weka............... 30
Figura 4.4 Matricele de confuzie pentru setul de testare obinute n Matlab ................................ 30
Figura 4.5 Graficul timpului de clasificare n funcie de numrul de trsturi ............................. 31
Figura 4.6 Graficul timpului de clasificare n funcie de numrul de trsturi ............................. 31
Figura 4.7 Graficul timpului de extragere coeficieni n funcie de numrul de trsturi ............. 32
Figura 4.8 Graficul acurateii n funcie de numrul de trsturi .................................................. 35

Lista de tablele
Tabel 3.1 Metode de extragere a trsturilor analizate ................................................................. 20
Tabel 4.1 Rezultate obinute n Matlab ......................................................................................... 33
Tabel 4.2 Rezultate obinute prin transformarea aplicaiei ntr-un executabil .............................. 34

1. Stadiul actual
Stadiul actual n ceea ce privete recunoaterea formelor i clasificarea automat a
imaginilor este unul avansat, reuindu-se dezvoltarea unor aplicaii care au o acuratee a
clasificrii foarte ridicat i un timp de clasificare sau de detecie foarte bun (detecie sau
clasificare n timp real), i care ncet-ncet promit a se apropia ca performan de modul natural
cu care fiina uman trateaz aceast problem.
Imaginile digitale, stocarea ieftin i utilizarea acestora n tot mai multe domenii ale
tiinei i ingineriei, au introdus o cretere a cererii de aplicaii de analiz i clasificare a
imaginilor cu o precizie ct mai mare. Aceste aplicaii includ teledetecia, descris n [1],
recunoaterea facial, despre care putei gsi informaii n [2], [3] sau [4] i clasificarea
imaginilor medicale i biologice [5], [6], [7] sau [8].
Sistemele de vedere artificial sunt proiectate dup modelul sistemelor biologice, n
special cel uman. n dezvoltarea unor astfel de sisteme ne lovim, de foarte multe probleme. Cea
mai important dintre ele este imposibilitatea de a reproduce n sistemele artificiale, modul
nostru de gndire. Pentru noi oamenii, recunoaterea unui obiect se face cu uurin, chiar dac
acel obiect nu este vzut n ntregime, dar n general nu putem s explicm tiinific cum am
reuit s realizm recunoaterea. Prin urmare, nu putem dezvolta un algoritm sau o tehnic de
inteligen artificial care descrie iterativ i exact acest proces.
Dei n ultimii ani au atras o atenie deosebit, analiza i clasificarea imaginilor sunt
deocamdat considerate probleme competitive n sistemele de prelucrare i clasificare pe baza
coninutului imaginilor (CBIR - Content Based Image Retrieval), datorit complexitii
subiectului n ceea ce privete imaginile reale i dificultatea de extragere cantitativ a trsturilor
de similitudine sau difereniere dintre imagini. Aceste trsturi pot include caracteristici de
culoare, textur sau form, descriptori ce sunt obinui global prin extragerea informaiilor pe
baza mediei histogramelor de culoare (pentru caracteristicile de culoare), pe baza granularitii,
contrastului i directivitii imaginilor (pentru caracteristicile de textur) i pe baza trsturilor de
curbur, momente invariante, circularitatea i excentricitatea imaginilor (pentru caracteristicile
de form). Cu toate acestea, extragerea trsturilor din imagini se face diferit n funcie de
detaliile particulare ale aplicaiei i performanele dorite.
n lucarea de fa sunt propuse mai multe metode deja existente de extragere a
caracteristicilor pentru formarea vectorului de trsturi i clasificarea imaginilor pe baza
vectorului obinut.
Scopul principal al acestei lucrri este testarea mai multor metode de extragere a
trsturilor, nu neaparat obinerea unor performane superioare. Pentru a vedea eficiena
metodelor de extragere s-a realizat clasificarea imaginilor pe baza vectorului de caracteristici
prin intermediul clasificatorului IBk din Weka (echivalentul KNN- k nearest neighbor) i KNN
implementat n Matlab. Pentru realizarea acestor obiective m-am inspirat din mai multe referine,
dar cea mai semnificativ este metodologia de extragere a trsturilor pentru formarea vectorului
de caracteristici din cadrul clasificatorului WND-CHARM (Weighted Neighbor Distances using
a Compound Hierarchy of Algorithms Representing Morphology - distana ponderat dintre
vecini utiliznd o ierarhie compus de algoritmi morfologici). Pentru mai multe detalii a se
consulta [9].
Trsturile vectorului de caracteristici includ descompunerea polinomial (reprezentat
de polinoamele Zernike), statisticile pixelilor (media, deviaia standard, oblicitatea, planitatea,
histograme multiscalare) i caracteristicile de textur (contrast, granularitate i direcionalitate).
Aceste caracteristici au fost extrase din imaginile pe nivele de gri, precum i din imaginile
rezultate n urma transformatelor Wavelet (a imaginii pe nivele de gri i a transformatei FFTfast Fourier transform a imaginii pe nivele de gri). O alt transformat utilizat este transformata
Radon a imaginii pe nivele de gri, care este folosit pentru extragerea informaiei spaiale.
Metodele aplicate asupra imaginilor pentru formarea vectorului de trsturi fac parte din
metodologia descris n [9]. Contribuia adus la formarea vectorului de trsturi const n

selectarea din varietatea de metode de extragere doar a celor care ofer o performan de
clasificare mai ridicat. Pentru o aplicare eficient a transformatei Wavelet s-au stabilit valorile
parametrilor (familia de wavelet i nivelul de descompunere wavelet). Celelate metode utilizate,
precum i implementrile lor n Matlab pot fi descrcate gratuit i utilizate n scopuri tiinifice i
de cercetare de pe site-ul: http://www.openmicroscopy.org.
Vectorul de trsturi este utilizat apoi pentru clasificarea imaginilor de test ntr-un set de
clase de imagini predefint (clasa maini, pietoni, animale i garbage) cu ajutorul utilitarului
Weka. Deoarece apelarea din Matlab a utilitarului Weka este foarte complicat i datorit
necesitii utilizrii unui clasificator n interfaa grafic realizat, s-a ales implementarea n
Matlab a unui algoritm de clasificare. Astfel, luarea deciziei asupra clasei imaginii test s-a
realizat cu algoritmul KNN. Din punct de vedere al evaluatorului s-a ales folosirea KNN
deoarece este un clasificator rapid, eficient i uor de implementat. Pentru a nu permite
clasificatorului s nvee inclusiv ordinea de preluare a imaginilor (deoarece clasificatorul prelua
pe rnd cele patru clase) s-a realizat permutarea imaginilor din vectorul de caracteristici.
Din punct de vedere aplicativ, lucrarea conine o interfa grafic dezvoltat cu ajutorul
toolbox-ului GUIDE (Graphical User Interface Design Environment) din Matlab. Aceast
aplicaie permite utilizatorului s selecteze diferite variante de formare a vectorului de trasturi,
precum i posibilitatea testrii clasificatorului KNN cu alte imagini dect cele din baza de date.
Vectorul de trsturi poate avea, n funcie de metodele alese, o dimensiune minim de 72
caracteristici i maxim de 318 caracteristici. Toate atributele sunt extrase pe baza imaginilor pe
nivele de gri, astfel informaiile de culoare nefiind utilizate.

2. Fundamentare teoretic
2.1. Introducere
n realizarea unei aplicaii de recunoatere a formelor i clasificare automat a imaginilor,
dup cum se poate observa n figura 1.1, n general se parcurg urmatoarele etape:
a) preprocesarea imaginii - etap n care se realizeaz mbuntirea calitii imaginilor prin
aplicarea unor algoritmi DIP (digital image processing).[10]
Deoarece imaginile din baza de date, format pentru acest lucrare, nu necesit alte
mbunatiri ale calitii, n acest etap s-a realizat doar conversia imaginilor color n imagini pe
nivele de gri. n multe situaii pentru clasificarea imaginilor sunt extrase pe lng trsturile de
textur i de form, i cele de culoare. S-a renunat la aceste caracteristici deoarece nu se poate
realiza o difereniere a claselor pe baza culorii.
b) extragerea atributelor sau descriptorilor de imagine - reprezint etapa cea mai important
deoarece influeneaz n mod direct performanele de clasificare.[10]
Tipul trsturilor folosite n clasificare i descrise n aceast lucrare se mpart n trei
categorii: descompunere polinomial, statisticile pixelilor i textura. n descompunerea
polinomial este generat un polinom ce aproximeaz imaginea n funcie de gradul de fidelitate,
iar coeficienii acestui polinom sunt utilizai ca descriptori ai coninutului imaginii. Trsturile
de textur se refer la variaia n intensitate ntre pixelii imaginii pentru diferite direcii i
rezoluii. Statisticile pixelilor se bazeaz pe distribuia pixelilor din imagine i includ histograme
i momente.
n aceast etap, pentru extragerea trsturilor, asupra imaginilor s-a aplicat transformata
Wavelet (transformata Wavelet a imaginii pe nivele de gri i a transformatei FFT a imaginii pe
nivele de gri), iar din rezultatele obinute au fost extrase caracteristicile de statistic a
pixelilor("primele 4 momente", histogramele multiscalare) i de textur (caracteristicile Tamura).
Din imaginile originale (imaginile pe nivele de gri), fr a aplica asupra acestora nici o
transformat, sunt extrase caracteristicile de statistic a pixelilor i de textur menionate mai
sus, precum i cele de descompunere polinomial (polinoamele Zernike). Din vectorul de

trsturi mai fac parte i rezultatele obinute n urma transformatei Radon a imaginii pe nivele de
gri.
c)evaluarea atributelor sau descriptorilor - este o etap n care sunt evaluate datele din vectorul
de caracteristici i care are ca rezultat n mod obinuit, o valoare numeric unidimensional sau
multidimensional (un vector), care relev distana vectorului de trsturi fa de graniele
regiunilor sau fa de "bornele de clasificare".[10]
Evaluarea atributelor s-a realizat cu ajutorul clasificatorului KNN, prin testarea
evaluatorului cu datele de nvare.
d) clasificarea imaginii - este etapa care mbin rezultatele msurtorilor multiple anterioare, i
totodat etapa final.
Prin clasificare se stabilete apartenena formei, obiectului sau imaginii - descris prin
vectorul de trsturi, la un setul de clase de imagini predefinite.[10]
Clasificarea imaginilor de test, precum i stabilirea atributelor imaginilor care ne ofer cea mai
bun performan s-a realizat cu ajutorul algoritmului KNN.

Figura 1.1 Schema procesului de recunoatere i clasificare automat a imaginilor[10]


2.2 Transformata Wavelet continu i discret
2.2.1 Transformata Wavelet continu
Transformata wavelet continu (CWT- continuous wavelet transform) este folosit la
mprirea funciilor de timp continue n unde mai mici.
Ecuaia transformatei wavelet continu este urmtoarea:
XWT(,s)=

)(
||

(1)

unde x(t) este semnalul ce trebuie analizat, (t) este wavelet-ul mam sau funcia de baz [11].
Toate funciile folosite n transformare sunt derivate din funcia de baz prin translatare (shiftare)
i scalare (dilatare sau compresie). Parametrul de translaie se refer la locaia funciei wavelet
n timpul parcurgerii semnalului, acesta corespunznd informaiei de timp a transformatei.
Parametrul de scalare s este definit ca |1/frecven| i corespunde informaiei de frecven.
Scalarea fie dilateaz (extinde) sau comprim semnalul. n prelucrrile de imagini, de obicei, se
dorete compresia lor, pentru ca timpul necesar prelucrrii s fie ct mai redus.
Pe o scar larg de frecvene joase semnalul este dilatat, fiind furnizate detaliile ascunse din
semnal, n timp ce pe o scar redus (frecvene nalte) semnalul este comprimat, furnizndu-se
informaia global referitoare la semnal.
Transformata Wavelet realizeaz convoluia semnalului i prelucrarea acestuia cu funcia de
baz.
2.2.2 Transformata Wavelet discret
Transformata Wavelet discret (DWT- discrete wavelet transform) este o versiune
simplificat a transformrii wavelet continu, bazat pe codarea n sub-band. Avantajul acestei
transformate const n simplitatea implementrii, reducerea timpului de execuie i nivelul mai
sczut de resurse necesare.
La transformata CWT, semnalele sunt analizate folosind un set de funcii de baza care

realizeaz o simpl scalare i translaie. n cazul transformatei DWT, o reprezentare n domeniul


timp a unui semnal digital este obinut prin utilizarea tehnicilor de filtrare digital, semnalul
(imaginea) ce trebuie analizat fiind trecut prin filtre cu diferite frecvene de tiere la nivele
diferite.
Transformata DWT este realizat prin filtrri trece jos i filtrri trece sus succesive, ale unui
semnal discret n domeniul timp (figura 2.1).

Figura 2.1 Arborele cu primele trei nivele de descompunere DWT(arborele Mallat)[11]


n figura de mai sus, semnalul este notat cu x[n], unde n este un numr ntreg, filtrarea trece jos
este realizat de blocul G0, la ieirea lui obinnd aproximarea grosier a coeficienilor(notat
a[n]) , iar filtrarea trece sus este realizat de H0, la iesire obinnd informaia detaliat (notat
d[n]).
Filtrele care mpart banda n jumtate produc semnale ce ocup doar jumtate din banda
de frecven. Filtrarea i descompunerea vor continua pn cnd se ajunge la nivelul dorit,
numrul maxim de nivele de descompunere depinznd de lungimea semnalului (dimensiunea
imaginii).
Reconstrucia semnalului original pe baza coeficieniilor transformatei DWT este
procesul invers descompunerii (figura 2.2).

Figura 2.2 Arborele Mallat cu primele trei nivele de reconstrucie ale semnalului original[11]
n Figura 2.2, d[n] reprezint coeficienii de detaliu ai semnalului, a[n] aproximrile
grosiere, iar blocurile H1 i G1 reprezint filtrele trece sus, respectiv filtrele trece jos de sintetizare
a semnalului original.
Procesul de reconstrucie al semnalului original continu pn cnd este atins numrul de
nivele de descompunere ale semnalului.

Condiiile ce trebuie ndeplinite pentru a avea o reconstrucie perfect sunt:


G0(-z)*G1(z)+H0(-z)*H1(z)=0

(2)

G0(z)*G1(z)+H0(z)*H1(z)=2
(3)
unde G0(z) i G1(z) sunt filtrele trece jos de analiz, respectiv de sintez, iar H1(z)i H0(z) sunt
filtre trece sus de analiz, respectiv de sintez[11].
Prima condiie impune ca reconstrucia s se fac fr alias, iar cea de-a doua condiie
impune ca distorsiunile de amplitudine sa aib valoarea egal cu 1.
2.2.3 Familii de wavelet-uri:
Exist un anumit numr de funcii de baz care pot fi folosite ca funcii mam pentru
transformata wavelet, dar pentru utilizarea eficient a acestora, trebuie luate n considerare
detaliile particulare ale aplicaiei care folosete wavelet-uri.
Principalele familii de wavelet-uri:

Figura 2.3 Familii de wavelet (a) Haar (b) Daubechies4 (c) Coiflet1 (d) Symlet2 (e) Meyer
(f)Morlet (g) Mexican hat
[11]
Figura 2.3 ilustreaz cele mai utilizate funcii wavelet. Wavelet-ul Haar este unul din cele
mai vechi si simple wavelet-uri, de aceea orice discuie despre wavelet-uri ncepe cu acesta.
Pentru mai multe detalii legate de principalele tipuri de wavelet-uri a se consulta [12].
2.2.4 Aplicaii ale wavelet-urilor
Exist o gam larg de aplicaii pentru transformarea wavelet, ele fiind utilizate n diferite
domenii, de la procesarea semnalelor pn la domeniul biometriei.
Wavelet-urile au un rol important n compresia datelor, n vederea mbunatirii
performanelor de prelucrare a imaginilor (de compresie a imaginilor). FBI utilizeaz waveleturile ca i compresie standard a amprentelor, pentru stocarea lor n baza de date. Dintre
principalele tipuri de transformate aplicate imaginilor n vederea compresiei lor (ex. transformata
cosinus discret, transformata Fourier discret 2D etc.), transformata wavelet asigur asigur o
foarte bun rat de compresie.
Transformata Wavelet este aplicat n aceast lucrare pe imaginile pe nivele de gri,
precum i pe imaginea obinut n urma aplicrii transformatei FFT asupra imaginii pe nivele de
gri. Parametrii transformatei, nivelul de descompunere i familia wavelet, au fost stabilii
parcurgnd urmtoarele etape:

a) extragerea trsturilor imaginilor din baza de date cu metoda I (vezi figura 3.5 pentru mai
multe detalii) pentru diferite nivele de descompunere wavelet (36) i pentru diferite familii de
wavelet-uri.
b) clasificarea imaginilor pe baza vectorului de trsturi obinut prin metoda de mai sus pentru a
observa care nivel, respectiv familie wavelet ofer o performan de clasificare ct mai bun.
Wavelet-urile sunt folosite att n metoda I de extragere a trsturilor (reprezentat de metoda
descris mai sus), precum i n metoda II de extragere a trsturilor (vezi figura 3.5)
2.3 Transformata FFT
FFT este abrevierea din limba englez pentru fast Fourier transform (transformata
Fourier rapid), fiind un algoritm eficient de calcul al transformatei DFT - discrete Fourier
transform (transformata Fourier discret), precum i a inversei sale IDFT (inverse discret Fourier
Transform).
2.3.1 Definire transformat FFT
FFT produce exact aceleai rezultate ca i DFT, singura diferen fiind reprezentat de
rapiditatea transformatei FFT.
Fie , , , , numere complexe. Transformata DFT este definit de urmtoarea
formul:

( + 1) =
(+ 1) , k=0,1, ,N-1 (4),
iar inversa ei IDFT este:

( + 1) =
( + 1) , n=0,1, ,N-1 (5),

unde j este unitatea imaginar, = i N= lungime(x) [13].


Evalund ecuaia (4), observm c aceasta necesit operaii: sunt N ieiri i fiecare ieire
necesit o sum de N termeni. Transformata FFT reprezint orice metod de obtinere a aceluiai
rezultat ca i DFT n N log N operaii. Pentru mai multe informaii legate de transformata FFT i
tipurile de algoritmi FFT a se consulta [13],[14] sau [15].
n lucrarea de fa transformata FFT este utilizat n cadrul metodei II de extragere a
trsturilor, fiind aplicat asupra imaginii pe nivele de gri, iar apoi asupra acesteia se va aplica
transformata Wavelet (vezi figura 3.5 pentru mai multe detalii).
2.3.2 Aplicaii ale transformatei FFT
Aplicaiile transformatei FFT sunt urmatoarele:
- aproximri pe baza polinoamelor trigonometrice, compresia datelor (ex. MP3)
- analiza spectral a semnalelor
- filtrare
- rspunsul n frecven a unui sistem
- ecuaiile parial difereniale
- convoluia n domeniul frecven: - intercorelare
- multuplicarea de numere ntregi mari
- multiplicarea simbolic a polinoamelor
2.4 Transformata Radon
Transformata Radon i transformata Hough sunt strns legate una de cealalt, Radon fiind
o form particular a transformatei Hough.

2.4.1 Definirea transformatei Radon


O reprezentare util a unei drepte este ecuaia sa n coordonate polare:
+ ( = 6)
unde unde reprezint distana dintre dreapt i origine, iar este unghiul dintre axa x pozitiv
i dreapta [16].
Transformata Radon se definete ca integral de-a lungul unei drepte inclinate cu unghiul fa
de axa x pozitiv i situat la distana fa de origine [17]. Se noteaz n general cu g(, ).

g(, )= (, ()+ )(7)


unde reprezint funcia Dirac i este ilustrat n [16] astfel:
+, = 0
( = )
(8)
0 , 0

Figura 2.4 Cele dou forme ale transformatei Radon- ecuaia (7) i (9)

[17][18]

Ecuaia ilustrat n [17]:

g(, )= ( , + () 9),
este echivalent cu ecuaia (2), fiind obinut prin rotirea axelor de coordonate cu unghiul ,
unde:
= +
=
= +
= +
(10)
Transformata Radon reprezint o imagine ca un set de proiecii de-a lungul diferitor
direcii, realiznd legtura dintre spaiul de coordonate (x,y) i spaiul proieciilor (, ).
Transformata Radon calculeaz proiecia intensitii pixelului pe o linie radial din
centrul imaginii la un unghi specificat. Aceasta este utilizat, de obicei, pentru extracia
informaiei spaiale unde pixelii sunt corelai la un unghi specific.
n metoda de extragere caracteristici propus, trsturile Radon sunt calculate pentru
unghiurile 0, 45, 90 i 135. Apoi, fiecare set de valori rezultat este transformat ntr-o
histogram cu trei benzi, rezultnd astfel un vector cu 4x3=12 valori. Transformata Radon este
calculat pentru imaginea pe nivele de gri i mpreun cu "histogramele multiscalare", "primele 4
monemte " i caracteristicile Tamura formeaz metoda III de formare a vectorului de trsturi
(vezi figura 3.5 pentru mai multe detalii).
2.4.2 Aplicaii ale transformatei Radon
Transformata are aplicaii n mai multe domenii cum ar fi:
- domeniul medical, n cazul tomografiei compiuterizate
- seismologie, n cazul reflexiei seismice
- ultramicroscopia ansamblurilor macromoleculare, cum sunt proteinele i viruii
- n rezolvarea ecuaiilor hiperbolice parial difereniale

- detecia de form
2.5 Caracteristicile Tamura
Dintre proprietaile Tamura folosite n acest proiect se numar:
- granularitatea
- contrastul
- direcionalitatea.
Aceste trsturi au fost selectate de Tamura, Mori i Yamawaki pe baza experimentelor
psihologice.
2.5.1 Granularitatea se refer la distana dintre variaiile spaiale notabile a nivelelor de
gri. Procedura compiutaional propus, consider diferenele dintre valoarea medie a
semnalelor corespunztoare ferestrelor de diferite dimensiuni care nu se suprapun, urmrind
paii de mai jos :
1. Pentru fiecare pixel (x,y), calculeaz ase valori medii pentru ferestrele de dimensiunea 2k 2k,
k=0,1,...,5 n jurul fiecarui pixel.
2. Pentru fiecare pixel, calculeaz diferena absolut Ek(x,y) dintre perechile valorilor medie ce
nu se suprapun n direciile: orizontal i vertical.
3. Pentru fiecare pixel, caut valoarea lui k ce maximizeaz diferena Ek(x,y) n orice direcie i
seteaz dimensiunea cea mai buna Sbest(x,y)=2k.
4. Calculeaz trstura de granularitate Fcrs prin medierea Sbest(x,y) asupra ntregii imagini.
2.5.2 Contrastul relev modul n care nivelele de gri q, q=0,1,..., qmax, variaz ntr-o
imagine g i a cror distribuie este direcionat spre alb i negru. Pentru definirea contrastului se
folosesc momentele centrale de ordinul al doilea i cele normalizate de ordinul al patrulea,
reprezentate de variana standard - , respectiv indicele de aplatizare - 4:
= (11),

unde = (12); = ( ) Pr (13); =


( ) Pr (/) (14) i

m este media nivelelor de gri.[19]

2.5.3 Direcionalitatea
Gradul de direcionalitate este msurat folosind distribuia spectral a muchiilor locale
orientate fa de unghiurele direcionale ale acestora. Soloditatea muchiei e(x,y) i unghiul
direcional a(x,y) sunt calculate folosind detectorul de muchii Sobel, aproximnd "pixel-wise" x
i derivata y a imaginii:
(, = )0.5(|(, |)+ (, )) (15)
(, = )( (, )/(, ( ))16)

n ecuaiile de mai sus x(x,y) i y(x,y) sunt diferenele pe vertical i orizontal a nivelelor de
gri dintre pixelii vecini [19]. Diferenele sunt msurate utiliznd urmtorii operatori fereastra de
dimensiune 3x3 [19]:
1 0 1
1 1 1
1 0 1
0 0 0
1 0 1
1 1 1
O histogram Hdir(a) a valorilor direciei cuantizate a este construit prin numrarea
numrului de pixeli muchie care un anumit unghiul direcional i soliditatea muchiei mai mare
dect un prag predefinit. Histograma este relativ uniform pentru imaginile fr o orientare

accentuat i evideniaz vrfurile pentru imaginile cu un grad al direcionalitii ridicat. Gradul


direcionalitii este legat de ascuimea vrfurilor:

() (17),
= 1

n ecuaia (17) este numrul de vrfuri, ap este poziia vrfului p, wp este gama de
unghiuri atribuite vrfului p, r indic un factor de normalizare legat de nivelele de cuantizare ale
unghiului a, i a este unghiul direcional cuantizat (n modulo 180o).[19]
Aceste proprieti texturale Tamura sunt calculate pe imaginea pe nivele de gri astfel:
- 3 valori: contrastul, direcionalitatea i granularitatea
- o histogram a granularitii cu 3 benzi
Astfel, rezult astfel un vector de caracteristici cu 6 valori.
Trsturile Tamura sunt utilizate n acest lucrare n cadrul metodelor I, II i III de
extragere a trsturilor (vezi Figura 3.5).
2.6 Polinoamele Zernike
Polinomele Zernike au fost dezvoltate la nceputul secolului XX de ctre fizicianul
german Frits Zernike (faimos pentru invenia microscopului faz-contrast, pentru care a cstigat
premiul Nobel pentru Fizic n 1953).

Figura 2.5 Valorile Zernike n unitatea de disc [20]


2.6.1 Definirea polinoamelor Zernike
Aceste caracterisitici Zernike sunt un set de polinoame definite pe unitatea de disc
(figura 2.5), ce pot fi reprezentate att n sistemul cartezian (x,y), ct i n coordonate polare
(r,). Cea mai utilizat form, este descris n [21] ca fiind cea polar:
, = + 1 ()2 cos( q) , 0 (18)
, = + 1 ()2 sin( q) , 0 (19)
= + 1(), = 0 (20)
unde
()()!
( )/
( = )
(21)

Valorile lui m i n sunt ntotdeauna ntregi i satisfac condiile mn i n-m=impar. Indexul j


reprezint modul de ordonare al numerelor, fiind o funcie j(m,n).
Condiia de ortogonalitate pentru polinoamele Zernike ilustrat n [21] este:

unde:

() = (22),
9

, 1
( = )
(23)
0, > 1

2.6.2 Aplicaii ale polinoamelor Zernike

Baza acestor funcii este definit pe o suprafa circular, caracteristic planelor pupilelor
n procesarea clasic de imagini, pentru lungimi de und optice i inflaroii, printr-un sistem de
lentile i oglinzi cu un diametru finit.
Descompunera polinomial Zernike este utilizat n urmtoarele domenii:
- prelucrare optic, pentru a caracteriza erorile observate n analizele interferometrice, cu scopul
de a obine performana dorit.
-optometrie i oftalmologie, la descrierea devierii corneei sau lentilelor pentru o form ideal
sferic, care au ca rezultat erori de refracie.
- optica adaptiv, la nlturarea distorsiunilor atmosferice. Aplicaiile n acest domeniu sunt
astronomia IR (inflarou) sau vizual i pentru redarea imaginilor din satelit. De exemplu, unul
dintre factorii Zernike (pentru m=0 i n=2) este denumit "de-focus". Prin cuplarea iesirii acestui
factor la un sistem de control, poate fi implementat o focalizare automat. [21]
Coeficienii Zernike sunt valori complexe, n descrierea imaginilor folosindu-se valoarea
absolut a acestora. Polinoamele Zernike sunt aplicate asupra imaginii pe nivele de gri,
constituind metoda IV de extragere a trsturilor (pentru mai multe detalii vezi figura 3.5).
2.7 Histograme multiscalare
Pentru acest set de trsturi sunt calculate histograme cu un numr variabil de benzi
(3,5,7 i 9), dup modelul propus n [9]. Fiecare domeniu de frecvene corespunde unei
histograme diferite, i astfel numrul variabil de benzi permite msurarea coninutului ntr-un
domeniu de frecvene foarte larg. Maximul histogramelor este folosit pentru normalizarea
vectorului de caracteristici rezultat, care are un numr de 1x24 elemente. Histogramele
multiscalare sunt aplicate asupra transformatei Wavelet, transformatei FFT i asupra imaginii
originale (imagine pe nivele de gri) contribuind astfel cu un numr total de 3x24 elemente la
formarea vectorului de trsturi al imaginilor.
Histogramele multiscalare sunt utilizate n cadrul metodelor I, II i III de formare a
vectorului de trsturi.(pentru mai multe detalii vezi figura 3.5)
2.8 Filtre orientate n patru direcii pentru obinerea "primelor 4 momente"
Pentru acest set de trsturi, imaginea este subdivizat ntr-un set de "dungi" n patru
orientri diferite (0, 90, +45 i 45). "Primele 4 momente" (media, deviaia standard,
oblicitatea i planitatea ("kurtosis") ) sunt calculate pentru fiecare "dung" i fiecare set de
"dungi" este transformat ntr-o histogram cu 3 benzi. Avnd astfel patru momente n patru
direcii cu histograme cu trei benzi, rezult un vector de trsturi care conine 4x4x3=48
elemente.[9]
"Primele 4 momente" sunt utilizate, lafel ca i histogramele multiscalare n cadrul
metodelor I, II i III de extragere a trsturilor din imaginea original.
2.9 Algoritmul KNN
KNN este abrevierea din limba englez pentru K-Nearest Neighbor (cei mai apropiai k
vecini), fiind un algoritm de nvaare supervizat utilizat n special n problemele de clasificare.
Scopul acestui algoritm este acela de a clasifica un nou obiect pe baza atributelor sale n fincie
de setul de date de antrenare cunoscut.

10

Prin aceast tehnic, folosit n special pentru clasificarea datelor n mai multe posibile
clase, un obiect nou este clasificat pe baza majoritii voturilor vecinilor si, fiindu-i atribuit
clasa cea mai frecvent ntlnit printre cei k cei mai apropiai vecini.
Acei k cei mai apropiai vecini se aleg pe baza distanei minime dintre obiect i toate
celelalte obiecte din setul de date de antrenare (setul de date cunoscut).
Fiecare obiect este reprezentat n setul de date printr-un vector de trsturi, care n cazul
imaginilor poate s conin caracteristici de form, de textur sau de culoare.
Exist mai multe tipuri de distane folosite pentru calculul distanei minime dintre noul
vector i vectorii din setul de date:
- distana euclidian
- distana euclidian standardizat
- distana city block (Manhattan)
- distana cosinus
- distana coeficientului de corelaie (distana Pearson r)
- distana hamming
- distana Maholonobis
- distana Minkowski
- etc
Cea mai frecvent distan utilizat n cadrul acestui algoritm este distana euclidian.
Fiind dat o matrice X de dimensiune [mxn], care conine "m" vectori linie (vectorii de trasturi
de dimensiune [1xn]) , ,, , unde =( , ,, ), putem defini metricile (distanele)
dintre dou obiecte (doi vectori) oarecare i (r,s=1m) dup cum sunt ilustrate i n [22],
astfel:
- distana euclidian:
=( )( ) = ( )
(24)
- distana euclidian standardizat
=( ) ( ) , unde D este matricea diagonal, ce are ca elemente
dispersia vectorului =(, , ), notat , rezultnd:
( )

(25)

- distana city block (Manhattan)


=| |

(26)

- distana cosinus

=1

(27)

()()

- distana coeficientului de corelaie (distana Pearson r)


=1

)(

)
(

, unde
= (28)

)(

)(

)(

- etc, pentru mai multe tipuri de metrici a se consulta [22]


Pentru a ntelege i mai bine funcionarea algoritmul KNN pe un exemplu numeric a se
consulta consulta [24].
2.9.1 Avantajele algoritmului KNN
Unul dintre avantajele sale este uurina implementrii, fiind unul dintre algoritmii de
clasificare cei mai uor de nteles.

11

O alt calitate a acestei tehnici este eficacitatea sa, n cazul n care, setul de date de
antrenare este afectat de zgomot (n special n cazul n care se foloseste ca metric inversul
ptratului distanei ponderate). Obinerea distanei ponderate se face prin ierarhizarea fiecrei
trsturi n funcie de scopul propus. Astfel distana euclidian ponderat va avea urmatoarea
expresie:
= ( )
(29),

unde =1, iar este ponderea atributului (caracteristicii) i [23] .


A nu se confunda ponderarea atributelor cu ponderarea distanelor.
O metod foarte ntlnit de ierarhizare a distanelor, este aceea de a-i da fiecarui vecin o
pondere de 1/d , unde d este distana pna la vecin. Astfel vecini mai apropiai vor avea o
contribuie mai mare la clasificarea unui obiect. Studiile au aratat c ponderarea distanelor nu
mbuntete performanele algoritmului KNN.
2.9.2 Dezavantajele algoritmului KNN
La aplicarea algoritmului KNN n practic ne lovim de urmtoarele probleme:
a)"Ce metric utilizm pentru performane ct mai bune?"
b)"Care este valoarea optim pentru k?"
c)"Trebuie s folosim toate atributele sau numai anumite atribute ale obiectelor?"
Toate aceste probleme au ca efect cresterea timpului de clasificare.
Timpul de clasificare depinde n special de numrul de obiecte din setul de date. Pentru
seturile de date cu un numr foarte mare de obiecte este necesar o reducere a numrului de
atribute pentru fiecare obiect n etapa de preclasificare, prin alegerea unor puncte cheie care s
diferenieze ntre ele ct mai bine posibil instanele setului de date.
k optim se obine prin testarea algoritmului de mai multe ori, modificnd numrul de
vecini.
Costul de calcul este destul de mare, deoarece trebuie s calculm distana dintre o noua
instana i fiecare instan din setul de antrenare. Acest cost poate fi redus prin utilizarea metodei
"K-D tree".[25]
Pentru a vedea eficacitatea metodelor de extragere a caracteristicilor, n aceast lucrare sa folosit clasificatorul KNN. Am ales acest algoritm datorit simplitii lui, a performanelor
bune de clasificare, att n ceea ce privete acurateea ct i a timpului de clasificare.
2.10 Fiiere MEX (MEX-files)
MEX este abrevierea din limba englez pentru MATLAB Executable (executabile
Matlab). Fiierele MEX sunt subrutine dinamice realizate n mediile de programare C, C++ sau
Fortran, coduri surs care compilate pot fi rulate din Matlab n acelai mod cum sunt rulate i
fiierele M (M- files) sau orice alt funcie care este deja implementat n Matlab. Funciile
externe de interfaare realizeaz transferul de date ntre MEX- files i Matlab, oferind totodat i
posibilitatea de a chema funcii Matlab din programele C, C++ sau Fortran.
Principalele motive de a creea n loc de un M-file un MEX- file sunt urmtoarele:
- abilitatea de a apela o gam larg de rutine C, C++ sau Fortran deja existente direct din Matlab
fr a fi nevoii s le rescriem ca un M -files
- viteza de execuie; putem rescrie programele care folosesc de exemplu bucle FOR ca i MEXfiles pentru eficien. Pentru mai multe detalii legate de realizarea MEX- files a se consulta [26].
n aceast lucrare MEX- files sunt folosite pentru calculul polinoamelor Zernike ale unei
imagini, precum i pentru implementarea clasificatorului KNN. Aceste MEX- files sunt realizate
de dezvoltatorii clasificatorului WND-CHARM, respectiv de Roger Jang i pot fi descrcate
gratuit de pe site-urile:
http://www.openmicroscopy.org, respectiv http://mirlab.org/jang/matlab/toolbox/dcpr/.

12

3. Implementarea soluiei adoptate


Scopul lucrrii de fa este acela de a testa diferite caracteristici care s codeze cel mai
bine imaginile din baza de date i nu neaparat clasificarea acestora. Totui, pentru a verifica
eficiena metodelor de extragere a trsturilor s-a folosit clasificatorul KNN.
n general, un sistem de recunoatere al obiectelor trebuie s:
1- extrag atributele care grupez imaginile ntr-o anumit clas i difereniaz imaginile din
clase diferite
2- s clasifice aceste atribute
3- s elimine alarmele false - de aceea avem clasa garbage
4- n cazul deteciei obstacolelor s identifice clasa imaginii pe baza acestor atribute
5- s urmreasc obiectele de-a lungul scenei rutiere pn n momentul n care se pierd n afara
ei i nu mai reprezint nici un pericol (modul de "tracking" (urmrire)).
n aceast lucrare s-a presupus c obiectele sunt deja segmentate (detectate), baza de date
fiind format din imagini care ncadreaz doar obiectele i nu din scene ntregi de mai multe
obiecte. Astfel, n aceast lucrare este tratat numai modul de extragere al atributelor pentru
clasificare, precum i clasificarea obiectelor.
La nceput s-a ncercat extragerea caracteristicilor din imagini numai pe baza
transformatei Wavelet. Imaginile din baza de date au diferite dimensiuni (unele ilustreaz obiecte
mai apropiate avnd implicit dimensiuni mai mari- maxim 434x768 pixeli, altele obiecte mai
deprtate, avnd dimensiuni mai mici- minim 89x69 pixeli), iar pentru clasificare este necesar
obinerea unui numr fix de caracteristici pentru fiecare imagine. Din aceast cauz, nainte de a
aplica transformata Wavelet asupra imaginilor este necesar redimensionarea lor la aceleai
valori. Rezultatele obinute n urma clasificrii KNN a imaginilor nu au fost satisfctoare. Din
acest motiv s-a renunat la redimensionare i s-a ncercat gsirea unor metode de extragere a
trsturilor care prin aplicarea lor asupra imaginilor s returneze un numr fix de coeficieni
indiferent de dimensiunea imaginii.
Sistemele de clasificare folosesc diferite caracteristici pentru definirea obiectelor din
imagini. Aceste caracteristici reprezint ablonul (pattern-ul) obiectului, iar sabloanele obiectelor
care aparin mai multor clase vor fi eseniale pentru procesul de invare i testare al sistemului.
Pentru obinerea caracteristicilor s-au folosit o serie de transformri, combinaii de transformri
i de metode de extragere:
- transformata Wavelet
- transformata FFT
- transformata Radon
- caracteristicile Tamura
- histogramele multiscalare
- filtre orientate n patru direcii pentru obinerea "primelor 4 momente"
- polinoamele Zernike.
n pasul de clasificare, algoritmul de evaluare se bazeaz pe calculul de distane ntre
vectorii de caracteristici corespunztori obiectelor. Pentru a detecta i a recunoate
caracteristicile altor obiecte noi, sistemul trebuie nvat apriori cu aceste abloane prin
intermediul caracteristicilor extrase. Sistemul odat nvat, poate fi folosit doar pentru testare,
iar dac se dorete adugarea de noi instane n setul de antrenare, se va mai trece nc o dat prin
etapa de nvare. Astfel, au fost studiate metodele de extragere enumerate mai sus pentru
formarea setului de antrenare i testare. Acestea sunt utilizate de clasificator (KNN) pentru a se
realiza recunoaterea automat obiectelor.
n lucrare de fa s-a utilizat algoritmul de clasificare KNN, datorit simplitii
implementrii i al performaelor bune de clasificare.

13

3.1 Baza de imagini


Baza de imagini este construit din 800 de imagini color, mprite n patru clase dup
cum urmeaz:
- 200 de imagini cu maini
- 200 de imagini cu pietoni
- 200 de imagini cu animale (cini, pisici, vaci, oi, cai)
- 200 de imagini alctuind clasa "garbage".
Baza de date a fost preluat de pe internet din diferite baze de imagini disponibile gratuit
pe site-ul http://pascallin.ecs.soton.ac.uk/challenges/VOC/databases.html, deoarece nu a mai fost
creat pn acum o astfel de baz de imagini. Dup cum se poate observa n figura 3.1 imaginile
au fost selectate manual i au fost extrase doar obiectele de interes din acestea. Apoi imaginile au
fost transformate n imagini pe nivele de gri.
n figura de mai jos sunt ilustrate diferite imagini din fiecare clas:

Figura 3.1 Imagini din baza de date


Dup ce caracteristicile au fost extrase din imagini, ele au fost introduse n clasificator
pentru a realiza clasificarea imaginilor n cele patru clasele. Dup cum se poate observa n figura
3.1, imaginile care alctuiesc clasa garbage au fost obinute din fundalul imaginilor celorlalte
clase. Aceast clas este util la detectarea alarmelor false, cnd imaginea nu face parte din nici
una din clasele maini, pietoni sau animale.
n general pentru crearea unei baze de imagini care s fie ct mai bun, sunt respectate
urmtoarele principii:

14

- toate imaginile s fie realizate cu aceleai procedee (s fie realizate cu acelai aparat de
fotografiat sau camer de filmat)
- parametrii mijloacelor de captare a imaginilor s fie identici pentru toate imaginile
- s aibe un numr de imagini care s permit obinerea unor rezultate de clasificare
satisfctoare.
Deoarece nu a mai fost creat o baz de imagini ca i cea utilizat n lucrarea de fa i
realizarea unei astfel de baze de imagini necesit foarte mult timp, au fost folosite imagini care
fac obiectul altor baze de date. Bine neles c baza de imagini format, nu este la fel de bun ca
cea care respect principiile enumerate mai sus.
3.2 Metoda de extragere a caracteristicilor
Dup crearea bazei de imagini, s-a realizat extragerea caracteristicilor din imagini prin
intermediul diferitor transformate de imagini (transformata Wavelet, transformata FFT,
transformata Radon) i alte moduri de extragere ("primele 4 momente", histograme multiscalare,
caracteristicile Tamura - granularitatea, contrastul i direcionalitatea, i polinomurile Zernike).
Dup cum se poate observa n figura 3.2, aceste transformate i celelalte procedee de
extragere a caracteristicilor enumerate anterior, sunt distribuite n patru metode de extragere a
caracteristicilor, astfel:

Figura 3.2 Schema bloc a metodelor de extragere a trsturilor

15

Metodele de extragere a trsturilor, dup cum se poate vedea n figura 3.2, au fost
denumite metoda I, metoda II, metoda III i metoda IV pentru ca referirea la acestea s se
realizeze mult mai uor.
Privind figura 3.2 se poate observa c metoda I i metoda II difer ca i structur numai
prin prizma imaginilor pe care sunt aplicate (metoda I se aplic pe imaginea obinut n urma
transformatei Wavelet a imaginii pe nivele de gri, iar metoda II pe cea obinut n urma
transformatei Wavelet a transformatei FFT). Numrul de trsturi obinute prin aplicarea acestor
dou metode este acelai indiferent de imaginea pe care sunt aplicate (imagine pe nivele de gri,
cea rezultat n urma transformatei Wavelet sau cea rezultat n urma transformatei Wavelet a
transformatei FFT) i indiferent de dimensiunea acesteia, doarece cele trei blocuri "primele 4
momente", histograme multiscalare i caracteristicile Tamura contribuie cu un numr fix la
formarea vectorului de caracteristici (48, 24, respectiv 6).
Astfel, asupra transformatei Wavelet a imaginii, ct i asupra transformatei Wavelet a
trasnformatei FFT, se vor aplica urmtoarele funcii de compresie a numrului de coefieni:
a) Histogramele multiscalare - funcie care transform imaginea de intrare n patru tipuri de
histograme, cu 3, 5, 7 i 9 benzi, rezultnd astfel 24 de valori. Aceste valori sunt normalizate cu
maximul lor.
b) "Primele 4 momente" - funcie care returneaz un numr de 48 de coeficieni, prin parcurgerea
imaginii:
- pe diagonal (att din strnga jos pna n dreapta sus, ct i din dreapta jos pn n stnga sus)
cu un pas care depinde de valoarea rotujit a mpririi dimensiunii pe verical a imaginii la zece
(round(dim_verticala/10)). La fiecare pas se calculeaz valoarea mediei, deviaiei standard,
oblicitii i planitii pixelilor parcui. Coloanele matricei astfel obinut (care are stocate pe
fiecare linie cele patru valori menionate) sunt transformate n histograme cu 3 benzi, rezultnd
un numr de 4x3=12 atribute pentru fiecare imagine.
- pe orizontal i pe vertical, cu deosebirea c fa de parcurgerea pe diagonal cea realizat pe
orizontal se va face cu un pas care depinde de dimensiunea vertical a imaginii, iar cea
vertical se va face cu un pas care depinde de dimensiunea orizontal a imaginii. n rest se
procedeaz la fel ca i la parcurgerea pe diagonal.
Aadar, pentru cele patru parcurgeri (dou pe diagonal, una pe vertical i una pe
orizontal) se obin un numr de [4 parcurgeri]x[4 coloane]x[3 benzi ale histogramelor]=48
trsturi pentru orice imagine asupra creia s-a aplicat aceast metod de reducere a trsturilor.
c) Trsturile Tamura care se compun din directionalitatea imaginii, contrastul, granularitatea i
o histogram a granulitaii cu 3 benzi.
Pn acum au fost trecute n revist primele dou metode de reducere a atributelor unei
imagini (metoda I i metoda II), iar n continuare vom aborda celelate dou metode - metoda III
i metoda IV.
n cadrul metodei III de reducere a atributelor, blocurile: "primele 4 momente",
histograme multiscalare, caracteristicile Tamura, au aceeai funcionare ca i n cazul blocurilor
similare din metoda I i metoda II, cu deosebirea c acestea acioneaz asupra imaginii originale
(imagine pe nivele de gri). Acestor blocuri i se adaug i transformata Radon.
Pentru a realiza transformata Radon s-a utilizat funcia deja implementat n Matlab:
R = radon(I, theta) care returneaz transformata Radon R a intensitaii imaginii I pentru un unghi de theta grade [23].

Au fost calculate transformatele Radon pentru patru valori ale lui theta - 0, 45, 90 i 135.
Fiecare coloan a lui R va conine transfromata Radon pentru fiecare unghi din theta. Apoi
coloanele matricei R sunt transformate n patru histograme a cte trei benzi fiecare. Astfel,
transformata Radon particip cu un numr total de 4x3=12 trsturi la formarea vectorului de
caracteristici.
Metoda IV de extragere a trsturilor const n descompunerea polinomial Zernike a
imaginilor pe nivele de gri. Rezultatele obinute n urma aplicrii polinoamelor Zernike asupra
imaginii sunt valori complexe, i de aceea descriptorii imaginii vor fi modulul acestor valori

16

(valoarea absolut a numerelor complexe obinute).


La aceste metode s-a ajuns pornind de la cele descrise n [9] pentru formarea vectorului
de trsturi din cadrul clasificatorului WND-CHARM.
3.2.1 Metoda de extragere a caracteristicilor din WND-CHARM
Metoda propus pentru formarea vectorului de trsturi al clasificatorului WND-CHARM
este ilustrat n urmtoarea figur:

Figura 3.3 Schema de formare a vectorului de trsturi din cadrul WND-CHARM [9]
Dup cum se poate observa n figura 3.3 pentru formarea vectorului de trsturi s-au
utilizat diferite transformate ale imaginilor (transformata Wavelet, transformata Chebyshev i
transformata FFT), precum i combinaii ale acestor transformate (transformata Wavelet a
transformatei FFT i transformata Chebyshev a transformatei FFT). Apoi din rezultatele obinute
n urma acestor transformate, au fost extrase diferite trsturi, care sunt grupate n funcie de
tipul lor (caracteristici de mare contrast, de descompunere polinomial, de statistic i textur)
n patru grupe astfel:

Figura 3.4 Grupele de caracteristici pentru formarea vectorului de trsturi din WND-CHARM
[9]
n figura 3.4 este descris componena fiecrei grupe de caracteristici. Astfel, grupa A
cuprinde urmtoarele caracteristici de contrast nalt(de form):
- statisticile muchiilor care sunt calculate pe gradientul imaginii originale i cuprind mai
multe caracteristici cum ar fi media, variana, o histogram cu opt benzi a magnitudinii i
direciei pixelilor, numrul total de pixeli muchie normalizat n raport cu dimensiunea imaginii,
omogenitatea direciei i o histogram cu patru benzi care ilustreaz diferena direciei muchiilor.
Astfel, prin extragerea acestor statistici din imagine se obine un numr de 28 de trsturi.
- coeficienii Gabor se obin prin utilizarea wavelet-urilor Gabor[9], obinndu-se un
numr de 7 coeficieni pentru fiecare imagine.

17

- statisticile obiectelor sunt calculate pe imaginea binarizat prin intermediul pragului


Otsu [9] i cuprind urmtoarele caracteristici: numrul lui Euler (diferena dintre numrul de
obiecte i numrul de guri din imagine), centroizii imaginii, minimul, maximul, media, variana
i o histogram cu zece benzi calculat pentru pixelii obiectelor i distana de la centroizii
obiectelor la centrul imaginii. n total statisticile obiectelor cuprind 34 de caracteristici.
Dup cum se poate observa n figura 3.3 caracteristicile din grupa A sunt extrase numai din
imaginea original, contribuind astfel cu un numr de 28+7+34=69 caracteristici la formarea
vectorului de trsturi.
Grupa B reprezentat de caracteristicile de descompunere polinomial (de geometrie), are
n componen urmtoarele trsturi:
- statisticile Chebyshev- Fourier sunt extrase prin aplicarea transformatei ChebyshevFourier asupra unei imagini, obinndu-se un numr de 32 de trsturi.
- statisticile Chebyshev sunt obinute prin transformarea coeficienilor rezultai n urma
transformrii Chebyshev a imaginii ntr-o histogram cu 32 de benzi.
- polinoamele Zernike - prin descompunerea polinomial Zernike se obin 72 de
coeficieni compleci, dar ca descriptori ai imaginii se folosesc valorile absolute ale acestora.
Dup cum se poate observa n figura 3.3 caracteristicile din grupa B sunt extrase din imaginea
original i imaginea rezultat n urma transformatei FFT a imaginii originale, contribuind astfel
cu un numr de 2x(32+32+72)=272 caracteristici la formarea vectorului de trsturi.
Grupa C, dup cum se poate observa n figura 3.4 este compus din urmtoarele
caracteristici de statistic a pixelilor i de textur:
- primele 4 momente sunt reprezentate de media, deviaia standard, oblicitatea i
planitatea imaginii. Fiecare din cele patru caracteristici enumerate sunt formate dintr-o
histogram cu 12 benzi, rezultnd 48 de caracteristici.
- trsturile Haralick sunt calculate cu ajutorul matricelor concurente ale imaginilor.
Aceste trsturi cuprind un numr de 28 valori.
- histograme multiscalare sunt obinute prin transformarea imaginii n patru tipuri de
histograme, cu 3, 5, 7 i 9 benzi, rezultnd astfel 24 de valori.
- caracteristicile Tamura se compun din direcionalitatea imaginii, contrastul,
granularitatea i o histogram a granulitaii cu 3 benzi. Aceste trsturi contribuie cu un numr
de 6 caracteristici la formarea vectorului de trsturi.
Dup cum se poate observa n figura 3.3 caracteristicile din grupa C sunt extrase din
transformata Wavelet a imaginii originale i transformata Wavelet a transformatei FFT a
imaginii originale, contribuind astfel cu un numr de 2x(48+28+24+6)=212 caracteristici la
formarea vectorului de trsturi.
Grupa D este format din statisticile pixelilor i caracteristicile de textur ce fac parte din
grupa C la care se adaug i caracteristicile Radon a imaginii originale. Prin aplicarea
transformatei Radon asupra unei imagini se obine un numr total de 4x3=12 trsturi.
Dup cum se poate observa n figura 3.3 caracteristicile din grupa D sunt extrase din imaginea
original, transformata FFT a imaginii originale, transformata Chebyshev (a imaginii originale i
a transformatei FFT a imaginii originale), contribuind astfel cu un numr de 4x(48+28+24
+6+12)=472 caracteristici la formarea vectorului de trsturi.
Pentru mai multe detalii despre modul n care au fost calculate caracteristicile din grupele
A, B, C i D a se consulta [9].
3.2.2 Metoda de extragere a caracteristicilor n lucrarea de fa
n aceast lucrare formarea vectorului de caracteristici s-a realizat avnd ca referin
figura 3.3. Pentru obinerea unor timpi de extragere a trsturilor i de clasificare mai buni este
necesar a se utiliza un vector de trsturi cu o dimensiune ct mai mic. Astfel, pentru calculul
vectorului de caracteristici, n lucrarea de fa se vor utiliza un numr mai redus de trsturi.
Pentru reducerea numrului de trsturi, dar i din cauza numrului foarte mare de
posibiliti de formare a vectorului de trsturi (disponibile n figura 3.3), n aceast lucrare s-a

18

procedat astfel:
- s-a plecat de la formarea vectorului de trsturi prin mprirea figurii 3.3 n mai nou
metode de extragere caracteristicilor (primele nou linii ale tabelului 3.1) i testarea fiecrei
metode n parte.
- s-au relizat combinaii ale celor nou metode de extragere (dup cum se poate observa
n tabelul 3.1) pn cnd s-a ajuns la o performan de clasificare satisfctoare.
- nc de la nceput s-a renunat din grupa A la coeficienii Gabor (datorit numrului mic
de trsturi i timpului de obinere mai ridicat fa de celelalte caracteristici ale grupei), din
grupa B la statisticile Chebyshev-Fourier (deoarece utilizeaz pentru calcul o mare parte din
memorie i timpul de obinere este foarte mare), din grupa C la trsturile Haralick (datorit
timpului de obinere foarte mare i modului complicat de calcul).

12.

Acuratee KNN
Weka
Metoda de extragere a trsturilor
[%]
k
1
3
5
imagine transformata Wavelet grupa C
70.6 68
70
imagine transformata Chebyshev grupa D 66.1 66.5 62.7
imagine transformata FFT transformata 68 67.5 75.5
Wavelt grupa C
imagine transformata FFT transformata 64.8 65.4 65.3
Chebyshev grupa D
imagine transformata FFT grupa B
68.9 67.2 65.8
imagine transformata FFT grupa D
59 53.3 60
imagine grupa A
62.7 62.7 60.4
imagine grupa B
81.5 80.7 83.5
imagine grupa D
82.5 83.5 82.5
imagine transformata Wavelet grupa C +
imagine grupa A
70
71
73
imagine transformata Wavelet grupa C +
imagine grupa A +
70.6 73.7 72
imagine transformata FFT transformata
Wavelet grupa C
imagine transformata Wavelet grupa C +
imagine grupa A + imagine grupa B
70
71
73

13.

imagine transformata Wavelet grupa C+


imagine transformata FFT grupa B

Nr.
crt.

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.

14.

15.

16.

81

imagine transformata Wavelet grupa C +


statisticile Radon extrase din imaginea 86.8
original
imagine transformata Wavelet grupa C +
statisticile Chebyshev extrase din imaginea 73.7
original
imagine transformata Wavelet grupa C +
statisticile Chebyshev extrase din imaginea
original + statisticile Radon extrase din 82.5
imaginea original

19

Acuratee KNN
Matlab
[%]
k
1
3
5
70
62
68.3
65.7 64.4 63.7
66.3 65.6
74
63.2

61.3

63.2

68
56.9
63
80.6
85

67.3
51.9
64.3
81.9
86.2

65.8
58.5
61.3
82.8
87

69.3

70.6

70

69.3

71.2

70

69.3

70.6

70

80.5

79.8

81.8

81.2

80.6

86.8

86.2

86.2

87.5

87.5

71.2

73

70.6

70.6

70.6

85

85

82.5

82.5

80

Nr.
crt.

17.

18.

19.

Metoda de extragere a trsturilor


imagine transformata Wavelet grupa C +
imagine grupa D
imagine transformata Wavelet grupa C +
imagine grupa D + imagine grupa B

Acuratee KNN
Weka
[%]
k
1
3
5
85.6 85 82.5

Acuratee KNN
Matlab
[%]
k
1
3
5
87 88.7
88

87.5

90

87.8

85

imagine transformata Wavelet grupa C +


imagine grupa D+ imagine grupa B+ 87.9 87.5 85.6 91.3
imagine transformata FFT transformata
Wavelet grupa C
Tabel 3.1 Metode de extragere a trsturilor analizate

86.9

87.5

86.3

86.3

n tabelul 3.1 se pot observa valorile acurateii de clasificare obinute att n Matlab ct i n
Weka, prin intermediul clasificatorului KNN, respectiv IBk pentru un numr de vecini k= 1,3 sau
5.
Dup cum se poate observa n tabelul 3.1, metoda de extracie a trsturilor care ofer cea
mai mare acuratee este descris n ultima seciune a tabelului.
Nu s-a mai continuat testarea altor combinaii de metode de extragere a trsturilor
deoarece s-a obinut o acuratee de clasificare satisfctoare i pentru c timpul de extragere a
trsturilor pentru toate imaginile din baza de date s nu mai creasc (pentru c este i aa unul
foarte ridicat- 3 ore i 12 minute).
Asfel, s-a ajuns la urmtoarea schem de formare a vectorului de caracteristici, care este
utilizat mai departe n aceast lucrare:

Figura 3.5 Schema de formare a vectorului de trsturi

20

Figura 3.5 reprezint schema de formare a vectorului de caracteristici pentru care s-a obinut o
acuratee de clasificare satisfctoare prin intermediul clasificatorului IBk din Weka i
clasificatorului KNN implemantat n Matlab.
Metodele de extragere a trsturilor ilustrate n figura 3.5 sunt descrise mai amnunit n
n figura 3.2 i n seciunea 3.2 a lucrrii de fa.
Astfel, dup cum se observ n figura 3.5 vectorul de caracteristici al fiecrei imagini va
fi format din 318 trsturi. Pentru ntreaga baz de imagini vectorul de trsturi va fi format din
318 trsturi x 800 de imagini.
3.2.3 Evaluarea trsturilor n Weka
Weka este un sistem foarte puternic cu ajutorul cruia se poate realiza numai clasificarea
obiectelor (nu i extragerea caracteristicilor).
Utilitarul poate fi descrcat gratuit de pe site-ul: http://www.cs.waikato.ac.nz/ml/weka/. Acesta
a fost utilizat pentru a aplica o metod de nvare aupra vectorului de caracteristici i pentru a
analiza rezultatele obinute. nainte de aplicarea oricrui algoritm de clasificare asupra datelor,
acestea trebuie convertite n fisiere ARFF ("Attribute-Relation File Format").
Structura fiierului ARFF trebuie s respecte urmtoarea form:

Figura 3.6 Structura fiierului ARFF la modul general


Figura 3.6 ilustrez modul de formare al unui fiier ARFF, n vederea antrenrii i testrii unui
clasificator ales din Weka cu trsturile extrase din imaginile cuprinse n baza de date.
Astfel, pentru vectorul de caracteristici format pe baza schemei din figura 3.5, structura
fiierului ARFF va fi urmtoarea:

Figura 3.7 Structura fisierului ARFF utilizat n acest lucrare

21

n figura 3.7 este prezentat schema de formare a fiierului ARFF adaptat la aceast
lucrare.
Aadar, fiecare atribut trebuie descris n header-ul
header
fiierului ARFF, fiierul coninind
informaii att despre tipul fiecrui atribut, precum i despre clasa din care face parte respectivul
obiect.
Clasa fiecrui obiect trebuie s fie cunoscut, pentru ca la testare s se poat compara
clasa prezis de clasificator
asificator cu clasa real a obiectului respectiv. Dupa antrenarea (nvarea)
datelor se obine o matrice de confuzie ("confusion matrix") avnd dimensiunea [numr_clase x
numr_clase], n cazul nostru 4x4, care arat numrul instanelor atribuite fiecrei clase de
obiecte. Dac toate instanele au fost clasificate corect atunci doar elementele diagonalei
principale ale matricei de confuzie sunt diferite de zero.
zero Dac spre exemplu vom avea
urmtoarele matrice de confuzie descrise n figura 3.8:

Figura 3.8 Matricele


Matrice de confuzie pentru nvare, respectiv testare
Notaiile realizate n figura 3.8 au urmtoarele seminificaii: M - clasa maini, P - clasa
pietoni, A - clasa animale i G -clasa garbage.
n figura 3.8 se poate observa c la nvare toate obiectele au fost atribuite corect claselor
din care fac parte (figura
figura 3.8 a).
a
n etapa de testare (figura 3.8 b):
- toate obiectele din clasa maini (prima linie a matricei din figura 3.8 b)) au fost clasificate corect
- din clasa pietoni (a doua linie a matricei din figura 3.8 b)) 36 de imagini au fost clasificate
corect, 3 au fost clasificate ca fcnd parte din clasa animale i 1 din clasa garbage
- din clasa animale 34 de imagini au fost clasificate
clasif
corect (a treia linie a matrice
matricei din figura 3.8
b), 1 a fost clasificat
asificat ca fiind din clasa maini,
ma
2 au fost atribuite clasei pietoni i 3 clasei
garbage
- din clasa garbage (ultima linie a matricei din figura 3.8 b) 28 de imagini au fost clasificate
corect, 3 au fost clasificate ca aparinnd clasei
clase maini i 9 clasei animale.
Figura 3.8 prezint matricele
le de confuzie pentru
pentru nvare, respectiv testare obinute n Weka cu
clasificatorul IBk.. Numrul de vecini al clasificatorului IBk este egal cu unu
unu, iar pentru formarea
vectorului de trsturi s-aa utilizat schema prezentat n figura 3.5.
Pentru nvare i testare vectorul de caracteristici al tuturor imaginilor din baza de date a
fost mprit manual n 80% instane pentru nvare i 20% pentru testare, astfel nct s avem
un numr de 160 de imagini din fiecare clas pentru antrenare
an
(din
din ntreaga baza de date un total
de 640 de imagini)) i 20% din fiecare clas pentru testare (din ntreaga baz de date un total de
160 de imagini).
Programul Weka pune la dispoziie un numr mare de algoritmi de nvare i testare.
Deoarece n lucrarea de fa s-a
s a pus accentul pe extragerea trsturilor i nu pe analiza
performanelor diferiilor clasificatori, pentru a evalua calitatea trsturilor extrase din imagini ssa utilizat clasificatorul IBk.
3.3.4 Evaluarea trsturilor n Matlab
Apelarea din Matlab a utilitarului Weka este una dificil. Din acest motiv, dar i datorit
necesitii folosirii unui clasificator n interfaa grafic a lucrrii de fa ss-a ales dezvoltarea n
Matlab a unui algoritm de clasificare. Datorit
Datorit simplitii i uurinei de implementare
implementare, pentru

22

evaluarea trsturilor n Matlab s-a ales utilizarea clasificatorului KNN.


n aceast lucrare au fost utilizate pentru compararea performanelor de clasificare dou
versiuni ale clasificatorului KNN:
KNNC (KNN Classify) care este un clasificator implementat cu ajutorul funciei deja
existente n Matlab:
Class = knnclassify(Sample, Training, Group, k, distance) [23].

Funcia knnclassyfy returneaz vectorul Class, care conine rezultatul clasificrii


imaginilor din vectorul Sample n funcie de imaginile cu ajutorul crora se realizeaz nvarea
clasificatorului KNN.
Aceast funcie are ca i parametrii:
- vectorul Sample care conine imaginile de testare i a crui linii vor fi clasificate n cele patru
clase.
- vectorul Training care conine imaginile de antrenare, fiind folosit la clasificarea obiectelor din
vectorul Sample. Numrul de coloane a celor doi vectori Sample i Training trebuie s fie egal.
- vectorul Group conine clasele imaginilor din setul de antrenare
- k este numrul de vecini utilizat n clasificare
- distance este metrica utilizat n clasificare
KNNR (KNN Rule) care este implementat de Roger Jang i poate fi descrcat gratuit de
pe site-ul: http://mirlab.org/jang/matlab/toolbox/dcpr/.
Cu acest clasificator se obine exact aceeai acuratee de clasificare, dar un timp de
clasificare mult mai bun. Acest lucru se datoreaz utilizrii MEX-files, care au rolul de a reduce
timpul necesar n mod normal Matlab-ului s realizeze operaiile dorite.
n interfaa grafic va fi utilizat numai clasificatorul KNNR datorit performanelor de
clasificare superioare (n ceea ce privete timpul de clasificare).
Astfel utilitarul Weka este folosit pe lng stabilirea metodei de extragere a trsturilor i
la verificarea implementrii n Matlab a celor dou clasificatoare KNN.
3.3 Determinarea parametriilor transformatei Wavelet
n aceast lucrare s-a utilizat transformata Wavelet discret pentru semnale
bidimensionale. n Matlab aceast transformat are urmtoarea sintax:
[cA,cH,cV,cD] = dwt2(X,'wname') [23]

Prin aceast transformat se calculeaz matricea coeficienilor aproximai cA i matricele


coeficienilor detaliai cH, cV i cD (pe orizontal, vertical i respectiv pe diagonal) prin
descompunerea wavelet a matricei de intrare X (care poate fi reprezentat de o imagine).
Transformata Wavelet are ca parametru numele familiei wavelet utilizat n descompunere. Tot un parametru al transformatei Wavelet poate fi considerat i nivelul de descompunere
wavelet.
Descompunerea wavelet se poate realiza pe mai multe nivele astfel:
- mai nti se realizeaz transformata Wavelet a imaginii prin metoda descris mai sus (utilizat
pentru obinerea primului nivel de descompunere wavelet)
- pentru obinerea celui de-al doilea nivel al descompunerii se va aplica transformata Wavelet pe
una din matricele coeficienilor (cA, cH, cV sau cD) sau pe o combinaie a acestor matrice.
- se continu cu aplicarea transformatei Wavelet pe noile matrice de coeficieni pn cnd se
atinge nivelul de descompunere dorit.
Pentru determinarea parametriilor transformatei Wavelet s-a realizat urmtorul
experiment:
- s-a ales un nivel de descompunere egal cu 3, 4, 5 sau 6 (nivelele 1 i 2 nu ofer o
compresie suficient a atributelor imaginii). Aadar sunt patru valori ale nivelului de
descompunere.
- pentru funciile mam ale descompunerii wavelet s-au folosit funciile deja
implementate in Matlab, precum: Daubechies, Coiflet, Symlet, biortogonale i inverse
biortogonale (reverse biortogonal) .

23

Numele familiei de funcii wavelet Daubechies se scrie dbN, unde N este ordinul, iar db
este "prenumele" funciei wavelet. Funciile Coiflet (coifN) reprezint o alt familie de funcii
discrete wavelet, descoperite de Ingrid Daubechies. Numele familiei de funcii wavelet Symlet se
scrie symN, unde le fel ca i la Daubechies, N este ordinul, iar sym este "prenumele" funciei
wavelet. Functiile wavelet biortogonale se scriu biorNr.Nd, iar funciile inverse biortogonale la
fel ca i cele biortogonale se scriu rbioNr.Nd.
Din varietatea de familii de wavelet-uri n acest experiment s-au utilizat urmtoarele
funcii: db1db15, coif1coif5, sym1sym15, bior 1.1bior6.8, rbio1.1rbio6.8 (n total un
numr de 64 de valori)
- s-a utilizat numai metoda I de extragere a trsturilor (descris n figura 3.2) avnd ca
scop a reducerea timpul de extragere pentru imaginile din baza de date.
Astfel, prin utilizarea metodei I au fost obinui vectorii de trsturi ai bazei de imagini
pentru valorile parametriilor transformatei Wavelet stabilite mai sus. S-au obinut un numr de
4x64=256 vectori de caracteristici, care au fost salvai n fiiere text. La sfritul fiecrei linii a
fiierului s-a introdus clasa real a imaginii (pentru a se putea calcula acurateea de clasificare)
- s-a realizat permutarea liniilor tuturor fiierelor, pentru a nu permite clasificatorului s
nvee inclusiv ordinea de preluare a imagnilor (deoarece clasificatorul prelua pe rnd cele 4
clase, iar prin permutare imaginile sunt preluate aleator)
- pentru nvare i testare datele au fost mprite asfel nct s se obin 80% din
imaginile fiecrei clase pentru nvare i 20% pentru testare (cte 160 imagini din fiecare clas
pentru nvare i 40 imagini din fiecare clas pentru testare).
- s-a realizat clasificarea imaginilor din cele 256 de fiiere prin intermediul
clasificatorului KNN. S-a optat pentru obinerea unei acuratei de clasificare ct mai bun, n
defavoarea unor timpi calcul a transformatei Wavelet mai ridicai (cu ct nivelul de descompunere este mai mare cu att timpul necesar realizrii transformatei Wavelet este mai ridicat, dar
scade timpul de clasificare).
n urma acestui experiment s-a observat c acurateea maxim se obine pentru familia de
wavelet-uri bior1.3 i nivelul de descompunere wavelet egal cu 3.
Coeficienii cA, cH, cV i cD de nivlel 3 i familie bior1.3 ai unei imagini arat astfel:

Figura 3.9 Transformata Wavelet a unei imagini


n figura 3.9 este prezentat rezultatul aplicrii transformatei Wavelet de familie bior1.3 i
nivel de descompunere wavelet 3 asupra unei imagini oarecare din baza de date. n urma aplicrii
transformatei wavelet de nivel 3 i familie bior1.3 s-a realizat reducerea numarului de atribute al
imaginii prezentate n figur de la [148x93] (valori ce reprezint dimensiunea imaginii originale)
pna la [16x22]. Dup cum se poate observa n figura 3.2 din rezultatul transformatei Wavelet al
imaginii sunt extrase caracteristicile: "primele 4 momente", histograme multiscalare i
caracteristicile Tamura, numrul de trsturi reducndu-se de la [16x22=352] la 78 (48 pentru
"primele 4 momente", 24 pentru histogramele multiscalare i 6 pentru caracteristicile Tamura).
3.4 Modul de mprire a datelor pentru nvare i testare
Dup cum se poate observa n figura 3.10, orice clasificator trebuie s aibe un set de date
pentru antrenare i altul pentru testare. Iesirea unui astfel de clasificator este un vector care

24

conine numrul asociat claselor imaginilor din setul de testare (clasa_testare care este un vector
coloan).

Figura 3.10 Schema bloc a clasificrii KNN


n funcie de tipul clasificatorului setul de date de antrenare, respectiv de testare trebuie
s aibe o anumit structur. Astfel pentru cele dou variante ale clasificatorului KNN (KNNC i
KNNR) setul de antrenare i cel de testare va fi compus astfel:
- setul de antrenare este format din doi vectori - vector_trsturi_antrenare, care conine pe
fiecare linie trsturile imaginilor destinate antrenrii i clasa_antrenare, care este un vector
coloan ce conine pe fiecare linie clasa corespondent imaginii sotocate pe aceeai linei n
vectorul de antrenare.
- setul de testare este format dintr-un singur vector care are acelai numr de coloane ca i
vector_trsturi_antrenare, coninnd pe fiecare linie trsturile unei imagini de test.
Numrul de linii al acestor vectori depind de procentul de imagini din baza de date
destinate antrenrii i testrii. Cum s-a ales un procent de 80% din imaginile fiecrei clase pentru
antrenare i 20% pentru testare, aceti vectori vor avea urmtoarea dimensiune:
- vector_trsturi_antrenare: 80% x 800 imagini = 640 imagini, iar pentru fiecare imagine s-au
extras 318 trsturi. Astfel dimensiunea datelor de nvare este [640 linii x 318 coloane].
- vector_trsturi_testare: 20% x 800 imagini = 160 imagini, iar pentru fiecare imagine s-au
extras 318 trsturi. Astfel dimensiunea datelor de testare este [160 linii x 318 coloane].
- clasa_antrenare dup cum a mai fost precizat este un vector coloan cu acelai numr de linii
ca i vector_trsturi_antrenare. Aadar vom avea o dimensiune de [640 linii x 1 coloan].
- clasa_testare este tot un vector coloan care conine acelai numr de linii ca i
vector_trsturi_testare rezultnd astfel dimensiunea [160 linii x 1 coloan].
Testarea clasificatorului KNN s-a realizat pentru un numr de vecini k=1,3 sau 5. Dup
cum se poate observa k ia doar valori impare, din cauz c avem patru clase i s-a dorit evitarea
cazurilor n care clasificatorul poate atribuii imaginea la doua clase diferite n acelai timp (dac
acesta gasete aceeai distan ntre vecinii si care fac parte din dou clase diferite).
Acurateea clasificrii a fost calculat ca raportul dintre instanele corect clasificate i
numr total de instane clasificate. Determinarea instanelor corect clasificate s-a realizat prin
compararea claselor prezise de clasificator cu clasele reale (predefinite) ale imaginilor clasificate.
Din acest motiv este necesar stocarea claselor reale ale imaginilor de test.
3.5 mbuntirea performanelor
S-a ncercat mbuntirea performanelor prin dou metode:
- reducerea numrului de trsturi extrase din fiecare imagine
- transformarea aplicaiei ntr-un executabil
3.5.1 Reducerea numrului de trsturi extrase din fiecare imagine
Dup cum se poate observa n figura 3.5 formarea vectorului de trsturi se realizeaz
prin aplicarea asupra imaginilor din baza de date a combinaiei celor patru metode de extragere:
metoda I, metoda II, metoda III i metoda IV.
n tabelul 3.1 nu au fost analizate rezultatele tuturor combinaiilor posibile de formare a
vectorului de trsturi. Astfel, s-a ncercat reducerea numrului de trsturi extrase din fiecare

25

imagine prin analiza tuturor modalitilor posibile de formare a vectorului de trsturi pornind de
la cele patru metode: metoda I, metoda II, metoda III i metoda IV.
Deoarece avem un numr de patru metode de extragere, numrul de modaliti posibile de
obinere a vectorului de trsturi este dat de:
+ + + = 4 + 6 + 4 + 1 = 15 modaliti

Cele cincisprezece modaliti de formare a vectorului de trsturi sunt obinute prin aplicarea
asupra imaginilor a urmtoarelor metode i combinaii de metode de extragere:
1. metoda I
2. metoda II
3. metoda III
4. metoda IV
5. metoda I +metoda II
6. metoda I + metoda III
7. metoda I + metoda IV
8. metoda II + metoda III
9. metoda II + metoda IV
10. metoda III + metoda IV
11. metoda I + metoda II + metoda III
12. metoda I + metoda II + metoda IV
13. metoda I + metoda III + metoda IV
14. metoda II + metoda III +IV
15. metoda I +metoda II + metoda III + metoda IV
Au fost formai astfel cincisprezece vectori de caracteristici ai bazei de imagini,
dimensiunea lor variind n funcie de modalitatea de extragere a trsturilor (a se vedea tabelul
4.1 pentru mai multe detalii).
Pentru clasificarea celor cincisprezece vectori de caracteristici s-a procedat dup cum
urmeaz:
- s-a realizat o aplicaie de extragere a trsturilor din imaginile bazei de date pentru toate cele
cincisprezece modaliti de formare a vectorului de caracteristici. Vectorii astfel formai au fost
salvai n fiiere text.
- s-a realizat permutarea liniilor tuturor fiierelor, pentru a nu permite clasificatorului s nvee
inclusiv ordinea de preluare a imagnilor
- pentru nvare i testare datele au fost mprite asfel nct s se obin 80% din imaginile
fiecrei clase pentru nvare i 20% pentru testare (cte 160 imagini din fiecare clas pentru
nvare i 40 imagini din fiecare clas pentru testare)
- s-a realizat clasificarea imaginilor din cei cincisprezece vectori de caracteristici prin
intermediul clasificatorului KNN
- rezultatele de clasificare a celor cincisprezece vectori au fost comparate pe baza acurateii de
clasificare.
Acurateea dat de fiecare combinaie de metode, a fost comparat cu rezultatele obinute
pentru combinaia metoda I+metoda II+metoda III +metoda IV (cea cu care s-a obinut cea mai
bun acuratee de clasificare). Astfel s-a observat c modalitile compuse din metoda III +
metoda IV, metoda I + metoda III + metoda IV, metoda II + metoda III + metoda IV, se apropie
foarte mult de acurateea obinut cu metoda I+metoda II+metoda III +metoda IV, fr a o
depii (90.63 % faa de 91.25%).
n cazul celor trei modaliti (metoda III + metoda IV, metoda I + metoda III + metoda
IV, metoda II + metoda III + metoda IV) se obine un timp de clasificare mai bun (0.09 secunde
fa de 0.11) dect n cazul metodei cu care s-a obinut cea mai bun acuratee (metoda I+metoda
II+metoda III +metoda IV). Acest lucru se datoreaz numrului mai mic de trsturi pe imagine
(pentru mai multe detalii consultai tabelul 4.1)

26

Totui, am optat pentru obinerea unei acuratei de clasificare ct mai bun n detrimentul
unui timp de clasificare mai sczut.
3.5.2 Transformarea aplicaiei ntr-un executabil
S-a ncercat mbuntirea performanelor n ceea ce privete timpii de clasificare a
tuturor celor cincisprezece combinaii posibile de creare a vectorului de caracteristici, prin
transformarea aplicaie realizate ntr-un fiier executabil. n acest scop am utilizat toolbox-ul
deploytool din Matlab, care urmrete urmtoarea schem bloc pentru realizarea unui astfel de
fiier:

Figura 3.11 Schma bloc urmat de toolbox-ul deploytool[23]


n figura 3.11 este prezentat modul foarte simplu de realizare a unui fiier executabil.
S-a ales acest mod de realizare a executabilului datorit simplitii precum i datorit
dorinei de a obine timpi de clasificare mai buni. Astfel cu ajutorul acestui toolbox i urmrind
paii de mai sus s-a realizat transformarea aplicaiei realizate n Matlab ntr-o aplicaie
"standalone" (de sine stattoare, care nu necesit instalarea Matlab-ului pentru rulare) pentru
sistemul de operare Windows.
3.6 Interfaa grafic a aplicaiei
Pentru a realiza o prezentare a acestei lucrri s-a relizat o interfa grafic GUI (Graphical
User Interface) cu ajutorul toolbox-ului GUIDE (Graphical User Interface Design Environment)
din Matlab. Aceast aplicaie a fost transformat ntr-una executabil cu ajutorul deploytool.
Interfa grafic arat astfel:

Figura 3.12 Interfaa grafic a lucrrii

27

n figura 3.12 este prezentat aplicaia GUI realizat prin intermediul toolbox-urilor
Matlab (GUIDE + deploytool).
Interfat grafic este format din trei prti:
- partea de extragere a trsturilor
- partea de clasificare a imaginilor
- partea de testare a clasificatorului KNN cu alte imagini dect cele din baza de date
3.6.1 Extragerea trsturilor
Interfaa grafic permite utilizatorului s aleag clasele de imagini utilizate n etapa de
extragere a trsturilor, precum i metodele de extracie a trsturilor (poate s aleag orice
combinaie a celor patru metode descrise n figura 3.2). Dup apsarea butonului "Creare vector
trsturi" se va realiza extragerea trsturilor prin metoda aleas din imaginile claselor selectate.
Timpul de extragere al trsturilor tuturor imaginilor din baza de date va fi vizibil utilizatorului
odat cu terminarea procesului de extragere n csua numerotat cu "2", iar informaiile legate
de numrul de caracteristici al vectorului de trsturi astfel format vor fi vizibile n csua
numerotat cu "1".
3.6.2 Clasificarea imaginilor
Pentru clasificarea imaginilor s-a ales clasificatorul KNNR. Interfaa permite setarea
numrului de vecini pentru care se face clasificarea (csua "3") i procentului din numrul total
de imagini destinat procesului de nvare (csua 4). Procentul de imagini pentru care se face
testarea se calculeaz automat prin scderea din 100% a procentului de imagini de nvare.
Acesta este afiat odat cu setarea procentului de nvare n csua "5".
Prin apsarea butonului "Antrenare i testare KNN" se realizeaz clasificarea imaginilor
din setul de testare n funcie de parametrii setai. Informaiile legate de acurateea clasificrii i
timpul de clasificare vor fi afiate n csuele "6",respectiv "7".
3.6.3 Testarea clasificatorului KNN i cu alte imagini dect cele din baza de date
Interfaa grafic permite testarea clasificatorului KNN i cu alte imagini dect cele din
baza de date, n funcie de vectorul de trsturi extras "on-line" sau n funcie de vectorul de
trsturi implicit obinut n cadrul celei mai bune metode de extragere a caracteristicilor (metoda
I+metoda II+metoda III+metoda IV).
Pentru a se realiza testarea, utilizatorul trebuie s aleag o nou imagine prin apsarea
butonului "Preia imagine" i s selecteze vectorul de trsturi utilizat. Trsturile imaginii
preluate vor fi extrase prin aceleai metode prin care s-a format i vectorul de trsturi ales (cel
format on-line sau cel implicit). Informaiile legate de timpul de extragere a trsturilor, timpul
de clasificare i clasa imaginii noi vor fi afiate n csuele "8", "9", respectiv "10".

4. Rezultate experimentale
Toate experimentele din acest lucrare au fost relizate pe un calculator desktop avnd
urmtoarea configuraie:
- plac de baz: ASUS M3N78-VM
- procesor: AMD Athlon(tm) 64 3000+, avnd o frecven de 1.8Ghz
- RAM: 2 Gb DDR II
- placa video: Nvidia GeForce 8200
- HDD: 250 Gb, 7200 rpm
- sistem de operare: Windows XP Service Pack 3

28

4.1 Rezultate experimentale Weka


Pentru a avea convingerea c trsturile din vectorul de caracteristici sunt destul de
difereniate de la o clas la alta, s-a folosit clasificatorul IBk (echivalentul KNN-ului) din Weka.
Astfel s-a relizat testarea clasificatorului IBk cu datele de nvare, obinndu-se urmtoarea
matrice de confuzie:

Figura 4.1 Matrice de confuzie Weka (numrul de vecini=1)


Figura 4.1 prezint matricea de confuzie obinut n Weka prin testarea clasificatorului
IBk cu datele de nvare, pentru vectorul de trsturi construit dup figura 3.5. n figura de mai
sus se observ c n afar de diagonala principal celelalte elemente sunt zero, ceea ce nseamn
c nici o imagine nu a fost atribuit altei clase dect celei din care face parte.
Ei bine, situaia pentru cazul n care numrul de vecini este mai mare ca unu (respectiv k=3 sau
5) se schimb, fcnd ca acurateea clasificrii s nu mai fie de 100%. Astfel n acest caz s-au
obinut urmtoarele matrice de confuzie:

(a)

(b)

Figura 4.2 Matricele de confuzie pentru k=3 (a),


respectiv k=5 (b) obinute n Weka
Figura 4.2 prezint matricele de confuzie obinute n Weka, prin testarea clasificatorului
IBk cu datele de nvare (pentru vectorul de trsturi construit dup figura 3.5), ilustrnd
rezultatele diferite obinute pentru k=3 (figura 4.2 a), respectiv k=5 (figura 4.2 b) fa de primul
caz (figura 4.1) cnd k=1.
Dup cum se poate observa n matricele de confuzie de mai sus celelate elemente n afara
diagonalei principale nu sunt nule ca i n figura 4.1, avnd i imagini care nu sunt atribuite
corect. Astfel, cnd k=3 pentru clasa maini (notat cu M) au fost atribuite corect 199 de imagini
din 200, una fiind atribuit incorect clasei animale (notat cu A), pentru clasa pietoni (notat cu
P) - 193 corecte,7 incorecte, .a.m.d.
Acurateea de clasificare n acest caz scade la 93.75% (adic 750 imagini clasificate
corect din totalul de 800), pentru k=3 la 93.75 i la 92.25% pentru k=5 (adic 738 de imagini
clasificate corect din totalul de 800). Acest lucru relev c pentru k=3 i k=5 nu s-a realizat o
difereniere suficient ntre cele patru clase (existnd asemnri ntre acestea) i dup cum o s
putem observa n cele ce urmeaz performaele de clasificare cele mai bune se vor obine pentru
k=1. S-a ales pentru numrul de vecini valori impare (1,3, respectiv 5) din cauz c sunt patru

29

clase i s-a dorit evitarea cazurilor n care clasificatorul poate atribuii imaginea la doua clase
diferite n acelai timp.
De asemenea, Weka a fost utilizat i pentru verificarea implementrii clasificatoarelor
KNN (KNNC i KNNR) n Matlab.
Astfel, n etapa de testare, n Weka se obin urmtoarele matrice de confizie:

(a)
(b)
(c)
Figura 4.3 Matricele de confuzie pentru setul de testare (k=1,3 i 5) obinute n Weka
n figura 4.3 putem observa modul n care au fost atribuite imaginile din setul de testare
(format din 20% din imaginile fiecrei clase, adic 40 de imagini din fiecare clas) n urma
evalurii imaginilor cu ajutorul clasificatorului IBk. Astfel, pentru k=1 s-a obinut o acuratee de
clasificare de 86.25% (adic 138 de imagini clasificate corect din totalul de 160), pentru k=3 86.25%, iar pentru k=5 - 86.875% (adic 139 de imagini clasificate corect din totalul de 160).
n Matlab, n etapa de testare pentru ambele clasificatoare KNN (KNNC i KNNR) s-au
obinut urmtoarele matrice de confuzie:

(a)

(b)

(c)

Figura 4.4 Matricele de confuzie pentru setul de testare obinute n Matlab


n figura 4.4 este prezentat rezultatul atribuirii imaginilor fiecrei clase, pentru setul de
testare, clasificarea fiind realizat n Matlab prin intermediul celor dou clasificatoare KNN
studiate. Aceste clasificatoare returneaz acelai rezultat al clasificrii n ceea ce privete
acurateea, diferena major dintre ele fiind constituit de timpii de clasificare.
n comparaie cu clasificatorul IBk din Weka, pentru cele din Matlab s-a obinut o
acuratee de clasificare puin mai mare, respectiv pentru k=1 (figura 4.4 a) s-a obinut o acuratee
de 91.25% (adic 146 imagini clasificate corect din totalul de 160), pentru k=3 (figura 4.4 b)
86.25% (adic 137 de imagini clasificate corect din totalul de 160) i pentru k=5 (figura 4.4 c)
86.25%.
4.2 Rezultate experimentale din Matlab i din aplicaia executabil
Aplicaia executabil se refer la experimentul (transformat n fiier executabil) realizat
pentru obinerea celor cincisprezece combinaii posibile de formare a vectorului de trsturi n
seciunea:
3.5.1 Reducerea numrului de trsturi extrase din fiecare imagine, a lucrrii de fa.
Diferena n ceea ce privete timpii de clasificare dintre cele dou clasificatoare (KNNC

30

i KNNR) n funcie de numrul de trsturi extrase (de combinaia de metode utilizat pentru
construirea vectorului de trsturi) poate fi observat att n figura 4.5, ct i n tabelul 4.1.

Figura 4.5 Graficul timpului de clasificare n funcie de numrul de trsturi


n figura 4.5 sunt prezentate sunt prezentate urmtoarele grafice:
- graficul timpului de clasificare KNNR (cel cu albastru) al celor cincisprezece vectori de
caracteristici (pentru mai multe detalii vezi seciunea 3.5.1 a acestei lucrri) n funcie de
numrul de de trsturi extrase din imagini pentru fiecare combinaie de metode (vezi tabelul
4.1)
- graficul timpului de clasificare KNNC (cel cu rou) al celor cincisprezece vectori de
caracteristici n funcie de numrul de de trsturi extrase din imagini pentru fiecare combinaie
de metode (vezi tabelul 4.1).
Dup cum observm n figura 4.5 timpul de clasificare KNNR este mult mai bun, avnd valori
mai mici dect timpul de clasificare KNNC.Timpul de clasificare KNNC este divizat cu zece
pentru a se putea observa mai bine diferenele ntre cele dou grafice n fiecare punct.
Comparnd valorile timpilor de clasificare KNNR obinui n Matlab i n aplicaia
executabil din figura 4.6 putem observa c performanele obinute n Matlab nu difer foarte
mult de cele obinute prin intermediul aplicaiei executabile.

Figura 4.6 Graficul timpului de clasificare n funcie de numrul de trsturi

31

Figura 4.6 prezint variaia timpilor de clasificare ai KNNR-ului obinui n cadrul


aplicaiei Matlab (cu albastru), respectiv n cadrul aplicaiei executabile (cu rou) de obinere a
performanelor de clasificare pentru cele cincisprezece moduri de formare a vectorului de
trsturi, fiind relizat n Matlab.

Figura 4.7 Graficul timpului de extragere coeficieni n funcie de numrul de trsturi


Figura 4.7 prezint graficul timpului de extragere a coeficienilor (obinut n Matlab- cu
albastru i n aplicaia executabil- cu rou) n funcie de numrul de trsturi.
Dup cum se poate observa n figura 4.7, diferenele dintre timpul de extragere a
caracteristicilor pentru toate imaginile din baza de date n cazul aplicaiei Matlab, respectiv
aplicaiei standalone, sunt att de mici nct reprezentrile grafice a acestora n funcie de
numrul de trsturi extrase pentru fiecare imagine sunt suprapuse. Astfel, transformarea unei
aplicaii Matlab ntr-un executabil nu ofer performane cu mult mai bune n ceea ce privete
timpii de execuie, dar este util pentru rularea aplicaiei Matlab pe calculatoarele care nu au
instalat programul Matlab.
n tabelul 4.1 sunt prezentate rezultatele experimentale obinute n Matlab, prin
clasificarea tuturor celor cincisprezece posibiliti de creare a vectorului de trsturi. Dup cum
putem observa, tabelul informeaz asupra numrului de trsturi din vectorul de caracteristici
construit conform metodei specificate, timpul de extragere al coeficienilor tuturor imaginilor din
baza de date, numrul de vecini k al clasificatorului KNNR pentru care s-a obinut acurateea de
clasificare cea mai mare, acurateea de clasificare pentru fiecare clas de imagini din baza de
date, acurateea medie a celor patru clase de imagini, timpul necesar clasificatoarelor KNNR i
KNNC s clasifice setul de testare constituit din atributele a 20% din imaginile fiecrei clase
(40 de imagini din fiecare clas).
n tabelul 4.2 sunt prezentate aceeai termeni de performan a clasificrii i extragere a
trsturilor, cu excepia timpului de clasificare KNNC, obinui n urma transformrii aplicaiei
de obinere a celor cincisprezece vectori de atribute i de clasificare a acestora ntr-o aplicaie
executabil independent de Matlab. Prin aceast transformare s-a ncercat mbuntirea
performanelor de extragere i de clasificare prin mbuntirea timpilor de extragere a
trsturilor, respectiv timpilor de clasificare a setului de testare pentru fiecare din cei
cincisprezece vectori de atribute.

32

Tabel 4.1 Rezultate obinute n Matlab


Combinaia de
Metode

Numr
trsturi

Timp extragere
coeficieni

78

1 min, 11 sec

95

90

II

78

1 min, 41 sec

88

III

90

17 min

IV

72

2 h, 51 min

I II

156

2 min, 51 sec

I III

168

18 min

I IV

150

2 h, 52 min

II III

168

19 min

II IV

150

2 h, 53 min

10

III IV

162

3 h, 9 min

11

I II III

246

20 min

12

I II IV

228

2 h, 54 min

13

I III IV

240

3 h, 10 min

14

II III IV

240

15

I II III IV

318

Nr.
crt

Acuratee [%]
Garbage

Acurateea
medie
[%]

50

68

75.63

Timp
clasificare
KNNR
[s]
0.05

88

60

47

70.63

0.07

0.21

97

85

75

80

84.38

0.05

0.45

100

97

45

85

81.88

0.04

0.20

97

95

70

72

83.75

0.06

0.62

97

85

75

85

85.63

0.07

0.65

100

97

50

85

83.13

0.06

0.68

97

85

75

82

85

0.07

0.80

100

97

55

90

85.63

0.06

0.73

100

95

78

90

90.63

0.09

0.79

97

85

75

85

85.63

0.09

1.26

100

97

60

90

86.88

0.08

0.97

100

95

78

90

90.63

0.09

1.21

3 h, 10 min

100

95

78

90

90.63

0.09

1.27

3 h, 12 min

100

95

80

90

91.25

0.10

1.30

1 3 5 Masini Pietoni Animale

x
x
x
x

33

Timp
clasificare
KNNC
[s]
0.30

Tabel 4.2 Rezultate obinute prin transformarea aplicaiei ntr-un executabil


Combinaia
de Metode

Numr
trsturi

78

II

78

III

90

Timp
extragere
coeficieni
1 min, 7
sec
1 min, 34
sec
16 min

IV

72

2 h, 51 sec

I II

156

I III

168

2 min, 41
sec
18 min

I IV

150

2 h, 52 min

II III

168

18 min

II IV

150

2 h, 52 min

10

III IV

162

3 h,8 min

11

I II III

246

19 min

12

I II IV

228

2 h, 54 min

13

I III IV

240

3 h, 9 min

14

II III IV

240

15

I II III IV

318

Nr.
crt

k
5

Masini

Pietoni

Animale

Garbage

95

90

50

68

Acurateea
medie
[%]
75.63

88

88

60

47

70.63

0.04

97

85

75

80

84.38

0.04

100

97

45

85

81.88

0.04

97

95

70

72

83.75

0.06

97

85

75

85

85.63

0.06

100

97

50

85

83.13

0.06

97

85

75

82

85

0.06

100

97

55

90

85.63

0.06

100

95

78

90

90.63

0.08

97

85

75

85

85.63

0.09

100

97

60

90

86.88

0.08

100

95

78

90

90.63

0.08

3h, 9 min

100

95

78

90

90.63

0.10

3 h, 11 min

100

95

80

90

91.25

0.10

Acuratee [%]

x
x
x
x

34

Timp
clasificare
KNNR[s]
0.04

n figura de mai jos (figura 4.8) se poate observa rata de clasificare a celor patru clase
(masini- n galben, pietoni- n rou, animale- n verde i garbage- n albastru), precum i
acurateea medie (cu linie neagr ntrerupt) n funcie de numrul de trsturi al vectorului de
caracteristici.

Figura 4.8 Graficul acurateii n funcie de numrul de trsturi


Figura 4.8 prezint acurateea de clasificare a celor patru clase i acurateea medie n funcie de
numrul de trsturi al vectorului de caracteristici, fiind realizat n Matlab.
Dup cum se poate observa n acest figur clasa cu cea mai bun rat de recunoatere
este clasa maini, urmat de clasa pietoni, fapt ce poate fi explicat prin existena unui numr
suficient de imagini, care s permit clasificatorului o nvare eficient. n cazul celorlalte dou
clase, animale i garbage, acurateea de clasificare este mai sczut datorit varietii de fundale
ale imaginilor.
5. Concluzii
Pe durata realizrii acestei lucrri au fost studiate diferite metode deja existente de
formare a vectorului de trsturi n vederea clasificrii imaginilor.
Din multitudinea de metode studiate (vezi figura 3.3), s-a ajuns la schema de formare a
vectorului de caracteristici prezentat n figura 3.5. n funcie de acurateea de clasificare, a fost
aleas combinaia de metode ce mai bun de extragere a trsturilor din imaginile bazei de date.
Din punct de vedere aplicativ a fost dezvoltat o interfa grafic, care permite
utilizatorului s selecteze diferite variante de formare a vectorului de trsturi, precum i
posibilitatea testrii clasificatorului KNN cu alte imagini dect cele din baza de date. Vectorul de
trsturi poate avea, n funcie de metodele alese, o dimensiune minim de 72 caracteristici i
maxim de 318 caracteristici.
Principalul avantaj al aplicaiei realizate, n comparaie cu metoda de extragere
caracteristici propus n WND-CHARM (figura 3.3) este numrul mult mai redus de trsturi pe
imagine, ceea ce are o influen foarte mare asupra timpului de extragere al coeficienilor tuturor
imaginilor din baza de date, precum i asupra timpului de clasificare.
Astfel, timpul necesar extragerii trsturilor (pentru care se obine acurateea cea mai

35

bun) este de 3 ore i 11 minute, n comparaie cu cele 48 de ore necesare extragerii


caracteristicilor cu metoda propus n WND-CHARM. De asemenea, s-a obinut o acuratee de
clasificare mult mai bun, dect dac se realiza extragerea caracteristicilor pe baza metodologiei
descris n figura 3.3 (91.25% fa de 68%).
n ceea ce privete baza de imagini, s-a ajuns la concluzia c aceasta trebuie s aibe un
numr mai mare de imagini cel puin pentru clasele animale i garbage, pentru ca rezultatele
clasificrii s fie mbuntite.
Acurateea de clasificare nu crete liniar odat cu extragerea mai multor trsturi din
imaginile bazei de date (vezi figura 4.8).
Prin extragerea mai multor caracteristici din fiecare imagine se mrete timpul de
extragere al trsturilor, precum i timpul de clasificare. De aceea pentru a avea o clasificare
ntr-un timp ct mai redus trebuie s se fac un compromis ntre dimensiunea vectorului de
trsturi i timpul de clasificare.
Prin transformarea aplicaiei Matlab ntr-una executabil nu se pot obine timpi de
execuie mai buni, dar aceasta este folositoare la rularea aplicaiei realizate n Matlab pe
calculatoarele care nu au instalat acest program.
n urma rezultatelor obinute, Weka s-a dovedit un program foarte util n stabilirea
metodelor eficiente de formare a vectorului de trsturi, precum i n verificarea implementrilor
Matlab a clasificatoarelor KNN (KNNC i KNNR).
Problemele cele mai importante, ntmpinate n realizarea acestei lucrri au fost:
- construirea unei baze de date care s conin un numr suficient de imagini pe clas
Acurateea de clasificare a fiecrei clase dup cum se poate observa i n figura 4.8 nu
este aceeai pentru toate clasele i datorit faptului c nu a fost realizat o baz de date special
conceput pentru aceast lucrare, imaginile care formeaz cele patru clase fcnd parte din baze
de imagini diferite.
- dimensiunea diferit a imaginilor din baza de date
Aceast problem a fost rezolvat prin folosirea unor metode de extragere a trsturilor
care s aibe ca rezultat acelai numr de caracteristici indiferent de dimensiunea imaginii. Astfel,
dimensiunea vectorului de trsturi nu variaz de la o imagine la alta, fiind aceeai pentru toate
imaginile. Aceast condiie este necesar la clasificarea imaginilor. Extragerea unui numr
constant de trsturi din fiecare imagine (indiferent de dimensiunea lor) se putea realiza i prin
redimensionarea tuturor imaginilor din baza de date la aceeai dimensiune, dar rezultatele
obinute nu sunt la fel de bune.
Aplicaia realizat poate fi utilizat cu succes la dezvoltarea unor sisteme de recunoatere
de obstacole, ntlnite de o main pe osea, sisteme automate de supraveghere a parcrilor sau
sisteme de utilaje automate n vederea efecturii unor lucrri agricole.
Prin schimbarea bazei de imagini cu una constituit din imagini medicale, aplicaia poate fi
utilizat n domeniul medical pentru detecia anomaliilor sau procesarea imaginilor biologice.

36

6. Bibliografie
[1] Smith, J.R., Chang, S.F., 1996. Local color and texture extraction and spatial query. Proc.
IEEE International Conference on Image Processing, Lausanne, Switzerland, September 1996.
[2]Shen, L., Bai, L., 2006. MutualBoost learning for selecting Gabor features for face
recognition, Pattern Recognition Letters, 27, 17581767.
[3] Jing, X.Y., Zhang, D., 2004. A Face and Palmprint Recognition Approach Based on
Discriminant DCT Feature Extraction. IEEE Transactions on Systems, Man, and Cybernetics,
34, 24052414.
[4] Pentland, A., Choudhury, T., 2000. Face recognition for smart environments. Computer, 33,
5055.
[5] Boland, M.V., Murphy, R.F., 2001. A Neural Network Classifier Capable of Recognizing the
Patterns of all Major Subcellular Structures in Fluorescence Microscope Images of HeLa Cells.
Bioinformatics, 17, 12131223.
[6] Awate, S.P., Tasdizen T., Foster N., Whitaker R.T., 2006. Adaptive Markov modeling for
mutualinformation-based, unsupervised MRI braintissue classification. Medical Image Analysis,
10,726739.
[7] Cocosco, A., Zijdenbos, P., Evans, A.C., 2004. A fully automatic and robust brain MRI tissue
classification method. Medical Image Analysis, 7, 513527.
[8] Ranzato, M., Taylor, P.E., House, J.M., Flagan, R.C., LeCun, Y., Perona, P., 2007.
Automatic recognition of biological particles in microscopic images. Pattern Recognition Letters,
28, 3139.
[9] http://www.phy.mtu.edu/~lshamir/publications/image_classifier.pdf
[10]http://www.upm.ro/facultati_departamente/stiinte_litere/conferinte/situl_integrare_european
a/Lucrari2/Ioan_Ispas.pdf
[11] http://www.dtic.upf.edu/~xserra/cursos/TDP/referencies/Park-DWT.pdf
[12] http://www.mathworks.com
[13] ac.upg-ploiesti.ro/cursuri/is/lab/IS_LUC%203.doc
[14] http://www.wisdom.weizmann.ac.il/~naor/COURSE/fft-lecture.pdf
[15] http://en.wikipedia.org/wiki/Fast_Fourier_transform#Cooley.E2.80.93Tukey_algorithm
[16] http://eivind.imm.dtu.dk/staff/ptoft/Radon/Radon.html
[17] http://imag.pub.ro/ro/cursuri/archive/radon.pdf
[18] http://ru.wikipedia.org/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Radon_transform.
png

37

[19]http://www.cs.auckland.ac.nz/compsci708s1c/lectures/Glecthtml/topic4c708FSC.htm#tamura
[20] http://en.wikipedia.org/wiki/Zernike_polynomials
[21] http://www.astronomy.ohio-state.edu/~martini/Astro890/Astro890L6.pdf
[22] http://inf.ucv.ro/~gorunescu/courses/curs/clustering.pdf
[23] Malab R2009b Help
[24] http://people.revoledu.com/kardi/tutorial/KNN/index.html
[25]http://www.autonlab.org/autonweb/14665/version/2/part/5/data/mooretutorial.pdf?branch=main&language=en
[26] http://www.mathworks.com/support/tech-notes/1600/1605.html#intro

38

7. Anexe
7.1 Anexa 1
Codul Matlab al funciei de transformare Wavelet
function [coef_img]=compresie_wavelet(imagine,nivel,tip_transformare)
%imagine= imaginea asupra careia se va aplica transformata wavelet dwt2
%nivel= nivelul de compresie al imaginilor
%tp_transformare= familia de wavelet-uri folosita
for i=1:nivel
% extragem coeficientii aproximati, de pe orizontala, verticala si
% diagonala
[cA1,cH1,cV1,cD1] = dwt2(imagine,tip_transformare);
imagine=cA1;
end;
coef_img=cA1;
return;
7.2 Anexa 2
Codul Matlab pentru obinerea fiierului cu vectorul de trsturi
clc
close all
clear all
%fis- fisierul in care va fi salvat vectorul de trasaturi
fis=fopen('fisier_caracteristici.txt','w' );
for i=1:4
% Lista contine numele imaginilor din baza de date
lista=strcat('Lista',num2str(i),'.txt');
% functia care realizeaza extragerea trasaturilor pentru fiecare
% clasa pe rand
citesteImaginiLista(lista,fis);
end
fclose all;
7.3 Anexa 3
Codul Matlab al funciei de extragere trsturi
function citesteImaginiLista(fisLst,fis)
%fisLst - fisierul txt care contine denumirea imaginilor
%fis - fisierul in care se va scrie vectorul de trasaturi
% preiau nr de imagini in functie de numarul de linii al fisierului Lista
numberOfLines = GiveNbOfLines(fisLst);
fid_imagesLst=fopen(fisLst);
% punem in variabila dirImagini folderul din care sa citeasca imaginile
nume_lista = {'Lista1.txt','Lista2.txt','Lista3.txt','Lista4.txt'};
T=strcmp(fisLst, nume_lista);
currentfolder=pwd;
dirImagini={strcat(currentfolder,'\cars\'),...
strcat(currentfolder,'\persons\'),...
strcat(currentfolder,'\animals\'),...

39

strcat(currentfolder,'\garbage\')};
[T,clasa]= sort(T,'descend');
clasa=clasa(1);
dirImagini=dirImagini{clasa};
for i = 1:numberOfLines-1
% preiau numele fiecarei imagini din fisierul fid_imagesLst
imgName = numeImagine(fid_imagesLst);
% citesc imaginea si o transform din color in gray
[imagine] = imread(strcat(dirImagini,imgName),'png');
imagine=rgb2gray(imagine);
imagine = im2double(imagine);
%metoda I de extractie
%aplicare transformata wavelet
caracteristici_wavelet1=compresie_wavelet(imagine,3,'bior1.3');
%aplicare first4moments, MultiScaleHistograms, TamuraTextures asupra
%transformatei wavelet a imaginii
first4moments = CombFirst4Moments(caracteristici_wavelet1);
multiscalehist = MultiScaleHistograms(caracteristici_wavelet1);
TamuraFeatures = TamuraTextures(caracteristici_wavelet1);
vect_caracteristici=[first4moments,multiscalehist,TamuraFeatures];

%metoda II de extractie
% aplicare FFT
fftTrans=FourierTransform(imagine);
caracteristici_wavelet_fft=compresie_wavelet(fftTrans(:,:,1),3,'bior1.3');
%aplicare first4moments, MultiScaleHistograms, TamuraTextures asupra
%transformatei wavelet a transformatei fft a imaginii
first4moments = CombFirst4Moments(caracteristici_wavelet_fft);
multiscalehist = MultiScaleHistograms(caracteristici_wavelet_fft);
TamuraFeatures = TamuraTextures(caracteristici_wavelet_fft);
vect_caracteristici=[vect_caracteristici,first4moments,multiscalehist,...
TamuraFeatures];
%metoda III de extractie
%aplicare first4moments, MultiScaleHistograms, TamuraTextures si
% RadonTransform asupra imaginii originale
first4moments = CombFirst4Moments(imagine);
multiscalehist= MultiScaleHistograms(imagine);
TamuraFeatures = TamuraTextures(imagine);
radonTransStat = RadonTransformStatistics(imagine);
vect_caracteristici=[vect_caracteristici,first4moments,multiscalehist,...
TamuraFeatures,radonTransStat];
% metoda IV de extractie
%aplicare polinoamele lui zernike asupra imaginii originale
zvalues = ZernikePolynomials(imagine);

40

vect_caracteristici=[vect_caracteristici,zvalues];
%% salvam rezultatul in fisier
lungime=size(vect_caracteristici,2);
for j=1:lungime
fprintf(fis,'%.3f', vect_caracteristici(j));
fprintf(fis,'%c',',');
end;
fprintf(fis,'%d%c\n',clasa,',');
end
fclose(fid_imagesLst);

7.4 Anexa 4
Codul Matlab pentru obinerea fiierului cu liniile vectorului de caracteristici permutate
close all
clear all
clc
calea=strcat(pwd,'\fisiere\');
% fisierul in care este salvat vectorul de trasaturi
fisierulmeu=strcat(calea,'fisier_caracteristici.txt');
% functia care realizeaza permutarea datelor precum si impartirea lor in
% 80% si 20% pentru invatare si testare
prelucrareFisierIN(fisierulmeu);
fclose all;
Codul Matlab pentru funcia prelucrarefisierIN
function prelucrareFisierIN(fisierulmeu)
% fac permutari de linii, pt ca sa nu-i dau posibilitatea
% clasificatorului sa invete inclusiv ordinea obiectelor
%preiau datele din fisier si le transform in 80% pentru invatare si 20 %
%pentru testare
xy=preiaDatelePtPrel(fisierulmeu);
lungime=size(xy);
clasa1=xy(1:lungime(1)/4,:);
clasa2=xy(lungime(1)/4+1:2*lungime(1)/4,:);
clasa3=xy(2*lungime(1)/4+1:3*lungime(1)/4,:);
clasa4=xy(3*lungime(1)/4+1:lungime(1),:);
size1=size(clasa1);
size2=size(clasa2);
size3=size(clasa3);
size4=size(clasa4);
clasa1_invatare=clasa1(1:0.8*size1(1),:);
clasa1_test=clasa1(0.8*size1(1)+1:end,:);
clasa2_invatare=clasa2(1:0.8*size2(1),:);
clasa2_test=clasa2(0.8*size2(1)+1:end,:);
clasa3_invatare=clasa3(1:0.8*size3(1),:);

41

clasa3_test=clasa3(0.8*size3(1)+1:end,:);
clasa4_invatare=clasa4(1:0.8*size4(1),:);
clasa4_test=clasa4(0.8*size4(1)+1:end,:);
date_invatare=[clasa1_invatare;clasa2_invatare;clasa3_invatare;clasa4_invatare];
date_testare=[clasa1_test;clasa2_test;clasa3_test;clasa4_test];
%permutare linii
date_invatareperm = permutareLinii(date_invatare);
date_testareperm = permutareLinii(date_testare);
date=[date_invatareperm;date_testareperm];
%salvez datele in alt fisier -fis_testare_random1.txt
calea=strcat(pwd,'\fisiere random\');
fid_scriere=fopen(strcat(calea,'fisier_caracteristici_random.txt'),'w');
%matricea cu parametrii imaginilor cu liniile permutate
%scrierea matricei in noul fisier-fisier_caracteristici_random1.txt
dim1=size(date);
for k1=1:dim1(1)
fprintf(fid_scriere,'%s',date{k1,1});
fprintf(fid_scriere,'\n');
end
fclose(fid_scriere);
Codul Matlab pentru functia preiaDatelePtPrel
function [xa] = preiaDatelePtPrel(fis)
% functie cu care citesc datele dintr-un fisier .txt, linie cu linie
% ca stringuri
numberOfLines = GiveNbOfLines(fis);
fid_imagesLst_app=fopen(fis);
clear xa;
clear ya;
clear nrul;
nr_instante=((numberOfLines-1));
for i = 1:nr_instante
%preluam fiecare linie ca un string si o salvam intr-o matrice de
%stringuri
tline = fgetl(fid_imagesLst_app);
xa{i,1}=tline;
end
fclose(fid_imagesLst_app);
Codul Matlab pentru funcia permutareLinii
function [rez] = permutareLinii(matrice)
% face permutarea liniilor matricei de la intrare; structura lui "matrice"
% ar trebui sa fie : pe linia se gaseste info despre obiectul 1 si tot asa,
% iar pe coloane sunt caracteristicile si clasa obiectelor

42

dim=size(matrice);
rez=matrice(randperm(dim(1)),:);
7.5 Anexa 5
Codul Matlab pentru clasificarea KNN
close all
clear all
clc
%fisierul in care salvam rezultatele clasificarii
calea=strcat(pwd,'/rezultate/');
fis1=fopen(strcat(calea,'rezultateknn.txt'),'w');
calea= strcat(pwd,'/fisiere/');
%fisierul din care preluam vectorul de trasaturi
fisierulmeu=strcat(calea,'fisier_caracteristici.txt');
[x y]=preiaDatelePtPrel(fisierulmeu);
[dim1,dim2]=size(x);
%din parametrii tuturor imaginilor 80% le retinem pentru antrenare si 20%
%pentru testare
number = round(8*dim1/10);
%xapp- matricea de antrenare
xapp=x(1:number,1:dim2-1);
%xtest- matricea de test
xtest=x(number+1:dim1,1:dim2-1);
%yapp- vectorul care contine clasele imaginilor de antrenare
yapp=y(1:number);
%ytest- vectorul care contine clasele imaginilor de testare
ytest=y(number+1:dim1);
timp=0;
accuracy=0;
% facem antrenarea si testarea KNN pentru k=1,3 si 5, unde k=numarul de
% vecini
for k=1:2:5
tic
%clasificatorul KNNC
%computedOutput=knnclassify(xtest,xapp,yapp,k);
% clasificatorul KNNR
DS.input=xapp';
DS.output=yapp';
TS.input=xtest';
knnrParam.k=k;
[computedOutput, combinedComputedOutput, nearestIndex, knnrMat] =...
knnr(DS, TS, knnrParam);
%timpul de clasificare
timp=toc;
accuracy=computeAccuracy(ytest,computedOutput')*100;

43

perf=0.5*timp+0.5*(1-accuracy/100);
%scrierea rezultatelor obtinute in fisier
fprintf(fis1,'%d %.2f %.2f %.2f\n',k,timp,accuracy,perf);
% matricea de confuzie
confusion=confusionmatrix(ytest',computedOutput);
% calculul acuratetii de clasificare pentru fiecare clasa
accuracy_cars=confusion(1,1)/40;
accuracy_persons=confusion(2,2)/40;
accuracy_animals=confusion(3,3)/40;
accuracy_garbage=confusion(4,4)/40;
%scrierea rezultatelor obtinute in fisier
fprintf(fis1,'%.2f %.2f %.2f
%.2f\n',accuracy_cars,accuracy_persons,accuracy_animals,accuracy_garbage);
end;
fclose all;
7.6 Anexa 6
Codul Matlab al aplicaiei GUI
function varargout = licentaexe(varargin)
% LICENTAEXE M-file for licentaexe.fig
%
LICENTAEXE, by itself, creates a new LICENTAEXE or raises the existing
% singleton*.
%
% H = LICENTAEXE returns the handle to a new LICENTAEXE or the handle to
% the existing singleton*.
%
%
LICENTAEXE('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in LICENTAEXE.M with the given input arguments.
%
%
LICENTAEXE('Property','Value',...) creates a new LICENTAEXE or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before licentaexe_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to licentaexe_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help licentaexe
% Last Modified by GUIDE v2.5 03-Jun-2010 12:06:20
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',
mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @licentaexe_OpeningFcn, ...
'gui_OutputFcn', @licentaexe_OutputFcn, ...

44

'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% --- Executes just before licentaexe is made visible.


function licentaexe_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to licentaexe (see VARARGIN)
% afisarea imaginii NO_IMAGE de fiecare data cand aplicatia este rulata
[imagine_init,map]=imread('no_image.jpg');
imshow(imagine_init,map,'parent',handles.axes1);
% Choose default command line output for licentaexe
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes licentaexe wait for user response (see UIRESUME)
% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.
function varargout = licentaexe_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;

% --- Executes on button press in radiobutton3 - masini


function radiobutton3_Callback(hObject, eventdata, handles)
% hObject handle to radiobutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of radiobutton3

45

% --- Executes on button press in radiobutton4 - pietoni


function radiobutton4_Callback(hObject, eventdata, handles)
% hObject handle to radiobutton4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of radiobutton4

% --- Executes on button press in radiobutton5 - animale


function radiobutton5_Callback(hObject, eventdata, handles)
% hObject handle to radiobutton5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of radiobutton5

% --- Executes on button press in radiobutton6 - garbage


function radiobutton6_Callback(hObject, eventdata, handles)
% hObject handle to radiobutton6 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of radiobutton6

function edit1_Callback(hObject, eventdata, handles)


%preluarea procentului de invatare si testare
procent_invatare=str2double(get(handles.edit1,'String'));
if (isnan(procent_invatare)||(procent_invatare<=0)||procent_invatare>100)
errordlg('Introduceti un numar mai mic sau egal cu 100',...
'Error');
else procent_testare=100-procent_invatare;
set(handles.edit2,'String',num2str(procent_testare));
end
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit1 as text
%
str2double(get(hObject,'String')) returns contents of edit1 as a double

% --- Executes during object creation, after setting all properties.


function edit1_CreateFcn(hObject, eventdata, handles)

46

% hObject handle to edit1 (see GCBO)


% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
%
See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit2_Callback(hObject, eventdata, handles)


% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit2 as text
%
str2double(get(hObject,'String')) returns contents of edit2 as a double

% --- Executes during object creation, after setting all properties.


function edit2_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
%
See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit3_Callback(hObject, eventdata, handles)


% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit3 as text
%
str2double(get(hObject,'String')) returns contents of edit3 as a double

% --- Executes during object creation, after setting all properties.


function edit3_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
%
See ISPC and COMPUTER.

47

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))


set(hObject,'BackgroundColor','white');
end

% --- Executes on button press in pushbutton1.


function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
close all

function edit4_Callback(hObject, eventdata, handles)


% preluarea numarului de vecini pentru care sa se clasifice
numar_vecini=str2double(get(handles.edit4,'String'));
if (isnan(numar_vecini)||(numar_vecini<=0))
errordlg('Introduceti un numar intreg de preferabil impar',...
'Error');
end;
% hObject handle to edit4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit4 as text
%
str2double(get(hObject,'String')) returns contents of edit4 as a double

% --- Executes during object creation, after setting all properties.


function edit4_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
%
See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% --- Executes on button press in radiobutton8 - metoda I


function radiobutton8_Callback(hObject, eventdata, handles)
dim_vect=str2double(get(handles.edit8,'String'));
handles.dim_vect=dim_vect;
% vedem daca metoda I va fi folosita
metoda1=get(handles.radiobutton8,'Value');
%calculam si afisam numarul de trasaturi care va compune vectorul de
%caracteristici
if (metoda1==0)

48

dim_vect=handles.dim_vect;
dim_vect=dim_vect-78;
handles.dim_vect=dim_vect;
set(handles.edit8,'String',num2str(dim_vect));
else
dim_vect=handles.dim_vect;
dim_vect=dim_vect+78;
handles.dim_vect=dim_vect;
set(handles.edit8,'String',num2str(dim_vect));
end
% hObject handle to radiobutton8 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of radiobutton8

% --- Executes on button press in radiobutton9 - metoda II


function radiobutton9_Callback(hObject, eventdata, handles)
% vedem daca metoda II va fi folosita
dim_vect=str2double(get(handles.edit8,'String'));
handles.dim_vect=dim_vect;
metoda2=get(handles.radiobutton9,'Value');
%calculam si afisam numarul de trasaturi care va compune vectorul de
%caracteristici
if (metoda2==0)
dim_vect=handles.dim_vect;
dim_vect=dim_vect-78;
handles.dim_vect=dim_vect;
set(handles.edit8,'String',num2str(dim_vect));
else
dim_vect=handles.dim_vect;
dim_vect=dim_vect+78;
handles.dim_vect=dim_vect;
set(handles.edit8,'String',num2str(dim_vect));
end
% hObject handle to radiobutton9 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of radiobutton9

% --- Executes on button press in radiobutton10 - metoda III


function radiobutton10_Callback(hObject, eventdata, handles)
% vedem daca metoda II va fi folosita
dim_vect=str2double(get(handles.edit8,'String'));
handles.dim_vect=dim_vect;
metoda3=get(handles.radiobutton10,'Value');
%calculam si afisam numarul de trasaturi care va compune vectorul de

49

%caracteristici
if (metoda3==0)
dim_vect=handles.dim_vect;
dim_vect=dim_vect-90;
handles.dim_vect=dim_vect;
set(handles.edit8,'String',num2str(dim_vect));
else
dim_vect=handles.dim_vect;
dim_vect=dim_vect+90;
handles.dim_vect=dim_vect;
set(handles.edit8,'String',num2str(dim_vect));
end
% hObject handle to radiobutton10 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of radiobutton10

% --- Executes on button press in radiobutton11 - metoda IV


function radiobutton11_Callback(hObject, eventdata, handles)
% vedem daca metoda II va fi folosita
dim_vect=str2double(get(handles.edit8,'String'));
handles.dim_vect=dim_vect;
metoda4=get(handles.radiobutton11,'Value');
%calculam si afisam numarul de trasaturi care va compune vectorul de
%caracteristici
if (metoda4==0)
dim_vect=handles.dim_vect;
dim_vect=dim_vect-72;
handles.dim_vect=dim_vect;
set(handles.edit8,'String',num2str(dim_vect));
else
dim_vect=handles.dim_vect;
dim_vect=dim_vect+72;
handles.dim_vect=dim_vect;
set(handles.edit8,'String',num2str(dim_vect));
end
% hObject handle to radiobutton11 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of radiobutton11

% --- Executes on button press in pushbutton2 - antrenare si testare KNN


function pushbutton2_Callback(hObject, eventdata, handles)
% toate butoanele disable
disableButtons(handles);

50

% preluarea datelor din fisierul cu vectorul de trasaturi obtinut online


fisier_carac=strcat(pwd,'\fisier_caracteristici.txt');
fid_scriere=fopen(strcat(pwd,'\fisier_caracteristici_random.txt'),'w');
xy = preiaDatelePtrandomizare(fisier_carac);
lungime=size(xy);
% preia valoarea pentru procentul de invatare
procent_invatare=str2double(get(handles.edit1,'String'))/100;
% impartirea fiecarei clase in 80% pentru invatare si 20% pentru testare
% in functie de numarul de clase
if (lungime(1)==400)
clasa1=xy(1:lungime(1)/2,:);
clasa2=xy(lungime(1)/2+1:2*lungime(1)/2,:);
size1=size(clasa1);
size2=size(clasa2);
clasa1_invatare=clasa1(1:round(procent_invatare*size1(1)),:);
clasa1_test=clasa1(round(procent_invatare*size1(1))+1:end,:);
clasa2_invatare=clasa2(1:round(procent_invatare*size2(1)),:);
clasa2_test=clasa2(round(procent_invatare*size2(1))+1:end,:);

date_invatare=[clasa1_invatare;clasa2_invatare];
date_testare=[clasa1_test;clasa2_test];
date_invatareperm = permutareLinii(date_invatare);
date_testareperm = permutareLinii(date_testare);
date=[date_invatareperm;date_testareperm];

elseif (lungime(1)==600)
clasa1=xy(1:lungime(1)/3,:);
clasa2=xy(lungime(1)/3+1:2*lungime(1)/3,:);
clasa3=xy(2*lungime(1)/3+1:3*lungime(1)/3,:);
size1=size(clasa1);
size2=size(clasa2);
size3=size(clasa3);
clasa1_invatare=clasa1(1:round(procent_invatare*size1(1)),:);
clasa1_test=clasa1(round(procent_invatare*size1(1))+1:end,:);
clasa2_invatare=clasa2(1:round(procent_invatare*size2(1)),:);
clasa2_test=clasa2(round(procent_invatare*size2(1))+1:end,:);
clasa3_invatare=clasa3(1:round(procent_invatare*size3(1)),:);
clasa3_test=clasa3(round(procent_invatare*size3(1))+1:end,:);

date_invatare=[clasa1_invatare;clasa2_invatare;clasa3_invatare];
date_testare=[clasa1_test;clasa2_test;clasa3_test];
date_invatareperm = permutareLinii(date_invatare);
date_testareperm = permutareLinii(date_testare);
date=[date_invatareperm;date_testareperm];

51

elseif (lungime(1)==800)
clasa1=xy(1:lungime(1)/4,:);
clasa2=xy(lungime(1)/4+1:2*lungime(1)/4,:);
clasa3=xy(2*lungime(1)/4+1:3*lungime(1)/4,:);
clasa4=xy(3*lungime(1)/4+1:lungime(1),:);
size1=size(clasa1);
size2=size(clasa2);
size3=size(clasa3);
size4=size(clasa4);
clasa1_invatare=clasa1(1:round(procent_invatare*size1(1)),:);
clasa1_test=clasa1(round(procent_invatare*size1(1))+1:end,:);
clasa2_invatare=clasa2(1:round(procent_invatare*size2(1)),:);
clasa2_test=clasa2(round(procent_invatare*size2(1))+1:end,:);
clasa3_invatare=clasa3(1:round(procent_invatare*size3(1)),:);
clasa3_test=clasa3(round(procent_invatare*size3(1))+1:end,:);
clasa4_invatare=clasa4(1:round(procent_invatare*size4(1)),:);
clasa4_test=clasa4(round(procent_invatare*size4(1))+1:end,:);
date_invatare=[clasa1_invatare;clasa2_invatare;clasa3_invatare;clasa4_invatare];
date_testare=[clasa1_test;clasa2_test;clasa3_test;clasa4_test];
date_invatareperm = permutareLinii(date_invatare);
date_testareperm = permutareLinii(date_testare);
date=[date_invatareperm;date_testareperm];
end;
% scrierea datelor in fisierul random
dim1=size(date);
for k1=1:dim1(1)
fprintf(fid_scriere,'%s',date{k1,1});
fprintf(fid_scriere,'\n');
end
% preluarea datelor din fisierul random pentru clasificare KNN
[x y]=preiaDatelePtPrel(strcat(pwd,'\fisier_caracteristici_random.txt'));
[dim1,dim2]=size(x);
number = round(procent_invatare*dim1);
%xapp- matricea de antrenare
xapp=x(1:number,1:dim2-1);
%xtest- matricea de test
xtest=x(number+1:dim1,1:dim2-1);
%yapp- vectorul care contine clasele imaginilor de antrenare
yapp=y(1:number);
%ytest- vectorul care contine clasele imaginilor de testare
ytest=y(number+1:dim1);
%preluare valoare numar vecini
k=str2double(get(handles.edit4,'String'));

52

tic
%clasificare KNNR
DS.input=xapp';
DS.output=yapp';
TS.input=xtest';
knnrParam.k=k;
try
[computedOutput] =knnr(DS, TS, knnrParam);
catch error
disp(error);
errordlg('Numar vecini prea mare sau prea mic setul de date de antrenare',...
'Error');

enableButtons2(handles);
end
% timpul de clasificare KNNR
timp=toc;
% calculare performante
accuracy=computeAccuracy(ytest,computedOutput)*100;
perf=timp*(1-accuracy/100);
% afisarea rezultatelor obtinute in EDITBOX-uri
set(handles.edit5,'String',num2str(accuracy));
set(handles.edit6,'String',num2str(timp));
set(handles.edit7,'String',num2str(perf));
fclose all;
enableButtons2(handles);

% hObject handle to pushbutton2 (see GCBO)


% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

function edit5_Callback(hObject, eventdata, handles)


% hObject handle to edit5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit5 as text
%
str2double(get(hObject,'String')) returns contents of edit5 as a double

% --- Executes during object creation, after setting all properties.


function edit5_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.

53

%
See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit6_Callback(hObject, eventdata, handles)


% hObject handle to edit6 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit6 as text
%
str2double(get(hObject,'String')) returns contents of edit6 as a double

% --- Executes during object creation, after setting all properties.


function edit6_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit6 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
%
See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit7_Callback(hObject, eventdata, handles)


% hObject handle to edit7 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit7 as text
%
str2double(get(hObject,'String')) returns contents of edit7 as a double

% --- Executes during object creation, after setting all properties.


function edit7_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit7 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
%
See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

54

function edit8_Callback(hObject, eventdata, handles)


% hObject handle to edit8 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit8 as text
%
str2double(get(hObject,'String')) returns contents of edit8 as a double

% --- Executes during object creation, after setting all properties.


function edit8_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit8 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
%
See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% --- Executes during object creation, after setting all properties.


function radiobutton8_CreateFcn(hObject, eventdata, handles)
% hObject handle to radiobutton8 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% --- Executes during object deletion, before destroying properties.


function uipanel12_DeleteFcn(hObject, eventdata, handles)
% hObject handle to uipanel12 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% --- Executes during object deletion, before destroying properties.


function radiobutton8_DeleteFcn(hObject, eventdata, handles)
% hObject handle to radiobutton8 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% --- Executes on button press in pushbutton3 - creare vector trasaturi


function pushbutton3_Callback(hObject, eventdata, handles)
disableButtons(handles);
% numarul de clase utilizate pentru crearea vectorului de caracteristici
clasa1=get(handles.radiobutton3,'Value');
clasa2=get(handles.radiobutton4,'Value');
clasa3=get(handles.radiobutton5,'Value');
clasa4=get(handles.radiobutton6,'Value');

55

%verificam sa nu avem selesctata numai o clasa


if (((clasa1) && ~(clasa2) && ~(clasa3) && ~(clasa4))||((clasa2) &&...
~(clasa1) && ~(clasa3) && ~(clasa4))||((clasa3) && ~(clasa1)...
&& ~(clasa2) && ~(clasa4))||((clasa4) && ~(clasa1) && ~(clasa2)...
&& ~(clasa3)))
errordlg('Trebuie sa selectati cel putin doua clase de imagini',...
'Error');
enableButtons1(handles);
end;
currentfolder=pwd;
% in functie de clasele selectate preluam imaginile din directorul
% corespunzator
if ((clasa1)&&(clasa2)&&(~(clasa3))&&(~(clasa4)))
dirImagini={strcat(currentfolder,'\cars\'),...
strcat(currentfolder,'\persons\')};
clasa=[1,2];
elseif ((clasa1)&&(clasa3)&&(~(clasa2))&&(~(clasa4)))
dirImagini={strcat(currentfolder,'\cars\'),...
strcat(currentfolder,'\animals\')};
clasa=[1,3];
elseif ((clasa1)&&(clasa4)&&(~(clasa2))&&(~(clasa3)))
dirImagini={strcat(currentfolder,'\cars\'),...
strcat(currentfolder,'\garbage\')};
clasa=[1,4];
elseif ((clasa1)&&(clasa2)&&(clasa3)&&(~(clasa4)))
dirImagini={strcat(currentfolder,'\cars\'),...
strcat(currentfolder,'\persons\'),strcat(currentfolder,'\animals\')};
clasa=[1,2,3];
elseif ((clasa1)&&(clasa2)&&(clasa4)&&(~(clasa3)))
dirImagini={strcat(currentfolder,'\cars\'),...
strcat(currentfolder,'\persons\'),strcat(currentfolder,'\garbage\')};
clasa=[1,2,4];
elseif ((clasa1)&&(clasa3)&&(clasa4)&&(~(clasa2)))
dirImagini={strcat(currentfolder,'\cars\'),...
strcat(currentfolder,'\animals\'),strcat(currentfolder,'\garbage\')};
clasa=[1,3,4];
elseif ((clasa1)&&(clasa2)&&(clasa3)&&(clasa4))
dirImagini={strcat(currentfolder,'\cars\'),...
strcat(currentfolder,'\persons\'),...
strcat(currentfolder,'\animals\'),...
strcat(currentfolder,'\garbage\')};
clasa=[1,2,3,4];
elseif ((clasa2)&&(clasa3)&&(~(clasa1))&&(~(clasa4)))
dirImagini={strcat(currentfolder,'\persons\'),...
strcat(currentfolder,'\animals\')};
clasa=[2,3];
elseif ((clasa2)&&(clasa4)&&(~(clasa1))&&(~(clasa3)))
dirImagini={strcat(currentfolder,'\persons\'),...
strcat(currentfolder,'\garbage\')};
clasa=[2,4];
elseif ((clasa2)&&(clasa3)&&(clasa4)&&(~(clasa1)))
dirImagini={strcat(currentfolder,'\persons\'),...

56

strcat(currentfolder,'\animals\'),strcat(currentfolder,'\garbage\')};
clasa=[2,3,4];
elseif ((clasa3)&&(clasa4)&&(~(clasa1))&&(~(clasa2)))
dirImagini={strcat(currentfolder,'\animals\'),...
strcat(currentfolder,'\garbage\')};
clasa=[3,4];
end;
% metodele folosite la formarea vectorului de trasaturi
met1=get(handles.radiobutton8,'Value');
met2=get(handles.radiobutton9,'Value');
met3=get(handles.radiobutton10,'Value');
met4=get(handles.radiobutton11,'Value');
metoda=[met1 met2 met3 met4];
handles.metoda=metoda;
numar_clase=size(clasa);
fis=fopen('fisier_caracteristici.txt','w');
tic
% extragerea trasaturilor din imaginile claselor selectate
for i=1:numar_clase(2)
numberOfLines = GiveNbOfLines(strcat('Lista.txt'));
fid_imagesLst=fopen(strcat('Lista.txt'));
for j=1:numberOfLines-1
imgName = numeImagine(fid_imagesLst);
% citesc imaginea, o transformam din color in gray
[imagine] = imread(strcat(dirImagini{i},imgName),'png');
imagine = im2double(imagine);
imagine=rgb2gray(imagine);
% aplicarea metodelor selectate asupra imaginilor din clasele selectate
vect_caract=extractie_vect_trasaturi(met1,met2,met3,met4,imagine);
clear imagine;
% salvam rezultatul in fisier
lungime=size(vect_caract,2);
for k=1:lungime
fprintf(fis,'%.3f,', vect_caract(k));
end;
fprintf(fis,'%d%c\n',clasa(i),',');
end;
progressbar(i/numar_clase(2));
end;
% timpul de extragere a caracteristicilor
timp=toc;
timestr = sec2timestr(timp);
% afisare timp
set(handles.edit9,'String',timestr);
enableButtons2(handles);
set(handles.radiobutton12,'Enable','on');
set(handles.radiobutton13,'Enable','on');

57

set(handles.pushbutton2,'Enable','on');
handles.output=hObject;
guidata(hObject, handles);
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

function edit9_Callback(hObject, eventdata, handles)


% hObject handle to edit9 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit9 as text
%
str2double(get(hObject,'String')) returns contents of edit9 as a double

% --- Executes during object creation, after setting all properties.


function edit9_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit9 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
%
See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function disableButtons(handles)
%change the mouse cursor to an hourglass
set(handles.figure1,'Pointer','watch');
%disable all the buttons so they cannot be pressed
set(handles.edit1,'Enable','off');
set(handles.edit4,'Enable','off');
set(handles.pushbutton1,'Enable','off');
set(handles.pushbutton2,'Enable','off');
set(handles.pushbutton3,'Enable','off');
set(handles.radiobutton3,'Enable','off');
set(handles.radiobutton4,'Enable','off');
set(handles.radiobutton5,'Enable','off');
set(handles.radiobutton6,'Enable','off');
set(handles.radiobutton8,'Enable','off');
set(handles.radiobutton9,'Enable','off');
set(handles.radiobutton10,'Enable','off');
set(handles.radiobutton11,'Enable','off');
function enableButtons1(handles)

58

%change the mouse cursor to an arrow


set(handles.figure1,'Pointer','arrow');
%enable all the buttons so they can be pressed
% set(handles.edit1,'Enable','on');
% set(handles.edit4,'Enable','on');
set(handles.pushbutton1,'Enable','on');
set(handles.pushbutton2,'Enable','on');
set(handles.pushbutton3,'Enable','on');
set(handles.radiobutton3,'Enable','on');
set(handles.radiobutton4,'Enable','on');
set(handles.radiobutton5,'Enable','on');
set(handles.radiobutton6,'Enable','on');
set(handles.radiobutton8,'Enable','on');
set(handles.radiobutton9,'Enable','on');
set(handles.radiobutton10,'Enable','on');
set(handles.radiobutton11,'Enable','on');
function enableButtons2(handles)
%change the mouse cursor to an arrow
set(handles.figure1,'Pointer','arrow');
%enable all the buttons so they can be pressed
set(handles.edit1,'Enable','on');
set(handles.edit4,'Enable','on');
set(handles.pushbutton1,'Enable','on');
set(handles.pushbutton2,'Enable','on');
set(handles.pushbutton3,'Enable','on');
set(handles.radiobutton3,'Enable','on');
set(handles.radiobutton4,'Enable','on');
set(handles.radiobutton5,'Enable','on');
set(handles.radiobutton6,'Enable','on');
set(handles.radiobutton8,'Enable','on');
set(handles.radiobutton9,'Enable','on');
set(handles.radiobutton10,'Enable','on');
set(handles.radiobutton11,'Enable','on');

% --- Executes on button press in pushbutton4 - preia imagine pentru


% clasificare
function pushbutton4_Callback(hObject, eventdata, handles)
% preluare imagine noua pentru clasificarea ei pe baza fisierului implicit
% sau obtinut online
cla(handles.axes1,'reset');
try
[imagine_init,map]=imread('no_image.jpg');
imshow(imagine_init,map,'parent',handles.axes1);
[filename, pathname] = uigetfile({'*.png';'*.jpg';'*.bmp';'*.*'}, 'Pick an Image File');
S = imread([pathname,filename]);
imshow(S,[0 255]);
handles.S = S;
catch error

59

disp(error);
selection=questdlg('Nu a fost selectata nici o imagine.Stop proces?',...
'Stop process',...
'Yes','No','Yes');
switch selection,
case 'Yes'
[imagine_init,map]=imread('no_image.jpg');
imshow(imagine_init,map,'parent',handles.axes1);
set(handles.pushbutton5,'Enable','off');
return
case 'No'
pushbutton4_Callback(hObject, eventdata, handles);
return
end;
set(handles.pushbutton5,'Enable','on');
end;
set(handles.pushbutton5,'Enable','on');
handles.output=hObject;
guidata(hObject, handles);

% hObject handle to pushbutton4 (see GCBO)


% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% --- Executes on button press in pushbutton5 - clasifica imagine


function pushbutton5_Callback(hObject, eventdata, handles)
S=handles.S;
S=im2double(S);
S=rgb2gray(S);
% fisier online sau implicit?
stare12=get(handles.radiobutton12,'Value');
stare13=get(handles.radiobutton13,'Value');
% in functie de optiunea selectata extrage caracteristicile de pe noua
% imagine si o clasifica
if (stare12)
tic
% extragere trasaturi
vect_caracteristici=extractie_vect_trasaturi(1,0,1,1,S);
timp1=toc;
set(handles.text41,'String',strcat(num2str(timp1),' s'));
%preia datele din fisierul implicit
[x y]=preiaDatelePtPrel(strcat(pwd,...
'\fisier_caracteristici_random_implict.txt'));
tic
% computedOutput=knnclassify(double(vect_caracteristici),xapp,yapp,1);
dim1=size(x);
x=x(:,1:dim1(2)-1);
% clasificare KNNR

60

DS.input=x';
DS.output=y';
TS.input=double(vect_caracteristici)';
knnrParam.k=1;
[computedOutput] =knnr(DS, TS, knnrParam);
% timp clasificare
timp2=toc;
% afisarea rezultatelor obtinute - clasa, timp extractie trasaturi,
% timp clasificare
set(handles.text42,'String',strcat(num2str(timp2),' s'));
if (computedOutput==1)
clasa='Masini';
elseif (computedOutput==2)
clasa='Pietoni';
elseif (computedOutput==3)
clasa='Animale';
elseif (computedOutput==4)
clasa='Garbage';
end;
set(handles.text43,'String',clasa);
%
elseif (stare13)
tic
% extragerea trasaturilor noii imagini prin metodele selectate pentru
% formarea fisierului online
metoda=handles.metoda;
vect_caracteristici=extractie_vect_trasaturi(metoda(1),metoda(2),...
metoda(3),metoda(4),S);
% timp extractie trasaturi
timp1=toc;
set(handles.text41,'String',strcat(num2str(timp1),' s'));
% preia datele din fisierul obtinut online pentru clasificare
[x y]=preiaDatelePtPrel(strcat(pwd,'\fisier_caracteristici_random.txt'));
tic
% computedOutput=knnclassify(double(vect_caracteristici),xapp,yapp,1);
dim1=size(x);
x=x(:,1:dim1(2)-1);
% clasificare KNNR
DS.input=x';
DS.output=y';
TS.input=double(vect_caracteristici)';
knnrParam.k=1;
[computedOutput] =knnr(DS, TS, knnrParam);
% timp clasificare KNNR
timp2=toc;
% afisare timp clasificare in EDITBOX-ul aferent
set(handles.text42,'String',strcat(num2str(timp2),' s'));
% stabilirea clasei din care face parte imaginea de test
if (computedOutput==1)
clasa='Masini';
elseif (computedOutput==2)
clasa='Pietoni';

61

elseif (computedOutput==3)
clasa='Animale';
elseif (computedOutput==4)
clasa='Garbage';
end;
set(handles.text43,'String',clasa);
end;

guidata(hObject, handles);
% hObject handle to pushbutton5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% --- Executes on button press in radiobutton12 - fisier implicit


function radiobutton12_Callback(hObject, eventdata, handles)
%setarea starilor ridiobutoanelor 12 si 13
stare13=get(handles.radiobutton13,'Value');
stare12=get(handles.radiobutton12,'Value');
if (stare12)
set(handles.radiobutton13,'Value',0);
elseif (stare13)
set(handles.radiobutton12,'Value',0);
elseif (~(stare12))
set(handles.radiobutton13,'Value',1);
end;
% hObject handle to radiobutton12 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of radiobutton12

% --- Executes on button press in radiobutton13 - fisier obtinut online


function radiobutton13_Callback(hObject, eventdata, handles)
%setarea starilor ridiobutoanelor 12 si 13
stare13=get(handles.radiobutton13,'Value');
stare12=get(handles.radiobutton12,'Value');
if (stare13)
set(handles.radiobutton12,'Value',0);
elseif (stare12)
set(handles.radiobutton13,'Value',0);
elseif (~(stare13))
set(handles.radiobutton12,'Value',1);
end;

% hObject handle to radiobutton13 (see GCBO)


% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

62

% Hint: get(hObject,'Value') returns toggle state of radiobutton13


Codul Matlab pentru metodele de extragere folosite n aplicaia GUI
function [vect_caracteristici1]=metoda1(imagine)
vect_wavelet=compresie_wavelet(imagine,3,'bior1.3');
% metoda I
% aplicare CombFirst4Moments, MultiscaleHistograms, TamuraTextures
% asupra transformatei wavelet a imaginii
first4moments = CombFirst4Moments(vect_wavelet);
multiscalehist = MultiScaleHistograms(vect_wavelet);
TamuraFeatures = TamuraTextures(vect_wavelet);
vect_caracteristici1=[first4moments,multiscalehist,...
TamuraFeatures];
clear first4moments;
clear multiscalehist;
clear TamuraFeatures;
function [vect_caracteristici2]=metoda2(imagine)
% aplicare fft asupra imaginii originale
% metoda II
fftTrans=FourierTransform(imagine);
% % aplicare CombFirst4Moments, MultiscaleHistograms, TamuraTextures
% % asupra transformatei wavelet a transformatei FFT
vect_wavelet=compresie_wavelet(fftTrans(:,:,1),3,'bior1.3');
first4moments = CombFirst4Moments(vect_wavelet);
multiscalehist = MultiScaleHistograms(vect_wavelet);
TamuraFeatures = TamuraTextures(vect_wavelet);
vect_caracteristici2=[first4moments,multiscalehist,...
TamuraFeatures];
clear first4moments;
clear multiscalehist;
clear TamuraFeatures;
function [vect_caracteristici3]=metoda3(imagine)
% % metoda III
% % aplicate CombFirst4Moments, MultiscaleHistograms, TamuraTextures si
% % transformata Radon asupra imaginii originale
first4moments = CombFirst4Moments(imagine);
multiscalehist = MultiScaleHistograms(imagine);
TamuraFeatures = TamuraTextures(imagine);
radonTrans = RadonTransformStatistics(imagine);
vect_caracteristici3=[first4moments,multiscalehist,...
TamuraFeatures,radonTrans];
clear first4moments;
clear multiscalehist;
clear TamuraFeatures;
clear radonTrans;

63

function [vect_caracteristici4]=metoda4(imagine)
% metoda IV
% % aplicare Zernike polinomials asupra imaginii originale
zvalues = ZernikePolynomials(imagine)*1000;
vect_caracteristici4=zvalues;
clear zvalues;
Codul Matlab pentru extracia trsturilor din fiecare imagine n funcie de metodele alese n
aplicaia GUI
function [vect_caract]=...
extractie_vect_trasaturi(met1,met2,met3,met4,imagine)
% met1 - 0 1 daca metoda I este folosita pentru formarea vectorului de
% trasaturi
% met2 - 0 1 daca metoda II este folosita pentru formarea vectorului de
% trasaturi
% met3 - 0 1 daca metoda III este folosita pentru formarea vectorului de
% trasaturi
% met4 - 0 1 daca metoda IV este folosita pentru formarea vectorului de
% trasaturi
% vect_caract- vectorul de caracteristici obtinut in urma plicarii
% metodelor de extractie asupra imainii
if ((met1)&&(~(met2))&&(~(met3))&&(~(met4)))
vect_caract=metoda1(imagine);
elseif ((met2)&&(~(met1))&&(~(met3))&&(~(met4)))
vect_caract=metoda2(imagine);
elseif ((met3)&&(~(met1))&&(~(met2))&&(~(met4)))
vect_caract=metoda3(imagine);
elseif ((met4)&&(~(met1))&&(~(met2))&&(~(met3)))
vect_caract=metoda4(imagine);
elseif ((met1)&&(met2)&&(~(met3))&&(~(met4)))
vect_caract=[metoda1(imagine),metoda2(imagine)];
elseif ((met1)&&(met3)&&(~(met2))&&(~(met4)))
vect_caract=[metoda1(imagine),metoda2(imagine)];
elseif ((met1)&&(met4)&&(~(met2))&&(~(met3)))
vect_caract=[metoda1(imagine),metoda4(imagine)];
elseif ((met2)&&(met3)&&(~(met1))&&(~(met4)))
vect_caract=[metoda2(imagine),metoda3(imagine)];
elseif ((met2)&&(met4)&&(~(met1))&&(~(met3)))
vect_caract=[metoda2(imagine),metoda4(imagine)];
elseif ((met3)&&(met4)&&(~(met1))&&(~(met2)))

64

vect_caract=[metoda3(imagine),metoda4(imagine)];
elseif ((met1)&&(met2)&&(met3))
vect_caract=[metoda1(imagine),metoda2(imagine),...
metoda3(imagine)];
elseif ((met1)&&(met2)&&(met4)&&(~(met3)))
vect_caract=[metoda1(imagine),metoda2(imagine),...
metoda4(imagine)];
elseif ((met1)&&(met3)&&(met4)&&(~(met2)))
vect_caract=[metoda1(imagine),metoda3(imagine),...
metoda4(imagine)];
elseif ((met2)&&(met3)&&(met4)&&(~(met1)))
vect_caract=[metoda2(imagine),metoda3(imagine),...
metoda4(imagine)];
elseif ((met1)&&(met2)&&(met3)&&(met4))
vect_caract=[metoda1(imagine),metoda2(imagine),...
metoda3(imagine),metoda4(imagine)];
end;

65

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