Professional Documents
Culture Documents
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....................................................................................................5 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 ...................................................................12 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..........................................................................14 5.3.Egalarile de histograma............................................................................................15 5.4.Segmentarea culorii de baza....................................................................................16 5.5. Transformarea morfologica....................................................................................16 6. Segmentarea...................................................................................................................18 6.1. Primul pas. Culoarea bazata pe regiuni selectate....................................................18 6.2 Prelucrarea anticipata a formei fetei........................................................................22 6.2.1 Selecteaza mai complet umplutura regiuniei,...................................................22 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.4.3 Netezirea conturului..........................................................................................40 7. Extragerea caracteristicilor............................................................................................43
7.1. Caracteristici n funcie de distan i raie.............................................................43 7.1.1 Detectarea sprncenelor....................................................................................43 7.1.2 Detectarea ochilor.............................................................................................43 7.1.3 Detectarea nasului.............................................................................................44 7.1.3 Detectarea gurii.................................................................................................44 7.1.5 Modelarea conturului feei ...............................................................................45 7.2. Alte caracteristici....................................................................................................45 7.2.1. Proprieti geometrice......................................................................................45 7.2.2. Transformri Fourier i transformri Fourier discrete.....................................48 7.2.3. Transformrile Cosine discrete........................................................................50 7.3. Decompresie wavelet a imaginilor feei.................................................................51 7.4. Probleme n extragerea caracteristicilor..................................................................53 8. Cutarea n baza de date................................................................................................53 8.1. Abordri pentru cutarea feelor.............................................................................54 8.2. Identificare folosind distanele de caracteristici.....................................................54 9. Ghidul de aplicaie segmentat........................................................................................55 9.1. Detalii ale implementrii.........................................................................................55 9.1.1. Interfaa 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 mbuntiri ulterioare.............................................................................58 Referine.............................................................................................................................61 Anexa A - Algoritmi Matlab..............................................................................................63 Anexa B - Iniializarea DirectX.........................................................................................68
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.
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. 3
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.
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 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.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 intr-o descompunere de nivel doi. Trasaturile fetei sunt localizate utilizand aceste unde. Vectorul fetei este obtinut de la valorile regiunilor statistice.
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.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, 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.
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 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.
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
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 8
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.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 11 2 1 1 Ele sunt : 1 1 1 0 1 1 11 2 1 1 1 1 1 1 16 25 1 1 1 1 1 .951 1 1 1 10 1 , 1 1 1 1 , 1 2 4 2 , 1
3 6 7 8
4 6 4 2
5 9 2 3
8 5 3 2
9 6 4 2
x x x x x
x x x x x
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
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.
11
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
12
1 1 2 8 7
1 1 2 8 8
1 1 2 7 7
1 1 2 7 7 0 -1 -6 0 x
1 3 2 7 7 0 -1 -5 1 x 0 -1 -5 0 x
Figura 12.
-2 -1 -5 0 x
X x X X x
Figura 11.
Derivate si este
pentru directia lui X si derivate D. Valoarea finala a derivatei 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
13
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
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
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).
15
Figura 16. Egalarea de histograma. Imaginea originala si histograma de sus, imaginea netezita ultima de jos
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
Eroziunea
Dilatarea
Deschiderea
Inchiderea
Figura 19. Transformari morfologice
17
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. 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.
18
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:
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.
19
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
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
20
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
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.
21
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.
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 22
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.
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 susdreapta(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 WWE 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
23
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 : 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
24
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.
25
26
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
29
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 . 30
B) suprafata maxim umplutura se determina pentru mulajul care rezulta (fig 34c). 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
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). 31
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 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
33
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|=|19| 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
38
valoare maxima intre regiunile invecinate disponibile. Regiunile mic si selectate sunt 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
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 regsete faa n imagine. n faza de extragere a caracteristicilor aceast regiune va fi verificat pentru a se gsi caracteristici. Dac se gsesc mai multe caracteristici cutarea feei va fi mai uoar si mai exact. Principalul scop al acestei etape es extrag ct mai multe caracteristici ale feei. Mai nti sunt prezentate cteva caracteristici care au fost identificate i extrasee n proiectul DALT.2.4/2001 i apoi sunt prezentate alte metode posibile.
43
Poziia orizontal a centrului ochilor (x_eye_left i x_eye_rigth) precum i axa de simetrie a feei (x_symmetry) sunt detectate precum n [ASK98]. Aceste dou coordinate preliminare ale ochilor sunt folosite n continuare pentru a detecta colul ochiului. Pentru a minimiza erorile de detecie generate de o iluminare neuniform a feei, am definit regiuni separate de interes pentru segmentarea Reddi (fig 55). Pixeli cei mai ntunecai i cei mai spre dreapta i stnga sunt colii 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. 56 ROI segmentate Reddi pentru determinarea caracteristicilor orizontatele ale nasului
Fig. 57 ROI segmentate Reddi ale gurii Cutnd poziia cea mai din dreapta i cea mai din stnga a pixelilor ntunecai ntr-o band ngust n jurul poziie verticale gsite pentru gur se gsesc coordonatele colurilor 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
Fig 58. Imaginea original a centroid-ului. Imaginea din stnga este o imagine alb negru cu o singur regiune. Aceast imagine va fi folosit pentru exemplificarea proprietilor prezentate n paragraf. n imaginea din dreapta ete o cruce care marcheaz centrul imaginii. Aria regiunii este 5692. n paragraful urmtor vor fi prezentate proprietile geometrice ale regiunii R. Se presupune c pixeli sunt de form ptratic. Aria lui R este:
sau numrul de pixeli din regiune. Centroid-ul este locaia medie a pixelilor n setul R. Dei x i y sunt ntregi i
45
Lungimea perimetrului P a unei regiuni este o alt proprietate. O simpl definire a unui perimetru a unei regiuni fr guri este setul pixelilor graniei interioare. Un pixel al unei regiuni este un pixel de grani dac are civa pixeli vecini care sunt n afara regiuni. Cnd se folosete 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 4conectat. Cnd se folosete 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 8conectat. Aceasta este motivaia definiiei perimetrului 4 i 8 conectivitii:
Fig. 59. Perimetrii. n dreapta este perimetrul de 4-conectivitate a unei regiuni cu lungime, iar n stnga este perimetrul de 4-conectivitate a unei regiume cu lungime Lungimea calculat |P| a perimetrului P, pixeli din P trebuie ordonai 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 msur comun a circularitii regiunii este lungimea perimetrului la ptrat mprit la arie:
E de folos s ai idee unde se afl regiunea ntr-o imagine. Un concept folositor este cutia de restrngeri, care e un dreptunghi cu pri orizontale i verticale care ngrdesc regiunea si ating cele mai extreme puncte de sus, jos, stnga i dreapta.
46
Fig. 60 Cutie de ncadrare Momente spaiale sunt adesea folosite pentru a descrie forma unei regiune. Exist trei momentele spaiale de ordinul al doilea al unei regiune. Ele sunt definite dup cum urmeaz: Momentul de ordinul al doilea de vertical.
Deci yy msoar variaia orizontal, xx msoar variaia orizontal, iar yx msoar variaia orizontal i vertical. Aceste valori sunt adesea folosite ca descriptori de form, deoarece sunt invariabili la traziie i schimbare de scal a unei forme 2D. Momentele spaiale 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 minor are o lungime de . Axa
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 nconjurtoare n [TIAN00] sunt prezentate cteva metode pentru detectarea caracteristicilor i extragerea lor. Aceti algoritmi sunt creai pentru analiza expresiilor, dar informaia formelor caracteristicilor feei poate fi folosit foarte uor ca proprietate global a feei. Pentru detectarea unui proprieti locale se poate folosi reeaua wavelet precum n [FERI02]. Reeaua wavelet detecteaz forma dintr-o fa necunoscut, folosind un set de fee cunoscute, care deja au semne pentru toate caracteristicile detectabile.
48
(10) Variabilele 1 i 2 sunt variabile de frecven. Unitile lor sunt radiani/sample. F(1,2) este des numit reprezentarea domeniului de frecven a f(m,n). F(1,2) este o funcie de valoare complex care este periodica att n 1 ct i n 2, de perioad 2. Din aceast cauz, de obicei e afiat 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 ieirea 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 funcie discret f(m,n) care e nonzero doar pe intervalul finit 0 m M 1 i 0 n N 1. relaia bidimensional M-N a DFT e dat de ecuaia (11).
(11). Valorile sunt coeficienii DFT F( p, q ) ai f(m,n). n particular, valoarea F(0,0) este numit coeficientul DC. Coeficienii rezultai din DFT nu pot fi folosii pentru a caracteriza proprietile regiunii. n figura 62 sunt cteva imagini i transformata Fourier corespunztoare cu M=N=152.
49
Fig 62. Imagini DFT. Sunt prezentate 5 imagini si transformata Fourier de 512x512
(12) unde 0<=p<=M-1 i 0<=q<=N-1. Valorile Bpq sunt numite coeficienii DCT a lui A. DCT este o transformare inversabil, iar inversa sa este:
50
unde p , q sunt aceleai ca n ecuaia (12). Inversa DCT poate fi interpretat c orice matrice AMN poate fi scris ca o sum de M*N funcii de forma
(13). Aceste funcii sunt numite funcii de baz a DCT. Coeficientul DCT Bpq, poate fi considerat ca greutatea aplicat fiecrei funcii de baz. Figura 63 prezint un exemplu, a proprietilor de compresie a DCT. Figura arat imaginile reconstruite folosind 1,2,3,4 i 5 coeficieni DCT.
Fig. 63. Imagini reconstruite cu DCT. Se poate observa c ultima imagine (5 coeficienii) este aproape identic cu originalul. Tabelul 1 prezint nevoile de stocare a imaginii dac informaia gri este nlocuit cu coeficieni DCT. n procente este exprimat raia elementelor diferite de 0 a coeficienilor DCT. Aceasta nu e o raie de compresare real deoarece coeficienii sunt numere reale iar informaia gri este un ntreg ntre 0 i 255, aa c raia de compresie este de 2,4 sau 8 ori mia mic (procentul este mai mare) dect valorile din tabelul 1.
51
Fig 64. Wavelets ale feei Caracteristicile pot fi extrase din aproximaie, calculnd diferite calcule statistice [GARC00]. Pe deasupra wavelets pot fi folosite i pentru detectarea feei, similar ca n [MICE02].
52
Fig 65 Scalarea feei n [MICE02] am folosit caracteristicile normalizate dup ce au fost extrase, am folosit raii de normalizare diferite pentru caracteristici orizontale si verticale: Caracteristicile orizontale sunt scalate cu Limeaa feei la ochi Caracteristicile verticale sunt scalate cu distana brbie-sprncene
54
13 14 15
Distan vertical ntre gur i nas. y_mouth y_noes Distan vertical ntre gur i y_mouth y_eyebrows sprncene. Distan vertical ntre nas i y_noes y_eyebrows sprncene Tabelul 2 Valori ale vectorului feei
Pentru a identifica o persoan nregistrat din baza de date noi am folosit metric ptratic de eroare minim, definit precum:
(10) Att vectorul de fee (xk) ct i modelul feei pentru intrarea n baza de date (mki) sunt scalai. Dup ce cutarea e terminat, primele dou valori minime ale i sunt stoacate ca s calculeze probabilitatea de identificare ca identitate cu eroarea ptratic minim:
(11)
Nevoile de memorie pentru stocarea imaginii sunt mari, a fost nevoie de compacta ct mai zonele de memorie folosite. Dac algoritmii ar fi fost mprii n obiectele interactive atunci trecerea parametrilor ar fi ocupat foarte mult memorie. Pentru realizarea unei performane mai bune, principiul de ncapsulare a programrii structurate e spart: parametrul care trece ntre metodele de prelucrare folosete variabile globale, n care se stocheaz dup fiecare faz rezultatul fiecrei faze. Aceasta a fost compromisul acceptabil pentru nu copia rezultatele de unul pas la intrarea pasului urmtor. n acelai stil, o alt variabil global s-a ntrebuinat pentru salvarea calculelor matricei SUSAN folosit n detectarea Susan Edge n partea de finisare a conturului.
56
SelectHue() - calculeaz valoarea de nuan rea i regiunea aproape de aceasta (vedei 6. 4.) Susan1() detectarea marginii zonei pe baza Susan. Include restrngerea marginii i lrgirea marginii (vedei 6. 4.) Susan2() Selecteaz de la zonele delimitate cu muchiile Susan, care formeaz figura (vedei 6. 4.) ConturSmoothing() sporete conturul feei (vedei 6. 4.)
Fig 66. Interfaa cu utilizatorul. n dreapta n modulul de timp real iar n stnga n modulul static, de testare n continuare, comportamentul aplicaiei va fi prezent n modul n timp real. Modulul de testare este o versiune limitat a modului real. Dup ce utilizatorul pornete aplicaia, dialogul principal apare i imaginea camerei online va fi afiat nuntrul ferestrei Camera. Dac nu exist dispozitive de capturare ataate, atunci Camera i ferestrele celelalte rmn goale, pn cnd dispozitivului funcionabil va fi va ataat la PC. Aplicaia detecteaz conexiunea unui dispozitivul de video nou, i dac el este capabil pentru a captura se va ntrebuina ca sursa (Figura 67) i capturarea va ncepe instantaneu.
Fig. 67 Detectarea unui dispozitiv de capturare. Dup detectare dispozitivul va aproviziona aplicaia cu imagini. 57
Ferestrele de rezultat afieaz s urmeze rezultatele (de sus n jos, stnga sau drepta): Imaginea static care a fost capturat. Aceast imagine este intrarea pailor de prelucrare. n fiecare 10 secunde, dac procesele anterioare s-au terminat o imagine nou este capturat. Suprafaa selectat cu culoare aproape de culoarea feei. Regiuni maxim umplute, aceasta este figura i alte regiuni care au o conexiune la figura, i au culorile asemntoare. Rezultatul de selectare Susan. Rezultat final dup calificarea conturului Utilizatorul poate s selecteze cu butonul de selectare imaginile, care din ele s fie afiate nuntru ferestrei mari din stnga. 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 fcut cadrul cu cadru la momente cnd utilizatorul apas butonul Step. Cu butonul Stave oricare imagine de rezultat afiat n dialog s poat s fie salvat ntr-un fiier bmp. Caseta Status information informeaz utilizatorul ce ar trebui s fac ca s primeasc un rezultat corect dac prelucrarea nu poate s fie fcut. Aplicaia poate s sugereze utilizatorului s se apropie sau s se ndeprteze de camer sau s regleze expunerea camerei sau balana alb. La aceste mesaje de obicei este adugat mesajul de voce asemntor.
58
studiu de o lung perioad concluzia care a fost luat e c acele regiuni ori nu sunt universal valabile, autorii nu au specificat n mod corect toat informaie necesar, sau informaia a fost interpretat greit. Segmentarea bazat pe culoare nu lucreaz numai singur pentru mai multe motive: Camera a capturat culorile incorecte, deoarece: o calitii mediocre a senzorului o iluminare slab o colori nebalansate (balana alb a fost nu a fcut) Se poate s fie mai mult obiecte colorate n faa camerei i suprafaa acestor obiecte s fie detectate ca o fa. Noi putem ncerca s minimalizm deficiena anterioare strmtnd domeniul culorii selecte. Aceast pe alt mn duce la regiuni ale feei detaate: pierderea ochilor, nasului, zonele de frunte. Abordarea luat a fost combinarea segmentrii de culoare uor restricionat cu o aproximaie de fa de nivel al doilea, care d aproximaia de fa mai bun i final. Aceste dou abordri au fost prezente. Prima d un rezultat foarte stabil, dar el nu este atent la informaia de muchie a feei i folosete n special culoarea i informaia de intensitate imaginii. Aceasta face algoritmul foarte vulnerabil pentru schimbrile ambiante, n special pentru variaiile fulger. A doua abordare detecteaz muchiile ntr-o regiune a imaginii reduse, i regiunile delimitate cu aceste muchii sunt clasificate ca regiuni ale feei 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 depi n calitate prima abordare. Platformele int ale algoritmilor sunt procesoarele de semnal digitale. Dei ndeplinirea prezent este pe sistemul PC, designul ales pentru implementare este ct mai simplu cu putin. El permite uor transportarea codului la un procesor DSP cu o simpl migraia 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. Observaii Segmentarea bazat pe culoare e folositoare la detectarea obiectelor de culoarea feei. ntririle bazate pe muchii delimiteaz bine zonele fetei. Selectarea regiunilor de feei sunt greu de realizat, depind de multe constante, care nu sunt destul de precise. A fost proiectat un algoritm de umplere combinat i selectare de suprafa maxim. Uni dintre algoritmii arii de suprafa maxime nu sunt optimizai. Nevoile de memorie mari Slbiciuni Puncte forte X X X X X X
Eliminarea slbiciunilor din Tabelul 3 este scopul dezvoltrile viitoare: Structurile de informaie ale algoritmului de umplere vor fi mbuntite pentru o vitez mai bun Constantele specifice ale algoritmului vor fi studiate i se vor alege valorile lor optime Alocrile de memorie pentru structurile interne se vor reduce, nevoile de memorie vor fi dinamic determinate de la parametrii obinui n paii anteriori (ex. Pentru detectarea muchiei SUSAN de numrul muchiilor depinde de dimensiunea de imaginii) Alte dezvoltri aflate n plan: Integrare rutinelor n aplicaia proiectului DALT 2.4 Dezvoltare fazei de detectare de caracteristici. Transportarea aplicaiei la un sistem bazat pe DSP Concluzia final dup aceast lucrare e c cmpurile de procesare a imaginii sunt domenii foarte importante ale tehnologiei informaiei. n repetate rnduri este foarte greu s reueti ceea ce i propui, dar bucuria e mare cnd ceva nou rezult din munca ta. De asemenea exist multe secrete neexplorate care fac acest domeniu unul foarte interesant.
60
Referine
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. Krger, "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.
61
IEEE Conf. on Automatic Face and Gesture Recognition, pp.239-244, 2000 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. 11911193, 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. 13021307, 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 (CVPR00), Vol.1, pp. 12781285, 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):4578, 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.439443, 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. 839844,. June 2325, 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. 402405., April 1416, 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 (CVPR00), Vol. 1, June, 2000, pp. 294301. WUHU00 Y.Wu, T.S. Huang, Color Tracking by Transductive Learning, In Proc. IEEE Conf. on Computer Vision and Pattern Recognition (CVPR00), Vol.II, pp.222227, 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. 12781286, May 2000
62
63
% in zone witch cana better handled % % Inputs : Value - parameter what to be logaritmated % Outputs : Output - logaritmic value Output = 105 *log10( Value + 1 + random('unif', 0, 1, size(Value)));
64
%% this pixel has exit to margin C(y,x) = 0; 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 end %%for x end %%for y InputMask(y,x) = TRUE
%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 clear clear clear clear Colors; N; L; C; invert;
function Output = SelectNon0(A,B) %subroutine of SelectMaximumFilled %selects from A and B whis is greater then zero if (A > 0)
65
Output = A; else 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 global global global Colors; L; N; 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)
66
n = invert(n); end; 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
68
// 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?)"));
69
return hr; } 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."));
70
return hr; } 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 );
71
// set the callback, so we can grab the one sample // 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 ); // // #ifdef hr if { } #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) Add our graph to the running object table, which will allow the GraphEdit application to "spy" on our graph REGISTER_FILTERGRAPH = AddGraphToRot(m_pGraph, &m_dwGraphRegister); (FAILED(hr)) Error(TEXT("Failed to register filter graph with ROT!")); m_dwGraphRegister = 0;
72
//ErrMsg(TEXT("%x: Cannot set new frame rate"), hr); 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 //
73
CComPtr< IPropertyBag > pBag; hr = pM->BindToStorage( 0, 0, IID_IPropertyBag, (void**) &pBag ); 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