Masarykova univerzita Fakulta informatiky
Detekce očí v obrazových datech
Bakalářská práce Petr Potěšil
Brno, podzim 2008
Prohlášení Prohlašuji, že tato práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj.
V Brně, dne 1. 12. 2008
...................................... Petr Potěšil
Poděkování Chtěl bych poděkovat panu RNDr. Stanislavu Bartoňovi, Ph.D., vedoucímu bakalářská práce, za jeho odborné rady a čas, který mi věnoval. Také chci poděkovat své rodině a přátelům za vydatnou podporu, bez které by tato práce nemohla vzniknout.
Shrnutí Práce se zabývá detekcí a lokalizací očí v obrazových datech. Textová část je věnována porovnání různých technik, které tento problém nějakým způsobem řeší. Cílem praktické části je implementace nejlepší nalezené metody.
Klíčová slova Detekce očí, lokalizace očí, vlnková transformace, support vector machine, SVM, Java
Obsah 1 Úvod....................................................................................................................................6 2 Rozdělení metod...............................................................................................................8 2.1 Aktivní metody........................................................................................................8 2.1.1 Použití infračerveného osvětlení.....................................................................8 2.2 Pasivní metody........................................................................................................8 2.2.1 Metody založené na porovnávání se šablonou................................................9 2.2.2 Metody založené na fotometrické podobnosti................................................9 2.2.3 Metody založené na charakteristických vlastnostech......................................9 3 Klasifikátory....................................................................................................................11 3.1 AdaBoost...............................................................................................................11 3.2 Support vector machine – SVM............................................................................12 4 Transformace obrazových dat......................................................................................14 4.1 Vlnková transformace...........................................................................................14 4.2 Reprezentace pixelů pomocí vektorů....................................................................14 5 Normalizace osvětlení....................................................................................................15 6 Algoritmy pro detekci očí..............................................................................................16 6.1 A robust algorithm for eye detection on gray intensity face without spectacles...16 6.2 Eye detecion algorithm utilizing edge-related geometrical information..............18 6.3 Robust precise eye location under probabilistic framework.................................19 6.4 Automatic eye localization in color images..........................................................20 7 Vybraná metoda..............................................................................................................22 7.1 Precise eye localization through a general-to-specific model definition..............22 7.1.1 Trénovací data a jejich upravení....................................................................22 7.1.2 Detekce..........................................................................................................24 7.1.3 Lokalizace.....................................................................................................25 7.1.4 Experimentální výsledky...............................................................................26 7.2 Implementace........................................................................................................26 7.2.1 Hlavní části aplikace.....................................................................................26 7.2.2 Použití programu...........................................................................................27 8 Závěr................................................................................................................................30 Literatura...........................................................................................................................31 Přílohy.................................................................................................................................33 A Obsah přiloženého CD............................................................................................33 B Ukázka testovaných dat...........................................................................................34
1 Úvod Detekce a rozpoznávání tváře, rozpoznání výrazu a emocí, sledování obličejů a další podobné problémy se těší v poslední době značné pozornosti. Nejrůznější aplikace, jako třeba autentizační systémy, které se s těmito problémy potýkají, jsou stále sofistikovanější a přesnější. Ale i přes velké úsilí je tato problematika pořád otevřená. Stále se objevují nové algoritmy přinášející nějakou zajímavou myšlenku. Jedním kamínkem v té složité mozaice je detekce a lokalizace oka. Dá se říct, že oči jsou nejdůležitější charakteristika tváře. Díváme-li se na obrázek lidského obličeje, největší pozornost věnujeme právě očím. Jejich tvaru, barvě a velikosti. Výhodou oproti ostatním rysům je i to, že oči jsou ve tváři dvě. Z jejich vzdálenosti se dá odhadnout poměrně přesně měřítko obličeje, a tedy i velikost dalších obličejových částí. Oči jsou také relativně málo náchylné k různým změnám. Například tvar úst se hodně mění při emocích nebo při slovním projevu. Problémy s detekcí obvykle nastanou, pokud jsou oči zavřené nebo při použití brýlí. S obroučkami a hlavně s odlesky skel se většina algoritmů těžko vyrovnává. Detekce a lokalizace očí je tématem této bakalářské práce. Není možné obsáhnout všechny dosud publikované algoritmy, a proto jsem vybral jen ty novější a při tom co možná nejvíc rozdílné. Snahou není jejich detailní popis, podle kterého by bylo možno je implementovat, ale spíš vysvětlení principů, na kterých jsou takové algoritmy založeny. Práci jsem rozdělil do osmi kapitol. První kapitolou je úvod. Druhá kapitola je zaměřená na zařazení algoritmů do několika kategorií, jejich stručnou charakteristiku a popsání výhod a nevýhod. Třetí kapitola je věnována klasifikátorům. Většina algoritmů, které řeší detekci očí, obvykle pracuje s nějakým klasifikátorem, a proto považuji za vhodné dva základní klasifikátory představit hned na začátku. Transformace obrazových dat je popsána v další kapitole. Metody pro detekci očí obvykle využívají některé vhodnější reprezentace obrázku než je pouze mapa pixelů různé intenzity. V této kapitole je popsána vlnková transformace a reprezentace obrázku pomocí vektorů. Pátá kapitola v krátkosti seznamuje s metodami pro normalizaci osvětlení. Při zpracování většího počtu obrazových dat je vhodné zajistit jejich podobnou úroveň osvětlení.
6
Následující kapitola představuje různé algoritmy, které řeší detekci a lokalizaci očí. Předposlední kapitola popisuje vybraný a implementovaný algoritmus. Také obsahuje detailnější popis implementace a použití programu. Závěr je věnován zhodnocení práce a poznámkám pro případné budoucí rozšíření a vylepšení.
7
2 Rozdělení metod Techniky pro detekci a lokalizaci očí se mohou rozdělit do dvou odlišných skupin [1]. Jednu skupinu tvoří aktivní metody a druhou skupinou jsou metody pasivní. V této kapitole stručně představuji principy, na kterých jsou tyto metody založeny.
2.1 Aktivní metody Aktivní metody jsou metody, které ke své činnosti využívají speciální osvětlení snímaného objektu. V podstatě se nějakým vhodným způsobem snaží ovlivnit podobu zkoumaného obrazu tak, aby se usnadnila lokalizace hledaných objektů. 2.1.1 Použití infračerveného osvětlení Při použití infračerveného osvětlení se lidská zornice jeví jako světlá. Tohoto efektu se dá úspěšně využít při její detekci [2]. Obvykle se nasnímají dva obrazy, jeden pod infračerveným světlem a druhý s obyčejným osvětlením. Pokud od sebe odečteme hodnotu pixelů, ležících na stejných místech, dostaneme obraz, kde jsou zornice výrazně světlejší oproti svému okolí. Hlavní výhoda této techniky spočívá v tom, že dokáže pracovat v reálném čase. Na snímcích z uzavřeného prostoru je velmi přesná, ale ve venkovním prostředí dochází často k falešným detekcím způsobeným různorodostí okolí. Nevýhodou je i nutnost použití infračerveného osvětlení. Díky své rychlosti má tato metoda uplatnění především při sledování pohybu očí a odhadování bodu, do kterého směřuje pohled. Snímání obrazu pod infračerveným světlem bývá realizováno pomocí malé kamery umístěné vedle monitoru.
2.2 Pasivní metody Pasivní metody nijak nezasahují do tvorby snímků. Ke své činnosti využívají například znalosti charakteristických vlastností hledaného objetu, porovnávání vstupu se šablonou nebo trénovacích algoritmů. Nejsou tedy závislé na zvláštních zařízeních, ale zpravidla nedosahují takové rychlosti.
8
2.2.1 Metody založené na porovnávání se šablonou Hlavní roli v této metodě hraje šablona, která je srovnávána se zadaným obrazem. Šablona je tvořena kolekcí bodů, zachycujících základní tvar hledaného objektu, v tomto případě lidského oka. Této metody se často využívá také pro lokalizaci tváře. V průběhu lokalizace se algoritmus snaží pomocí deformace předem nadefinované šablony najít její podobnost s objekty v daném obrazu. Metody založené na podobných principech jsou schopné dosáhnout dobrých výsledků, ale obvykle bývají velmi časově náročné. Nicméně se často používají například v kombinaci s rychlejšími metodami. 2.2.2 Metody založené na fotometrické podobnosti Jádrem těchto metod je obvykle nějaký klasifikátor. Klasifikátor je algoritmus, který je schopen se natrénovat na velkém množství dat, v našem případě obrázků očí, a poté s určitou přesností klasifikovat zadaná data. Trénovací množina se skládá z různých obrázků pořízených za rozmanitých světelných podmínek. Proto před samotným natrénováním je potřeba provést jisté úpravy, například normalizaci osvětlení. Algoritmus založený na natrénovaném modelu je možné neustále vylepšovat tím, že data, která nebyla uspokojivě vyhodnocena, zařadíme do trénovacích dat a znovu vytvoříme model pro klasifikátor. Příliš velký počet těchto trénovacích dat ale může vést k velké výpočetní složitosti při vytváření modelu. Nevhodným výběrem trénovacích dat může dále také dojít k přetrénování, kdy algoritmus výborně pracuje nad trénovacími daty, ale pro testovací data je nespolehlivý. Metod využívajících ke své činnosti klasifikátor je velké množství [3]. Zároveň jsou také asi jedny z nejvíce používaných. Mají velmi široké uplatnění. Nejsou však příliš rychlé, a proto se nehodí do zařízení s malým výpočetním výkonem, nebo do takových zařízení, kde je požadována okamžitá odezva. 2.2.3 Metody založené na charakteristických vlastnostech Tyto metody využívají charakteristické znaky hledaného objektu. Těmi mohou být například hrany, barevné rozložení nebo intenzita pixelů. Metoda, se kterou jsem se setkal a také popisuji v této práci, pouze vypočítá sumy intenzit pro jednotlivé oblasti a z jejich hodnot následně odhadne pozici hledaného objektu.
9
Nesporná výhoda je rychlost výpočtu. Nemusí se totiž procházet celý zadaný obraz a testovat zda aktuální pozice je nebo není okem. Na druhou stranu je tato metoda náchylná na různé rušivé objekty nebo asymetrie v tváři. Obroučky brýlí nebo obočí můžou často výrazně ovlivnit výsledek. Tato metoda se především využívá v aplikacích, ve kterých je velký důraz kladen na rychlost výpočtu. Je možné se s ní setkat i v kombinaci s jinou metodou, kdy je využita jako rychlá metoda pro pro první hrubý odhad a přesnější určení pozice je již přenecháno jinému algoritmu.
10
3 Klasifikátory Klasifikátory jsou učící algoritmy schopné po dostatečném natrénování klasifikovat zadaná data. Těmito technikami se detailně zabývá obor informatiky zvaný strojové učení [4]. V následujících dvou podkapitolách se věnuji dvěma klasifikátorům, které jsou nejčastěji využívané pro detekci a lokalizaci očí.
3.1 AdaBoost AdaBoost (Adaptive Boosting) je algoritmus, který je schopen se natrénovat na množině dat a následně klasifikovat zadaná testovací data. Základní myšlenka spočívá v tom, že se zkombinuje několik slabých klasifikátorů tak, aby výsledný klasifikátor měl požadovanou přesnost. Slabý klasifikátor je v tomto případě takový klasifikátor, jehož přesnost je jen o něco málo větší než 50%. Výsledný klasifikátor H(x) je lineární kombinací slabých klasifikátorů ht(x).
Ilustrace 1: Převzato z [6] Nejprve má klasifikátor o něco málo vetší přesnost než 50%. Jak se postupně přidávají slabé klasifikátory s podobnou přesností, celková schopnost klasifikace se zvyšuje. Na ilustracích 6, 7 a 8 jsou příklady dvou slabých klasifikátorů a jednoho silného, který vznikl jejich kombinací.
Ilustrace 2: Slabý klasifikátor
Ilustrace 3: Slabý klasifikátor
Ilustrace 4: Silný klasifikátor
Oproti klasickému trénovacímu algoritmu boostingu [7], který provádí trénovaní na množinách aniž by některé upřednostňoval, využívá navíc AdaBoost vážení trénovací množiny. Při špatně klasifikovaných datech se
11
váha zvýší. Při správně klasifikovaných datech se naopak sníží. Když se poté vybírá další slabý klasifikátor, vybírá se ten s vyšší váhou. Tím se algoritmus posiluje tam, kde jeho klasifikační schopnost není tak vysoká. Přidávají se jen takové slabé klasifikátory, které mají úspěšnost větší než 50%. Tím je zaručeno, že bude celý proces trénování konvergovat.
3.2 Support vector machine – SVM Metoda Support vector machine [5] klasifikuje data pomocí nadroviny, která rozděluje trénovací data do dvou kategorií. Snahou je získat takovou rozdělovací nadrovinu, která je od jednotlivých kategorií trénovacích dat co nejvíce vzdálená. Klasifikační úloha zahrnuje trénování a testování dat. Trénovací data jsou tvořena dvojicemi (xi, yi), i = 1, ..., k kde xi ϵ Rn a y ϵ {1, -1}k . Xi je vektor dimenze n popisující vlastnosti daného prvku. Yi určuje do které množiny vektor patří. Metoda SVM je ze své přirozenosti binární. Rozděluje data do dvou množin s příznaky 1 a -1. Testovací data tvoří pouze vektory x. Cílem klasifikátoru je podle hodnot vektoru určit jeho příznak y. Jedním z problémů je nalezení takové dělící nadroviny, která by správně rozdělila trénovací data, a přitom byla od těchto dat co možná nejvíce vzdálená. Větší vzdálenost od trénovacích dat zajišťuje lepší výsledky nad testovacími daty. Na následujících ilustracích č. 5 a č. 6 je pro jednoduchost uvažována situace ve 2D. Vektorům, které jsou nejblíže nadroviny, a jsou proto důležité při její konstrukci, se říká support vectors. Trénovací data obvykle není možné takto jednoduše rozdělit. Místo toho, aby se použila nějaká nelineární křivka, namapují se data do vyšší dimenze, kde se data rozdělí nadrovinou. Původně lineárně neseparovatelná data se tak stanou lineárně separovatelná. Příklad namapování do vyšší dimenze je na ilustracích 3 a 4.
Ilustrace 7: Neseparovatelná data
Ilustrace 5: Špatný Ilustrace 6: Lepší klasifikátor klasifikátor
12
Ilustrace 8: Převedení dat do vyšší dimenze
Ke zjednodušení a vyřešení klasifikačního problému slouží několik různých jádrových funkcí (polynomial, radial basis function, sigmoid). Výběr funkce je závislý na povaze trénovacích dat. Každé jádro má zpravidla několik parametrů, které je potřeba správně odhadnout. Bohužel nejspolehlivější metoda pro výpočet těchto parametrů je taková, že pro každou kombinaci parametrů se vygeneruje model a použije se ten nejúspěšnější. Tento postup může být velmi časově náročný.
13
4 Transformace obrazových dat Množství metod, které řeší detekci a lokalizaci oka, nepracuje přímo s klasickými obrázky. Obyčejný obrázek je hůře uchopitelný a často obsahuje i velké množství informace, která může být pro daný účel zbytečná. Místo toho je snahou zadaná data reprezentovat nějakou vhodnější formou.
4.1 Vlnková transformace Vlnková transformace je používána především pro kompresi obrazu. Tuto transformaci používá například kompresní formát JPEG2000. Výstupem vlnkové transformace jsou koeficienty popisující rozložení hran.
Ilustrace 9: Tvary koeficientů Velikost koeficientu se vypočítá jako rozdíl sum pixelů pod tmavou a světlou částí, které jsou zobrazeny v ilustraci č. 9. Každý koeficient je identifikován čtyřmi parametry. Hodnoty X a Y určují pozici v obrázku. Měřítko je určeno velikostí čtvercové části obrázku, ze které je koeficient počítán. Čtvrtý parametr udává orientaci hrany. Jednotlivé koeficienty se mohou překrývat, čímž se zvýší jejich počet. Například pro obrázek o velikosti 16 x 16 pixelů vznikne celkem 852 koeficientů. Z tohoto velkého množství se pak obvykle vyberou jen ty koeficienty, které stačí k přesné reprezentaci objektu na obrázku. Podle velikostí koeficientů se dá snadno odhadnout, které jsou důležité a které nikoliv. Koeficienty s vyšší hodnotou popisují výraznější hrany a koeficienty s nízkými hodnotami popisují plochy bez hran.
4.2 Reprezentace pixelů pomocí vektorů Se zajímavou myšlenkou přišel algoritmus popisovaný v kapitole 5.2. I tady, stejně jako u vlnkové transformace, hrají hlavní úlohu hrany. Na jednotlivé pixely v zadaném obrázku se nahlíží jako na vektory směřující k nejbližší hraně. Velikost vektoru je vzdálenost pixelu od této hrany. Pro vytvoření této mapy vektorů je potřeba využít některého hranového detektoru a následně procházet celý obraz pixel po pixelu a vypočítat příslušné vektory. Metoda pro lokalizaci poté využívá jak mapu vektorů, tak obrázek s vyznačenými hranami.
14
5 Normalizace osvětlení Bohužel obrázky, ve kterých se pomocí různých technik vyhledávají objekty, nejsou vždy pořizovány za stejných podmínek. Především osvětlení může být velice proměnlivé. Téměř vždy před jakýmkoliv vyhledáváním objektů v obraze je potřeba provést nějakou úpravu vstupního obrázku, aby rozdíly v osvětlení negativně neovlivnily výsledek. Jedna z nejjednodušších metod se jmenuje Linear stretch [8]. Její princip je nejlépe vidět na histogramu daného obrázku. V této metodě se celý histogram roztáhne od nulové až po maximální intenzitu. Jednotlivé intenzity jsou tedy od sebe více vzdálené, takže se obrázek jeví kontrastnější. I když se jedná o velmi jednoduchou operaci, špatně exponované objekty mohou aplikováním této metody velmi dobře vyniknout. Jedna z technik pro úpravu intenzity pixelů je rovnoměrné rozložení histogramu. Tato technika je známější pod anglickým výrazem histogram equalization [8]. Snahou je získat obrázek, kde jsou pixely s různými hodnotami zastoupeny ve stejném množství. V histogramu se tato operace projeví tak, že intenzity s malým množstvím pixelů se k sobě přiblíží a intenzity s velkým množstvím pixelů se naopak oddálí. V průměru se tedy jejich počty dostanou na stejnou úroveň. Další používanou metodou je nelineární logaritmická transformace. Jednotlivé hodnoty pixelů v transformovaném obrázku jsou výsledkem logaritmické funkce aplikované na původní obrázek. Nízké hodnoty prudce narostou a vyšší hodnoty zůstanou téměř nezměněny. O krok dál je metoda LogAbout [9], která nejprve aplikuje na vstupní obrázek High-Pass filtr [10], a poté až logaritmickou funkci. High-Pass filtr je schopen odfiltrovat nízké frekvence a ponechat vysoké. Výsledný obrázek si tak zachová více detailů. Gama korekce je jednoduchá transformace, která také mění intenzitu pixelů v závislosti na její původní hodnotě. Míra zvýšení nebo snížení intenzity závisí na volitelném parametru. Gama korekce je definována vzorcem: f(x, y) = I(x, y)1/γ .
15
6 Algoritmy pro detekci očí Smyslem následujících kapitol je stručné popsání různých algoritmů, které řeší detekci a lokalizaci oka. Nejde o detailní rozbor algoritmů, ale spíš o vysvětlení základních principů na kterých jsou založeny. Snažil jsem se vybrat metody, které dosahují dobrých výsledků, a přitom jsou co možná nejodlišnější. K jejich přesnému a komplexnímu porovnání by bylo potřeba každou metodu implementovat a všechny otestovat na jednotných datech. To však není smyslem práce. V každé kapitole se pouze snažím v závěru prezentovat výsledky, kterých dosáhli sami autoři algoritmu. Úspěšnost algoritmů pro detekci a lokalizaci očí bývá většinou uváděna v procentech. Důležitý údaj je také maximální možná povolená
∣ ,∣Cr − Cr ∣ / ∣Cl −Cr∣ . Kde Cl a Cr jsou skutečné chyba: d eye = max ∣Cl − Cl a Cr . pozice levého a pravého oka. Nalezené pozice jsou značeny Cl Tyto body jsou znázorněny na ilustraci č. 10.
Ilustrace 10: Pozice nalezených očí oproti skutečným Existuje uznávané pravidlo, které říká, že pro správný odhad pozice očí by měla být chyba deye < 0.25. Pokud by se připustila chyba větší, další případně navazující algoritmy by už touto chybou byly příliš ovlivněné.
6.1 A robust algorithm for eye detection on gray intensity face without spectacles Algoritmus popisovaný v [1] je založen na kombinaci dvou základních principů. A sice porovnávání se šablonou a využití určité charakteristické vlastnosti obrazu lidského oka. Z každého přístupu se snaží vzít jen to pozitivní a vyhnout se tak například časové náročnosti. Nejdříve se rychlou metodou zhruba zjistí poloha očí, a poté se pomalejší a přesnější metodou, založenou na porovnávání se šablonou, přesně zjistí střed každého oka. Tím, že tato pomalejší metoda pracuje v již předem odhadnutých oblastech,
16
se ušetří značné množství výpočetních operací oproti tomu, když bychom se ji snažili aplikovat na celý vstupní obrázek. Hrubé odhadnutí pozice očí v zadaném vstupním obrázku se provede následujícím způsobem. Nejprve se vypočítá gradient obrázku. Dále se provede projekce podél os X a Y. Algoritmus se snaží využít toho, že v horizontálním a vertikálním směru je v očních oblastech velké množství přechodů různých intenzit. Pozice těchto míst se dá poměrně jednoduše odhadnout právě pomocí projekcí. Úprava vstupního obrázku a projekce jsou znázorněny v ilustraci č. 11
Ilustrace 11: Vstupní obrázek, gradient, projekce podél os X a Y, převzato [1] Po hrubém odhadu pozic následuje přesnější určení středu oka pomocí porovnávání výřezů v okolí nalezených bodů se šablonou. Je to pomalá metoda, ale již se nemusí aplikovat na celý vstupní obrázek. Velikost šablony se nastaví podle toho, jak jsou od sebe vzdáleny předem nalezené oblasti. Dále se v těchto oblastech prochází jednotlivé pixely a na obrázek se přikládá šablona oka. Jednotlivé body jsou ohodnoceny podle míry rozdílu intenzit pixelů na šabloně a příslušných pixelů v obrázku. Po projití všech uvažovaných bodů se vybere ten bod, při jehož porovnání byla nalezena největší podobnost a prohlásí ze za střed oka. Prezentovaná metoda dosahuje uspokojivých výsledků. Při jejím testování bylo dosaženo úspěšnosti kolem 95%. Testováno bylo 227 obličejů bez brýlí. Rychlost metody implementované v Matlabu se pohybuje zhruba kolem jedné vteřiny na zadaný vstupní obrázek. Metoda se však ukázala jako velmi slabá pro obrázky obsahující obličeje s brýlemi. Především díky odleskům skel není možné pomocí šablony přesně najít středy očí.
17
6.2 Eye detecion algorithm utilizing edge-related geometrical information Tento algoritmus [11] byl poprvé publikován v roce 2006. Je založen na využití geometrické informace v tváři a obsahuje několik zajímavých inovací. Na pixely v obraze nahlíží jako na vektory směřující k nejbližší hraně. Algoritmus k detekci využívá právě velikostí a úhlů těchto vektorů. Metoda pracuje ve dvou úrovních. Nejdříve se s využitím předem vytvořeného modelu přibližně určí oblast kde se nachází oči, a poté se pomocí sumarizace pixelů v horizontálním a vertikálním směru vypočítají středy očí. V každém obrázku, který vstupuje do algoritmu, ať už slouží pro vytvoření modelu nebo pro samotnou detekci, jsou nejprve nalezeny hrany. Následně se pro všechny pixely vypočítá vektor směřující k jeho nejbližší hraně. Jeden bod tedy uchovává informaci o velikosti a úhlu vektoru. V ilustraci č. 12 je znázorněn vstupní obrázek, detekované hrany, velikosti vektorů a úhly vektorů.
Ilustrace 12: Transformace vstupu, převzato [11] Pro vytvoření modelů levého a pravého oka je použito 58 obrázků různých tváří. Po jejich transformaci se pomocí PCA [12] spočítají vlastní vektory, které budou tvořit model lidského oka. Jeden trénovací obrázek je transformován na mapu velikostí a mapu úhlů. Každý obrázek obsahuje levé a pravé oko. Celkem je tedy vytvořeno 4 x 58 vlastních vektorů. Vstupní obrázek je nejprve zmenšen na příslušné měřítko. Následně se prochází bod po bodu a jednotlivé výřezy se porovnávají s modelem. Za oko se považuje ten výřez, který se nejvíce podobá modelu. Aby se celý proces urychlil, hledají se oči jen v horní polovině zadaného obrázku. Pravé oko se hledá v pravé a levé oko v levé části. Před samotným určením přesného středu nalezených očí se provede odstranění případných odlesků. Všechny oblasti, světlejší než zadaný práh a menší než osm pixelů, jsou považovány za odlesk a jsou přebarveny průměrnou barvu svého okolí. Tento krok se samozřejmě týká pouze předem
18
nalezených očních oblastí. Odstraněním odlesků se zvýší přesnost při následném hledání středu. Pro přesnou lokalizaci očí se využívá faktu, že v obrázku oka je podél osy X a Y velké množství světlých a tmavých přechodů. Horizontální osa hledaného bodu se zjistí následujícím způsobem. Každému řádku obrázku oka se přiřadí jedna hodnota, která se vypočítá jako suma rozdílů intenzit sousedních pixelů v tomto řádku. Do úvahy se vezmou tři řádky s nejvyšší hodnotou a prostřední z nich se prohlásí za horizontální osu oka. Ten samý způsob, s výjimkou toho, že místo řádků jsou brány v potaz sloupce, je použit pro odhadnutí vertikální osy. Průsečík os je hledaným středem. Tato metoda dosahuje velmi dobrých výsledků. Autoři uvádějí její úspěšnost kolem 97% pro chybu, která je ještě akceptovatelná pro případné následující algoritmy. Velkou výhodou je, že výrazně neztrácí přesnost ani při zavřených očích nebo při použití brýlí. Autoři bohužel neuváděj časovou náročnost. Vzhledem k tomu, že pro každý pixel se počítá jeden vektor směřující k nejbližší hraně, je možné, že tato prezentovaná metoda bude poměrně pomalá.
6.3 Robust precise eye location under probabilistic framework Jako většina algoritmů, které řeší detekci očí, i tento algoritmus popisovaný v [13] se snaží rozdělit problém do několika jednodušších kroků. Vstupem je obrázek s obličejem. Následně první klasifikátor najde kandidáty očí, a po té druhý klasifikátor určí, který z kandidátů je nejpravděpodobnějším středem oka. Přičemž nepracuje pouze nad jednotlivými kandidátními body, ale vytváří dvojice těchto bodů z levé a pravé strany tváře. Prvním krokem je co možná nejpřesnější rozdělení obličeje na pravou a levou část. Díky znalosti, že oční oblasti obsahují hodně přechodů různých intenzit, je výhodné použít projekci podél vertikální osy. Z výsledných hodnot se dá dobře odhadnout kudy prochází pomyslná osa obličeje. První klasifikátor pracuje samostatně v levé a pravé části obličeje. Kvůli ušetření výpočetního času je navíc brána do úvahy pouze horní polovina vstupního obrazu. Jako klasifikátor byl vybrán AdaBoost, který byl natrénovaný více než šesti tisíci obrázky očí. Obrázky z této trénovací množiny jsou reprezentovány Haarovými příznaky. Tento příznak je v podstatě informace o přítomnosti hrany, její orientaci a velikosti. Klasifikátor je nastaven tak, aby zachytil co největší počet kandidátních bodů, a
19
to i za cenu velkého počtu nesprávných detekcí. V tuto chvíli totiž ještě nejde o přesnou pozici očí, kterou má na starosti až druhý klasifikátor. V dalším kroku algoritmu se vytvoří všechny kombinace dvojic kandidátních bodů z levé a pravé části. Druhý klasifikátor pracuje s těmito dvojicemi, ve kterých předpokládá přítomnost levého a pravého oka. V původním návrhu algoritmu je použit AdaBoost. Nicméně je možné se setkat i s algoritmem, který tento krok řeší pomocí SVM klasifikátoru. Pro zvýšení robustnosti se nepoužije pouze nejlepší nalezená dvojice, ale průměrná pozice tří nejlepších nalezených dvojic. Pro chybu menší než 0.25, je přesnost algoritmu kolem 98%. Přesnost by se neměla příliš snižovat ani s obličeji při různých osvětleních nebo s brýlemi. Samozřejmě záleží na trénovacích datech. Rychlost výpočtu na procesoru 2.4 GHz je v řádu desítek ms.
6.4 Automatic eye localization in color images Tato metoda prezentovaná v [14] nepracuje s klasifikátory ani s předem vytvořenými šablonami. Hlavní myšlenkou je využití různé barevnosti obličejových částí. Prvním krokem je odfiltrování kůže a pokud možno i dalších částí obličeje kromě očí. Dále se nalezené kandidátní body sdruží do clusterů a zjistí se jejich střed. V posledním kroku se rozhodne, které z clusterů představují oči. Tvář se skládá z kůže a dalších částí, jako jsou například oči, obočí, nos a vousy. Níže uvedený filtr je schopen rozlišit právě tyto části od kůže. Filtr a jeho aplikace je znázorněna v ilustraci č. 13. Oči, které nás zajímají, se po aplikaci filtru jeví jako výrazně tmavší oproti barvě kůže. Obrázek se poté upraví tak, aby v histogramu byly intenzity rozloženy co možná nejrovnoměrněji. V takovém obrázku se již můžou pomocí prahové hodnoty vybrat hledané oblasti.
Ilustrace 13: Filtr pro nalezení očních oblastí a jeho aplikace . Převzato [14] Nyní je rozlišeno několik skupin bodů. Dvě skupiny by měli reprezentovat hledané oči. Další skupiny mohou být v místě obočí, nosních dírek
20
nebo úst. Pro zjištění středů těchto skupin bodů se použije následující postup. Je vygenerováno několik náhodných středů, které se v každém kroku iterace přiblíží k bodům v jednotlivých skupinách. Algoritmus se zastaví tehdy, když se tyto středy přestanou pohybovat, nebo když se začnou pohybovat mezi různými skupinami. Obvykle je dostatečných přibližně pět iterací. V posledním kroku se vyberou dvě skupiny, které představují oči. Odstraní se příliš velké i příliš malé skupiny bodů, které pravděpodobně jsou šumem nebo jsou v místě, kde se nachází vlasy či obočí. Dále se vezmou v úvahu pouze ty skupiny, které jsou v horní levé a horní pravé části obrázku. Pro chybu menší než 0.1 dosahuje algoritmus úspěšnosti 93%. Díky své efektivnosti je vhodný pro nízkoúrovňová zařízení, kde je kladen důraz na rychlost výpočtu.
21
7 Vybraná metoda Vybrat správný algoritmus není úplně snadné vzhledem k jejich počtu a jejich podobným vlastnostem. Za dobrou metodu považuji tu, která dosahuje úspěšnosti větší než 95% pro chybu menší než 0.25. Užitečná vlastnost je také možnost stálého vylepšování detekčních schopností s ohledem na testovací data. Také je třeba, aby byl algoritmus schopný dosahovat správných výsledků v rozumném čase. Pro samotnou implementaci jsem si vybral algoritmus Precise eye localization through a general-to-specific model definition [15]. Co se týče přesnosti, patří podle prezentovaných výsledků mezi nejlepší. Pozitivní také je, že byl testován na velkém množství databází obrázků a na všech dosahoval podobných výsledků. Je také možné dodatečně upravovat jeho detekční i lokalizační schopnost. Stačí přidat nové vzory do množiny testovacích dat a znovu vytvořit model. Jedinou nevýhodou může být vetší časová náročnost výpočtu, která dosahuje jednotek sekund.
7.1 Precise eye localization through a general-tospecific model definition Tento algoritmus, který jsem se rozhodl implementovat, je typickým zástupcem algoritmů založených na fotometrické podobnosti. Ke své správné funkci je potřeba jeho natrénování na dostatečně velké množině trénovacích dat. Může se jednat až o tisíce obrázků. Podle těchto dat se dá velmi ovlivnit a případně dodatečně upravovat výsledná lokalizační schopnost. Algoritmus je rozdělen do dvou modulů. První modul řeší detekci očí v zadaném obrázku a dá se využít i jako validátor obličeje. Druhý modul je určený k přesné lokalizaci středu očí. Obě části jsou řešené pomocí SVM klasifikátorů. Metoda samotná nepracuje přímo s obrázky, které jsou zadány na vstupu, ale pracuje pouze s vybranými koeficienty spočítanými pomocí vlnkové transformace. 7.1.1 Trénovací data a jejich upravení Oba SVM klasifikátory, které mají na starost detekci a lokalizaci, jsou natrénovány několika tisíci obrázky, které byly před samotným procesem trénování převedeny do stupnice šedi a transformovány na velikost 16 x 16 pixelů. Tato data jsem získal z databáze patřící laboratoři vyhledávání a dialogu na FI a z databází obličejů BioID1 a Yale Face2. Celkem jsem pro
1 http://www.bioid.com/downloads/facedb/index.php 2 http://cvc.yale.edu/projects/yalefaces/yalefaces.html 22
trénovaní klasifikátorů použil vzory vytvořené z přibližně 2000 obrázků obličejů. Trénovací data jsou pro každý klasifikátor rozdělena do pozitivní a negativní množiny. Negativní množina je několikrát větší než pozitivní. Je to z toho důvodu, že se z obličeje dají získat pouze dvě oči, které spadají do pozitivní množiny, zatímco negativních vzorů je možné vybrat mnohem víc. Pro detekci je pozitivní trénovací množina tvořena obrázky očí. Velikost těchto vzorů odpovídá vzdálenosti očí v obličeji, ze kterého jsou tyto obrázky extrahovány. Na obrázku je tedy obvykle patrná i část nosu a obočí. Negativní trénovací data obsahují ostatní obličejové části a pozadí. Převážně jsou tvořena obrázky nosu, obočí, rtů, vlasů apod. Z jednoho obrázku obličeje se vybírají dva pozitivní a deset negativních vzorů. Ilustrace 14 a 15 zobrazují pozitivní a negativní vzory.
Ilustrace 14: Pozitivní vzory
Ilustrace 15: Příklad několika negativních vzorů
Modul pro lokalizaci získává své pozitivní i negativní vzory z pozitivních vzorů vybraných pro detekci. Předpokládá se, že detektor správně nalezl oblast ve které se nachází oko a nyní je třeba lokalizovat střed oka. Obrázky mají poloviční velikost a jsou vybírány tak, že pozitivní vzory jsou tvořeny pouze okem ležícím přesně ve středu a negativní vzory jsou náhodně o nějakou nenulovou vzdálenost posunuté. Na ilustracích 16 a 17 je znázorněno, jakým způsobem se vybírají vzory pro lokalizaci.
Ilustrace 16: Pozitivní vzory
Ilustrace 17: Příklad několika negativních vzorů
Jak již bylo v kapitole o vlnkové transformaci zmíněno, z obrázku o velikosti 16 x 16 pixelů je vygenerováno 852 koeficientů. Značné množství těchto koeficientů ovšem nese jen zanedbatelnou část informace o tvaru sledovaného objektu, a proto je proveden výběr těch nejdůležitějších.
23
Pro první klasifikátor, který řeší detekci, se množina koeficientů zmenší o ty koeficienty, které jsou počítané nad nejmenším výřezem, tedy nad plochou 4 x 4 pixely. Detekce není tak náročná na detail oproti lokalizaci, která vybírá nejdůležitější koeficienty z celé množiny. Prvním krokem pro upravení trénovacích dat je změna velikosti všech obrázků na požadovanou velikost. Dále jsou barvy trénovacích obrázků převedeny na odstíny šedi a také je provedena normalizace osvětlení. Pro normalizaci osvětlení existuje množství metod. Některé z nich jsou uvedeny v příslušné kapitole. Já jsem využil metodu LogAbout, protože dosahuje dobrých výsledků a je snadné ji implementovat. Pro každý obrázek z trénovací množiny jsou spočítány koeficienty vlnkové transformace. Koeficientů je příliš mnoho, a proto se vyberou jen ty nejdůležitější, které nesou nejvíce informace. Jejich výběr se provede následujícím způsobem. Vytvoří se průměr ze všech trénovacích obrázků tak, že se sečtou všechny koeficienty s odpovídajícími parametry a výsledek je vydělen počtem obrázků v trénovací množině. Tyto průměrné koeficienty se seřadí podle velikosti. Vznikne posloupnost koeficientů uspořádaná podle toho, jak moc daný koeficient reprezentuje hranu. Využijí se jak koeficienty s velkými hodnotami, které popisují výrazné hrany, tak koeficienty, které se blíží k nule. Ty naopak reprezentují plochy bez hran. Pro lokalizaci je třeba použít alespoň tří set koeficientů, zatímco pro detekci jich stačí zhruba sto. Z připravených koeficientů jsou vytvořeny soubory obsahující vektory, které reprezentují jednotlivé obrázky. Jeden vektor je tvořen vybranými koeficienty. Pomocí těchto vektorů se vytváří modely pro detekci a lokalizaci. 7.1.2 Detekce Modul pro detekci předpokládá jako svůj vstup obrázek s parametry, které určující pozici obličeje a jeho rozměry. Počítá se s možností chyby způsobenou detektorem obličeje, a proto se celá detekce provádí nad třemi různými měřítky. Hlavní částí modulu pro detekci je SVM klasifikátor natrénovaný na obrázcích částí obličeje. Aby algoritmus ušetřil čas, neprochází zadaný obrázek bod po bodu, ale bere v úvahu pouze body ležící na hranách. Z toho důvodu je před samotnou detekcí použit hranový detektor. V samotné implementaci jsem toto řešil pomocí konvoluce vstupního obrázku s konvolučním jádrem Laplaceova filtru prezentovaném v [16]. V paměti se tedy uchovává původní vstupní obrázek, ze kterého jsou vybírány a testovány podoblasti a obrázek
24
s vyznačenými hranami. Případně by stačilo držet v paměti pouze seznam bodů, ležících na hranách. Body, které leží na hranách se postupně prochází a z původního obrázku se v těchto místech vybírá čtvercové okolí. Velikost by měla odpovídat vzdálenosti jaká je mezi očima ve vstupním obrázku. Tato vzdálenost je odvozena od zadaných rozměrů tváře. Čtvercový výřez je zmenšen na velikost 16 x 16 pixelů, převeden na odstíny šedé a jsou spočítány koeficienty vlnkové transformace. Na základě hodnot těchto koeficientů provede první klasifikátor porovnání s natrénovaným modelem. Celý postup je proveden pro měřítka 1, 0.8 a 1.2. Tím se eliminuje případná drobná chyba face detektoru. Pokud klasifikátor rozhodne, že daná oblast je okem, aktuální bod se označí jako kandidátní bod. Přičemž je také zaznamenáván i počet kladných detekcí pro tento bod. Počty kladných detekcí jsem ukládal do zvláštní matice. V matici vzniknou dvě skupiny bodů s hodnotami od jedné do tří. Je potřeba tyto oblasti rozlišit a vypočítat jejich těžiště, která představují pozice očí. Rozlišení oblastí není těžké vzhledem k tomu, že by měli být odděleny prázdným místem a každá by měla být na jedné straně pomyslné tváře. Těžiště jsem hledal následujícím způsobem. V prvním kroku je těžiště vloženo doprostřed oblasti tvořené skupinou bodů. V každé iteraci se spočítá suma nad tímto bodem a pod tímto bodem a těžiště se posune do podoblasti s vyšší sumou. Stejně se postupuje i ve vertikálním směru. Cyklus končí když se pohyb těžiště zastaví, nebo se pohybuje mezi dvěma body. Výstupem detekce jsou dva body označující polohu očí. Dále je vhodné uchovávat informaci o tom, kolikrát byl klasifikátor úspěšný pro jednotlivá měřítka. Této znalosti se využije pro vylepšení lokalizační schopnosti. 7.1.3 Lokalizace Lokalizace se od předcházející detekce příliš neliší. Střed oka se hledá pouze v okolí bodů nalezených modulem pro detekci. Neberou se do úvahy pouze body, které leží na hranách, ale všechny body v předem nalezené oblasti. Jde o to, aby byla lokalizace co nejpřesnější a také už se nemusí procházet celý vstupní obrázek ale pouze malá oblast. Podoblasti, ze kterých se vybírají koeficienty pro SVM klasifikátor, by měli být čtvercové o velikosti odpovídající poloviční vzdálenosti mezi očima. Tato vzdálenost odpovídá poloviční vzdálenosti použité při detekci a navíc je možné její odhad ještě zpřesnit podle toho, jak byl úspěšný první SVM klasifikátor pro jednotlivá měřítka.
25
Následující postup je ekvivalentní s detekcí. Naleznou se kandidátní body a zjistí se poloha jejich těžiště. Není třeba již provádět rozdělení množin kandidátních bodů, protože v každé oční oblasti vzniká pouze jedna samostatná množina. 7.1.4 Experimentální výsledky Prezentovaná detekční schopnost prvního modulu se pohybuje kolem 97%. Možná chybová hranice byla nastavena na 0.25. Maximální chyba pro lokalizaci byla nastavena na 0.05. Lokalizační schopnost pro tuto chybu je přibližně 70%. V obou případech samozřejmě také záleží na množině testovacích dat. Rychlost prvního modulu byla zhruba 4s. Lokalizace může být až třikrát pomalejší. Měření se provádělo na běžném počítači Pentium4 a metoda byla implementována v Javě. Modely pro detekci a lokalizaci byly vytvořeny pomocí vzorů extrahovaných z 1600 obrázků obličejů. Pro tento účel využili autoři algoritmu databází FERET3, BANCA4 a vlastní databáze obrázků tváří. Bylo provedeno otestování na šesti různých databázích obličejů a u všech algoritmus dosahoval srovnatelných výsledků.
7.2 Implementace Aplikace je implementována v jazyce Java ve verzi 1.6.0. Java byla vyvinutá firmou Sun Microsystems již v roce 1995 a v současné době je zřejmě nejrozšířenějším objektově orientovaným jazykem. Aplikace napsané v Javě jsou přenositelné na všechny platformy, kde existuji příslušná Java Virtual Machine. To byl také primární důvod pro vybrání tohoto jazyka. 7.2.1 Hlavní části aplikace Zadaný problém jsem rozčlenil do dvou samostatných projektů a několika knihoven. Jeden projekt se stará o vytvoření modelu a druhý o detekci a lokalizaci v zadaných datech. Toto rozdělení se mi zdá vhodné vzhledem k tomu, že obě části řeší rozdílné úkoly. Navíc model stačí vytvořit pouze jednou a následně se již bude používat pouze aplikace pro lokalizaci. Pro zjednodušení a zpřehlednění obou projektů jsem si vytvořil několik knihoven. Přesné popisování chování jednotlivých tříd a metod je zbytečné vzhledem k tomu, že součástí práce jsou i zdrojové kódy. Samotné třídy a metody jsou popsány v dokumentaci javadoc, která je také k dispozici na přiloženém CD.
3 http://www.itl.nist.gov/iad/humanid/feret/ 4 http://www.ee.surrey.ac.uk/CVSSP/banca/ 26
Knihovna libImage obsahuje metody pro úpravu obrázků. V této knihovně mi šlo mi především o to, zjednodušit některé operace na pouhé zavolání jedné metody. Důležité metody, které tato knihovna obsahuje, jsou zaostření obrázku, normalizace osvětlení, změna velikosti, převedení do odstínů šedé barvy, výřez obrázku a detekce hran. Pro vlnkovou transformaci jsem vytvořil knihovnu libFWT. Její hlavní funkcí je umožnit jednoduchý výpočet koeficientů vlnkové transformace. Také usnadňuje odhad důležitosti jednotlivých koeficientů. Pro práci s SVM klasifikátory jsem využil možností knihovny LIBSVM5 jejíž autoři jsou Chih-Chung Chang a Chih-Jen Lin. Aktuální verze knihovny, vydaná 30. října 2008 je 2.88. Knihovna je zaměřená na práci s SVM klasifikátory, umožňuje jejich vytvoření za použití různých jader, dovede vypočítat nezbytné parametry ovlivňující chování klasifikátorů a usnadňuje práci s trénovacími a testovacími daty. O vytvoření modelů se stará aplikace modelMake. Před samotným použitím finální aplikace pro lokalizaci se musí natrénovat nezbytné modely pro detekci a pro lokalizaci. Trénovací obrázky, uložené ve formátu JPG, jsou transformovány na požadovanou velikost, převedeny do odstínů šedi a je provedena normalizace osvětlení. Následně se pro všechny obrázky vypočítají koeficienty vlnkové transformace, na základě kterých jsou vytvořeny modely pro detekci a lokalizaci. Mimo to jsou také ukládány informace o důležitosti jednotlivých koeficientů v obrázku lidského oka. Hlavní funkcionalita je poskytnuta aplikací eyeLocalization. Vstupem je obraz ve formátu JPG spolu s polohou a rozměry tváře. Výstupem je pozice nalezených očí. Pro vybrání vhodných vlnkových koeficientů je nezbytný seznam koeficientů, které byly použity při vytváření modelů. V obrázku jsou nalezeny hrany, jejichž okolí posléze prochází detektor a hledá kandidátní body. Tento detektor klasifikuje data pomocí předem natrénovaného modelu. Nalezené oblasti se pak předají na vstup modulu pro lokalizaci, který s pomocí druhého modelu najde středy očí. Výsledné body jsou vypsány na standardní výstup. 7.2.2 Použití programu Aplikace modelMake potřebuje pro svůj běh několik parametrů. Pokud se spustí bez správných parametrů, na standardní chybový výstup se vypíše nápověda. Je možné, že ke spuštění bude třeba JVM nastavit velikost paměti. Docílí se toho přepínačem -Xmx. Použití aplikace je následující.
5 http://www.csie.ntu.edu.tw/~cjlin/libsvm/ 27
$ java -jar modelMake.jar {-type} [positive] [negative] [model name] •
type Určuje zda se bude vytvářet model pro detekci nebo lokalizaci. Pro detekci je přiřazená volba svm1, pro lokalizaci svm2.
•
positive Očekává cestu k adresáři, který obsahuje pozitivní vzory.
•
negative Očekává cestu k adresáři s negativními vzory.
•
model name Zde se zadá název vytvářeného modelu.
Aplikace eyeLocalization se chová obdobně. Při špatném použití parametrů vypíše na standardní chybový výstup nápovědu. Význam parametrů a použití aplikace je následující. $ java -jar eyeLocalization [model1] [model2] [eyeDistanceCoef] •
model1 Parametr model1 určuje cestu k modelu pro detekci. Zároveň pro správný běh programu jsou v aktuálním adresáři potřeba soubory model1.best a model1.parameters, které jsou vygenerovány aplikací modelMake společně s modelem.
•
model2 Parametr model2 určuje model pro lokalizaci. Zároveň jsou v aktuálním adresáři nezbytné soubory model2.best a také model2.parameters, které jsou vytvořené společně s modelem.
•
EyeDistanceCoef Tento parametr je volitelný. Jedná se o podíl vzdálenosti očí a šířky obrázku označeného detektorem obličeje. Pokud se tento parametr nezadá, je automaticky použita hodnota 0.38. Tuto hodnotu jsem odhadl na základě dat které jsem měl k dispozici, nicméně pro různé detektory obličeje se může lišit.
28
Po spuštění aplikace eyeLocalization se oba modely načtou, a poté je aplikace připravena provádět lokalizaci na zadaných obrázcích. Je třeba zadat dvě celočíselné hodnoty určující pozici obličeje, dvě celočíselné hodnoty určující jeho rozměry a cestu k obrázku. Následně se provede lokalizace a výsledná pozice očí se zobrazí na výstup. Aplikaci je možné ukončit příkazem quit.
29
8 Závěr Tato bakalářská práce seznamuje čtenáře s metodami, které se používají při detekci a lokalizaci očí v obrazových datech. V první části je popsáno několik základních úprav obrazu a technik, které se dále uplatňují v prostřední části práce popisující vybrané algoritmy. Práci uzavírá detailnější popis implementované metody. Cílem praktické části byla implementace nejlepší nalezené metody. Výsledný program je plně funkční a schopen solidní lokalizace. Nemohu ovšem zaručit že je zcela bezchybný. Jako ve většině softwaru, i v tomto se časem zřejmě najdou nějaké chyby. K jejich odhalení a dokonalému vyladění modelu bude muset být program nějaký čas používán. Rád bych ještě zmínil několik možných úprav a vylepšení, kterými by se dal výsledný program obohatit. V první řadě by mohlo být výhodné ještě před samotnými procesy natrénování a testování vylepšit vstupní obrázky. Je použita normalizace osvětlení, ale stejně tak dobře by se dalo provést například odstranění šumu. Jako vhodný nástroj bych navrhoval nelineární filtr medián. Dále mě zaujal jednoduchý nápad s odstraněním odlesků popisovaný v kapitole 6.2. Odstranění odlesků je snadné implementovat a má nesporně kladný vliv na celkovou schopnost lokalizace. Samotní autoři implementovaného algoritmu v závěru přišli s nápadem nahrazení vlnkové transformace integrálním obrazem, což by mohlo výrazně ovlivnit rychlost výpočtu.
30
Literatura [1]
Kun, Peng.; aj.: A Robust Algorithm for Eye Detectionon on Gray Intensity Face without Spectacles; Computer Science and Tecnologies; 2005; vol. 5; no. 3; s. 127.
[2]
Antonio, Haro.; aj.: Detecting and Tracking Eyes By Using Their Physiological Properties, Dynamics, and Appearance; IEEE Computer Society Conference on Computer Vision and Pattern Recognition; 2000.
[3]
Campadelli, P.; Lanzarotti, R.; Lipori, G.: Eye localization: a survey; The Fundamentals of Verbal and Non-verbal Communication and the Biometrical Issue NATO Science Series; vol. 18; 2007.
[4]
Wikipedia contributors.: Machine learning; 3.11.2008;
.
[5]
Wikipedia contributors.: Support vector machine;1.12.2008; .
[6]
Wikipedia contributors.: AdaBoost; 20.8.2008; .
[7]
Wikipedia contributors.: Boosting; 20.10.2008; .
[8]
Michal, Kozubek.: Digitální zpracování obrazu - Lecture 03 (Point Transforms, Linear Filters); Fakulta informatiky Masarykovy univerzity, Brno; 2008.
[9]
Michelle, M., Mendonça.; aj.: Illumination Normalization Methods for Face Recognition; Escola de Engenharia de São Carlos – EESC; 2007.
[10]
Michal, Kozubek.: Digitální zpracování obrazu - Lecture 05 (Filtering in Frequency Domain, Sampling Theorem); Fakulta informatiky Masarykovy univerzity, Brno; 2008.
[11]
Asteriadis, S.; Nikolaidis, N.; Hajdu, A., Pitas, I.: A novel eye detection algorithm utilizing edge-related geometrical information; 2006; Department of Informatics, Aristotle University of Thessaloniki; Greece.
31
[12]
Wikipedia contributors.: Principal components analysis; 7.12.2008; .
[13]
Yong, Ma.; aj.: Robust precise eye location under probabilistic framework; EEE International Conference on Automatic Face and Gesture Recognition, 2004.
[14]
José, Gilvan, Rodrigues, Maia.; Fernando, de, Carvalho, Gomes.; Osvaldo, de, Souza.: Automatic Eye Localization in Color Images; Washington, DC, USA; IEEE Computer Society; 2007.
[15]
Campadelli, P.; Lanzarotti, R.; Lipori, G.: Precise eye localization through a general-to-specific model definition; British Machine Vision Conference; 2006.
[16]
William, K., Pratt.: Digital Image Processing; Wiley; 2007.
32
Přílohy A Obsah přiloženého CD /eyeLocalization/ Obsahuje aplikaci pro lokalizaci očí v obrazových datech. Také již obsahuje natrénované modely pro detekci i lokalizaci. /modelMake/ V adresáři modelMake je uložen program umožňující vytváření modelů pro detekci a lokalizaci. /src/
Zde se nachází zdrojové kódy obou aplikací. Jsou ponechány v takové adresářové struktuře, v jaké je vytvořilo vývojové prostředí NetBeans. K dispozici je také javadoc dokumentace. Dále se v adresáři src nacházejí testovací data a data, která byla použita jako ukázka v příloze B. /text/ V tomto adresáři je text bakalářské práce. Text je uložen ve formátu odt a ve vygenerovaném PDF.
33
B Ukázka testovaných dat Správně vyhodnocená data:
Chybně vyhodnocená data:
34