Univerza na Primorskem. Fakulteta za matematiko, naravoslovje in informacijske tehnologije. Zaznavanje gibov. Zaključna naloga

Similar documents
Reševanje problemov in algoritmi

TOPLJENEC ASOCIIRA LE V VODNI FAZI

ENAČBA STANJA VODE IN VODNE PARE

UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA POLONA ŠENKINC REŠEVANJE LINEARNIH DIFERENCIALNIH ENAČB DRUGEGA REDA S POMOČJO POTENČNIH VRST DIPLOMSKO DELO

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE. O neeksaknotsti eksaktnega binomskega intervala zaupanja

Iskanje najcenejše poti v grafih preko polkolobarjev

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE. Naknadna stabilizacija videoposnetkov

Razpoznavanje znakov prstne abecede na osnovi računalniškega vida

Problem umetnostne galerije

Attempt to prepare seasonal weather outlook for Slovenia

OPTIMIRANJE IZDELOVALNIH PROCESOV

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE. Verjetnostni algoritmi za testiranje praštevilskosti

Topološka obdelava slik

Multipla korelacija in regresija. Multipla regresija, multipla korelacija, statistično zaključevanje o multiplem R

2 Zaznavanje registrske tablice

Stiskanje slik z algoritmi po vzorih iz narave

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE. Ekstremne porazdelitve za odvisne spremenljivke

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE

Linearna regresija. Poglavje 4

Hipohamiltonovi grafi

Naloge iz LA T EXa : 3. del

Eulerjevi in Hamiltonovi grafi

AKSIOMATSKA KONSTRUKCIJA NARAVNIH

Simulacija dinamičnih sistemov s pomočjo osnovnih funkcij orodij MATLAB in Simulink

R V P 2 Predavanje 05

Linearne enačbe. Matrična algebra. Linearne enačbe. Linearne enačbe. Linearne enačbe. Linearne enačbe

UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA DIPLOMSKO DELO MAJA OSTERMAN

UNIVERZA V MARIBORU FAKULTETA ZA NARAVOSLOVJE IN MATEMATIKO. Oddelek za matematiko in računalništvo DIPLOMSKO DELO.

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE

Lokalizacija mobilnega robota s pomočjo večsmerne kamere

Verifikacija napovedi padavin

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE

SIMETRIČNE KOMPONENTE

Linearna algebra. Bojan Orel. Univerza v Ljubljani

SVM = Support Vector Machine = Metoda podpornih vektorjev

Evolucija dinamike Zemljine precesije

UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA SAŠO ZUPANEC MAX-PLUS ALGEBRA DIPLOMSKO DELO

VMESNIK ZA KRMILJENJE NAPRAV S KRETNJAMI ROKE

USING SIMULATED SPECTRA TO TEST THE EFFICIENCY OF SPECTRAL PROCESSING SOFTWARE IN REDUCING THE NOISE IN AUGER ELECTRON SPECTRA

ENERGY AND MASS SPECTROSCOPY OF IONS AND NEUTRALS IN COLD PLASMA

Iterativne metode podprostorov 2010/2011 Domače naloge

Hadamardove matrike in misija Mariner 9

Particija grafa, odkrivanje skupnosti in maksimalen prerez

Vrednotenje gibov in kretenj roke kot vhodne naprave za komunikacijo človek stroj v navideznih okoljih

Intervalske Bézierove krivulje in ploskve

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE. Kvadratne forme nad končnimi obsegi

Uporaba preglednic za obdelavo podatkov

Izmenični signali moč (17)

arxiv: v1 [cs.dm] 21 Dec 2016

UNIVERZA V MARIBORU FAKULTETA ZA NARAVOSLOVJE IN MATEMATIKO. Oddelek za matematiko in računalništvo MAGISTRSKA NALOGA. Tina Lešnik

Zgoščevanje podatkov

Miha Troha. Robotsko učenje in planiranje potiskanja predmetov

OPTIMIZACIJA Z ROJEM DELCEV

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE

56 1 Upogib z osno silo

Izvedbe hitrega urejanja za CPE in GPE

Dejan Petelin. Sprotno učenje modelov na podlagi Gaussovih procesov

OA07 ANNEX 4: SCOPE OF ACCREDITATION IN CALIBRATION

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE. Kromatično število in kromatični indeks grafa

UČNI NAČRT PREDMETA / COURSE SYLLABUS (leto / year 2017/18) Parcialne diferencialne enačbe Partial differential equations. Študijska smer Study field

TEORIJA GRAFOV IN LOGISTIKA

Domen Perc. Implementacija in eksperimentalna analiza tehnike razvrščanja podatkov s konsenzom

Excel. Matjaž Željko

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE

Modelska Analiza 1. University of Ljubljana Faculty of Mathematics and Physics. 3. naloga - Numeri na minimizacija

OFF-LINE NALOGA NAJKRAJŠI SKUPNI NADNIZ

Katastrofalno zaporedje okvar v medsebojno odvisnih omrežjih

Călugăreanu-White-Fullerjev teorem in topologija DNA

Kode za popravljanje napak

Matematika 1. Gabrijel Tomšič Bojan Orel Neža Mramor Kosta

UNIVERZA V LJUBLJANI FAKULTETA ZA MATEMATIKO IN FIZIKO ODDELEK ZA MATEMATIKO

Klemen Kregar, Mitja Lakner, Dušan Kogoj KEY WORDS

GEOMETRIJSKE FAZE V KVANTNI MEHANIKI

Analiza oblike in površine stabilograma

Electric Power-System Inertia Estimation applying WAMS

Makroekonomija 1: 4. vaje. Igor Feketija

PRESENEČENJA V FIZIKI: VRTAVKE. Mitja Rosina Fakulteta za matematiko in fiziko Ljubljana, 12.marca 2010

Optimizacija delovanja in povečanje obiska na spletni strani

JEDRSKA URA JAN JURKOVIČ. Fakulteta za matematiko in fiziko Univerza v Ljubljani

UNIVERZA V NOVI GORICI POSLOVNO-TEHNIŠKA FAKULTETA REŠEVANJE OPTIMIZACIJSKIH PROBLEMOV S PROGRAMSKIM PAKETOM SCICOSLAB DIPLOMSKO DELO.

Gašper Derganc. Računalniško branje padavinskih grafov

Minimizacija učne množice pri učenju odločitvenih dreves

1) V diagramu sta prikazana plazemska koncentracijska profila po večkratnem intravenskem odmerjanju učinkovine v dveh različnih primerih (1 in 2).

VAJE 2: Opisna statistika

FRAKTALNA DIMENZIJA. Fakulteta za matematiko in fiziko Univerza v Ljubljani

DOMINACIJSKO TEVILO GRAFA

Uvod v odkrivanje znanj iz podatkov (zapiski predavatelja, samo za interno uporabo)

Calculation of stress-strain dependence from tensile tests at high temperatures using final shapes of specimen s contours

POLDIREKTNI PRODUKT GRUP

UNIVERZA V MARIBORU FAKULTETA ZA NARAVOSLOVJE IN MATEMATIKO. Oddelek za matematiko in računalništvo DIPLOMSKO DELO. Gregor Ambrož

IZRAČUN POLOŽAJA GPS-SATELITA IZ PODATKOV PRECIZNIH EFEMERID GPS-ORBIT COMPUTATION FROM PRECISE EPHEMERIS DATA

NIKJER-NIČELNI PRETOKI

Geometrijske faze v kvantni mehaniki

Univerza v Ljubljani Fakulteta za matematiko in fiziko. Oddelek za fiziko. Seminar - 3. letnik, I. stopnja. Kvantni računalniki. Avtor: Tomaž Čegovnik

FOTONSKI POGON. Avtor: Črt Harej Mentor: prof. dr. Simon Širca. Ljubljana, Maj 2016

EVA MARKELJ RAČUNALNIŠKO SIMULIRANJE SIPANJA SVETLOBE V ATMOSFERI

Preprečevanje neizvedljivosti urnikov pri metahevrističnem razvrščanju proizvodnih procesov

UČNI NAČRT PREDMETA / COURSE SYLLABUS (leto / year 2017/18) Predmet: Analiza 3 Course title: Analysis 3. Študijska smer Study field ECTS

Vsebina Od problema do načrta programa 1. del

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE

Transcription:

Univerza na Primorskem Fakulteta za matematiko, naravoslovje in informacijske tehnologije Boštjan Markežič Zaznavanje gibov Zaključna naloga Koper, september 2011 Mentor: doc. dr. Peter Rogelj

