Face Detection folosind Skin Detection si Template Matching
0In urmatoarele randuri voi prezenta o implementare a unui algoritm de Face Detection folosind o tehnica denumita stiințific Skin Detection pentru a putea detecta pielea din imaginile digitale si imaginileTemplate Matching pentru a separa restul partilor corpului de fetele umane.
Cred ca mai intai trebuie sa lamurim cateva lucruri :
Ce inseamna Face Detection?
Face Detection (detectarea faciala) este o tehnologie bazata pe computere ce determina puncte pozitia si marimea fetelor umane din poze digitale alese arbitrar.Aceasta tehnologie detecteaza practic doar fetele umane, restul partilor corpului (mainile,gatul etc) fiind ignorate.
Ce este Skin Detection?
Skin detection(detectarea pielii) este o tehnologie bazata pe computere ce incearca sa determine daca pixelii unei imagini digitale pot fi sau nu urme ale pielii umane in imaginea respectiva.
Ce este template Matching ?
Template matching este o tehnica in procesarea digitala a imaginilor ce consta in detectarea portiunilor din imagine ce sunt asemanatoare cu o imagine sablon.Poate fi folosita ca testarea calitatii sau ca o metoda de a determina marginile in imaginile digitale.
Dar,cum pot implementa si eu algoritmul?
Este destul de simplu, ai nevoie de cele 2 clase scrise in C# de mai jos si cateva linii de cod scrise de tine si GATA.
Skin Detection Class
Face Detection Class
Dar nu inteleg cum functioneaza.
In acest caz citeste tot ce scrie mai jos.
Pentru inceput, avem nevoie de o imagine digitala ce contine fete umane,un sablon de tip binar si o valoare prag(threshold).
Pentru exemplu nostru voi folosi :
Fisierul SkinDetection este o clasa ce proceseaza o imagine data si returneaza o noua imagine in format binar(formata doar din alb si negru,unde alb reprezinta punctele din imagine ce sunt considerate piele).Aceasta imagine va fi mai usor de procesat de interpretorul nostru.Dupa multe ore de munca am reusit sa combin 3 functii principale(IsSkinRGB_L, IsSkinRGB_G, IsSkinHSV) pentru a returna un exemplu pozitiv de eficienta maxima.Pe scurt fiecare functie are un interval in valorile RGB in care un pixel este considerat sau nu culoarea pielii umane.
Rezutatul dupa procesarea imaginii cu clasa Skin Detection :
1.Modul normal
2.Modul binar
Ce urmeaza?
Este momentul intrarii in actiune a clasei Face Detection.
Ce face clasa Face Detection ?
Nu este cine stie ce, noua imagine creata de clasa Skin Detection este preluata de functia principala (Getface).Dupa asta, o functie interna face o normalizare a punctelor albe(in zonele unde pixelii de culoare alba depasesc numarul celor de culoare neagra,toti pixelii devin de culoare alba).Dupa aceasta operatie, extragem diferite sub-imagini la marimi diferite si determinam daca imaginea extrasa se potriveste cu sablonul folosit intr-un procent minim de 60% in cazul nostru.Aceasta operatie este facuta de o functie ce verifica fiecare pixel din imaginea extrasa cu fiecare pixel din sablon la pozitia respectiva.Functia returneaza procentul de asemanare a imaginii.
Daca depaseste pragul limita este considerata fata umana,iar in caz contrar nu.
Implementare :
Avem nevoie de 3 picturebox`uri ce vor fi folosite astfel :
-> pictureBox1 va fi imaginea in care vom cauta fetele umane
-> pictureBox2 va fi sablonul
-> pictureBox3 va fi noua imagine cu rezultatul gasit
Codul sursa pentru implementare :
Bitmap bmp = new Bitmap(pictureBox1.Image);
Bitmap bmp2 = new Bitmap(pictureBox2.Image);
pictureBox3.Image = FaceDetection.GetFaces(bmp,bmp2);
Rezultatul final :
Cam asta a fost tot.Sper sa va fi placut articolul si nu ezitati sa incercati cautarea unor solutii mai bune.