You are on page 1of 74

Cuprins

1. Introducere.......................................................................................................................3
2. Recunoasterea fetei (vedere de ansamblu)......................................................................4
2.1. Aplicatii.....................................................................................................................4
2.2.Solutii.........................................................................................................................5
2.2.1. Analiza Karrhunen-Loeve (Eigenfaces)............................................................5
2.2.2.Metodele de baza de caracateristica vectoriala...................................................5
2.2.3. Modele deformabile...........................................................................................5
2.2.4. Machete bazate pe vederi multiple....................................................................5
2.2.5. Unduieli.............................................................................................................5
2.2.6. Alte Programe....................................................................................................6
2.3. Rezultate...................................................................................................................6
3. Faze ale recunoasterii fetei..............................................................................................6
3.1. Achizitia de imagine.................................................................................................6
3.2. Prelucrarea caracteristicilor......................................................................................6
3.3. Segmenatrea..............................................................................................................6
3.4. Extractia caracteristica..............................................................................................7
3.5. Cautare in baza de date.............................................................................................7
4. Achizitia de imagine........................................................................................................7
4.1. Dispozitiv de captura................................................................................................7
4.2. Conditii esentiale ambientale....................................................................................8
5. Prelucrarea imaginii.........................................................................................................9
5.1. Filtre de netezire.......................................................................................................9
5.1.1.Filtru mediu........................................................................................................9
5.1.2.Filtru median.....................................................................................................10
5.1.3.Segmentarea Reddi...........................................................................................11
5.1.4.Generalizarea segmentatiei Reddi.....................................................................11
5.2. Detectarea de muchie..............................................................................................12
5.2.1.Detectarea de muchie Prewitt...........................................................................12
5.2.2.Detectarea de muchie Sobel..............................................................................13
5.2.3.Detectarea de muchie SUSAN..........................................................................13
5.3.Egalarile de histograma...........................................................................................14
5.4.Segmentarea culorii de baza....................................................................................15
5.5. Transformarea morfologica....................................................................................15
6. Segmentarea...................................................................................................................17
6.1. Primul pas. Culoarea bazata pe regiuni selectate....................................................18
6.2 Prelucrarea anticipata a formei fetei........................................................................21
6.2.1 Selecteaza mai complet umplutura regiuniei,...................................................21
6.2.2 Minimalizarea regiuni de interes......................................................................27
6.3 Sporirea bazata pe intensitati ale conturului fetei....................................................29
6.3.1 Aproximarea fetei.............................................................................................30
6.3.2 Producerea celei de a doua fete........................................................................31
6.3.3 Concluzii ale acestei abordari...........................................................................33
6.4 Largirea conturului fetei bazata pe profilul lateral..................................................34

1
6.4.1 Aflarea profilului lateral folosind metoda SUSAN..........................................34
6.4.2 Selectarea regiuni..............................................................................................38
6.4.3 Netezirea conturului..........................................................................................40
7. Extragerea caracteristicilor............................................................................................43
7.1. Caracteristici în funcţie de distanţă şi raţie.............................................................43
7.1.1 Detectarea sprâncenelor....................................................................................43
7.1.2 Detectarea ochilor.............................................................................................43
7.1.3 Detectarea nasului.............................................................................................44
7.1.3 Detectarea gurii.................................................................................................44
7.1.5 Modelarea conturului feţei................................................................................44
7.2. Alte caracteristici....................................................................................................45
7.2.1. Proprietăţi geometrice......................................................................................45
7.2.2. Transformări Fourier şi transformări Fourier discrete.....................................48
7.2.3. Transformările Cosine discrete........................................................................49
7.3. Decompresie wavelet a imaginilor feţei.................................................................51
7.4. Probleme în extragerea caracteristicilor.................................................................52
8. Căutarea în baza de date................................................................................................53
8.1. Abordări pentru căutarea feţelor.............................................................................53
8.2. Identificare folosind distanţele de caracteristici.....................................................54
9. Ghidul de aplicaţie segmentat........................................................................................55
9.1. Detalii ale implementării........................................................................................55
9.1.1. Interfaţa utilizator............................................................................................56
9.1.2 Capturarea video...............................................................................................56
9.1.3. Rutine de procesare a imaginii........................................................................56
9.2. Mini Ghidul utilizator.............................................................................................57
10. Concluzii şi îmbunătăţiri ulterioare.............................................................................58
Referinţe............................................................................................................................61
Anexa A - Algoritmi Matlab..............................................................................................63
Anexa B - Iniţializarea DirectX.........................................................................................68

2
1. Introducere
Recunoasterea automata a fetei umane este o problema foarte complexa rezolvata
de oameni cu o pereche de senzori foarte complex- ochii, si cu procesorul lor principal
creierul.Rezultatul de recunoastere a identitatii folosind sisteme automate este un process
foarte complex, deoarece mecanismele folosite de creierul nostru pentru a le rezolva sunt
inca insufficient cunoscute.

Proiectul de recunoastere a fetei in care eu sunt implicat a fost inceput in Martie


2001, ca proiect oferit de Motorola Inc. (DALT. 2.4/2001) Membrii echipei au fost s.1.
ing. Mihai V. Micea, prof. dr. ing.Vladimir Cretu, assist. Lucian Prodan si eu. Proiectul a
inceput ca o cerceare referitoare la recunoasterea fetei umane. Dupa patru luni de
cercetare si munca noi am dezvoltat o aplicatie Pc-based si un raport tehnic reprezentand
rezultatele. Aplicatia a fost un prototip avand principala propunere de a testa algoritmi de
recunoastere umana cu ajutorul fetei. Aplicatia foloseste o imagine de la camera web; de
la preluarea imaginii el a extras caracteristicile figurii, si acestea le-a comparat cu vectorii
caracteristici memorati in baza de date a aplicatiei. Rezultatul aplicatiei este imaginea
capturata, marcata de pozitia caracteristicilor fetei (Figura 1) si recunoasterea identitatii
persoanei in cazul in care caracteristicile sunt correct detectate. Aplicatia presupune un
fundal monocrom si unele schimbari in conditiile ambientale.

Figura 1. Aplicatie test a proiectului DALT.2.4/2001

3
Rezultatele aplicatiei au fost acceptabile: tastand intr-o baza de date cu 10-20
oameni, raportul de recunoastere a fost aproximativ de 80-90%. Noi am identificat niste
probleme pe care ne-am propus sa le eliminam in viitor. Aceste probleme sunt:
dependenta de mediul inconjurator, calitatea modesta a fotografiei capturata, algoritmi
precari pentru detectia unor caracteristici si nevoia de fundal monocrom.
Aceasta munca infatiseaza rezultatul obtinut in ultimul an. Cea mai importanta
parte este focalizarea fetei, separatea acesteia de imaginea fundalului si alegera
rezultatului correct dar pe scurt infatisarea intregului process de recunoastere a fetei de la
imaginea capturata, prin la extragerea caracteristicilor corespunzatoare figurii pana la
identificarea subiectului.
Urmatoarele capitole sunt structurate dupa cum urmeaza: Capitolul 1 prezinta
introducerea cititorului la recunoasterea fetei si prezinta cateva din solutiile prezentului.
Capitolul 2 pe scurt prezinta fazele recunoasterii. Fiecare capitol de la 3 la 7 prezinta una
din fazele: Achizitia de imagine, procesarea, localizarea fatei cu segmentare de imagine,
extragerea caracteristicilor si cautarea in baza de date. Capitolul 8 prezinta aplicatia ce a
fost scrisa sa testeze fazele descoperite si prezentarea in fazale anterioare, in special
segmentarea. Si in cele din urma capitolul 9 ce contine concluziile luate.

2. Recunoasterea fetei (vedere de ansamblu)


2.1. Aplicatii
Recunoasterea fetei este o aplicatie potrivita in multe inca nerezolvate sau
nerezolvate optim probleme. Aplicatia de baza a acesteia se regaseste in camprile
urmatoare:
Jurnalul de logare sistemelor:
Multe corporatii si institutii vor sa verifice activitatea angajatilor. Aceasta de
obicei se face manual sau folosind carduri magnetice bazat pe un sistem cand angajatul
ajunge sau paraseste zona de lucru. Aceasta este o solutie viabila, dar are lipsurile ei:
procesul de logare poate fi uitat, poate fi inselat si are nevoie de materiale extra pentru a
fi facut (carduri magnetice personalizate, carte pentru logare – ce sa planifice). Aceasta
logare poate fi integrata cu un sistem de detectie a fetei, care, fara nici o nevoie externa si
cu o reducere consistenta de vulnerabilitate poate determina cine intra sau iasa din spatiul
supravegheat folosind o singura camera, ce probabil este deja instalata pentru scopul
propus.
Identificarea persoanelor disparate sau a criminalilor
Sistemul de recunoastere a fetei poate fi instalat intr-un spatiu public, pentru a
identifica oameni disparuti sau cautati.Desi la ora actuala nu lucreaza foarte bine, exista
deja doua sisteme pentru aceasta propunere in orasul de noapte Ybor City la Tampla (Fl.) si
la Oceanfront din Virginia Beach.
Securitatea cladirilor
Recunoasterea fetei poate fi folosita(si a fost deja incercata la aeroportul
international Palm Beach ) pentru verificare de siguranta: la personalul angajat si la
pasagerii din aeroporturi acestia pot fi verificati, in armata sau guvern se pot verifica
persoanele care vor sa intre.
Cautarea bazei de date existente
Registrul prezent si bazele de date de recunoastere de fete umane ar trebui sa fie

4
in intregime automatizate.
Securitatea ATM
Solutiile multor banci, ATM-urile si altor aplicatii critice de siguranta ar putea
cere recunoasterea fetei in masura in care acum se cer parole.
Interfata om/computer
Statiile de lucru ar trebui sa poata sa recunoasca utilizatorii sau ar trebui sa
captureze infatisarea utilizatorului, eliminand nevoia de lucru manual de calitate precisa.

2.2.Solutii
Solutiile problemelor de mai sus sunt prezentate in multe moduri partiale. Acestea
se schimba de la constrangeri la constrangeri. Nu exista o metoda generala aplicabila.
Una dintre modurile folosite sau propuse sunt prezentate in urmare.

2.2.1. Analiza Karrhunen-Loeve (Eigenfaces)


Modul eigenfaces este o metoda des folosita si devreme implementata. Este bazat
pe analiza fetei intr-o baza de figuri, calculata de la imaginile bazei de date. Figura
necunoscuta este scrisa ca suma importanta de baza a imaginilor. Importanta va
caracteriza figura din imagine.
LILU98 propune o analiza de nivel al doilea. Scopul lor este sa imbunatateasca
recunoasterea fetei sub o noua conditie, nu obtinuta prin prototipuri in mod coerent. Ei
sugereaza folosirea combinatiei nivelului al doilea al prototipurilor liniare apartinand
aceleasi clase de figure, pentru a trata prototipurile coerent.

2.2.2.Metodele de baza de caracateristica vectoriala


In LIAO00 doua filtre Gabor bazate pe caracteristica vectorilor sunt prezentate
modurile. Dupa ce fetele au fost localizate tranformarile Gabor sunt aplicate regiunilor
caracteristice.

2.2.3. Modele deformabile


Modelele deformabile sunt construite de mana de la curbe parametrice cu contur
caracteristic. Un process de minimizare a functiilor energetice da valoarea parametriilor,
caracterizand fata.

2.2.4. Machete bazate pe vederi multiple


BEYM93 prezinta o fata cu machete de la modelul vederilor multiple care
acopera poze diferite ale sferei. Poza fetei detectata foloseste un mod piramidal de nivel
5. Fiecare nivel da o aproximatie mai buna caracteristicilor pozitiei. Dupa ce poza este
evaluata, fetele pereche sunt determinate comparand transformarea de afin – conformand
poza – regiunilor relevante ale imaginii.

2.2.5. Unduieli
In MENG00 un mod bazat pe unduieli este prezent. Vectorii extrasi sunt clasificati
intr-un model Hidden Markov. Este demonstrate ca rezultatele sunt unduieli fata de
metodele conventionale ale machetei.
In GARC99b si GARC00 este prezenta o metoda care extrage saisprezece unde

5
intr-o descompunere de nivel doi. Trasaturile fetei sunt localizate utilizand aceste unde.
Vectorul fetei este obtinut de la valorile regiunilor statistice.

2.2.6. Alte Programe


In o poza este prezentata o apreciere FANS00. Prelucrarea fetei se incheie dupa
ce fata si trasaturile sunt localizate si informatia este folosita pentru a evalua poza.
Un sistem de retea neuronal este prezentat in ROWL99. Sistemele de neuron
incearca sa simuleze procesele competente ale creierului uman. Deoarece procesul de
competenta complexa este dificil de simulate.
Un mod statistic cu clase separabile este prezentat in NAGA00.
In ZHAO00 autorii folosesc informatia conturului extrasa din umbre si simetria
fetei in scop de recunoastere.

2.3. Rezultate
Solutiile existente functioneaza in circumstante limitate. Exista relatate 80% -
90% succese recunoscute. Desi este un procentaj mare, niciuna dintre metodele cunoscute
este acceptata ca o solutie viabila si generala. Putinele aplicatii functionabile in viata
reala prezinta greseli mari, rezultatele lor sunt nesemnificative.

3. Faze ale recunoasterii fetei


Complexitatea problemei de recunoastere a fetei inseamna ca trebuie sa fie
divizata in mai multe faze simple. Aceste faze sunt studiate impartite, si rezultatul lor este
unit la punctual de intalnire dintre ele. Fiecare faza contine una sau mai multe informatii
prelucrand pasi, care transforma faza de intrare in rezultatul dorit, daca transfromarea
poate fi realizata.

3.1. Achizitia de imagine


Aceasta faza capteaza ilustratiile folosind dispozitive de capturare periferice.
Imaginea poate fi obtinuta din mai multe surse.
Exista moduri evidente pentru a obtine imagini digitale: scanarea unei poze facuta
de un aparat de fotografiat, imaginile dinamice sau statice salvate de web-cam,
fotografierea cu camera de filmat de inalta calitate, sau folosind alte surse (ex: zgarieturi
manuale, imagini vopsite si rezultatele de la alte imagini digitale).

3.2. Prelucrarea caracteristicilor


Dupa ce o imagine este disponibila, cativa pasi de prelucrare sunt bine veniti.
Acesti pasi garanteaza o prelucrare mai simpla in fazele urmatoare. Prelucrarea
caracteristicilor reduce de obicei erorile imaginilor, ei aplica culoarea si histograma
prelucrata. Rezultatul imaginilor interpretate usor de catre oameni ori sunt prelucrate
simplu in urmatorii pasi automati pregatiti.

3.3. Segmenatrea
In recunoasterea fetei, dar si in alte imagini sunt probleme de prelucrare, este
importanta segmentarea imaginilor in complementarea regiunilor si in fundal, sau pentru
a separa imaginea in obiecte cunoscute si examinate. Segmenatrea este o faza importanta,

6
deoarece poate sa hotarasca daca informatia utila este extrasa sau este ignorata: fazele
urmatoare pot fi compromise cu usurinta daca acest pas nu face treaba exacta. Dar
folosirea acestui pas poate reduce la extreme urmatoarele faze prelucrate cu effort.

3.4. Extractia caracteristica