Kazalo Slovarček 6 1 Uvod 7 2 Osnove zaznavanja gibov 8 2.1 Optični tok.................................... 9 2.1.1 Metoda Lucas-Kanade.......................... 11 2.1.2 Metoda Horn-Schunck.......................... 13 2.2 Mean shift in CAMshift............................. 13 2.2.1 Histogrami................................. 13 2.2.2 Metoda Mean shift............................ 16 2.2.3 Metoda CAMshift............................. 18 3 Implementacija Upravljanje kurzorja z gibi rok 21 3.1 Ideja........................................ 21 3.2 Delovanje programa................................ 23 3.2.1 Prepoznavanje in segmentacija roke................... 23 3.2.2 Detekcija prsta.............................. 27 3.2.3 Premik kurzorja.............................. 29 3.3 Ugotovitve..................................... 30 3.4 Zaključek..................................... 31 Literatura 32 Priloge 35 2

Povzetek V tej nalogi so predstavljene nekatere popularnejše metode za zaznavanje gibanja. Poudarek je na najbolj razširjenih metodah, kot so Lucas-Kanade, katera temelji na optičnemu toku in CAMshift metoda, katera je uporabljena za izdelavo praktičnega programa. V zadnjem poglavju je predstavljen program, napisan v programskem jeziku Python s pomočjo odprtokodne knjižnjice OpenCV, za implementacijo računalniške miške, katero lahko premikamo s pomočjo gibov roke. 3

Abstract In this paper, the most popular methods of motion detection are presented. Emphasis is placed on the most widely used methods, such as Lucas-Kanade, which is based on optical flow and CAMshift method, which is used to produce a practical program. In the last chapter a practical implementation of a computer mouse, which can be moved by hand movements is presented. It is written in Python programming language using open-source OpenCV library. 4

Zahvala Rad bi se zahvalil mentorju za pomoč pri izdelavi te naloge, vsem razvijalcem odprtokodnih programov, kateri so bili uporabljeni v tej nalogi in svoji mami, ki mi je pomagala pri odpravljanju slovničnih napak. 5

Slovarček Razlage manj znanih strokovnih besed in kratic. Določene razlage so povzete po [23]. Algoritem (angl. Algorithm) Python Numpy Psyco PyWin32 C++ OpenCV gradient momenti Zaporedje pravil, operacij, ukazov, ki zagotavljajo rešitev problema v končnem številu korakov. Programski jezik. Odprtokodna knjižnjica za Python, katera ima ugrajene funkcije za delo z matrikami. Odprtokodna knjižnjica za Python, katera pripomore k optimizaciji Python programske kode. Odprtokodna knjižnjica za Python, katera je namenjena za interakcijo z Windows API. Programski jezik. Odprtokodna knjižnica za računalniški vid. Gradient je diferencialna operacija, definirana nad skalarnim ali vektorskim poljem, ki pove, v kateri smeri se polje najbolj spreminja. Momenti se uporabljajo za opis področij, ki so lahko bianrna ali sivinska. Z uporabo memontov lahko določimo površino, center in orientacijo objekta. 6

Poglavje 1 Uvod V zadnjih letih je računalniški vid dobil posebno vlogo v interakciji med človekom in multimedijskimi napravami. Z uporabo učinkovitih algoritmov lahko zaznavamo človeške gibe v realnem času. Te zaznave gibov lahko procesiramo in uporabimo za sprožitev določenega dogodka. Na primer: s premikom roke v levo smer lahko premaknemo miško na zaslonu v levo smer. Take algoritme lahko uporabimo tudi v varnostne namene in sicer, da sprožijo alarm ko zaznajo, da se nekdo sprehaja po dvorišču. Ta tehnologija se lahko uporablja tudi v zabavnejše namene. Kot primer navajamo Microsoftovo novo igralno konzolo imenovano Kinect, s katero lahko igramo razne igre samo z uporabo človeških gibov. V osnovi vse kar potrebujemo za izdelavo zgoraj omenjenih stvari, je dobro poznavanje algotimov za zaznavanje gibov in kamero s katero bomo zajemali slike. Cilj te naloge je predstaviti različne principe in metode za zaznavo gibov in prikazati praktično delovanje z eno izmed opisanih metod, na programu s katerim bomo lahko z določenimi gibi upravljali računalnik. V nadaljevanju bosta predstavljena dva glavna principa zaznavanja gibov in iz vsakega bosta natančneje opisani dve metodi. Pred tem pa se bomo seznanili z osnovami zaznavanja gibov. 7

Poglavje 2 Osnove zaznavanja gibov Ko govorimo o zaznavanju gibanja v računalniškem vidu, imamo v večini primerov opravka z zaporedjem slik, s pomočjo katerih želimo ugotoviti gibanja objektov, iz ene slike v drugo. Objekt na sliki, si lahko predstavljamo kot skupek sosednjih točk, ki ima določene lastnosti. Če želimo ugotoviti gibanje določenega objekta, se moramo spopasti najprej z identifikacijo objekta. Identifikacija znaša v ugotovitvi objekta na sliki. Če poznamo lastnosti objekta, katerega želimo identificirati, lahko te uporabimo za predelavo slike v kateri iščemo objekt. Na primer, če želimo ugotoviti lokacijo rdeče žoge na sliki, lahko uporabimo lastnost barve objekta za predelavo slike tako, da iz slike izluščimo samo objekte z rdečo barvo. Na takšen način lahko zelo efektivno zaznavamo gibanje žoge, vendar ob predpostavki, da se na sliki ne nahajajo drugi rdečkasti objekti. Pri identifikaciji objektov katerih ne poznamo, je potrebno določiti lastnosti na katere se navezujejo. Pomembno je, da so te lastnosti čim bolj unikatne, saj le takšne lastnosti vodijo do efektivnega sledenja določenega objekta. Slika 2.1: Slika prikazuje dobre in slabe lastnosti za sledenje določenega objekta. Lastnosti prikazane znotraj kvadrata so slabe, lastnosti znotraj kroga pa so dobre lastnosti za sledenje določenega objekta. Vir: povzeto po [6]. 8

Na sliki 2.1 lahko vidimo kaj so slabe in dobre lastnosti za sledenje avtomobila. Lastnosti, ki predstavljajo del vetrobranskega stekla ali rob pnevmatike niso primerne za efektivno sledenje avtomobila. To pa zato, ker lahko na sliki poiščemo več različnih lokacij, katere vsebujejo takšne lastnosti in posledično ne bomo mogli natančno povedati, kje se bo takšna lastnost na naslednji pojavila. Izkaže se, da so koti in unikatne teksture na objektu zelo dobre lastnosti za robustno in efektivno sledenje, saj so takšne lastnosti za razliko robov in enobarvnih tekstur unikatne. Sedaj ko poznamo kakšne so dobre lastnosti za sledenje, lahko te posredujemo metodam za zaznavaje gibov, katere bodo izračunale premik objekta iz ene slike v drugo. V tej nalogi bodo predstavljene metode iz dveh različnih principov, več v nadaljevanju. 2.1 Optični tok Ideja optičnega toka (ang. optical flow) je oceniti gibanje med dvema slikama, brez kakršnega znanja o kontekstu teh slik. Tipično, gibanje predstavlja nek dogodek, ki se zgodi pri premiku iz ene slike v drugo. Optični tok je prikazan na sliki 2.2. Slika 2.2: Prikaz optičnega toka. Označene lastnosti (kvadrati) na levi sliki, so sledene čez čas in njihovo premikanje je pretvorjeno v vektorje, ki zaznamujejo optični tok (desna slika). Vir: povzeto po [6]. Točkam na sliki lahko dodelimo neke vrste hitrosti ali optični tok, kateri predstavlja razdaljo premika točke iz ene slike v drugo. Takšen pristop se nanaša na gosti optični tok (ang. dense optical flow), kateri dodeli hitrost vsaki točki na sliki. Optični tok na neki točki nam pove smer gibanja te točke in njeno hitrost premika iz ene slike v drugo. V nadaljevanju bo predstavljena ena izmed metod gostega optičnega toka menovana Horn- Schunck-ova metoda. Na videz je pristop gostega optičnega toka enostaven, saj skuša primerjati točke dveh zaporednih slik, vendar se v praksi izkaže, da ni tako enostavno. Pri premiku belega lista papirja v levo, lahko opazimo, da je večina belih točk pred premikom ostala bela tudi po premiku. Samo robovi se bodo morda spremenili in to samo tisti robovi, ki so pravokotni na smer gibanja. Zato mora gosti optični tok imeti nekakšno interpolacijsko metodo med točkami, katere so lažje sledljive, tako da lahko rešimo premik točk, za katere 9

