12.07.2015 Views

Wykrywanie i śledzenie twarzy na obrazie z kamery

Wykrywanie i śledzenie twarzy na obrazie z kamery

Wykrywanie i śledzenie twarzy na obrazie z kamery

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

POLITECHNIKA WROCŁAWSKAWYDZIAŁ ELEKTRONIKIKierunek:Specjalność:Automatyka i Robotyka (AiR)Robotyka (ARR)PRACA DYPLOMOWAMAGISTERSKA<strong>Wykrywanie</strong> i śledzenie <strong>twarzy</strong> <strong>na</strong><strong>obrazie</strong> z <strong>kamery</strong>.Face detection and tracking on a camera image.Autor:Łukasz KucharczykProwadzący pracę:dr inż. Marek Wnuk, Instytut Informatyki,Automatyki i RobotykiOce<strong>na</strong> pracy:WROCŁAW 2011


Dziękuję Panu Dr. MarkowiWnukowi za pomoc, poświęconyczas i cierpliwość.


Spis treściWstęp 51 Przegląd algorytmów wykrywania <strong>twarzy</strong> 91.1 Detekcja z wykorzystaniem wzorców . . . . . . . . . . . . . . . . . . . . . 91.1.1 Tworzenie szablonu <strong>twarzy</strong> . . . . . . . . . . . . . . . . . . . . . . . 91.1.2 <strong>Wykrywanie</strong> <strong>twarzy</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.1.3 Przyśpieszanie algorytmów opartych <strong>na</strong> wzorcach . . . . . . . . . . 111.2 <strong>Wykrywanie</strong> <strong>twarzy</strong> z wykorzystaniem aktywnych konturów . . . . . . . . 111.2.1 Przypadek ciągły . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.2.2 Rozwinięcie wyrażeń przypadku ciągłego . . . . . . . . . . . . . . . 121.2.3 Wykorzystanie aktywnych konturów w wykrywaniu <strong>twarzy</strong> . . . . . 131.3 Wykorzystanie kaskad wzorców . . . . . . . . . . . . . . . . . . . . . . . . 141.3.1 Cechy charakterystyczne . . . . . . . . . . . . . . . . . . . . . . . . 141.3.2 Obraz scałkowany . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151.3.3 Uczenie klasyfikatora . . . . . . . . . . . . . . . . . . . . . . . . . . 161.3.4 Kaskada klasyfikatorów . . . . . . . . . . . . . . . . . . . . . . . . . 171.3.5 Trenowanie kaskady klasyfikatorów . . . . . . . . . . . . . . . . . . 181.4 Algorytm PittPatt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.4.1 Obliczanie wartości cech charakterystycznych . . . . . . . . . . . . 181.4.2 Transformacja falkowa . . . . . . . . . . . . . . . . . . . . . . . . . 191.4.3 Wykorzystanie sieci bayesowskich . . . . . . . . . . . . . . . . . . . 202 Detekcja <strong>twarzy</strong> w oparciu o wykrywanie obszarów o kolorze skóry 232.1 Kompensacja oświetlenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.1.1 Korekcja kolorów . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242.2 Wykrycie pikseli o kolorze skóry . . . . . . . . . . . . . . . . . . . . . . . . 242.2.1 Nieliniowa transformacja chromi<strong>na</strong>ncji . . . . . . . . . . . . . . . . 252.3 Detekcja oczu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262.4 Detekcja ust . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282.5 Końcowa weryfikacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282.5.1 Segmentacja obszarów o kolorze skóry . . . . . . . . . . . . . . . . . 292.5.2 Ekstrakcja położenia oczu . . . . . . . . . . . . . . . . . . . . . . . 292.5.3 Ekstrakcja położenia ust . . . . . . . . . . . . . . . . . . . . . . . . 302.5.4 Weryfikacja istnienia <strong>twarzy</strong> . . . . . . . . . . . . . . . . . . . . . . 303 Implementacja algorytmu 333.1 Pierwszy etap implementacji algorytmu . . . . . . . . . . . . . . . . . . . . 333.1.1 Korekcja gamma . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.1.2 Korekcja barw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34


2 SPIS TREŚCI3.1.3 Wykrycie koloru skóry . . . . . . . . . . . . . . . . . . . . . . . . . 353.1.4 Segmentacja wykrytych obszarów skóry . . . . . . . . . . . . . . . . 363.1.5 <strong>Wykrywanie</strong> oczu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363.1.6 <strong>Wykrywanie</strong> ust . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383.2 Nakładka graficz<strong>na</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383.3 Drugi etap implementacji algorytmu . . . . . . . . . . . . . . . . . . . . . 413.4 Aplikacja stworzo<strong>na</strong> w trakcie drugiego etapu implementacji . . . . . . . . 443.4.1 Problem opóźnienia przy pobieraniu obrazu z <strong>kamery</strong> . . . . . . . . 454 Badania 494.1 Pierwsza wersja biblioteki . . . . . . . . . . . . . . . . . . . . . . . . . . . 494.1.1 Współrzędne elipsy <strong>na</strong> płaszczyźnie C b C r . . . . . . . . . . . . . . 504.2 Druga wersja biblioteki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504.2.1 Parametr gammaGlobCorr . . . . . . . . . . . . . . . . . . . . . . . 524.2.2 Parametr lightCorrCoef . . . . . . . . . . . . . . . . . . . . . . . 524.2.3 Parametr maxSkinAreaRatio . . . . . . . . . . . . . . . . . . . . . 554.2.4 Parametr minSkinContourRatio . . . . . . . . . . . . . . . . . . . 554.2.5 Parametr firstErosion . . . . . . . . . . . . . . . . . . . . . . . . 554.2.6 Parametr extensionRatio . . . . . . . . . . . . . . . . . . . . . . . 554.2.7 Parametry eyesMergeRatio i lipsMergeRatio . . . . . . . . . . . 564.2.8 Parametry eyeMouthDistCoef i eyeEyeDistCoef . . . . . . . . . . 564.2.9 Parametr maxLipsNormalDistRatio . . . . . . . . . . . . . . . . . 564.2.10 Parametry eyesLumMapGammaCorr i eyesColMapGammaCorr . . . . . 604.2.11 Parametr eyesMaskErodeRatio . . . . . . . . . . . . . . . . . . . . 604.2.12 Parametr eyesLipsMaskCoef . . . . . . . . . . . . . . . . . . . . . 604.2.13 Parametr eyesCutoff . . . . . . . . . . . . . . . . . . . . . . . . . 604.2.14 Podsumowanie badań dotyczących samodzielnie zaimplementowanegoalgorytmu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644.3 Algorytm oparty <strong>na</strong> kaskadach klasyfikatorów Haara . . . . . . . . . . . . . 644.3.1 Parametr HaarScale . . . . . . . . . . . . . . . . . . . . . . . . . . 654.3.2 Parametr HaarMinNeigh . . . . . . . . . . . . . . . . . . . . . . . . 654.3.3 Parametr scale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684.3.4 Parametry HaarMinWidth i HaarMinHeight . . . . . . . . . . . . . 684.3.5 Wykorzystanie biblioteki TBB . . . . . . . . . . . . . . . . . . . . 684.3.6 Wnioski z przeprowadzonych badań . . . . . . . . . . . . . . . . . . 714.4 PittPatt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734.4.1 Parametr Minimum Size . . . . . . . . . . . . . . . . . . . . . . . . 744.4.2 Parametr Maximum Size . . . . . . . . . . . . . . . . . . . . . . . . 744.4.3 Parametr Search Prunning . . . . . . . . . . . . . . . . . . . . . . . 744.4.4 Parametr Search Threshold . . . . . . . . . . . . . . . . . . . . . . . 774.4.5 Liczba wątków . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774.4.6 Śledzenie <strong>twarzy</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814.4.7 Wnioski z przeprowadzonych badań . . . . . . . . . . . . . . . . . . 824.5 Porów<strong>na</strong>nie trzech algorytmów . . . . . . . . . . . . . . . . . . . . . . . . . 82Podsumowanie 85


SPIS TREŚCI 3A A<strong>na</strong>liza map oczu i ust, wykrywanie <strong>twarzy</strong> 87A.1 Ekstrakcja oczu i ust <strong>na</strong> podstawie map . . . . . . . . . . . . . . . . . . . 87A.2 Weryfikacja istnienia <strong>twarzy</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . 88A.2.1 Obliczenie wag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89B Segmentacja i wyz<strong>na</strong>czanie konturów sylwetek <strong>na</strong> <strong>obrazie</strong> 91B.1 Algorytm wyz<strong>na</strong>czania konturów . . . . . . . . . . . . . . . . . . . . . . . 91B.1.1 Algorytm segmentacji . . . . . . . . . . . . . . . . . . . . . . . . . 91C Opis środowiska 93D Implementacja skryptów ułatwiających tworzenie pracy 95D.1 Budowanie pliku wynikowego . . . . . . . . . . . . . . . . . . . . . . . . . 95D.2 Przeprowadzanie badań . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96D.3 Pomiary czasu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98


Wstęp<strong>Wykrywanie</strong>, śledzenie i rozpoz<strong>na</strong>wanie <strong>twarzy</strong> stało się w ostatnich latach ważnągałęzią przetwarzania obrazów i z<strong>na</strong>jduje zastosowanie w wielu dziedzi<strong>na</strong>ch:Robotyka, roboty społeczne Przykładem robota społecznego wykorzystującego wykrywanie<strong>twarzy</strong> może być Samuel stworzony <strong>na</strong> Politechnice Wrocławskiej. Omawia<strong>na</strong>funkcjo<strong>na</strong>lność jest niezbęd<strong>na</strong>, aby robot mógł wykryć obecność człowieka,rozpocząć z nim interakcję, określić ile osób z<strong>na</strong>jduję się w jego pobliżu [9].Klasyfikacja emocji <strong>na</strong> podstawie obrazu <strong>twarzy</strong> (facial expression). Implementacjatego rodzaju funkcjo<strong>na</strong>lności przydat<strong>na</strong> może być we wszelkiego rodzaju aplikacjachzawierających element interakcji człowieka z komputerem, a więc <strong>na</strong> przykład wewspomnianych wcześniej robotach społecznych czy inteligentnych domach. Systempotrafiący rozpoz<strong>na</strong>ć emocje człowieka <strong>na</strong> podstawie jego mimiki, może próbowaćdopasować swoje zachowanie do <strong>na</strong>stroju użytkownika lub próbować przewidziećjakich akcji oczekuje od niego człowiek, podobnie jak ma to miejsce w przypadkudialogu dwóch osób[21].Rozrywka Wraz z systemem rozpoz<strong>na</strong>wania emocji, algorytmy rozpoz<strong>na</strong>wania <strong>twarzy</strong>mogą z<strong>na</strong>leźć potencjalne zastosowanie w internetowych grach komputerowych [32].Obraz <strong>twarzy</strong> gracza może być pobierany z wykorzystaniem <strong>kamery</strong> dołączonej dokomputera, jego emocję mogą być rozpoz<strong>na</strong>ne i przełożone <strong>na</strong> wirtualnego awatara,który widoczny jest dla innych gracza. System taki może ograniczyć ilość wysyłanychkomunikatów tekstowych.Inteligentne domy w inteligentnych domach [20, 4] detekcja <strong>twarzy</strong> z<strong>na</strong>jduje wiele zastosowań:wykrywanie obecności osób w celu dopasowania <strong>na</strong>stawów urządzeń regulującychtemperaturę (np. wyłączenie klimatyzacji czy grzejników, kiedy nikogo niema w domu w celu oszczędzania energii); zapewnianie bezpieczeństwa – w połączeniuz funkcją rozpoz<strong>na</strong>wania <strong>twarzy</strong>, system może wszcząć alarm w przypadku wykryciaw domu obcych osób pod nieobecność właścicieli; dopasowanie <strong>na</strong>staw urządzeńkontrolujących temperaturę, światło i muzykę zgodnie z preferencjami osoby przebywającejw danym pomieszczeniu.Przemysł fotograficzny Auto-wyzwalacz oparty <strong>na</strong> warunku wykrycia odpowiedniejliczby <strong>twarzy</strong>, zamiast sztywno ustawionego czasu. Inną innowacją jest automatycz<strong>na</strong>regulacja obiektywu tak, aby ostrość ustawio<strong>na</strong> była <strong>na</strong> twarzach osób pozującychdo zdjęcia. Obecnie większość telefonów dostępnych <strong>na</strong> rynku wyposażonych jestw aparat fotograficzny, wykrywanie <strong>twarzy</strong> z<strong>na</strong>jduje podobne zastosowanie równieżw tej branży.Bezpieczeństwo Algorytmy wykrywania <strong>twarzy</strong> są podstawą działania automatycznychsystemów bezpieczeństwa w obiektach użyteczności publicznej, takich jak lotniska


6 Wstęp(np. w celu wyszukiwania osób mogących potencjalnie stwarzać zagrożenie) czy stadiony(<strong>na</strong>mierzanie osób, które objęte są zakazem stadionowym). Drugim niezbędnymelementem takich systemów jest oczywiście algorytm rozpoz<strong>na</strong>wania <strong>twarzy</strong>.Moż<strong>na</strong> spodziewać się, że wraz ze wzrostem efektywności ich działania pojawiaćbędą się pytania dotyczące ochrony prywatności w systemach tego typu.Ochro<strong>na</strong> prywatności W systemach automatycznej akwizycji obrazów, jaki stosuje np.firma Google do tworzenia swojej powszechnie dostępnej usługi Street View, algorytmywykrywania <strong>twarzy</strong> stosowane są do ochrony prywatności osób postronnych. Nauzyskanych zdjęciach twarze wszystkich wykrytych ludzi są zamazywane, tak abynie dało ustalić się tożsamości danej osoby.We wszystkich tych zastosowaniach, w celu osiągnięcia większej wydajności, wykorzystywanemogą być algorytmy śledzenia <strong>twarzy</strong> w sekwencjach wideo. Podstawą ich działaniajest wykrycie, za pomocą algorytmu detekcji, <strong>twarzy</strong> która <strong>na</strong>stępnie jest śledzo<strong>na</strong> z wykorzystaniemmniej złożonych obliczeniowo algorytmów.Ludzie bez problemu potrafią dostrzec twarz innego człowieka w różnych warunkachoświetlenia i pod różnym kątem, zarówno jeśli chodzi o przechylenie głowy, jak i jej obrótwzględem osi szyi. Zaimplementowanie algorytmów zapewniających skuteczność zbliżonądo tej, którą charakteryzują się ludzie, okazało się dużym wyzwaniem. Szybki rozwójomawianej dziedziny w ostatnich latach spowodowany jest przez:Wzrost mocy obliczeniowej komputerów Algorytmy wykorzystywane do wykrywania<strong>twarzy</strong> są bardzo złożone obliczeniowo, wydajność powszechnie dostępnych komputerówosobistych stosunkowo niedawno osiągnęła poziom umożliwiający tworzenieaplikacji wykrywających twarz w czasie rzeczywistym. Niemożliwy do przeoczeniajest także wzrost mocy obliczeniowej tzw. urządzeń mobilnych, czyli zaawansowanychtelefonów komórkowych, smartfonów i tabletów. Ze względu <strong>na</strong> fakt, że urządzeniate zwykle wyposażone są także w kamerę, algorytmy wykrywania <strong>twarzy</strong>umożliwiające tworzenie efektownych aplikacji, moż<strong>na</strong> zaobserwować zwiększone zainteresowanieproducentów telefonów tą dziedziną przetwarzania obrazów.Duża dostępność przetworników optycznych Spadek cen i duża poprawa jakościdostępnych <strong>na</strong> rynku cyfrowych matryc fotograficznych <strong>na</strong> pewno przyczyniły siędo rozwoju wszystkich dziedzin przetwarzania obrazu, w szczególności wykrywania<strong>twarzy</strong>.Komercjalizacja Ze względu <strong>na</strong> wiele potencjalnych zastosowań algorytmów wykrywania<strong>twarzy</strong>, ta dziedzi<strong>na</strong> przetwarzania obrazów w <strong>na</strong>turalny sposób wzbudziła zainteresowanietwórców komercyjnego oprogramowania. Wraz z wprowadzeniem tegotypu produktów <strong>na</strong> rynek, zaczęły działać w stosunku do nich prawa rynku. Do pozytywnychobjawów tego zjawiska <strong>na</strong> pewno zaliczyć moż<strong>na</strong> ciągłą poprawę jakościi obniżanie ceny, z drugiej jed<strong>na</strong>k strony uzyskane przez firmy rezultaty są pilniestrzeżone i zasada ich działania jest niez<strong>na</strong><strong>na</strong>.Przy tworzeniu pierwszych algorytmów wykrywania <strong>twarzy</strong> często zakładano, że <strong>na</strong><strong>obrazie</strong> potencjalnie z<strong>na</strong>jduje się tylko jeden poszukiwany obiekt. Zadanie detekcji sprowadzałosię do dostarczenia odpowiedzi <strong>na</strong> pytanie, czy <strong>na</strong> <strong>obrazie</strong> z<strong>na</strong>jduje się twarz.W tamtych czasach doprowadziło to do wyróżnienia dwóch głównych kierunków rozwojualgorytmów [17]. Pierwszy z nich opiera się <strong>na</strong> wyróżnieniu <strong>na</strong> <strong>obrazie</strong> charakterystycznych


dla <strong>twarzy</strong> fragmentów, np. oczu, nosa, ust, kości policzkowych. Następnie wykorzystujesię zależności geometryczne między tymi elementami w celu przeprowadzenia selekcjii ostatecznej decyzji co do obecności <strong>twarzy</strong> <strong>na</strong> a<strong>na</strong>lizowanym <strong>obrazie</strong>. Drugie podejściepolega <strong>na</strong> sprowadzeniu wzorca obrazu <strong>twarzy</strong> do wektora i opiera a<strong>na</strong>lizę <strong>na</strong> dekompozycjiwartości własnych macierzy kowariancji obrazu wejściowego (w literaturze anglojęzycznejz<strong>na</strong>ne jako „eigenface”). Wraz z rozwojem przetwarzania obrazów pojawiały sięnowe pomysły i algorytmy: statystyczny model koloru skóry [15], dopasowywanie elastycznychgrafów [16], wykorzystanie sieci neuronowych [30], kaskady Haara [31]. Algorytmyrealizujące zadanie śledzenia <strong>twarzy</strong> moż<strong>na</strong> podzielić <strong>na</strong> dwie grupy. Algorytmy <strong>na</strong>leżącedo pierwszej z nich opierają się <strong>na</strong> a<strong>na</strong>lizie przepływu optycznego, w jej skład wchodząm.in. metoda Lucasa-Ka<strong>na</strong>de i Horn-Schunck’a. Drugą grupę tworzą algorytmy oparteo a<strong>na</strong>lizę histogramu, zaliczają się do niej metody Mean-Shift i Camshift [5]. Pierwszym,<strong>na</strong>jważniejszym krokiem, zawsze podejmowanym w trakcie realizacji zadania śledzenia<strong>twarzy</strong> jest jej wykrycie. Ze względu <strong>na</strong> dużą wydajność z<strong>na</strong>nych obecnie algorytmów,zadanie śledzenia <strong>twarzy</strong> może być z powodzeniem realizowane poprzez jej wykrywanie<strong>na</strong> kolejnych klatkach sekwencji wideo.Dy<strong>na</strong>mika rozwoju i ilość potencjalnych zastosowań omawianej dziedziny sprawiają,że jest o<strong>na</strong> interesującym tematem rozważań. Różnorodność stosowanych rozwiązań uzasadniapotrzebę wyko<strong>na</strong>nia a<strong>na</strong>lizy wykorzystywanych metod pod względem szybkościi jakości działania. W pracy podjęta została próba przeprowadzenia takich badań.W rozdziale 1 doko<strong>na</strong>ny został przegląd obecnie wykorzystywanych algorytmów, z którychjeden został samodzielnie zaimplementowany. W rozdziale 2 przedstawio<strong>na</strong> jest zasadajego działania, szczegóły dotyczące implementacji z<strong>na</strong>jdują się w rozdziale 3. Wrozdziale 4 opisane są wyniki badań zaimplementowanego algorytmu oraz dwóch innych,z<strong>na</strong>jdujących się w dostępnych bibliotekach. W dodatku C zamieszczo<strong>na</strong> jest dokłada<strong>na</strong>specyfikacja środowiska w którym tworzo<strong>na</strong> i wykorzystywa<strong>na</strong> była praca. Dodatek D zawieraopis dodatkowych <strong>na</strong>rzędzi zaimplementowanych w trakcie tworzenia pracy, którenie są bezpośrednio zawiązane z wykrywaniem <strong>twarzy</strong>.7


Rozdział 1Przegląd algorytmów wykrywania<strong>twarzy</strong>Obecnie wyróżnić moż<strong>na</strong> kilka głównych nurtów wykrywania <strong>twarzy</strong> <strong>na</strong> <strong>obrazie</strong>. Wtym rozdziale podjęta została próba przedstawienia <strong>na</strong>jważniejszych z nich.Algorytmy opisane w podrozdziałach 1.1 i 1.2 nie były a<strong>na</strong>lizowane w dalszej częścipracy. Zbada<strong>na</strong> została metoda opisa<strong>na</strong> w 1.3, której implementacja dostęp<strong>na</strong> jest wdarmowej bibliotece OpenCV oraz algorytm, który został zaimplementowany <strong>na</strong> potrzebypracy – jego dokładny opis z<strong>na</strong>jduje się w rozdziale 2. Dodatkowo, w podrozdziale 1.4zaprezentowane jest jedno z rozwiązań dostępnych komercyjnie, badania przeprowadzonez jego wykorzystaniem przedstawione są w dalszej części pracy.1.1 Detekcja z wykorzystaniem wzorcówOpisywa<strong>na</strong> grupa algorytmów wykrywania <strong>twarzy</strong> bazuje <strong>na</strong> istnieniu pewnej liczbycharakterystycznych cech geometrycznych <strong>twarzy</strong>. W podejściu tym prawdopodobieństwowystąpienia określonej jasności lub koloru piksela w danym obszarze <strong>twarzy</strong> obliczane jest<strong>na</strong> podstawie zbioru wybranych obrazów uczących. Następnie a<strong>na</strong>lizowany obszar sprawdzanyjest pod kątem zgodności ze stworzonym <strong>na</strong> etapie przygotowywania algorytmuwzorcem.1.1.1 Tworzenie szablonu <strong>twarzy</strong>Proces tworzenia wzorca <strong>twarzy</strong> składa się z <strong>na</strong>stępujących kroków:1. Wybranie obrazów z twarzami, które posłużą do stworzenia wzorca.2. Określenie rozmiaru i położenia regionu zawierającego twarz dla każdego z wybranychobszarów.3. Sprowadzenie wybranych obszarów do tego samego rozmiaru.4. Obliczenie średniej wartości piksela dla każdego z punktów obszaru <strong>na</strong> podstawieprzetransformowanych fragmentów obrazów.Oz<strong>na</strong>czając przez n liczbę wybranych obrazów uczących, przez f k (i, j) wartość piksela <strong>na</strong>pozycji (i, j) w k-tym <strong>obrazie</strong> (k = 1, . . . , n) oraz przez w k czynnik skalujący k-ty obraz,


10 1. Przegląd algorytmów wykrywania <strong>twarzy</strong>uzyskujemy <strong>na</strong>stępujący wzór <strong>na</strong> wyliczenie wzorca <strong>twarzy</strong>:T (i, j) = 1 n∑w k f k (i, j) (1.1)nk=1Jeśli wartości pikseli f k (i, j) mają rozkład normalny N(µ, σ 2 ), gdzie µ jest średnią wartościąpiksela f k (i, j) dla 1 k n, a σ jest wariancją tego piksela, to T (i, j) ma rozkładnormalny N(µ, σ2 ). Tak więc zakłócenia występujące w poszczególnych obrazach wybranychdo stworzenia szablonu mają niewielki wpływ <strong>na</strong> uzyskany tą metodą wzorzec.nLudzka twarz zawiera zwykle fragmenty charakterystyczne, takie jak oczy, usta, nos,obrys szczęki. Charakter rozkładu jasności pikseli jaki mają te fragmenty <strong>twarzy</strong> możebyć wykorzystany do sprawdzania warunku obecności <strong>twarzy</strong> <strong>na</strong> a<strong>na</strong>lizowanym <strong>obrazie</strong>.Zwykle więc do tworzenia wzorców <strong>twarzy</strong> wybiera<strong>na</strong> jest właśnie jej central<strong>na</strong> część,zawierająca <strong>na</strong>jwięcej elementów charakterystycznych.1.1.2 <strong>Wykrywanie</strong> <strong>twarzy</strong>Stworzony wzorzec <strong>twarzy</strong> jest przyrównywany do a<strong>na</strong>lizowanego obrazu. Prosta funkcjaodległości danego fragmentu a<strong>na</strong>lizowanego obrazu od wzorca może być zdefiniowa<strong>na</strong><strong>na</strong> przykład jako:I∑ J∑ [S(m, n) = P (m,n) (i, j) − T (i, j) ] 2, (1.2)i=1 j=1gdzie I oz<strong>na</strong>cza wysokość stworzonego wzorca, J jego szerokość, indeksy (m, n) oz<strong>na</strong>czająpozycję a<strong>na</strong>lizowanego fragmentu obrazu <strong>na</strong> tym <strong>obrazie</strong>. P (m,n) (i, j) odnosi się więcdo jasności lub koloru piksela z<strong>na</strong>jdującego się <strong>na</strong> pozycji (m + i, n + j) <strong>na</strong> a<strong>na</strong>lizowanym<strong>obrazie</strong>. T (i, j) oz<strong>na</strong>cza jasność piksela <strong>na</strong> pozycji (i, j) w utworzonym wzorcu. A<strong>na</strong>lizowanyfragment obrazu jest klasyfikowany jako twarz, jeśli wartość funkcji podobieństwajest mniejsza od pewnego arbitralnie wybranego progu.Po rozwinięciu (1.2) otrzymujemy:I∑ J∑ [S(m, n) = P (m,n) (i, j) ] 2I∑ J∑I∑ J∑− 2 P (m,n) (i, j) · T (i, j) + [T (i, j)] 2 , (1.3)i=1 j=1i=1 j=1i=1 j=1gdzie składnikI∑J∑ [P (m,n) (i, j) ] 2, (1.4)i=1 j=1zmienia się powoli wraz z obliczaniem funkcji podobieństwa dla kolejnych fragmentówa<strong>na</strong>lizowanego obrazu, jego obliczanie może być w prosty sposób zoptymalizowane, składnikI∑ J∑[T (i, j)] 2 , (1.5)i=1 j=1jest stały dla stworzonego wzorca <strong>twarzy</strong>, musi być więc policzony tylko raz, <strong>na</strong>tomiastI∑ J∑2 P (m,n) (i, j) · T (i, j) , (1.6)i=1 j=1odpowiada korelacji wzorca z badanym fragmentem – im jest on większy, tym bardziejzbliżony jest a<strong>na</strong>lizowany fragment do przyjętego wzorca.


1.2. <strong>Wykrywanie</strong> <strong>twarzy</strong> z wykorzystaniem aktywnych konturów 111.1.3 Przyśpieszanie algorytmów opartych <strong>na</strong> wzorcachJednym z podejść mających <strong>na</strong> celu przyśpieszenie algorytmów detekcji <strong>twarzy</strong> opartych<strong>na</strong> metodzie wzorców jest stosowanie wzorców połówkowych. Podejście to uzasadniafakt, że ludzka twarz jest symetrycz<strong>na</strong>. Szablon <strong>twarzy</strong> tworzony jest tak samo jak wnormalnym przypadku, a <strong>na</strong>stępnie do wykrywania <strong>twarzy</strong> wybiera<strong>na</strong> jest tylko jed<strong>na</strong> zpołówek stworzonego wzorca. Powoduje to zmniejszenie obszaru wykorzystywanego do obliczaniafunkcji podobieństwa szablonu, co wpływa <strong>na</strong> zmniejszenie koniecznych do przeprowadzeniaobliczeń. Eksperymenty opisane w [8] wskazują również, że wykorzystaniepołówkowych szablonów zwiększa szansę wykrycia <strong>twarzy</strong> sfotografowanych pod dużymkątem oraz wpływa korzystnie <strong>na</strong> poprawność działania algorytmu.1.2 <strong>Wykrywanie</strong> <strong>twarzy</strong> z wykorzystaniem aktywnychkonturówJedną z efektywnych metod wykrywania <strong>na</strong> obrazach konturów obiektów jest metodaaktywnych konturów, z<strong>na</strong><strong>na</strong> również w literaturze anglojęzycznej jako „s<strong>na</strong>ke” [17].Aktywne kontury mogą zmieniać kształt pod wpływem tak zwanych sił zewnętrznych,wynikających z położenia konturu <strong>na</strong> <strong>obrazie</strong> oraz z sił wewnętrznych, determinowanychprzez kształt jaki przybiera kontur. Początkowe położenia i kształty konturów wybieranesą w pewien arbitralnie wybrany sposób (np. taka sama liczba konturów o takich samychkształtach dla każdego obrazu), <strong>na</strong>stępnie kontury ewoluują aż do osiągnięcia minimumenergii w punkcie równowagi między siłami zewnętrznymi i wewnętrznymi.1.2.1 Przypadek ciągłyWprowadźmy funkcjęφ(t, x) : t ∈ [0, ∞), x ∈ R 2 , (1.7)gdzie t oz<strong>na</strong>cza czas, zaś x określa położenie punktu <strong>na</strong> <strong>obrazie</strong> [6]. Zakładamy warunekpoczątkowy φ(0, x) = φ 0 (x), który związany jest z początkowym kształtem konturóww sposób wynikający z rów<strong>na</strong>nia 1.10. Wyrażenie <strong>na</strong> ewolujcę konturu, zgodnie z [13],przyjmuje postać:∂φ= g(|∇I|)(κ + ν)|∇φ|, (1.8)∂tgdzie κ jest krzywizną konturu, ν jest stałą, g(|∇I|) jest energią potencjalną otrzymanąz obrazu I:g(|∇I|) =11 + |∇G σ ∗ I| , (1.9)gdzie G σ jest funkcją Gaussa z wariancją σ, ∗ oz<strong>na</strong>cza operację splotu. Ewolucja krzywejΓ w czasie przebiega zgodnie ze zmia<strong>na</strong>mi zerowej poziomicy funkcji φ:Γ(t) = {⃗x | φ(⃗x, t) = 0} (1.10)Ta metoda sprawdza się dla obiektów, które dobrze kontrastują z tłem. Kiedy brzegobiektu jest niewyraźny i zawiera przerwy, kontur ewoluujący zgodnie z podanym wyżejalgorytmem często nie zatrzymuje się <strong>na</strong> właściwej krawędzi. Przyczyną może być fakt,że warunek stopu zależny jest od zmiany gradientu obrazu – może więc wykrywać tylkokrawędzie będące w takiej właśnie postaci. Rozwiązaniem tego problemu może być