Caracteristicile imaginii sunt un set de valori statistice determinate de valori de
stil. Caracteristicile pot fi distantate intre doua puncte, suprafetele regiunilor, lungimile
perimetrelor, centrul masei, momentele, regiuni limitate, etc, sau pot fi rezultate din
altele, parametrii transformati aplicati local sau global. Este importanta alegerea
caracteristicilor deoarece sunt folosite in clasificarea proceselor: un rezultat rau rezulta o
identificare rea si un rezultat bun determina o metoda usora, simpla si exacta de
identificat. Dupa ce sunt extrase caracteristicile, acestea trebuie sa fie ordonate intr-o
forma coerenta, ce poate descrie cu precizie o figura, poate compara parametrul stability
pentru a determina daca reprezinta aceasi persoana sau daca nu este aceasi persoana, sau
poate determina daca fata este in baza de date existenta.

3.5. Cautare in baza de date


Acest pas este principalul scop al prelucrarii. Aceasta depinde de model, dar de
obicei este o verificare secventiala a fetelor pentru fiecare persoana disponibila din baza
de date, urmata de alegerea identitatii celei mai similare cu imaginea interesata. Daca
setul ales are o asemanare mai mare dacat minimul pragului atunci imaginea corespunde
imaginii alese din aza de date. Daca similaritatea ii sub prag , rezulta ca imaginea curenta
nu corespunde nici unei identitati cunoscute din baza de date.

4. Achizitia de imagine
4.1. Dispozitiv de captura
Achizitia de imagine este primul pas al procedurii prelucrarii imaginii. Fotografia
de intrare trebuie sa fie de format digital, care poate fi obtinuta din mai multe surse.
Cel mai simplu si ieftin mod de a obtine o imagine digitala este de a scana poza
unui aparat de fotografiat normal cu hartia de scaner ieftina si de calitate din zilele
noastre. Aceasta metoda este simpla, ieftina si rezulta o imagine digitala de calitate buna,
dar principalul dezavantaj este timpul prelucrarii pozelor extrem de mult pana ajunge la
imagine digitala.
Dezavantajul timpului lung al capturarii poate fi inlaturat folosind echipament
capabil de a obtine fotografii in format electronic. Dispozitivul cel mai des folosit de
aceasta categorie este camera web. Aceasta poate capta in format digital ori fotografii sau
filme (succesiuni de fotografii). Rezolutia camerelor web este de obicei mai rea decat a
fotografiilor scanate. Calitatea imaginii (semnal/marja de eroare, acuratetea culoriilor)
este in general rea, deoarece senzorii CMOS ieftini care sunt folositi inautrul acestor
aparate de fotografiat – desi exista niste aparate de fotografiat CCD capabile pentru a
captura imagini de calitate buna, dar totusi rezolutia lor este mica.
Avansarile tehnicii in echipamente digitale permit folosirea eficienta a
dispozitivelor video. Aparatele analogice de fotografiat mai vechi, cu un card care obtine
o imagine video de calitate buna permite o viteza de capturare mai mare (de obicei

7
standard PAL 25Hz sau NTSC 29.999Hz TV semnal cadre/secunda ) si o calitate buna a
fotografiei. Noile camere complet digitale permit o viteza superioara si performanta de
calitate. Senzorii CMOS- cu calitate medie- sau CCD –cu calitate mai buna- captureaza
imaginile reale direct in format digital. Dispozitivele pot stoca imaginea in format digital,
sau o pot transfera prin o largime de banda inalta la alt echipament digital (ca un
computer personal).
Deoarece noi credem ca o calitate buna a imaginii imbunatateste rezultatul in
aceasta lucrare folosind pentru captura camera digitala cu rezolutia standard 720x576
PAL.
Aparatele de fotografiat digitale sunt o tehnologie noua si au o dezvoltare rapida a
dispozitivelor de capturare. Acestea difera in rezolutia dispozitivelor pentru generarea
semnalelor – senzorii lor sunt CCD, camera cu senzori CMOS sunt considerate
echivalente cu cele din categoria camerelor web. Aparatele de fotografiat bune sunt
considerate cele care au peste 3 mega-pixeli. Acestea pot fi folosite pentru capturarea
fotografiilor, in sistem digital, daca au o interfata corespunzatoare. Acest lucru este
satisfacut de 99% dintre aparatele de fotografiat: au cel putin unul in serie, fire-wire,
analogic (compozita), sau cea mai frecventa interfata USB.

4.2. Conditii esentiale ambientale


Conditia ambientala a achizitii de imagine au multe influente asupra algoritmilor
folositi in pasii urmatori. Daca nu asigura conditiile satisfacator, atunci imaginea
capturata poate fi inutilizabila (ultima poza de la Figura 2 este prea intunecoasa).
Algoritmii aplicati au unele nevoi, mai mult, pot functiona numai in conditii limitate, care
trebuie sa fie bine definite. Modul nostru de anul trecut implica o imagine cu fundal
uniform. Aceasta conditie esentiala a facut posibila folosirea unor algoritmi simpli pentru
a gasi o fata intr-o poza. Alta conditie este lumina. Presupunem ca lumina cade in spatele
si deasupra fetei.

Figura 2. Schimbarea luminii. In mediu ambiental intunecos, aparatul de fotografiat nu poate executa o
poza de calitate buna. Daca imaginea capturata nu este marita, apoi nu poate fi folosita

8
In aceasta lucrare am stabilt sa cerem conditii diferite, mai putine constrangeri,
mai simplu de realizat si ma bine definite. Conditiile sunt urmatoarele:
- Fata este descoperita
- Fata acopera mai mult de 40% din poza
- Aparatul de fotografiat este
- Subiectul identificat are tenul deschis la culoare (alb, galben sau masliniu)
- Existenta sau absenta parului nu conteaza
- Fata persoanei este fara barba
- Mustata este posibila
- Va fi luata in considerare cea mai mare fata
- Capul este drept in pozitia verticala normala, cu ochii fixati la aparatul de
fotografiat
- Aparatul de fotografiat este la nivelul ochiilor
- Sursa luminii este in spatele si deasupra capului, in linie cu capul si aparatul

Consecintele conditiei se intrebuinteaza in diferiti pasi ai prelucrarii si sunt luati


in considerare ca asigurare pentru ambianta. Daca ambianta este insuficienta pentru
aceste conditii, atunci rezultatul va fi necunoscut.

5. Prelucrarea imaginii
Pasul prelucrarii include operatiuni simple, care aplica operatii aritmetice simple
la fiecare pixel al imaginii, rezultand o imagine cu caracteristici sporite. Aceste operatii
variaza de la lumina simpla si culori intense la mucdie de detectare complexa si
algoritmi de segmentare. In cele ce vor urma vor fi prezente filtre frecvent folosite.

5.1. Filtre de netezire


Aceste filtre reduc semnalul de eroare al imaginii. Daca dispozitivul de capturare
are calitate slaba sau conditile ambiante nu sunt favorabile, apoi imaginea capturata
trebuie sa fie sporita inainte ca alt process sa poata fi aplicat.

5.1.1.Filtru mediu
Acest filtru netezeste valorile pixelilor, efectuand non-important sau de
importanta medie a valorilor pixelilor vecini. Miezurile pot fi de mai multe tipuri, unele
dintre

1 1 1 1 1
1 1 1 1 10 1 0 1 1 11 2 1 

1
, 1 1 1 1, 1 2 4 2, 1 
Ele sunt : 1 1 1
16 25 1 1 1 1 1.951 1 1 1 10 1 0 1 1 11 2 1 


1 1 1 1 1

9
2 3 6 7 8
3 4 5 8 9
6 6 9 5 6
7 4 2 3 4
8 2 3 2 2 x xxx x
x 4.8 5.8 7.8 x
x 5.2 5.1 5.6 x
x 2.0 1.0 4.0 x
x xxx x
Figura 3. Exemplu de matrice Figura 4. Rezulta cu a-2-a kernel

Filtrul mediu este folositor cand eroarea este distribuita uniform in imagine. Daca
ei sunt distribuiti la intamplare, atunci vor fi prezenti deasemenea in rezultat. Alta lipsa al
filtrului este ca netezeste nu numai erorile, dar si detaliile folositoare, deasemenea. O
muchie ascutita dupa ce filtrul este aplicat va face imaginea rezultata cenusie.

Figura 5. Filtru mediu. Imaginea cu erori este in stanga.


Rezultatul de 3x3 a filtrului mediu non-important este in dreapta

5.1.2.Filtru median
Acest filtru este foarte util cand sunt erori prezente. Aceasta eroare modifica cu
distribuirea intamplatoare unii pixeli ai imaginii. Acesti pixeli particulari au o intensitate
de valoare mai mult sau mai putin decat ceilalti din imprejurimile lor.
Filtrul median aplica la fiecare pixel: (2N + 1)*(2N + 1) o matrice de masca larga.
Intensitatea valorii pexelilor din matrice sunt sortate in crestere (2N+ 1)*(2N+ 1) in
functie de ordinea sortarii. Rezultatul filtrului este luat de la 2 valori.
Aceasta triere este foarte utila pentru a elimina pixelii cu valori care sa aiba o
diferenta mare intre ei si valorile vecinilor. De exemplu in cazul unei matrice de 3 x 3
(N=3) daca pixeli vecini ai valorii 9 sunt aceiasi ca in Figura 6. Rezultatul sortarii este 2,
2, 3, 3, 4, 3, 6, 8, 9 si acesta este rezultatul valorii pixelului current care va schimba din 9
in 4. Dupa cum este prezentat in Figura 7 unii pixeli pot sa fie schimbati, depinzand de
pixelul vecin.

10
Figura 6 Figura 7

Pentru o imagine reala, originalul si imaginile rezultate arata ca in Figura 8.

Figura 8. Filtru Median. Imagine cu erori de tip sare si piper in stanga. Rezultatul imaginii
filtrate in dreapta. Se poate vedea foarte bine ca filtrul fereste muchiile obiectelor .

5.1.3.Segmentarea Reddi
Algoritmul original Reddi a aparut in [REDD84]. Autorii prezinta cum ei pot
generalizeze algoritmul de segmentare Otsu [OTSU79] pentru a segmenta o imagine cu
un obiect real in trei regiuni gri: regiunile obiectului stralucitor, regiunea umbrei de
mijloc si regiunea intunecoasa pentru fundal.Algoritmul interativ rezolva (1),rezultand
doua praguri de sensibilitate pentru lumina, mijloc si regiunile stralucitoare [OTSU79]

Figura 9. Filtrarea Reddi. Imaginea originala se afla in stanga, urmand imaginile


intunecate, umbrite si de mijloc.

5.1.4.Generalizarea segmentatiei Reddi


In [MICE02] noi am generat algoritmul de segmentare Reddi. Algoritmul generalizat

11
determina precum multe preguri de sensibilitate sunt necesare folosind (2)

Pragurile de sensibilitate ale segmentului ki in imaginea originala a zonei n+2, care poate
fi sursa de informatie de calitate extrasa din imagine.
Aceasi imagine pentru Figura 9, segmentata in 5 regiuni este prezentata in Figura 10.

Figura 10. Generalizarea segmentarii Reddi. Regiunile intunecoase pana la cele luminoase sunt
prezentate de la stanga la dreapta

5.2. Detectarea de muchie


Exista multi algoritmi utili pentru detectarea muchiei. Unii dintre ei au fost inventati
de 10-20 de ani, altii sunt mai noi si difera de la cei mai vechi cu imbunatatiri mai putine
sau mai multe.

5.2.1.Detectarea de muchie Prewitt


Detectarea de muchie Prewitt este unul dintre cei mai simpli, vechi si rapizi algoritmi.
Principiul lui este bazat pe derivarea imaginii bidimensionale. Derivarea este realizata
[1 0]
folosind rasucirea cu Kernel. Derivarea foloseste numai 0 1/ valorile a doi pixeli vecini.

Muchia este detectata daca valoarea derivatei este mai mare decat o valoare specificata –
de obicei determinate din intregul set de valori derivate

1 1 1 1 1
1 1 1 1 3

12
2 2 2 2 2
8 8 7 7 7
0 0 0 -2 X
7 8 7 7 7
-1 -1 -1 -1 x
-6 -5 -5 -5 X
0 1 0 0 X
x x x x x

Figura 11. Figura 12.

5.2.2.Detectarea de muchie Sobel

Detecatarea de muchie Sobel foloseste Kernel / 000 / determinand Y directia D

Derivate si pentru directia lui X si derivate D. Valoarea finala a derivatei

este sau cu o similara, dar cu o forma calculate si salvata:

Pentru matricea de la Figura 11, rezultatul Filtrului Sobel este prezentat in figura 13.
Poate fi vazut derivatul maxim care corespunde muchiei.

Figura 13. Rezultatele filtrului Sobel. Derivatele Y si X si suma celor doua derivate sunt prezentate de la
stanga la dreapta

Figura 14. Filtrul Sobel: imaginea originala, derivate orizontala, derivate verticala, suma a doua directii
derivate, suma pragului de sensibilitate(valoarea maxima 7*), imagine dupa ce sa aplicat reducerea muchiei

13
5.2.3.Detectarea de muchie SUSAN
De la algoritmul detectarii de muchie de baza la alti algoritmi mai mult sau mai
putin similari au fost derivarati. Forma unica [FLEC94] prezinta un algoritm de valoare
pentru textura mai multa a imaginii. Fata are textura mai putina a imaginii, asa ca accesul
tine cont ca aceasta este mai valoroasa. Cea care face acest lucru este detectarea de
muchie SUSAN.
Principiul SUSAN a fost prezentat in [SMIT95a]. O masca circulara (avand un
pixel de centru cunoscut ca “nucleu”) este prezentat ca cinci pozitii de imagini. Daca
luminozitatea fiecarui pixel dinauntrul mastii este comparat cu luminozitatea mastii
nucleului dupa aceea o suprafata a mastii poate fi precizata care are aceasi (sau similara)
luminozitate ca a nucleului. Aceasta suprafata a mastii este cunoscuta ca “USAN”,
Univalue Segment Assimilating Nucleus.
Acest concept ca fiecare punct din imagine avand asociat cu el o suprafata cu
luminozitate similara este baza principiului SUSAN. Suprafata sau USAN contine multe
informatii despre structura imaginii. Aceasta este efectiv regiunea descoperita la scara
mica.
Algoritmul de detectare a muchiei foloseste o fereastra predeterminata centrata
pe fiecare pixel din imagine. Muchia detectorului de masca SUSAN poate fi rotunda sau
rectangulara. Cele mai bune rezultate pot fi obtinute cu mai multe masti complexe
circulare. Razele de cerc propuse sunt [SMIT95] de 3.4 pixeli (dand o masca de 37
pixeli). Masca este situata la fiecare punct din imagine si pentru fiecare dintre ele
luminozitatea fiecarui pixel dinauntrul mastii este comparata cu acesta in centrul
punctului. La inceput o ecuatie simpla determina comparatia:

(3)
De la c(y,y0) rezulta importanta valoare n pentru fiecare pixel:

Apoi, n este comparat cu un prag de sensibilitate fix g, care este stability la


3nmax/4, unde nmax este valoarea maxima pe care o poate lua n. Raspunsul de muchie
initial este atunci crea folosind regula:

14
Figura 15. Detectarea de muchie SUSAN. N, matricile R si imaginea pragului de sensibilitate R

Acest pas urmat de reducerea algoritmilor ca [SMITH95b], rezultand un contur


bun de imagine.

5.3.Egalarile de histograma
Egalarile de histograma au incercat adesea sa mareasca o imagine [SHAP01].
Cele doua conditii pe operator sunt: imaginea rezultata ar trebui sa foloseasca toate
nivelele disponibilesi rezultatul are aproximativ acelasi numar de pixeli la fiecare nivel
gri. Harta de nivele gri nu schimba vederea de ansamblu a imaginii, doar face niste
regiuni mai vizibile. Pragurile de sensibilitate tk al egalarii sunt definite folosind
histograma H(i) a imaginii de ecuatia (6) si (7).