ne znamo ugotoviti premika. Vendar nas takšen način sledenja pripelje do visokih računskih stroškov, kar pa si ne želimo. Zgornji problem nas pripelje do alternative, imenovane redek optični tok (ang. sparse optical flow). Metode takšne narave, se nanašajo na neka povprečja od vnaprej definiranih podmnožic točk, katere bomo sledili. To pomeni, da računamo optični tok samo na določenih delih slike, katere nas zanimajo, kar pripomore do zmanjšanja računskih stroškov. Če bodo te točke vsebovale dobre lastnosti za sledenje, kot so koti, o katerih smo se že pogovarjali, bo sledenje teh točk relativno robustno. Za praktične aplikacije, v katerih je hitrost pomembna, je bolj primerno uporabljati redek optični tok. Za razliko od gostega optičnega toka je redek optični tok precej hitrejši. Matematično, optični tok na dvodimenzionanih slikah izhaja iz enačbe imenovane 2D Motion Constraint Equation[22] (v nadaljevanju enačba gibanja): I T v = I t, (2.1) kjer I T = (I x, I y ) predstavlja intenzivnost prostorskega gradienta, kateri nam pove v katero smer se slika najbolj spreminja in vektor v = (v x, v y ) predstavlja optični tok na točki (x, y) v času t. Ta enačba predpostavlja, da se točke ob gibanju ne spreminjajo in hkrati, da so premiki točk iz slike v sliko majhni. Kljub temu ima enačba zaradi dvodimenzionalne narave slik dve neznanki v x in v y kar pomeni, da merjenje za vsako točko posebej ne pripelje do željenega rezultata v dvodimenzijskem polju. Izračunamo lahko samo gibanje točk, katere so pravokotne na črto opisane z enačbo gibanja 2.1 2.3. Takšno vrst gibanja imenujemo pravokoten optični tok (ang. Normal flow). Slika 2.3: Prikaz dvo-dimenzionalnega optičnega toka na eni točki. Optični tok na eni točki je nedoločen. Lahko izračunamo samo gibanje točk, katere so pravokotne na črto opisano z enačbo gibanja. Pri pravokotnem optičnem toku lahko preide do problema odprtine (ang. aperture problem). Ta se zgodi kadar imamo majhno odprtino za merjenje gibanja. Kadar ugotovimo gibanje v neki majhni odprtini, pogosto vidimo rob in ne kot. Vendar sam rob ni dovolj, da bi ugotovili v katero smer se objekt premika (slika 2.4). 10

Slika 2.4: Problem odprtine - Skozi odprtino vidimo da se nek objekt premika iz leve proti desni (zgornja vrstica), vendar ne moremo zaznati da se objekt hkrati premika navzdol (spodnja vrstica). Vir: povzeto po [6]. Zaradi tega, morajo metode optičnega toka uporabiti dodatne predpostavke za izračun gibanja. V nadaljevanju bo predstavljena ena izmed najpopularnejših metod iz redkega optičnega toka, imenovana Lucas-Kanade. 2.1.1 Metoda Lucas-Kanade Algoritem Lucas-Kanade je bil prvotno predlagan leta 1981. Njegova avtorja sta bila Bruce D. Lucas in Takeo Kanade [19]. Algoritem je postal zelo popularen, saj se ga lahko enostavno uporabi za neko podmnožico točk na sliki. To pa zato, ker algoritem temelji samo na lokalnem območju na sliki kar pomeni, da je računanje gibanja zelo hitro. Slabost tega je, da ta algoritem ne zazna premike izven lokalnega območja. Ta problem so rešili tako, da so razvili Piramidni Lucas-Kanade algoritem, kateri zaznava spremembe od najvišje stopnje slike (grobe spremembe) pa do najnižjih stopenj (fine spremembe) [20]. V tej nalogi bomo predstavili samo osnovno metodo Lucas-Kanade. Osnovna ideja Lucas-Kande algoritma sestoji iz treh predpostavk (slika 2.5). 1. Stalna svetlost (ang. Brightness constancy). Točka iz nekega objekta na sliki naj se ne bi spremenila, če bi se premaknila iz ene točke na prvotni sliki v drugo točko na naslednji sliki. Za črno belo sliko to pomeni, da se svetlost točke ne bi spremenila iz ene slike v drugo. 2. Majhni premiki (ang. Temporal persistence). Premiki naj bi se spreminjali počasi s časom. V praksi to pomeni, da so premiki iz ene slike v drugo, relativno majhni. 3. Prostorska usklajenost (ang. Spatial coherence). Sosednje točke na sliki naj bi pripadale isti površini, imele podobno gibanje in se preslikale v bližnje točke na slikovni ravnini. 11

