Projekt do předmětu ZPO Sledování ruky pomocí aktivních kontur 13. května 2014 Autoři: Pavlík Vít, xpavli62@stud.fit.vutbr.cz Žerdík Jan, xzerdi00@stud.fit.vutbr.cz Doležal Pavel, xdolez08@stud.fit.vutbr.cz
1 Zadání Cílem projektu bylo implementovat sledování pohybu ruky v obraze s využitím aktivních kontur. Projekt je implementován jako konzolová aplikace v jazyce C++ s využitím knihovny OpenCV a jejího rozhraní HighGUI. 2 Detekce kůže v obraze Prvním krokem k úspěšné detekci jakékoli objektu v obraze pomocí aktivních kontur je získání prahovaného obrazu který popisuje jeho tvar. K tomuto účelu lze využít velké množství algoritmů které nejčastěji filtrují nastavený rozsah barev. V tomto případě bylo třeba nalézt ty části obrazu, které mohou mít barvu lidské kůže. Tento problém je obtížněji řešitelný než prostá detekce objektů výrazných barev jakými jsou například fixy nebo reflexní samolepky které se pro demonstrační účely často používají. Množina barev lidské kůže je závislá nejen na kvalitě kamery a osvětlení scény, ale logicky i na barvě pleti člověka. Pokud má výsledná aplikace fungovat pro většinu běžné populace, je třeba použít jiný než standardní barevný model. 2.1 Převod RGB do YCbCr Analýza dostupných řešení ukázala, že pro detekci kůže je vhodné převést vstupní obraz z kamery z barevného modelu RGB do složkového modelu YCbCr a definovat rozsah platných hodnot v něm. Model YCbCr byl mimo jiné používán pro přenos analogového televizního signálu. Složka Y nese informaci o jasu v obraze a bývá interpretována jako zelená barva, složky Cb a Cr určují její barevný posuv do modré a do červené. Nastavení velkého rozsahu jasové složky umožňuje nejen spolehlivější detekci kůže za rozdílných světelných podmínek, ale jako žádaný vedlejší efekt i toleranci vůči špatně nasvětleným lidem bílé a dobře nasvíceným lidem tmavé pleti. Obrázek 1: Převod barevného modelu z RGB do YCbCr a následné prahování To znamená že jasovou složku modelu YCbCr nelze pro detekci kůže použít. Základem úspěchu je vhodné nastavení akceptovatelných rozsahů složek Cb a Cr. Experimentováním s hodnotami jsme dospěli k rozsahům 0 255 pro Y 2
77 127 pro Cb 137 177 pro Cr Mírnou úpravou intervalů lze získat lehce lepší výsledky pro konktrétní kameru. Vetší míra exprimentování však vede téměř vždy k nepoužitelným výsledkům. Použité a zde uvedené hodnoty lze považovat za rozumný kompromis. 2.2 Prahování Prahovaný obraz je z modelu YCbCr získán pouze z příslušnosti pixelu do nastaveného intervalu. Zde vzniká problém, jakým způsobem se vypořádat s šumem a artefakty v obraze. Drobné artefakty lze efektivně odstranit mediánovým filtrem, větší jsou vyhlazeny pomocí Obrázek 2: Odstranění artefaktů v prahovaném obrazu gaussovského rozostření. Tím zároveň vznikne na okrajích objektu gradient který lze použít jako přesnější výpočet minimálních energií v samotném algoritmu snake. 3 Aktivní kontura a algoritmus snake Pod pojmem snake se rozumí parametrická křivka (splajn) tvořený množinou bodů které mají kromě svých souřadnic x a y definovánu hodnotu interní a externí enegie která jim umožňuje regulovat hladkost, pružnost, smrštitelnost a roztažnost křivky kterou tvoří. Základní vzorce pro aktivní kontury lze nalézt v slidech k předmětu ZPO [1] na stranách 40 44. 3.1 Interní energie Za interní energie považujeme síly, které udržují tvar křivky bez ohledu na hranice objektu který obepínají. V anglické literatuře se lze setkat s pojmy contour a curvature, případně tension a stiffness. Velikosti těchto energií jsou počítány ze vzáleností sousedních bodů kontury. Hladkost křivky je vyjádřena jako plocha vzniklá umocněním vzdálenosti mezi aktuálním a následujícím bodem na druhou. Pružnost jako absolutní hodnota rozdílu ploch mezi předchozí a následující dvojicí bodů. Princip výpočtu je znázorněn na obrázku 3. Nastevení koeficientů pro tyto síly určuje základní chování křivky v prostředí bez objektů. Pokud je vše správně nastaveno, bude se křivka zmenšovat směrem ke středu obrazu. 3
Obrázek 3: Interni energie vypočtené jako mocniny vzdáleností sousedních bodů 3.2 Externí energie Externí enegie jsou síly, které začínají působit v okamžiku, kdy smršt ující se křivka narazí na hranu detekovaného objektu. Přesné nastavení externích sil je potřeba k tomu, aby body nepropadávaly dovnitř objektu ale zároveň byly dostatečně silné na to, aby obepnuly i členité objekty. Popis parametrů externí síly ze slidů lze nalézt v [2] na straně 6. Obrázek 4: Snake sledující ruku ve videu z kamery. Základní varianta počítá se zastavením smršt ování na hranici objektu. Celková síla působící na daný bod je dána jako suma všech (interních i externích) sil. V okolí každého bodu pak hledáme místo s minimální energií. Přítomnost záporné externí energie v místě změny gradientu tak smršt ování zastaví. Pro úplné obepnutí libovolného objektu ale tato síla není dostačující. Jako příklad se často uvádí objekty tvaru písmene U. Proto je třeba definovat druhou externí energii označovanou jako flow nebo image která umožní ohnutí křivky dovnitř záhybů objektu. Spolehlivá implementace této síly není zcela snadný úkol, protože její činnost je prakticky v přímém rozporu s principem činnosti externích energií. Námi implementovaný snake je vybaven automatickým přidávání a odebírání bodů 4
křivky v případě potřeby. Množství bodů je upravováno podle konstant AUTOADAPT definovaných v souboru Snake.h. 4 Testování Chování implementovaného programu je velmi závislé na kvalitě kamery, typu pozadí a osvětlení snímané scény. Před prehováním obrazuje sice možné pomocí funkce capture.set() nastavit jas, kontrast, saturaci a další parametry, bohužel tato nastavení nemají vlik na automatické kompenzace obrazu prováděné samotnou kamerou. 4.1 Výběr vhodného pozadí Za obecně problematické lze označit jakékoli pozací obsahující objekty s lehkou příměsí červené barvy. To prakticky znemožňuje mít v pozadí scény jakýkoli dřevěný nábytek, podlahy, korkové nástěnky atp. Tento problém přisuzujeme definovanému intervalu složky Cr který je pro lidskou kůži velmi podobný jako pro uvedené objekty. Na základě této zkušenosti jsme předpokládali že je obdobný problém nastane u objektů s příměsí modré. Tento předpoklad se ale nepotvrdil. Pokud nebudeme uvažovat přepaly způsobené přesvícením kamery, pak modrá pozadí nezpůsobují problémy. Jako ideální pozadí se jeví jednolitá plocha zelené nebo šedé barvy. 4.2 Algoritmus snake Implementovaná verze algoritmu snake pracuje s dvojicí interních a dvojicí externích energií. Parametry algoritmu lze nastavit pomocí parametrů alfa, beta, gamma a delta na začátku zdrojového souboru Snake.cpp. Obecnou vlastností algoritmu snake je problematické obepínání vnitřních záhybů členitých objektů. Řešením by bylo použití varianty GVF snake (gradient vector flow) která před zpracováním každého snímku vytváří matici vektorů (počítá vektor pro každý bod v obraze). Bohužel i pro relativně nízké rozlišení jakým je 640 480 bodů není reálné tento výpočet stihnout v reálném čase. Po nečekaně dlouhém testování jsme se rozhodli obětovat obepnutí vnitřnívh částí objektů výměnou za stabilitu. 4.3 Detekce otevřené a zavřené ruky Na základě tvaru křivky program odhaduje, zda je ruka v obraze otevřená či zavřená. Respektive zda jsou prsty roztažené či nikoli. Děje se tak na základě výpočtu poměru mezi výškou a šířkou kontury. Detekce tak není závislá na vzdálenosti ruky od kamery. Aktuální stav je vypisován do konzole. Závěr Cílem projektu byla implementace sledování ruky v obraze pomocí aktivní kontury. Přestože výsledný algoritmus je pomalejší než jsme čekali, je za dobrých světelných podmínek 5
schopen ruku bezpečně sledovat. Rychlost pohybu je ovšem nutné přizpůsobit prodlevě při zpracování, která se pohybuje vzhledem k výkonu stroje na kterém je program spuštěn kolem 0,5 s. Přes nemalou snahu se nám bohužel nepodařilo zajistit spolehlivé obepnutí vnitřních záhybů trasovaného objektu (mezer mezi prsty) aniž by nedošlo k výraznému snížení spolehlivosti sledování hlavně při zvětšování objektu. Literatura [1] Slidy č. 8 předmětu zpracování obrazu. [Online], Duben 2014. URL <https://wis.fit.vutbr.cz/fit/st/course-files-st.php/course/ ZPO-IT/lectures/zpo_08_hrany.pdf> [2] M. Kass, D. T., A. Witkin: [Online], 1988. URL <http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1. 124.5318\&rep=rep1\&type=pdf> 6