Figura 16. Egalarea de histograma. Imaginea originala si histograma de sus, imaginea netezita
ultima de jos

5.4.Segmentarea culorii de baza


Segmentarea culorii de baza foloseste informatia imagini color. Aceasta poate
folosi una sau mai multe spatii de culori disponibile (RGB, HSV, HIS, CMY, YIQ si

15
YUV). Frecventele culorilor au diferite histograme construite [SHAP01] sau domeniile
color stiute anterior sunt aplicate sa obtina regiune dorita. Segmentarea culorii este
folosita pentru detectarea fetelor. Acest subiect este tratat detaliat in sectiunea 6.1.

5.5. Transformarea morfologica


Operatiile de morfologie binara transforma o imagine de intrare binara B folosind
o structura a unui element S, care este alta, dar o mult mai mica imagine binara. Structura
elementului reprezinta o forma; poate sa aiba orice marime sis a aiba structura arbitrara
[SHAP01]. Unele elemente de structura sunt prezentate in figura 17.

Figura 17. Elemente de structura

Eroziunea imaginii binare B structurand elementul S este definit ca

Dilatarea imaginii binare B structurand elementul S este definit ca

Deschiderea unei imagini binare B structurand elementul S este definit ca

Inchiderea unei imagini binare B structurand elementul S este definit ca

Eroziunea, dilatarea, deschiderea si inchiderea exemplului aplicat matricei


binare de la Figura 18 poate fi vazuta la Figura 19.

16
Figura 18. Exemplu de matrice

Eroziunea Dilatarea

Deschiderea Inchiderea

Figura 19. Transformari morfologice

6. Segmentarea
In acest capitol este prezentat algoritmul segmentarii. Problema segmentarii este
definite ca: este data arbitraroimagine color, fata gasita in imagine trebuie sa fie gasita si
separate de fundal. Pentru oameni aceasta este usor de facut diferenta dintre culorile
specifice ale fetei si ale fundalului, folosind vederea tridimensionala si cunoscand
conturul specific si tiparul fetei. In viziunea computerului doar ocazional este disponibila
picture 3D, asa ca aceasta metoda poate fi folosita rar. Tiparele fetei si conturul fetei
specific sunt caracteristici complexe, pot fi reprezentate doar de modele complexe, care
sunt mai putin eficiente pentru suprafete mari – acestea vor fi aplicate regiunilor fetei
detectate si vor fi folosite in algoritmul detectarii fetei.
Multe lucrari se ocupa cu segmentarea imaginii. Unele dintre ele ([AMIT98])
trateaza cazuri mai generale, altele incearca sa extraga regiuni si obiecte specifice.

17
Conceptii diferite sunt prezentate in literature. In [WUHU00] autorii folosesc 6-D
RGB si suprafata de culoare HSV utilizeaza tehnici de analiza discriminatorii multiple si
metode probabilistice.
Textura bazata pe segmentare [GUOL00] poate fi o alternativa potrivita. Fata are
texturi particulare in zone specifice. Pielea, parul, ochii, gura, nasul pot fi identificate
bazate pe textural lor si locatia corelata a acestor caracteristici poate fi sursa localizarii
fetei in imagini arbitrare.
In urmatoarele vor fi prezentate urmatoarele moduri: in primulpas folosirea
informatiei culorii imaginii regiunile satisfacatoare ale fetei sunt selectate si in pasul doi
pentru regiunea cea mai probabila este facuca o aproximatie pentru a mari precizia gasirii
fetei. Pentru pasul al doilea sunt date doua alternative.

6.1. Primul pas. Culoarea bazata pe regiuni selectate


In primul pas folosin informatia culorii a fiecarui pixel, posibilele regiuni ale fetei
sunt selectate. Multe cercetari au fost facute pe aceasta problema.
In [GARC99a], [GARC99b] si [FLEC96] autorii au propus diferite sortimente ale
culorii componentelor(in spatiile de culoare diferite) care caracterizeaza fata. Alta
histograma bazata pe metode este prezentata in [SHAP01]. Dup ace toate aceste au fost
incercate, a fost aleasa una similara cu fata, restrictiile culorilor prezentate in [FLEC96].
Principala problema a culorii bazata pe segmentare este variatia valorii culorilor
depinzand de luminozitatea imaginii. Dupa ce mai multe moduri au fost incercate, una
mixta a fost aleasa. In acest mod am folosit logaritmul RGB suprafata de culoare: aceasta
suprafata de culoare comparat cu RGB, HSI sau suprafata HSV spatiile sunt mult mai
stabile la variatiile luminii.
Mai intai, pentru a inlatura influenta luminozitatii imaginii, intensitatea minima a
fost gasita in fiecare zona colorata (R, G, B) si aceasta valoare este scazuta de la fiecare
valoare a culorii.
Pe luminozitate vectorul normalizat operatia log10 este aplicata. Dispozitivul de
capturare are erori, pentru a compensa acestea, o valoare aleatoare intre 0 si 1 este
adaugata inainte de operatia logarithm, introducand un comportament automat
nedeterminat al algoritmului care egaleaza cu niste culori inconstante ale apratatului de
fotografiat:

Unde LogValue(Value) este:

Coeficientul 105 este folosit doar pentru a obtine rezultatul in domeniul

Un pixel al imaginii este declarat de a fi pixelul posibil al fetei daca multumeste


urmatoarele conditii:

18
Unde am caracterizat intensitatea imaginii si este egala cu LG; Rg este diferenta lui LR si
LG, si By este diferenta intre LB si media dintre LG si LR:

Conditile de mai sus au fost determinate bazandu-se pe [FLEC96] si pe studiile


experimentate ale seturilor de imagini disponibile. Inca o conditie a fost folosita in
versiunea Matlab cu algoritmul bazat pe [FLEC96]: pentru a calcula a amploarea texturii,
intensitatea imaginii este netezita cu un filtru median si rezultatul este scazut din
imaginea originala, apoi valoarea completa al acestor diferente sunt parcurse de un al
doilea filtru median:

Texturile corespunzatoare fetei sunt zone ale imaginii putin texturate, astfel
conditia corespunzatoare pentru textura este:
(d)Texture < 1
Intersectia lui (a) … (d) conditiile determina posibili pixeli ai fetei. Conditile de
mai sus sunt facute pentru a fi conditii slabe, pentru a garanta ca majoritatea fetei este
selectata.
Codul sursei din Matlab al intregului algoritm este prezentat in Appendix A.
Rezultate al algoritmului extragerii culorii sunt prezentate in Figura 20, Figura 21,
Figura 22 si Figura 23.

Figura 20. Extragerea culorii. Imaginea originala, Masca I, Masca Rg, Masca By, Masca de
textura, imaginea rezultata dupa aplicarea mastii imaginii originale de la stanga la dreapta, de sus in jos

19
Figura 21. Extragerea culorii. . Imaginea originala, Masca I, Masca Rg, Masca By, Masca de
textura, imaginea rezultata dupa aplicarea mastii imaginii originale de la stanga la dreapta, de sus in jos

Figura 22. Extragerea culorii. . Imaginea originala, Masca I, Masca Rg, Masca By, Masca de
textura, imaginea rezultata dupa aplicarea mastii imaginii originale de la stanga la dreapta, de sus in jos

20
Figura 23. Extragerea culorii. . Imaginea originala, Masca I, Masca Rg, Masca By, Masca de
textura, imaginea rezultata dupa aplicarea mastii imaginii originale de la stanga la dreapta, de sus in jos

In aceasta parte a algoritmului putem duce la niste concluzii


1. Culorile diferite logaritmice sunt standarde bune in extragerea culorii
asemanatoare fetei.
2. Texturarea imaginilor poate fi folositoare in observarea regiunilor netezite ale
fetei, dar folosirea lor nu este intotdeauna obligatorie si efortul lor calculat, data
de filtrarea mediana poate fi superioara ca performanta rezultatului.
3. Conditile Rg si By sunt folositoare pentru selectarea punctelor fetei, dar au unele
deficiente: doar culorile deschise ale fetei sunt selectata (fara ochi, sprancene sau
par) si detecteaza alte regiuni care au culori similare cu ale fetei, deasemenea.
4. Conditile (a)…(d) detecteaza nu numai zona fetei, dar si alte regiuni colorate ca
ale fetei.

Concluzia finala este ca aceasta culoare bazat pe detectare este buna, dar nu destul
pentru gasirea fetei in imagine.

6.2 Prelucrarea anticipata a formei fetei


După ce regiuni posibile ale formei fetei sunt aflate urmează doi paşi: selectează
zona cea mai mare si alege din zona selectata pe accea care formeaza o imagine
completa.

6.2.1 Selecteaza mai complet umplutura regiuniei,


Urmand pasul anterior am obtinut o imagine in care regiunea cea mai mare este
zona fetei design aceasta prin cele trei conditii anticipate (expuse in g3.1)
Mai este necesara o observatie dupa cum se poate vedea in figura 20, figura 21,
figura 22 si figura 23 parte din fata poate contine zone negre (unde gura, ochii spacenele

21
si fruntea au o culoare diferita de restul fetei). Aceste zone neselectate trebuie sa constitue
parte a regiunii invecinate. Cel mai usor de realizat aceasta este aplicand algoritmul de
umplere in cascada, astfel umplandu-se zonele care nu se invecineaza. Se poate aplica
apoi metoda de realizare pas-cu-pas a unei regiuni.
Aceasta metoda de exprimare este buna dar nu optima deoarece necesita doua
faze. Daca ceai doi algoritmi ar lucra in tr-o singura faza atunci cel de performanta ar fi
O(n ?m) unde n si m sunt dimensiuni ale imaginii. De accea s-a utilizat un nou algoritm
combinat. Acest algoritm a fost gandit pentru a face toate calculele deoadatautilizand
structuri de date suplimentare.
848
44
848
Figure 24. Vecinatatea Pixelului
Inainte ca algoritmi sa fie descrisi in amanunt trebuie sa explicam diferenta intre
4 si 8, cei 4 vecini de legaruta al unui pixel sunt cei 4 pixeli din dreapta, stanga,deasupra
si dedesuptul pixelului curent ; cei 8 vecini de legatura ai unui pixel sunt cei 8 pixeli
inconjoara. Algoritmul urmator va lua in calcul doi pixeli parte a unei singure zone daca
au o cale de 8 pixeli de legatura intre ei. Daca avem campul din fata o legatura de 8 apoi
parte complementara a imaginii trebuie sa fie o legatura de 4 pe verso. Aceasta este o
observatie importanta care este folosita in tratarea pixelilor din prim plan si de pe
fundal(din umbra)
Partea principala a algoritmului este o scanare secventiala de sus in jos si de la
stanga la dreapta aimaginii. Pentru fiecare pixel se determina culoarea. Culoarea pixelului
inseamna grupul de numere caruia ii apartine. Toti pixelii care formeaza o regiune au
acceasi culoare, in acest algoritm fiecare pixel primeste un cod format dintr-o valoare
numerica. Sunt trei variante (figura 25)
 Daca pixelul este de mascare culoarea sa este codata numar intreg pozitiv. In
exemple ei sunt marcati cu numere pozitive in celule gri.
 Daca pixelul este de fundal de bordare atunci culoare lui este 0. pixelii de bordare
sunt pixeli de fundal care se afla pe marginea imaginii ori au vecini de margine de
legarura 4. in exemple ei sunt marcari cu 0-uri in celule de culoare alba.
 Daca pixelul este de interior atunci culoare primeste codificare cu numere intregi
negative.
Pixelii de interior au conoscut pana de curand la recentele prelucrari vecini numai
pixeli de mascare sau de interiorse va schimba in unul de margine numai daca se
cunoaste ca are vecinii de bordurare.
In exemple ei sunt marcati cu nume intregi subliniate in celule de culoare alba.
In exemple semnul ? este folosit numai daca culoarea pixelului nu este cunoscuta.
In momentul cand pixelul este iontarit (bolded) atunci cand culoarea pixelului din centru
este in procesul de cautare.

22
Operatiile facute depind de fiecare faza de felul pixelului , daca-i de mascare ori
fundal :
a.) Pentru pixeli de mascare :
Se cauta culoarea pixeluilui superior(de sus) si a celui de sus-
dreapta(N_NE)si a celui din stanga si stanga sus. Aceaste grupari sunt facute deoarece
daca scanarea sus-jos stanga-dreapta anunta ca culorile combinate sunt de mascare atunci
ele vor avea acceasi culoare. Daca NE_N si W_NW sunt puncte de masurare si ele sunt
egale(de ex fig.26a) vecinul pixelului este o zona numai astfel culoarea pixelului va fi
data de culoarea vecinatatii.
Daca NE_N si W_NW sunt pixeli de fundal(fig 26 b) atunci culoarea pixelului
este una noua.
Acest pixel va fi primul pixel al unei noi regiuni. Daca N-NE sau W-WE sunt
pixeli de fundal (fig 26 c) atunci culoarea pixelului nu este de fundal. Dac N-NE si W-
WE sunt puncte de mascare si nu sunt egale (fig 26 d)atunci inseamna ca cele doua
regiuni considerate doua regiuni diferite sunt de fapt o singura regiune unita de un pixel.
In acest caz cele doua zone trebuie unite iar culoarea pixelului va fi culoarea vecinatatii.
Dupa unificare culoarea dominanta se va transforma in culoarea mai slaba. Numerele
pixelului celor doua zone se vor insuma. Daca W-NW este mai mare decat N-NE atunci
culoarea culoarea pixelilor ramasi pe pozitie se schimba pentru a ne asigura ca pe linia
urmatoare pixelii vor folosi culoarea corecta a pixelului superior. Nu este ceva strict dar
da posibilitatea realizarii algoritmului in cele din urma ne vom da seamna sin ce culoare
se va schimba culoarea dominanta.

b.) Pentru pixelii de fundal


Intru cat umplutura de legatura 8 este realizata, vom verifica numai vecinii
supriori si cei din stanga pixelului de fundal. In functie de valorile lor sunt 4 variante :

23
Daca unul din vecini este un pixel de bordurare (fig27a) atunci si acest pixel este
de bordurare.
In acest caz daca este un pixel de bordurare numai de interior este mascata acela
este de bordura. Acesta se va pastra pentru toti pixelii de pe un rand, dand astfel
posibilitatea stabilirii valorilor de bordurare.
Daca numai unul din vecini este punct de interior(fig27b) sau cei doi vecini sunt
de interior si au aceeasi culoare atunci pixelul curent este punctul de interior al aceleaiasi
regiuni.
Daca vecinii sunt de interior dar au culori diferite(fig 27d) atunci cele doua culori
sunt unite in acelasi mod cum s-a facut cu pixelii de mascare. Daca cei doi vecini sunt
puncte de mascare(fig27e) atunci o noua zona interna va debuta.

Pentru ultimele trei variante mai este necesara o operatiune : pentru fiecare pixel
de inerior se stocheaza intr-o structura de set vecini de mascare de culoarea celor de
interior. Dupa acest pas de marcare pixelii sunt inconjurati de regiuni de mascare
inconjuratoare. Acest pas poate produce o unire a zonelor de mascare respectiv o regiune
de mascare inconjoara o regiune interna care inconjoara o alta zona de mascare. Eficienta
algoritmului este n m 1 unde 1 reprezinta complexitatea setului add,
unify(adaugare unifica) aceste informatii pot fi implementate cu o structura de datede
stabilire folosind pointerul de stabilire parentala [CRET92]. Acest algoritm are o
prformanta de inserare de 1.cercetarea din structura de stabilire are nevoie de o
performanta intre 1 si n 2 dar aceasta operatie fiind aplicata numai in stadiul fina,
unde este determinat rezultatul mascariisi foloseste algoritmul de restrangere a caii ea
este considerata aproximativ 1astfeln m aliniamntul crescand cu marimea
imaginii. Trebue sa ne reducem la : nevoia unui rand suplimentar de date de stabilire
necesaul total este sub 2 n m .
Functionalitatea algoritmului este exemplificata in fig 29. Figura 28 prezinta
rezultatul selectiei aplicate la rezultatul selectiei de culoare.
Versiunea matematica de laborator a algoritmului este prezentata in Anexa A.