Slika 2.5: Osnovne tri predpostavke za Lucas-Kanade. Vir: povzeto po [6]. Prve dve predpostavki izhajata iz enačbe gibanja 2.1. Tretjo predpostavko (prostorska usklajenost), sta Lucas in Kanade uporabila za rešitev problema odprtine. Če se točke v neposredni bližini premikajo usklajeno, potem lahko rešimo gibanje centralne točke tako, da uporabimo sosednje točke za pridobitev sistema enačb. Na primer, če uporabimo okno velikosti 5x5 okoli trenutne točke za izračun gibanja, lahko sestavimo 25 enačb na sledeč način: I x (p 1 ) I y (p 1 ) I x (p 2 ) I y (p 2 ).. } I x (p 25 ) I y (p 25 ) {{ } A 25x2 [ vx v y }{{} d 2x1 ] = I t (p 1 ) I t (p 2 ) }. I t (p 25 ) {{ } b 25x1 (2.2) Sedaj imamo sistem enačb, v katerem imamo več enačb kot neznank. Za rešitev takšnega sistema, uporabimo metodo weighted least squares, kjer min Ad b 2 je rešen v sledeči obliki: (A T A) }{{} 2x2 }{{} d 2x1 = A T b }{{} 2x1 (2.3) Iz te relacije pridobimo komponenti optičnega toka v x in v y. Rešitev enačbe je torej: [ ] vx = (A T A) 1 A T b (2.4) v y Enačba je lahko rešljiva, ko je matrika (A T A) obrnljiva, obrnljiva pa je takrat, kadar je rang matrike enak 2. Z drugimi besedami to pomeni, da bo enačba rešljiva takrat, ko se bo objekt znotraj naše 5x5 odprtine premikal v vsaj dve smeri. 12

2.1.2 Metoda Horn-Schunck Metodo Horn-Schunck sta razvila Berthold Horn in Brian Schunck leta 1981 [21]. Metoda spada med gosti optični tok, kar pomeni da izračunava optični tok za vsako točko na sliki. Za izračun komponenti optičnega toka v x in v y sta Horn in Schunck predpostavila, da se točke na sliki premikajo v enako smer in hkrati, da je premik točk relativno podoben. To pomeni, da imajo vektorji optičnega toka enako oziroma podobno smer in hitrost gibanja. Matematično sta to dosegla tako, da sta uveljavila gladkostno omejitev (ang. smoothness constraint) nad komponentama optičnega toka v x in v y : v x x x 1 α I x (I x v x + I y v y + I t ) = 0 (2.5) v y y y 1 α I y (I x v x + I y v y + I t ) = 0 (2.6) Tukaj α predstavlja konstanto težnostnega koeficienta, poznana kot konstanta urejanja (ang. regularization constant). Večja kot je vrednost α, večja je gladkost vektorjev optičnega toka. Ta relativno preprosta konstanta za povečanje gladkosti ima tudi negativno lastnost na regijah, v katerih se optični tok spreminja v velikosti. Kar pomeni, da če se bodo določene točke na regiji premikale hitreje kot ostale, se bo optični tok teh točk prilagodil ostalim. To pa zato, ker se komponenti optičnega toka v x in v y izračunata na podlagi povprečja sosednjih točk. V primerjavi z metodo Lucas-Kanade, je ta metoda precej počasnejša in tudi ne podpira ujemanja na širšem območju kar pomeni, da ne zaznava velikih premikov. Zaradi naštetih pomanjkljivosti se to metodo le redko uporablja. 2.2 Mean shift in CAMshift V tem poglavju bosta predstavljeni dve neparametrični metodi, in sicer Mean shift in CAMshift. Ti metodi sta si med seboj zelo podobni. Za razliko od optičnega toka, kateri računa gibanje vseh točk (gosti optični tok) ali gibanje točk za določeno območje (redek optični tok) na sliki, ti dve metodi računata gibanje celotnega objekta. To pomeni, da ti dve metodi izračunata samo en vektor, kateri predstavlja hitrost in smer gibanja objekta. Oblika objekta katerega želimo slediti se v večini primerov spreminja. Recimo, če želimo slediti človeku kateri se sprehaja po ulici, bomo zelo težko definirali njegovo strukturo, saj se ta ob hoji spreminja. Zaradi tega, ti dve metodi modelirajo objekt s pomočjo barvnih histogramov. 2.2.1 Histogrami Histogram je vrsta grafikona, ki se uporablja v statistiki za prikaz porazdelitve določene statistične spremenljivke. Če govorimo o barvnem histrogramu, nam ta predstavlja graf, kateri prikazuje število pojavitev barvnih vrednosti na sliki za vnaprej določene skupine (bin-e) (slika 2.6). Barvni histogram je lahko zgrajen nad poljubnim barvnim prostorom s poljubno dimenzijo. Sestavljen je lahko iz več histogramov, kateri vsak predstavlja določeno komponento barvnega prostora. Vsak histogram je sestavljen iz določenega števila bin-ov. Bin si lahko 13

Slika 2.6: Prikaz histograma na sivinski sliki. Na levi strani je sivinska slika in na desni je prikazan njen histogram. X os histograma predstavlja število bin-ov in y os predstavlja število pojavitev barvnih vrednosti na sliki. predstavljamo kot skupino, katera vsebuje skupek barvnih vrednosti določene komponente. Za lažje razumevanje, vzemimo R komponento RGB barvnega prostora in jo razdelimo na 4 bin-e. V osnovi, R komponenta razpenja barvne vrednosti od 0 do 255. Če to razdelimo v 4 bin-e, dobimo štiri skupine (bin-e), katere vsebujejo enako število barvnih vrednosti (v našem primeru, vsak bin vsebuje 64 barvnih vrednosti): 1. bin vsebuje barvne vrednosti od 0 do 63 2. bin vsebuje barvne vrednosti od 64 do 127 3. bin vsebuje barvne vrednosti od 128 do 191 4. bin vsebuje barvne vrednosti od 192 do 255 V tem primeru, v bin-e shranjujemo število pojavitev barvnih vrednosti R komponente na določeni sliki. To naredimo tako, da na podlagi barvne vrednosti R komponente na neki točki, povečamo za ena samo tisti bin v katerega vrednost spada. Torej, če bo določena točka na sliki vsebovala barvno vrednost 24 bomo 1. bin-u prišteli vrednost ena, saj 24 pripada območju od 0 do 63. Če se vrnemo na zgornjo sliko 2.6, lahko opazimo, da je histogram na sliki razdeljen na 256 bin-ov kar pomeni, da merimo število pojavitev za vsako barvno vrednost posebej. Za sledenje določenega objekta s pomočjo Mean shift ali CAMshift metode, je najprej potrebno ločiti objekt od ozadja. Za lažje razumevanje bomo predstavili ločitev objekta od ozadja s preprostim primerom. Na sliki 2.7a imamo sliko roke katero bi radi ločili od ozadja. Za ločitev roke od ozadja bomo uporabili H komponento HSV barvnega prostora. Postopek ločitve lahko opišemo v naslednjih korakih: 1. definiramo novo sivinsko sliko v kateri bomo shranjevali verjetnosti (od 0 do 255) za vsako točko. 14

2. označimo področje roke na sliki 2.7a in nad označenim področjem izračunamo enodimenzijski histogram H komponente HSV barvnega prostora. Histogram bo razdeljen na 180 bin-ov kar pomeni, da bo vsaka barvna vrednost H komponente predstavljala en bin. Za razliko od ostalih barvnih komponent, katere razpenjajo barvne vrednosti od 0 do 255, H komponenta HSV barvnega prostora razpenja barvne vrednosti od 0 do 179. 3. preberemo vrednost H komponente za vsako točko na originalni sliki 4. za vsako prebrano vrednost na lokaciji (x, y) poiščemo ustrezen bin na histogramu in vrednost poiskanega bin-a zapišemo v sliko definirano v točki 1 na lokacijo (x, y). Na primer, če je vrednost točke na lokaciji (0,0) znotraj originalne slike enaka 26, poiščemo na izračunanem histogramu bin 26 in zapišemo njegovo vrednost v novo sliko na lokacijo (0,0). Večja kot je vrednost bin-a, večja je verjetnost da bodo točke, katere pripadajo tem bin-u predstavljaje roko. Pri tem moramo paziti, saj je lahko vrednost posameznega bin-a večja, kot je maksimalna vrednost v sivinskih slikah (255). Če pride do tega, zapišemo vrednost 255 namesto vrednost bin-a. 5. rezultat tega postopka je prikazan na sliki 2.7b Slika 2.7: Prikaz delovanja barvnega histograma za ločitev roke od ozadja, s pomočjo H komponente HSV barvnega prostora. Leva slika predstavlja originalno sliko, bel kvadrat predstavlja označeno območje za izračun histograma, kateri je razdeljen na 180 bin-ov. Desna slika predstavlja ločeno roko od ozadja. Svetlejše točke na desni sliki predstavljajo večjo verjetnost in temnejše točke predstavljajo manjšo verjetnost, da točka pripada roki. Teoretično je sivinska slika prikazana na sliki 2.7b sestavljena iz največ 180 različnih sivinskih vrednosti med 0 in 255, saj tolikšno je število bin-ov iz katerih beremo vrednosti. Sedaj lahko takšen rezultat prikazan na 2.7b posredujemo Mean shift ali CAMshift metodi, kateri bosta izračunali smer in hitrost gibanja roke, več v nadaljevanju. 15

2.2.2 Metoda Mean shift Mean shift predstavlja metodo neparametričnega razvrščanja v skupine (ang. clustering). Za razliko od klasičnega K-means pristopa za razvrščanje v skupine [7], nima vgrajenih predpostavk o obliki porazdelitve in o število gruč (ang. clusters). Fukunaga in Hostetler sta bila prva katera sta predlagala Mean shift metodo leta 1975 [8]. Leta 1995 jo je Cheng sprejel za analizo slik [9]. Kasneje so jo Comaniciu, Meer in Ramesh razširili na probleme računalniškega vida na področju segmentacije in glajenja slik [10] ter na področju sledenja [11]. Mean shift se je na začetku uporabljal za ugotovitev najgostejšega območja določene podatkovne distribucije (ang. data distribution). Recimo, da imamo točke na koordinatnem sistemu z x in y osjo in bi želeli ugotoviti na katerem območju so točke najgostejše (slika 2.8). Če želimo uporabiti Mean shift metodo za ugotovotev najgostejšega območja, moramo najprej izbrati začetno območje. Začetno območje je lahko poljubne oblike, velikosti in na poljubnem mestu. Različna začetna območja nas lahko pripeljejo do različnih rešitev še posebej, kadar imamo več gostejših območij. V našem primeru smo izbrali začetno območje okrogle oblike w 0 (slika 2.8), katerega podamo Mean shift metodi. Za lažje razumevanje predpostavimo, da točke na koordinatnem sistemu niso utežene. Nato delovanje Mean shift metode lahko opišemo v sledečih korakih: 1. definiramo spremenljivko X n (x, y), kjer vrednosti x in y predstavljata središče začetnega območja. n predstavlja iteracijo v kateri se nahajamo, to nastavimo na vrednost 0 (na sliki X 0 (x, y)). 2. V začetnem območju w n, poiščemo središče točk (v nadaljevanju centroid), katere se nahajajo znotraj začetnega območja. Povečamo n za ena in shranimo koordinate centroida x in y v X n (x,y). V našem primeru centroid predstavlja povprečje x in y koordinati točk, vsebovane v začetnem območju. 3. Začetno območje centriramo na izračunan centroid X n (x,y). Vektor, kateri poteka iz X n 1 (x,y) do X n (x,y) se imenuje Mean shift vektor. 4. Preverimo, če je dolžina Mean shift vektorja večja od nič. Če je enaka nič, nam metoda vrne območje w n, če je večja od nič se vrnemo na točko 2. Ponavadi Mean shift metoda vsebuje tudi zaustavitveni pogoj, katerega podamo kot parameter. V zgornjem primeru se bo metoda ustavila, ko bo Mean shift vektor enak 0, vendar lahko bi nastavili, da nam vrne območje, ko je Mean shift vektor blizu ničle. V praksi se za zaustavitveni pogoj poda maksimalno število iteracij. Recimo, če podamo metodi število 10 kot maksimalno število iteracij pomeni, da če metoda ne konvergira v desetih iteracijah, nam vrne območje iz zadnje iteracije. Izkaže se, da se v večini primerov metoda zaključi pred deseto iteracijo. Če Mean shift metodo združimo z barvnimi histogrami, lahko to metodo uporabimo za sledenje objekta. In sicer, izberemo začetno območje, nastavimo zaustavitvene pogoje in izvedemo Mean shift metodo nad sliko pridobljeno s pomočjo histogramov (slika 2.7b). Na sliki 2.7b lahko opazimo, da imamo točke različne svetlosti, kar pomeni da so točke utežene. Kako izračunati centroid, če imamo množico uteženih točk bomo povedali pri CAMshift-u, 16

Slika 2.8: Delovanje Mean shift metode. Zasenčena črna točka X 0 (x, y) predstavlja središče začetnega območja, n predstavlja iteracijo v kateri se nahajamo, črtkan krog predstavlja območje in puščice predstavljajo premike iz X n 1 (x,y) do X n (x,y) (Mean shift vektor). Vir: povzeto po [12]. kjer bomo postopek podrobneje razložili. Rezultat metode Mean shift nam pove območje nahajanja sledenega objekta, v našem primeru roke. Torej, če želimo slediti določenemu objektu moramo najprej ločiti objekt od ozadja s pomočjo histograma, izvesti Mean shift metodo nad rezultatom histograma in to moramo početi za vsako sliko posebej. Slabost te metode je, da je občutljiva, če se objekt približa ali oddalji od objektiva, saj se velikost začetnega območja ne spreminja. Kar pomeni, če imamo tako veliko začetno območje, da v njem ležita dva podobna objekta, ne bomo morali pravilno sledili želenemu objektu, saj bo centroid ležal med dvema objektoma in ne na želenem objektu. Zaradi tega so to metodo razširili v CAMshift metodo, katera je odporna na omenjeno težavo, več v nadaljevanju. 17

2.2.3 Metoda CAMshift Bradski je leta 1998 predlagal CAMshift metodo, s katero lahko sledimo določenemu objektu v realnem času tudi na zelo počasnih računalnikih [13] (v članku je Bradski uporabljal Pentium II @ 300Mhz). Ta metoda izhaja iz prej predstavljene Mean shift metode, katero je Bradski prilagodil tako, da je odporna nad približevanjem in oddaljevanjem sledenega objekta. Izraz CAMshift pomeni Continuously Adaptive Mean shift, saj je CAMshift v osnovi Mean shift z razliko, da ne temelji na statičnem začetnem območju (v nadaljevanju začetno okno). Bradski je v svojem članku uporabil to metodo za letenje čez tridimenzionalni grafični model Havajev in za igranje računalniške igre Quake 2 na podlagi sledenja obraza. V tej nalogi bo ta metoda uporabljena za upravljane kurzorja na podlagi sledenja roke. CAMshift metoda računa momente (ang. moments), s pomočjo katerih izračuna centroid nad rezultatom histogramov (slika 2.9b) znotraj začetnega okna (področje katerega bomo sledili), velikost novega iskalnega okna (začetno okno se ročno izbere ob inicializaciji) in tudi orientacijo sledenega objekta. Za razliko Mean shift metode se iskalno okno pri CAMshiftu spreminja, zato da lahko sledimo tudi objektom, kateri se približujejo ali oddaljujejo od objektiva in hkrati je tudi bolj odporna na zavajajoče objekte (slika 2.10). Slika 2.9: a) Prikaz iskalnega okna (plav kvadrat) in njenega centroida (središče kvadrata) CAMshift metode; b) Prikaz slike pridobljene s pomočjo eno-dimenzijskega histograma na H (hue) komponenti HSV barvnega prostora. Vir: povzeto po [13]. Slika 2.10: Prikaz CAMshift metode uporabljena za sledenje obraza, odporna na zavajajoče objekte (dodaten obraz). Beli križ predstavlja orientacijo sledenega objekta (obraza). Vir: povzeto po [13]. 18

