Projekt do prˇedmeˇtu ZPO
Sledova´nı´ ruky pomocı´ aktivnı´ch kontur
13. kveˇtna 2014
Autorˇi: Pavlı´k Vı´t,
[email protected] ˇ Zerdı´k Jan,
[email protected] Dolezˇal Pavel,
[email protected]
1
Zada´nı´
Cı´lem projektu bylo implementovat sledova´nı´ pohybu ruky v obraze s vyuzˇitı´m aktivnı´ch kontur. Projekt je implementova´n jako konzolova´ aplikace v jazyce C++ s vyuzˇitı´m knihovny OpenCV a jejı´ho rozhranı´ HighGUI.
2
Detekce ku˚zˇe v obraze
Prvnı´m krokem k u´speˇsˇne´ detekci jake´koli objektu v obraze pomocı´ aktivnı´ch kontur je zı´ska´nı´ prahovane´ho obrazu ktery´ popisuje jeho tvar. K tomuto u´cˇelu lze vyuzˇ´ıt velke´ mnozˇstvı´ algoritmu˚ ktere´ nejcˇasteˇji filtrujı´ nastaveny´ rozsah barev. V tomto prˇ´ıpadeˇ bylo trˇeba nale´zt ty cˇa´sti obrazu, ktere´ mohou mı´t barvu lidske´ ku˚zˇe. Tento proble´m je obtı´zˇneˇji rˇesˇitelny´ nezˇ prosta´ detekce objektu˚ vy´razny´ch barev jaky´mi jsou naprˇ´ıklad fixy nebo reflexnı´ samolepky ktere´ se pro demonstracˇnı´ u´cˇely cˇasto pouzˇ´ıvajı´. Mnozˇina barev lidske´ ku˚zˇe je za´visla´ nejen na kvaliteˇ kamery a osveˇtlenı´ sce´ny, ale logicky i na barveˇ pleti cˇloveˇka. Pokud ma´ vy´sledna´ aplikace fungovat pro veˇtsˇinu beˇzˇne´ populace, je trˇeba pouzˇ´ıt jiny´ nezˇ standardnı´ barevny´ model.
2.1
Prˇevod RGB do YCbCr
Analy´za dostupny´ch rˇesˇenı´ uka´zala, zˇe pro detekci ku˚zˇe je vhodne´ prˇeve´st vstupnı´ obraz z kamery z barevne´ho modelu RGB do slozˇkove´ho modelu YCbCr a definovat rozsah platny´ch hodnot v neˇm. Model YCbCr byl mimo jine´ pouzˇ´ıva´n pro prˇenos analogove´ho televiznı´ho signa´lu. Slozˇka Y nese informaci o jasu v obraze a by´va´ interpretova´na jako zelena´ barva, slozˇky Cb a Cr urcˇujı´ jejı´ barevny´ posuv „do modre´“ a „do cˇervene´“. Nastavenı´ velke´ho rozsahu jasove´ slozˇky umozˇnˇuje nejen spolehliveˇjsˇ´ı detekci ku˚zˇe za rozdı´lny´ch sveˇtelny´ch podmı´nek, ale jako zˇa´dany´ vedlejsˇ´ı efekt i toleranci vu˚cˇi sˇpatneˇ nasveˇtleny´m lidem bı´le´ a dobrˇe nasvı´ceny´m lidem tmave´ pleti.
Obra´zek 1: Prˇevod barevne´ho modelu z RGB do YCbCr a na´sledne´ prahova´nı´ To znamena´ zˇe jasovou slozˇku modelu YCbCr nelze pro detekci ku˚zˇe pouzˇ´ıt. Za´kladem u´speˇchu je vhodne´ nastavenı´ akceptovatelny´ch rozsahu˚ slozˇek Cb a Cr. Experimentova´nı´m s hodnotami jsme dospeˇli k rozsahu˚m • 0 – 255 pro Y 2
• 77 – 127 pro Cb • 137 – 177 pro Cr Mı´rnou u´pravou intervalu˚ lze zı´skat lehce lepsˇ´ı vy´sledky pro konktre´tnı´ kameru. Vetsˇ´ı mı´ra exprimentova´nı´ vsˇak vede te´meˇrˇ vzˇdy k nepouzˇitelny´m vy´sledku˚m. Pouzˇite´ a zde uvedene´ hodnoty lze povazˇovat za rozumny´ kompromis.
2.2
Prahova´nı´
Prahovany´ obraz je z modelu YCbCr zı´ska´n pouze z prˇ´ıslusˇnosti pixelu do nastavene´ho intervalu. Zde vznika´ proble´m, jaky´m zpu˚sobem se vyporˇa´dat s sˇumem a artefakty v obraze. Drobne´ artefakty lze efektivneˇ odstranit media´novy´m filtrem, veˇtsˇ´ı jsou vyhlazeny pomocı´
Obra´zek 2: Odstraneˇnı´ artefaktu˚ v prahovane´m obrazu gaussovske´ho rozostrˇenı´. Tı´m za´rovenˇ vznikne na okrajı´ch objektu gradient ktery´ lze pouzˇ´ıt jako prˇesneˇjsˇ´ı vy´pocˇet minima´lnı´ch energiı´ v samotne´m algoritmu snake.
3
Aktivnı´ kontura a algoritmus „snake“
Pod pojmem snake se rozumı´ parametricka´ krˇivka (splajn) tvorˇeny´ mnozˇinou bodu˚ ktere´ majı´ kromeˇ svy´ch sourˇadnic x a y definova´nu hodnotu internı´ a externı´ enegie ktera´ jim umozˇnˇuje regulovat hladkost, pruzˇnost, smrsˇtitelnost a roztazˇnost krˇivky kterou tvorˇ´ı. Za´kladnı´ vzorce pro aktivnı´ kontury lze nale´zt v slidech k prˇedmeˇtu ZPO [1] na strana´ch 40 – 44.
3.1
Internı´ energie
Za internı´ energie povazˇujeme sı´ly, ktere´ udrzˇujı´ tvar krˇivky bez ohledu na hranice objektu ktery´ obepı´najı´. V anglicke´ literaturˇe se lze setkat s pojmy contour a curvature, prˇ´ıpadneˇ tension a stiffness. Velikosti teˇchto energiı´ jsou pocˇ´ıta´ny ze vza´lenostı´ sousednı´ch bodu˚ kontury. Hladkost krˇivky je vyja´drˇena jako plocha vznikla´ umocneˇnı´m vzda´lenosti mezi aktua´lnı´m a na´sledujı´cı´m bodem na druhou. Pruzˇnost jako absolutnı´ hodnota rozdı´lu ploch mezi prˇedchozı´ a na´sledujı´cı´ dvojicı´ bodu˚. Princip vy´pocˇtu je zna´zorneˇn na obra´zku 3. Nastevenı´ koeficientu˚ pro tyto sı´ly urcˇuje za´kladnı´ chova´nı´ krˇivky v prostrˇedı´ bez objektu˚. Pokud je vsˇe spra´vneˇ nastaveno, bude se krˇivka zmensˇovat smeˇrem ke strˇedu obrazu. 3
Obra´zek 3: Interni energie vypocˇtene´ jako mocniny vzda´lenostı´ sousednı´ch bodu˚
3.2
Externı´ energie
Externı´ enegie jsou sı´ly, ktere´ zacˇ´ınajı´ pu˚sobit v okamzˇiku, kdy smrsˇt’ujı´cı´ se krˇivka narazı´ na hranu detekovane´ho objektu. Prˇesne´ nastavenı´ externı´ch sil je potrˇeba k tomu, aby body nepropada´valy dovnitrˇ objektu ale za´rovenˇ byly dostatecˇneˇ silne´ na to, aby obepnuly i cˇlenite´ objekty. Popis parametru˚ externı´ sı´ly ze slidu˚ lze nale´zt v [2] na straneˇ 6.
Obra´zek 4: „Snake“ sledujı´cı´ ruku ve videu z kamery. Za´kladnı´ varianta pocˇ´ıta´ se zastavenı´m smrsˇt’ova´nı´ na hranici objektu. Celkova´ sı´la pu˚sobı´cı´ na dany´ bod je da´na jako suma vsˇech (internı´ch i externı´ch) sil. V okolı´ kazˇde´ho bodu pak hleda´me mı´sto s minima´lnı´ energiı´. Prˇ´ıtomnost za´porne´ externı´ energie v mı´steˇ zmeˇny gradientu tak smrsˇt’ova´nı´ zastavı´. Pro u´plne´ obepnutı´ libovolne´ho objektu ale tato sı´la nenı´ dostacˇujı´cı´. Jako prˇ´ıklad se cˇasto uva´dı´ objekty tvaru pı´smene U. Proto je trˇeba definovat druhou externı´ energii oznacˇovanou jako flow nebo image ktera´ umozˇnı´ ohnutı´ krˇivky dovnitrˇ za´hybu˚ objektu. Spolehliva´ implementace te´to sı´ly nenı´ zcela snadny´ u´kol, protozˇe jejı´ cˇinnost je prakticky v prˇ´ıme´m rozporu s principem cˇinnosti externı´ch energiı´. Na´mi implementovany´ snake je vybaven automaticky´m prˇida´va´nı´ a odebı´ra´nı´ bodu˚ 4
krˇivky v prˇ´ıpadeˇ potrˇeby. Mnozˇstvı´ bodu˚ je upravova´no podle konstant AUTOADAPT definovany´ch v souboru Snake.h.
4
Testova´nı´
Chova´nı´ implementovane´ho programu je velmi za´visle´ na kvaliteˇ kamery, typu pozadı´ a osveˇtlenı´ snı´mane´ sce´ny. Prˇed prehova´nı´m obrazuje sice mozˇne´ pomocı´ funkce capture.set() nastavit jas, kontrast, saturaci a dalsˇ´ı parametry, bohuzˇel tato nastavenı´ nemajı´ vlik na automaticke´ kompenzace obrazu prova´deˇne´ samotnou kamerou.
4.1
Vy´beˇr vhodne´ho pozadı´
Za obecneˇ problematicke´ lze oznacˇit jake´koli pozacı´ obsahujı´cı´ objekty s lehkou prˇ´ımeˇsı´ cˇervene´ barvy. To prakticky znemozˇnˇuje mı´t v pozadı´ sce´ny jaky´koli drˇeveˇny´ na´bytek, podlahy, korkove´ na´steˇnky atp. Tento proble´m prˇisuzujeme definovane´mu intervalu slozˇky Cr ktery´ je pro lidskou ku˚zˇi velmi podobny´ jako pro uvedene´ objekty. Na za´kladeˇ te´to zkusˇenosti jsme prˇedpokla´dali zˇe je obdobny´ proble´m nastane u objektu˚ s prˇ´ımeˇsı´ modre´. Tento prˇedpoklad se ale nepotvrdil. Pokud nebudeme uvazˇovat prˇepaly zpu˚sobene´ prˇesvı´cenı´m kamery, pak modra´ pozadı´ nezpu˚sobujı´ proble´my. Jako idea´lnı´ pozadı´ se jevı´ jednolita´ plocha zelene´ nebo sˇede´ barvy.
4.2
Algoritmus snake
Implementovana´ verze algoritmu „snake“ pracuje s dvojicı´ internı´ch a dvojicı´ externı´ch energiı´. Parametry algoritmu lze nastavit pomocı´ parametru˚ alfa, beta, gamma a delta na zacˇa´tku zdrojove´ho souboru Snake.cpp. Obecnou vlastnostı´ algoritmu snake je proˇ esˇenı´m by bylo pouzˇitı´ varianty blematicke´ obepı´na´nı´ vnitrˇnı´ch za´hybu˚ cˇlenity´ch objektu˚. R GVF snake (gradient vector flow) ktera´ prˇed zpracova´nı´m kazˇde´ho snı´mku vytva´rˇ´ı matici vektoru˚ (pocˇ´ıta´ vektor pro kazˇdy´ bod v obraze). Bohuzˇel i pro relativneˇ nı´zke´ rozlisˇenı´ jaky´m je 640 × 480 bodu˚ nenı´ rea´lne´ tento vy´pocˇet stihnout v rea´lne´m cˇase. Po necˇekaneˇ dlouhe´m testova´nı´ jsme se rozhodli obeˇtovat obepnutı´ vnitrˇnı´vh cˇa´stı´ objektu˚ vy´meˇnou za stabilitu.
4.3
Detekce otevrˇene´ a zavrˇene´ ruky
Na za´kladeˇ tvaru krˇivky program odhaduje, zda je ruka v obraze otevrˇena´ cˇi zavrˇena´. Respektive zda jsou prsty roztazˇene´ cˇi nikoli. Deˇje se tak na za´kladeˇ vy´pocˇtu pomeˇru mezi vy´sˇkou a sˇ´ırˇkou kontury. Detekce tak nenı´ za´visla´ na vzda´lenosti ruky od kamery. Aktua´lnı´ stav je vypisova´n do konzole.
Za´veˇr Cı´lem projektu byla implementace sledova´nı´ ruky v obraze pomocı´ aktivnı´ kontury. Prˇestozˇe vy´sledny´ algoritmus je pomalejsˇ´ı nezˇ jsme cˇekali, je za dobry´ch sveˇtelny´ch podmı´nek 5
schopen ruku bezpecˇneˇ sledovat. Rychlost pohybu je ovsˇem nutne´ prˇizpu˚sobit prodleveˇ prˇi zpracova´nı´, ktera´ se pohybuje vzhledem k vy´konu stroje na ktere´m je program spusˇteˇn kolem 0,5 s. Prˇes nemalou snahu se na´m bohuzˇel nepodarˇilo zajistit spolehlive´ obepnutı´ vnitrˇnı´ch za´hybu˚ trasovane´ho objektu (mezer mezi prsty) anizˇ by nedosˇlo k vy´razne´mu snı´zˇenı´ spolehlivosti sledova´nı´ hlavneˇ prˇi zveˇtsˇova´nı´ objektu.
Literatura [1] Slidy cˇ. 8 prˇedmeˇtu zpracova´nı´ obrazu. [Online], Duben 2014. URL
[2] M. Kass, D. T., A. Witkin: [Online], 1988. URL
6