24
25
26
6.2.2 Minimalizarea regiuni de interes
Miscarile care au aparut din implementarea pasului anterior nu sunt intotdeauna
corecte. Se intampal de multe ori sa se selecteze mai mult decat o fata sau sa nu se
selecteze intreaga fata, ci numai o parte. Aceasta mascare poate sa nu fie rezultatul final
dar da informatii utile pentru urmatorii pasi. Deci folosind aceasta mascare se obtine
imaginea definita.
Sus/jos sau stanga/dreapta deci selectam marginea sunt similare. Mai intai se va
proceda la selectarea stanga/dreapta.
Pentru aceasta se determina pixelul cel mai de sus si respectiv cel mai de jos
rezultand mobilul de jos si de sus al mascarii(a,b) si diferenta (fig30c). Numarul de pixeli
in fiecare coloana este o informatie utila, deasemenea. Marginea (distanta) din stanga
respectiv din dreapta se selecteaza in acelasi mod. Pornind de la coloana cu numar mai
mare de pixeli fiecare coloana din stanga dreapta va fiverificata pentru a ne convinge ca:
 diferenta sus-jos este mai mare decat pragul T1 unde T1 este 40% din diferenta
sus-jos ;
 numarul total de pixeli din coloana din stanga sa fie mai mic decat acelasi din
dreapta sau unul dintre ei sa fie mai mare decat pragul T2. T2 este 40% din
maximumul numarului de pixeli al coloanei.

27
la acest punct unde conditiile nu se potrivesc exista distante laterale primare aratate in
fig30 cu linii de interior. Aceste marginii cand mascarea nu este indeajuns de buna
elimina parti ale fetei iata de ce aceste distante laterale sunt marite cu ajutorul unei zone
tampon. Marimile sunt marcate cu linii exterioare.
Distantele de deaspura si de dedesupt sunt aflate intr-un mod asemanator.profilele da
stanga dreapta diferenata stanga dreapta si numarul de pixeli pe verticala sunt aratate in
fig 31.

28
6.3 Sporirea bazata pe intensitati ale conturului fetei.
S-a incercat sporirea marirea a doua imaginii de contur.prima este mai mult bazata
pe diferenta de culoare iar a adoua pe definirea muchiei. Amandoua au dat rezultate bune
dar nici una 100%.
Prima incercare a prezentat trei faze, care au scris in relief fata :
 Fata este aproximata folosind nuante de culoare saturata si paramentri de valoare.
 O a doua incercare selecteaza zona fetei in final.
 Muchiile din stanga si din dreapta sunt intense si corectate pentru a inlatura
poziile care nu sunt tip[ice fetei.

29
6.3.1 Aproximarea fetei.
Aceasta faza foloseste imaginea prin metoda culoare-spatiu HSV se verifica mai
intai compunerea valorii:
 valoarea medie M se determina
 se construiesc in pasi de 0,02 imaginii de mascare pentru σ 0.1 ; 0.325 care au
componenta
 se alege valoarea minima σ a coeficientului.
Observatie : ecuatia de mai sus are doua componente de valoare in zona M σ ; M
σ  regiunea maxim umpluta(vezi 6.2.1) fiind selectata si urmatorii parametri
verificati :
 daca suprafata regiuni este mai mica de 70% din intreaga fata. Altfel regiunea
selectata va fi mai mare decat fata.
 Daca raportul inaltime/latime este in relatia 1.1; 1.6]care este de fapt proportia
dimensiunilor standard ale fetei.
 Pentru zonele care satisfac conditiile de mai sus se calculeaza un coeficient de
probabilitate bazat pe P adica suprafata zonei O si unghiul dintre aza X si axa
majora principala a elipsei care are aceleasi momente secndare ca si regiunea :

se alege valoarea minima a coefinientului Coef


Observatie :ecuatia de mai sus are doua componente de valoare in zona M σ ; M
σ  regiunea maxim umpluta(vezi 6.2.1)ambele generand valori in gama 0 ;1 cu 0
indicand o alegere mai buna. Prima genereaza O daca orientarea este 90% insemnand
ca regiunea corespunde unei fete orientate vertical. Al doilea component genereaza O
daca zona are forma de cerc sau de elipsa. Acest component va incerca sa selecteze
zona sub forma de elipsa fara alte concavitati.

Se poate observa ca se analizeaza mai mult decat fata. Astfel este necesar sa facem
referire la o serie de alti pasi si mulaje :
A ) mulajul rezultand din ecuatia S 0.15 S 0.70 2 (vezi fig 34a) si H 0.30
H 0.8 3 (vezi Fig 34b) produce doua mulaje, care rezultat reduce selectia V .
B) suprafata maxim umplutura se determina pentru mulajul care rezulta (fig 34c).

30
C) de tedermina mediul M si derivata standard a saturatiei pixelilor selectati.
D) Mulajul final (fig34e) rezulta din aplicarea formulei S S M σ M S S M
σ M mask (Fig 34d) la forma mulajului (b) si umpland complet spatiile din interior

6.3.2 Producerea celei de a doua fete.


In aceasta faza se elimina regiunile neportivite, daca ele fusesera introduce in faza
anterioara. Partile laterale stanga si dreapta sunt selectate ca in primul caz. Selectarea
degajarilor superioara si inferioara se simplifica; marginile sunt constituite din ultimele
randuri cu pixeli de mascare. In unele cazuri noul mulaj contine concavitati cu suisuri si
coborajuri. Figura 35 arata un caz unde un ochi lipseste de pe fata.

Algoritmul de netezire este urmatorul : se determina media histogramelor, care


este de fapt centrul fetei. Adanciturile sunt in mod liniar interpuse : se determina
minimumul histogramei, daca ascendenta monotona de pe pereti este intrerupta, atunci
alinierea dintre ultimul punct descrescator si urmatorul punct mai mic, este interpolata
liniar folosind cele doua puncte de margine (fig 37a).
Profilul este netezit cu un filtru lat de 10 pixeli (fig 37b). Pentru a obtine un
rezultat mai bun pe lateralul fetei valoarea profilului se modifica cu maximum ±3 pixeli

31
pentru a corespunde pixelului cu valoarea sobel maxima (fig37c) filtrul sobel poate da
rezultat cu valori nestabile langa punctul dat : profilul care rezulta are multe gauri care
pot fi eliminate cu un al doilea filtru mediu (fig37d). Aceeasi pasi sunt parcursi cu
profilul din dreapta, urmand sa unim cele doua profile dand forma finala a mulajului (fig
36).

32
6.3.3 Concluzii ale acestei abordari.
Rezultatele acestei abordari au fost bune(fig38). Dintr-un set de 252 de imagini 9
fete au fost nedetectate in fazele initiale din cauza acuratetei slaba a culorii si doua fete au
avut parti cu zone incorect scoase in relief.

33
6.4 Largirea conturului fetei bazata pe profilul lateral .
Prima tratare a fost buna dar ea a folosit numai culoarea fetei, informatii despre
intensitati si forma fetei. Informatii suplimentare care ar mai putea fi folosite sunt cele
privitoare la profilul lateral. Sunt algoritmi diversi care ar putea da profilul; ei difera in
precizie prelucrare pe calculator si o caracteristica importanta: ce caracteristici locale ar
putea fi luate in consideratie Dupa ce au fost incercati mai multi algoritmi abordarea
SUSAN (prezentata in lucrarea SMITH95a si intr-o mica prezentare in §5.2.3) a fost
aleasa pentru detectarea profilului. Acest algoritm a fost ales deoarece el foloseste pentru
detectarea profilului informatii despre similaritate intr-o zona local comparata cu alte
metode care se bazeaza pe variatia nivelului pixelilor imaginii.
In cele ce urmeaza regiunile fetei cu culori similare delimitate de profile laterale
sunt dezvaluite.
O selectare corecta a acestor regiuni va forma imaginea formei fetei. Pasul cheie
este selectarea regiunilor: ea poate forma correct fata daca se lucreaza bine sau daca nu
deoarece poate da locuri goale pe imagine poate mai multe decat fata selectata.
Dupa ce fata a foat selectata se va face o mica ajustare care netezeste conturul
fetei.
6.4.1 Aflarea profilului lateral folosind metoda SUSAN.
Dupa ce fata a fost detasata de imagine facand ce se scrie in 6.2.2 se aplica
algoritmul SUSAN.
Mai intai imaginea n (fig 39) este determinata cu ecuatiile (3 si 4) folosind un
mulaj USAN lat de 11x11. valorile USAN astfel determinate vor caracteriza profilele
laterale a fetei. Apoi pragul indicat de 3n max / 4 se aplica rezulatnd (vezi ecuatia 5)
imaginea R (fig 40). Primele profile laterale (fig 42) sunt date de combinatia R>0 si un
mulaj nuantat (fig41).

34
Mulajul nuantat este necesar deoarece raspunsul profilului poate contine
raspunsuri superioare in unele regiuni care mai mult ca sigur nu sunt regiuni ale fetei.
Masca nuantata este generata din mulajul de fata produs : se determina valoarea medie a
nuantari ; variatia de la medie este determinata folosind (9) conditia pusa in aceasta
exprimare este argumentata de rotunjirea mantiei : valoarea 1 este echivalenta lui 0si
distanta dintre 0.2 si 0.8 nu este 0.8 0.2 , dar 1 0.80.2 . Formulei de mai jos i se va
atentie pentru a obtine valorile corecte.

35
Apoi profilelor laterale se va aplica. Se vor determina pixeli vecini tangentiali profilului
lateral pentru fiecare pixel al profilului lateral initial calculand mai intai directia profilului

ca in formula este unchiul luat ca directie iar y si x se caracterizeaza


variabila in vecinatatea de 3x3 apixelului conform modalitati urmatoare.

Unchiul θ poate fi de 30 sau 60 grade. Vecinii tangentiali sunt determinati dupa


cum urmeaza :
a.) daca θ este mai mic de 30 de grade atunci 2 si 8 sunt vecinii ;
b.) daca θ mai mare de 30 de grade atunci 4 si 6 sunt vecinii;
c.) daca θ mai mare de 30 de grade si θmai mic de 60 de grade iar |3-7|>|1-9|
atunci 1 si 9 sunt vecinii
d.) daca θ mai mare de 30 de grade si θ mai mic de 60 de grade iar |3-7|=|1-
9| atunci 3 si 7 sunt vecinii.
e.) Intrucat cat functia aratam este momentan crescatoare se poate ca pentru
implementarea algoritmului sa fie eliminatacomparand proportia cu
Tan(30)=0.5774 si tan(60)=1.773.
Subtierea profilului ne va da o imagine in care profilele laterale se vor putea usor
diatinge de ochiul omenes, dar este necesara mai multa munca pentru calcularea
automata(fig43).

36
Apoi se procedeaza la separarea profilelor laterale se vor folosi pragurile
T1=Rmax/2 si T2= Rmax/4 daca un pixel are R mai mare decat T1 el va fi considerat
punct de pornire al profilului si se va continua pe profil( in directia tangentei la profil)
pana ce valoarea urmaorilor pixeli scade sub praful T2. Toate profilele cu lungimea mai
mare de 5 sunt depozitate, celelalte fiind considerate p[rea scurte. Profilele separate sunt
prezentate in figura 44.
Profilele separate nu sunt continue. Pasul urmator va face sa crestem fiecare profil
de la capatul sau pan ace intaneste alt profil. Cresterea va fi pixel cu pixel in directia
tangentiala profilului Algoritmul este mult mai complex decat o pot face cateva randuri
de exprimare, dar se scoate evidenta ideea princiala. Profilele gasite pot fi vizualizate in
fig 45. Profilele gasite delimiteaza suprafata fetei care in pasul urmator va fi selectata sau
nu.

37
6.4.2 Selectarea regiuni.
Regiunile gasite in imagine vor fi caracterizate ca regiuni fata sau fundal. Este
foarte important dar cel mai important si mai putin formulat subiect . In continuare
prezentam abordarea acestui subiect. Ea este aflata pe bara experimentala si a fost
dezvoltata pe baza de cunoastre sei observatie a structurilor si proprietatilor fetei.
Aceasta faza incepe cu identificarea regiunii. Fiecarei regiuni I se aloca un
identificator unic explicandu-i-se un algoritm de culoare liniar. Regiunea care poseda un
pixel in stanga sus va fi considerata speciala, adica regiunea fundal. Aceasta zona,
rezultata din aflarea profilului unde pixeli de margine 5 nu sunt marcati cu toate ca ei sunt
puncte ale profilului inconjoara toate celelalte regiuni.
 casuta de legatura a regiunilor ;
 valorile medii ale componentelor R, G si B ale regiunii ;
 centrul aglomerat al regiunii
 suprafata regiuni
 daca suprafata este mai mare sau nu decat pragul suprafetei ales(de 75 pixeli)
 daca culoarea regiuniieste mai mult culoare pura 85% sau mai mult este data de
componentele R G sau B cresterea fiind aratata in fig 47. Cresterea este formata
de restrangere care foarfeca regiunile care au vecinii mai mult neselecati.
Se vor determina de asemnea fiecare regiune invecinata si numarul de pixeli de
granita pentru regiuni. Dca suprafata unei regiouni este prea mica zona va fi unita cu o
regiune invecinata a carei culoare nu difera prea mult de accea a regiunii de baza iar
suprafata este mai mare decat suprafata zonei de baza si pixelul invecinat comun este
valoare maxima intre regiunile invecinate disponibile. Regiunile mic si selectate sunt

38
unite si li se dermina proprietatile iar vecinii sunt combinati. Centrul algorimului zonei
care nu-i fundal se considera centrul fetei. Raza cea mai dintai a fetei este data de
jumatatea partii exteriora cea mai centala a regiunilor daca raza rezultata este de mai
putin de 30 pixeli atunci raza este considerata de 30.
Intensitatea minima a regiunilor ce pot fi selectate se obtine calculand 80% din
media suprafetei sumei componentelor R, G si B care se va imparti la 3 si se va retine
aceasta operatie deoarece daca nu tinem seama, trebuie sa foloim pe fiecare data formula
altfel pierdem.
Apoi centrul masei este recalculat drept centru zonelor cu intensitati mai mari
decat minimumul calculat.
Dupa ce determinam acest centru mult mai exact recal ;culam din nou centru
regiunilor cu internsitate corecta si centru cel mai aprorpait de raza maxima, dupa care
raza este recalculata la valoarea minima, drept minimumul distantei dintre centrul zonei
de margine si se va corecta ca in primul caz.
Aceata faza este urmata de faza selectiei regiunii. Fiecare zona cu centru mai
apropiat de centru determinat de cat de raza este selectat dreot regiunea fetei(fig 46) daca
inensitatea este mai mare decat minimumul intensitatii zonei atunci culoarea regiunii este
luata in calcul pentru determinarea culorii medii a zonelor selectate. Pe curba de selctie se
calculeaza casuta de legatura a fetei.

Se reda in continuare cresterea regiunii initiale.


Acest algoritm anexeaza regiunile de selectia curenta pana cand vor fi adaugate
mai multe zone.
Rezultatul selectiei de regiuni este aratat in figura 48.

39
6.4.3 Netezirea conturului.
Mulajul rezultat candva contine regiuni neinsemnate care in mod nevoit au fost
sterse sau adaugate fetei.
Astfel, in faza finala conturul fetei poate fi marit. Exagerarea prezinta urmatorii pasi:
a.) profilele interioare sunt umplute