Za izračun centroida znotraj iskalnega okna moramo najprej izračunati moment 0. reda M 00 (ang. zeroth moment) M 00 = I(x, y), (2.7) x y nato poiščemo še moment 1. reda (ang. first moment) za x M 10 in y M 01 M 10 = x y xi(x, y) M 01 = x y yi(x, y), (2.8) in sedaj se lokacija centrioda (x c, y c ) izračuna kot x c = M 10 M 00 y c = M 01 M 00, (2.9) kjer I(x, y) predstavlja verjetnost točke (x, y) (v primeru sivinske slike 2.9 je ta verjetnost med 0 in 255) na sliki ter x in y pa predstavljata območje iskalnega okna. Ta postopek ponavljamo dokler se lokacija centroida ne spreminja več (ali dokler ne pridemo do zaustavitvenega pogoja, katerega podamo ob inicializaciji metode). Nato za izračun orientacije dvo-dimenzionalne verjetnostne distribucije potrebujemo še moment 2. reda (ang. second moment) za x 2 M 20 in y 2 M 02 M 20 = x nato orientacija objekta je θ = y x2 I(x, y) arctan ( M20 M 02 = x ( ) M10 M 01 2 x c y c M 00 ) ( ) M02 x M 2 c yc 00 M 2 00 2 y y2 I(x, y), (2.10). (2.11) Sedaj lahko pridobimo dolžino in širino sledenega objekta s pomočjo zgornje enačbe na sledeč način: Naj bo a = M 20 x 2 M c, 00 ( ) M10 M 01 b = 2 x c y c in M 00 c = M 02 M 00 y 2 c, nato se dolžina l in širina w iz izračuna kot (a + c) + b l = 2 + (a + c) 2, (2.12) 2 (a + c) b w = 2 + (a + c) 2. (2.13) 2 19

Slika 2.11: a) Prikazuje dolžino, širino in orientacijo sledečega objekta (obraza) b) Prikaz slike pridobljene s pomočjo eno-dimenzijskega histograma na H (hue) komponenti HSV barvnega prostora. Vir: povzeto po [13]. Na sliki 2.11 so vidni rezultati zgornjih enačb pri sledenju obraza. Sedaj ko smo vse to izračunali, moremo izračunati še velikost novega iskalnega okna. Velikost novega iskalnega okna na dvo-dimenzionalni verjetnostni distribuciji, kjer je maksimalna verjetnost neke točke 255 se izračuna na sledeč način s = 2 M00 256, (2.14) kjer s predstavlja širino okna in vrednost 256 predstavlja skupno število različnih verjetnosti. Za višino iskalnega okna je Bradski postavil na 6 s, saj se je ukvarjal s sledenjem obraza, 5 katera velikost je eliptična. Vendar, če želimo slediti poljubnemu objektu je razmerje med širino in višino iskalnega okna neznana. Za rešitev tega problema so predlagali naslednje [14]: Naj bo b širina, h višina in s 2.14 velikost iskalnega okna, dobimo bh = s 2 (2.15) Razmerje med dolžino in širino iskalnega okna naj bo enako razmerju dolžine l 2.12 in širine w 2.13 sledečega objekta ter dobimo b h = w l, (2.16) nato w l b = l s h = w s (2.17) S predlaganim postopkom za izračunavanje iskalnega okna, lahko sledimo objektom različnih oblik in hkrati je tudi bolj odporen na deformacije sledenega objekta. Celotna kompleksnost CAMshift metode je O(αN 2 ), kjer je α konstanta in NN pa velikost slike. Velikost konstante α je odvisna od računanja momentov in število iteracij, potrebno za izračunanje centroida. 20

Poglavje 3 Implementacija Upravljanje kurzorja z gibi rok Kot smo že omenili, je to poglavje namenjeno predstavitvi praktične implementacije računalniške miške s pomočjo računalniškega vida. Opisano bo natančno delovanje programa, metode katere so bile uporabljene, nastali problemi ki so bili prisotni in zaključek. 3.1 Ideja Osnovna ideja programa je, da lahko premikamo miško po ekranu brez dejanske uporabe miške, vendar z uporabo spletne kamere in roke. Za implementacijo programa je bil uporabljen programski jezik Python, s pomočjo odprtokodne knjižnjice OpenCV [24], katera vsebuje funkcije za zajemanje in obdelavo slik [25], za premik miške po ekranu je bila uporabljena knjižnjica PyWin32 [28]. Za pravilno delovanje programa mora biti spletna kamera postavljena v višini vsaj 30 cm nad podlago na kateri bo roka postavljena in mora biti obrnjena proti njej. V praksi je najlažje, da se kamera postavi nad ekranom, katera je obrnjena proti mizi, kjer bo postavljena roka (za lažjo razumevanje slika 3.1). Slika 3.1: Postavitev kamere in roke za pravilno delovanje programa. Priporočljivo je, da podlaga na kateri bo roka postavljena ne vsebuje predmetov, katerih barva je podobna barvi kože, saj lahko takšni predmeti pripeljejo do nepravilnega delovanja 21