12 1. Przegląd algorytmów wykrywania <strong>twarzy</strong>zastosowanie modelu zaproponowanego przez Cha<strong>na</strong> i Vese’a [7]:∂φ∂t = δ(φ) ( µκ − ν − λ 1 (I − c 1 ) 2 + λ 2 (I − c 2 ) 2) , (1.11)gdzie µ 0, ν 0, λ 1 , λ 2 > 0 są ustalonymi parametrami, <strong>na</strong>tomiast c 1 i c 2 obliczane sąz zależności:⎧⎪⎨⎪⎩∫I(x, y)H(φ) dxdyΩc 1 = ∫H(φ) dxdyΩ∫I(x, y) (1 − H(φ)) dxdyΩc 2 = ∫(1 − H(φ)) dxdyΩFunkcja Heaviside’a oraz delta Diraca zdefiniowane są standardowo:H(z) =(1.12){1 dla z 00 dla z < 0 , δ(z) = d H(z). (1.13)dzTen model pozwala <strong>na</strong> wykrycie obiektów z rozmytymi lub nieciągłymi krawędziami. Jesttakże w pewnym zakresie odporny <strong>na</strong> zakłócenia.1.2.2 Rozwinięcie wyrażeń przypadku ciągłegoKiedy <strong>na</strong> <strong>obrazie</strong> wymagane jest wyróżnienie więcej niż dwóch obszarów, <strong>na</strong>leży wykorzystaćwiększą liczbę funkcji, <strong>na</strong> podstawie których będą ewoluować krzywe. Bazując <strong>na</strong>własności czterech kolorów (dwuwymiarową płaszczyznę dowolnie podzieloną <strong>na</strong> obszarymoż<strong>na</strong> wypełnić czterema kolorami tak, aby żadne z sąsiadujących obszarów nie miałytakiego samego koloru) Vese i Chan zaproponowali podejście, zgodnie z którym wystarcządwie takie funkcje. Rozwiązanie to zapewnia możliwość wykrycia różnej liczby obiektówo różnej intensywności bez wcześniejszej z<strong>na</strong>jomości liczby poziomów szarości występujących<strong>na</strong> <strong>obrazie</strong>. Wykorzystywane są 2 funkcje <strong>na</strong> podstawie których ewoluują kontury φ 1i φ 2 . Moż<strong>na</strong> z ich pomocą wyróżnić 4 obszary u ++ , u +− , u −+ i u −− :⎧⎪⎨u(x, y) =⎪⎩u ++ (x, y) dla φ 1 (x, y) > 0 i φ 2 (x, y) > 0u +− (x, y) dla φ 1 (x, y) > 0 i φ 2 (x, y) < 0u −+ (x, y) dla φ 1 (x, y) < 0 i φ 2 (x, y) > 0u −− (x, y) dla φ 1 (x, y) < 0 i φ 2 (x, y) < 0(1.14)Po rozwinięciu rów<strong>na</strong>ń <strong>na</strong> ewolucję φ 1 i φ 2 otrzymujemy:(∂φ ∣ 1∂t = δ(φ ∣1) νκ 1 − ∣u ++ ∣∣ 2− u 0 H(φ2 )− µ ∣ ∣ ∣∇u++ ∣ ∣ ∣2H(φ2 ) − ∣ ∣ ∣u +− − u 0∣ ∣∣ 2(1 − H(φ2 ))− µ ∣ ∣ ∣∇u+− ∣ ∣ ∣2(1 − H(φ2 )) + ∣ ∣ ∣u −+ − u 0∣ ∣∣ 2H(φ2 )(1.15)+ µ ∣ ∣ ∣∇u−+ 2∣ H(φ2 ) + ∣ ∣ ∣u −− ∣∣ 2− u 0 (1 − H(φ2 ))∣+µ ∣∇u −−∣ )∣2 (1 − H(φ2 ))


1.2. <strong>Wykrywanie</strong> <strong>twarzy</strong> z wykorzystaniem aktywnych konturów 13(∂φ 2∂t = δ(φ 2) νκ 2 − ∣ ∣ ∣u ++ − u ∣∣ 20 H(φ1 )∣− µ ∣∇u ++∣ ∣2 ∣∣H(φ1 ) − ∣u +− ∣∣ 2− u 0 (1 − H(φ1 ))− µ ∣ ∣ ∣∇u+− ∣ ∣ ∣2(1 − H(φ1 )) + ∣ ∣ ∣u −+ − u 0∣ ∣∣ 2H(φ1 )+ µ ∣ ∣ ∣∇u−+ 2∣ H(φ1 ) + ∣ ∣ ∣u −− − u ∣∣ 20 (1 − H(φ1 ))+µ ∣ ∣ )∣∇u−− 2∣ (1 − H(φ1 )) .Wartości u ++ , u +− , u −+ i u −− obliczane są według zależności:⎧u ++ − u 0 = µ∆u ++ dla φ 1 > 0, φ 2 > 0⎪⎨ u +− − u 0 = µ∆u +− dla φ 1 > 0, φ 2 < 0u⎪⎩−+ − u 0 = µ∆u −+ dla φ 1 < 0, φ 2 > 0u −− − u 0 = µ∆u −− dla φ 1 < 0, φ 2 < 0(1.16)(1.17)Model stworzony <strong>na</strong> podstawie rów<strong>na</strong>ń ewolucji krzywych wyprowadzonych z wykorzystaniempowyższych funkcji łączy w sobie wiele zalet: pozwala <strong>na</strong> wykrywanie zarównoostrych jak i rozmytych krawędzi, wykrywanie konturów wewnętrznych oraz odporność<strong>na</strong> zakłócenia.1.2.3 Wykorzystanie aktywnych konturów w wykrywaniu <strong>twarzy</strong>Algorytm aktywnych konturów może być zastosowany do detekcji <strong>twarzy</strong> <strong>na</strong> <strong>obrazie</strong>.W opisywanej metodzie <strong>na</strong>jpierw wykonywa<strong>na</strong> jest segmentacja obrazu z wykorzystaniemaktywnych konturów. Część kandydatów odrzuca<strong>na</strong> jest <strong>na</strong> podstawie parametrów dopasowanychdo tych konturów elips. Następnie do obliczenia stopnia podobieństwa międzywzorcowym eliptycznym modelem kształtu <strong>twarzy</strong>, a konturami otrzymanymi w pierwszymkroku wykorzystywa<strong>na</strong> jest odległość Hausdorffa.To, czy algorytm aktywnych konturów z<strong>na</strong>jdzie globalne minimum, w którym danykontur będzie miał <strong>na</strong>jniższą możliwą energię, zależne jest od początkowego kształtu ipołożenia konturu. Zwykle w rzeczywistych implementacjach w początkowym kroku algorytmu<strong>na</strong> obraz <strong>na</strong>kłada się wiele małych równo odległych od siebie konturów (np. wpostaci okręgów), co realizowane jest przez przyjęcie odpowiedniego warunku początkowegodla funkcji określonej w rów<strong>na</strong>niu 1.7. W <strong>na</strong>stępnych krokach kontury ewoluują dodocelowej postaci.W kolejnej fazie algorytmu dla każdego z wykrytych konturów obliczane są parametry(środek, długości osi i <strong>na</strong>chylenie) elipsy <strong>na</strong>jlepiej pasującej do tego konturu. Częśćkonturów odrzuca<strong>na</strong> jest <strong>na</strong> podstawie empirycznie dobranych reguł dotyczących wartościdopasowanych do tych konturów elips (np. dopuszczalny przedział dla stosunku długościosi lub <strong>na</strong>chylenie).Następnie oblicza<strong>na</strong> jest zmodyfikowa<strong>na</strong> odległość Hausdorffa między danym konturema wzorcowym modelem <strong>twarzy</strong> w celu wytypowania konturów, które potencjalnieoz<strong>na</strong>czyły z<strong>na</strong>jdującą się <strong>na</strong> <strong>obrazie</strong> twarz. Odległość Hausdorffa oblicza<strong>na</strong> jest międzydwoma zbiorami punktów A = a 1 , a 2 , . . . , a m , i B = b 1 , b 2 , . . . , b n z zależności:H(A, B) = max (h(A, B), h(B, A)) , (1.18)gdzieh(A, B) = maxmi<strong>na</strong>∈A b∈B||a − b|| (1.19)


14 1. Przegląd algorytmów wykrywania <strong>twarzy</strong>h(B, A) = maxminb∈B a∈A||b − a||. (1.20)Odległość h(A, B) <strong>na</strong>zywa<strong>na</strong> jest skierowaną odległością Hausdorffa A od B liczoną zgodniez daną normą || · ||. W celach przetwarzania obrazu często stosuje się zmodyfikowanąodległość w postaci:h(A, B) = 1 ∑|A|a∈Amin ||a − b||, (1.21)b∈Bgdzie |A| to liczba punktów zbioru A. Tak zmodyfikowane wyrażenie zmniejsza wpływniepoprawnych punktów, które pojawiają się <strong>na</strong> przykład w wyniku obecności szumów <strong>na</strong>interpretowanym <strong>obrazie</strong>.A<strong>na</strong>lizowany kontur klasyfikowany jest jako twarz, kiedy odległość Hausdorffa jestmniejsza od arbitralnie wybranego progu.1.3 Wykorzystanie kaskad wzorcówViola i Jones wprowadzają w [31] pojęcie obrazu scałkowanego. Na podstawie tegoobrazu obliczane są tzw. cechy charakterystyczne, dzięki czemu wartości jasności pikseliwykorzystywane są tylko w początkowej fazie algorytmu.Na etapie uczenia algorytmu, wykorzystywa<strong>na</strong> jest metoda AdaBoost [10], przy pomocyktórej wybierane są <strong>na</strong>jbardziej istotne cechy – tylko one wykorzystywane są poźniejw trakcie detekcji <strong>twarzy</strong>. Sama detekcja przeprowadza<strong>na</strong> jest z wykorzystaniem kaskadyklasyfikatorów, która pozwala <strong>na</strong> szybkie odrzucenie obszarów, w których twarz <strong>na</strong> pewnosię nie z<strong>na</strong>jduje. Dokłada<strong>na</strong> a<strong>na</strong>liza przeprowadza<strong>na</strong> jest tylko w regio<strong>na</strong>ch, dla którychzgrubne klasyfikatory wykażą potencjalną możliwość z<strong>na</strong>lezienia <strong>twarzy</strong>.1.3.1 Cechy charakterystyczneViola i Jones dokonują a<strong>na</strong>lizy obrazu z wykorzystaniem cech charakterystycznychobrazu (detektorów) (rysunek 1.3.1), które przypomi<strong>na</strong>ją podstawowe cechy charakterystycznestworzone <strong>na</strong> bazie falek Haara. Wyróżnione są trzy rodzaje cech, składające sięodpowiednio z:(a) (b) (c) (d)Rysunek 1.1 Przykładowe cechy charakterystyczne.1. dwóch prostokątów, wartość tej cechy oblicza<strong>na</strong> jest jako różnica sumy jasnościpikseli w każdym z dwóch prostokątów (rysunki 1.1(a), 1.1(b)),2. trzech prostokątów, wartość tej cechy oblicza<strong>na</strong> jest jako różnica sumy pikseli dwóchzewnętrznych prostokątów i prostokąta środkowego (rysunek 1.1(c))


1.3. Wykorzystanie kaskad wzorców 153. czterech prostokątów, wartość tej cechy oblicza<strong>na</strong> jest jako różnica sum prostokątówz<strong>na</strong>jdujących się <strong>na</strong> przekątnych detektora(rysunek 1.1(d)).Przy przyjęciu rozmiaru detektora jako 24x24 piksele, liczba możliwych do wygenerowaniacech przekracza 180 000.1.3.2 Obraz scałkowanyCechy obrazu o kształcie prostokąta mogą być szybko obliczone dzięki zastosowaniuprzejściowej reprezentacji obrazu, <strong>na</strong>zywanej obrazem scałkowanym. Wartość tego obrazuw punkcie (x, y) rów<strong>na</strong> się sumie jasności pikseli <strong>na</strong> lewo i powyżej tego punktu i wynosi:ii(x, y) =∑x ′ x,y ′ yi(x ′ , y ′ ), (1.22)gdzie ii oz<strong>na</strong>cza obraz scałkowany, a i obraz orygi<strong>na</strong>lny. Wykorzystując rekurencję:s(x, y) = s(x, y − 1) + i(x, y), (1.23)ii(x, y) = ii(x − 1, y) + s(x, y), (1.24)gdzie s(x, y) jest sumą dla poszczególnych kolumn, s(x, −1) = 0, ii(x, −1) = 0, cały obrazscałkowany może być obliczony w jednym przebiegu.ACB1 2D3 4Rysunek 1.2 Podział <strong>na</strong> obszary obrazu scałkowanego.Dzięki wykorzystaniu obrazu scałkowanego suma jasności pikseli zawartych w dowolnymprostokącie obrazu może być obliczo<strong>na</strong> <strong>na</strong> podstawie 4 przechowywanych w pamięciwartości. Na rysunku 1.3, w punkcie 1 obraz scałkowany ma wartość sumy jasności pikseliobszaru A, wartość w punkcie 2 odpowiada sumie jasności pikseli z obszarów A i B, a<strong>na</strong>logiczniepunkt 3 powiązany jest z obszarami A i C, <strong>na</strong>tomiast punkt 4 to suma jasnościpikseli ze wszystkich 4 obszarów: A, B, C i D. Jasność pikseli w obszarze D może być więcobliczo<strong>na</strong> jako:I D = ii(x 4 , y 4 ) − ii(x 2 , y 2 ) − (ii(x 3 , y 3 ) − ii(x 1 , y 1 )). (1.25)Detektory składające się z dwóch prostokątów mogą być obliczone <strong>na</strong> podstawie 6 punktówobrazu (ponieważ dwa punkty są wspólne). Odpowiednio, dla detektorów składającychsię z 3 i 4 prostokątów (rysunek 1.3.1), potrzebnych jest 8 i 9 punktów.


16 1. Przegląd algorytmów wykrywania <strong>twarzy</strong>1.3.3 Uczenie klasyfikatoraDo wyz<strong>na</strong>czenia funkcji klasyfikujących potrzebny jest zestaw obrazów przedstawiającychtwarz (próbki pozytywne), zestaw obrazów nie przedstawiających <strong>twarzy</strong> (próbkinegatywne) oraz zbiór detektorów. Viola i Jones wykorzystują algorytm AdaBoost zarównodo wyz<strong>na</strong>czenia zbioru <strong>na</strong>jlepszych detektorów, jak i do <strong>na</strong>uki klasyfikatora. Wspomnia<strong>na</strong>wcześniej liczba możliwych detektorów (180 000) o określonym rozmiarze (24x24),z<strong>na</strong>cznie przekracza liczbę pikseli wchodzących w skład tego detektora. Obliczanie ich wartości<strong>na</strong>wet z wykorzystaniem obrazu scałkowanego byłoby nieefektywne – Viola i Jones<strong>na</strong> drodze eksperymentów doszli do wniosku, że z<strong>na</strong>cznie mniejsza liczba detektorów możebyć skutecz<strong>na</strong>.Wprowadźmy pojęcie słabego klasyfikatora h j (x), jako funkcji, która zwraca 1, kiedyuz<strong>na</strong> a<strong>na</strong>lizowany fragment obrazu za potencjalną twarz, a 0 w przeciwnym wypadku:⎧⎨1 jeśli p j f j (x) < p j θ jh j (x) =(1.26)⎩0 w przeciwnym wypadku,gdzie f j oz<strong>na</strong>cza detektor, θ j próg klasyfikatora, p j polaryzację, określającą kierunek z<strong>na</strong>kunierówności, a x to fragment obrazu o rozmiarze 24x24 piksele. Należy przyjąć tzw. słabąfunkcję uczącą, której zadaniem jest wyz<strong>na</strong>czenie θ j i p j dla danego detektora f j , przydanym zbiorze obrazów uczących. To zadanie sprowadza się więc do wyz<strong>na</strong>czenia granicypodziału zbioru punktów leżących <strong>na</strong> prostej <strong>na</strong> dwie klasy.Dla każdej z cech, słaby algorytm uczący powinien zostać wykorzystany do obliczeniaoptymalnego progu, dla którego <strong>na</strong>jmniejsza ilość próbek jest błędnie interpretowa<strong>na</strong>.Przy podejmowaniu fi<strong>na</strong>lnej decyzji, czy dany fragment przedstawia twarz, wykorzystywa<strong>na</strong>jest kaskada mocnych klasyfikatorów. Do <strong>na</strong>uki każdego z nich potrzebny jestzbiór n obrazów (x 1 , y 1 ), ..., (x n , y n ), gdzie x i to obraz, odpowiadająca mu wartość y iokreśla czy przedstawia on <strong>twarzy</strong> (y i = 1), czy nie (y i = 0). Początkowe wartości wagobrazów wynoszą:⎧⎨ 1w 1,i =dla y 2m i = 0; i ∈ [1, n], (1.27)⎩ 1dla y2l i = 1gdzie m to liczba obrazów nie przedstawiających <strong>twarzy</strong>, l określa liczbę obrazów przedstawiającychtwarz, n = m + l. Następnie wykonywa<strong>na</strong> jest arbitralnie przyjęta liczbaiteracji (dla t = 1, ..., T ) poniższego algorytmu.1. Normalizacja wag,w t,i ←w t,in∑ .w t,jj=12. Obliczenie błędu ɛ j dla każdego klasyfikatora h j i odpowiadającej mu cechy:ɛ j = ∑ iw i |h j (x i ) − y i |.3. Wybranie klasyfikatora h t o <strong>na</strong>jmniejszym błędzie ɛ t .4. Uaktualnienie wag obrazów:w t+1,i = w t,i · β 1−e it ,gdzie e i = 0 jeśli obraz x i został zaklasyfikowany poprawnie, e i = 1 w przeciwnymwypadku, β =et1−e t.


1.3. Wykorzystanie kaskad wzorców 17Ostateczne wyrażenie <strong>na</strong> mocny klasyfikator przyjmuje postać:⎧⎨1 jeśli ∑ Th(x) =t=1 α t h t (x) 1 ∑ Tt=1α2 t, (1.28)⎩0 w przeciwnym przypadkugdzie α t = log 1 β t.1.3.4 Kaskada klasyfikatorówpróbkitak takh 1h 2h 3nie nie nietakViola i Jones proponują utworzenie kaskady klasyfikatorów, która pozwala <strong>na</strong> przyśpieszenieobliczeń i poprawę jakości detekcji. Postępowanie to uzasadnione jest faktem,że możliwe jest utworzenie małego (a tym samym szybkiego) mocnego klasyfikatora, którybędzie w stanie odrzucić większość próbek negatywnych, utrzymując przy tym wysokąskuteczność detekcji. Moż<strong>na</strong> więc tak wytrenować niezbyt złożony mocny klasyfikator,aby stosunek liczby niepoprawnie odrzuconych obrazów przedstawiających twarz do liczbywszystkich a<strong>na</strong>lizowanych obrazów (tzw. fałszywe decyzje negatywne) był bliski zeru.Pozwala to <strong>na</strong> wyeliminowanie dużej części obrazu z dalszych obliczeń, w trakcie którychbardziej złożone klasyfikatory mogą podjąć ostateczną decyzję co do obecności <strong>twarzy</strong> wdanym obszarze. Kaskada klasyfikatorów jest więc rodzajem drzewa decyzyjnego, w któdalszeprzetwarzanieodrzucenie próbkiRysunek 1.3 Zasada działania kaskady klasyfikatorów. Przedstawiony jest początek drzewadecyzyjnego. W celu „dalszego przetwarzania” może być wykorzystany inny algorytmweryfikujący obecność <strong>twarzy</strong>, lub zbiór kolejnych klasyfikatorów.rym początkowymi węzłami są wspomniane mało złożone klasyfikatory, pozwalające <strong>na</strong>szybką detekcję obszarów, które twarzą <strong>na</strong> pewno się są. Jeśli decyzja klasyfikatora będzienegatyw<strong>na</strong>, a<strong>na</strong>lizowany fragment obrazu (próbka) jest odrzucany i nie poddawany dalszeja<strong>na</strong>lizie. Kiedy decyzja klasyfikatora jest pozytyw<strong>na</strong>, wykonywane są obliczenia dla<strong>na</strong>stępnego w kolejności, bardziej złożonego klasyfikatora. Jeśli dany fragment zostaniepozytywnie zaklasyfikowany <strong>na</strong> wszystkich etapach, oz<strong>na</strong>czany jest jako twarz. Klasyfikatorydla kolejnych kroków tworzone są z wykorzystaniem algorytmu AdaBoost, uzyskaneprogi są lekko obniżane, aby podejmowanych było jak <strong>na</strong>jmniej fałszywych decyzjinegatywnych. Struktura kaskady odzwierciedla fakt, że większość obszarów obrazu niezawiera <strong>twarzy</strong>. Powin<strong>na</strong> więc odrzucać większość próbek <strong>na</strong> podstawie decyzji podjętychw początkowych węzłach.


18 1. Przegląd algorytmów wykrywania <strong>twarzy</strong>1.3.5 Trenowanie kaskady klasyfikatorówDuża skuteczność kaskady jest zależ<strong>na</strong> od liczby wykorzystywanych w niej detektorów– im jest ich więcej, tym lepiej o<strong>na</strong> działa. Z drugiej strony, wiąże się to z wydłużeniemczasu działania algorytmu. Zadanie wytrenowania kaskady moż<strong>na</strong> przyrów<strong>na</strong>ć dopróby minimalizacji liczby wykorzystywanych detektorów, przy czym parametrami optymalizowanymijest liczba węzłów drzewa, liczba detektorów i progi wykorzystywane wposzczególnych węzłach. W rzeczywistości zadanie to jest bardzo trudne do rozwiązania,dlatego stosowane jest uproszczone podejście. Optymalizacji podlega liczba fałszywychdecyzji pozytywnych i współczynnik poprawnie wykrytych <strong>twarzy</strong>. Do każdego z mocnychklasyfikatorów (węzłów drzewa) dodawane są detektory, dopóki wyniki uzyskane <strong>na</strong> zbiorzeweryfikacyjnym nie osiągną założonych poziomów. Do drzewa dodawane są kolejnewęzły, dopóki cała kaskada nie osiągnie założonych dla niej współczynników.1.4 Algorytm PittPattAlgorytm PittPatt jest algorytmem komercyjnym firmy Pittsburgh PatternRecognition, którego zasada działania nie jest publicznie z<strong>na</strong><strong>na</strong>, a kod źródłowy niejest dostępny. Z informacji zawartych w [2] wynika, że jest to algorytm uczący się, jegoparametry są dobrane <strong>na</strong> podstawie zestawów danych treningowych. Wspomniane jest,że działa zarówno dla obrazów kolorowych, jak i dla obrazów opisanych skalą szarości, copozwala przypuszczać, że przetwarzanie oparte jest w głównej mierze <strong>na</strong> a<strong>na</strong>lizie średnichwartości jasności pikseli. Autorami algorytmu są Henry Schneiderman, Michael Nechyba,Michael A. Sipe, wszyscy trzej mający tytuł doktora Carnegie Mellon University. Firmasprzedająca algorytm PittPatt została przez nich założo<strong>na</strong>, jako spółka-córka uniwersytetuCanegie Mellon w roku 2004. Z okresu, w którym prowadzone były prace <strong>na</strong>d algorytmem,pochodzą publikacje Schneiderma<strong>na</strong> dotyczące wykrywania <strong>twarzy</strong>, m.in. [23], [22],[24]. Nie ma żadnej pewności, że opisywane we wspomnianych artykułach metody zostałyzastosowane w algorytmie PittPatt. Nie jest tutaj podjęta próba dokładnego opisaniaalgorytmu detekcji <strong>twarzy</strong>, tak jak to miało miejsce w poprzednich sekcjach. Przedstawionesą jedynie niektóre elementy zaproponowanych przez Schneiderma<strong>na</strong> algorytmów,które wydają się być istotnym, z punktu widzenia skuteczności detekcji, rezultatem jegobadań.1.4.1 Obliczanie wartości cech charakterystycznychMetoda opisa<strong>na</strong> przez Schneiderma<strong>na</strong> w [22], bazuje <strong>na</strong> algorytmie kaskad klasyfikatorów,przedstawionej w sekcji 1.3. Podany jest jed<strong>na</strong>k alter<strong>na</strong>tywny sposób obliczaniawartości cech charakterystycznych. W orygi<strong>na</strong>lnej pracy Viola i Jonesa [31], okno klasyfikatoraprzesuwane jest po całym <strong>obrazie</strong> w różnych skalach. W każdym z punktówobrazu, w którym jest przykładane, i dla każdej skali, wartości cech charakterystycznychsą obliczane od nowa. Dla przypadku jednowymiarowego:f 1 =f(r 1 ) → c[1] = c(f 1 )f 2 =f(r 2 ) → c[2] = c(f 2 ).f n =f(r n ) → c[n] = c(f n ),(1.29)


1.4. Algorytm PittPatt 19gdzie f 1 ...f n to wartości cechy charakterystycznej f w kolejnych punktach przyłożeniaok<strong>na</strong> r 1 ...r n . c[1]...c[n] to wartości, które zwraca klasyfikator dla kolejnych współrzędnychok<strong>na</strong>.Innowacja Schneiderma<strong>na</strong> polega <strong>na</strong> tym, że <strong>na</strong>jpierw wylicza on wartości cech charakterystycznychdla określonej siatki obejmującej cały obraz. W momencie obliczaniawartości klasyfikatora dla danego ok<strong>na</strong>, wykorzystywane są wszystkie cechy będące wjego zasięgu:c[1] =c(f[1], f[2], ..., f[m])c[2] =c(f[2], f[3], ..., f[m + 1]).c[l] =c(f[l], f[l + 1], ..., f[m + l]),(1.30)gdzie m to liczba cech będących w zasięgu ok<strong>na</strong> klasyfikatora.Liczba obliczanych cech nie zmienia się, jed<strong>na</strong>k klasyfikacja regionów dla kolejnychwspółrzędnych ok<strong>na</strong> odbywa się z wykorzystaniem większej liczby cech. W ten sposóbwykorzystywanych jest więcej informacji, co stanowi istotną zaletę w pierwszej fazie działaniakaskady. Warunkiem zachowania dobrej wydajności algorytmu jest zastosowanieklasyfikatora w postaci sumy:c[l] = c(f[l], f[l+1], ..., f[l+m−1]) = h(f[l], 0)+h(f[l+1], 1)+...+h(f[l+m−1], l+m−1).(1.31)Należy podkreślić, że drugim z argumentów h(·) jest położenia ok<strong>na</strong> <strong>na</strong> <strong>obrazie</strong>, co pozwala<strong>na</strong> uwzględnienie tego czynnika przy obliczaniu wyniku działania klasyfikatora.Wprowadzone jest także <strong>na</strong>stępujące uproszczenie: wartości cech charakterystycznych f[·]są dyskretne. Dzięki temu, wartości wyrażenia h[·] mogą być przechowywane w tablicy,której indeksami są wartość cechy i położenie względem ok<strong>na</strong> klasyfikatora.Obliczanie cech w ten sposób wykorzystywane jest tylko w pierwszej iteracji algorytmui pozwala <strong>na</strong> odrzucenie 99% regionów, które nie są dalej badane pod względem obecności<strong>twarzy</strong>.1.4.2 Transformacja falkowaSchneider i Ka<strong>na</strong>de [24] próbują wykorzystywać informacje zawarte w <strong>obrazie</strong>, uwzględniającpołożenie, orientację i charakterystykę w dziedzinie częstotliwości wybranych części<strong>twarzy</strong>. W procesie dekompozycji przestrzennej wybierane są tak zwane atrybuty, będącezbiorami współczynników uzyskanych poprzez transformację obrazu orygi<strong>na</strong>lnego dodziedziny częstotliwości. Cechy takie jak oczy czy usta odpowiadają wysokim częstotliwościom,atrybuty z nimi związane mogą być nieliczne. Z kolei niskie częstotliwościodpowiadają ogólnej charakterystyce <strong>twarzy</strong>, np. czoło jest jaśniejsze niż oczodoły, atrybutyz nimi związane muszą być bardziej liczne. Atrybuty tworzone są z uwzględnieniemorientacji – dany atrybut jest bardziej skuteczny, jeśli jest wyspecjalizowany tylko doopisywania np. cech poziomych. Ważnym elementem przeprowadzanej dekompozycji jesttakże zachowanie zależności geometrycznych między poszczególnymi częściami <strong>twarzy</strong>.Aby osiągnąć założone cele, wykorzystywa<strong>na</strong> jest transformacja falkowa obrazu. Falkito rodzi<strong>na</strong> funkcji generowa<strong>na</strong> z funkcji skalującej φ(x) [26]:φ(x) ={ 1 dla 0 x < 1,0 dla pozostałych x.(1.32)


20 1. Przegląd algorytmów wykrywania <strong>twarzy</strong>Umożliwiają one reprezentację aproksymowanej funkcji z różnym poziomem szczegółowości.Są także wielorozdzielcze, co pozwala <strong>na</strong> zgrubne przeszukiwanie obrazu w pierwszejfazie działania algorytmu. Transformacja falkowa zastosowa<strong>na</strong> <strong>na</strong> <strong>obrazie</strong> organizuje jegostrukturę w pasma, tak jak przedstawiono <strong>na</strong> rysunku 1.4. Wzory transformacyjnedla przypadku dyskretnego stanowią sploty ciągów liczbowych, co odpowiada operacjifiltracji. Obraz 1.4 złożony jest ze współczynników będących wynikiem transformacji fal-P1LLP1LHP1HLHHP1Poziom 2LHPoziom 2HLPoziom 2HHPoziom 3HLPoziom 3LHPoziom 3HHRysunek 1.4 Reprezentacja falkowa obrazu.kowej. Każdy z poziomów reprezentuje wyższe częstotliwości. Pojedynczy współczynnik<strong>na</strong> poziomie pierwszym opisuje obszar cztery razy większy niż współczynnik <strong>na</strong> poziomiedrugim, który opisuje obszar cztery razy większy niż współczynnik <strong>na</strong> poziomie trzecim.Oz<strong>na</strong>czenie LH, określa, że transformacja <strong>na</strong> tym obszarze jest wynikiem zastosowaniafiltru dolnoprzepustowego w kierunku poziomym i filtru górnoprzepustowego w kierunkupionowym. A<strong>na</strong>logicznie interpretowane są oz<strong>na</strong>czania HL i HH.Na podstawie tak otrzymanego obrazu dobierane są wcześniej wspomniane atrybuty.Przykładowym atrybutem może być okno wielkości 3x3 pochodzące z pasma LH poziomutrzeciego. Ten atrybut odpowiadałby wzorcom poziomym występującym z dużą częstotliwościąw niewielkim zakresie orygi<strong>na</strong>lnego obrazu. Atrybuty z poziomu pierwszegoodpowiadają dużym obszarom o małej zmienności.Schneider do stworzenia kaskady wybiera 17 atrybutów, każdy składający się z 8 współczynnikówtransformaty obrazu [24].1.4.3 Wykorzystanie sieci bayesowskichSchneider [23] odnotowuje, że poszczególne współczynniki obrazu uzyskane przez transformacjęfalkową obrazu, są silnie zależne w sensie statystycznym tylko od niewielkiegozbioru innych współczynników. We wspomnianej pracy przytoczony jest również przykład:rozważmy dwa współczynniki x 1 i x 2 , które są silnie od siebie zależne. Oz<strong>na</strong>czmy zbiór


1.4. Algorytm PittPatt 21współczynników silnie zależnych od x 1 przez S 1 , a zbiór współczynników silnie zależnychod x 2 2 przez S 2 . Może okazać się, że zależności pomiędzy x 1 a S 2 oraz pomiędzy x 2 a S 1są słabe.Taka własność obrazu utrudnia wydzielenie zbiorów współczynników, które byłybyniezależne od pozostałych współczynników <strong>na</strong> <strong>obrazie</strong>. Schneider proponuje zastosowaniesieci bayesowskiej do z<strong>na</strong>lezienia zależności pomiędzy poszczególnymi zbiorami współczynników.Na tej podstawie tworzony jest klasyfikator podejmujący decyzje, czy w danymobszarze obrazu z<strong>na</strong>jduje się twarz. Zbudowanie sieci Bayessowskiej jest problemem NPzupełnym,jedynym sposobem z<strong>na</strong>lezienia optymalnego rozwiązania jest przegląd wszystkichmożliwości. W rzeczywistych zastosowaniach stosuje się metody heurystyczne, w tymprzypadku metoda polega <strong>na</strong> optymalizacji dwóch funkcji kosztu.Pierwsza z nich odpowiada za wydzielenie zbiorów współczynników. Minimalizuje o<strong>na</strong>lokalny błąd, składający się z 3 składowych, skonstruowanych <strong>na</strong> bazie funkcji częstościC(x i , x j ) = (log P (x i, x j |ω 1 )P (x i , x j )ω 2),gdzie ω 1 określa przy<strong>na</strong>leżność do zbioru współczynników reprezentujących twarz, ω 2określa przy<strong>na</strong>leżność do zbioru współczynników nie reprezentujących <strong>twarzy</strong>. RozkładyP (x i , x j |ω 1 ) oraz P (x i , x j |ω 2 ) określane są <strong>na</strong> podstawie zbioru obrazów uczących dlakażdej pary współczynników (x i , x 2 ). Zakłada się przy tym, że każda z par jest niezależ<strong>na</strong>od pozostałych. Zapewnia to, że fi<strong>na</strong>l<strong>na</strong> struktura sieci będzie odzwierciedlała zależnościtylko pomiędzy zbiorami współczynników. Druga z funkcji kosztu minimalizuje błędyklasyfikacji wykonywanej <strong>na</strong> próbie obrazów, tworząc strukturę sieci Bayessowskiej z wykorzystaniemzbiorów współczynników uzyskanych w pierwszym kroku.Aby uprościć zadanie budowania struktury sieci, założone zostało, że sieć składa siętylko z dwóch warstw węzłów. Węzły w pierwszej warstwie składają się z jednego współczynnika,węzły w drugiej warstwie ze zbioru współczynników. Zakłada się jednocześnie,że dla danego węzła drugiej warstwy, wszystkie połączone z nim węzły pierwszej warstwysą niezależne. Sieć przyjmuje postać:P (x 1 , ..., x n ) = P (S j(1))P (S j(2) )...P (S j(r) ), (1.33)[P (x 1 )] α 1 [P (x2 )] α 2 ...[P (xnαn)]gdzie S 1 , S 2 , ..., S q ⊂ x 1 , ..., x n są zbiorami współczynników wybranych w trakcie optymalizacjipierwszej funkcji kosztu, <strong>na</strong>tomiast j(k) ∈ 1, 2, ..., q. Wartości α k odpowiadająliczbie wystąpień danego współczynnika w r zbiorach. Dla przykładu, jeśli x k występujew 3 zbiorach, to α k = 2.Fi<strong>na</strong>lny klasyfikator, tak jak w przypadku kaskad Haara skanuje cały obraz, w kolejnychiteracjach zmieniając skalę. Jego postać jest <strong>na</strong>stępująca:f(x 1 , ..., x n ) = log P (x 1, ..., x n |ω 1 )P (x 1 , ..., x n |ω 2 )> λ, (1.34)gdzie x 1 , ..., x n to kolejne współczynniki uzyskane w wyniku transformacji falkowej, λ toustalony próg. Dany obszar jest klasyfikowany jako twarz, jeśli f(x 1 , ..., x n ) > λ. WyrażeniaP (x 1 , ..., x n |ω 2 ) i P (x 1 , ..., x n |ω 2 ) otrzymywane są zgodnie z rów<strong>na</strong>niem 1.33.


Rozdział 2Detekcja <strong>twarzy</strong> w oparciu owykrywanie obszarów o kolorzeskóryW niniejszym rozdziale opisany jest algorytm wykrywania <strong>twarzy</strong> przedstawiony w [12]i [11]. Jego działanie podzielić moż<strong>na</strong> <strong>na</strong> dwa główne etapy: wykrywanie potencjalnych<strong>twarzy</strong> (kandydatów) oraz filtrację kandydatów opartą <strong>na</strong> wykrytych cechach charakterystycznych<strong>twarzy</strong> w celu uzyskania ostatecznych wyników. W dalszej części pracy opisanyjest sposób implementacji tego algorytmu oraz otrzymane rezultaty.2.1 Kompensacja oświetleniaZdjęcia czy strumienie wideo, które poddawane są a<strong>na</strong>lizie w celu wykrycia <strong>twarzy</strong>często pobierane są w niekorzystnych warunkach oświetlenia. Jedną z przyczyn może byćnietypowe umiejscowienie źródła światła (kiedy twarz nie jest oświetlo<strong>na</strong> frontalnie, alenp. ostrym światłem od góry), co może powodować powstawanie niekorzystnych z punktuwidzenia działania algorytmów cieni <strong>na</strong> twarzach. Cienie te mogą utrudniać pracę m.in.algorytmów opartych <strong>na</strong> wzorcach i aktywnych konturach. Innym czynnikiem kształtującymniekorzystne warunki oświetleniowe może być nietypowa barwa światła – może miećono różny kolor (np. żółte żarówkowe czy niebieskie jarzeniowe). Na ten rodzaj zakłóceń w<strong>na</strong>turalny sposób szczególnie podatne są algorytmy oparte <strong>na</strong> metodach a<strong>na</strong>lizy kolorów.Z tego powodu próbuje się przeprowadzać kompensację oświetlenia.Pierwszym krokiem wykonywanym w procesie kompensacji oświetlenia jest przeprowadzenienieliniowej korekcji lumi<strong>na</strong>ncji gamma [25]. Polega o<strong>na</strong> <strong>na</strong> modyfikacji jasnościpikseli zgodnie z funkcją w postaci:g(x) = 255(x/255) 1/h(x) , (2.1)h(x) = 1 + f(x), (2.2)f(x) = a cos(φ(x)), (2.3)φ(x) = πx/255, (2.4)gdzie a jest współczynnikiem determinującym intensywność korekcji. Działanie tej funkcjipolega <strong>na</strong> rozjaśnieniu ciemnych pikseli obrazu oraz <strong>na</strong> przyciemnieniu jasnych pikseli.Intensywność tych operacji zależ<strong>na</strong> jest od wielkości współczynnika a. Dla a = 0, przekształceniejest tożsamościowe, im wartość a jest większa, tym bardziej przekształcenie


24 2. Detekcja <strong>twarzy</strong> w oparciu o wykrywanie obszarów o kolorze skóryRysunek 2.1 Nieliniowa korekcja gamma.<strong>na</strong>biera nieliniowego charakteru. Przebiegi funkcji g(x) w zależności od wartości a przedstawionesą <strong>na</strong> rysunku 2.1.2.1.1 Korekcja kolorówW kolejnym kroku <strong>na</strong>leży wyszukać referencyjny kolor biały, za który uz<strong>na</strong>wa<strong>na</strong> jestśrednia z 5% pikseli o <strong>na</strong>jwiększej średniej wartości jasności. Idee tę moż<strong>na</strong> wyjaśnić <strong>na</strong>stępująco:<strong>na</strong>jpierw <strong>na</strong>leży przekształcić obraz tak, aby zakodowany był tylko <strong>na</strong> jednymka<strong>na</strong>le (a więc uśrednić wartość każdego piksela bazując <strong>na</strong> jego trzech składowych). Następnie<strong>na</strong>leży obliczyć wartość γ, która będzie średnią jasnością z 5% <strong>na</strong>jjaśniejszych pikseli<strong>na</strong> tym <strong>obrazie</strong>. Na tej podstawie obliczany jest współczynnik λ, przez który mnożonesą wartości pikseli wszystkich trzech ka<strong>na</strong>łów orygi<strong>na</strong>lnego obrazu. Celem tego działaniajest doprowadzenie do stanu, w którym średnia jasność 5% pikseli definiujących referencyjnykolor biały osiąga maksymalną wartość w wykorzystywanym formacie kodowaniaobrazu (np. 255 w przypadku obrazu kodowanego z wykorzystaniem 24 bitów <strong>na</strong> piksel).Przykładowo, współczynnik ten może być więc obliczony w <strong>na</strong>stępujący sposób:λ = 255γ(2.5)2.2 Wykrycie pikseli o kolorze skóryAby wykrywać skórę ludzi <strong>na</strong> obrazach, <strong>na</strong>leży przyjąć model kolorów skóry. W tymcelu <strong>na</strong>leży <strong>na</strong>jpierw wybrać przestrzeń kolorów, dla której model ten będzie wyprowadzony.Zgodnie z [28] <strong>na</strong>jlepszą z punktu widzenia wykrywania skóry przestrzenią kolorówjest przestrzeń T SL (tint-saturation-luma).W opisywanym algorytmie wybra<strong>na</strong> została przestrzeń Y C b C r , ze względu <strong>na</strong> jej podobieństwoto przestrzeni T SL – w obu chromi<strong>na</strong>ncja i lumi<strong>na</strong>ncja nie są od siebie zależne,a podprzestrzeń zawierająca kolory skóry jest spój<strong>na</strong>. Dodatkową zaletą jest popularność


2.2. Wykrycie pikseli o kolorze skóry 25modelu Y C b C r – jest on powszechnie stosowany w systemach kodowania i przetwarzaniaobrazów. Następnie <strong>na</strong>leży zdefiniować podprzestrzeń zawierającą kolor skóry. W tymcelu ręcznie wybiera się z wielu fotografii fragmenty zawierające skórę. W ten sposób wyselekcjonowanepiksele tworzą szukaną podprzestrzeń. W tym wypadku, wykorzystanychzostało 137 fotografii 9 osób, z których uzyskanych zostało 853 571 pikseli, które stworzyłypodprzestrzeń kolorów określającą kolor skóry. Przedstawio<strong>na</strong> jest o<strong>na</strong> <strong>na</strong> rysunku2.2. Następnym krokiem jest stworzenie modelu matematycznego, który opisze uzyskanąpodprzestrzeń.Rysunek 2.2 Klaster koloru skóry [12].2.2.1 Nieliniowa transformacja chromi<strong>na</strong>ncjiAutorzy artykułu zauważyli, że podprzestrzeń koloru skóry tworzy bryłę przypomi<strong>na</strong>jącązdeformowany walec, którego podstawy leżą w płaszczyźnie C b C r , wysokość rozciągasię wzdłuż osi Y . Deformacja walca dotyczy jego dolnej i górnej części, które są zwężone.Środkowa część jest <strong>na</strong>jbardziej regular<strong>na</strong> i zbliżo<strong>na</strong> do walca. Środek bryły przebiega <strong>na</strong>płaszczyźnie C b Y zgodnie z zależnością:<strong>na</strong>tomiast w płaszczyźnie C r Y :⎧⎪⎨ 108 + (K l−Y )(118−108)K¯C b (Y ) =l −Y minY < K l⎪⎩ 108 + (Y −K h)(118−108)Y max−K hK h < Y , (2.6)⎧⎪⎨ 154 + (K l−Y )(154−144)K¯C r (Y ) =l −Y minY < K l⎪⎩ 154 + (Y −K h)(154−132)Y max−K hK h < Y , (2.7)gdzie Y min = 16, Y max = 235 oz<strong>na</strong>czają minimalną i maksymalną wartość lumi<strong>na</strong>ncji wprzestrzeni kolorów Y C b C r . K l = 125 może być interpretowa<strong>na</strong> jako wartość <strong>na</strong> osi Y ,poniżej której walec jest zdeformowany, <strong>na</strong>tomiast K h = 188 jest wartością, powyżej której


26 2. Detekcja <strong>twarzy</strong> w oparciu o wykrywanie obszarów o kolorze skórywalec jest zdeformowany. Tak więc dla zakresu wartości Y ∈ [K l , K h ] bryła definiującakolory skóry jest <strong>na</strong>jbardziej zbliżo<strong>na</strong> walca.Szerokość (odległość skrajnego punktu od środka, biorąc pod uwagę przekrój w płaszczyźnieC b C r ) bryły w <strong>na</strong>jszerszym miejscu przybliżo<strong>na</strong> może być funkcją:⎧⎪⎨ W L ci + (Y −Y min)(W ci −W L ci )KW ci =l −Y minY < K l, (2.8)⎪⎩ W H ci + (Ymax−Y )(Wc i −W Hc i )Y max−K hY > K hgdzie i ∈ r, b, oz<strong>na</strong>cza parametry dotyczące odpowiednio charakterystyki bryły w płaszczyz<strong>na</strong>chC r Y i C b Y . Ich wartości, estymowane <strong>na</strong> podstawie kształtu a<strong>na</strong>lizowanej bryły,są <strong>na</strong>stępujące: W Cb = 46.97, W Cr = 38.76, W L Cb = 23, W H Cb = 14, W L Cr = 20,W H Cr = 10.Aby ułatwić rozpoz<strong>na</strong>wanie pikseli koloru skóry, wykonywa<strong>na</strong> jest nieliniowa transformacjaw postaci:⎧( ⎪⎨ Ci (Y ) − ¯C i (Y ) ) W·ciC i(Y ′ ) =+ ¯C W ci (Y ) i (K h ) Y /∈ [K l , K h ]. (2.9)⎪⎩ C i (Y ) Y ∈ [K l , K h ]Ma o<strong>na</strong> <strong>na</strong> celu przekształcenie przestrzeni w taki sposób, żeby bryła definiująca interesujący<strong>na</strong>s obszar zmieniła kształt <strong>na</strong> taki, który bardziej przypomi<strong>na</strong> walec. W tensposób eliminowane są deformacje zwężające walec w dolnej i górnej części. Ten zabiegpozwala <strong>na</strong> łatwą selekcję pikseli definiujących kolor skóry: wystarczy rzutować przekształconepunkty <strong>na</strong> płaszczyznę C b C r i sprawdzić, czy z<strong>na</strong>jdują się w obszarze podstawywalca. W tym celu przekształcony punkt <strong>na</strong>leży przesunąć tak, żeby środek osi bryły(c x , c y ) = (109.38, 152.02) z<strong>na</strong>jdował się w punkcie (0, 0) i obrócić wokół tego punktu okąt θ = 2, 53 radia<strong>na</strong>: [ [ ] [ ]x cos θ sin θ C′=b − c xy]− sin θ cos θ C r ′ . (2.10)− c yObrót ten pozwala łatwo sprawdzić warunek zawierania się punktu w a<strong>na</strong>lizowanej bryle:wystarczy sprawdzić, czy otrzymany punkt (x, y) zawiera się w elipsie o środku w punkcie(ec x , ec y ) = (1.60, 2.41) i półosiach a = 25.39, b = 14.03:(x − ec x ) 2a 2 + (y − ec y) 2b 2 1. (2.11)Powyższą procedurę <strong>na</strong>leży przeprowadzić dla wszystkich pikseli obrazu. Te, które spełniąwarunek 2.11 powinno zaklasyfikować się jako piksele przedstawiające skórę. Rozważaniadotyczące możliwości zrealizowania końcowego przesunięcie o (ec x , ec y ) przy przesunięciuo (c x , c y ) (wzór 2.10) zawarte są w sekcji 4.1. Otrzymaną w ten sposób mapę <strong>na</strong>leżypoddać dalszej a<strong>na</strong>lizie, która ma <strong>na</strong> celu wyróżnienie potencjalnych kandydatur <strong>twarzy</strong>.W tym celu konieczne jest zgrupowanie leżących obok siebie pikseli koloru skóry, tak, abystworzyć maski, które poddawane będą dalszej weryfikacji.2.3 Detekcja oczuKolejnym krokiem <strong>na</strong> drodze do wykrycia <strong>twarzy</strong> jest a<strong>na</strong>liza z<strong>na</strong>lezionych masek podkątem zawartości charakterystycznych dla <strong>twarzy</strong> elementów. Najbardziej wyróżniającymisię cechami <strong>twarzy</strong> są oczy i usta, <strong>na</strong> nich właśnie skupiła się uwaga autorów artykułu.


2.3. Detekcja oczu 27Tworzone są dwie mapy wykorzystywane do detekcji oczu, pierwsza z nich <strong>na</strong> podstawiechromi<strong>na</strong>ncji:M c = 1 [(C23 b ) + ( ˜C2r ) + (Cb /C r ) ] , (2.12)gdzie, zakładając że maksymal<strong>na</strong> wartość chromi<strong>na</strong>ncji wynosi 255:˜C r = 255 − C r . (2.13)Wartości (C 2 b ), ( ˜C r2) oraz (Cb /C r ) znormalizowane są do przedziału [0, 255]. Stworzo<strong>na</strong> wten sposób mapa przyjmie <strong>na</strong>jwiększe wartości w miejscach, w których wartość niebieskiejchromi<strong>na</strong>ncji jest <strong>na</strong>jwiększa, <strong>na</strong>tomiast mała jest wartość chromi<strong>na</strong>ncji czerwonej.Druga mapa uzyskiwa<strong>na</strong> jest <strong>na</strong> podstawie wartości lumi<strong>na</strong>ncji:M l = Y (x, y) ⊕ g σ(x, y)Y (x, y) ⊖ g σ (x, y) + 1 , (2.14)gdzie ⊕ oz<strong>na</strong>cza operator dylatacji, zdefiniowany w [14] jako operator działający <strong>na</strong> funkcjęf(x) funkcją strukturyzującą (structuring function) g(x):(f ⊕ g)(x) = supt∈G∩ ˆD −x{f(x − t) + g(t)} . (2.15)Natomiast ⊖ oz<strong>na</strong>cza operator erozji, zdefiniowany jako:(f ⊖ g)(x) = inft∈G∩D −x{f(x + t) − g(t)} . (2.16)Oz<strong>na</strong>czenie D x określa przesunięcie D, D x = x + t : x ∈ D, ˆD oz<strong>na</strong>cza odwrócenie D,ˆD = x : −x ∈ D. Funkcja f i g zdefiniowane są odpowiednio: f : D ⊂ R n → R,g : G ⊂ R n → R . W przypadku omawianego algorytmu, funkcje f i g są dwuwymiarowe,określają obraz i element strukturyzujący przedstawione w skali szarości. W wersji dyskretnej,zamiast operatora sup (supremum), wykorzystywany jest operator max, zamiastoperatora inf (infimum) wykorzystywany jest operator min. Funkcja strukturyzująca jestmacierzą o określonych wymiarach (zarówno wysokość jak i szerokość powinny być nieparzyste).Operacja dylatacji w wersji dyskretnej polega więc <strong>na</strong> przykładaniu środkamacierzy strukturyzującej do każdego piksela <strong>na</strong> <strong>obrazie</strong>, dodawaniu odpowiednich elementówz macierzy do odpowiednich elementów z otoczenia piksela i wybieraniu spośródtych wartości maksimum. A<strong>na</strong>logicznie działa operator erozji.W opisywanym algorytmie wykorzystywa<strong>na</strong> jest funkcja strukturyzująca w postacipółsfery, przykład takiej funkcji w postaci ciągłej przedstawiony jest <strong>na</strong> rysunku 2.3.Wyrażenie 2.14 przyjmie <strong>na</strong>jwiększe wartości dla pikseli, w których otoczeniu z<strong>na</strong>jdująsię zarówno piksele o dużej wartości jasności, jak i piksele o małej wartości jasności.W rezultacie powstanie mapa, która <strong>na</strong>jwiększe wartości będzie przyjmować w mocnozmiennych fragmentach obrazu. Zgadza się to z intuicyjnym przypuszczeniem – fragmentyzdjęć zawierające oczy są zwykle mocno kontrastowe.Otrzymane mapy M c i M l są normalizowane do przedziału [0, 255], a <strong>na</strong>stępnie mnożoneprzez siebie w celu uzyskania fi<strong>na</strong>lnej mapy oczu:M e = M c · M l . (2.17)Uzyska<strong>na</strong> w ten sposób mapa ma <strong>na</strong>jwiększe wartości w miejscach, w których przypuszczalniez<strong>na</strong>jdują się oczy.


28 2. Detekcja <strong>twarzy</strong> w oparciu o wykrywanie obszarów o kolorze skóryRysunek 2.3 Przykładowa funkcja strukturyzująca w postaci półsfery.2.4 Detekcja ustUsta poszukiwane są <strong>na</strong> potencjalnym obszarze <strong>twarzy</strong> zgodnie z intuicyjną przesłanką– usta są zwykle <strong>na</strong>jbardziej czerwonym fragmentem <strong>twarzy</strong>. Autorzy artykułu zauważyli,że wyrażenie C 2 r przyjmuje duże wartości w obszarach obrazu reprezentujących usta, <strong>na</strong>tomiastwyrażenie C r /C b przyjmuje w tych regio<strong>na</strong>ch małe wartości w porów<strong>na</strong>niu z resztąobszaru <strong>twarzy</strong>. Mapa ust, stworzo<strong>na</strong> z uwzględnieniem powyższych obserwacji przybierapostać:gdzie η jest określone jako:M m = C 2 r · (C 2 r − η · C r /C b) 2, (2.18)η = 0.95 ·1n∑1n(x,y)∈FG∑(x,y)∈FGC r (x, y) 2C r (x, y)/C b (x, y) , (2.19)gdzie n oz<strong>na</strong>cza liczbę pikseli w obrębie a<strong>na</strong>lizowanego regionu skóry FG (maski <strong>twarzy</strong>).Wartości Cr2 i C r /C b są normalizowane do przedziału [0, 255]. Współczynnik η uzależniawartości tworzonej mapy od średniej wielkości składowej czerwonej i odwrotności jejśredniego stosunku do składowej niebieskiej w a<strong>na</strong>lizowanym obszarze. Zabieg ten ma <strong>na</strong>celu dopasowanie zachowania algorytmu do różnych <strong>twarzy</strong> – dzięki temu usta wykrytezostaną zarówno <strong>na</strong> mocno rumianej, jak i <strong>na</strong> bladej <strong>twarzy</strong>.2.5 Końcowa weryfikacjaW ostatniej fazie algorytmu informacje o potencjalnych regio<strong>na</strong>ch obrazu przedstawiającychtwarze, oczy i usta są ze sobą wiązane, w rezultacie otrzymywa<strong>na</strong> jest informacja opołożeniu <strong>twarzy</strong> <strong>na</strong> <strong>obrazie</strong>. Dokładne informacje <strong>na</strong> ten temat podane są w [11], artykułten nie był jed<strong>na</strong>k dostępny, kiedy algorytm był implementowany. Zastosowane zostałasamodzielnie opracowa<strong>na</strong> metoda, która przedstawio<strong>na</strong> jest poniżej. Wgląd do artykułuudało się uzyskać tuż przed końcem tworzenia pracy, opis metod w nim zawartychprzedstawiony jest z w dodatku A.


2.5. Końcowa weryfikacja 292.5.1 Segmentacja obszarów o kolorze skóryW pierwszej kolejności wykonywany jest podział obrazu <strong>na</strong> obszary, które będą daleja<strong>na</strong>lizowane. Segmentacja ta przeprowadza<strong>na</strong> jest w oparciu o uzyskany obraz pikseli koloruskóry z wykorzystaniem algorytmu wyszukiwania konturów, opisanego w [27]. Jegoimplementacja dostęp<strong>na</strong> jest w bibliotece OpenCV. Nie jest wykorzystywa<strong>na</strong> topologiakonturów, jedynie informacja o tym, że dany zbiór pikseli tworzy spójny obszar. Z uzyskanegokonturu wybierane są cztery skrajne piksele, tworzące prostokąt opisany <strong>na</strong> danymregionie skóry. Jeden z prostych algorytmów, który może być wykorzystany w celu przeprowadzeniasegmentacji i ekstrakcji konturów tak uzyskanych sylwetek, opisany jest wzałączniku B.Regiony skóry w kształcie prostokątów, które mają być dalej a<strong>na</strong>lizowane są <strong>na</strong>jpierwsprawdzane pod kątem wielkości. Jeśli spełniony jest poniższy warunek, dany region jestodrzucany:S w > I w · α s lub S h > I h · α s , (2.20)gdzie S w oz<strong>na</strong>cza szerokość a<strong>na</strong>lizowanego regionu, S h jego wysokość, I h to wysokośćcałego obrazu, I w jego szerokość, α s to współczynnik algorytmu.Kontury uzyskane w dalszej części działania algorytmu również są sprawdzane podkątem wielkości:Cont count < S w · S h · α c . (2.21)Jeśli warunek ten jest spełniony, dany kontur nie jest dalej a<strong>na</strong>lizowany. Cont count określaliczbę pikseli wchodzących w skład sylwetki, <strong>na</strong> podstawie której otrzymany został kontur,α c jest parametrem algorytmu.2.5.2 Ekstrakcja położenia oczuW celu wykrycia dokładnego położenia oczu, <strong>na</strong> podstawie uzyskanych wcześniej maptworzo<strong>na</strong> jest nowa mapa:M = (M c · M l )/255 + α m · M m ; α m < 0. (2.22)Od iloczynu map oczu uzyskanych <strong>na</strong> podstawie lumi<strong>na</strong>ncji i koloru (znormalizowanychdo przedziału wartości [0, 255]), odejmowa<strong>na</strong> jest mapa ust, ze współczynnikiem α m , któryprzekazywany jest jako parametr algorytmu, jego domyśl<strong>na</strong> wartość to α m = −2. Uzasadnionejest to obserwacją, że czasami oczy wykrywane były w obszarze ust – wprowadzenietego dodatkowego elementu do wyrażenia <strong>na</strong> fi<strong>na</strong>lną mapę oczu eliminuje ten niekorzystnyefekt. Mapa M tworzo<strong>na</strong> jest tylko <strong>na</strong> obszarach, które zaklasyfikowane zostały jakoskóra, dodatkowo zwężonych przy pomocy morfologicznej operacji erozji. Ogranicza toliczbę wykrytych fałszywych oczu <strong>na</strong> granicy <strong>twarzy</strong>.Dla tak uzyskanej mapy M obliczany jest histogram. Na podstawie histogramu wyszukiwa<strong>na</strong>jest wartość maksymalnej jasności uzyskanej w tym obszarze I max . W celu usunięciazakłóceń przyjęte jest założenie, że <strong>na</strong> a<strong>na</strong>lizowanym obszarze powinny z<strong>na</strong>jdowaćsię co <strong>na</strong>jmniej 3 piksele o jasności, która przyjęta zostanie jako maksymal<strong>na</strong>. Następniemapa M jest poddawa<strong>na</strong> półprogowaniu, zerowane są wszystkie piksele, których jasnośćjest mniejsza niż I max − I eye interval :⎧⎨i(x, y) jeśli i(x, y) > I max − I eye intervali(x, y) =. (2.23)⎩0 w przeciwnym wypadku


30 2. Detekcja <strong>twarzy</strong> w oparciu o wykrywanie obszarów o kolorze skóryWartość I eye interval przekazywa<strong>na</strong> jest jako parametr algorytmu, jej domyśl<strong>na</strong> wartośćwynosi I eye interval = 30.Uzyskane w ten sposób piksele są grupowane w celu ostatecznego ustalenia pozycjioczu <strong>na</strong> <strong>obrazie</strong>. Spsób postępowania jest podobny jak w przypadku segmentacji obrazu<strong>na</strong> obszary skóry. Jako środek oka przyjmowany jest środek prostokąta opisanego <strong>na</strong>wyselekcjonowanym obszarze oka.2.5.3 Ekstrakcja położenia ustPołożenie ust obliczane jest a<strong>na</strong>logicznie do położenia oczu, jako mapa wejściowa przyjmowa<strong>na</strong>jest niezmodyfikowa<strong>na</strong> mapa ust:2.5.4 Weryfikacja istnienia <strong>twarzy</strong>M = M m (2.24)Obszary obrazu, <strong>na</strong> których wykryta została skóra, a <strong>na</strong>stępnie cechy charakterystyczne<strong>twarzy</strong>, czyli oczy i usta, poddawane są dalszej a<strong>na</strong>lizie w celu podjęcia ostatecznejdecyzji czy dany region przedstawia twarz.Eksperymenty pokazały, że czasami jedno oko z<strong>na</strong>jdujące się <strong>na</strong> <strong>obrazie</strong> było wykrywanejako dwoje lub więcej oczu. Ta sama sytuacja dotyczyła ust. Aby pozbyć się tegoniekorzystnego zjawiska, wprowadzo<strong>na</strong> została filtracja. Przyjęta została wartość progowa:√T dist = C x · Sw 2 + Sh 2, (2.25)gdzie S w oz<strong>na</strong>cza szerokość a<strong>na</strong>lizowanego podobrazu, S h jego wysokość, C x ∈ {C e , C m }są współczynnikami algorytmu odpowiednio dla łączenia oczu i ust. Para oczu (ust) z<strong>na</strong>jdującesię w odległości mniejszej od ustalonego progu T dist przekształca<strong>na</strong> jest do pojedynczegooka (ust). Położenie nowego elementu obliczane jest jako średnia współrzędnychelementów, z których został on stworzony.Dalszej a<strong>na</strong>lizie poddawane są tylko te obszary, dla których wykrytych zostało więcejniż jedno, ale mniej niż pięcioro oczu, oraz więcej niż jedne, ale mniej niż cztery usta.Zasada ta, ustalo<strong>na</strong> <strong>na</strong> drodze eksperymentu, ma <strong>na</strong> celu odfiltrowanie obszarów, którenie przedstawiają <strong>twarzy</strong>. Dla takich obszarów oczy i usta zostaną wykryte, ze względu<strong>na</strong> sposób w jaki jest to realizowane: wybierane są <strong>na</strong>jjaśniejsze miejsca <strong>na</strong> uzyskanychmapach. W obszarach obrazu nie przedstawiających <strong>twarzy</strong> miejsc takich może być sporo,ze względu <strong>na</strong> brak poszukiwanych cech, których duże wartości <strong>na</strong> obliczonych mapachpowodują wyeliminowanie przypadkowych pozycji (zgodnie ze wzorem 2.23)Dla każdej trójki (dwojga oczu i pojedynczych ust) przeprowadza<strong>na</strong> jest <strong>na</strong>stępującaprocedura:1. obliczenie wzajemnych odległości i sprawdzenie, czy mieszczą się one w ustalonychprzedziałach:d ee ∈ [1 − c ee · d avg em , 1 + c ee · d avg em ], (2.26)orazd e1 m ∈ [1 − c em · d e2 m, 1 + c em · d e2 m], (2.27)gdzie d ee to odległość między oczyma, d e1 m i d e2 m określają odległości oczu od ust,c ee i c em to współczynniki algorytmu,d avg em = (d e1 m + d e2 m)/2, (2.28)


2.5. Końcowa weryfikacja 312. z<strong>na</strong>lezienie symetralnej odcinka łączącego oczy i obliczenie √ odległości ust od niej;sprawdzenie, czy odległość ta jest mniejsza od C nm· Sw 2 + Sh 2, gdzie C nm jest współczynnikiemalgorytmu, jego domyśl<strong>na</strong> wartość to 0.01.Jeśli powyższe postępowania da pozytywny wynik, a<strong>na</strong>lizowany obszar klasyfikowany jestjako twarz.


Rozdział 3Implementacja algorytmuW celu zweryfikowania jakości działania algorytmu opisanego w rozdziale 2, sprawdzeniamożliwości jego modyfikacji i ewentualnych ulepszeń, podjęta została próba jegoimplementacji. Moż<strong>na</strong> wyróżnić dwa jej etapy – podczas pierwszego uwaga skupio<strong>na</strong> byłagłównie <strong>na</strong> realizacji operacji związanych z przetwarzaniem informacji niesionych przezmapy kolorów obrazu, w czasie realizacji drugiej części zadania implementacja zostaładoprowadzo<strong>na</strong> do ostatecznej postaci.3.1 Pierwszy etap implementacji algorytmuW pierwszym podejściu podjęta została próba implementacji wybranego algorytmubez wykorzystania wysokopoziomowych bibliotek do przetwarzania obrazów, wyłączniez wykorzystaniem języka C. Cała funkcjo<strong>na</strong>lność została zawarta w bibliotece współdzielonej.Z<strong>na</strong>cznie ułatwia to twórcom aplikacji wykorzystanie zaimplementowanych metod.Wystarczy, że dołączą oni do swojego programu pliki <strong>na</strong>główkowe biblioteki, oraz umieszcząpliki bi<strong>na</strong>rne biblioteki w odpowiednim miejscu systemu operacyjnego. Podstawowąstrukturą wykorzystywaną do opisywania przetwarzanych obrazów jest struktura image,której pola wyszczególnione są w tabeli 3.1.widthheightbytes per pixelimageokreśla szerokość obrazu w pikselachokreśla wysokość obrazu w pikselachokreśla liczbę bajtów, <strong>na</strong> ilu kodowa<strong>na</strong> jest informacjao jednym pikseluzawiera wskaźnik <strong>na</strong> obszar pamięci zawierający obraz;wielkość tego obszaru może być obliczo<strong>na</strong> <strong>na</strong> podstawiepozostałych parametrówTabela. 3.1 Struktura image wykorzystywa<strong>na</strong> do opisywania obrazów.3.1.1 Korekcja gammaAby przyśpieszyć operację korekcji gamma, charakterystyka, według której ta operacjajest przeprowadza<strong>na</strong>, oblicza<strong>na</strong> może być funkcją eval gamma correction() (tabela 3.2).Obliczoną w ten sposób charakterystykę moż<strong>na</strong> zastosować do przekształcenia obrazu zapomocą funkcji apply gamma correction(), której argumenty przedstawione są w tabeli3.3


34 3. Implementacja algorytmua współczynnik a determinujący intensywność korekcji(wzór 2.3)array wskaźnik <strong>na</strong> tablicę, która zostanie zarezerwowa<strong>na</strong> w pamięcii w której zapisane będą poszczególne punkty charakterystykilength długość powyższej tablicyTabela. 3.2Parametry funkcji eval gamma correction().imgarraylengthstepreprezentuje obraz, który ma być poddany przekształceniutablica zawierająca poszczególne punkty charakterystyki,wg której obraz zostanie przekształconydługość powyższej tablicyskok przetwarzania obrazuTabela. 3.3Argumenty funkcji apply gamma correction().3.1.2 Korekcja barwStuktura rgb correction factors jest wykorzystywa<strong>na</strong> do przekazywania informacjio korekcji barw. Jej pola przedstawione są w tabeli 3.5. Pola red, green i blue zaredgreenbluered lumgreen lumblue lumref pixels volumewspółczynnik korekcji koloru czerwonegowspółczynnik korekcji koloru zielonegowspółczynnik korekcji koloru niebieskiegowaga ka<strong>na</strong>łu czerwonego używa<strong>na</strong> przy obliczaniu <strong>na</strong>jjaśniejszychpikseliwaga ka<strong>na</strong>łu zielonego używa<strong>na</strong> przy obliczaniu <strong>na</strong>jjaśniejszychpikseliwaga ka<strong>na</strong>łu niebieskiego używa<strong>na</strong> przy obliczaniu <strong>na</strong>jjaśniejszychpikseliliczba <strong>na</strong>jjaśniejszych pikseli, które uz<strong>na</strong>ne zostaną za referencyjnykolor biały (zgodnie z opisem w 2.1.1)Tabela. 3.4 Pola struktury rgb correction factorswierają współczynniki, które wykorzystane będą do przeprowadzenia korekcji kolorów.Mogą one zostać obliczone z wykorzystaniem funkcji eval lum corr factors char() lubeval rgb corr factors char(). Działanie funkcji eval rgb corr factors char() polega<strong>na</strong> rozciągnięciu histogramów poszczególnych ka<strong>na</strong>łów obrazu tak, aby liczba pikselio jasności 255 w każdym z nich wynosiła ref pixels volume. Działanie funkcjieval lum corr factors char() jest podobne, referencyjny kolor biały obliczany jest jed<strong>na</strong>kjako suma jasności z trzech ka<strong>na</strong>łów z wagami red lum, green lum i blue lum.


3.1. Pierwszy etap implementacji algorytmu 35imgfactorsstepsstruktura opisująca obraz dla którego wyliczone mają byćparametry korekcjistruktura rgb correction factors, przez którą przekazywanesą parametry wejściowe do obliczenia współczynnikówkorekcji oraz wynik tych obliczeńskok przetwarzania obrazuTabela. 3.5 Argumenty przyjmowane przez funkcje eval lum corr factors char()i eval rgb corr factors char()3.1.3 Wykrycie koloru skóryKlasyfikacja pikseli jako potencjalnie przedstawiających kolor skóry, odbywa się zgodnieze wzorami 2.9, 2.11. Zarówno parametry nieliniowej transformacji chromi<strong>na</strong>ncji, jaki parametry elipsy przekazywane są w strukturach jako argumenty funkcji find skin(),która rozpoz<strong>na</strong>je piksele koloru skóry (jej argumenty przedstawione są w tabeli 3.6). Każdypiksel obrazu powinien opisany być 3 bajtami: pierwszy definiuje lumi<strong>na</strong>ncję, drugi składowąniebieską, trzeci składową czerwoną. Po zakończonym działaniu każdemu pikselowi<strong>na</strong> wszystkich 3 bajtach go definiujących, przypisywa<strong>na</strong> jest wartość 255, jeśli wykrytypiksel oz<strong>na</strong>czony został jako skóra, lub 0 w przeciwnym wypadku. Pole steps umożliwiazdefiniowanie skoku przetwarzania obrazu, a więc <strong>na</strong> przykład określenie, że przetwarzanyma być co drugi piksel w poziomie i co trzeci w pionie. W zamyśle funkcjo<strong>na</strong>lność ta miałabyć wykorzystywa<strong>na</strong> w celu przyśpieszenia obliczeń dla dużych obrazów bez koniecznościzmieniania ich rozmiarów.image informacje o <strong>obrazie</strong>, w postaci struktury opisanej w tabeli3.1steps skok przetwarzania obrazuclus params parametry opisujące klaster koloru skóry (2.8, 2.6, 2.7)ellipse params parametry opisujące elipsę (2.11)Cb spre wskaźnik <strong>na</strong> tablicę zawierającą wartości określające szerokośćklastra składowej niebieskiejCr spre wskaźnik <strong>na</strong> tablicę zawierającą wartości określające szerokośćklastra składowej czerwonejCb cen wskaźnik <strong>na</strong> tablicę zawierającą wartości określające środekklastra składowej niebieskiejCr cen wskaźnik <strong>na</strong> tablicę zawierającą wartości określające środekklastra składowej czerwonejclust size rozmiar czterech powyższych tablic (są one jed<strong>na</strong>kowejdługości)Tabela. 3.6 Argumenty funkcji find skin() wykorzystywanej do detekcji koloru skóry.Wskaźniki <strong>na</strong> tablice opisujące środki i szerokości klastrów składowej niebieskiej iczerwonej powinny być obliczone z wykorzystaniem funkcji eval clusters(), której argumentyprzedstawione są w tabeli 3.7.W skład struktury params, zawierającej parametry definiujące kształt obliczanychklastrów wchodzą W Cb , W Cr , W L Cb , W H Cb , W L Cr , W H Cr , K l , K h , Y min , Y max , które


36 3. Implementacja algorytmuparamsCb spreCr spreCb cenCr cenclust sizeparametry definiujące kształt obliczanych klastrówwskaźniki <strong>na</strong> tablice określające szerokości i środki klastrówskładowej niebieskiej i czerwonej, a<strong>na</strong>logicznie jak wtabeli 3.6Tabela. 3.7 Argumenty funkcji eval clusters() inicjalizującej klastry.jawnie wykorzystywane są we wzorach 2.8 i 2.9. Dodatkowo, zawarte są w niej parametryCc b = 108, Cc r = 154, Ca r = −10, Ca b = 10, Cb r = −22, Cb b = 10, któreodpowiadają liczbowym wartościom we wzorach 2.6, 2.7.Ich inicjalizacja domyślnymi wartościami (przedstawionymi w rozdziale 2), może byćprzeprowadzo<strong>na</strong> z wykorzystaniem funkcji init clus params(), która jako argumentprzyjmuje wskaźnik <strong>na</strong> strukturę params.Wydzielenie zadania obliczenia kształtu klastrów do osobnej funkcji ma <strong>na</strong> celu przyśpieszeniedziałania biblioteki. Dzięki temu twórca aplikacji może zainicjalizować klastrytylko raz w trakcie działania programu, a <strong>na</strong>stępnie korzystać z wartości przechowywanychw pamięci.Struktura ellipse params przekazywa<strong>na</strong> jako argument do funkcji find skin() zawieraparametry elipsy: c x , c y , θ, ec x , ec y , a, b. Elipsa ta wykorzystywa<strong>na</strong> jest do wyodrębnieniapikseli koloru skóry po zrzutowaniu a<strong>na</strong>lizowanego punktu <strong>na</strong> płaszczyznę C b C r ,zgodnie ze wzorem 2.11. Inicjalizacja parametrów elipsy może być przeprowadzo<strong>na</strong> z wykorzystaniemfunkcji init ellipse params(), która jako argument przyjmuje wskaźnik<strong>na</strong> strukturę ellipse params.3.1.4 Segmentacja wykrytych obszarów skóryW celu podziału obrazu z wykrytymi kolorami skóry zaimplementowa<strong>na</strong> została funkcjasegmentation(), z argumentami przedstawionymi w tabeli 3.9. Każdy wyróżnionyregion otrzymuje unikalny identyfikator. Numer regionu do którego przy<strong>na</strong>leży każdy pikselzapamiętywany jest w strukturze image regions (tabela 3.8).datawidthheightwskaźnik <strong>na</strong> obszar pamięci zawierający identyfikatory segmentówdla poszczególnych pikseli obrazuwysokość obrazuszerokość obrazuTabela. 3.8 Pola struktury image regions zawierającej identyfikatory wyróżnionych obszarówdla poszczególnych pikseli obrazy3.1.5 <strong>Wykrywanie</strong> oczuObliczanie mapy oczu <strong>na</strong> podstawie chromi<strong>na</strong>ncji (2.12) zaimplementowane jest wfunkcji find eyes() (tabela 3.10).


3.1. Pierwszy etap implementacji algorytmu 37processed imageregions resultregions countregions numberresultstepsobraz uzyskany w wyniku działania funkcji find skin()wskaźnik <strong>na</strong> strukturę image regions, zawiera informacjeo identyfikatorze przypisanym do każdego z pikseli obrazuwskaźnik <strong>na</strong> tablicę, która zostanie stworzo<strong>na</strong> w trakciedziałania funkcji, zapisane zostaną w niej identyfikatoryprzydzielo<strong>na</strong> poszczególnym obszaromzmien<strong>na</strong>, w której zapisanych zostanie liczba z<strong>na</strong>lezionychobszarówstruktura typu image char, zawierać będzie o<strong>na</strong> obraz, wktórym każdy wydzielony obszar będzie miał inny kolor;obraz może być wykorzystany w celu graficznej reprezentacjiwydzielonych obszarówskok przetwarzania obrazuTabela. 3.9 Argumenty funkcji segmentation() dokonującej podziału obrazu <strong>na</strong> regiony.orig imageprocessed imageresultstepsorygi<strong>na</strong>lny obraz w formacie Y C b Crobraz przedstawiający wykryte piksele koloru skóry, wykorzystywanyjako maska, obliczenia przeprowadzane sątylko w regio<strong>na</strong>ch, które zaklasyfikowane zostały jako skórastruktura typu image char, w której zawarty będzie rezultatdziałania funkcjiskok przetwarzania obrazuTabela. 3.10 Argumenty funkcji find eyes() obliczającej mapę oczu <strong>na</strong> podstawie składowychchromi<strong>na</strong>cji.


38 3. Implementacja algorytmuObliczanie mapy oczu <strong>na</strong> podstawie lumi<strong>na</strong>ncji (2.14) zaimplementowane jest w funkcjidilation erosion() (tabela 3.12). Funkcja strukturyzująca wykorzystywa<strong>na</strong> w tejoperacji definiowa<strong>na</strong> jest z wykorzystaniem struktury struc func (tabela 3.11).radiuscoefsliczba całkowita definiująca w pikselach promień otoczenia<strong>na</strong> którym działa funkcja strukturyzującawskaźnik <strong>na</strong> tablicę zawierająca wagi poszczególnych pikseliz otoczenia; pierwsza wartość określa wagę lewego górnegopunktu otoczenia; <strong>na</strong>stępne wartości definiują wagikolejnych punktów górnego oraz pozostałych wierszyTabela. 3.11 Pola struktury struc func.orig imageprocessed imageresultstepsparamsorygi<strong>na</strong>lny obraz w formacie Y C b Crobraz przedstawiający wykryte piksele koloru skóry, wykorzystywanyjako maska, obliczenia przeprowadzane sątylko w regio<strong>na</strong>ch, które zaklasyfikowane zostały jako skórastruktura typu image char, w której zawarty będzie rezultatdziałania funkcjiskok przetwarzania obrazustruktura typu struc func definiująca funkcję strukturyzującą.Tabela. 3.12 Argumenty funkcji dilation erosion() obliczającej mapę oczu <strong>na</strong> podstawielumi<strong>na</strong>ncji.Obie uzyskane mapy oczu mogą być połączone w jedną z wykorzystaniem funkcjimerge eyes maps() (tabela 3.13). Wynikiem działania funkcji jest obraz powstały w poprzezpołączenie map, oraz lista ze współrzędnymi wykrytych oczu. Sposób reprezentacjitej listy przedstawiony jest w tabeli 3.14.3.1.6 <strong>Wykrywanie</strong> ustObliczanie mapy ust zaimplementowane jest w funkcji find mouth var eta(). Wynikiemjej działania jest obraz przedstawiający uzyskaną mapę oraz lista wykrytych ust(tabela 3.15).3.2 Nakładka graficz<strong>na</strong>W celu przetestowania biblioteki opisanej w sekcji 3.1 zaimplementowa<strong>na</strong> została aplikacjagraficz<strong>na</strong>. Stworzo<strong>na</strong> została o<strong>na</strong> z wykorzystaniem biblioteki Qt. Umożliwia o<strong>na</strong>wczytanie wielu obrazów, które wyświetlane są w dwóch kolum<strong>na</strong>ch (rysunek 3.2), przyczym każdy z nich prezentowany jest w dwóch wersjach. Wybór trybu w jakim wyświetlanyjest obraz dokonywany jest z wykorzystaniem dwóch osobnych rozwijanych list, widocznychw lewym dolnym rogu ok<strong>na</strong> aplikacji. Na zamieszczonym rysunku są one zwinięte.Dostępne są <strong>na</strong>stępujące tryby prezentacji obrazów:


3.2. Nakładka graficz<strong>na</strong> 39color imgdil er imglips imgregions imgregions numberregions countresult imgregions listmapa oczu uzyska<strong>na</strong> <strong>na</strong> podstawie chromi<strong>na</strong>ncjimapa oczu uzyska<strong>na</strong> <strong>na</strong> podstawie lumi<strong>na</strong>ncjimapa uststruktura zawierająca podział obrazu <strong>na</strong> regiony skóryliczba regionówwskaźnik <strong>na</strong> tablicę zawierająca identyfikatory regionówstruktura w której zawarty będzie obraz przedstawiającypołączone mapy oczulista region data zawierająca współrzędne wykrytychoczuTabela. 3.13 Argumenty funkcji merge eyes map() łączącej mapy oczu.listparent region idxyregion countstruktura typu list head pochodząca z jądra Linuxa; dołączeniejej do innej struktury umożliwia wygodne tworzeniei zarządzanie listami tych strukturidentyfikator regionu do którego przy<strong>na</strong>leży z<strong>na</strong>leziony elementwspółrzęd<strong>na</strong> pozioma elementuwspółrzęd<strong>na</strong> pionowa elementuliczba pikseli wchodzących w skład elementuTabela. 3.14 Pola struktury region data wykorzystywanej do przekazywania informacjio z<strong>na</strong>lezionych elementach.orig imgregions imgregions numberregions countresultregions resultregions listobraz orygi<strong>na</strong>lnystruktura zawierająca podział obrazu <strong>na</strong> regiony skóryliczba regionówwskaźnik <strong>na</strong> tablicę zawierająca identyfikatory regionówobraz, który przedstawiał będzie mapę ustobraz, <strong>na</strong> którym każdemu z obszarów wyróżnionych jakousta przyporządkowany będzie inny kolorlista region data zawierająca współrzędne wykrytych ustTabela. 3.15 Argumenty funkcji find mouth var eta() wyszukującej usta.


40 3. Implementacja algorytmuRysunek 3.1 Główne okno aplikacji graficznej wykorzystującej stworzoną bibliotekę.Origi<strong>na</strong>l orygi<strong>na</strong>lny obraz,Balanced obraz poddany korekcji kolorów,Processed obraz przedstawiający wynik wyszukiwania koloru skóry,Post processed obraz poddany dodatkowym transformacjom koloru,Segmented obraz przedstawiający wydzielone regiony koloru skóry, każdy z nich ma <strong>na</strong>tym <strong>obrazie</strong> inną barwę,Eroded obraz przedstawiający wynik wyszukiwania koloru skóry, poddany dylatacji,Eyes - color map obraz przedstawiający mapę oczu uzyskaną <strong>na</strong> podstawie chromi<strong>na</strong>ncji,Eyes - dilation&erosion obraz przedstawiający mapę oczu uzyskaną <strong>na</strong> podstawie lumi<strong>na</strong>ncji,Eyes - both methods merged obraz uzyskany w wyniku połączeniu obu map oczu,


3.3. Drugi etap implementacji algorytmu 41Lips map obraz przedstawiający mapę ust.Jednym z celów, dla którego aplikacja została stworzo<strong>na</strong>, było zbadanie zmian w działaniualgorytmu spowodowanych modyfikacją wartości jego ustawień. Program umożliwiaustawianie <strong>na</strong>stępujących parametrów:• kształtu klastrów koloru skóry,• kształtu i położenia elipsy,• ustawień wykorzystywanych przy tworzeniu mapy oczu <strong>na</strong> podstawie lumi<strong>na</strong>ncji.Edycja parametrów przeprowadza<strong>na</strong> jest w osobnych ok<strong>na</strong>ch, których pojawienie się wywoływanejest z menu widocznego w lewym górnym rogu aplikacji (przykładowe oknoprzedstawione jest <strong>na</strong> rysunku 3.2). Po ustawieniu nowych parametrów, obrazy uaktualniająsię automatycznie w przypadku ustawień dotyczących klastrów, w pozostałychprzypadkach wymagane jest wciśnięcie odpowiedniego przycisku. Stan aplikacji (processing/done)wyświetlany jest w lewej dolnej części głównego ok<strong>na</strong>.Rysunek 3.2 Okno umożliwiające modyfikację parametrów elipsy.3.3 Drugi etap implementacji algorytmuNastęp<strong>na</strong> część implementacji algorytmu przeprowadzo<strong>na</strong> została z wykorzystaniembiblioteki OpenCV. Jedyną funkcjo<strong>na</strong>lnością biblioteki opisanej w sekcji 3.1, która wykorzysta<strong>na</strong>została w drugim etapie, jest wykrywanie koloru skóry. Pozostała część algorytmuzostała przepisa<strong>na</strong> z wykorzystaniem bazowych funkcji przetwarzania obrazu dostępnychw OpenCV. Tak jak w pierwszej fazie, w tym przypadku również cała funkcjo<strong>na</strong>lnośćwykrywania <strong>twarzy</strong> zaimplementowa<strong>na</strong> została w bibliotece współdzielonej.Interfejs programowy tej biblioteki jest o wiele prostszy, składa się tylko z jednej funkcjiFaceDetect(), przyjmującej jako parametry obraz <strong>na</strong> którym wyszukane mają być twarzeoraz strukturę konfiguracyjną FaceDetectionParams. Pola tej struktury przedstawionesą w tabeli 3.16. W przypadku argumentów funkcjonujących jako przełączniki wartość0 oz<strong>na</strong>cza wyłączenie danej funkcji, wartość róż<strong>na</strong> od 0 oz<strong>na</strong>cza jej włączenie.


42 3. Implementacja algorytmuskinParams struktura SkinDetectionParams, opisa<strong>na</strong> w tabeli 3.18eyesParams struktura EyesDetectionParams, opisa<strong>na</strong> w tabeli 3.17showEyesLumMap włączenie wyświetlania obrazów przedstawiających mapyoczu utworzone <strong>na</strong> podstawie lumi<strong>na</strong>ncji dla poszczególnychregionów skóryshowEyesColMap włączenie wyświetlania obrazów z mapami oczu utworzonymi<strong>na</strong> podstawie składowych chromi<strong>na</strong>ncji dla poszczególnychregionów skóryshowLipsMap włączenie wyświetlania obrazów z mapami ust utworzonymidla poszczególnych obszarów skóryshowEyesMap włączenie wyświetlania obrazów przedstawiających fi<strong>na</strong>lnemapy oczu dla poszczególnych obszarów skórysaveImages włączenie zapisywania obrazów; zapisywane są tylko te obrazy,których wyświetlenie włączone jest odpowiednimi parametramidrawFaceTriangle włączenie rysowania trójkąta łączącego oczy i usta, <strong>na</strong>podstawie których dany region zaklasyfikowany został jakotwarzdrawHelpers włączenie rysowania punktów w których wykryte zostałyoczy (kolor niebieski) i usta (kolor zielony)markSkinRegions włączenie rysowania prostokątów wokół obszarów skóry,które poddawane są a<strong>na</strong>lizieshowOrigi<strong>na</strong>lImage wyświetlenie/zapisanie orygi<strong>na</strong>lnego obrazuprintTimes włączenie wypisywania czasu trwania fazy wyszukiwaniapikseli koloru skóry i całej operacji detekcji <strong>twarzy</strong>noImagesShow całkowite wyłączenie wyświetlania obrazów, nie wyłączazapisywania obrazóweyesMergeRatio współczynnik C e definiujący maksymalną odległość międzywykrytymi oczami, dla której nie są one łączone (sekcja2.5.4)lipsMergeRatio współczynnik C m definiujący maksymalną odległość międzywykrytymi ustami, dla której nie są one łączone (sekcja2.5.4)eyeMouthDistCoef współczynnik c em określający maksymalny stosunek odległościoczu od ust (sekcja 2.5.4)eyeEyeDistCoef współczynnik c ee określający maksymalną odległość miedzyoczyma względem rozmiaru <strong>twarzy</strong> (sekcja 2.5.4)maxLipsNormalDistRatio współczynnik C nm definiujący maksymalną odległość ustod symetralnej odcinka między oczyma (sekcja 2.5.4)saveName przyrostek <strong>na</strong>zw plików w których zapisane zostaną obrazyprzedstawiające włączone rezultaty poszczególnych etapówdziałania algorytmuciąg dalszy tabeli <strong>na</strong> <strong>na</strong>stępnej stronie


3.3. Drugi etap implementacji algorytmu 43ciąg dalszy tabeli z poprzedniej stronybeVerbosebeSilentwłączenie trybu wypisywa<strong>na</strong> większej ilości informacji oprzebiegu działania programucałkowite wyłączenie wypisywania informacji z przebiegudziałania programuTabela. 3.16 Pola struktury FaceDetectionParams wykorzystywanej do konfiguracji algorytmuwykrywania <strong>twarzy</strong>.lumMapGammaCorrcolMapGammaCorrmaskErodeRatiomaskCloseRatiolipsMaskCoefeyesCutoffwspółczynnik a korekcji gamma przeprowadzanej <strong>na</strong> regionieobrazu przed utworzeniem z niego mapy oczu <strong>na</strong>podstawie lumi<strong>na</strong>ncjiwspółczynnik a korekcji gamma przeprowadzanej <strong>na</strong> regionieobrazu przed utworzeniem z niego mapy oczu <strong>na</strong>podstawie składowych chromi<strong>na</strong>ncjiliczba operacji erozji <strong>na</strong> masce przedstawiającej twarzprzed łączeniem map oczuliczba operacji morfologicznego domknięcia <strong>na</strong> masceprzedstawiającej twarz przed łączeniem map oczuwaga mapy ust przy tworzeniu fi<strong>na</strong>lnej mapy oczu (współczynnikα m we wzorze 2.22)szerokość przedziału jasności, z którego piksele klasyfikowanesą jako potencjalnie przedstawiające oczy (współczynnikI eye interval we wzorze 2.23)Tabela. 3.17oczu.Struktura EyesDetectionParams przechowująca parametry wykrywaniamaxSkinAreaRatiominSkinContourRatioextensionRatioshowSkinRegionfirstErosionwspółczynnik α s determinujący maksymalną wielkość regionuskóry, zgodnie ze wzorem 2.20współczynnik α c wykorzystywany do odrzucania zbyt małychkonturów zgodnie ze wzorem 2.21liczba pikseli o jaką rozszerzany jest prostokąt otaczającya<strong>na</strong>lizowany region skóry, dla którego obliczane będą mapyoczu i ustwłączenie wyświetlania obrazu przedstawiającego efektwykrywania pikseli koloru skóryliczba erozji przeprowadzanych po wykryciu pikseli koloruskóry, przed segmentacjąTabela. 3.18skóry.Struktura SkinDetectionParams przechowująca parametry wykrywania


44 3. Implementacja algorytmu3.4 Aplikacja stworzo<strong>na</strong> w trakcie drugiego etapu implementacjiStworzony został program faceDetect, który miał ralizować dwie podstawowe funkcje:• przetestowanie biblioteki opisanej w poprzedniej sekcji,• równoczesne wykrycie <strong>twarzy</strong> z wykorzystaniem trzech metod: samodzielnie zaimplementowanej,kaskady Haara dostępnej w OpenCV oraz komercyjnego algorytmuPittPatt.Aplikacja działa w trybie wsadowym (batch processing), po jej uruchomieniu nie jestmożliwa interakcja z użytkownikiem. Wszystkie parametry przekazywane są z wierszapoleceń i parsowane z wykorzystaniem funkcji getopt(). Postać wywołania programujest zgod<strong>na</strong> z ogólnie przyjętym schematem:./<strong>na</strong>zwa programu --parametr bez wartości --parametr z wartością wartośćLista wszystkich dostępnych parametrów wraz z ich krótkim opisem wyświetla<strong>na</strong> jest powywołaniu:./faceDetect --helpWiększość parametrów, które przyjmuje program jest po sparsowaniu bezpośrednio przekazywa<strong>na</strong>do zaimplementowanej biblioteki wykrywania <strong>twarzy</strong>. Nazwy ich są zgodne lubbardzo zbliżone do tych przedstawionych w tabelach 3.16, 3.17 i 3.18. Dodatkowe parametrykontrolujące działanie programu przedstawione są w tabeli 3.19, w tabeli 3.20opisane są parametry, za pomocą których kontrolować moż<strong>na</strong> działanie algorytmu wykorzystującegokaskady detektorów Haara [5]. W tabeli 3.21 przedstawione są parametryumożliwiające modyfikację ustawień algorytmu PittPatt.runHaarrunPittPattrunExpefileNamedrawTimesgammaGlobCorrwłączenie algorytmu kaskad Haarawłączenie algorytmu PittPattwłączenie samodzielnie zaimplementowanego algorytmu(domyślne w przypadku podania <strong>na</strong>zwy pliku)<strong>na</strong>zwa pliku z obrazem <strong>na</strong> którym wykryte mają być twarze;w przypadku jego braku podejmowa<strong>na</strong> jest próba pobraniasekwencji wideo z dostępnych w systemie interfejsówkamerwłączenie wyświetlania czasu w ms przetwarzania <strong>na</strong> a<strong>na</strong>lizowanychobrazachwspółczynnik korekcji gamma, której poddawany jest obrazprzed uruchomieniem algorytmu wykrywania <strong>twarzy</strong>Tabela. 3.19 Dodatkowe parametry aplikacji faceDetect pozwalające m.in. <strong>na</strong> kontrolęjej działania.Przykładowe wywołanie programu, uruchamiające go w trybie, w którym <strong>na</strong> <strong>obrazie</strong>pobranym z <strong>kamery</strong> działają wszystkie trzy wykorzystane algorytmy wyszukiwania <strong>twarzy</strong>i wypisują czas przetwarzania <strong>na</strong> wyświetlanym wyniku przedstawia się <strong>na</strong>stępująco:


3.4. Aplikacja stworzo<strong>na</strong> w trakcie drugiego etapu implementacji 45HaarScaleHaarMinNeighHaarMinWidthHaarMinHeightcascadeNamenestedCascadeNamescaleokreśla współczynnik zmiany skali ok<strong>na</strong> dla którego obliczanesą wartości detektorów; musi być większy od 1; imta wartość większa, tym szybszy czas działania algorytmukosztem zwiększenia prawdopodobieństwa ominięcia <strong>twarzy</strong>minimal<strong>na</strong> liczba <strong>twarzy</strong> wykrytych w danym regionie dlajakiej zostanie on zaklasyfikowany jako twarz; duża wartośćzapobiega fałszywym decyzjom pozytywnym, zwiększającrównocześnie prawdopodobieństwo ominięcia <strong>twarzy</strong>minimal<strong>na</strong> szerokość regionu dla którego przeprowadzonebędzie wykrywanie <strong>twarzy</strong>minimal<strong>na</strong> wysokość regionu dla którego przeprowadzonebędzie wykrywanie <strong>twarzy</strong><strong>na</strong>zwa pliku z kaskadami Haara<strong>na</strong>zwa pliku z kaskadami Haara dla specyficznych elementów<strong>twarzy</strong>, np. oczuwspółczynnik skalowania obrazu przed uruchomieniem <strong>na</strong>nim algorytmu HaaraTabela. 3.20 Parametry aplikacji faceDetect pozwalające <strong>na</strong> kontrolę algorytmu wykorzystującegokaskady detektorów Haara../faceDetect --runPittPatt --runExpe --runHaar --drawTimesW takiej konfiguracji programu uruchamiane są 4 wątki: pierwszy pobiera obraz z <strong>kamery</strong>i udostępnia go pozostałym wątkom. Pozostałe trzy wykorzystywane są do wykrywania<strong>twarzy</strong>, każdy z algorytmów uruchomiony jest w osobnym wątku. Ekran aplikacji uruchomionejw takiej konfiguracji przedstawiony jest <strong>na</strong> rysunku 3.3. Widać <strong>na</strong> nim trzyok<strong>na</strong>, w których prezentowany jest rezultat działania poszczególnych algorytmów: lewegórne odpowiada algorytmowi kaskad Haara, środkowe dolne PittPattowi, prawe górne –samodzielnie zaimplementowanemu algorytmowi.3.4.1 Problem opóźnienia przy pobieraniu obrazu z <strong>kamery</strong>Z wcześniejszych prób wykorzystania OpenCV do przetwarzania obrazu pobieranegoz <strong>kamery</strong> podłączonej przez interfejs USB z<strong>na</strong>ny jest problem opóźnienia wyświetlanegoobrazu w stosunku do rzeczywistości. W trakcie tworzenia implementacji problem tenzostał zbadany. Okazało się, że przyczyną jest zbyt duża wielkość bufora, która przekazywa<strong>na</strong>jest jako parametr funkcji inicjalizującej pobieranie obrazu z <strong>kamery</strong> w biblioteceVideo4Linux. Wykorzystywa<strong>na</strong> jest o<strong>na</strong> w bibliotece OpenCV jako tzw. third party isłuży do pobierania sekwencji wideo z <strong>kamery</strong>. Inicjalizacja jej działania w wykorzystywanejwersji OpenCV wykonywa<strong>na</strong> jest w plikuOpenCV-2.2.0/modules/highgui/src/cap v4l.cppStałe określające wielkość wykorzystywanego bufora ustalane są <strong>na</strong>stępująco:#define MAX V4L BUFFERS 10#define DEFAULT V4L BUFFERS 4


46 3. Implementacja algorytmuPPMinSizePPMaxSizePPPrunPPThreadsPpThresholdPPtrackingminimal<strong>na</strong> szerokość i wysokość wyszukiwanych <strong>twarzy</strong>maksymal<strong>na</strong> szerokość i wysokość wyszukiwanych <strong>twarzy</strong>określa stopień optymalizacji wykorzystywanych w przeszukiwaniuobrazu skaliliczba wątków wykorzystywanych przez algorytmwspółczynnik decydujący o strategii algorytmu, mniejszawartość oz<strong>na</strong>cza większą liczbę fałszywych decyzji pozytywnychwłączenie funkcjo<strong>na</strong>lności śledzenia <strong>twarzy</strong>Tabela. 3.21 Parametry aplikacji faceDetect pozwalające <strong>na</strong> kontrolę algorytmu wykorzystującegokaskady detektorów Haara.Zmia<strong>na</strong> tych wielkości <strong>na</strong> 1 i kompilacja modułu highgui biblioteki OpenCV, w składktórego wchodzi funkcjo<strong>na</strong>lność pobierania obrazu z <strong>kamery</strong> rozwiązuje opisywany problem.Rozwiązanie to nie jest dobre, ponieważ uzależnia poprawne działanie aplikacji odspecjalnie przygotowanej wersji biblioteki. Może też ono wprowadzać ograniczenia, któresą trudne do zauważenia przez osobę nie z<strong>na</strong>jącą dokładnie kontekstu w jakim odbywasię pobieranie obrazów z <strong>kamery</strong>.Rozwiązaniem alter<strong>na</strong>tywnym jest stworzenie wątku, którego jedynym zadaniem jestpobieranie obrazów z wykorzystaniem interfejsu programowego udostępnionego przez bibliotekęOpenCV. Wątek ten opróżnia bufor biblioteki Video4Linux i zapamiętuje <strong>na</strong>jbardziejaktualny obraz, przekazując go do wątku w którym działa algorytm wykrywania<strong>twarzy</strong>, kiedy ten skończy działanie <strong>na</strong> poprzedniej klatce. To właśnie rozwiązanie zostałozastosowane w stworzonej aplikacji.


3.4. Aplikacja stworzo<strong>na</strong> w trakcie drugiego etapu implementacji 47Rysunek 3.3 Reprezentacja widoku aplikacji faceDetect z równocześnie działającymitrzema metodami detekcji.


Rozdział 4BadaniaOpisane we wcześniejszym rozdziale programy zostały wykorzystane do zbadania szybkościi jakości działania trzech użytych algorytmów:• kaskad klasyfikatorów Haara zaimplementowanych w OpenCV,• komercyjnego, dostępnego w pakiecie PittPatt,• własnej implementacji algorytmu opierającego detekcję <strong>na</strong> wykrywaniu regionówo kolor skóry.W tym rozdziale zawarte są rezultaty przeprowadzonych eksperymentów, podjęta jestpróba wyjaśnienia niektórych zjawisk występujących <strong>na</strong> skutek zmiany wartości parametrówalgorytmów. Wszystkie zdjęcia wykorzystane w badaniach dostępne są jako częśćdarmowego projektu dotyczącego wykrywania <strong>twarzy</strong> AIKnowU [1].4.1 Pierwsza wersja bibliotekiNakładka graficz<strong>na</strong> opisa<strong>na</strong> w sekcji 3.2, korzystająca z pierwszej wersji stworzonejbiblioteki nie została użyta do przeprowadzenia badań dających rezultaty numeryczne.Spełnia o<strong>na</strong> dwie funkcje:• reprezentacji rezultatów działania poszczególnych etapów algorytmu,• zbadania wpływu zmian poszczególnych parametrów algorytmu <strong>na</strong> jakość wykrywania<strong>twarzy</strong>.Badania dotyczące parametrów korekcji gamma i korekcji oświetlenia nie doprowadziłydo uzyskania satysfakcjonujących rezultatów. Ich wpływ <strong>na</strong> jakość późniejszej detekcjiskóry, oczu i ust jest mocno uzależniony od konkretnego zdjęcia. W większości przypadkówzaimplementowa<strong>na</strong> korekcja pogarszała jakość działania całego algorytmu. Nie udało sięustalić parametrów, które dobrze sprawdzałaby się dla większości zdjęć. W artykule [12]<strong>na</strong> podstawie którego tworzo<strong>na</strong> była implementacja, algorytm korekcji gamma i kolorównie jest jednoz<strong>na</strong>cznie wyjaśniony. Niska skuteczność zawartych w bibliotece metod możewięc wynikać z implementacji nie w pełni zgodnej z orygi<strong>na</strong>łem.W przypadku wykrywania pikseli koloru skóry, zmiany parametrów pogarszały jakośćdziałania, moż<strong>na</strong> więc założyć, że parametry klastrów skóry podane przez Hsu, Abdel-Mottaleba i Jai<strong>na</strong>[12] są dobrze dobrane.


50 4. BadaniaZmiany parametrów wykrywania oczu i ust dawały, podobnie jak w przypadku korekcjikolorów, różne rezultaty. Ich efektywność była silnie uzależnio<strong>na</strong> od obrazu <strong>na</strong> którymprzeprowadzone były badania. Ostatecznie jako funkcja strukturyzująca została wybra<strong>na</strong>pół-elipsoida o wysokości 9 i promieniu 5.4.1.1 Współrzędne elipsy <strong>na</strong> płaszczyźnie C b C rW końcowym etapie wykrywania koloru skóry, nieliniowo przekształcone piksele w przestrzeniY C b C r są rzutowane <strong>na</strong> płaszczyznę C b C r . Następnie sprawdzany jest warunekprzy<strong>na</strong>leżności danego piksela do określonej przez autorów elipsy (tak jak zostało to opisanew sekcji 2.2.1). Zostało potwierdzone, że przesunięcie środka elipsy o (ec x , ec y ) stosowaneprzez autorów artykułu we wzorze 2.11, może zostać zrealizowane we wzorze 2.10.Aby obliczyć nowe wartości (c ′ x, c ′ y) początkowego przesunięcia (c x , c y ) <strong>na</strong>leży rozwiązaćukład rów<strong>na</strong>ń:[ [ ] [ ] [ ] [ ] [x cos θ sin θ C′=b − c x ecx cos θ sin θ C′y]− sin θ cos θ C r ′ + =b − c ′ ]x− c y ec y − sin θ cos θ C r ′ − c ′ . (4.1)yPo jego rozwiązaniu otrzymujemy nowe wartości początkowego przesunięcia:[ ] [ ] [c′x cx cos θ − sin θc ′ = +y c y sin θ cos θ] [ ]ecx=ec y[ ]106.68150.96(4.2)Wartości te zostały sprawdzone i są poprawne. Wyniki przeprowadzonego eksperymentuprzedstawione są <strong>na</strong> rysunku 4.1. Maski skóry uzyskane z wykorzystaniem parametróworygi<strong>na</strong>lnych (rysunek 4.1(a)) i nowych (rysunek 4.1(b)) są takie same. Wyko<strong>na</strong>nie przesunięciaw jednym kroku teoretycznie może pozwolić <strong>na</strong> niewielkie przyśpieszenie działaniaalgorytmu.4.2 Druga wersja bibliotekiBadania dotyczące działania drugiej wersji biblioteki przeprowadzone zostały z wykorzystaniemaplikacji opisanej w sekcji 3.4. Przeprowadzony został przegląd wybranychparametrów algorytmu, pokazany ich wpływ <strong>na</strong> zachowanie się algorytmu. We wszystkicheksperymentach, jeśli wartość parametrów nie jest wprost zdefiniowa<strong>na</strong>, przyjmowane sąwartości domyślne, odpowiednio:• gammaGlobCorr = 0,• lightCorrCoef = 0,• maxSkinAreaRatio = 0,8,• minSkinContourRatio = 0,0001,• extensionRatio = 0,3,• eyesMergeRatio = 0,05,• lipsMergeRatio = 0,05,• eyeMouthDistCoef = 0,3,


4.2. Druga wersja biblioteki 51(a) Rezultat wykrywania koloru skóry dla orygi<strong>na</strong>lnych parametrów: x = 109.37, y = 152.02,e x = 1.6, e y = 2.41(b) Rezultat wykrywania koloru skóry dla nowych parametrów, w którym wyeliminowane jestdodatkowe przesunięcie elipsy: x = 106.68, y = 150.96, e x = 0, e y = 0(c) Obraz referencyjny, obrazujący zmiany w wykrytych obszarach skóry dla niewielkich zmianw położeniu elipsy : x = 109.37, y = 152.02, e x = 1.79, e y = 2.59. Zmiany w wykrytych pikselachwidoczne są w lewym górnym rogu obrazu przedstawiającego maskę skóry. Odpowiada toobszarowi przedstawiającemu ścianę za osobą w białej koszuli <strong>na</strong> zdjęciu orygi<strong>na</strong>lnym.Rysunek 4.1 Fragmenty interfejsu graficznego aplikacji wykorzystującej bibliotekę stworzonąw pierwszej fazie implementacji. Obrazy przedstawiające możliwość wyeliminowaniaprzesunięcia elipsy w końcowej fazie działania algorytmu wykrywania skóry. Parametryelipsy niewymienione w podpisach poszczególnych obrazów są jed<strong>na</strong>kowe: a = 25.389,b = 14.029, θ = 2.529.


52 4. Badania• eyeEyeDistCoef = 0,4,• firstErosion = 3,• maxLipsNormalDistRatio = 0,05,• eyesLumMapGammaCorr = 0,• eyesColMapGammaCorr = 0,• eyesMaskErodeRatio = 3,• eyesLipsMaskCoef = -2,• eyesCutoff = 30,Jak zostało wspomniane wcześniej, nie udało się określić optymalnych parametrów korekcjigamma i oświetlenia, dlatego parametry odpowiadające tym operacjom mają wartość 0.4.2.1 Parametr gammaGlobCorrParametr gammaGlobCorr określa współczynnik korekcji gamma przeprowadzanej <strong>na</strong><strong>obrazie</strong> przed rozpoczęciem dalszego działania algorytmu.(a) Wykryte obszary skóry.(b) Wynik wykrywania.Rysunek 4.2 Wykryte obszary skóry i twarze dla gammaGlobCorr = 0.0.Na rysunkach 4.2 – 4.5 przedstawione są obszary wykrytej skóry oraz końcowe rezultatydziałania algorytmu dla czterech różnych wartości gammaGlobCorr. Moż<strong>na</strong> zaobserwowaćtendencje zmniejszania się obszarów zaklasyfikowanych jako piksele skóry wrazze wzrostem gammaGlobCorr. Widać również duży wpływ wartości tego parametru <strong>na</strong>skuteczność wykrywania <strong>twarzy</strong>. Niestety ciężko zaobserwować jakąś prawidłowość. Zauważalnejest jedynie, że powyżej pewnej wartości, bardzo mało obszarów skóry zostajepoprawnie zaklasyfikowane co ciągnie za sobą brak wykrytych <strong>twarzy</strong>.4.2.2 Parametr lightCorrCoefParametr lightCorrCoef określa współczynnik korekcji oświetlenia przeprowadzanejpo korekcji gamma.Na rysunkach 4.6 – 4.8 przedstawione są obszary wykrytej skóry oraz końcowe rezultatydziałania algorytmu dla trzech różnych wartości lightCorrCoef. Warto rozważyć


4.2. Druga wersja biblioteki 53(a) Wykryte obszary skóry.(b) Wynik wykrywania.Rysunek 4.3 Wykryte obszary skóry i twarze dla gammaGlobCorr = 0.2.(a) Wykryte obszary skóry.(b) Wynik wykrywania.Rysunek 4.4 Wykryte obszary skóry i twarze dla gammaGlobCorr = 0.4.(a) Wykryte obszary skóry.(b) Wynik wykrywania.Rysunek 4.5 Wykryte obszary skóry i twarze dla gammaGlobCorr = 0.6.


54 4. Badania(a) Wykryte obszary skóry.(b) Wynik wykrywania.Rysunek 4.6 Wykryte obszary skóry i twarze dla lightCorrCoef = 0.1.(a) Wykryte obszary skóry.(b) Wynik wykrywania.Rysunek 4.7 Wykryte obszary skóry i twarze dla lightCorrCoef = 0.2.(a) Wykryte obszary skóry.(b) Wynik wykrywania.Rysunek 4.8 Wykryte obszary skóry i twarze dla lightCorrCoef = 0.3.


4.2. Druga wersja biblioteki 55je z uwzględnieniem obrazu 4.2, <strong>na</strong> którym korekcja oświetlenia jest wyłączo<strong>na</strong>. Niestetykorekcja kolorów nie przynosi spodziewanych rezultatów i obniża skuteczność działaniaalgorytmu.4.2.3 Parametr maxSkinAreaRatioParametr maxSkinAreaRatio określa maksymalny rozmiar obszaru skóry, który jest<strong>na</strong>stępnie a<strong>na</strong>lizowany, względem rozmiaru całego obrazu (zgodne ze wzorem 2.20). Zachowaniesię algorytmu dla domyślnej wartości maxSkinAreaRatio = 0,8 oraz dla wartości0,3 przedstawione jest <strong>na</strong> rysunku 4.9. Widać, że dla małej wartości parametru, przetwarza<strong>na</strong>jest mniejsza liczba obszarów skóry. Regiony te oz<strong>na</strong>czone kolorem niebieskim, lubczerwonym, jeśli obszar został w późniejszej fazie zaklasyfikowany jako twarz. Omawianyparametr służy do wykluczania z a<strong>na</strong>lizy dużych powierzchni o kolorze skóry z<strong>na</strong>jdującychsię w tle, takich jak np. ściany.(a) maxSkinAreaRatio = 0,3 (b) maxSkinAreaRatio = 0,8Rysunek 4.9Wpływ parametru maxSkinAreaRatio <strong>na</strong> wielkość regionów skóry.4.2.4 Parametr minSkinContourRatioParametr minSkinContourRatio określa minimalny rozmiar obszaru skóry, który jest<strong>na</strong>stępnie a<strong>na</strong>lizowany, względem rozmiaru całego obrazu (zgodnie ze wzorem 2.21). Zachowaniesię algorytmu dla domyślnej wartości minSkinContourRatio = 0,0001 oraz dlawartości 0,0 przedstawione jest <strong>na</strong> rysunku 4.10. Widać, że dla małej wartości parametru,liczba obszarów skóry jest zdecydowanie większa. Omawiany parametr służy do wykluczaniamałych regionów, których dalsza a<strong>na</strong>liza jest niepożąda<strong>na</strong>.4.2.5 Parametr firstErosionParametr ten określa liczbę iteracji erozji przeprowadzanej przed wydzieleniem konturów,<strong>na</strong> podstawie których określane są obszary skóry. Jego celem jest usunięcie z maski<strong>twarzy</strong> regionów brzegowych, które wprowadzają wiele nieprawidłowości w tworzonychmapach oczu, jak jest to przedstawione <strong>na</strong> rysunkach 4.11 i 4.12.4.2.6 Parametr extensionRatioParametr extensionRatio współczynnik rozszerzenia prostokąta opisanego <strong>na</strong> z<strong>na</strong>lezionymobszarze skóry, który jest <strong>na</strong>stępnie a<strong>na</strong>lizowany. Zachowanie się algorytmu dla


56 4. Badania(a) minSkinContourRatio = 0,0 (b) minSkinContourRatio = 0,0001Rysunek 4.10Wpływ parametru minSkinContourRatio <strong>na</strong> wielkość regionów skóry.wartości extensionRatio = -0,1 (zwężenie obszaru) oraz dla wartości 0,8 przedstawionejest <strong>na</strong> rysunku 4.13. Zadaniem tego parametru jest zniwelowanie wpływu parametrufirstErosion, aby po przeprowadzonej erozji, prostokąt definiujący region skóry obejmowałcałą twarz.4.2.7 Parametry eyesMergeRatio i lipsMergeRatioParametr eyesMergeRatio określa odległość, liczoną względem rozmiaru <strong>twarzy</strong>, dlajakiej pary oczu są łączone w jedno oko. A<strong>na</strong>logicznie, parametr lipsMergeRatio określawspółczynnik łączenia dla ust. Dwa przykładowe obrazy, <strong>na</strong> których widoczne są z<strong>na</strong>lezioneoczy i usta dla różnych wartości tych parametrów przedstawione są <strong>na</strong> rysunku4.14. Współczynniki te zostały wprowadzone, aby wyeliminować niekorzystne zjawisko,polegające <strong>na</strong> wykrywaniu pojedynczego oka czy ust jako dwóch obiektów. Zjawisko tospowodowane jest sposobem, w jaki oczy i usta są wyszukiwane. Polega on <strong>na</strong> progowaniuodpowiednich map, co w sytuacji, kiedy dany element nie jest <strong>na</strong> mapie równomierniewyeksponowany, prowadzi do oz<strong>na</strong>czenia go jako dwóch niezależnych obiektów. Małe wartościparametrów nie umożliwiają skutecznego wyeliminowania wyżej opisanego efektu,zbyt duże wartości powodują niepożądane łączenie obiektów reprezentujących osobne elementy<strong>twarzy</strong>.4.2.8 Parametry eyeMouthDistCoef i eyeEyeDistCoefParametry te wykorzystywane są do określenia dopuszczalnych przedziałów odległościpomiędzy oczyma i ustami, tak jak zostało to opisane w sekcji 2.5.4. Zmiennej c ee odpowiadaparametr eyeEyeDistCoef, zmiennej c em odpowiada parametr eyeMouthDistCoef.Na rysunku 4.15 zaprezentowany jest korzystny wpływ domyślnych wartości omawianychparametrów <strong>na</strong> klasyfikację a<strong>na</strong>lizowanych regionów jako <strong>twarzy</strong>. Zwiększenia tych parametrówsprawia, że algorytm staje się bardziej liberalny – przypadkowe obiekty mogą byćklasyfikowane jako twarz.4.2.9 Parametr maxLipsNormalDistRatioParametr określa maksymalną odległość ust od normalnej do prostej przechodzącejprzez oczy, tak jak jest to opisane w sekcji 2.5.4. Wyniki eksperymentów dla dwóch różnychwartości tego parametru przedstawione są <strong>na</strong> rysunku 4.16. Widać, że zwiększenie wartości


4.2. Druga wersja biblioteki 57(a) Zdjęcie z zaz<strong>na</strong>czonymi obszarami skóry.(b) Mapa oczu. (c) Mapa oczu. (d) Mapa oczu.Rysunek 4.11 Wykryte obszary skóry i mapy oczu dla firstErosion = −7.


58 4. Badania(a) Zdjęcie z zaz<strong>na</strong>czonymi obszarami skóry.(b) Mapa oczu. (c) Mapa oczu. (d) Mapa oczu.(e) Mapa oczu.Rysunek 4.12 Wykryte obszary skóry i mapy oczu dla firstErosion = 7.


4.2. Druga wersja biblioteki 59(a) extensionRatio = -0,1 (b) extensionRatio = 0,8Rysunek 4.13Wpływ parametru extensionRatio <strong>na</strong> wielkość regionów skóry.(a) eyesMergeRatio = 0,08,lipsMergeRatio = 0,0(b) eyesMergeRatio = 0,2,lipsMergeRatio = 0,2Rysunek 4.14i usta.Wpływ parametrów eyesMergeRatio i lipsMergeRatio <strong>na</strong> wykryte oczy(a) eyeMouthDistCoef = 1,eyeEyeDistCoef = 1(b) Domyślne wartości: eyeMouthDistCoef= 0,3, eyeEyeDistCoef = 0,4Rysunek 4.15 Wpływ parametrów eyeMouthDistCoef i eyeEyeDistCoef <strong>na</strong> ostatecznądecyzję, czy a<strong>na</strong>lizowany obszar przedstawia twarz.


60 4. Badaniaparametru, doprowadziło do zaklasyfikowania dodatkowych <strong>twarzy</strong>. Oczywiście w innychprzypadkach może to prowadzić to klasyfikacji niepożądanych obiektów.(a) maxLipsNormalDistRatio = 0,1 (b) maxLipsNormalDistRatio = 0,01Rysunek 4.16 Wpływ parametru maxLipsNormalDistRatio <strong>na</strong> klasyfikację a<strong>na</strong>lizowanychobszarów skóry jako <strong>twarzy</strong>.4.2.10 Parametry eyesLumMapGammaCorr i eyesColMapGammaCorrParametry te określają współczynniki korekcji gamma obszarów obrazu przed przystąpieniemdo przekształcenia ich w mapy oczu, tworzonych <strong>na</strong> podstawie lumi<strong>na</strong>ncji. Ichwpływ <strong>na</strong> zachowanie się algorytmu jest niezauważalny.4.2.11 Parametr eyesMaskErodeRatioUstawienie to pozwala <strong>na</strong> ograniczenie obszaru dla którego oblicza<strong>na</strong> jest mapa oczu.Ma <strong>na</strong> celu wyeliminowanie niekorzystnego efektu – dużych wartości mapy <strong>na</strong> granicachobszaru <strong>twarzy</strong>. Zbyt duże wartości mogą spowodować, że obszary rzeczywiście zawierająceoczy również zostaną pominięte. Obraz uzyskany dla dużej wartości eyesMaskErodeRatioprzedstawiony jest <strong>na</strong> rysunku 4.17.4.2.12 Parametr eyesLipsMaskCoefParametr określa współczynnik z jakim odejmowa<strong>na</strong> jest mapa ust od tworzonej mapyoczu, zgodnie ze wzorem 2.22. Przykładowe obrazy dla dwóch różnych wartości parametruprzedstawione są <strong>na</strong> rysunkach 4.19 i 4.18. Widać, że odejmowanie mapy ust niezawsze daje pozytywny efekt, niekiedy niepotrzebnie zmniejszane są wartości tworzonejmapy w obszarach rzeczywiście przedstawiających oczy. Dodatkowo, duże wartości mapyoczu w okolicach ust nie pokrywają się z dużymi wartościami mapy ust, co nie pozwalawyeliminować tych obszarów.4.2.13 Parametr eyesCutoffUstawienie to odpowiada długości przedziału jasności, który wykorzystywany jest dowyselekcjonowania pikseli, które <strong>na</strong>stępnie grupowane są w oczy i usta. Gór<strong>na</strong> granicatego przedziału ustala<strong>na</strong> jest dy<strong>na</strong>micznie – jest to <strong>na</strong>jwiększa jasność występująca <strong>na</strong>mapie oczu/ust, pod warunkiem, że co <strong>na</strong>jmniej dwa piksele <strong>na</strong> tej mapie mają tę jasność.Dol<strong>na</strong> granica przedziału oblicza<strong>na</strong> jest jako różnica górnej granicy i wartości parametrueyesCutoff (zgodnie ze wzorem 2.23). Wpływ omawianego parametru <strong>na</strong> detekcję oczu


4.2. Druga wersja biblioteki 61(a) Zdjęcie z zaz<strong>na</strong>czonymi obszarami skóry.(b) Mapa oczu. (c) Mapa oczu. (d) Mapa oczu.Rysunek 4.17 Wykryte obszary skóry i mapy oczu dla eyesMaskErodeRatio = 10.


62 4. Badania(a) Zdjęcie z zaz<strong>na</strong>czonymi obszarami skóry.(b) Mapa oczu. (c) Mapa oczu. (d) Mapa oczu.Rysunek 4.18 Wykryte obszary skóry i mapy oczu dla eyesLipsMaskCoef = −10.


4.2. Druga wersja biblioteki 63(a) Zdjęcie z zaz<strong>na</strong>czonymi obszarami skóry.(b) Mapa oczu. (c) Mapa oczu. (d) Mapa oczu.Rysunek 4.19 Wykryte obszary skóry i mapy oczu dla eyesLipsMaskCoef = 0.


64 4. Badaniai ust przedstawiony jest <strong>na</strong> rysunku 4.20. Duża wartość powoduje zwiększenie liczby wykrytychoczu, co spowodowane jest dużą jasnością mapy oczu w rozmaitych miejscachobszaru <strong>twarzy</strong>.(a) eyesCutoff = 1 (b) eyesCutoff = 70Rysunek 4.20Wpływ parametru eyesCutoff wykryte oczy i usta.4.2.14 Podsumowanie badań dotyczących samodzielnie zaimplementowanegoalgorytmuW tej części pracy został przedstawiony wpływ poszczególnych parametrów <strong>na</strong> działaniealgorytmu. Niestety dla większości parametrów trudno jest jednoz<strong>na</strong>cznie określićwpływ, jaki <strong>na</strong> jakość detekcji ma zmia<strong>na</strong> poszczególnych ustawień. Najwięcej kłopotówwynika z faktu, że detekcja elementów <strong>twarzy</strong> i jej fi<strong>na</strong>l<strong>na</strong> klasyfikacja opierają się <strong>na</strong>informacji niesionej przez kolor. Niestety charakterystyka kolorów <strong>na</strong> poszczególnych obrazachmocno różni się, <strong>na</strong> co wpływ mają specyfika osób występujących <strong>na</strong> zdjęciach,warunki oświetlenia i urządzenie, które zostało użyte do pobrania obrazów.4.3 Algorytm oparty <strong>na</strong> kaskadach klasyfikatorów HaaraEksperymenty dotyczącego algorytmu, którego działania oparte jest <strong>na</strong> kaskadach klasyfikatorówHaara przeprowadzone zostały z wykorzystaniem aplikacji faceDetect opisanejw sekcji 3.4. Badania objęły 4 parametry numeryczne, których modyfikacja możliwajest poprzez interfejs programowy OpenCV (podane <strong>na</strong>zwy odpowiadają <strong>na</strong>zwom parametrówprzekazywanych do aplikacji faceDetect):• HaarScale – współczynnik skalowania klasyfikatorów, domyślnie 1.1,• HaarMinNeigh – minimal<strong>na</strong> liczba kaskad, które w danym otoczeniu dadzą decyzjępozytywną, wymaga<strong>na</strong> do zaklasyfikowania obszaru jako <strong>twarzy</strong>, domyślnie 3,• HaarMinWidth i HaarMinHeight – minimal<strong>na</strong> wielkość <strong>twarzy</strong>, domyślnie 30 × 30,• scale – współczynnik skalowania obrazu przed uruchomieniem algorytmu, domyślnie1.Dodatkowo sprawdzo<strong>na</strong> została poprawa szybkości obliczeń związa<strong>na</strong> z wykorzystaniembiblioteki do programowania z wykorzystaniem wielu rdzeni (Threading Building Block


4.3. Algorytm oparty <strong>na</strong> kaskadach klasyfikatorów Haara 65firmy Intel). Wszystkie eksperymenty przeprowadzone zostały z wykorzystaniem kaskadyzapisanej w pliku haarcascade frontalface alt.xml, dostarczanym wraz z bibliotekąOpenCV. Zawiera o<strong>na</strong> kaskady klasyfikatorów przez<strong>na</strong>czonych do rozpoz<strong>na</strong>wania frontalnych<strong>twarzy</strong>. Nie zostały wykorzystane kaskady pomocnicze, które mogą służyć np.do detekcji oczu <strong>na</strong> obszarach wykrytych <strong>twarzy</strong>. Wszystkie parametry, których wartościnie są wprost podane w opisie eksperymentu przyjmują wartości domyślne. Pierwsze 4eksperymenty były przeprowadzane z wykorzystaniem biblioteki TBB.Z<strong>na</strong>czenia symboli występujących w tabelach z wynikami są <strong>na</strong>stępujące:• F pos (false positive) – liczba obszarów <strong>na</strong> <strong>obrazie</strong> które zostały niepoprawnie zaklasyfikowanejako twarz• F neg (false negative) – liczba <strong>twarzy</strong> które nie zostały wykryte• ¯t – średni czas wykrywania <strong>twarzy</strong>• σ t – odchylenie standardowe czasu wykrywania <strong>twarzy</strong>• t max – maksymalny spośród czasów wykrywania <strong>twarzy</strong>• t min – minimalny spośród czasów wykrywania <strong>twarzy</strong>Wartości średnie, odchylenia standardowe, wartości minimalne i maksymalne czasuuzyskane zostały <strong>na</strong> podstawie wyników z serii 10 uruchomień aplikacji faceDetect. Sposóbautomatyzacji eksperymentów opisany jest w dodatku D.4.3.1 Parametr HaarScaleZgodnie z [5], parametr HaarScale odpowiada współczynnikowi skalowania klasyfikatoróww kolejnych iteracjach algorytmu. Im jest on większy, tym większa jest różnicapomiędzy wielkością klasyfikatorów w poszczególnych krokach. Pozwala to <strong>na</strong> przyśpieszenieobliczeń, zwiększając jed<strong>na</strong>k ryzyko pominięcia <strong>twarzy</strong>.Parametr HaarScale jest przekazywany funkcji cvHaarDetectObjects, jako argumento <strong>na</strong>zwie scale factor. Funkcja cvHaarDetectObjects wykorzystywa<strong>na</strong> jest w biblioteceOpenCV do wyszukiwania obiektów z wykorzystaniem kaskad Haara. Domyśl<strong>na</strong> wartośćjaką przyjmuje to 1.1.Wyniki eksperymentów przeprowadzonych <strong>na</strong> dwóch obrazach, polegających <strong>na</strong> obliczeniuparametrów oceniających szybkość i skuteczność detekcji dla 3 różnych wartościHaarScale przedstawione są w tabeli 4.1. Wyniki eksperymentów zgadzają się z oczekiwaniami.Łatwo zauważyć, że domyśl<strong>na</strong> wartość tego parametru daje <strong>na</strong>jlepsze rezultaty –stosunkowo szybki czas detekcji i mała liczba fałszywych decyzji negatywnych. Zmniejszaniewartości parametru nie wydaje się być sensowne – z<strong>na</strong>cznie wydłuża to czas obliczeń,wprowadzając przy tym dużo błędnie wykrytych <strong>twarzy</strong>. Zwiększanie wartości parametruskraca czas detekcji, <strong>na</strong>leży się jed<strong>na</strong>k liczyć z możliwością niewykrycia niektórychobiektów.4.3.2 Parametr HaarMinNeighZgodnie z [5], parametr HaarMinNeigh to minimal<strong>na</strong> liczba decyzji pozytywnych, którezostaną podjęte przez kaskadę dla danego obszaru, zanim zostanie on zaklasyfikowanyjako twarz. Decyzji tych może być wiele, ponieważ detekcja przeprowadza<strong>na</strong> jest dla


66 4. BadaniaHaarScale = 1.01 HaarScale = 1.1 HaarScale = 1.6F pos = 6 F pos = 1 F pos = 0F neg = 0 F neg = 0 F neg = 11¯t = 6792 ¯t = 644.926 ¯t = 164.12σ t = 63.723 σ t = 9.06808 σ t = 3.99545t min = 6687.23 t min = 628.768 t min = 156.404t max = 6909.27 t max = 658.562 t max = 173.22F pos = 12 F pos = 1 F pos = 0F neg = 0 F neg = 0 F neg = 1¯t = 4741.07 ¯t = 462.757 ¯t = 123.305σ t = 49.9031 σ t = 3.9812 σ t = 4.18668t min = 4700.44 t min = 456.686 t min = 119.426t max = 4862.59 t max = 469.049 t max = 131.63Tabela. 4.1 Rezultaty eksperymentów dotyczących parametru HaarScale.


4.3. Algorytm oparty <strong>na</strong> kaskadach klasyfikatorów Haara 67HaarMinNeigh = 1 HaarMinNeigh = 3 HaarMinNeigh = 6F pos = 3 F pos = 1 F pos = 0F neg = 0 F neg = 0 F neg = 0¯t = 647.579 ¯t = 656.166 ¯t = 656.823σ t = 9.80321 σ t = 8.89946 σ t = 16.6162t min = 627.873 t min = 641.221 t min = 635.324t max = 665.939 t max = 671.507 t max = 691.228F pos = 3 F pos = 1 F pos = 0F neg = 0 F neg = 0 F neg = 0¯t = 473.838 ¯t = 471.072 ¯t = 471.42σ t = 26.3159 σ t = 8.6952 σ t = 12.6531t min = 458.728 t min = 461.64 t min = 460.41t max = 550.969 t max = 491.195 t max = 506.156Tabela. 4.2 Rezultaty eksperymentów dotyczących parametru HaarMinNeigh.


68 4. Badaniaróżnych skal klasyfikatora, przesuwaniem detektora o dany krok. Zdarza się więc, że pojedynczatwarz wykrywa<strong>na</strong> jest dla różnych współrzędnych położenia klasyfikatora, któryjest przemieszczany po całym <strong>obrazie</strong>. Parametrowi HaarMinNeigh odpowiada argumentmin neighbors funkcji cvHaarDetectObjects, jego domyśl<strong>na</strong> wartość to 3. Zwiększaniejego wartości powoduje zmniejszenie prawdopodobieństwa fałszywego podjęcia decyzjinegatywnej, zwiększając tym samym ryzyko niewykrycia <strong>twarzy</strong>. Wyniki badań przeprowadzonychdla różnych wartości HaarMinNeigh przedstawione są w tabeli 4.2.Na podstawie uzyskanych rezultatów moż<strong>na</strong> wyciągnąć wniosek, że zmia<strong>na</strong> tego parametrunie wpływa <strong>na</strong> czas działania algorytmu. Dla wykorzystanych zdjęć, bardziejkorzystne okazało się przypisanie HaarMinNeigh wartości 6 – wyeliminowało to całkowiciedecyzje negatywne, nie zwiększając czasu działania algorytmu. Oczywiście przedwyciągnięciem wniosku, że tendencja ta zostanie zachowa<strong>na</strong> w ogólnym przypadku <strong>na</strong>leżałobyprzeprowadzić bardziej szczegółowe badania z wykorzystaniem większej liczbypróbek.4.3.3 Parametr scaleParametr scale wykorzystywany jest do wstępnego skalowa<strong>na</strong> obrazu przed przekazaniemgo do funkcji cvHaarDetectObjects, zgodnie z zależnością:W ′ =WscaleH ′ =H(4.3)scale ,gdzie rozmiar orygi<strong>na</strong>lnego obrazu to (W, H), rozmiar po zmianę rozmiaru to (W ′ , H ′ ).Im parametr scale jest większy, tym mniejszy jest obraz <strong>na</strong> którym działanie przeprowadzaalgorytm. Powinno to więc doprowadzić do przyśpieszenia działania algorytmu,może jed<strong>na</strong>k niekorzystnie odbić się <strong>na</strong> jakości wykrywania <strong>twarzy</strong>. Wartość mniejszaod 1 powoduje powiększenie obrazu, co może pomóc w z<strong>na</strong>lezieniu małych <strong>twarzy</strong>, jed<strong>na</strong>kwydłuża czas obliczeń. Bardziej skuteczną metodą wykrywania małych <strong>twarzy</strong> jestzmniejszenie parametrów HaarMinWidth i HaarMinHeigt.Rezultaty przeprowadzonych eksperymentów przedstawione są w tabeli 4.3. Uzyskaneczasy zgadzają się z oczekiwaniami. Efekt zmiany rozmiaru obrazu, z punktu widzeniajakości wykrywania, jest niekorzystny. Co prawda, dla skali 1, 5 <strong>na</strong> drugim z testowanychobrazów udało się wyeliminować fałszywą decyzję pozytywną i skrócić czas działania,jed<strong>na</strong>k ta sama skala dla pierwszego z obrazów wprowadziła bardzo niekorzystne efekty.4.3.4 Parametry HaarMinWidth i HaarMinHeightParametry HaarMinWidth i HaarMinHeight przekazywane są do funkcji bibliotekiOpenCV cvHaarDetectObjects jako argument min size. Domyślnie przyjmują wartość30. Określają one minimalny rozmiar <strong>twarzy</strong>, która może być wykryta. Duże wartościzmniejszają czas działania algorytmu, jednocześnie uniemożliwiając detekcję małych <strong>twarzy</strong>.Wyniki przeprowadzonych eksperymentów przedstawione są w tabeli 4.4. Ponownie,domyśl<strong>na</strong> wartość przyjęta przez twórców implementacji zdaje się sprawdzać <strong>na</strong>jlepiej.4.3.5 Wykorzystanie biblioteki TBBBiblioteka TBB (Threading Building Block) firmy Intel pozwala <strong>na</strong> łatwe tworzeniewielowątkowych aplikacji, które wykonywane będą <strong>na</strong> wielu rdzeniach procesora [18]. Po-


4.3. Algorytm oparty <strong>na</strong> kaskadach klasyfikatorów Haara 69scale = 0.7 scale = 1.2 scale = 1.5F pos = 1 F pos = 3 F pos = 0F neg = 0 F neg = 0 F neg = 13¯t = 1406.56 ¯t = 447.669 ¯t = 273.956σ t = 38.8748 σ t = 9.56235 σ t = 7.93506t min = 1365.08 t min = 436.478 t min = 262.921t max = 1510.97 t max = 464.403 t max = 287.691F pos = 0 F pos = 2 F pos = 0F neg = 0 F neg = 0 F neg = 0¯t = 988.066 ¯t = 329.937 ¯t = 211.763σ t = 20.4389 σ t = 7.20512 σ t = 4.86657t min = 963.481 t min = 322.604 t min = 206.673t max = 1043.78 t max = 348.566 t max = 222.844Tabela. 4.3 Rezultaty eksperymentów dotyczących parametru scale.


70 4. BadaniaHaarMinWidth = 5 HaarMinWidth = 50 HaarMinWidth = 100HaarMinHeight = 5 HaarMinHeight = 50 HaarMinHeight = 100F pos = 1 F pos = 0 F pos = 0F neg = 0 F neg = 10 F neg = 17¯t = 1083.45 ¯t = 353.336 ¯t = 90.5248σ t = 25.5725 σ t = 16.5163 σ t = 2.37436t min = 1047.37 t min = 337.296 t min = 86.3931t max = 1118.75 t max = 397.382 t max = 94.5418F pos = 1 F pos = 1 F pos = 0F neg = 0 F neg = 0 F neg = 0¯t = 786.953 ¯t = 266.835 ¯t = 72.3138σ t = 11.9191 σ t = 8.95271 σ t = 5.60828t min = 769.974 t min = 254.315 t min = 66.4346t max = 806.505 t max = 285.737 t max = 86.5688Tabela. 4.4 Wyniki eksperymentów dotyczących parametrów HaarMinWidth iHaarMinHeight.


4.3. Algorytm oparty <strong>na</strong> kaskadach klasyfikatorów Haara 71zwala to <strong>na</strong> przyśpieszenie działania programów, zwłaszcza jeśli w danej chwili system niejest obciążony innymi zadaniami.Biblioteka OpenCV oferuje możliwość kompilacji z wykorzystaniem TBB. W tymcelu, w katalogu w którym zbudowane ma być OpenCV, <strong>na</strong>leży wydać polecenie:cmake ścieżka do źródeł OpenCV -DWITH TBB=TRUEPrzed tym wywołaniem warto pamiętać o usunięci pliku CMakeCache.txt, jeśli bibliotekabyła budowa<strong>na</strong> wcześniej z innymi opcjami. Plik ten zawiera informacje dotyczącepoprzednich operacji budowania biblioteki, jego celem jest przyśpieszenie działaniacmake’a. Powyższe wywołanie sprawdzi czy <strong>na</strong>sz system zawiera wszystkie niezbędnekomponenty i przygotuje odpowiedni plik Makefile. Proces budowania rozpoczy<strong>na</strong> sięwywołaniem:makeInstalacja biblioteki w systemie wywoływa<strong>na</strong> jest za pomocą:make installWyniki eksperymentów mających <strong>na</strong> celu zbadanie czasu działania algorytmu kaskadklasyfikatorów Haara w przypadku wykorzystania biblioteki TBB i bez niej, przedstawionesą w tabeli 4.5. Badania przeprowadzone zostały <strong>na</strong> dwurdzeniowym procesorze IntelCentrino Duo. Widać, że korzystanie z biblioteki TBB przyśpiesza działanie algorytmuśrednio około 1, 6 raza. Teoretycznie możliwe byłoby dwukrotne przyśpieszenie działania.Prawdopodobne przyczyny tego, że przyśpieszenie jest mniejsze są <strong>na</strong>stępujące:• nie wszystkie operacje w algorytmie są zaimplementowane z wykorzystaniem interfejsuprogramowego T BB umożliwiającego równoczesną pracę <strong>na</strong> wielu rdzeniach,• obciążenie rdzeni przez inne zadania systemu może powodować dodatkowe opóźnieniawymuszone synchronizacją pracy algorytmu <strong>na</strong> obu rdzeniach.Osiągnięte przyśpieszenie jest jed<strong>na</strong>k warte odnotowania. W systemach opartych <strong>na</strong> wielordzeniowychprocesorach Intel, których głównym zadaniem ma być wykrywanie <strong>twarzy</strong>,czy inne operacje związane z przetwarzaniem obrazu, <strong>na</strong> pewno warto stosować wersjęOpenCV skompilowaną ze wsparciem dla TBB.4.3.6 Wnioski z przeprowadzonych badańJak moż<strong>na</strong> było się spodziewać, domyślne wartości badanych parametrów przyjęteprzez twórców implementacji algorytmu kaskad klasyfikatorów Haara w OpenCV sprawdzająsię bardzo dobrze. Moż<strong>na</strong> sobie wyobrazić zastosowania, w których dostęp<strong>na</strong> byłabywiedza dotycząca dostarczanych do systemu obrazów, która pozwoliłaby <strong>na</strong> dostrojeniewartości parametrów.Przykładem może być wideofon w budynku – wiadomo, że osoba dzwoniąca musistać blisko niego. Chcąc przeprowadzić detekcje <strong>twarzy</strong>, aby później doko<strong>na</strong>ć próby jejidentyfikacji, moż<strong>na</strong> zwiększyć parametry HaarMinWidth i HaarMinHeight.W robocie społecznym moż<strong>na</strong>by spróbować wprowadzić rozwiązanie, które dy<strong>na</strong>miczniezmieniałoby parametr HaarScale w zależności od obciążenia systemu. Po wykryciuczłowieka parametr ten mógłby być zwiększany, aby odciążyć procesor <strong>na</strong> rzecz innychzdań. W przypadku utraty współrzędnych <strong>twarzy</strong> wskutek zbyt zgrubnego skanowania,


72 4. BadaniaTBB Włączone¯t on = 417.095 ¯t on = 400.631 ¯t on = 454.766σ ton = 3.23081 σ ton = 6.44967 σ ton = 7.22843t minon = 412.846 t minon = 392.805 t minon = 443.009t maxon = 422.171 t maxon = 409.589 t maxon = 467.933TBB Wyłączone¯t off = 681.505 ¯t off = 665.745 ¯t off = 742.865σ toff = 1.88602 σ toff = 2.54236 σ toff = 5.3001t minoff = 678.624 t minoff = 662.929 t minoff = 738.615t maxoff = 685.703 t maxoff = 670.534 t maxoff = 758.132¯t off¯t on= 1.63¯t off¯t on= 1.66¯t off¯t on= 1.63Tabela. 4.5 Wyniki porów<strong>na</strong>nia efektywności działania algorytmu kaskad klasyfikatorówHaara zaimplementowanego w OpenCV z wykorzystaniem TBB i bez niego.


4.4. PittPatt 73parametr ten mógłby być przywracany do domyślnego poziomu. Parametr HaarMinNeighmógłby być dy<strong>na</strong>micznie modyfikowany w celu wykrycia <strong>na</strong> <strong>obrazie</strong> <strong>na</strong>jbardziej ewidentnej<strong>twarzy</strong>. W przypadku robota społecznego pozwoliłoby to <strong>na</strong> ustalenie kierunku, w którympowinien zwracać się robot. W celu sprawdzenia praktycznych możliwości realizacji zaproponowanychrozwiązań, konieczne byłoby jed<strong>na</strong>k przeprowadzenie dodatkowych badań.4.4 PittPattAutorzy pakietu PittPatt używają pojęcia kontekst do opisu konfiguracji algorytmu.Kontekst jest strukturą, zawierającą dostępne dla użytkownika parametry algorytmu,m.in:• Minimum Size – określa minimalny rozmiar wyszukiwanych <strong>twarzy</strong>, domyśl<strong>na</strong> wartośćto 4,• Maximum Size – określa minimalny rozmiar wyszukiwanych <strong>twarzy</strong>, domyśl<strong>na</strong> wartośćto 15,• Adaptive Minimum Size – minimalny rozmiar wyszukiwanych <strong>twarzy</strong> względem rozmiarucałego obrazu, domyśl<strong>na</strong> wartość to 0, 0,• Adaptive Minimum Size – maksymalny rozmiar wyszukiwanych <strong>twarzy</strong> względemrozmiaru całego obrazu, domyśl<strong>na</strong> wartość to 1, 0,• Search Prunning – umożliwia kontrolę skalowania detektora, przyjmuje wartości zezbioru 0, 1, 2, 3, 4, 5; wartość 0 oz<strong>na</strong>cza całkowite wyłączenie optymalizacji skalowania,wartość 1 pozwala <strong>na</strong> ograniczenie dokładnych detektorów, dla wartości 2-5algorytm szuka <strong>na</strong>jpierw <strong>na</strong>jwiększej <strong>twarzy</strong> <strong>na</strong> <strong>obrazie</strong>, <strong>na</strong>stępnie przeszukuje obrazpod kątem <strong>twarzy</strong> trochę mniejszych od tej z<strong>na</strong>lezionej; domyśl<strong>na</strong> wartość to5,• Detection Threshold – współczynnik określający charakterystykę algorytmu, przyjmujewartości z zakresu [−1, 1]; mniejsza wartość oz<strong>na</strong>cza większą ilość fałszywychdecyzji pozytywnych przy jednoczesnym zmniejszeniu liczby niewykrytych <strong>twarzy</strong>,wraz ze wzrostem tej wartości proporcje się odwracają; domyśl<strong>na</strong> wartość to 0, 0,• Image Search Region – pozwala <strong>na</strong> zdefiniowanie obszaru, który będzie przeszukiwany,• Detection Threads – liczba wątków, w których uruchamiany jest algorytm.Nie zostały przeprowadzone badania dotyczące parametrów Adaptive Minimum Size iAdaptive Maximum Size, ponieważ wykorzystywane obrazy są tych samych rozmiarów– minimalny i maksymalny rozmiar moż<strong>na</strong> wprost określić z wykorzystaniem MaximumSize i Minimum Size. Nie został również zbadany parametr Image Search Region – przyjętozałożenie, że twarz może pojawić się w każdym miejscu obrazu. W przedstawionychw tym rozdziale symulacjach wszystkie parametry, których wartości nie są wprost zdefiniowane,przyjmują domyślne wartości. Z<strong>na</strong>czenie symboli występujących w tabelach zwynikami zostało opisane w sekcji 4.3. Wszystkie wartości statystyczne obliczone zostały<strong>na</strong> podstawie 10 uruchomień algorytmu.Warto zauważyć, że wielowątkowość w pakiecie PittPatt może być zrealizowa<strong>na</strong> <strong>na</strong>dwa sposoby. Pierwszy z nich polega <strong>na</strong> zwiększeniu liczby wykorzystywanych wątków,


74 4. Badaniapoprzez parametr Detection Threads, co jed<strong>na</strong>k wymaga ustawienia Search Pruning <strong>na</strong> 0.Drugi model wielowątkowości uzyskiwany jest dzięki zastosowaniu kontekstów – możliwajest detekcja <strong>twarzy</strong> <strong>na</strong> więcej niż jednym strumieniu wideo jednocześnie, z niezależnymikonfiguracjami.Funkcja służąca do wykrywania <strong>twarzy</strong> to ppr detect objects(), która jako argumentyprzyjmuje wspomniany już kontekst zawierający parametry algorytmu, obraz <strong>na</strong>którym wyko<strong>na</strong>ne ma być przetwarzanie oraz referencję do obiektu, który zawierał będzieparametry z<strong>na</strong>lezionych <strong>twarzy</strong>. Dostęp<strong>na</strong> jest także funkcja detect and track objects(),umożliwiająca również śledzenie <strong>twarzy</strong>. Jej parametrami jest kontekst oraz obraz, parametryz<strong>na</strong>lezionych <strong>twarzy</strong> pobierane są za pomocą funkcji get current frame objects().W tym przypadku kontekst zawiera dodatkowe informacje, niedostępne dla użytkownika,dotyczące śledzonych <strong>twarzy</strong>. Eksperyment dotyczący opcji śledzenia <strong>twarzy</strong> w pakieciePittPatt przedstawiony jest w sekcji 4.4.6.4.4.1 Parametr Minimum SizeWłasności Minimum Size odpowiada argument PPMinSize programu faceDetect.Według dokumentacji dostarczanej wraz z pakietem PittPatt, ustawienie to określa minimalnąodległość między oczami, wyrażoną w pikselach. Przeprowadzone zostały eksperymenty<strong>na</strong> dwóch obrazach, z trzema różnymi wartościami tego ustawienia. Zauważal<strong>na</strong>jest tendencja, że wraz ze wzrostem wartości parametru, czas detekcji się zmniejsza. Niejest to jed<strong>na</strong>k regułą, jak pokazują wyniki przy PPMinSize = 1 i PPMinSize = 4 dladolnej fotografii w tabeli 4.6. Zapewne ustawienie to wpływa <strong>na</strong> zachowanie zgrubnegoklasyfikatora i w tym przypadku nie zmienia ono obszarów, które poddawane są dokładniejszejklasyfikacji. Na pierwszej fotografii widać wyraźne pogorszenie jakości wykrywaniadla PPMinSize = 10, jest to oczywiście spowodowane małymi rozmiarami <strong>twarzy</strong>, którewidoczne są <strong>na</strong> tym <strong>obrazie</strong>.4.4.2 Parametr Maximum SizeParametr ten odpowiada, zgodnie z dokumentacją pakietu PittPatt, maksymalnejodległości pomiędzy oczyma wykrytych <strong>twarzy</strong>. Jego odpowiednikiem w aplikacji face-Detect jest PPMinSize. Wyniki przeprowadzonych eksperymentów przedstawione są wtabeli 4.7. W tym przypadku, wzrost wartości a<strong>na</strong>lizowanego ustawienia powoduje zwiększenieczasu obliczeń. Na pierwszym z przedstawionych w tabeli zdjęć, zwiększanie wartościparametru nie powoduje pogarszania jakości detekcji – spowodowane jest to małymirozmiarami <strong>twarzy</strong>, które widoczne są <strong>na</strong> tym <strong>obrazie</strong>. Twarze z drugiej fotografii są większe,zauważalny jest negatywny wpływ małych wartości PPMinSize <strong>na</strong> jakość wykrywania.Zachowanie się algorytmu jest więc zgodne z oczekiwaniami.4.4.3 Parametr Search PrunningParametr ten wpływa <strong>na</strong> wybór strategi skalowania klasyfikatora przyjmowanej przezalgorytm. Odpowiada mu argument PPPrun aplikacji faceDetect. Może on przyjmowaćwartości z zakresu 0 - 5, których z<strong>na</strong>czenie, zgodnie z dokumentacją PittPatta jest <strong>na</strong>stępujące:0 optymalizacja skalowania klasyfikatora jest wyłączo<strong>na</strong>,


4.4. PittPatt 75PPMinSize = 1 PPMinSize = 4 PPMinSize = 10F pos = 0 F pos = 0 F pos = 0F neg = 0 F neg = 5 F neg = 17¯t = 2855.66 ¯t = 861.661 ¯t = 144.765σ t = 41.6033 σ t = 11.1569 σ t = 1.59111t min = 2798.95 t min = 850.036 t min = 142.756t max = 2927.7 t max = 887.568 t max = 148.834F pos = 0 F pos = 0 F pos = 0F neg = 0 F neg = 0 F neg = 0¯t = 663.8 ¯t = 625.537 ¯t = 196.018σ t = 3.66218 σ t = 7.11511 σ t = 2.30138t min = 659.822 t min = 614.819 t min = 192.999t max = 670.41 t max = 638.949 t max = 201.315Tabela. 4.6 Rezultaty eksperymentów dotyczących parametru PPMinSize.


76 4. BadaniaPPMaxSize = 4 PPMaxSize = 6 PPMaxSize = 10F pos = 0 F pos = 0 F pos = 0F neg = 5 F neg = 5 F neg = 5¯t = 402.472 ¯t = 604.048 ¯t = 829.533σ t = 5.7292 σ t = 6.01809 σ t = 6.4297t min = 392.614 t min = 596.672 t min = 817.395t max = 410.749 t max = 616.153 t max = 841.267F pos = 0 F pos = 0 F pos = 0F neg = 3 F neg = 1 F neg = 0¯t = 178.684 ¯t = 316.972 ¯t = 558.345σ t = 3.15841 σ t = 3.00437 σ t = 11.4098t min = 176.304 t min = 313.328 t min = 544.59t max = 187.633 t max = 324.109 t max = 582.803Tabela. 4.7 Rezultaty eksperymentów dotyczących parametru PPMaxSize.


4.4. PittPatt 771 zgrubne detektory są wykorzystywane do ograniczenia liczby stosowanych detektorówo większej dokładności, skanowane są wszystkie skale,2-5 <strong>na</strong>jpierw dokonywa<strong>na</strong> jest detekcja <strong>na</strong>jwiększych <strong>twarzy</strong> z wykorzystaniem zgrubnychdetektorów; <strong>na</strong>stępnie bardziej dokładne detektory poszukują pozostałych <strong>twarzy</strong>,niewiele mniejszych od <strong>na</strong>jbardziej ewidentnej <strong>twarzy</strong> z<strong>na</strong>lezionej w pierwszej fazie;wraz ze wzrostem parametru Search Prunning z<strong>na</strong>cząco skraca się czas działaniaklasyfikatora, niez<strong>na</strong>cznie zmniejsza zaś prawdopodobieństwo podjęcia błędnej decyzjinegatywnej.Wyniki wyko<strong>na</strong>nych badań zamieszczone są w tabeli 4.8. Na fotografiach wybranych doeksperymentów nie jest widoczny spodziewany wpływ <strong>na</strong> jakość detekcji – liczba fałszywychdecyzji negatywnych nie spada dla małych wartości PPPrun. Zgodnie z oczekiwaniami,czas przetwarzania maleje wraz ze wzrostem parametru PPPrun.4.4.4 Parametr Search ThresholdWspółczynnik ten pozwala <strong>na</strong> wybranie oczekiwanej charakterystyki algorytmu. Obniżającgo, zmniejszamy prawdopodobieństwo niewykrycia <strong>twarzy</strong>, tym samym zwiększającskuteczność detekcji. Zwiększanie parametru daje odwrotny rezultat – zmniejszenie liczbyfałszywych decyzji pozytywnych i zwiększenie prawdopodobieństwa niewykrycia <strong>twarzy</strong>.Odpowiada mu argument PPThreshold programu faceDetect. Wyniki wyko<strong>na</strong>nych eksperymentówzamieszczone są w tabeli 4.9. Zgodnie z oczekiwaniami, parametr nie mawpływu <strong>na</strong> czas. Jego wpływ <strong>na</strong> jakość działania dobrze widoczny jest <strong>na</strong> pierwszej fotografii.Na drugim <strong>obrazie</strong> nie jest widoczny wpływ tego ustawienia. Ciekawe jest, że dwiefałszywe decyzje pozytywne, podjęte przez algorytm dla PPThreshold = -1, tj. obszarprzedstawiający płot z prawej strony fotografii, oraz szara koszula jednej z osób, odpowiadająbłędom algorytmu opartego <strong>na</strong> kaskadach klasyfikatorów Haara widocznym <strong>na</strong>obrazach z tabel 4.1 i 4.2.4.4.5 Liczba wątkówTak jak to zostało wcześniej wspomniane, pakiet PittPatt umożliwia uruchomieniedetekcji w trybie wielowątkowym. Eksperymenty przeprowadzane były <strong>na</strong> komputerze zdwurdzeniowym procesorem, dlatego parametr PPThreads definiujący liczbę wykorzystanychwątków w aplikacji faceDetect przyjmował wartości ze zbioru {1, 2}. Warunkiemuruchomienia algorytmu w trybie wielowątkowym jest przypisanie parametrowi PPPrunwartości 0. Zasada ta przedstawio<strong>na</strong> jest w dokumentacji pakietu PittPatt i jest zgod<strong>na</strong>z rzeczywistością – próba uruchomienia programu bez jego spełnienia nie powodzi się.Taka wartość parametru oz<strong>na</strong>cza rezyg<strong>na</strong>cję z optymalizacja skanowania, co niesie ze sobąwydłużenie czasu obliczeń i teoretycznie lepszą jakość detekcji. Wyniki wyko<strong>na</strong>nycheksperymentów przedstawione są w tabeli 4.10. Widać, że przyśpieszenie uzyskane w wynikuwykorzystania drugiego wątku jest równe około 1, 7 raza, podobnie jak w przypadkualgorytmu opartego <strong>na</strong> klasyfikatorach Haara zaimplementowanego w OpenCV (tabela4.5). Niestety konieczność wyeliminowania optymalizacja skalowania sprawia, że czaswykrywania <strong>na</strong>wet <strong>na</strong> dwóch rdzeniach jest większy niż w przypadku wykorzystania tejcechy. Prawdopodobnie zalety wykorzystania wielu wątków są widoczne <strong>na</strong> fotografiach,które zawierają zarówno małe, jak i duże twarze.


78 4. BadaniaPPPrun = 0 PPPrun = 2 PPPrun = 4F pos = 0 F pos = 0 F pos = 0F neg = 5 F neg = 5 F neg = 5¯t = 1786.28 ¯t = 1054.09 ¯t = 1048.02σ t = 23.9974 σ t = 10.5867 σ t = 8.35827t min = 1748.29 t min = 1035.28 t min = 1038.69t max = 1813.19 t max = 1067.31 t max = 1064.74F pos = 0 F pos = 0 F pos = 0F neg = 0 F neg = 0 F neg = 0¯t = 1443.31 ¯t = 864.877 ¯t = 740.073σ t = 13.3561 σ t = 13.1999 σ t = 11.6187t min = 1421.44 t min = 849.368 t min = 727.792t max = 1463.22 t max = 887.405 t max = 769.902Tabela. 4.8 Rezultaty eksperymentów dotyczących parametru PPPrun.


4.4. PittPatt 79PPThreshold = 4 PPThreshold = 6 PPThreshold = 10F pos = 3 F pos = 0 F pos = 0F neg = 4 F neg = 5 F neg = 9¯t = 885.679 ¯t = 872.606 ¯t = 866.628σ t = 30.1768 σ t = 8.09406 σ t = 6.76318t min = 858.381 t min = 860.023 t min = 856.816t max = 954.417 t max = 887.363 t max = 878.311F pos = 0 F pos = 0 F pos = 0F neg = 0 F neg = 0 F neg = 0¯t = 628.355 ¯t = 630.679 ¯t = 627.046σ t = 6.88533 σ t = 12.4228 σ t = 5.28483t min = 617.834 t min = 619.281 t min = 621.641t max = 640.038 t max = 665.447 t max = 640.801Tabela. 4.9 Rezultaty eksperymentów dotyczących parametru PPThreshold.


80 4. BadaniaPPThreads = 1, PPPrun = 0¯t th=1 = 1340.29 ¯t th=1 = 1840.2 ¯t th=1 = 1577.73σ tth=1 = 8.686 σ tth=1 = 22.6823 σ tth=1 = 9.41639t minth=1 = 1332.31t maxth=1 = 1355.59t minth=1 = 1818.21t maxth=1 = 1891.99PPThreads = 2, PPPrun = 0t minth=1 = 1566.53t maxth=1 = 1600.41¯t th=2 = 860.598 ¯t th=2 = 1082.62 ¯t th=2 = 924.122σ tth=2 = 14.8244 σ tth=2 = 8.26127 σ tth=2 = 9.54295t minth=2 = 841.103t maxth=2 = 887t minth=2 = 1070.98t maxth=2 = 1097.24t minth=2 = 912.711t maxth=2 = 943.829¯t th=1¯t th=2= 1.56¯t th=1¯t th=2= 1.70¯t th=1¯t th=2= 1.71PPThreads = 1, PPPrun = 5¯t = 734.78 ¯t = 930.82 ¯t = 761.074σ t = 6.65404 σ t = 1.32592 σ t = 7.15503t min = 729.431 t min = 928.782 t min = 755.514t max = 749.589 t max = 932.423 t max = 778.347Tabela. 4.10 Czasy działania algorytmu w zależności od liczby użytych wątków.


4.4. PittPatt 814.4.6 Śledzenie <strong>twarzy</strong>Śledzenie wyłączoneŚledzenie włączoneKlatka 39Klatka 40¯t = 234.696 ¯t = 227.371σ¯t = 1.63832 σ¯t = 1.14664¯σ t = 55.1967 ¯σ t = 55.0834σ σt = 0.502645 σ σt = 0.412644Tabela. 4.11 A<strong>na</strong>liza działania funkcji śledzenia <strong>twarzy</strong> w pakiecie PittPatt.Pakiet PittPatt posiada funkcjo<strong>na</strong>lność śledzenia <strong>twarzy</strong>. Jej włączenie uzyskiwanejest za pomocą wywołania funkcji detect and track objects(). Przeprowadzone zostałybadania dotyczące skuteczności śledzenia <strong>twarzy</strong> i jego wpływu <strong>na</strong> szybkość działaniaalgorytmu. Rezultaty uzyskane z wykorzystaniem sekwencji wideo o długości 272 klatekprzedstawione są w tabeli 4.11. Wszystkie wielkości statystyczne obliczone zostały <strong>na</strong> podstawie5 uruchomień algorytmu. ¯t to średnia z 5 średnich czasów działania algorytmu <strong>na</strong>jednej klatce, σ¯t to odchylenie standardowe tych 5 średnich. ¯σ t określa średnie odchyleniestandardowe, σ σt to odchylenie standardowe tej średniej.Włączenie śledzenia <strong>twarzy</strong> daje niewielką poprawę jakości działania algorytmu. Dwiekolejne klatki a<strong>na</strong>lizowanej sekwencji <strong>na</strong> których widocz<strong>na</strong> jest ta poprawa przedstawionesą w tabeli 4.11. Na klatce 39. obie wersje algorytmu poprawnie wyszukują twarz, <strong>na</strong>klatce 40. tylko wersja z włączonym śledzeniem daje poprawne rezultaty. Dla a<strong>na</strong>lizowanejsekwencji widocz<strong>na</strong> jest także niez<strong>na</strong>cz<strong>na</strong> poprawa szybkości działania algorytmu.


82 4. Badania4.4.7 Wnioski z przeprowadzonych badańAlgorytm działa bardzo dobrze. Udało się zaobserwować wpływ zmiany parametrów<strong>na</strong> jakość działania, opisany w dokumentacji pakietu PittPatt. Wyjątkiem jest parametrPPPrun, którego zmniejszanie powinno zmniejszać liczbę fałszywych decyzji negatywnych.Tego efektu nie udało się odtworzyć. Prawdopodobnie wpływ tego parametru widocznybyłby <strong>na</strong> zdjęciu zawierającym twarze mocno różniące się rozmiarami.Zastosowanie poszczególnych parametrów w celu dopasowania algorytmu do specyficznychwymagań danego systemu przeprowadzone może być podobnie jak w przypadkualgorytmu opartego <strong>na</strong> kaskadach klasyfikatorów Haara, co opisane zostało w sekcji 4.3.6.Bardzo pożyteczny może być parametr PPThreshold, który w łatwy sposób pozwala sterowaćstosunkiem liczby fałszywych decyzji negatywnych do liczby fałszywych decyzjipozytywnych.Funkcjo<strong>na</strong>lność śledzenia <strong>twarzy</strong> może zostać wykorzysta<strong>na</strong> do poprawy jej jakości,jed<strong>na</strong>k szybkość działania algorytmu jest zwiększa<strong>na</strong> tylko w niewielkim stopniu.4.5 Porów<strong>na</strong>nie trzech algorytmówWyko<strong>na</strong>ne zostały eksperymenty porównujące czas i jakość detekcji dla 3 przykładowychzdjęć. Wszystkie parametry algorytmów użyte podczas eksperymentów miaływartości domyślne, tak jak zostało to przedstawione w sekcjach 4.2, 4.3 i 4.4. Z<strong>na</strong>czeniewyrażeń występujących w tabelach jest takie samo jak w przypadku poprzednich eksperymentów.Wszystkie wartości statystyczne zostały obliczone <strong>na</strong> podstawie 10 uruchomieńalgorytmu.Rezultaty przedstawione są w tabeli 4.12. Pierwsze zdjęcie zostało celowo obrócone,aby pokazać zalety wykrywania <strong>twarzy</strong> w oparciu o kolor skóry i cechy charakterystyczne– algorytmy takie mogą wykrywać twarz o dowolnej orientacji. Na środkowej fotografiiwidać wyraźną przewagę algorytmu PittPatt, jeśli chodzi o jakość działania. Dla tegoobrazu działa on również <strong>na</strong>jszybciej. W przypadku ostatniego zdjęcia, <strong>na</strong>jlepszy okazałsię algorytm oparty <strong>na</strong> kaskadzie klasyfikatorów Haara – wykrył on wszystkie twarze w<strong>na</strong>jkrótszym czasie. Długi czas działania algorytmu PittPatt w tym przypadku może byćspowodowany dużą liczbą obszarów zainteresowania wyselekcjonowanych przez zgrubnyklasyfikator. Samodzielnie zaimplementowany algorytm zadziałał <strong>na</strong>jszybciej, jed<strong>na</strong>k jegowyniki są mocno niesatysfakcjonujące.Najbardziej niezawodny wydaje się być algorytm PittPatt. Najlepiej poradził onsobie z wykrywaniem <strong>twarzy</strong>, nie osiągał <strong>na</strong>jlepszych rezultatów czasowych, jed<strong>na</strong>k czasdziałania nie odstawał od czasów działania pozostałych algorytmów. Wydaje się, że towłaśnie jakość i pewność detekcji są kluczowymi czynnikami przy ocenie algorytmówwykrywania <strong>twarzy</strong>. Samodzielnie zaimplementowany algorytm pozwala co prawda <strong>na</strong>wykrywanie <strong>twarzy</strong> o dowolnych orientacjach, jed<strong>na</strong>k biorąc pod uwagę niezbyt dobrąjakość detekcji, cecha ta nie wpływa z<strong>na</strong>cząco <strong>na</strong> ocenę algorytmu.


4.5. Porów<strong>na</strong>nie trzech algorytmów 83Włas<strong>na</strong> implementcja Haar PittPattF pos = 0 F pos = 0 F pos = 0F neg = 1 F neg = 4 F neg = 3¯t = 551.762 ¯t = 758.88 ¯t = 489.822σ t = 3.70689 σ t = 6.68072 σ t = 5.7598t min = 547.41 t min = 750.613 t min = 485.197t max = 557.797 t max = 772.703 t max = 504.2F pos = 0 F pos = 2 F pos = 0F neg = 1 F neg = 0 F neg = 0¯t = 735.267 ¯t = 873.126 ¯t = 668.324σ t = 6.73839 σ t = 18.8703 σ t = 30.2214t min = 725.605 t min = 863.446 t min = 652.331t max = 745.807 t max = 928.714 t max = 757.934F pos = 1 F pos = 0 F pos = 0F neg = 6 F neg = 0 F neg = 0¯t = 562.554 ¯t = 745.003 ¯t = 1234.09σ t = 2.1505 σ t = 5.34871 σ t = 21.5481t min = 560.465 t min = 736.314 t min = 1212.74t max = 568.568 t max = 754.811 t max = 1285.76Tabela. 4.12 Porów<strong>na</strong>nie działania trzech algorytmów.


PodsumowanieW pracy przedstawione zostały różne metody wykrywanie <strong>twarzy</strong>. Opis większościz nich zawiera jedynie ogólną zasadę działania i zagadnienia kluczowe dla danego algorytmu.Jed<strong>na</strong> z metod została opisa<strong>na</strong> dokładnie, a <strong>na</strong>stępnie zaimplementowa<strong>na</strong>.Przygotowane w ramach pracy <strong>na</strong>rzędzia, w skład których wchodzą biblioteki współdzielone,aplikacje i skrypty pozwoliły <strong>na</strong> przeprowadzenie badań. Środowisko eksperymentówstworzone zostało <strong>na</strong> komputerze osobistym, działającym pod kontrolą systemuoperacyjnego Linux, głównie z wykorzystaniem języków C i C++, darmowych <strong>na</strong>rzędzii bibliotek oraz komercyjnie dostępnego pakietu PittPatt. Sprawdzone zostały trzyalgorytmy:• samodzielnie zaimplementowany, którego podstawowym elementem jest wykrywanieregionów o kolorze skóry,• opierający działanie <strong>na</strong> kaskadach klasyfikatorów Haara, dostępny w darmowej biblioteceOpenCV,• pochodzący z pakietu PittPatt.Wyniki wskazują, że <strong>na</strong>jbardziej efektywne wykrywanie <strong>twarzy</strong> uzyskiwane jest dzięki wykorzystaniumetody komercyjnej, mniej skuteczny jest algorytm dostępny w OpenCV,<strong>na</strong>jgorsza okazała się samodziel<strong>na</strong> implementacja. Przeprowadzone eksperymenty wskazująrównież, że śledzenie <strong>twarzy</strong> <strong>na</strong> sekwencji wideo może być pomyślnie realizowane zwykorzystaniem wyłącznie algorytmów detekcji <strong>twarzy</strong>.Największą wadą metod opartych <strong>na</strong> wykrywaniu koloru skóry jest ich duża podatność<strong>na</strong> błędy wynikające z charakterystyki światła w otoczeniu, w którym pobierany jestobraz oraz specyfikacji przetwornika, za pomocą którego ta operacja jest przeprowadza<strong>na</strong>.Zmia<strong>na</strong> światła, lub urządzenia za pomocą którego pobierany jest obraz, może spowodowaćz<strong>na</strong>czące zmiany w kolorystyce danej <strong>twarzy</strong>. Trudno jest ustalić parametry korekcjikolorów, które pozwoliłby <strong>na</strong> rozwiązanie tego problemu.Metody oparte <strong>na</strong> detekcji cech charakterystycznych <strong>twarzy</strong> obliczanych <strong>na</strong> podstawiewartości jasności pikseli obrazu wejściowego są <strong>na</strong>tomiast wrażliwe <strong>na</strong> zmianę kąta<strong>na</strong>chylenia <strong>twarzy</strong>. Detekcja nie powodzi się, jeśli orientacja szukanej <strong>twarzy</strong> odbiega odorientacji <strong>twarzy</strong>, <strong>na</strong> podstawie których wytrenowane zostały klasyfikatory. Nie jest tozbyt dużym ograniczeniem – w większości systemów, których elementem jest algorytmdetekcji <strong>twarzy</strong>, zwykle dostęp<strong>na</strong> jest przybliżo<strong>na</strong> wiedza dotycząca możliwych orientacji<strong>twarzy</strong> <strong>na</strong> dostarczanych do systemu obrazach.W przyszłości podjęta może zostać próba stworzenia alter<strong>na</strong>tywnej wersji ostatniej fazyalgorytmu, zgodnie z [11]. Interesującym wyzwaniem byłoby podjęcie próby implementacjimetody detekcji <strong>twarzy</strong> opartej <strong>na</strong> transformacie falkowej obrazu. Wykorzysta<strong>na</strong> przytym mogłyby zostać darmowe biblioteki GNU Scientific Library [3] oraz OpenCV.Na pewno warto byłoby rozszerzyć funkcjo<strong>na</strong>lność stworzonych skryptów, automatyzując


86 Podsumowanieocenę jakości detekcji, to z<strong>na</strong>czy obliczanie liczy błędnych decyzji pozytywnych i negatywnych<strong>na</strong> podstawie przygotowanego przedtem zbioru zdjęć testowych.


Dodatek AA<strong>na</strong>liza map oczu i ust, wykrywanie<strong>twarzy</strong>W dodatku przedstawiony jest sposób ekstrakcji i a<strong>na</strong>lizy danych z utworzonych wcześniejmap oczu i ust (rozdział 2) w celu decyzji co do obecności <strong>twarzy</strong> w danym obszarze[11].Hsu, Abdel-Mottaleb i Jain wyszukują twarze, poddając a<strong>na</strong>lizie wszystkie możliwekombi<strong>na</strong>cje jednej pary oczu z pojedynczymi ustami. Każdy utworzony <strong>na</strong> tej podstawietrójkąt jest weryfikowany <strong>na</strong> podstawie:1. zmian lumi<strong>na</strong>ncji i przeciętnego kierunku gradientu w obszarach oczu i ust,2. geometrii i kształtu trójkąta,3. krawędzi <strong>twarzy</strong> wokół a<strong>na</strong>lizowanego trójkąta.Cechy te są wykorzystywane do obliczenia numerycznej wartości, <strong>na</strong> podstawie którejpodejmowa<strong>na</strong> jest decyzja o klasyfikacji a<strong>na</strong>lizowanego trójkąta jako <strong>twarzy</strong>.A.1 Ekstrakcja oczu i ust <strong>na</strong> podstawie mapDokładne położenie oczu i ust otrzymywane jest poprzez zastosowanie:1. dekompozycji piramidowej <strong>na</strong> uzyskanych mapach,2. progowania i morfologicznej operacji domykania.Liczba iteracji dekompozycji piramidowej jest rów<strong>na</strong>:gdzieL = max{( )}min(W, H)log 2 (2σ), log 2 , (A.1)F c⌊√ ⌋ W · Hσ =. (A.2)2F eParametry W i H reprezentują szerokość i wysokość a<strong>na</strong>lizowanego obszaru obrazu.F c × F c określa minimalny rozmiar tego obszaru, F e określa maksymalny stosunek średniegorozmiaru <strong>twarzy</strong> do średniego rozmiaru oka. Autorzy algorytmu przyjęli wartościF c = 7 pikseli, F e = 12. Zgrub<strong>na</strong> lokalizacja poszukiwanych elementów jest <strong>na</strong>stępnie


88 A. A<strong>na</strong>liza map oczu i ust, wykrywanie <strong>twarzy</strong>precyzowa<strong>na</strong> poprzez iteracyjne progowanie i operację morfologicznego domknięcia takotrzymanego obrazu. Wartość progu oblicza<strong>na</strong> jest ze wzoru:T h = α n∑(x,y)∈FGM i (x, y) + (1 − α) ·max (M i(x, y)),(x,y)∈FG(A.3)gdzie M i (x, y) oz<strong>na</strong>cza poszczególne piksele map oczu (i = e) lub ust (i = m) w a<strong>na</strong>lizowanymobszarze FG o liczbie pikseli n. Współczynnik α w pierwszej iteracji wynosi 0.5, a<strong>na</strong>stępnie jest zwiększany do 0.8 lub do chwili w której liczba wykrytych oczu przekroczyustaloną liczbę N i , i ∈ e, m. Ta gór<strong>na</strong> granica przyjęta jest, aby algorytm nie tracił zbytdużo czasu <strong>na</strong> poszukiwanie cech charakterystycznych <strong>twarzy</strong>. Autorzy artykułu przyjęlimaksymalną liczbę oczu N e = 8 i maksymalną liczbę ust N m = 5.A.2 Weryfikacja istnienia <strong>twarzy</strong>Pierwszym krokiem wykonywanym w tej fazie działania algorytmu jest wyszukaniekrawędzi <strong>twarzy</strong>. W tym celu wykorzystywany jest zmodyfikowany algorytm Canny. Gradientfragmentu obrazu w punkcie (x, y) obliczany jest jako:∇S(x, y) = (G x , G y ) = (D σ (x) ∗ S(x, y), D σ (y) ∗ S(x, y)),(A.4)gdzie D σ jest pochodną funkcji Gaussa z zerową średnią i wariancją σ 2 , ∗ jest operatoremsplotu. Odchylenie standardowe σ uzależnione jest od wielkości a<strong>na</strong>lizowanego trójkątaoczy-usta:( ) −ws2 1/2σ =; ws = max(dist io , dist em ), (A.5)8 ln(wh)gdzie ws oz<strong>na</strong>cza rozmiar wykorzystywanego przy wyszukiwaniu krawędzi ok<strong>na</strong>, którywybierany jest jako maksimum pomiędzy odległością między oczyma dist io (interocular), aodległością środkowego punktu pomiędzy oczyma a ustami dist em (eye-mouth). Parametrwh określa pożądaną wartość funkcji Gaussa <strong>na</strong> brzegach ok<strong>na</strong>.Mapa wykorzystywa<strong>na</strong> do określenia krawędzi <strong>twarzy</strong> tworzo<strong>na</strong> jest w <strong>na</strong>stępującysposób:1. zastosowanie operatora wykrywającego krawędzie (A.4) <strong>na</strong> orygi<strong>na</strong>lnym obszarzeprzedstawiającym potencjalną twarz; w wyniku tej operacji uzyskiwane są dwa obrazy:I m1 (magnitude), którego piksele przyjmują wartości tym większe, im bardziejwyraź<strong>na</strong> jest krawędź w określonym punkcie, oraz obraz I d1 (direction), któregowartości pikseli uzależnione są od kierunku wykrytych w danym punkcie krawędzi,2. ponowne zastosowanie operatora wykrywającego krawędzie <strong>na</strong> <strong>obrazie</strong> I d1 ; a<strong>na</strong>logiczniejak w poprzednim przypadku powstają obrazy I m2 oraz I d2 ,3. obraz I d2 poddawany jest progowaniu, w wyniku czego powstaje maska I dm ,4. obrazy I m1 i I m2 są sumowane, maskowane z wykorzystaniem I dm , a uzyskany obrazjest normalizowany do przedziału wartości [0, 1] – uzyskany w ten sposób obrazoz<strong>na</strong>czmy jako I f .Środek <strong>twarzy</strong> obliczany jest za pomocą momentów pierwszego rzędu uzyskanych dlaobrazu I f .


A.2. Weryfikacja istnienia <strong>twarzy</strong> 89Następnie wykorzystywa<strong>na</strong> jest transformacja Hougha w celu z<strong>na</strong>lezienia elipsy <strong>na</strong>jlepiejprzybliżającej obszar <strong>twarzy</strong>. Elipsa może być zdefiniowa<strong>na</strong> 5 parametrami: współrzędnymix i y środka, kątem <strong>na</strong>chylenia oraz długością dwóch osi. Jako środek elipsyprzyjmowany jest środek <strong>twarzy</strong>, kąt <strong>na</strong>chylenia obliczany jest <strong>na</strong> podstawie kąta <strong>na</strong>chyleniaosi <strong>twarzy</strong>, transformacja Hougha wykorzystywa<strong>na</strong> jest więc do z<strong>na</strong>lezienia tylkodwóch parametrów elipsy.A.2.1Obliczenie wagDla każdego trójkąta składającego się z pary oczu i ust z<strong>na</strong>jdujących się w a<strong>na</strong>lizowanymobszarze oblicza<strong>na</strong> jest waga. Trójkąt, który uzyska <strong>na</strong>jwiększą wartość, zostaniewybrany do fi<strong>na</strong>lnej reprezentacji <strong>twarzy</strong> tylko wtedy, gdy jego waga przekroczy ustalonypróg. Jeśli żaden z trójkątów <strong>na</strong> a<strong>na</strong>lizowanym obszarze tego progu nie przekroczy, obszarnie zostanie zaklasyfikowany jako twarz.Wartość wagi dla i-tego i j-tego oka oraz k-tych ust oblicza<strong>na</strong> jest w <strong>na</strong>stępującysposób:tw(i, j, k) = emw(i, j, k) · ow(i, j, k) · q(i, j, k),(A.6)gdzie emw to waga ust i oczu (eye-mouth weight):emw(i, j, k) = 1 (ew(i, j) + mw(k)),2 (A.7)ew to waga dla oczu (eye weight):ew(i, j) = M e(x i , y i ) + M e (x j , y j ); i > j; i, j ∈ [1, N e ], (A.8)2 · M e (x max , y max )gdzie M e (x i , y i ) to jasność mapy oczu w punkcie w którym z<strong>na</strong>jduje się i-te oko, a<strong>na</strong>logiczniedla M e (x j , y j ). Wyrażenie M e (x max , y max ) to <strong>na</strong>jwiększa wartość jaką przyjmujemapa oczu, N e to liczba oczu w a<strong>na</strong>lizowanym obszarze.Waga ust mw (mouth weight) oblicza<strong>na</strong> jest <strong>na</strong>stępująco:mw(k) = M m(x k , y k )M m (x max , y max ) ; k ∈ [0, N m], (A.9)gdzie M m (x k , y k ) to jasność mapy ust w miejscu w którym z<strong>na</strong>jdują się usta, M m (x max , y max )to <strong>na</strong>jwiększa jasność mapy ust, N m to liczba ust w a<strong>na</strong>lizowanym obszarze.Waga ow oblicza<strong>na</strong> jest <strong>na</strong> podstawie orientacji <strong>twarzy</strong> (orientation weight):2∏ow(i, j, k) = e −3(1−cos2 (θ r(i,j,k))) ;i=icos(θ r (i, j, k)) = ⃗u r · ⃗v r||⃗v r || ; || ⃗u r|| = 1, (A.10)gdzie wektor ⃗v 1 prowadzi od punktu środkowego pomiędzy oczyma do ust, wektor ⃗v 2 =−⃗v 1 i prowadzi od ust do punktu środkowego pomiędzy oczyma. ⃗u 1 to wersor symetralnejodcinka między oczyma, ⃗u 2 to wektor jednostkowy o kierunku osi pionowej obrazu i zwróconydo góry. θ 1 określa kąt pomiędzy ⃗v 1 , a ⃗u 1 , a<strong>na</strong>logicznie θ 2 (rysunek A.1). WyrażenieA.10 skonstruowane jest w taki sposób, aby przybierało <strong>na</strong>jwiększą wartość dla θ 1 = 0,θ 2 = 0, czyli kiedy oś <strong>twarzy</strong> jest równoległa do osi pionowej obrazu. Składnik q(i, j, k)wyrażenia A.6 wybierany jest bezpośrednio jako waga przypisa<strong>na</strong> przez algorytm Houghadla dopasowanej elipsy.


90 A. A<strong>na</strong>liza map oczu i ust, wykrywanie <strong>twarzy</strong>oko j-teoko i-tev 2v 11u 1u 22usta k-teRysunek A.1 Geometria trójkąta, który tworzy para oczu i usta.


Dodatek BSegmentacja i wyz<strong>na</strong>czanie konturówsylwetek <strong>na</strong> <strong>obrazie</strong>Bardzo częstym zagadnieniem spotykanym w zadaniach przetwarzania obrazów jestekstrakcja konturów sylwetek z<strong>na</strong>jdujących się <strong>na</strong> <strong>obrazie</strong> (opis zastosowania tego problemuw niniejszej pracy z<strong>na</strong>jduje się w sekcji 2.5.1). Przedstawiony jest tutaj podstawowy,prosty algorytm który pozwala <strong>na</strong> rozwiązanie tego zadania dla jednego obiektu. Dodatkowoopisany jest algorytm segmentacji, który w połączeniu z poprzednim algorytmemmoże być zastosowany do wydzielenia konturów wielu sylwetek <strong>na</strong> <strong>obrazie</strong>.B.1 Algorytm wyz<strong>na</strong>czania konturówPoniższy opis algorytmu powstał <strong>na</strong> podstawie [29]. Danymi wejściowymi dla algorytmujest obraz zawierający jedną sylwetkę, danymi wyjściowymi zbiór współrzędnychpikseli tworzących kontur sylwetki. Należy przedsięwziąć <strong>na</strong>stępujące kroki:1. Przeskanować poszczególne kolumny obrazu od lewej do prawej, każdą kolumnęskanując od dołu do góry, aż do z<strong>na</strong>lezienia pierwszego piksela sylwetki. Punkt tenoz<strong>na</strong>czmy jako S.2. A<strong>na</strong>lizować kolejne piksele zgodnie z <strong>na</strong>stępującymi regułami, aż do powrotu dopunktu S.(a) Jeśli jesteśmy <strong>na</strong> pikselu <strong>na</strong>leżącym do sylwetki, przemieszczamy się do pikselaz<strong>na</strong>jdującego się <strong>na</strong> lewo (w stosunku do kierunku z którego dotarliśmy doa<strong>na</strong>lizowanego piksela). Piksel ten <strong>na</strong>leży dodać do listy pikseli konturu.(b) Jeśli a<strong>na</strong>lizowany piksel nie <strong>na</strong>leży do sylwetki, przemieszamy się <strong>na</strong> pikselz<strong>na</strong>jdujący się <strong>na</strong> prawo od obecnego.Przykładowy przebieg algorytmu przedstawiony jest <strong>na</strong> rysunku B.1.B.1.1Algorytm segmentacjiSam algorytm grupowania pikseli w spójne obszary jest jednym z podstawowych problemówprzetwarzania obrazów, pierwot<strong>na</strong> wersja tego algorytmu jest opisa<strong>na</strong> np. w [19].Obrazem wejściowym jest obraz bi<strong>na</strong>rny, składający się z pikseli o wartościach 0 lub 1.Weźmy operator f, który przekształca piksel obrazu wejściowego a i,j w piksel obrazuwyjściowego (posegementowanego) a ′ i,j. Piksele obrazu wyjściowego przyjmują wartość ze


92 B. Segmentacja i wyz<strong>na</strong>czanie konturów sylwetek <strong>na</strong> <strong>obrazie</strong>sRysunek B.1 Działanie algorytmu wyz<strong>na</strong>czania konturów.zbioru v 1 , ..., v k , gdzie v i oz<strong>na</strong>cza identyfikator wydzielonego segmentu składającego sięz jedynek. Do każdego z pikseli obrazu wejściowego a i,j <strong>na</strong>leży zastosować <strong>na</strong>stępującąprocedurę:1. Jeśli a i,j = 0, to a ′ i,j = 0.2. Jeśli a i,j = 1 i a ′ i−1,j−1 = a ′ i−1,j = a ′ i−1,j+1 = a ′ i,j−1 = 0, to a ′ i,j = v i , gdzie v i jest jednymz niewykorzystanych jeszcze identyfikatorów. Kiedy warunek ten jest spełniony,oz<strong>na</strong>cza to, że algorytm rozpoczy<strong>na</strong> wydzielanie nowego segmentu połączonych zesobą jedynek.3. Jeśli a i,j = 1, a co <strong>na</strong>jmniej jeden z pikseli a ′ i−1,j−1, a ′ i−1,j, a ′ i−1,j+1, a ′ i,j−1 ma wartość0 lub jakiegoś v i ∈ v 1 , ..., v k , wtedy v ′ i,j przyjmuje wartość <strong>na</strong>jmniejszego z v i . Kiedytylko jeden pikseli a ′ i−1,j−1, a ′ i−1,j, a ′ i−1,j+1, a ′ i,j−1 ma wartość v i , oz<strong>na</strong>cza to, żea<strong>na</strong>lizowany piksel a i,,j <strong>na</strong>leży do segmentu o identyfikatorze v i . Jeśli dwa spośródtych pikseli mają już przypisany identyfikator segmentu, oz<strong>na</strong>cza to, że a<strong>na</strong>lizowanypiksel jest łącznikiem między nimi. Należy zapamiętać te identyfikatory, w celupóźniejszego przypisania do obu segmentów wspólnego identyfikatora.Na koniec, <strong>na</strong>leży pozbyć się <strong>na</strong>dmiarowych identyfikatorów: jeśli obszar oz<strong>na</strong>czony przezv s sąsiaduje z obszarem oz<strong>na</strong>czonym przez v r , gdzie v r < v s , wszystkim pikselom obrazuwyjściowego o wartości v s powin<strong>na</strong> zostać przypisa<strong>na</strong> wartość v r . Dzięki tej operacji,przeprowadzanej rekurencyjnie, wszystkie piksele ze spójnego obszaru będą miały tensam identyfikator v r .


Dodatek COpis środowiskaPraca tworzo<strong>na</strong> była w systemie operacyjnym Xubuntu 10.04, będącym debianowądystrybucją Linuxa. Ze względu <strong>na</strong> jej dy<strong>na</strong>miczny rozwój, niekiedy komponenty wchodzącew jej skład są zmieniane bez zachowania kompatybilności wstecznej. Czasami doprowadzato do sytuacji, w której oprogramowanie <strong>na</strong>pisane dla danej wersji systemu niedaje się skompilować lub uruchomić w nowszych wersjach. Podobne kłopoty mogą pojawićsię w przypadku prób uruchomienia projektu <strong>na</strong> innych dystrybucjach linuksowych.Przedstawione są tutaj wersje wykorzystanych <strong>na</strong>rzędzi wraz z ich krótkim opisem.W pierwszej kolejności wymienione są biblioteki współdzielone, które mogą spowodować<strong>na</strong>jwięcej kłopotów w przypadku próby uruchomienia stworzonego oprogramowaniaw przyszłości:Qt 4.6.2 Zbiór bibliotek dedykowanych do wykorzystania w aplikacjach <strong>na</strong>pisanych wC++, umożliwiających między innymi tworzenie interfejsów graficznych.openCV 2.2 Zaawansowa<strong>na</strong> biblioteka, która może być wykorzystywa<strong>na</strong> do przetwarzaniaobrazów, zawiera olbrzymi zbiór funkcji, od <strong>na</strong>jprostszych operacji morfologicznychpo bardzo skomplikowane procedury pozwalające <strong>na</strong> detekcję zadanychwzorców.tbb 2.2 Biblioteka dedykowa<strong>na</strong> dla procesorów firmy Intel, umożliwiająca wykonywanieprogramów <strong>na</strong> więcej niż jednym rdzeniu jednocześnie.PittPatt FTR-SDK v4.2.2 Face Tracking and Recognition Software Development Kitfirmy Pittsburgh Pattern Recognition to zestaw <strong>na</strong>rzędzi pozwalających <strong>na</strong> detekcję,śledzenie i rozpoz<strong>na</strong>wanie <strong>twarzy</strong>. Korzystanie z bibliotek wchodzących w skład tegozestawu możliwe jest dzięki interfejsowi programowemu dla języka C.Skrypty <strong>na</strong>pisane w celu ułatwienia tworzenia pracy (rozdział D) stworzone zostały w powłocesystemowej bash z wykorzystaniem <strong>na</strong>rzędzi w niej dostępnych, takich jak awk czysed. Proces kompilacji i konsolidacji oprogramowania oraz tworzenia samego dokumentuzautomatyzowany został z wykorzystaniem GNU make. Dokument stworzony zostałz użyciem oprogramowania do składania tekstu Latex. Te elementy projektu równieżmogą powodować trudności w przypadku próby wykorzystania <strong>na</strong> późniejszych wersjachsystemu.bash 4.1.5 Podstawowe środowisko pracy w unixowych systemach operacyjnych. Umożliwiałatwe pisanie skryptów, co pozwala <strong>na</strong> zautomatyzowanie pracy i jej przyśpieszenie.


94 C. Opis środowiskaGNU make 3.81 Zestaw <strong>na</strong>rzędzi ułatwiających automatyzację tworzenia różnego rodzajuprojektów informatycznych.pdflatex 3.1415926-1.40.10 Narzędzie konwertujące plik wejściowy <strong>na</strong>pisany w Latex’udo pliku pdf.Ostatnia grupa <strong>na</strong>rzędzi to standardowe programy wykorzystywane w czasie pisania itestowania kodu. Nie są one niezbędne do uruchomienia projektu.git 1.7.0 System kontroli wersji, niezastąpiony w pracy zespołowej. Przydatny również wjednoosobowych projektach, w których pozwala np. <strong>na</strong> opis i systematyzację historiirozwoju kodu.gdb 7.1 Program umożliwiający <strong>na</strong>dzór wykonywania się programu, z<strong>na</strong>cznie ułatwiawyszukiwanie błędów.valgrind 1.3.6 Pozwala <strong>na</strong> kontrolę programu pod kątem poprawności zarządzania pamięcią.Przykładowo, możliwe jest z<strong>na</strong>lezienie fragmentów kodu źródłowego, któreodpowiedzialne są za dy<strong>na</strong>miczną alokację pamięci, która nie jest <strong>na</strong>stępnie zwalnia<strong>na</strong>,co prowadzi do tak zwanych “wycieków pamięci”. Potrafi wyszukać równieżinne rodzaje błędów, np. wykorzystanie wartości niezainicjalizowanej zmiennej czywarunek, który nigdy nie jest spełniony.


Dodatek DImplementacja skryptówułatwiających tworzenie pracyBardzo ważnym aspektem w trakcie przeprowadzania jakichkolwiek badań <strong>na</strong>ukowychjest przygotowanie odpowiedniego środowiska. Dotyczy to również <strong>na</strong>uk informatycznych,w szczególności dziedziny jaką jest przetwarzanie obrazów. Do środowiska pracy <strong>na</strong> pewnozaliczyć moż<strong>na</strong> skrypty, które automatyzują pracę. Choć w początkowej fazie wymagająpoświęcenia czasu <strong>na</strong> ich stworzenie, to w późniejszych etapach projektu ilość czasu,którą moż<strong>na</strong> dzięki nim zaoszczędzić jest nieporównywalnie duża w stosunku do czasuprzez<strong>na</strong>czonego <strong>na</strong> ich <strong>na</strong>pisanie. Biorąc pod uwagę, że większość zaawansowanych systemówinformatycznych składa się z wielu komponentów, skrypty pozwalające <strong>na</strong> zautomatyzowaneuruchamianie ich, weryfikację poprawności działania i sprawdzenie rezultatówokazują się bardzo przydatne w każdym cyklu życia projektu. Szczególnie użyteczne są wprzypadku modyfikacji jednego z komponentów czy wprowadzania nowej funkcjo<strong>na</strong>lności.W trakcie pisania niniejszej pracy, skrypty zostały wykorzystane dla dwóch zastosowań:automatyzacji przeprowadzania badań oraz tworzenia pliku z zawartością pracy.D.1 Budowanie pliku wynikowegoW czasie tworzenia dokumentu w języku Latex, zwykle systematycznie dokonuje siępróbnej kompilacji źródeł w celu oceny jakości otrzymywanego pliku pdf. Wraz z powiększaniemsię pliku źródłowego, jego edycja staje się coraz bardziej niewygod<strong>na</strong>, a kompilacjacoraz dłuższa.Aby rozwiązać te problemy, warto podzielić tworzony dokument <strong>na</strong> moduły. Pozwalato <strong>na</strong> przyśpieszenie i usystematyzowanie pracy. W Latex’u dostępne są różne metodywłączania plików do dokumentu głównego. W czasie tworzenia tej pracy wykorzystanyzostał pakiet subfile. Pozwala on <strong>na</strong> dołączanie plików źródłowych Latex’a modułówdo pliku źródłowego dokumentu głównego, z zachowaniem możliwości osobnej kompilacjizarówno modułów, jak i dokumentu głównego.Stosując względne ścieżki do plików z obrazami, <strong>na</strong>leży pamiętać o tym, aby poszczególnepliki źródeł Latex’owych z<strong>na</strong>jdowały się w strukturze katalogów <strong>na</strong> tej samej głębokości.Ścieżki powinny być skonstruowane w ten sposób, aby były poprawnie zinterpretowanezarówno przy budowaniu modułów, jak i dokumentu głównego.Przyśpieszenie pracy moż<strong>na</strong> też uzyskać dzięki zastosowaniu skryptu automayzującegobudowanie poszczególnych modułów i dokumentu głównego. W przypadku tego projektuwykorzystane zostało <strong>na</strong>rzędzie GNU Make. Dodtkowo wprowadzone zostało rozwią-


96 D. Implementacja skryptów ułatwiających tworzenie pracyzanie, dzięki któremu bibliografia jest poprawnie generowa<strong>na</strong> zarówno w modułach, jak igłownym dokumencie, co nie jest zapewnione w przypadku prostego wykorzystania komendybibliography. Rozwiązanie to polega <strong>na</strong> dołączeniu do każdego z modułów komendyinput{../../bib workaround.txt}, która powoduje włączenie zawartości podanegopliku do źródła dokumentu. Zawartość podanego pliku jest odpowiednio modyfikow<strong>na</strong> zpoziomu skryptu budującego, w zaleźności od tego, czy budowany jest główny dokument,czy moduł.D.2 Przeprowadzanie badańPodstawowym elementem środowiska do przeprowadzania badań jest aplikacja face-Detect (opisa<strong>na</strong> w 3.4) działająca w trybie wsadowym (batch). Następujące funkcjo<strong>na</strong>lnościaplikacji pozwoliły <strong>na</strong> stworzenie skryptów:• wszystkie parametry algorytmu mogą być przekazane w lini wywołania programu,• obrazy wynikowe mogą być zapisane <strong>na</strong> dysku,• czasy działania poszczególnych algorytmów są wypisywane <strong>na</strong> standardowym wyjściuaplikacji.Przygotowane środowisko wymaga, aby plan przebiegu poszczególnych eksperymentów zapisanybył w pliku konfiguracyjnym. Każdy eksperyment przeprowadzany jest <strong>na</strong> jednym<strong>obrazie</strong> wejściowym, liczba obrazów wyjściowych zależ<strong>na</strong> jest od parametrów podanych wpliku konfiguracyjnym.Rezultatem uruchomienia skryptu jest plik pdf, zawierający obrazy uzyskane w wynikudziałania algorytmu, sformatowany zgodnie ze wskazówkami zawartymi w pliku konfiguracyjnym.Struktura pliku Latex’owego, <strong>na</strong> podstawie którego tworzony jest pdf,oparta jest o pakiet Latex’a – subfile. Uwzględnia również odpowiedni sposób formatowaniaścieżek do plików, wspomniany w poprzedniej sekcji. Pozwala to <strong>na</strong> łatwe dołączaniewygenerowanych plików do dokumentu głównego.1 i n p u t f i l e =/home/ master / imgs /18. jpg2 START PARAMS3 showSkinRegion4 saveImages5 gammaGlobCorr=0.26 noImagesShow7 END PARAMS89 CAPTION 2=Wynik wykrywania .10 CAPTION 1=Wykryte obszary skory .11 CAPTION GLOBAL=\\ l a b e l { f i g : gammaGlobCorr0 2}Wykryte obszary skory itwarze dla $\\ t e x t {\\ t e x t b f {gammaGlobCorr}} = 0 . 2 $ .1213 DEFAULT WIDTH=200px14 WIDTH 1=0.4\\ textwidth15 WIDTH 2=0.4\\ textwidth16 RENAME RULE=e r o s i o n17 RENAME RULE=f i n a lListing D.1 Przykładowa postać pliku konfiguracyjnego, wykorzystywanego jako danewejściowe dla skryptu ułatwiającego przeprowadzanie badań.


D.2. Przeprowadzanie badań 97Przykładowy plik konfiguracyjny przedstawiony jest w listingu D.1. Zawiera on <strong>na</strong>stępującesłowa kluczowe:input file <strong>na</strong>zwa pliku z obrazem który poddany zostanie przetwarzaniu,START PARAMS z<strong>na</strong>cznik początku sekcji parametrów przekazywanych do aplikacjiw wywołaniu,END PARAMS z<strong>na</strong>cznik końca sekcji parametrów,CAPTION 1, CAPTION 2, ... podpisy kolejnych obrazów wynikowych w wygenerowanympliku Latex’a,CAPTION GLOBAL podpis całego elementu zawierającego obrazy w wygenerowanympliku Latex’a,DEFAULT WIDTH domyśl<strong>na</strong> szerokość, jaką będą miały obrazy wynikowe w wygenerowanympliku Latex’a,WIDTH 1, WIDTH 2, ... szerokości kolejnych obrazów wynikowych w wygenerowanympliku Latex’a,RENAME RULE reguły wykorzystywane do sterowania kolejnością umieszczania obrazóww wygenerowanym pliku Latex’a; <strong>na</strong>zwy obrazów wynikowych są przeszukiwanepod kątem zawartości podanych łańcuchów z<strong>na</strong>kowych, a <strong>na</strong>stępnie umieszczanew pliku wynikowym zgodnie z kolejnością występowania w pliku konfiguracyjnym.Sekcja parametrów może zawierać dowolne ustawienia, które przyjmuje aplikacja face-Detect, zgodnie z opisem z tabel 3.16, 3.17, 3.18, 3.19 i 3.20. Rezultat działania skryptuuruchomionego dla pliku konfiguracyjnego z listingu D.1 przedstawiony jest w listinguD.2. Po przetworzeniu do pliku pdf prezentuje się on tak jak <strong>na</strong> rysunku 4.3.1 \ documentclass [ . . / . . / core / p a r t s / core / core ] { s u b f i l e s }2 \ begin {document}3 \ begin { f i g u r e } [ htp ]4 \ c e n t e r i n g5 \ s u b f i g u r e [ Wykryte obszary skory . ] {6 \ i n c l u d e g r a p h i c s [ width =0.4\ textwidth ] { . . / auto imgs /00020/11 8 s k i n a f t e r e r o s i o n }7 \ l a b e l { f i g : . . / auto imgs /00020/1 1 8 s k i n a f t e r e r o s i o n }8 }9 \ s u b f i g u r e [ Wynik wykrywania . ] {10 \ i n c l u d e g r a p h i c s [ width =0.4\ textwidth ] { . . / auto imgs /00020/21 8 e x p e f i n a l }11 \ l a b e l { f i g : . . / auto imgs /00020/2 1 8 e x p e f i n a l }12 }13 \ l a b e l { myfigure }14 \ caption {\ l a b e l { f i g : gammaGlobCorr0 2}Wykryte obszary skory i twarzedla $\ t e x t {\ t e x t b f {gammaGlobCorr}} = 0 . 2 $ . }15 \end{ f i g u r e }16 \end{document}Listing D.2 Przykład źródła Latex’owego uzyskanego w wyniku urchomienia skryptu.


98 D. Implementacja skryptów ułatwiających tworzenie pracyD.3 Pomiary czasuDrugi z zaimplementowanych skryptów jest przydatny do badania wpływu poszczególnychparametrów algorytmów <strong>na</strong> czas ich działania. Wykorzystuje on skrypt opisanypowyżej, uruchamiając go określoną liczbę razy, a <strong>na</strong>stępnie obliczając średnią, odchyleniestandardowe, minimalny i maksymalny czas działania badanego algorytmu. Czas działaniaalgorytmu uzyskiwany jest <strong>na</strong> podstawie informacji wypisywanych przez aplikacjęfaceDetect <strong>na</strong> standardowe wyjście. Czasy te mierzone są z wykorzystaniem dedykowanychfunkcji, wchodzących w skład biblioteki OpenCV. Przykład pliku konfiguracyjnegoskryptu przedstawiony jest <strong>na</strong> listingu D.3. Pojawia się w nim nowe słowo kluczowe:NO LATEX GENERATION wyłączenie generacji pliku źródłowego Latex’a.W wyniku działania skyrptu otrzymywane są dane w postaci takiej, jak to przedstawionow listingu D.4. W kolumnie wypisane są czasy z poszczególnych przebiegów algorytmu,poniżej podany jest fragment źródła Latex’owego, zawierający wycinek tabeli z odpowiedniosformatowanymi wartościami średniej, odchylenia standardowego, minimalnego imaksymalnego czasu działania algorytmu sprośród 10 przebiegów.1 i n p u t f i l e =/home/ master / imgs /41. jpg23 START PARAMS4 noImagesShow5 printTimes6 runHaar7 b e S i l e n t8 END PARAMS910 NO LATEX GENERATIONListing D.3 Plik konfiguracyjny skryptu wykorzystywanego do przeprowadzania badańdotyczących czasu działania poszczególnych algorytmów.1 Haar d e t e c t i o n times :2 740.353 736.6234 744.6515 736.7286 741.0377 737.9028 736.2489 740.75110 739.18711 740.5451213 $\ bar { t }=739.402 $ &14 $\ sigma { t }=2.47724 $ &1516 $ t {min}=736.248 $ &17 $ t {max}=744.651 $ &Listing D.4 Wynik działa<strong>na</strong> skryptu wykorzystywanego do przeprowadzania badańdotyczących czasu działania poszczególnych algorytmów.


Bibliografia[1] AIKnowU – Face Recognition for Mobile Phones. https://github.com/octavian-sima/Face-Recognition/wiki/.[2] Face detection - pittsburgh pattern recognition. http://pittpatt.com.[3] GNU Scientific Library. http://www.gnu.org/software/gsl/.[4] R. Begg, R. Hassan. Artificial neural networks in smart homes. Designing Smarthomes: the role of artificial intelligence, 2006.[5] G. Bradski, A. Kaehler. Learning OpenCV. O’Reilly Media Inc., 2008.[6] V. Caselles, F. Catte, T. C. 1, F. Dibos. A geometric model for active contours inimage processing. Numerische Mathematik, 1993.[7] T. Chan, L. Vese. Active contours without edges. Image Processing, IEEE Transactionson, 10(2):266 –277, feb 2001.[8] W. Chen, T. Sun, X. Yang, L. Wang. Face detection based on half face-template.Electronic Measurement Instruments, 2009. ICEMI ’09. 9th Inter<strong>na</strong>tio<strong>na</strong>l Conferenceon image processing, strony 4–54 –4–58, aug. 2009.[9] S. Chlebicki, J. Kędzierski, M. Żarkowski. Control system for a social robot. XI KrajowaKonferencja Robotyki, Wrocław, 2010.[10] Y. Freund, R. E. Schapire. A decision-theoretic generalization of on-line learningand an application to boosting. Proceedings of the Second European Conference onComputatio<strong>na</strong>l Learning Theory, strony 23–37, London, UK, 1995. Springer-Verlag.[11] R.-L. Hsu, M. Abdel, A. K. Jain. Face detection in color images. Raport instytutowyMSU-CSE-01-7, Department of Computer Science, Michigan State University, EastLansing, Michigan, March 2001.[12] R.-L. Hsu, M. Abdel-Mottaleb, A. K. Jain. Face detection in color images. IEEETransactions on pattern a<strong>na</strong>lysis and machine intelligence, wolumen 24, may.[13] F. Huang, J. Su. Multiple face contour detection based on geometric active contours.Automatic Face and Gesture Recognition, 2004. Proceedings. Sixth IEEE Inter<strong>na</strong>tio<strong>na</strong>lConference on, strony 385 – 390, may 2004.[14] P. Jackway, M. Deriche. Scale-space properties of the multiscale morphologicaldilation-erosion. Pattern A<strong>na</strong>lysis and Machine Intelligence, IEEE Transactions on,18(1):38 –51, jan 1996.


100 BIBLIOGRAFIA[15] M. Jones, J. Rehg. Statistical color models with application to skin detection. ComputerVision and Pattern Recognition, 1999. IEEE Computer Society Conference on.,wolumen 1, strony 2 vol. (xxiii+637+663), 1999.[16] C. Kotropoulos, A. Tefas, I. Pitas. Frontal face authentication using morphologicalelastic graph matching. Image Processing, IEEE Transactions on, 9(4):555 –560, apr2000.[17] Y. H. Kwon, N. da Vitoria Lobo. Face detection using templates. Pattern Recognition,1994. Vol. 1 - Conference A: Computer Vision Image Processing., Proceedings of the12th IAPR Inter<strong>na</strong>tio<strong>na</strong>l Conference on, wolumen 1, strony 764 –767 vol.1, oct 1994.[18] J. Reinders. Intel Threading Building Blocks. O’Reilly Media Inc., 2007.[19] A. Rosenfeld, J. L. Pfaltz. Sequential operations in digital picture processing. J.ACM, 13:471–494, October 1966.[20] J. Ruiz-Sarmiento, C. Galindo, J. Gonzalez. Improving human face detection throughtof camera for ambient intelligence applications. Ambient Intelligence - Software andApplications: 2nd Inter<strong>na</strong>tio<strong>na</strong>l Symposium on Ambient Intelligence, 2011.[21] M. Ryoo, Y. ho Seo, H.-W. Jung, H. Yang. Affective dialogue communication systemwith emotio<strong>na</strong>l memories for humanoid robots. Affective computing and intelligentinteraction: first inter<strong>na</strong>tio<strong>na</strong>l conference, Beijing, 2005.[22] H. Schneiderman. Feature-centric evaluation for efficient cascaded object detection.Proceedings of the 2004 IEEE computer society conference on Computer vision andpattern recognition, CVPR’04, strony 29–36, Washington, DC, USA, 2004. IEEEComputer Society.[23] H. Schneiderman. Learning a restricted bayesian network for object detection. Proceedingsof the 2004 IEEE computer society conference on Computer vision and patternrecognition, CVPR’04, strony 639–646, Washington, DC, USA, 2004. IEEE ComputerSociety.[24] H. Schneiderman, K. T. A statistical method for 3d object detection applied for facesand cars. Inter<strong>na</strong>tio<strong>na</strong>l Conference on Computer Vision, 2000.[25] Y. Shi, J. Yang, R. Wu. Reducing illumi<strong>na</strong>tion based on nonlinear gamma correction.IEEE Inter<strong>na</strong>tio<strong>na</strong>l Conference on Image Processing, 2007.[26] W. Skarbek, A. Krupiczka, A. Przelaskowski, W. Rakowski. Multimedia. Algorytmyi standardy kompresji. Akademicka Oficy<strong>na</strong> Wydawnicza PLJ, 1998.[27] S. Suzuki, K. be. Topological structural a<strong>na</strong>lysis of digitized bi<strong>na</strong>ry images by borderfollowing. Computer Vision, Graphics, and Image Processing, 30(1):32 – 46, 1985.[28] J.-C. Terrillon, M. Shirazi, H. Fukamachi, S. Akamatsu. Comparative performanceof different skin chromi<strong>na</strong>nce models and chromi<strong>na</strong>nce spaces for the automatic detectionof human faces in color images. Automatic Face and Gesture Recognition,2000. Proceedings. Fourth IEEE Inter<strong>na</strong>tio<strong>na</strong>l Conference on, strony 54 –61, 2000.[29] G. Toussaint. Grids, connectivity and contour tracing.


BIBLIOGRAFIA 101[30] C. Tsai, W. Cheng, J. Taur, C. Tao. Face detection using eigenface and neuralnetwork. Systems, Man and Cybernetics, 2006. SMC ’06. IEEE Inter<strong>na</strong>tio<strong>na</strong>l Conferenceon, wolumen 5, strony 4343 –4347, oct. 2006.[31] P. Viola, M. Jones. Rapid object detection using a boosted cascade of simple features.Computer Vision and Pattern Recognition, 2001. CVPR 2001. Proceedings of the2001 IEEE Computer Society Conference on, wolumen 1, strony I–511 – I–518 vol.1,2001.[32] C. Zhan, W. Li, F. Safaei, P. Ogunbo<strong>na</strong>. Face to face communications in multiplayeronline games: A real-time system. Human-computer interaction: HCI applicationsand services: 12th inter<strong>na</strong>tio<strong>na</strong>l conference, Beijing, 2007.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!