b.) conturul mulajului se determina ca distanta dintre punctul de contur pana la


centrul masti(mulajului). Distanmta va fi retinuta pe un vector de lungime MAX_PI unde
elementul i inmagazineaza distanta de contur din i. Lungimea minima a centrului vector
Max_PI pana la unghiul θ i 2 π este importanta deoarece θ rezolutiei lui θ i daca
este prea mare mai mare decat conturul inmagazinat in Ri valoarea MAX_PI se deremina
astfel ca θ  rezolutiei sa fie capabila sa descrie cel mai extrem raza este cea mai mare
considerata raza maxima, adica Rmax=200 si distanta care urmeaza este de un pixel(caz
aratat in figura 49) Astfel θ  si MAX_PI se deremina dupa cum urmeaza :

40
De aici rezulta MAX_PI= 1256, rotunjit MAX_PI=1250
Valorile Ri sunt recalulate drept valoarea radiara une mulajul se schimba in fundal
sub unchiul θ i
Daca masca are concavitati pot exista valori multiple ale Ri, in acest caz avand de
ales valoarea cea mai apropiata mediei Ri calculate anterior

c.)Pentru unele valori θ Ri poate fi nemodificat daca conturul este foarte


varialbil aceste valori sunt interpretate liniar folosind primii vecini cunoscuti stanga
dreapta. O chestiune care trebuie luata in calcul arata ca Ri este un tampon circular
(deoarece contulul este o curba inchisa) : daca prima valoare a lui Ri este nedefinita
atunci vecinul din dreapta trebuie cautat la capatul lui Ri si in acelasi mod daca ultima
valoare Ri este nedefinita atunci vecinul ei din dreapta trebuie cautat la inceputul
vectorului (fig 51)

41
d.)Acesti pasi sunt urmati de o mediana de 31 de pasi lata si o filtrare medie lata
de 101 pasi. Filtrul median netezeste gaurile din contur si filteaza marile adancituri si
ridicaturi de pe contur.
e.)Conturul este tot atat de bine realizat pe cat este de apropiat profilurilor fetei.
Iata de ce pasul urmator inlocuieste Ri cu o valoare gama Ri+-5 pixeli cu valoarea ce
maximizeaza prezentarea n din valoarea de filtru Susan la pixelul tintei.
f.) in fine acest rezultat este filtrat din nou printr-o filtrare mediana de 31 de pasi
lata si una de 100 pasi lata.
g.) apoi Ri regenreaza conturul imaginii(fig 52) si de pe conturul masti rezultand
imaginea finala(fig 53)