programa. Na začetku, ko program poženemo moremo označiti področje roke, saj se bo na podlagi označenega območja program naučil o naši barvi kože in bo posledično znal ločiti roko od ozadja. Tukaj je pomembno, da ko označujemo območje roke ne označimo še podlage, saj pride do šuma pri prepoznavanju roke (več v nadaljevanju). Ko označimo območje roke, bo program to območje tudi posredoval CAMshift algoritmu, kateri kot že omenjeno je bil uporabljen za sledenje roke. CAMshift algoritem je implementiran v OpenCV-ju in za delovanje potrebuje tri parametre. Prvi parameter je v našem primeru slika na kateri je roka ločena od ozadja, drugi parameter je območje zanimanja (v našem primeru območje roke) ter treji parameter pa so ustavitveni pogoji. Po izvedbi nam CAMshift algoritem vrne novo območje zanimanja, saj kot že vemo iz prejšnjega poglavja CAMshift algoritem spremija velikost okna na podlagi sledenega objekta. Torej v našem primeru se bo okno povečalo, če bomo vse prste stegnili in pomanjšalo, če bomo vse prste skrčili v pest (slika 3.2). Slika 3.2: Slika prikazuje roko katera je ločena od ozadja in plavo obrobljen kvadrat predstavlja območje zanimanja katero nam vrne CAMshift algoritem. Ko se program pravilno nauči prepoznavati roko, lahko začnemo premikati kurzor po ekranu. Za premikanje kurzorja po ekranu mora biti eden od prstov stegnjen (velja za vse prste razen palca. Palec je uporabljen za sprožitev levega miškinega gumba), ostali pa skrčeni tako da tvorijo pest. Na sliki 3.3 so prikazani pravilni položaji (zgornja vrstica) in nepravilni položaji (spodnja vrstica) za premikanje kurzorja. Slika 3.3: Prikaz pravilnih (slike v zelenem okvirju) in nepravilnih (slike v rdečen okvirju) položajev rok za premikanje kurzorja. 22

3.2 Delovanje programa Program je razdeljen na tri dele: Prvi del je učenje barv roke, katero se izvede na začetku delovanja, drugi del sestoji iz detekcije in sledenje prsta ter prepoznavanje palca (za levi miškin gumb), tretji del pa je izračun koordinat na zaslonu s pomočjo koordinat, ki jih pridobimo iz spletne kamere ter premik kurzorja (prikaz na sliki 3.4). Slika 3.4: Diagram prikazuje delovanje programa. 3.2.1 Prepoznavanje in segmentacija roke Program za prepoznavanje roke uporablja tri različne pristope. Prvi pristop uporablja RGB barvni prostor, ostala dva pa uporabljata HSV barvni prostor za prepoznavanje roke. Rezultati vseh treh pristopov se nato združijo v eno sliko, s tem da se v programu lahko opcijsko izklopi združevanja rezultata na podlagi RGB barvnega prostora (v nadaljevanju bo razloženo zakaj). Prvi pristop kateri je bil predlagan na RGB barvnem prostoru [15] deluje tako, da vsako točko na sliki filtrira s sledečim filtrom: If ( R-G >20 and R-G <50 and R>B and R>G and B>G) then skin pixel else non-skin pixel Kar pomeni, da če točka ustreza pogoju jo pobarvamo v belo (je koža), če ne jo pobarvamo v črno in dobimo črno belo sliko. V članku [16] so predlagali blokoven pristop zgornjega filtra. Ideja je da sliko razdeli na bloke in v najboljšem primeru pregleda samo kote bloka. V primeru, da vsi koti ustrezajo zgoraj omenjenem pogojem (RGB filtru) bo cel blok zaznan kot koža. Če vsaj eden od kotov ustreza pogoju, preverimo pogoj za celoten blok, če koti ne ustrezajo pogoju potem predpostavimo, da blok ne predstavlja kože. Ta pristop je bil najprej uporabljen, saj bi moral biti precej hitrejši, kot da bi preverili za vsako točko na sliki posebej. Vendar se je izkazalo da temu ni tako, to pa zato ker so iteracije po matrikah v Python-u neučinkovite, v primerjavi s programskem jeziku C++. Problem je bil rešen z uporabo Python knjižnjice NumPy [27], katera zna zelo hitro in efektivno izvajati operacije nad matrikami. Rezultat tega pristopa je viden na sliki 3.5. Iz slike lahko vidimo, da omenjen filter na beli podlagi učinkuje zelo dobro, na temni podlagi pa precej slabše. 23

Prednost tega pristopa je, da za razpoznavanje roke ni potrebno oznac evati podroc ja roke, kot je potrebno pri ostalih dveh pristopih. Slika 3.5: Slika prikazuje delovanje filtra za razpoznavanje c lovekove koz e na RGB barvnem prostoru. Sliki na levi strani predstavljata originalni sliki, sliki na desni pa predstavljata rezultat filtra nad originalnima slikama (rezultat originalne slike na levi, je prikazan v isti vrsti na desni strani). Naslednja dva pristopa, kot z e prej omenjeno uporabljata HSV barvni prostor, saj naj bi bil ta bolj povezan s c lovekovimi barvami [1][2][3]. Pravijo tudi, da so za loc itev roke od ozadja potrebne le H in S komponenti HSV prostora [1][2][3], vendar se je izkazalo da na temni podlagi temu ni tako (slika 3.6). Na podlagi omenjene tez ave s temnimi podlagami, oba pristopa za uc enje roke uporablja celoten HSV prostor. Slika 3.6: Na levi je originalna slika, na sredini sta bili uporabljeni H in S komponenti za uc enje roke, na desni pa so bile uporabljene vse tri komponente. Pri obeh je bilo obmoc je uc enja roke enako, kamera Logitech C510 pa je bila uporabljena za zajem slik. Drugi pristop za uc enje roke uporablja tri-dimenzionalni histogram, saj deluje hitro in zelo uc inkovito. V OpenCV-ju se histogram ustvari s funkcijo CreateHist, katera potrebuje tri parametre. Prvi parameter predstavlja s tevilo bin-ov za vsako dimenzijo histograma, drugi tip histograma in zadnji razpon vrednosti za vsako dimenzijo. S tevilo bin-ov za vsako dimenzijo histograma je postavljena na 32, saj so ugotovili, da tako s tevilo prinas a najboljs e rezultate za detekcijo koz e [17]. Ko ustvarimo histogram, moramo pretvoriti sliko iz RGB v HSV. To naredimo s pomoc jo funkcije CvtColor, katera zna pretvarjati iz enega barvnega prostora v drugega. Nato HSV sliko razdelimo na komponente H, S in V, za to imamo v OpenCV-ju na voljo Split funkcijo, katera razdeli barvni prostor po komponentah, tako da vsako komponento shrani v svojo sliko. Po funkciji Split moramo oznac iti podroc je roke in iz 24

oznac enega podroc ja pobrati vse tri komponente. To naredimo tako, da najprej s funkcijo SetImageROI nastavimo na sliki obmoc je zanimanja in nato s funkcijo Copy, kopiramo izbrano obmoc je v novo sliko, to je potrebno narediti za vsako komponento posebej. Kadar smo kopirali izbrana obmoc ja, uporabimo na njih funkcijo CalcHist, katera bo izrac unala histogram na podlagi izbranih obmoc ij za vse tri komponente H, S in V in shranila v zac etni histogram. Omenjena funkcija ima s e en dodaten parameter, kateri omogoc a da lahko dodajamo nova obmoc ja zanimanja brez da bi odstranila stara, vendar tega program ne uporablja. Sedaj ko imamo histogram izrac unan, ga uporabimo na H, S in V komponentah katere smo pridobili s pomoc jo Split funkcije, in sicer s funkcijo CalcBackProject, katera nam vrne sivinsko sliko prikazano na sliki 3.7. Slika 3.7: Slika prikazuje rezultat OpenCV funkcije CalcBackProject. Kot je vidno na zgornji sliki 3.7, nam funkcija vrne ne samo c rne in bele toc ke, ampak tudi vmesne, kar pomeni da toc ke katere so bele je verjetnost da je roka najvec ja, sive toc ke pomenijo da je manjs a verjetnost in toc ke katere so c rne pa, da je verjetnost najmanjs a. Izkazalo se je, da vse toc ke katere niso bile c rne pripadajo roki, tako da naslednja funkcija katera je bila uporabljena se imenuje Threshold. S pomoc jo Threshold-a pobarvamo vse ne c rne toc ke v bele toc ke, tako da uporabimo binarni tip threshold-a in kot threshold value damo vrednost 0. Rezultat tega pristopa na temni in svetli pdolagi je prikazan na sliki 3.8. Slika 3.8: Slika prikazuje rezultat histograma za prepoznavanje roke na HSV barvnem prostoru. Sliki na levi strani predstavljata originalni sliki, sliki na desni pa predstavljata rezultat histograma nad originalnima slikama (rezultat originalne slike na levi, je prikazan v isti vrsti na desni strani) 25

Tretji pristop, kot z e povedano uporablja HSV barvni prostor in je relativno preprost. Ideja tega pristopa je, da na oznac enem podroc ju zanimanja izrac unamo povprec je za H avgh, S avgs in V avgv komponento in nato pobarvamo toc ke katere ustrezajo naslednjemu filtru. If (H>(avgH-3) and H<(avgH+6) and S>(avgS-25) and V>(avgV-15)) then skin pixel else non-skin pixel Do teh mejnih vrednosti smo pris li s testiranjem na razlic nih podlagah ob razlic nih svetlobnih pogojih, predvsem temnih pogojih, za katere je bil filter posebej prirejen, saj se ostala dva pristopa v temnih pogojih ne odraz ata dobro 3.10. Za implementacijo tega filtra smo uporabili OpenCV funkciji Avg in InRangeS. Funkcija Avg nam vrne povprec ne vrednosti za H, S in V komponente na oznac enem obmoc ju in nato smo zgornji filter dali kot parameter funkciji InRangeS, katera nam vrne c rno belo sliko, pri kateri bele toc ke predstavljajo roko. Rezultat kateri je viden na sliki 3.9, je bil izveden z enakimi pogoji (enaka svetloba in obmoc je za uc enje) kot na sliki 3.8 iz drugega pristopa. Slika 3.9: Slika prikazuje rezultat z uporabo filtra na HSV barvnem prostoru za prepoznavanje roke. Sliki na levi strani predstavljata originalni sliki, sliki na desni pa predstavljata rezultat histograma nad originalnima slikama (rezultat originalne slike na levi, je prikazan v isti vrsti na desni strani) Slika 3.10: Slika prikazuje delovanje pristopov za zaznavanje roke v zelo temnih pogojih. a) Originalna slika b) Tretji pristop, z uporabo povprec ja H, S in V komponente c) Drugi pristop, z uporabo histogramov na HSV barvnem prostoru d) Prvi pristop, z uporabo predlaganega filtra na RGB barvnem prostoru 26

Sedaj moremo rezultate teh pristopov združiti v eno samo sliko. To naredimo s pomočjo OpenCV funkcije Or katera združi dve sliki tako, da istoležne točke na slikah primerja. Če je na vsaj eni sliki bela točka, bo na združeni sliki bela točka, če ne bo črna točka. Program najprej združi drugi in tretji pristop in nad rezultatom združimo še prvi pristop, za katerega smo omenili, da ga lahko izklopimo (se ne izvede združitev). To pa zato, ker ob povzroča veliko šuma kadar se na sliki pojavljajo kakšni rumenkasti predmeti 3.10 in posledično onemogoča pravilno delovanje programa. Slika 3.11: Slika prikazuje delovanje pristopov za zaznavanje roke na podlagi z različnimi objekti. a) Originalna slika b) Tretji pristop, z uporabo povprečja H, S in V komponente c) Drugi pristop, z uporabo histogramov na HSV barvnem prostoru d) Prvi pristop, z uporabo predlaganega filtra na RGB barvnem prostoru Po združitvi vseh treh pristopov, vidno na sliki 3.12b, bomo sliko izboljšali s pomočjo OpenCV filtrov, s katerimi bomo odstranili šume in napolnili črne luknje, katere so prisotne na roki. Črne luknje bomo napolnili z en-kratnim zapiranjem slike s pomočjo funkcije MorphologyEx, s funkcijo Smooth z uporabo medianinega filtra v velikosti 15x15, bomo odstranili šume in pogladili robove roke. Rezultat je viden na sliki 3.12c Slika 3.12: Slika prikazuje združitev vseh pristopov za prepoznavanje roke in njeno izboljšavo z uporabo OpenCV filtrov. a) Originalna slika b) Združitev vseh pristopov za prepoznavanje roke c) Izboljšava združitve s pomočjo OpenCV filtrov 3.2.2 Detekcija prsta Če želimo poiskati na sliki prst, moramo najprej poznati območje, kjer se roka nahaja. Tukaj nastane problem, saj območje zanimanja, katerega nam ga vrne CAMshift algoritem ne pokriva celotne roke. Območje, ki nam ga CAMshift algoritem vrne je prikazan na sliki 3.2. Problem je bil rešen, tako da smo na podlagi CAMshift-ovega območja izračunali novo območje, ki pa je zajemalo celotno površino roke. Izračunali smo ga tako, da smo si za 27

osnovo vzeli spodnjo stranico CAMshift-ovega območja. Spodnja stranica vedno predstavlja začetek roke in na podlagi te stranice smo izračunali novo območje, tako da spodnja stranica novega območja leži na spodnji stranici CAMshift-ovega območja, dolžina in širina novega območja pa se določi v programu. Kljub temu imamo še en problem, in sicer palec kateri bo bil uporabljen za sprožitev miškinega levega gumba, se na levi roki nahaja na desni strani, na desni roki pa na obratni strani. Ta problem je bil rešen tako, da smo v program dodali možnost izbire za sledenje leve ali desne roke, katera je na podlagi izbrane roke premaknila okno bolj na levo ali na desno (slika 3.13). Slika 3.13: Slika prikazuje novo izračunano območje za levo in desno roko. Plavo obrobljen kvadrat predstavlja CAMshift-ovo območje zanimanja (iskalno okno), zelen obrobljen kvadrat pa predstavlja novo izračunano območje roke za levo roko (na levi) in desno roko (na desni). Sedaj ko imamo novo področje roke izračunano lahko začnemo iskati prst. Iskanje prsta poteka tako, da se sprehodimo po območju roke, in sicer začnemo zgoraj levo ter se sprehajamo proti desni strani. Na začetku imamo naslednje spremenljivke, katere so vse postavljene na vrednost 0: število prstov, širina prsta in višina prsta ter maksimalna širina prsta, katera vrednost je določena v programu. Če pridemo do bele točke si shranimo koordinate točke, saj je možnost da je naš iskani prst, povečamo število prstov in pa tudi širino prsta za ena ter to počnemo dokler se ne pojavi črna točka. Če se pojavi po belih točkah črna točka najverjetneje pomeni, da je konec prsta, vendar se je treba do konca v desno sprehoditi, saj je možnost da se bo še kašno zaporedje belih točk pojavilo. Če se to zgodi pomeni, da smo zaznali dva prsta in posledično končamo z iskanjem, saj eden od pogojev za iskanje je, da moramo za premik miške imeti natančno en prst stegnjen. Če se zaporedje belih točk, se ob sprehodu iz leve proti desni pojavi enkrat, vendar je to zaporedje večje od maksimalne širine prsta ali pa manjše od širine prsta, katero nastavimo v programu, končamo z iskanjem, saj lahko združimo dva prsta tako, da na sliki izgleda kot eden. Če se nobeden od zaustavitveni pogojev zgodi, ko preidemo iz leve proti desni, povečamo višino prsta za ena, se premaknemo eno vrstico nižje in ponovimo postopek. Postopek ponavljamo dokler se kakšen od zaustavitvenih pogojev zgodi ali pa da je višina prsta večja od višina prsta, katero nastavimo v programu. Če smo ugotovili da je višina prsta večja od nastavljene, se nam na prstu pojavi rdeča pika in začnemo premikati kurzor (slika 3.14). Kadar program preide v stanje sledenja, kar pomeni da je zaznal prst, se začne iskanje palca, s pomočjo katerega, kot smo že večkrat omenili, sprožimo levi miškin gumb. Območje 28