Figura 68,70 si fig 71 in anexa D arata secventa de pasi din profilul susan. Imagionile
contin (de sus in jos de la stnga la dreapta zonele de delimitare ale profilelor laterale,
culorile lor medii, zona centrala initiala rezultatele cresterii, descresterii, conturului si fata
rezultata.

42
7. Extragerea caracteristicilor
Ţinta imaginii segmentate regăseşte faţa în imagine. În faza de extragere a
caracteristicilor această regiune va fi verificată pentru a se găsi caracteristici. Dacă se
găsesc mai multe caracteristici căutarea feţei va fi mai uşoară si mai exactă.
Principalul scop al acestei etape esă extragă cât mai multe caracteristici ale feţei.
Mai întâi sunt prezentate câteva caracteristici care au fost identificate şi extrasee în
proiectul DALT.2.4/2001 şi apoi sunt prezentate alte metode posibile.

7.1. Caracteristici în funcţie de distanţă şi raţie


Mai întâi am încercat să extragem cele mai importante caracteristici, apoi am
încercat algoritmi de design pentru găsirea poziţiei lor. Fiecare algoritm are o zonă
specifică de interes (ROI) care defineşte aria de căutare pentru rezultatul algoritmului.
ROI este determinată în funcţie de parametrii deja calculaţi.

7.1.1 Detectarea sprâncenelor


Un filtru Reddi cu trei praguri este aplicat în ROI-ul sprâncenelor (fig. 54).
Scanând de sus în jos, Aeye –ul mediu este format peste 5 linii orizontale. Maximul
acestei medii este calculat localizând poziţia liniei verticale a sprâncenelor. Această
poziţie se găseşte căutând în sus o variaţie de mai puţin de 85% din maximul precedent.
Ca rezultat, se obţine coordonata y_eyebrows.

Fig 54 Exemplu de ROI al sprâncenelor, segmnetat cu un filtru Reddi modificat

7.1.2 Detectarea ochilor


Regiunea de interes pentru localizarea ochilor se află chiar sub sprâncene. Poziţia
verticală a ochiului (y_eye) este următorul maxim al Aeye, calculat în pasul anterior.

43
Poziţia orizontală a centrului ochilor (x_eye_left şi x_eye_rigth) precum şi axa de
simetrie a feţei (x_symmetry) sunt detectate precum în [ASK98].
Aceste două coordinate preliminare ale ochilor sunt folosite în continuare pentru a
detecta colţul ochiului. Pentru a minimiza erorile de detecţie generate de o iluminare
neuniformă a feţei, am definit regiuni separate de interes pentru segmentarea Reddi (fig
55). Pixeli cei mai întunecaţi şi cei mai spre dreapta şi stânga sunt colţii ochilor
(x_left_eye_right, x_left_eye_left, y_left_eye_up, y_left_eye_down, x_right_eye_right,
x_right_eye_left, y_right_eye_up, y_right_eye_down)

Fig 55 Exemplu de segmente Reddi ale ochilor

7.1.3 Detectarea nasului


Locaţia orizontală a nasului este definită de axa de simetrie a feţei [AASK98],
[BRUN93]. Poziţia verticală a nasului (y_nose') se află selectând numărul maxim de
pixeli întunecaţi pentru fiecare linie orizontală în imaginea filtrată Sobel a feţei: nasul
formează o margine bine conturată. Folosind aceleaşi tehnici de segmentare Reddi,
poziţia verticală a nasului e apoi calibrată. Ca rezultat, noua poziţie verticală a nasului
(y_nose) e calculată ca linia ce separă zonele negre ale găurilor nasului în două regiuni
simetrice. Mai apoi, marginile nasului (x_nose_left, x_nose_right) sunt găsite
căutând în ROI sfârşitul zonei negre a găurilor nasului (vezi fig. 56).

Fig. 56 ROI segmentate Reddi pentru determinarea caracteristicilor orizontatele ale


nasului

7.1.3 Detectarea gurii


Procedura de detectare a gurii este similară cu cea pentru nas. Mai întâi se
localizează poziţia verticală (y_mouth), printr-o scanare sus-jos a ROI, pentru regiunea
întunecată a buzelor. Poziţia orizontală a gurii şi implicit dimensiunea ei, se află
împărţind gura în două regiuni, stânga şi dreapta ROI, precum în figura 57.

Fig. 57 ROI segmentate Reddi ale gurii

Căutând poziţia cea mai din dreapta şi cea mai din stânga a pixelilor întunecaţi
într-o bandă îngustă în jurul poziţie verticale găsite pentru gură se găsesc coordonatele
colţurilor gurii (x_mouth_left, x_mouth_right).
Procedura presupune că forma gurii este aproximativ orizontală. Imagini ale gurii
precum cea din fig 57 dreapta produc rezultate eronate.

44
7.1.5 Modelarea conturului feţei
Pentru o caracterizare mai bună a feţei, pentru a creşte gradul de individualitate a
modelelor feţelor, am introdus coordonate suplimentare pentru detectarea grosimii feţei:
la ochi (x_right_at_eyes, x_left_at_eyes), la nas (x_right_at_nose, x_left_at_nose) şi la
gură (x_right_at_mouth, x_left_at_mouth).
Procesul e o reducere simplă a căutării marginii feţei în imaginea Sobel la nivelele
corespunzătoare.

7.2. Alte caracteristici


Şi alte caracteristici pot fi extrase din faţă. Acestea pot rezulta din calcule locale
sau globale. Caracteristici locale sunt: centrul masei, aria, perimetru, orientare, momente,
cutie de restrângere. Transformările Fourier, DCT şi wavelet pot fi aplicate zonelor locale
şi globale, de asemenea.

7.2.1. Proprietăţi geometrice

Fig 58. Imaginea originală a centroid-ului. Imaginea din stânga este o imagine alb
negru cu o singură regiune. Această imagine va fi folosită pentru exemplificarea
proprietăţilor prezentate în paragraf. În imaginea din dreapta ete o cruce care marchează
centrul imaginii. Aria regiunii este 5692.

În paragraful următor vor fi prezentate proprietăţile geometrice ale regiunii R. Se


presupune că pixeli sunt de formă pătratică.
Aria lui R este:

sau numărul de pixeli din regiune.

Centroid-ul este locaţia medie a pixelilor în setul R. Deşi x şi y sunt întregi şi

sunt numere reale:

45
Lungimea perimetrului P a unei regiuni este o altă proprietate. O simplă definire a
unui perimetru a unei regiuni fără găuri este setul pixelilor graniţei interioare. Un pixel al
unei regiuni este un pixel de graniţă dacă are câţiva pixeli vecini care sunt în afara
regiuni. Când se foloseşte 8-conectivitatea pentru a determina dacă un pixel din regiune
este conectat cu un pixel din afara regiuni, setul rezultat de pixeli de perimetru este 4-
conectat. Când se foloseşte 4-conectivitatea pentru a determina dacă un pixel din regiune
este conectat cu un pixel din afara regiuni, setul rezultat de pixeli de perimetru este 8-
conectat. Aceasta este motivaţia definiţiei perimetrului 4 şi 8 –conectivităţii:

Fig. 59. Perimetrii. În dreapta este perimetrul de 4-conectivitate a unei regiuni cu


lungime, iar în stânga este perimetrul de 4-conectivitate a unei regiume cu lungime

Lungimea calculată |P| a perimetrului P, pixeli din P trebuie ordonaţi într-o


secvenţă P={(y0,x0),…,(yk-1,xk-1)}, fiecare pereche de pixeli succesivi din secvenţă fiind
vecini, inclusiv primul si ultimul. Apoi lungimea perimetru |P| este definită ca:

Cu aria A si perimetrul P definite, o măsură comună a circularităţii regiunii este


lungimea perimetrului la pătrat împărţită la arie:

E de folos să ai idee unde se află regiunea într-o imagine. Un concept folositor


este cutia de restrângeri, care e un dreptunghi cu părţi orizontale şi verticale care
îngrădesc regiunea si ating cele mai extreme puncte de sus, jos, stânga şi dreapta.

46
Fig. 60 Cutie de încadrare

Momente spaţiale sunt adesea folosite pentru a descrie forma unei regiune. Există
trei momentele spaţiale de ordinul al doilea al unei regiune. Ele sunt definite după cum
urmează:
 Momentul de ordinul al doilea de verticală.

 Momentul de ordinul al doilea orizontal.

 Momentul de ordinul al doilea amestecat

Deci µyy măsoară variaţia orizontală, µxx măsoară variaţia orizontală, iar µyx
măsoară variaţia orizontală şi verticală.
Aceste valori sunt adesea folosite ca descriptori de formă, deoarece sunt
invariabili la traziţie şi schimbare de scală a unei forme 2D.
Momentele spaţiale secunde au valoarea şi importanţă pentru regiunea de oricare
formă.
Dacă regiunea este o elipsă, axa minoră şi majoră şi orientarea axei de majore (în
mod clar orientarea axei minore) poate fi determinată după cum urmează:
 Dacă µyx=0 şi µyy> µxx , atunci axa majoră este orientată la un unghi de 90ş în
sens invers ceasornic faţă de axa orizontală şi are o lungime de . Axa
minoră are o lungime de
 Dacă µyx=0 şi µyy<= µxx, atunci axa majoră este orientată la un unghi de 0ş în

sens invers ceasornic faţă de axa orizontală şi are o lungime de . Axa


minoră are o lungime de

47
 Dacă µyx!=0 şi µyy> µxx, atunci axa majoră este orientată la un unghi de

în sens invers ceasornic faţă de axa orizontală şi

are o lungime de . Axa minoră are o lungime de

 Dacă µyx!=0 şi µyy<= µxx, atunci axa majoră este orientată la un unghi de

în sens invers ceasornic faţă de axa orizontală şi

are o lungime de . Axa minoră are o lungime de

Fig. 61 Elipsa înconjurătoare

În [TIAN00] sunt prezentate câteva metode pentru detectarea caracteristicilor şi


extragerea lor. Aceşti algoritmi sunt creaţi pentru analiza expresiilor, dar informaţia
formelor caracteristicilor feţei poate fi folosită foarte uşor caă proprietate globală a feţei.
Pentru detectarea unui proprietăţi locale se poate folosi reţeaua wavelet precum în
[FERI02]. Reţeaua wavelet detectează forma dintr-o faţă necunoscută, folosind un set de
feţe cunoscute, care deja au semne pentru toate caracteristicile detectabile.

7.2.2. Transformări Fourier şi transformări Fourier discrete


Transformările sunt ustensile de extragere a caracteristicilor foarte eficiente.
Acestea vor fi prezentate pe scurt, pe baza documentaţiei Matlab.
Transformarea Fourier are un rol important în zona aplicaţiilor de procesare a
imaginilor, inclusiv analiză, restaurare, mărire şi compresare. Transformata Fourier este
definită de ecuaţia (10).

48
(10)
Variabilele ω1 şi ω2 sunt variabile de frecvenţă. Unităţile lor sunt radiani/sample.
F(ω1,ω2) este des numită reprezentarea domeniului de frecvenţă a f(m,n).
F(ω1,ω2) este o funcţie de valoare complexă care este periodica atât în ω1 cât şi în
ω2, de perioadă 2π. Din această cauză, de obicei e afişată doar în acest interval.
Lucrul cu transformata Fourier pe calculator implică de obicei o formă a
trasformatei cunoscută sub numele de transformata Fourier discretă (DFT). Sunt 2 motive
pt. folosirea acestei forme:
 Intrarea şi ieşirea DFT sunt discrete, cea ce e bine pt. manipularea pe calculator.
 Există un algoritm rapid pentru calcularea DFT cunoscut ca Transformarea
Fourier Rapidă (FFT).
DFT este de obicei definit pentru o funcţie discretă f(m,n) care e nonzero doar pe
intervalul finit 0 ≤m ≤ M −1 şi 0 ≤n ≤ N −1. relaţia bidimensională M-N a
DFT e dată de ecuaţia (11).

(11).

Valorile sunt coeficienţii DFT F( p, q ) ai f(m,n). în particular, valoarea F(0,0) este


numită coeficientul DC.
Coeficienţii rezultaţi din DFT nu pot fi folosiţi pentru a caracteriza proprietăţile
regiunii. În figura 62 sunt câteva imagini şi transformata Fourier corespunzătoare cu
M=N=152.

49
Fig 62. Imagini DFT. Sunt prezentate 5 imagini si transformata Fourier de 512x512

7.2.3. Transformările Cosine discrete


DCT are proprietatea că, pentru o imagine tipică, majoritatea informaţiei
semnificative este concentrată în doar câţiva coeficienţi ai DCT. Din acest motiv este
folosită în aplicaţii de compresie a imaginilor. DCT este la baza algoritmului de
compresare internaţional a imaginilor cunoscut sub nule de JPEG.
DCT bidimensional a unei matrice A de dimensiuni M-N este definită astfel:

(12)
unde 0<=p<=M-1 şi 0<=q<=N-1.
Valorile Bpq sunt numite coeficienţii DCT a lui A.
DCT este o transformare inversabilă, iar inversa sa este:

50
unde αp , αq sunt
aceleaşi ca în ecuaţia (12).
Inversa DCT poate fi interpretată că orice matrice AMN poate fi scrisă ca o sumă de
M*N funcţii de forma

(13).
Aceste funcţii sunt numite funcţii de bază a DCT. Coeficientul DCT Bpq, poate fi
considerat ca greutatea aplicată fiecărei funcţii de bază.
Figura 63 prezintă un exemplu, a proprietăţilor de compresie a DCT. Figura arată
imaginile reconstruite folosind 1,2,3,4 şi 5 coeficienţi DCT.

Fig. 63. Imagini reconstruite cu DCT. Se poate observa că ultima imagine (5 coeficienţii)
este aproape identică cu originalul.

Tabelul 1 prezintă nevoile de stocare a imaginii dacă informaţia gri este înlocuită
cu coeficienţi DCT. În procente este exprimată raţia elementelor diferite de 0 a
coeficienţilor DCT. Aceasta nu e o raţie de compresare reală deoarece coeficienţii sunt
numere reale iar informaţia gri este un întreg între 0 şi 255, aşa că raţia de compresie este
de 2,4 sau 8 ori mia mică (procentul este mai mare) decât valorile din tabelul 1.

Tabelul 1 Evaluare a compresiei imaginii cu coeficienţi DCT

7.3. Decompresie wavelet a imaginilor feţei


În [GARC00] autorii folosesc decompresia wavelet a feţei. Ei aplică o
decompresie arbore quad pe 2 nivele a imaginii, rezultând 16 wavelets a imaginii.
Punctul de pornire e decompresia wavelet clasică: imaginea e împărţită într-o
aproximaţie şi imagini detaliate. Aproximaţie e apoi împărţită într-o aproximaţie de nivel
2 şi detalii. Pentru a-l n -lea nivel semnanul este decompresat conform (14), (15), (16) şi
(17).

51
Pentru imagini reale rezultatul este redat în figura 64.

Fig 64. Wavelets ale feţei


Caracteristicile pot fi extrase din aproximaţie, calculând diferite calcule statistice
[GARC00]. Pe deasupra wavelets pot fi folosite şi pentru detectarea feţei, similar ca în
[MICE02].

52
7.4. Probleme în extragerea caracteristicilor
Caracteristicile extrase pot fi alterate de multe elemente externe sau interne ceea
ce e o mare problemă a parţii de identifica din procesul de detectarea a feţei.
Cele mai importante puncte sunt:
 Variaţii determinate de poziţia capului. Diferenţe de rotaţie, chiar dacă sunt foarte
mici, pot cauză disimilarităţi în caracteristicile determinate. Această problemă
poate fi rezolvată prin normalizarea poziţiei feţei, efectuând o rotaţie înapoi la
poziţia normală.
 Metode de normalizare scalară trebuie folosite dacă faţa se află la distanţe diferite
de dispozitiv. O dimensiune (înălţime, Lăţimea, sau distanţa dintre ochi) este
distanţa de normalizare, care trebuie să fie de lungime standard, şi restul imaginii
va fi scalată păstrând raţia. (vezi fig. 65)

Fig 65 Scalarea feţei

În [MICE02] am folosit caracteristicile normalizate după ce au fost extrase, am


folosit raţii de normalizare diferite pentru caracteristici orizontale si verticale:
 Caracteristicile orizontale sunt scalate cu „Lăţimeaa feţei la ochi”
 Caracteristicile verticale sunt scalate cu „distanţa bărbie-sprâncene”

8. Căutarea în baza de date.


Siguranţa căutării depinde în special de:
 precizia caracteristicile extrase: caracteristicile trebuie să fie bine identificate,
formă cu stabilă şi invariabilă pentru o persoană dată. Condiţii exterioare ambiante
(iluminare, mustaţă, barbă, vârstă) să nu ar trebui să altereze caracteristica extrasă. A lua
totul în considerare este aproape imposibil, dar noi trebuie să facem progresele în această
direcţie.
 Caracteristicile folosite pentru căutare ar trebui să fie cele care au cantitatea de
informaţie maximă. Caracteristici ca diametrul pupilei, forma liniei spectrale de margine
de păr nu sunt semnificative. Dacă ele se întrebuinţează, atunci trebuie să aibă o greutate
în decizie foarte joasă comparată cu alte caracteristici. Pe de altă parte, forma feţei, forma
nasului, dimensiunile feţei sunt specifice pentru o persoană dată
 Există multe abordări pentru procesul de identificare. Nu există o soluţie bună;
Ele au abordări diferite, au avantajele diferite şi dezavantaje diferite. În paragraful
următor sunteţi prezent mai multe abordări.

53
8.1. Abordări pentru căutarea feţelor
Îndrumările de bază pentru măsurarea asemănările sunt prezente în [DASK91],
dar există o varietate largă pentru a le măsura.
Primele şi cele mai folosite s-au bazat pe calculele statistice. Ele definesc o clasă
a caracteristicilor pentru fiecare persoană din baza de date. Dacă caracteristicile nu sunt
precise atunci setul de parametri poate varia în domenii foarte mari ce va decurge la
intersecţia nedorită de clasele diferite, însemnând că identitatea nu va fi detectată.
Abordările statistice au fost de încredere, eliminând valorile ce sunt afară din variaţia de
parametri acceptată.
Metoda prezentată în [MICE02] se bazează pe combinaţiile distanţei liniare
minime. O combinaţie liniară de vectorii prototipici aparţinând unei clase de feţe este
folosită ca să definească o măsură de distanţă de la vectorul interogare la clasă, măsura
fiind definită ca distanţa Euclidiană de la interogare la combinaţia liniară ce mai
apropiată de vectorul interogare.
Metoda celei mai apropiate linie de caracteristici ( [Stan98a], [STAN00]) este o
altă abordare. Orice două puncte de caracteristici ale aceleaşi persoane sunt generalizate
de linia de caracteristici traversând cele două puncte. Linia caracteristica derivată poate
să captureze mai mult variaţi ale imaginii feţei decât punctul original şi astfel extinzând
capacitatea bazei de date disponibile. Clasificarea se bazează pe distanţa minimă de la
caracteristica de interogare la fiecare linie de caracteristică.
Recent a fost încercări de folosire a reţelelor neuronale şi modele ascunse Markov
([NEFI99]) din care au decurs rezultatele bune, dar chiar şi aceste abordări nu dau
rezultate 100%.

8.2. Identificare folosind distanţele de caracteristici


Distanţele între caracteristicile detectate au fost folosite în [MICE02]. După ce
caracteristicile au fost detectate toate caracteristici de distanţă necesare pot fi extrase
pentru o figura de intrare necunoscută. Ca pasul următor, un model al feţei este construit
(un „vector de figură”). E compus din din15 valori, precum e descris în Tabelul 2.

Nr. Descrierea valorii Formula


1 Lăţimea feţei la nivelul de ochi x_right_at_eyes – x_left_at_eyes
2 Distanţa bărbie-sprânceana y_bottom – y_eyebrows
3 Lăţime feţei. x_right_edge –x_left_edge
4 Lăţimea la nivelul de nas. x_right_at_nose – x_left_at_nose
5 Lăţimea feţei la nivelul de gură. x_right_at_mouth – x_left_at_mouth
6 Distanţă între ochi. x_eye_right – x_eye_left
7 Lăţimea ochiului stânga x_left_eye_right – x_left_eye_left
8 Lăţimea ochiului drept x_right_eye_right- x_right_eye_left
9 Lăţimea gurii. x_mouth_right –x_mouth_left
10 Lăţimea nasului. x_nose_right – x_nose_left
11 Distanţă verticală între ochi şi y_eyes – y_eyebrows
sprâncene.
12 Distanţă verticală între ochi şi y_mouth – y_eyes
gură.

54
13 Distanţă verticală între gură şi nas. y_mouth – y_noes
14 Distanţă verticală între gură şi y_mouth – y_eyebrows
sprâncene.
15 Distanţă verticală între nas şi y_noes – y_eyebrows
sprâncene
Tabelul 2 Valori ale vectorului feţei

Pentru a identifica o persoană înregistrată din baza de date noi am folosit metrică
pătratică de eroare minimă, definită precum:

(10)

Atât vectorul de feţe (xk) cât şi modelul feţei pentru intrarea în baza de date (mki)
sunt scalaţi.
După ce căutarea e terminată, primele două valori minime ale εi sunt stoacate ca
să calculeze probabilitatea de identificare ca identitate cu eroarea pătratică minimă:

(11)

9. Ghidul de aplicaţie segmentat


Acest capitolul prezintă aplicaţia realizată. Ţinta acestei aplicaţii e să
implementeze într-un limbaj de programare algoritmii dezvoltaţi în mediul Matlab. Au
existat mai multe probleme care au necesitat completare:
 Problema cea mai simplă a fost transpunerea codului înregistrat Matlab în codul
de C.
 A fost o nevoie pentru a implementa în C algoritmii interni şi optimizaţi ai
Matlab.
 O interfaţă utilizator Windows a fost necesară ca să interacţioneze cu utilizatorul.
 O soluţie de captare video a fost necesară pentru a achiziţiona imaginea.
În paragraful următor implementarea detaliilor va fi dată, urmat de un paragraf
explicând utilizarea aplicaţiei din punctul de vere a utilizatorului.

9.1. Detalii ale implementării


Ţinta proiectului a fost să realizeze o aplicaţie DSP. La implementarea acestei
aplicaţii acest lucru a fost luat în considerare. Aplicaţia a fost luată în consideraţie ca o
versiune prototip pentru PC, o ustensilă de testare a algoritmilor. Deşi MS VC++ permite
un stil de programare orientată obiect foarte organizat şi de structură, acesta nu a fost
folosit la implementarea metodelor de procesare a imaginilor. Algoritmii au fost scrişi
stilul de limbaj procedural şi structurat, deoarece:
 Dacă algoritmii vor fi vor transpuşi în DSP, atunci numai în cazul cel mai bun va
fi compilatoarele C disponibile, altfel fiecare algoritm va trebui să fie tradus în
limbajul de asamblare al DSP

55
 Nevoile de memorie pentru stocarea imaginii sunt mari, a fost nevoie de compacta
cât mai zonele de memorie folosite. Dacă algoritmii ar fi fost împărţiţi în obiectele
interactive atunci trecerea parametrilor ar fi ocupat foarte multă memorie.
Pentru realizarea unei performanţe mai bune, principiul de încapsulare a
programării structurate e spart: parametrul care trece între metodele de prelucrare
foloseşte variabile globale, în care se stochează după fiecare fază rezultatul fiecărei faze.
Aceasta a fost compromisul acceptabil pentru nu copia rezultatele de unul pas la
intrarea pasului următor. În acelaşi stil, o altă variabilă globală s-a întrebuinţat pentru
salvarea calculelor matricei SUSAN folosită în detectarea Susan Edge în partea de
finisare a conturului.

9.1.1. Interfaţa utilizator


Interfaţa utilizator a fost construită în stilul cel mai simplu, bazat pe Clasele
Microsoft Framework( MFC). Este o aplicaţie de dialog singular cu clase de stil standard
provenite din CWinApp (CFaceDetectApp) şi CWinApp (CFaceDetectApp).
CFaceDetectDlg iniţializează dispozitivul de captură, Directshow captează graficele şi
manipulează evenimentele aplicaţiei. Programarea cadrelor a fost făcută într-un stil
simplu şi standard.

9.1.2 Capturarea video


Capturarea video e realizată folosind Directshow API şi cadrele Directx. Directx
este o tehnologie bazată COM, care dă un API la dispozitivele multimedia. Interfeţele
COM permit să folosirea independentă din limbajul de programare.
Folosind API-ul dat de Directshow cel mai multe probleme de capturare sunt
rezolvate de Directshow şi de adaptoarele multimedia ale Windows. Aplicaţia trebuie
doar să construiască un grafic de filtru corespunzător (termen introdus de Directshow: la
set bloc, interconectat într-o ordine secvenţială, fiecare bloc având o captură specifică,
funcţie de procesare sau afişare). Graficul de filtru include un filtru SamplerGraber, care
transmite fiecare capturată umplută la obiectul Samplergraber COM definit care
implementează interfaţa ISampleGrabberCB. CSamplerGraber copiază imaginea
capturată la o zonă de buffer şi o transmite la rutinele de prelucrare.
Partea cea mai multă importantă de această fază, codul de iniţializare de grafic de
filtru este prezent în Appendix B şi el este făcut bazându-se pe exemplele Directx SDK.

9.1.3. Rutine de procesare a imaginii


Rutinele de căutare a feţei în imaginea capturată, sunteţi încapsulate în obiectul
CFaceProcessing. Metoda DoProcessing(), a pornit de la lansările de obiect
CSamplerGraber la rând cu celelalte metode de procesare. Acestea corespund paşii
descrişi în amănunţime în Capitolul 6 şi sunt:
 ColorExtraction () - selectează zonele care au culorile asemănătoare cu ale feţei
(vedeţi §6. 1.)
 SelectMaximumFilled () - a selectat regiunea de suprafaţă maxim umplută (vedeţi
§6. 2.)
 FaceCrop() - restrânge zona de figură, reducând suprafaţa de prelucrat (vedeţi §6.
2.)

56
 SelectHue() - calculează valoarea de nuanţă rea şi regiunea aproape de aceasta
(vedeţi §6. 4.)
 Susan1() – detectarea marginii zonei pe baza Susan. Include restrângerea marginii
şi lărgirea marginii (vedeţi §6. 4.)
 Susan2()— Selectează de la zonele delimitate cu muchiile Susan, care formează
figura (vedeţi §6. 4.)
 ConturSmoothing()— sporeşte conturul feţei (vedeţi §6. 4.)

9.2. Mini Ghidul utilizator.


Independent de modul realizării, în modulul dinamic şi static, aplicaţia înfăţişează
aceeaşi interfaţă, diferenţa este că în modul static, nu există imagini capturate, fereastra
camerei este goală, şi butoanele de comandă ale camerei sunt dezactivate (Figura 66).

Fig 66. Interfaţa cu utilizatorul. În dreapta în modulul de timp real iar în stânga în
modulul static, de testare

În continuare, comportamentul aplicaţiei va fi prezentă în modul în timp real.


Modulul de testare este o versiune limitată a modului real.
După ce utilizatorul porneşte aplicaţia, dialogul principal apare şi imaginea
camerei online va fi afişată înăuntrul ferestrei Camera. Dacă nu există dispozitive de
capturare ataşate, atunci Camera şi ferestrele celelalte rămân goale, până când
dispozitivului funcţionabil va fi va ataşat la PC. Aplicaţia detectează conexiunea unui
dispozitivul de video nou, şi dacă el este capabil pentru a captura se va întrebuinţa ca
sursa (Figura 67) şi capturarea va începe instantaneu.

Fig. 67 Detectarea unui dispozitiv de capturare. După detectare dispozitivul va


aproviziona aplicaţia cu imagini.

57
Ferestrele de rezultat afişează să urmeze rezultatele (de sus în jos, stânga sau
drepta):
 Imaginea statică care a fost capturată. Această imagine este intrarea paşilor de
prelucrare. În fiecare 10 secunde, dacă procesele anterioare s-au terminat o
imagine nouă este capturată.
 Suprafaţa selectată cu culoare aproape de culoarea feţei.
 Regiuni maxim umplute, aceasta este figura şi alte regiuni care au o conexiune la
figura, şi au culorile asemănătoare.
 Rezultatul de selectare Susan.
 Rezultat final după calificarea conturului
Utilizatorul poate să selecteze cu butonul de selectare imaginile, care din ele să fie
afişate înăuntru ferestrei mari din stânga.
Utilizatorul poate să controleze procesul de capturare cu butoanele din subsolul
ferestrelor:
 Capturare să poată să fie oprite cu butonul Pasuse.
 Dacă capturarea a fost oprită, după aceea ea poate să fie repornită cu butonul
Start.
 Capturare să poată să fie făcută cadrul cu cadru la momente când utilizatorul
apasă butonul Step.
Cu butonul Stave oricare imagine de rezultat afişată în dialog să poată să fie
salvată într-un fişier bmp.
Caseta Status information informează utilizatorul ce ar trebui să facă ca să
primească un rezultat corect dacă prelucrarea nu poate să fie făcută. Aplicaţia poate să
sugereze utilizatorului să se apropie sau să se îndepărteze de cameră sau să regleze
expunerea camerei sau balanţa albă. La aceste mesaje de obicei este adăugat mesajul de
voce asemănător.

10. Concluzii şi îmbunătăţiri ulterioare


Această lucrare prezintă o abordare realizabilă pentru recunoaşterea feţei. A fost
prezentă de la prima fază de achiziţie a imaginii la identificarea feţei, până la
determinarea identităţii. Au fost folosite una sau mai multe abordări, metode sau
algoritmii pentru fiecare fază. Fiecare pas a fost tratat cu mai multe sau mai puţine detalii.
Cel mai mult descris a fost pasul de segmentare şi prezentarea de algoritmi folosiţi. El a
fost studiat şi s-au încercat mai multe abordări şi algoritmi decât au fost prezenţi în
această lucrare, dar aceştia au fost scoşi din prezentare, deoarece se pare că ei nu duc la
soluţiile bune.
Ideea de pornire a segmentării bazate pe culoare a fost dată de disponibilitatea
imaginilor color. Deşi în domeniile industriale şi camerele alb-negru sunt mai mult
folosite, datorită preţurilor, în prezent de doar camerele color au fost disponibile pentru
pe noi să folosim pentru proiect. Pentru a transforma imaginea de culoare capturată să
într-una alb-negru (ce a fost făcut în anul anterior) a părut să fie o pierdere de informaţie
nedorită.
Mai mulţi autori studiaţi afirmă că există regiunile de spaţiu de culoare de figură
specifice, şi cu ele o figură poate să fie să găsească bine într-o o imagine color. După un
studiu de o lungă perioadă concluzia care a fost luată e că acele regiuni ori nu sunt

58
universal valabile, autorii nu au specificat în mod corect toată informaţie necesară, sau
informaţia a fost interpretată greşit.
Segmentarea bazată pe culoare nu lucrează numai singură pentru mai multe
motive:
 Camera a capturat culorile incorecte, deoarece:
o calităţii mediocre a senzorului
o iluminare slabă
o colori nebalansate (balanţa albă a fost nu a făcută)
 Se poate să fie mai mult obiecte colorate în faţa camerei şi suprafaţa acestor
obiecte să fie detectate ca o faţă.
 Noi putem încerca să minimalizăm deficienţa anterioare strâmtând domeniul
culorii selecte. Această pe altă mână duce la regiuni ale feţei detaşate: pierderea
ochilor, nasului, zonele de frunte.
Abordarea luată a fost combinarea segmentării de culoare uşor restricţionată cu o
aproximaţie de faţă de nivel al doilea, care dă aproximaţia de faţă mai bună şi finală.
Aceste două abordări au fost prezente. Prima dă un rezultat foarte stabil, dar el nu este
atent la informaţia de muchie a feţei şi foloseşte în special culoarea şi informaţia de
intensitate imaginii. Aceasta face algoritmul foarte vulnerabil pentru schimbările
ambiante, în special pentru variaţiile fulger.
A doua abordare detectează muchiile într-o regiune a imaginii reduse, şi regiunile
delimitate cu aceste muchii sunt clasificate ca regiuni ale feţei sau de fundal. Acesta este
un proces de clasificare complex. Această clasificare este partea cea mai multă
vulnerabilă. Ea trebuie să fie foarte bine reglată în viitor pentru a da rezultate foarte bune,
pentru a depăşi în calitate prima abordare.
Platformele ţintă ale algoritmilor sunt procesoarele de semnal digitale. Deşi
îndeplinirea prezentă este pe sistemul PC, designul ales pentru implementare este cât mai
simplu cu putinţă. El permite uşor transportarea codului la un procesor DSP cu o simplă
migraţia de cod C sau o transformare de la C la cod de asamblare.
Problema cea mai mare care apare rezultă din nevoile mari de memorie ale
algoritmului. Implemetarea actuală are nevoie de 40 MB de memorie.

Observaţii Slăbiciuni Puncte forte


Segmentarea bazată pe culoare e folositoare la X
detectarea obiectelor de culoarea feţei.
Întăririle bazate pe muchii delimitează bine zonele fetei. X
Selectarea regiunilor de feţei sunt greu de realizat, X
depind de multe constante, care nu sunt destul de
precise.
A fost proiectat un algoritm de umplere combinată şi X
selectare de suprafaţă maximă.
Uni dintre algoritmii arii de suprafaţă maxime nu sunt X
optimizaţi.
Nevoile de memorie mari X

Tabelul 3 Puncte forte şi slăbiciuni

59
Eliminarea slăbiciunilor din Tabelul 3 este scopul dezvoltările viitoare:
 Structurile de informaţie ale algoritmului de umplere vor fi îmbunătăţite
pentru o viteză mai bună
 Constantele specifice ale algoritmului vor fi studiate şi se vor alege
valorile lor optime
 Alocările de memorie pentru structurile interne se vor reduce, nevoile de
memorie vor fi dinamic determinate de la parametrii obţinuţi în paşii
anteriori (ex. Pentru detectarea muchiei SUSAN de numărul muchiilor
depinde de dimensiunea de imaginii)
Alte dezvoltări aflate în plan:
 Integrare rutinelor în aplicaţia proiectului DALT 2.4
 Dezvoltare fazei de detectare de caracteristici.
 Transportarea aplicaţiei la un sistem bazat pe DSP
Concluzia finală după această lucrare e că câmpurile de procesare a imaginii sunt
domenii foarte importante ale tehnologiei informaţiei. În repetate rânduri este foarte greu
să reuşeşti ceea ce îţi propui, dar bucuria e mare când ceva nou rezultă din munca ta. De
asemenea există multe secrete neexplorate care fac acest domeniu unul foarte interesant.

60
Referinţe
CRET02 CretuAASK98K. Aas, ""Detection and Recognition of Faces in Video
Sequences"", Proceedings of the NOBIM, Oslo, June 1998.
AMIT998 Y. Amit, D. Geman, "A Computational Model for Visual Selection", Neural
Computation, vol. 11, pp. 1691-1715, 1998
BEYM93 D.J. Beymer, "Face Recognition Under Varying Pose", Technical Report, MIT
AI Lab, AI memo 1461, December 1993MIT technical report AI.1461, CBCL.
89, 1993
BRUN93 R. Brunelli and T. Poggio, "Face Recognition vs Templates", IEEE Trans. on
Pattern Analysis and Mach Intelligence, Vol. 15, pp. 1042 -1052, 1993.
CRET92 V. Cretu, "Structuri de date si tehnici de programare avansata", UTT
lithography, Timisoara, pp. 52-60, 1992
DASK91 Th.N.Daskalakis, C.N. Daskalakis, "Similarity Measures for Content Retrieval
of Images", Digital Signal Processing, Elsevier Science Publisher, 1991
FANS00 L. Fan, K.K. Sung, "A Combined Feature-Texture Similarity Measure for Face
Alignment Under Varying Pose", IEEE Proc. on Computer Vision and Pattern
Recognition (CVPR'00), Vol.1, pp. 1308-1315, May 2000
FERI02R.S. Feris, J.Gemmell, K. Toyama, V. Krüger, "Facial Feature Detection Using a
Hierarchical Wavelet Face Databases", Microsoft Research Technical Report,
Redmond, 2002
FLEC94 M.M. Fleck, "Practical Edge Finding with a Robust Estimator", IEEE Proc. on
Computer Vision and Pattern Recognition (CVPR'94), pp. 649-653, 1994
FLEC96 M.M. Fleck, D.A. Forsyth, "Finding Naked People", Proc. European Conf. on
Computer Vision , pp. 593-602, Germany: Springer-Verlag, 1996
GARC98 C.Garcia, G. Zikos, G.Tziritas, "Wavelet Packet Analysis for Face
Recognition", Image and Vision Computing, Vol. 18, No. 4, pp.289-297, Feb.
2000
GARC99a C.Garcia, G.Tziritas, "Face Detection Using Quantized Skin Color Regions
Merging and Wavelet Packet Analysis", IEEE trans. On Multimedia, vol.1,
September, 1999
GARC99b C.Garcia, G. Zikos, G.Tziritas, "Face Detection in Color Images using
Wavelet Packet Analysis", IEEE Int. Conf. on Multimedia Computing and
Systems, 1999
GUOL00 G. Guo, S.Z. Li, K.L. Chan, H. Pan, "Texture Image Segmentation using
Reduced Gabor Filter Set and Mean Shift Clustering", Fourth Asian Conference
on Computer Vision, ACCV2000, pp.198-203, 2000.
LIAO00R. Liao, S.Z. Li, "Face Recognition Based on Multiple Facial Features", In Proc.
IEEE Conf. on Automatic Face and Gesture Recognition, pp.239-244, 2000

61
LILU98 S.Z. Li, J. Lu, K.L. Chan, J. Liu, L. Wang, “Hierarchical Linear Combinnantions
for Face Recognition”, Proc. of ICPR'98, Vol.2, pp. 1191–1193, Australia, 1998
MENG00 L. Meng, T.Q. Nguyen, D.A Castnon, “An Image-based Bayesian Framework
for Face Detection”, IEEE Proc. on Computer Vision and Pattern Recognition
(CVPR'00), Vol.1, pp. 1302–1307, May 2000
MICE02 M.V. Micea, V. Cretu, L. Prodan, Z. Husz, “Face Recognition Techniques for
Embedded Systems”, submitted to Tran. on IEEE Signal and Image@@
NAGA00 Nagao, “Face Recognition by Distribution Specific Feature Extraction”, IEEE
Proc. on Computer Vision and Pattern Recognition (CVPR’00), Vol.1, pp.
1278–1285, May 2000
NEFI99A.V. Nefian, M.H. Hayes III., “Face Recognition Using an Embedded HMM”,
IEEE International Conference Audio Video Biometric based Person
Authentication, March 1999, p. 19-24.
OTSU79 N. Otsu, "A Threshold Selection Method from Gray-Level Histograms", IEEE
Trans.actions on Systems, Man, and Cybernetics, Vol. 9, pp. 62 - 66, 1979.
REDD84 S.S. Reddi, S.F. Rudin and H.R. Keshavan, "An Optimal Threshold Scheme for
image Segmentation", IEEE Trans.actions on Systems, Man, and Cybernetics,
Vol. 14, pp. 661- 665, July/August 1984.
ROWL99 H.A. Rowley, “Neutral Network Based Face Detection”, PhD thesis, CMU,
Pittsburg, 1999
SHAP01 L.G. Shapiro, G.C. Stockman, “Computer Vision”, Prentice Hall, New Jersey,
2001
SMITH95a S.M. SMITH, J.M. Brady, “SUSAN – A New Approach to Low Level Image
Processing”, Int. Journal of Computer Vision, 23(1):45–78, May 1997
SMITH95b S.M. SMITH, “Edge Thinning Used in the SUSAN Edge Detector”,
Technical Report TR95SMS5, 1995
STAN00 S.Z. Li, J. Lu, “Face Recognition Using the Nearest Feature Line Method”,
IEEE Trans. on Speech and Audio Processing, Vol.10, pp.439–443, September
2000
STAN98a S.Z. Li, “Face Recognition Based on Nearest Linear Combinations”, In
Proceedings of IEEE Computer Society Conference on Computer Vision and
Pattern Recognition, pp. 839–844,. June 23–25, 1998.
STAN98b S.Z. Li, J. Lu, “Generalizing Capacity of Face Database For Face
Recognition”, In. Proceedings of the Third IEEE International Conference on
Automatic Face and Gesture Recognition. pp. 402–405., April 14–16, 1998
TIAN00Y.Tian, T. Kanade, J. Cohn, “Recognizing Upper Face Action Units for Facial
Expression Analysis”, Proceedings of the IEEE Conference on Computer Vision
and Pattern Recognition (CVPR’00), Vol. 1, June, 2000, pp. 294–301.
WUHU00 Y.Wu, T.S. Huang, “Color Tracking by Transductive Learning”, In Proc. IEEE
Conf. on Computer Vision and Pattern Recognition (CVPR’00), Vol.II, pp.222–
227, Hilton Head Island, SC, June, 2000IEEE ??????, 2000
ZHAO00 W.Y. Zhao, R. Chellappa, “Illumination-Insensitive Face Recognition Using
Symmetric Shape-form-Shading”, IEEE Proc. on Computer Vision and Pattern
Recognition (CVPR'00), Vol.1, pp. 1278–1286, May 2000

62
Anexa A - Algoritmi Matlab

Extragerea culorii

Acest algoritm face o selecţie rapidă pentru imaginea iniţială. E foarte simplu dar are
slăbiciuni.

function Output = ColorExtraction(Image)


% using the color information this function creates a binary mask for
% the imput image. First a intensiti normalization is done. Then the
% logaritmic values are calcutated. The texture matrix is calculated too.
% these 4 informations are used to determine the posible zones of the
face
%
% Inputs : Image - RGB color
% Outputs : Output - logic mask of the face (binary)

Minval= min(min(min(Image)));
MinArray = double(Minval) * ones(size(Image(:,:,1)));

%logaritmic values
LR = LogValue(double(Image(:,:,1)) - MinArray);
LG = LogValue(double(Image(:,:,2)) - MinArray);
LB = LogValue(double(Image(:,:,3)) - MinArray);

I = LG;
Rg = LR - LG;
By = LB - ( LG + LR ) / 2;

%color information extraction


I_Mask = I > 200 & I<240;
Rg_Mask = Rg > 5 & Rg < 32;
By_Mask = (By > -28 & By < -7) | (By > -1 & By < 5);

%texture calculations
Texture = medfilt2 ( abs ( I - medfilt2 (I , [5 5] )), [ 7 7 ]);
TextureMask = Texture < 1;
Output = I_Mask & Rg_Mask & By_Mask; & TextureMask;

function Output = LogValue(Value)


% calculates and returns the logatimic (with 10 base)
% value of the Value parameter
% this function applies a random [0,1] correction, to enable better
% adaption for the skin color
% the 105 factor stands for good scaling the resulting value
% in zone witch cana better handled

63
%
% Inputs : Value - parameter what to be logaritmated
% Outputs : Output - logaritmic value
Output = 105 *log10( Value + 1 + random('unif', 0, 1, size(Value)));

Selectarea ariei umplute la maxim


Această funcţie efectuează umplerea combinată ci selectarea ariilor de regiune maxime
function Output = SelectMaximumFilled(InputMask);
% Fill the interrrior holes and selects from the resulting zones the biggest
%
% Inputs : ImageMask - Mask with holes(binary)
% Outputs : Output- The selected maximim zone (binary)
%
%

MAXCOLORS=5000;
Size= size(InputMask);
InputMask(1,:) = 0;
InputMask(:,1) = 0;
InputMask(Size(1), :) = 0;
InputMask(: ,Size(2)) = 0;

%global variable, to be available to the function’s subroutines


global C;
global L;
global N;
global Colors;
global invert;
C = zeros(Size);
L=cell(MAXCOLORS,1);
N=cell(MAXCOLORS,1);
Colors(1:MAXCOLORS) = 0;
invert=[1:MAXCOLORS];
NextColor = 0;

for y = 2 : Size(1)
for x = 2 : Size(2)
if InputMask(y,x) == 1
W_NW = SelectNon0( C(y, x-1), C(y-1, x-1) );
N_NE =SelectNon0( C(y-1, x), C(y-1, x+1) );

if W_NW >0 & N_NE >0


if W_NW == N_NE
C(y,x) = invrec(W_NW);
else
C(y,x)= join(W_NW, N_NE, y, x, 0);
end
elseif W_NW>0
C(y,x) = invert(W_NW);
elseif N_NE >0
C(y,x) = invert(N_NE);
else
NextColor = NextColor + 1;
L{NextColor} = [NextColor];
C(y,x) = NextColor;
end
Colors(C(y,x))= Colors(C(y,x)) + 1;
else %% if InputMask(y,x) == 0
if C(y, x-1) == 0 | C(y-1, x) == 0
%% this pixel has exit to margin
C(y,x) = 0;

64
if C(y,x-1) < 0
nullrow(-C(y,x-1), y, x);
end
if C(y-1,x) < 0
nullabove(-C(y-1,x));
end
else

if C(y, x-1)<0 | C(y-1,x)<0


%% continues a 0 zone
if C(y, x-1) < 0 & C(y-1, x) < 0
C(y,x) = -join( C(y, x-1), C(y-1, x), y, x, 1);
elseif C(y-1, x) < 0
C(y,x) = -invrec(-C(y-1, x));

%%adds the other as neighbour


Add0Neighbour(-C(y, x), C(y,x-1));
C(y,x) = -invert(-C(y, x-1));

%%add the other as neighbour


Add0Neighbour(-C(y, x), C(y-1,x));
else
NextColor = NextColor + 1;
C(y,x) = -NextColor;
Add0Neighbour(NextColor, C(y-1,x));
L{NextColor} = [NextColor];
end
Colors(-C(y,x))= Colors(-C(y,x)) + 1;

end

end %% if InputMask(y,x) = TRUE


end %%for x
end %%for y

%finalize the join


for i = NextColor:-1:1
if ~isempty(N{i}) & Colors(i)>0
T=invrec(N{i}(1));
join_at_end(T, i);
for j=2 : size(N{i},2)
join_at_end(T, N{i}(j));
end
end
end
[Max Pos]= max(Colors);
C=abs(C);

%generate result image


Output = ismember(C,L{Pos});

clear Colors;
clear N;
clear L;
clear C;
clear invert;

function Output = SelectNon0(A,B)


%subroutine of SelectMaximumFilled
%selects from A and B whis is greater then zero
if (A > 0)
Output = A;
else

65
Output = B;
end;

function Output= join (C1, C2, y, x, Negative)


%subroutine of SelectMaximumFilled
%joins C1,C2 backgorund of foreground regions
if Negative == 1
C1 = -C1;
C2 = -C2;
end
if C1 < C2
c1 = C1;
c2 = C2;
else
c1 = C2;
c2 = C1;
end

global Colors;
global L;
global N;
global C;

if Colors(c2) > 0
Colors(c1) = Colors(c1) + Colors(c2);
Colors(c2) = 0;
L{c1} = unique([L{c1} c2 L{c2}]);
if Negative==1
N{c1} = unique([N{c1} N{c2}]);
end
end

if C2<C1
% update row
% if C1>C2 do updates needed
if Negative==1
C1 = -C1;
C2 = -C2;
end
for X=1:x-1
if C(y,X)==C1
C(y,X)=C2;
end
end
end
invert(c2) = c1;
Output = c1;

function Add0Neighbour(Col, Color)


%subroutine of SelectMaximumFilled
%adds Color to the neighbours of the Col non-foreground color
global N;
if Color>0
N{Col}=union(N{Col}, [Color]);
end

function Output=invrec(n)
%subroutine of SelectMaximumFilled
%findes recursive the color into wich to color was changed
global invert;
while n ~= invert(n)
n = invert(n);
end;

66
Output = n;

function join_at_end(c1, c2)


%subroutine of SelectMaximumFilled
%join to colors at the final phase

global L;
global Colors;

if Colors(c2)>0
Colors(c1) = Colors(c1) + Colors(c2);
Colors(c2) = 0;
L{c1} = unique([L{c1} c2 L{c2}]);
end

function nullrow(Color, y, x);


%subroutine of SelectMaximumFilled
%
%updets a row when a non-backgorund pixel is found to be backgound
global C;
nullabove(Color);
for x2 = 1 : x
if C(y, x2) == -Color
C(y, x2)=0;
end
end

function nullabove(Color)
%subroutine of SelectMaximumFilled
%
%updets the when a non-backgorund pixel is found to be backgound
global Colors;
Colors(Color) = 0;

67
Anexa B - Iniţializarea DirectX
În această anexă e prezentă iniţializarea capturii DirectShow. E considerată valoaroasă
deoarece programarea COM are nevoie de cunoaşterea multor interfeţe iar alegerea celei
mai bune poate lua mult timp.

Codul care apelează iniţializarea e (din metoda OnDialogInit()):

HRESULT hr;
hr = InitStillGraph( );
if (FAILED(hr))
{
Error( TEXT("Failed to initialize StillGraph !"));
EndDialog(IDABORT );
return FALSE;
}

// Modify the window style of the capture and still windows


// to prevent excessive repainting
m_CameraScreen.ModifyStyle(0, WS_CLIPCHILDREN);
m_FaceScreen.ModifyStyle(0, WS_CLIPCHILDREN);

// Register for device add/remove notifications.


DEV_BROADCAST_DEVICEINTERFACE filterData;
ZeroMemory(&filterData, sizeof(DEV_BROADCAST_DEVICEINTERFACE));
filterData.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
filterData.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
filterData.dbcc_classguid = AM_KSCATEGORY_CAPTURE;

68
m_hDevNotify = RegisterDeviceNotification(mCB.m_hwndOwner,
&filterData, DEVICE_NOTIFY_WINDOW_HANDLE);
ASSERT(m_hDevNotify != NULL);

Iar acesta e codul care urmează iniţializării:

/// Initializes the still image capturing graph


HRESULT CFaceDetectDlg::InitStillGraph( )
{
HRESULT hr;

// creates a filter graph, if does not exists yet


//
if (!m_pGraph)
{
hr = m_pGraph.CoCreateInstance( CLSID_FilterGraph );
if( !m_pGraph )
{
Error( TEXT("Could not create filter graph") );
return E_FAIL;
}
}

// get whatever capture device exists


//
CComPtr< IBaseFilter > pCap;
GetDefaultCapDevice( &pCap );
if( !pCap )
{
Error( TEXT("No video capture device was detected on your
system.\r\n\r\n")
TEXT("This sample requires a functional video capture
device,
such\r\n")
TEXT("as a USB web camera.") );

//do not generate error: when a new device will be detected,


// that it will retry to constuct the graph
return S_OK;
}

// add the capture filter to the graph


//
hr = m_pGraph->AddFilter( pCap, L"Cap" );
if( FAILED( hr ) )
{
Error( TEXT("Could not put capture device in graph"));
return E_FAIL;
}

// create a sample grabber


//

hr = m_pGrabber.CoCreateInstance( CLSID_SampleGrabber );
if( !m_pGrabber )
{
Error( TEXT("Could not create SampleGrabber (is qedit.dll
registered?)"));
return hr;

69
}
CComQIPtr< IBaseFilter, &IID_IBaseFilter > pGrabBase( m_pGrabber );

// force it to connect to video, 24 bit


//
CMediaType VideoType;
VideoType.SetType( &MEDIATYPE_Video );
VideoType.SetSubtype( &MEDIASUBTYPE_RGB24 );
hr = m_pGrabber->SetMediaType( &VideoType ); // shouldn't fail
if( FAILED( hr ) )
{
Error( TEXT("Could not set media type"));
return hr;
}

// add the grabber to the graph


//
hr = m_pGraph->AddFilter( pGrabBase, L"Grabber" );
if( FAILED( hr ) )
{
Error( TEXT("Could not put sample grabber in graph"));
return hr;
}

// find the two pins and connect them


//
IPin * pCapOut = GetOutPin( pCap, 0 );

IPin * pGrabIn = GetInPin( pGrabBase, 0 );


hr = m_pGraph->Connect( pCapOut, pGrabIn );
if( FAILED( hr ) )
{
Error( TEXT("Could not connect capture pin #0 to grabber.\r\n")
TEXT("Is the capture device being used by another
application?"));
return hr;
}

// render the sample grabber output pin, so we get a preview window


//
// IPin * pGrabOut = GetOutPin( pGrabBase, 0 );
// hr = m_pGraph->Render( pGrabOut );

CComPtr< ICaptureGraphBuilder2 > pCapture;

hr = CoCreateInstance (CLSID_CaptureGraphBuilder2 , NULL,


CLSCTX_INPROC,
IID_ICaptureGraphBuilder2, (void **) &pCapture);

if( FAILED( hr ) )
{
Error( TEXT("Could not created caputure builder."));
return hr;
}

hr = pCapture->SetFiltergraph(m_pGraph);
if( FAILED( hr ) )
{
Error( TEXT("Could not set caputure builder graph."));
return hr;

70
}

hr = pCapture ->RenderStream (NULL, NULL,


pGrabBase, NULL, NULL);
if( FAILED( hr ) )
{
Error( TEXT("Could not render sample grabber output pin"));
return hr;
}

// set the selected quality for every filter


{
CComPtr< IEnumFilters > pEnum;
hr = m_pGraph -> EnumFilters(&pEnum);
if (!FAILED( hr ) && pEnum)
{
pEnum -> Reset();
ULONG ulFetched;
while (1)
{
CComPtr< IBaseFilter > pFilter;
hr = pEnum -> Next(1, &pFilter, &ulFetched);

if ( hr != S_OK )
break;

CComQIPtr< IIPDVDec, &IID_IIPDVDec > pDVDec( pFilter );


if (pDVDec)
{
pDVDec -> put_IPDisplay(DVRESOLUTION_SELECTED);
}
}
}
}
// ask for the connection media type so we know how big
// it is, so we can write out bitmaps
//
AM_MEDIA_TYPE mt;
hr = m_pGrabber->GetConnectedMediaType( &mt );
if ( FAILED( hr) )
{
Error( TEXT("Could not read the connected media type"));
return hr;
}

VIDEOINFOHEADER * vih = (VIDEOINFOHEADER*) mt.pbFormat;


mCB.lWidth = vih->bmiHeader.biWidth;
mCB.lHeight = vih->bmiHeader.biHeight;
FreeMediaType( mt );

// don't buffer the samples as they pass through


//
m_pGrabber->SetBufferSamples( FALSE );

// only grab one at a time, stop stream after


// grabbing one sample
//
m_pGrabber->SetOneShot( FALSE );

// set the callback, so we can grab the one sample

71
//
m_pGrabber->SetCallback( &mCB, 1 );

// obtain media position interface


//

CComQIPtr< IVideoWindow, &IID_IVideoWindow > pWindow = m_pGraph;


if( !pWindow )
{
Error( TEXT("Could not get video window interface"));
return E_FAIL;
}

// set up the preview window to be in our dialog


// instead of floating popup
//
HWND hwndCamera = NULL;
GetDlgItem( IDC_STATIC_CAMERA, &hwndCamera );
RECT rc;
::GetWindowRect( hwndCamera, &rc );
pWindow->put_Owner( (OAHWND) hwndCamera );
pWindow->put_Left( 0 );
pWindow->put_Top( 0 );
pWindow->put_Width( rc.right - rc.left );
pWindow->put_Height( rc.bottom - rc.top );
pWindow->put_Visible( OATRUE );
pWindow->put_WindowStyle( WS_CHILD | WS_CLIPSIBLINGS );

// Add our graph to the running object table, which will allow
// the GraphEdit application to "spy" on our graph
#ifdef REGISTER_FILTERGRAPH
hr = AddGraphToRot(m_pGraph, &m_dwGraphRegister);
if (FAILED(hr))
{
Error(TEXT("Failed to register filter graph with ROT!"));
m_dwGraphRegister = 0;
}
#endif

//set frame rate


{
CComQIPtr< IAMStreamConfig, &IID_IAMStreamConfig > pVSC ( pCapOut );
if(pVSC)
{
AM_MEDIA_TYPE *pmt;
hr = pVSC->GetFormat(&pmt);
// DV capture does not use a VIDEOINFOHEADER
if(hr == NOERROR)
{
if(pmt->formattype == FORMAT_VideoInfo)
{
VIDEOINFOHEADER *pvi = (VIDEOINFOHEADER *)pmt-
>pbFormat;
pvi->AvgTimePerFrame
=LONGLONG)DELAY_BETWEEN_FRAMES*10000000;

hr = pVSC->SetFormat(pmt);
if(hr != S_OK)
//ErrMsg(TEXT("%x: Cannot set new frame rate"),
hr);

72
Error( TEXT("Cannot set frame rate"));
}
DeleteMediaType(pmt);
}
}
}

// run the graph


//
CComQIPtr< IMediaControl, &IID_IMediaControl > pControl = m_pGraph;
hr = pControl->Run( );
if( FAILED( hr ) )
{
Error( TEXT("Could not run graph"));
return hr;
}
m_eState = Run;
return 0;
}

/// Determines the filter for capturing


void CFaceDetectDlg::GetDefaultCapDevice( IBaseFilter ** ppCap )
{
HRESULT hr;

*ppCap = NULL;

// create an enumerator
//
CComPtr< ICreateDevEnum > pCreateDevEnum;
pCreateDevEnum.CoCreateInstance( CLSID_SystemDeviceEnum );
if( !pCreateDevEnum )
return;

// enumerate video capture devices


//
CComPtr< IEnumMoniker > pEm;
pCreateDevEnum->CreateClassEnumerator( CLSID_VideoInputDeviceCategory,
&pEm, 0 );
if( !pEm )
return;

pEm->Reset( );

// go through and find first video capture device


//
while( 1 )
{
ULONG ulFetched = 0;
CComPtr< IMoniker > pM;
hr = pEm->Next( 1, &pM, &ulFetched );
if( hr != S_OK )
break;

// get the property bag interface from the moniker


//
CComPtr< IPropertyBag > pBag;
hr = pM->BindToStorage( 0, 0, IID_IPropertyBag, (void**) &pBag );

73
if( hr != S_OK )
continue;

// ask for the english-readable name


//
CComVariant var;
var.vt = VT_BSTR;
hr = pBag->Read( L"FriendlyName", &var, NULL );
if( hr != S_OK )
continue;

// ask for the actual filter


//
hr = pM->BindToObject( 0, 0, IID_IBaseFilter, (void**) ppCap );
if( *ppCap )
break;
}
return;
}

void CFaceDetectDlg::ClearGraphs( )
{
// Destroy capture graph
if( m_pGraph )
{
// have to wait for the graphs to stop first
//
CComQIPtr< IMediaControl, &IID_IMediaControl > pControl = m_pGraph;
if( pControl )
pControl->Stop( );

// make the window go away before we release graph


// or we'll leak memory/resources
//
CComQIPtr< IVideoWindow, &IID_IVideoWindow > pWindow = m_pGraph;
if( pWindow )
{
pWindow->put_Visible( OAFALSE );
pWindow->put_Owner( NULL );
}

#ifdef REGISTER_FILTERGRAPH
// Remove filter graph from the running object table
if (m_dwGraphRegister)
RemoveGraphFromRot(m_dwGraphRegister);
m_dwGraphRegister = 0;
#endif
m_pGraph.Release( );
m_pGrabber.Release( );
m_eState = NotInitialized;
}
}

74

You might also like