Slika 3.14: Slika prikazuje stanje, v katerem premikamo kurzor. Plavo obrobljen kvadrat je območje, ki nam ga CAMshift algoritem vrne, zeleno obrobljen kvadrat je našo prirejeno območje v katerem iščemo prst, rumena barva predstavlja naš prst, rdeča pika predstavlja točko na podlagi katere bomo računali premik kurzorja in rdeč obrobljen kvadrat predstavlja območje v katerem iščemo palec. v katerem iščemo palec se izračuna na podlagi zaznanega prsta za premik kurzorja in območja roke. Izračuna se tako, da od območja roke odbijemo področje prsta s katerim premikamo kurzor. Rezultat novega izračunanega območja je prikazan na sliki 3.14. Postopek za iskanje palca je zelo podoben postopku za iskanje prsta za premik kurzorja, edina sprememba je ta, kako iteracije po območju potekajo. Za obe roki (levo in desno) potekajo iteracije od zgoraj navzdol, s tem da za levo roko se premikamo proti desni, za desno pa proti levi strani. Ko zaznamo palec, program sproži levi miškin gumb tako, da ga postavi v stanje LEFTDOWN. Dokler palca ne skrčimo bo bil levi miškin gumb vedno pritisnjen, kar pomeni, da lahko označujemo in premikamo objekte na ekranu. Kadar bomo palec skrčili se bo stanje levega miškinega gumba spremenilo v LEFTUP, kar pomeni da smo nekaj pritisnili, oziroma če smo nek objekt premikali, ga bomo spustili. Problem nastane, kadar želimo sprožiti dvojni miškin klik, saj če želimo to narediti moremo klikniti dvakrat na enako mesto, vendar se nam v večini primerov roka premakne, ko iztegnemo palec. Za rešitev tega problema je bilo treba beležiti časovne razmake med dvemi kliki. Če je bil razmak dveh klikov pod nekim vnaprej določenim časom, je program sprožil levi klik na lokaciji prejšnjega klika. Vendar izkazalo se je, da tudi to ni bilo dovolj, saj če želimo sprožiti dvojni klik moremo to storiti zelo hitro in v večini primerov ne uspemo dovolj hitro stegniti in skrčiti palca. Zato je bilo potrebno izvesti dvojni klik, kadar se dva klika izvedejo pod določenim časom. Vendar se pri tem dejansko zgodi trojni klik, saj prvi klik se zgodi, ko uporabnik prvič stegne in skrči palec. Če pod določenim časom še enkrat stegne in skrči palec, bo program izvedel še dva klika. V praksi se to sploh ne opazi in hkrati je bila to edina uporabna rešitev za izvajanje dvojnega klika. 3.2.3 Premik kurzorja Enkrat ko zaznamo prst, s katerim bomo premikali kurzor, vse kar je potrebno še narediti je ustrezen premik miške na zaslonu. Prvi problem s katerim se moremo soočiti je, da ne moremo koordinate zaznanega prsta direktno preslikati na zaslon, zaradi šumov, ki 29

nastanejo pri segmentacije roke, saj bi kurzor skakal po zaslonu. Za rešitev te težave ima program ugrajeno krožno vrsto, v katero program shranjuje zadnjih n koordinat, pri čemer se število n lahko spremnija v programu in s pomočjo te izračuna povprečno vrednost za x in y koordinato. Naslednja težava oziroma želja, katera se je pojavila je bila, da premik miške mora biti počasen in hkrati hiter. Počasen zato, ker moramo biti natančni pri klikih manjših objektov (primer: zapiranje okna) in hiter zato, da se lahko premaknemo iz enega konca zaslona na drugi v relativno kratkem odmiku prsta, saj je področje zajemanja roke v večini primerov majhen (odvisen od postavitve kamere). Problem je bil odpravljen, z implementacijo miškinega pospeška (ang. mouse acceleration), s katerim smo dosegli natančnost in hitrost premika miške. Enačba za izračun koordinat na zaslonu je sledeča x = x (ptpx atpx)(1 + sx )a (3.1) rs y = y (ptpy atpy)(1 + sy )a (3.2) rs kjer x in y predstavljata koordinati kurzorja na zaslonu, ptpx in ptpy predstavljata koordinato prejšnje točke prsta, atpx in atpy predstavljata povprečno koordinato prsta, sx in sy predstavlja absolutno razliko med prvo in zadnjo vrednostjo v krožni vrsti, za x in y koordinato prsta, rs predstavlja vrednost miškinega pospeška, katero lahko v programo spreminjamo (manjša kot je rs vrednost večji je miškin pospešek) in a pa predstavlja dodaten pospeševalnik kurzorja. 3.3 Ugotovitve Kljub številnim problemom, kateri so se pojavili ob implementaciji, lahko zaključimo da program deluje po pričakovanjih. Program deluje hitro in zanesljivo, tudi ob slabših svetlobnih pogojih. V tej nalogi so bili uporabljeni trije pristopi za zaznavanje kože, katerih rezultati so bili združeni, res pa je, da če ena od treh metod povzroči šum, se bo ta šum prenesel na skupen rezultat, saj uporabljamo operacijo or nad združitvami. V praksi se je izkazalo, da v večini primerov rezultat, pridobljen iz uporabljenih pristopov, ne povzroča takšnih šumov, da bi bilo zaradi tega sledenje prsta onemogočeno. Ugotovili smo tudi, da nismo potrebovali podatek o orientaciji roke, katerega nam CAMshift vrne, kajti izkazalo se je, da imamo roko obrnjeno vedno proti kameri. V primerjavi s tradicionalno miško je naša rešitev precej bolj procesorsko požrešna, vendar z današnjo tehnologijo to ni več težava. Res pa je, da takšna miška ni primerna za prenosne računalnike, kajti potrebuje več procesorskega časa in posledično pripomore k zmanjšanju avtonomije. Tukaj smo uporabili knjižnjico Psyco za Python [26], katera optimizira delovanje našega programa in pripomore pri zmanjševanju procesorskega časa. Kljub tej optimizaciji je naš program daleč bolj procesorsko požrešen v primerjavi s tradicionalno miško, to pa zato, ker izvajamo številne operacije nad vsako sliko, katere pridobimo s pomočjo kamere. 30

3.4 Zaključek Če povzamemo predstavljene metode o katerih smo govorili lahko trdimo, da ima vsaka metoda dobre in slabe lastnosti. Metode iz optičnega toka so v primerjavi z neparametričnimi metodami boljše za sledenje kompleksnejših objektov. Na primer, če sledimo padajoči kapljici vode, bosta predstavljeni neparametrični metodi neuspešno sledili kapljici, ko se bo ta ob stiku s tlemi razdelila na več delov, saj kot vemo ti metodi uporabljajo eno okno za sledenje objekta. Metode optičnega toka bodo bolj uspešno sledili kapljici tudi ob trku s tlemi, saj računajo gibanje za vsako točko posebej. Vendar imajo metode optičnega toka tudi slabo lastnost, da nam vračajo neprecizne rezultate. To pa zato, ker temeljijo na različnih predpostavkah. Neparametrični metodi sta za razliko od metod optičnega toka precej hitrejše, ker ne računata gibanje posameznih točk, ampak gibanje celotnega objekta. Neparametrični metodi imata tudi eno veliko slabost in sicer, da temeljita nad rezultati histogramov. Kot vemo, si histogrami za ločitev objekta od ozadja pomagajo s pomočjo barv, vendar v večini primerov barve niso dovolj za izvedbo ločitve. Recimo, če želimo ločiti roko od podlage katera vsebuje podobne barve, bi s pomočjo histogramov dobili veliko šuma, kateri bo onemogočil natančno sledenje. Res je, da je segmentacija človekove kože še dandanes problem, za katerega lahko trdimo, da še ni povsem rešen. V članku [18] so predstavljeni številni pristopi na različnih barvnih prostorih za prepoznavanje kože, vendar noben ni idealen. Predvidevamo, da bi tudi naš program imel težave pri sledenju roke na podlagi, katera bi bila barva zelo podobna človeški koži, vendar tega ne moremo trditi, saj pri testiranju programa nismo imeli takšne podlage. Za rešitev omenjenega problema bi morali poznati obliko objekta katerega sledimo, vendar lahko nastane problem, saj se lahko oblika objekta zelo spreminja. Prava rešitev bi bila mogoče z uporabo nekakšne umetne inteligence, katera bi iz slike znala prepoznati objekte, tako kot jih zna človek. Predvidevamo, da bomo v prihodnosti s pomočjo umetne inteligence in računalniškega vida lahko zaznavali raznorazne objekte in jim tudi natančno sledili. Kar človek obvlada, bo nekoč tudi računalnik obvladal, le vprašanje časa je kdaj se bo to zgodilo. 31