práci - Intelligent and Mobile Robotics Group
Transkript
ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE FAKULTA ELEKTROTECHNICKÁ DIPLOMOVÁ PRÁCE Zpracování obrazu jednočipovým mikroprocesorem Praha, 2008 Michal Janouch i Poděkování Chtěl bych poděkovat všem, kteří mi pomohli při tvorbě diplomové práce, hlavně pak ing. Janu Chudobovi za jeho ochotu, připomínky a cenné rady. Dále pak mým kamarádům a přátelům, bez kterých by roky na vysoké škole nebyly tak příjemné a nezapomenutelné. V neposlední řadě pak patří mé velké díky mým rodičům za jejich trpělivost a dlouholetou podporu. ii iii iv Abstrakt Diplomová práce se zabývá problematikou zpracování obrazu v reálném čase se zaměřením na algoritmy použitelné na jednočipových mikroprocesorech. V teoretické části jsou popsány obecné postupy zpracování obrazu, příklady dostupných kamerových modulů a v poslední části je uvedeno několik aplikací s kamerovými moduly řady CMUcam, se kterými je čtenář podrobně seznámen. Praktická část diplomové práce obsahuje rozbor 3 implementovaných úloh pro kamerové moduly CMUcam2 a CMUcam3. V závěru práce jsou shrnuty možnosti a výhody, které přináší použití algoritmů pro zpracování obrazu na samostatných modulech s jednočipovým mikroprocesorem a je také naznačen další možný vývoj implementovaných algoritmů a jejich praktické využití. Abstract This diploma thesis deals with the problems of real time image processing with focus on algorithms for single chip controllers. Theoretical part describes a general methods on image processing, examples of available camera modules and finally the CMUcam modules are introduced and a few applications using these modules are refered. There is a study of 3 implemented projects for CMUcam2 and CMUcam3 in practical part. The futher possibilities and benefits brought by usage of algorithms for image processing on single chip modules are concluded and the futher development and usage of implemented algorithms is suggested. v Obsah 1 Úvod .............................................................................................................................. 1 2 Zpracování obrazu ....................................................................................................... 3 2.1 Snímání obrazu ....................................................................................................... 3 2.1.1 CCD snímač ....................................................................................................... 5 2.1.2 CMOS (APS) snímač........................................................................................... 6 2.2 Digitalizace ............................................................................................................ 7 2.2.1 Reprezentace barev ............................................................................................. 9 2.3 2.2.1.1 RGB ........................................................................................................... 9 2.2.1.2 CMY ......................................................................................................... 10 2.2.1.3 HSV .......................................................................................................... 11 2.2.1.4 YCrCb ...................................................................................................... 12 Předzpracování obrazu .......................................................................................... 13 2.3.1 Geometrická transformace ................................................................................ 13 2.3.2 Jasová transformace ......................................................................................... 14 2.3.3 Filtrace a ostření .............................................................................................. 15 2.4 Segmentace obrazu ............................................................................................... 16 2.5 Popis objektů ........................................................................................................ 17 2.6 Klasifikace ........................................................................................................... 17 2.7 Zpracování obrazu v reálném čase ........................................................................ 18 2.7.1 Časová náročnost ............................................................................................. 18 2.7.2 Objem zpracovávaných dat ............................................................................... 18 2.7.3 Závislost na typu osvětlení ................................................................................ 20 2.7.4 Nutná znalost dalších parametrů....................................................................... 20 3 Kamerové moduly s jednočipovým mikroprocesorem ............................................. 21 3.1 The Cognachrome Vision System (CVS) .............................................................. 21 3.2 C-EYE Smart Camera........................................................................................... 22 3.3 AVRCam.............................................................................................................. 23 vi 3.4 UCLA-Cyclops..................................................................................................... 23 3.5 CMUcam .............................................................................................................. 24 3.5.1 CMUcam1 ........................................................................................................ 25 3.5.2 CMUcam2 ........................................................................................................ 25 3.5.3 CMUcam3 ........................................................................................................ 27 3.5.3.1 3.6 4 5 Vývoj aplikací ........................................................................................... 28 Vyhodnocení ........................................................................................................ 28 Aplikace s kamerovými moduly CMUcam ................................................................ 30 4.1 LUV ..................................................................................................................... 30 4.2 Hardcore III .......................................................................................................... 31 4.3 Stolní tenis............................................................................................................ 32 4.4 robuDOG.............................................................................................................. 33 Úlohy pro kamerové moduly CMUcam2 a CMUcam3 ............................................. 35 5.1 Uživatelské rozhraní CMUcam2 ........................................................................... 35 5.1.1 Implementace v jazyce Java .............................................................................. 36 5.1.2 Implementace v jazyce C++.............................................................................. 36 5.2 ÚLOHY ZPRACOVÁNÍ OBRAZU ..................................................................... 37 5.2.1 Sledování barevného objektu robotem ............................................................... 37 5.2.1.1 Rozbor úlohy ............................................................................................ 37 5.2.1.2 Implementace............................................................................................ 38 5.2.1.3 Testování programu .................................................................................. 40 5.2.2 Multi-blob finder .............................................................................................. 41 5.2.2.1 Rozbor úlohy ............................................................................................ 41 5.2.2.2 Implementace............................................................................................ 42 5.2.2.3 Testování algoritmu .................................................................................. 46 5.2.3 GeNav .............................................................................................................. 51 6 5.2.3.1 Rozbor úlohy ............................................................................................ 51 5.2.3.2 Implementace............................................................................................ 53 5.2.3.3 Testování algoritmu .................................................................................. 56 Závěr ........................................................................................................................... 62 vii 7 Použitá literatura a zdroje ......................................................................................... 64 Příloha A. Popis adresářové struktury vývojového prostředí CMUcam3 ....................... 66 Příloha B. Popis API multi-blob finder algoritmu ............................................................ 67 Příloha C. Popis API algoritmu hledání cesty pro systém GeNav ................................... 69 Příloha D. Popis komunikačního protokolu mezi kamerovým modulem CMUcam3 a řídicím počítačem systému GeNav .................................................................................... 71 viii Seznam obrázků Obr. 1: Řetězec lidského vnímání obrazu ............................................................................... 1 Obr. 2: Řetězec strojového zpracování obrazu ........................................................................ 2 Obr. 3: Upravený řetězec zpracování obrazu při použití mikropočítače .................................. 2 Obr. 4: Geometrie perspektivního promítání modelovaného dírkovou komorou ..................... 4 Obr. 5: Schéma zobrazení předmětu na fotosensor v kameře .................................................. 5 Obr. 6: Schéma funkce CCD čipu jako posuvného registru .................................................... 6 Obr. 7: Schéma CMOS snímače s aktivním tranzistorem........................................................ 7 Obr. 8: Čtvercová a hexagonální mřížka ................................................................................. 8 Obr. 9: Okolí okamžitého obrazového bodu ve 4-okolí a 8-okolí ............................................ 8 Obr. 10: RGB a CMY barevný model rozprostřený do roviny .............................................. 10 Obr. 11: Reprezentace HSV modelu v kónickém zobrazení .................................................. 11 Obr. 12: Příklad geometrické transformace v rovině ............................................................. 13 Obr. 13: Příklad obrazů před a po ekvalizaci včetně příslušných histogramů ........................ 16 Obr. 14: The Cognachrome Vision Systém........................................................................... 22 Obr. 15: C-EYE Smart Camera ............................................................................................ 22 Obr. 16: AVRCam ............................................................................................................... 23 Obr. 17: UCLA-Cyclops ...................................................................................................... 24 Obr. 18: CMUcam1 ............................................................................................................. 25 Obr. 19: CMUcam2 ............................................................................................................. 26 Obr. 20: Schematický nákres CMUcam2 .............................................................................. 26 Obr. 21: CMUcam3 ............................................................................................................. 27 Obr. 22: Schematický nákres CMUcam3 .............................................................................. 28 Obr. 23: Schéma řídicího machanizmu LUV ........................................................................ 31 Obr. 24: Fotografie robotu Hardcore III s připojenou CMUcam ........................................... 32 Obr. 25: Systém pro odpalování ping-pongových míčů s CMUcam umístěnou nad hracím stolem .................................................................................................................................. 33 Obr. 26: robuDOG s CMUcam3 umístěnou v díře v hlavě .................................................... 34 Obr. 27: G2BOT s CMUcam2 a krabicí použitou při testování algoritmu .............................. 38 Obr. 28: Vývojový diagram aplikace sledování barevného objektu ....................................... 40 ix Obr. 29: Příklady možných barevných značek pro identifikaci objektu ................................. 41 Obr. 30: Příklady ohraničení objektů v obraze ...................................................................... 42 Obr. 31: Možné kombinace pro určení příslušnosti sekvence správných pixelů k objektu ..... 44 Obr. 32: Vývojový diagram pro aplikaci multi-blob finder ................................................... 45 Obr. 33: Výsledky multi-blob finder algoritmu..................................................................... 48 Obr. 34: Příklad obrazu pro testování multi-blob finder algoritmu v reálné scéně ................. 50 Obr. 35: Příklad rozložení objektů, kdy jsou 2 z nich v zákrytu ............................................ 50 Obr. 36: Robot Pioneer 3AT s CMUcam3 na sloupku nad robotem ...................................... 52 Obr. 37: Blokové schéma systému GeNav ............................................................................ 53 Obr. 38: Vývojový diagram algoritmu hledání cesty pro systém GeNav ............................... 55 Obr. 39: Rozhodovací algoritmus pro příslušnost pixelu k cestě ........................................... 56 Obr. 40: Cesta a její střed vyznačený pomocí testovacích dat z algoritmu hledání cesty v systému GeNav .................................................................................................................... 57 Obr. 41: Výsledek algoritmu hledání cesty aplikovaný pomocí definovaných oblastí ........... 57 Obr. 42: Zdrojový obraz pro testování doby hledání cesty .................................................... 59 Obr. 43: Oddělení cesty od okolí pro systém GeNav ve venkovním prostředí ....................... 60 x Seznam tabulek Tabulka 1: Parametry vzorové kamery ................................................................................. 18 Tabulka 2: Přenosové rychlosti používaných rozhraní u digitálních kamer ........................... 19 Tabulka 3: Porovnání doby hledání objektů v obraze ........................................................... 47 Tabulka 4: Čas potřebný pro vyhledání cesty v obraze v závislosti na různém nastavení algoritmu ............................................................................................................................. 58 xi Seznam zkratek CCD - charge-coupled device CMOS - Complementary Metal–Oxide–Semiconductor APS - active pixel sensor RGB – Red, Green, Blue CMY – Cayan, Magneta, Yellow HSV – Hue, Saturation, Value YCrCb – luminance, red chrominance, blue chrominance W – width (šířka) H – height (výška) bpp – bit per pixel fps – frame per second IEEE - Institute of Electrical and Electronics Engineers, Inc. USB – Universal serial bus RS232 - Recommended Standard 232 LED - light-emitting diode AWB – automatic white balance AGC – automatic gain control HW – hardware SW – software RAM – Random Access Memory ROM – Read Only Memory FAT - File Allocation Table TCP/IP – Transfer Control Protocol/Internet Protocol TTL - Transistor–transistor logic CC2 – CMUcam2 CC3 – CMUcam3 FIFO – first in, first out GPIO – General Purpose Input Output xii SPI – Serial Peripheral Interface I2C – Inter-Integrated Circuit jpeg - Joint Photographic Experts Group ppm - Portable PixMap API - Application programming interface xiii 1 Úvod Jednou ze základních lidských vlastností je zrak. Očima vnímáme obraz světa kolem nás. Jasová informace zachycená na sítnici oka se přenáší do mozku, kde je zpracována a vyhodnocena. Na základě toho pak dokážeme určit, co vidíme, jak významné to pro nás v daném okamžiku je, popř. za použití dalších smyslů jako je hmat, určit i jiné vlastnosti předmětu zájmu, např. teplotu nebo kvalitu povrchu. Na obr. 1 je zakreslen jednoduchý řetězec lidského vnímání obrazu. Oko Sítnice Mozek Vyhodnocení obrazu Použití dalších smyslů k upřesnění vlastností objektu zájmu Obr. 1: Řetězec lidského vnímání obrazu Počítačové vidění je obor, jehož cílem je, aby celý proces na obr. 1 byl nahrazen strojovým zpracováním obrazu, které má za úkol snímanému obrazu porozumět a interpretovat ho jako model reálného světa. Počítačové vidění nám tak umožňuje nejen obraz automaticky rozpoznat a vyhodnotit, ale často funguje i jako nástroj pro vizualizaci lidskému oku neviditelných veličin, které je pak možné reprezentovat do podoby vyhodnotitelné člověkem. Jak je vidět na obr. 2, existuje mezi strojovým a lidským vnímáním přímá analogie. V závislosti na typu snímače obrazu můžeme získat nejrůznější informace o obraze. Jedná se např. o snímání tepla (termovize), magnetického pole (tomograf), rentgenového záření (RTG), ultrazvuk (sonary) a v neposlední řadě také jas a barva obrazu (fotoaparáty). Zejména v lékařských aplikacích, kde se musí sejmutá data vhodně vizualizovat, je jejich objem ke zpracování velký, a proto je nutné používat pro vyhodnocování informací v obraze velmi výkonnou výpočetní techniku. Je jasné, že úměrně výkonu se zvyšuje jak cena, tak i velikost takovéhoto zařízení. Navíc je nutné zajistit odpovídající přenosovou cestu mezi snímačem a počítačem. 1 Objektiv Snímač obrazu Počítač Vyhodnocení obrazu Použití dalších senzorů k upřesnění vlastností objektu zájmu Obr. 2: Řetězec strojového zpracování obrazu Existují ovšem aplikace, kdy není možné použít pro přímé vyhodnocení obrazu výkonný počítač. Budeme-li uvažovat robotické aplikace, může se jednat např. o robot, který má pomalou komunikační linku s řídicí centrálou a jeho rozměry a kapacita baterií neumožňují použít počítač přímo na těle robotu. Zde tedy přichází na řadu využití malých kamer propojených s mikropočítačem, který obraz vyhodnotí a po komunikační lince posílá pouze malý objem dat s potřebnými informacemi. Modifikovaný řetězec zpracování obrazu s použitím mikropočítače je na obr. 3. Objektiv Snímač obrazu mikropočítač Vyhodnocení obrazu Řídicí počítač Použití dalších senzorů k upřesnění vlastností objektu zájmu Obr. 3: Upravený řetězec zpracování obrazu při použití mikropočítače Je zřejmé, že vzhledem k výkonu a paměťovým možnostem mikropočítačů není možné implementovat složité vyhodnocovací algoritmy, které je možné provádět na výkonných počítačích. Cílem této práce je najít možnosti, jak efektivně implementovat základní algoritmy pro zpracování a vyhodnocování snímaného obrazu pomocí jednočipového mikroprocesoru. Dále pak implementovat aplikace, které budou získané informace využívat k autonomnímu řízení procesů (např. robotu) nebo je bude možné začlenit do větších systémů, kde budou samostatně vyhodnocovat obraz a data dále předávat řídicímu počítači. 2 2 Zpracování obrazu Obecně lze zpracování obrazu chápat jako převod „analogového“ obrazu světa kolem nás do digitální podoby a jeho další zpracování. Celý proces lze rozdělit do několika kroků. Jejich rozdělení ovšem není zcela jednoznačné a záleží na konkrétní aplikaci, zda budou provedeny všechny zde uvedené body a v jakém pořadí. Podrobnými postupy zpracování obrazu se zabývají práce [1] a [2]. Posloupnost základních kroků zpracování obrazu je: Snímání Digitalizace Předzpracování Segmentace Popis objektů Klasifikace 2.1 Snímání obrazu Z fyzikálního hlediska můžeme snímání obrazu chápat jako převod vstupní veličiny na elektrický signál spojitý v čase i úrovni. Vstupní veličinou nemusí být jen jas z kamery, ale může to být např. i intenzita rentgenového záření, tepelná intenzita, nebo ultrazvuk. Dále v textu budeme jako vstupní veličinu uvažovat výhradně jas z kamery. Z geometrického hlediska je snímaní obrazu převod trojrozměrného (3D) obrazu světa kolem nás do dvojrozměrné (2D) podoby. Tento převod je výsledkem perspektivního zobrazení, neboli středového promítání. Toto zobrazení je závislé na vlastnostech snímací optiky (objektiv), ale pro zjednodušení je často modelováno dírkovou komorou, viz obr. 4. Nechť na obr. 4 jsou x, y, z souřadnice bodu P v 3D scéně a f je vzdálenost obrazové roviny od středu promítání1. Bod promítnutý do 2D scény nechť má souřadnice x´, y´, potom platí: 1 U objektivů je f rovno ohniskové vzdálenosti 3 (2.1) Obr. 4: Geometrie perspektivního promítání modelovaného dírkovou komorou, převzto z [3] Důležitým faktorem ovlivňujícím kvalitu snímaného obrazu jsou externí vlivy jako osvětlení, povrchové vlastnosti předmětu, tvar předmětu, aj. Znalost těchto vlastností nám pak může pomoci při zpětné rekonstrukci 3D obrazu z nasnímané scény. Podrobně je jejich vliv na výsledný obraz popsán v [1]. Aby bylo možné pomocí kamery jas sejmout a převést na elektrický signál, je nutné použít fotocitlivé snímače dopadajícího světelného záření, viz obr. 5. V dnešní době jsou nejrozšířenější 2 technologie výroby těchto snímačů: CCD CMOS 4 Obr. 5: Schéma zobrazení předmětu na fotosensor v kameře 2.1.1 CCD snímač Hlavním prvkem každého čidla CCD snímače je Schottkyho dioda, která převádí světelnou energie na elektrickou. Tímto se v připojených kondenzátorech nahromadí energie úměrná dopadajícímu záření. CCD čip pak funguje jako analogový posuvný registr. Každý kondenzátor předává svůj nahromaděný náboj do sousedního kondenzátoru. Poslední z nich je napojen na výstupní zesilovač, který náboj převádí na elektrické napětí a pomocí A/D převodníku je toto převedeno do digitální podoby. Schéma CCD čipu je na obr. 6. Výhody CCD technologie Velká citlivost Malý šum Nevýhody CCD technologie Vzájmné ovlivňování sousedních pixelů Malý rozsah intenzit Nemožnost adresovat jednotlivé pixely Tato technologie se dnes používá spíše u komerčních nebo profesionálních kamer, kde je možné docílit větší plochy CCD čipu. Navíc se stále více používa technologie 3-CCD, která má pro každou barevnou složku RGB signálu vlastní čip. 5 Obr. 6: Schéma funkce CCD čipu jako posuvného registru 2.1.2 CMOS (APS) snímač Každý pixel CMOS čipu obsahuje fotodiodu, která je napojena na tzv. aktivní tranzistor. Úměrně velikosti dopadajícího záření se na tranzistoru nahromadí elektrická energie. Tranzistor je napojen na čtecí a resetovací obvod (obr. 7). Matice takovýchto detektorů tvoří snímač. Výhody CMOS snímačů Náhodný přístup k pixelům Levné na výrobu Možnost mít kameru i procesor na jednom čipu Větší rozsah intenzit než CCD (asi 2x) Velká rychlost vyčítání Menší spotřeba než CCD Nevýhody CMOS Větší šum než CCD Tento typ kamer se díky možnosti integrace na jeden čip společně s procesorem používá u malých kamer pro embedded systémy, v průmyslových kamerách apod. 6 Obr. 7: Schéma CMOS snímače s aktivním tranzistorem 2.2 Digitalizace Ze snímačů jasu získáme spojitý elektrický signál. Digitalizace je proces převedení tohoto signálu do digitální podoby. Digitální obraz je ekvivalentem spojité obrazové funkce f(x, y), kde x a y jsou souřadnice bodu v obrazové rovině. Je získán vzorkováním obrazu do matice MxN bodů a kvantováním spojité jasové úrovně každého vzorku do K úrovní. Čím jemnější je vzorkování (čím větší M, N) a kvantování, tím lépe je aproximován původní spojitý obrazový signál. Vzorkování spojité funkce musí splňovat Shannonův teorém. Pro zpracování obrazu z něho plyne, že nejmenší detail v digitálním obraze musí být minimálně dvojnásobkem vzorkovacího intervalu. Volba vhodného rozlišení je tedy jeden z nejzásadnějších kroků digitalizace. Při nízkém rozlišení se nám v obraze bude ztrácet informace o detailech a při velkém se bude zvyšovat následná výpočetní náročnost. Většina systémů používá kvantování jasu do K stejných úrovní. Je-li pro reprezentaci informace o obrazovém elementu použito b bitů, je počet úrovní jasu K=2b. Počet úrovní se volí tak, aby nedocházelo k falešným obrysům. Tento jev pro lidské oko nastává pro počet kvantizačních úrovní K<50. Tuto hodnotu lze snížit např. použitím nelineárního kvantování. Další důležitou součástí digitalizace je volba vzorkovací mřížky. Nejčastěji používané jsou čtvercová nebo hexagonální (obr. 8). Čtvercová mřížka je snadno realizovatelná, ale jsou s ní spojeny problémy s měřením vzdáleností a spojitostí pixelů. Tyto nedostatky řeší hexagonální 7 mřížka, která ale není vhodná pro některé operace, jako je např. Fourierova transformace. Podrobnější informace např. v [1]. Dále budeme uvažovat jen čtvercovou vzorkovací mřížku. Obr. 8: Čtvercová a hexagonální mřížka S digitalizací obrazu a vzorkovacími mřížkami je dále spojeno několik pojmů a vlastností, které je nutné vysvětlit: Pixel – nejmenší a dále již nedělitelný element digitálního obrazu nesoucí informaci o odpovídajícím obrazovém bodě. Sousednost pixelů – dva pixely jsou 4-sousedy pokud je jejich vzdálenost D4=1. Případně jsou 8-sousedy, pokud je jejich vzdálenost D8=1. Vzdálenost dvou obrazových bodů (x,y) a (h, k) je definována jako Obr. 9: Okolí okamžitého obrazového bodu ve 4-okolí a 8-okolí (2.2) (2.3) 8 Oblast – souvislá množina pixelů navzájem propojených relací sousedství Souvislé pixely – jsou takové, mezi nimiž existuje cesta 2.2.1 Reprezentace barev Důležitým parametrem obrazu je jeho barva. Každý pixel nese informaci o všech jednotlivých složkách použitého barevného spektra kvantovaného do K intervalů. Nejběžněji používané barevné modely jsou: RGB CMY HSV YCrCb 2.2.1.1 RGB RGB je aditivní model fungující na principu míchání světelného záření 3 základních barev RGB (červená, zelené, modrá). Každá výsledná barva je specifikována mohutností těchto tří komponent, nejčastěji v rozmezí 0-255. Jsou-li zastoupeny všechny složky s plnou intenzitou, získáme bílou barvu, je-li intenzita všech složek nulová, získáme černou barvu. RGB model je zobrazen na obr. 10. Nejčastěji se tento model používá v zobrazovacích zařízeních (TV, LCD, projektory), kdy je jeden pixel reprezentován třemi velmi blízkými body jednotlivých složek a podle úrovně jejich intenzity získáváme na obrazovce požadovanou barvu. Protože jde o míchání světelného záření, nepotřebují zařízení fungující na principu RGB modelu žádný další vnější zdroj světla. 9 Obr. 10: RGB a CMY barevný model rozprostřený do roviny 2.2.1.2 CMY Je subtraktivní barevný model založený na principu míchání tyrkysová (C), purpurové (M) a žluté (Y) barvy. Mícháním jsou od sebe barvy odečítány, a tedy barevné spektrum odrážející se od povrchu je omezováno. Vztah mezi RGB a CMY je (2.4) Z něho plyne, že je-li intenzita všech složek maximální, získáme černou barvu a je-li nulová, získáme barvu bílou. Rozložení barevného spektra je na obr. 10. Tento model se nejčastěji používá v tiskárnách a reprodukčních zařízeních (při tisku bílých ploch na bílý papír není spotřebována žádná barva), kde se ke třem zmíněným složkám dále přidává ještě černá barva, která by jinak vznikla smícháním všech tří složek. Tento model je nazýván CMYK. 10 2.2.1.3 HSV HSV barevný model nejvíce odpovídá lidskému vnímání barev. Skládá se ze tří složek: H – hue (barevný odstín) – udává polohu barevného odstínu na standardním barevném kole (360° = červená, 120° = zelená, 240° = modrá). S – saturation (nasycení) – v procentech udává množství šedi v poměru k odstínům barvy V – value (jas) – relativní světlost nebo tmavost barvy. Nejlépe je barevné spektrum vyjádřené hodnotami HSV vidět na kónickém modelu na obr. 11. Obr. 11: Reprezentace HSV modelu v kónickém zobrazení Převod z RGB spektra do HSV je výpočetně náročný kvůli nelineárnímu výpočtu H (2.5) (2.6) (2.7) Výpočetní náročnost lze snížit použitím rozhodovacího algoritmu pro převod: Nechť R,G,B leží v intervalu [0, 1]. 11 Nechť max je nejvyšší hodnota z R,G,B. Nechť min je nejnižší hodnota z R,G,B. (2.8) (2.9) (2.10) Tento model je používán v počítačovém vidění, protože jej lze lépe přizpůsobit okolním podmínkám (změna osvětlení odpovídá změně jednoho parametru). 2.2.1.4 YCrCb YCrCb je subtraktivní model podobně jako CMY. Je složen z jasové složky Y a dvou chromatických složek. Převod z RGB spektra do YCrCb je definován (2.11) (2.12) (2.13) Tento model se využívá v oblasti digitálních fotoaparátů a speciálních videozařízeních (pomaloběžná televize). Využívá se zejména možnosti jednoduše oddělit černobílý obraz, který je reprezentovaný jasovou složkou a informaci o barvě, která je reprezentována dvěma chroma parametry (sytost červené a modré barvy). 12 2.3 Předzpracování obrazu Cílem předzpracování digitalizovaného obrazu je odstranění zkreslení, které může vzniknout při samotném pořizování obrazu, odstranění šumu, zvýšení kontrastu a zdůraznění charakteristik obrazu důležitých pro další zpracování (např. detekce hran). Zde jsou uvedeny pouze základní postupy. Další podrobnosti o problematice předzpracování obrazu jsou např. v literatuře [1], [2], [3]. Nejčastěji se jedná o: Geometrické transformace Jasové transformace Filtrace a ostření 2.3.1 Geometrická transformace Popisuje transformaci nosiče obrazové funkce f(x,y), tj. souřadnic x, y při rotaci, zvětšení, posunu a dalších složitějších typech zkreslení. Výsledný obraz vzniká transformací vstupního obrazu pomocí vektorové funkce T, která zobrazí bod se souřadnicemi (x, y) na souřadnice (x´, y´) podle rovnice 2.14. Určení T může být při složitých typech zkreslení obtížné. Významné usnadnění práce nám může přinést co největší znalost podmínek pořízení snímků. Obr. 12: Příklad geometrické transformace v rovině (2.14) 13 Geometrická transformace se skládá ze dvou kroků: Transformace souřadnic – počítá novou polohu bodu (x, y) ve spojitých souřadnicích. Pro tento účel se zavádějí tzv. homogenní souřadnice bodu, které umožňují vyjádřit rotaci, posun a afinní transformaci jako součin bodu s jedinou maticí. Transformační vztah je pak vyjádřen rovnicí (2.15) aproximace jasové funkce – určuje hodnotu jasu ve výsledném obraze v bodě (x´, y´). Transformované souřadnice (x´, y´) často leží mimo pravoúhlou vzorkovací mřížku. Proto je nutné hodnoty jasu z původního obrazu vhodně aproximovat. Nejčastěji používané typy aproximací pro jasovou funkci jsou: o Nejbližší soused – přiřadí bodu (x´, y´) hodnotu jasu nejbližšího bodu gs v diskrétní mřížce původního obrazu (2.16) o Lineární interpolace – výslednou hodnotu jasu získáme lineární kombinací nejbližších 4 bodů diskrétní mřížky. Čím je bod dále, tím menší má na výsledný jas vliv. (2.17) kde (2.18) o Bikubická interpolace – jasová funkce je lokálně interpolována pomocí bikubického polynomu z 16 bodů v okolí. 2.3.2 Jasová transformace Slouží k úpravě jasu obrazu např. pro lepší zřetelnost detailů pro člověka (tomografie). Je-li ale obraz určen ke zpracování pouze počítačem, nepřináší jasová korekce žádnou novou informaci. 14 Jasová korekce umožňuje eliminovat vliv zkreslení jasu při průchodu optickou soustavou. Pokud je chyba systematická, je možné vytvořit korekční matici a tu při každé úpravě k získanému obrazu přičítat. Pokud chyba systematická není, je nutné najít korekci pro každý jasový bod zvlášť. Transformace jasové stupnice se oproti jasové korekci netýká jednotlivých pixelů, ale upravuje obraz jako celek. Ekvalizace histogramu2 - metoda slouží ke zvýšení kontrastu využitím celého spektra jasové stupnice. Obraz je jasově normalizován3, což je výhodné např. pro srovnávání obrazů. Výsledek ekvalizace histogramu je vidět na obr. 13. 2.3.3 Filtrace a ostření Tato fáze si klade za cíl odstranit z digitalizovaného obrazu šum a zviditelnit špatně rozpoznatelné části. Filtraci obrazu lze provádět ze dvou pohledů Filtrace v prostorové oblasti – lineární kombinace vstupního obrazu s koeficienty filtru (konvoluce) Filtrace ve frekvenční oblasti – převod obrazu do „frekvenční reprezentace“, následná úprava a poté převod zpět. Pro převod se používá několika technik jako např. Fourierova transformace, diskrétní kosinová transformace nebo vlnková transformace. Filtraci pak zajistí běžné filtry typu horní, dolní a pásmová propust. 2 Histogram je sloupcový graf zobrazující četnosti pixelů připadajících na odpovídající ekvalizační část spektra 3 Jasové úrovně jsou zastoupeny přibližně stejně četně 15 Obr. 13: Příklad obrazů před a po ekvalizaci včetně příslušných histogramů 2.4 Segmentace obrazu Segmentace obrazu je skupina metod, které slouží k interpretaci částí obrazu jako objektů. Objektem je zde míněno vše, co je pro další zpracování zajímavé (v závislosti na úloze to mohou být oblasti, hrany, aj.). Zbývající části obrazu jsou považovány za pozadí. Výstupem segmentace je seznam objektů, které odpovídají objektům zájmu v reálném světě. Pokud objekty odpovídají realitě přesně, hovoříme o úplné segmentaci (nutná znalost řešeného problému – metody učení). Pokud objekt určujeme např. na základě homogenity pixelů a nalezený objekt neodpovídá realitě přesně, hovoříme o částečné segmentaci. Úplná segmentace tedy popíše kruh např. polohou středu a poloměrem, zatímco částečná segmentace najde pouze čtverec, který kruh ohraničuje. 16 Metody segmentace obrazu jsou např: Segmentace založená na detekovaných hranách – dokáže najít objekty ohraničené čarami. Problémem jsou hrany, které jsou blízko u sebe. Segmentace na základě oblastí – nalezne oblasti se stejnými vlastnostmi a oddělí je od pozadí. Příkladem je mean shift algoritmus, který je popsán v [1], [4]. 2.5 Popis objektů V této části zpracování obrazu je úkolem popsat soubor objektů získaných segmentací. Jsou zde možné 2 přístupy: Kvantitativní – číselné charakteristiky nalezených objektů jakou jsou souřadnice, velikost, kompaktnost, barevný rozptyl, aj. Kvalitativní – preferuje relace mezi objekty (tvarová podobnost). Výstup je závislý na postupu při klasifikaci. 2.6 Klasifikace Rozpoznávání popsaných objektů a jejich zařazení do příslušných skupin známých tříd je úkolem klasifikace. Podle postupu může být klasifikace: Příznaková – je spojena s kvantitativním popisem objektů. Využívá příznaky, což jsou skupiny charakteristických čísel objektu popisujících jeho vlastnosti (velikost, střed, poloha, atd.). Klasifikace probíhá na základě učení klasifikátoru a to s trénovací množinou i bez ní. Další často používaná metoda klasifikace je shluková analýza. Strukturální – jedná se o kvalitativní popis pomocí primitiv objektu, tj. objektu jsou přiřazeny základní vlastnosti, které objekt charakterizují. Na tyto vlastnosti jsou pak aplikovány algoritmy rozboru slova popisujícího objekt a kontroly syntaxe pro definovanou gramatiku, jazyk a abecedu. 17 2.7 Zpracování obrazu v reálném čase Zpracování obrazu v reálném čase sebou nese řadu problémů, se kterými musíme při implementaci počítat. 2.7.1 Časová náročnost Obecně lze říci, že největším omezením je časová náročnost, a to zejména ve fázi předzpracování a segmentace obrazu. Je nutné si již před implementací algoritmů uvědomit, jaké informace nás budou zajímat, jak je nutné obraz pro segmentaci připravit a vhodně navrhnout algoritmy segmentace, aby byly co možná nejefektivnější a využívali nejmenší nutné množství dat. 2.7.2 Objem zpracovávaných dat Tento problém přímo souvisí již se samotným snímáním a digitalizací obrazu. Tabulka 1 ukazuje parametry pro modelovou kameru. Z rovnice (2.19) získáme objem dat, který je nutné přenést za jednotku času. Rozlišení obrazu (WxH) 640x480 Počet snímků za vteřinu (fps) 15 Počet úrovní jasu (bpp) 8 bitů (256 úrovní) Počet barevných kanálů (Chan) 3 (např. RGB) Tabulka 1: Parametry vzorové kamery Je patrné, že takto velký objem dat klade ohromné nároky na přenosovou cestu mezi kamerou a počítačem, na kterém bude obraz dále zpracováván. Nejčastěji používaná rozhraní jsou uvedena v tabulce 2. Pro zajímavost je uvedeno i standardní sériové rozhraní RS232, které se používá pro komunikaci s mikroprocesory. Je patrné, že pro přenos kompletního obrazu je RS232 nepoužitelná. 18 Název rozhraní Teoretická propustnost FireWire (IEEE 1394a) 400Mbit/s FireWire (IEEE 1394b) 800Mbit/s USB2.0 480 Mbit/s RS232 až 115kbit/s Tabulka 2: Přenosové rychlosti používaných rozhraní u digitálních kamer Dalším problémem spojeným s objemem dat je paměťová náročnost. Ve fázi předzpracování a segmentaci obrazu je nutné mít jej stále k dispozici, proto a pro něj vyhradit místo v paměti. Řešení problému objemu dat je několik a přímo vyplývají z rovnice 2.19. Jedná se o: Snížení rozlišení při snímání obrazu – je dobré si uvědomit, jak velké jsou nejmenší detaily ve zkoumaném obraze a podle toho určit minimální rozlišení. Některé CMOS kamery díky možnosti přístupu k libovolným pixelům umožňují měnit rozlišení nezávisle v obou osách (downsampling). Snížení fps – počet snímků potřebných za jednu sekundu závisí hlavně na aplikaci, pro kterou je snímek pořizován. Pokud se jedná např. o řízení systému (robotu), pak potřebujeme mít informací o okolí co nejvíce; naopak např. pro aplikace typu bezpečnostní kamery nám postačí jen několik snímků za vteřinu. Snížení bpp – zde záleží hlavně na vlastnostech snímaného obrazu a na postupu jeho dalšího zpracování. Někdy nám může postačit čistě binární úroveň jasu, v některých měřících systémech se pak jeden vzorek může reprezentovat i 12-ti a více bity. Snížení počtu barevných kanálů – v řadě aplikací nám postačí jen jasová složka (např. detekce hran). V kombinaci se snížením rozlišení je možné jako řešení uvažovat i použití CMOS kamery společně s mikroprocesorem a obrazovou pamětí na jedné desce. Obrazová data pak mohou být vyčítána velmi rychle. Po sériové lince pak již není nutné posílat objemná obrazová data, ale pouze potřebné informace o objektech v obraze. 19 2.7.3 Závislost na typu osvětlení Problém závislosti na typu osvětlení se týká zejména fáze předzpracování obrazu. Každý druh osvětlení (sluneční světlo, LED, žárovka, zářivka, aj.) má jinou vlnovou délku i tvar spektra, a proto je jeho vliv na fotocitlivé části snímačů různý. Kamery typu CMOS většinou nabízejí automatické funkce pro korekci bílé barvy (AWB), regulaci zesílení (AGC) nebo nastavení doby závěrky. V některých případech ovšem není použití těchto funkcí vhodné. Jedná se o úlohy, kdy je třeba porovnávat snímky pořízených vždy za stejných podmínek. Automatické nastavování parametrů pro každý snímek totiž může mít za následek nedefinovatelné změny v parametrech obrazu. Pokud tyto funkce nejsou podporovány, je vhodné použít algoritmy pro korekci jasu a barev. Vyžaduje-li úloha rozpoznávání barev v obraze, pak jsou výsledky na změny parametrů osvětlení ještě citlivější. Pro tento účel je důležité použít vhodný barevný model reprezentace dat. Např. při změně intenzity osvětlení se v RGB spektru často výrazně změní všechny 3 hodnoty specifikující barvu, zatímco v HSV spektru dojde k výrazné změně pouze parametru V a zbylé dva se změní jen velmi málo. 2.7.4 Nutná znalost dalších parametrů Častým problémem segmentace a klasifikace obrazu je nutná znalost dalších parametrů objektu zájmu nebo podmínek snímání. Tyto znalosti nám umožní najít a klasifikovat hledaný předmět mnohem rychleji a přesněji. Také jsou velmi důležité při případné rekonstrukci obrazu. K získání těchto informací nám slouží doplňkové senzory a čidla (sonary, laserové měřiče vzdáleností, luxmetr, teplotní čidla, aj.). 20 3 Kamerové moduly s jednočipovým mikroprocesorem Na trhu existuje celá řada systémů pro zpracování obrazu, které jsou již předpřipravené pro různé aplikace. Jedná se o moduly sloužící k monitorování prostředí, detektory pohybu, rozpoznávání objektů nebo jako multikamerové systémy. Často jsou tyto moduly doplněny o další senzory. Bližší specifikace těchto produktů je k nalezení např. na webové stránce [5]. Zde se budeme zabývat moduly, které je možné použít pro studijní účely s přihlédnutím k robotickým aplikacím. Popsané moduly jsou pouze výběrem z mnoha, které jsou k dispozici a mají za úkol ukázat možnosti, které různé moduly nabízejí. 3.1 The Cognachrome Vision System (CVS) CVS [6] je systém vyvinutý v Newton Research Labs. S použitím speciální HW akcelerace je schopný sledovat až 25 objektů s frekvencí až 60Hz při rozlišení 200x250 pixelů a 8 bpp. Je založen na mikroprocesoru Motorola řady 68332 s 256KB RAM. Poskytuje 1 digitální I/0, 2 asynchronní a 1 synchronní sériovou linku. Dále je k dispozici ve speciálním duálním zapojení, které umožňuje použít tento modul pro aplikace stereovidění. Modul je standardně dodáván s SW pro sledování objektů. Je však možné jej libovolně přeprogramovat s využitím jazyka C. Největší nevýhody CVS jsou velká spotřeba (až 2W), vysoká cena ($2450) a větší rozměry (64x160x32mm). Tento modul byl s výhodou použit v soutěži robotického fotbalu v kategorii MIROSOT pro sledování a vyhledávání hráčů a míče. 21 Obr. 14: The Cognachrome Vision Systém, převzato z [6] 3.2 C-EYE Smart Camera C-EYE [7] je malý a levný kamerový modul založený na 16bitovém procesoru řady x86 (186). Spolu s procesorem je na desce CMOS kamerový senzor s maximálním rozlišením 640x480 pixelů. Modul je dodáván s programovacím prostředím a aplikací pro ukládání snímků. Je plně programovatelný s podporou kódů v jazyce C/C++. Velkou předností C-EYE je možnost rozšíření o řadu portů, konkrétně o RS485, CompactFlash rozhraní s podporou FAT16 a ethernetového rozhraní s podporou TCP/IP umožňující propojení více těchto modulů na jednu síť. Spotřeba se pohybuje v rozmezí od 1-1,5W a cena je mezi $179-$239 v závislosti na připojených periferiích. Obr. 15: C-EYE Smart Camera, převzato z [7] 22 3.3 AVRCam AVRCam [8] je plně programovatelný kamerový modul založený na procesoru Atmel AVR mega8. Obraz je snímán CMOS kamerou Omnivision OV6620 s rozlišením 88x143 pixelů. Spotřeba je 300mW. Modul je dodáván se SW pro sledování, který je schopný najít až 8 objektů stejné barvy v obraze s rychlostí 30 fps. Dále je dodáván programátor s kompilátorem jazyka C a zkušební aplikace. Cena kompletního setu je $100. Obr. 16: AVRCam, převzato z [8] 3.4 UCLA-Cyclops Kamerový modul UCLA-Cyclops [9] je konstruován jako bezdrátový a je určen pro vytvoření sítě senzorů. Zajímavostí také je, že pro zpracování obrazu sejmutého CMOS kamerou ADCM-1700 nepoužívá pouze procesor ATMEL ATmega128L, ale stejně jako např. v projektu [10] je použito programovatelné logické pole FPGA. Nevýhodou tohoto řešení je malé rozlišení (128x128) a zejména pak pomalý proces zpracování obrazu (2fps). 23 Obr. 17: UCLA-Cyclops, převzato z [9] 3.5 CMUcam CMUcam jsou kamerové moduly vyvinuté v robotickém institutu Carnegie Mellon University [11]. Cílem bylo vyvinout levný a výkonný modul pro zpracování obrazu v reálném čase, který bude plnit základní úlohy, jako je vyhledávání a sledování objektů v obraze a získávání statistických dat o nich. Celá koncepce CMUcam již od prvního modelu směřovala k využití modulů pro řízení robotických systémů. Je to patrné zejména z HW výbavy modulu, ke které od začátku patří port pro připojení servomotorů, umožňující i jejich automatické řízení údaji získaných sledovacím algoritmem, a minimálně jedna sériová linka umožňující komunikaci modulu s řídicím procesorem robotu. Celá řada CMUcam je založena na CMOS kamerovém čipu Omnivision OV6620 [12], který nabízí široké možnosti korekce obrazu přímo na čipu (AGC, AWB, nastavení doby expozice, korekce jasu, kontrastu). Umožňuje získat barevný obraz ve formátu RGB nebo YCrCb v maximálním rozlišení 352x288 pixelů s rychlostí až 50fps. Velkou výhodou tohoto čipu je nízká spotřeba, která je při plném vytížení nižší 80mW. 24 3.5.1 CMUcam1 První verze modulu z řady CMUcam [13], [14] byla představena v roce 2002 na konferenci IROS 2002. Modul byl postaven na procesoru Ubicom SX28 s frekvencí 50Mhz a umožňoval posílat po sériové lince statistické informace o obraze a informace o sledovaném barevném objektu. Bylo také možné přímo k tomuto modulu připojit servomotory, které mohly automaticky řídit pohyb robotu za sledovaným objektem. Rychlost zpracování obrazu ovšem nebyla vzhledem k použitému procesoru nijak velká. Pohybovala se okolo 17fps. Obr. 18: CMUcam1, převzato z [13] 3.5.2 CMUcam2 Dalším vývojovým stupněm byla v roce 2003 představená verze CMUcam2 [15], [16]. Tento modul byl řízen RISC procesorem Ubicom SX52 pracujícím na frekvenci 75Mhz, který má oproti svému předchůdci dvojnásobnou velikost pamětí ROM a RAM. Dalším rozdílem oproti starší verzi bylo přidání rychlého FIFO obrazového bufferu. Ten funguje jako spojovací článek mezi pořízením a zpracováním obrazu a umožňuje tak efektivnější a rychlejší přístup procesoru k sejmutému obrazu. Standardní rozlišení, se kterým modul pracuje, je 88x144 pixelů. Rozlišení lze softwarově snižovat a to nezávisle v obou osách. Kromě zvýšení frekvence zpracování obrazu až na 50fps nabídl tento modul i další zajímavé funkce. Jedná se zejména o frame differencing 4, získání histogramů pro jednotlivé barevné kanály, volitelné rozšíření statistických informací o objektech v obraze. Funkce vyhledávání a sledování barevných objektů a přímého řízení servomotorů byly zachovány. 4 Schopnost porovnat každý nový snímek s uloženým vzorem. Vhodné např. pro detekci pohybu v obraze. 25 Obr. 19: CMUcam2, převzato z [17] Obr. 20: Schematický nákres CMUcam2, převzato z [18] CC2 má definovaný komunikační protokol, který nelze měnit. Data jsou posílána ve formě textových paketů. Komunikace modulu s řídicím procesorem může probíhat po standardní sériové lince RS232 nebo po TTL sériové lince. Schematický nákres CC2 je zobrazen na obr. 20. Současná cena CC2 je $179 [17]. 26 Podrobný popis příkazů a komunikačních paketů CC2 je možné najít v uživatelském manuálu [18], který je k dispozici online na webové stránce [15]. Popis dalších vlastností a principu funkce tohoto kamerového modulu lze také najít v práci [19]. 3.5.3 CMUcam3 CMUcam3 [20] je nejnovější model této řady představený v roce 2007. Stejně jako předchozí modely má i tento za cíl umožnit zpracování obrazu v reálném čase. Modul je postaven na mikroprocesoru Philips LPC2106 s ARM architekturou, který je oproti procesorům na předchozích modelech plně programovatelný v jazyce C. Modul je tak možné přizpůsobit pro konkrétní aplikaci, což umožňuje mnohem širší využití. Z hardwarového vybavení má modul oproti předchozím modelům navíc řadič pro MMC kartu s FAT16, rychlejší FIFO obrazový buffer, GPIO rozhraní a komunikační porty SPI a I2C. LPC2106 je 32bitový 60MHz mikroprocesor na bázi ARM7TDMI s 64KB RAM paměti a 128KB flash paměti. Pro ukládání snímků z kamerového modulu OV6620 slouží 1MB FIFO, která odděluje snímací a zpracovávací část modulu. Standardní pracovní rozlišení obrazu je 176x144 pixelů. Rozlišení je však třeba vhodně volit v závislosti na používané aplikaci, protože paměť na modulu pro uložení zpracovávaného obrazu je omezená. Propojení jednotlivých částí je naznačeno na obr. 22. Cena tohoto modulu je $239 [17]. Obr. 21: CMUcam3, převzato z [20] 27 3.5.3.1 Vývoj aplikací Všechny prostředky potřebné k vývoji vlastních aplikací pro CC3 je možné získat na stránkách věnující se kamerovému modulu CC3 [21] v sekci „Software“. Jedná se o kompilátor jazyka C99 vhodný pro ARM procesory, programátor pro LPC2106 a adresářovou strukturu obsahující potřebné knihovny, funkce pro propojení do nejnižší hardwarové vrstvy a vzorové projekty. Popis adresářové struktury je uveden v příloze A. Obr. 22: Schematický nákres CMUcam3, převzato z [21] 3.6 Vyhodnocení Při porovnání technických parametrů a ceny jednotlivých modulů byl jako nejvýhodnější vybrán modul AVRCam. Jeho dostupnost však byla velmi špatná, a proto byl vývoj aplikací zahájen s kamerovým modulem CMUcam2. Ačkoliv není programovatelný, tak nabízí dostatečné množství statistických informací o obraze a lze jej jednoduše začlenit do větších 28 projektů. Vzhledem ke zpětné kompatibilitě modulu CMUcam3 s předchozí verzí pokračoval vývoj aplikací na tomto modulu. Navíc již umožňoval úpravu vnitřních algoritmů pro zpracování obrazu. Velkou výhodou modulů CMUcam je také jejich dobrá dostupnost a kvalitní technická podpora včetně řady ukázkových aplikací. 29 4 Aplikace s kamerovými moduly CMUcam V této části jsou popsány některé projekty využívající moduly CMUcam. Ty jsou vybrány tak, aby byly patrné výhody použití tohoto modulu pro daný projekt. Jak již bylo řečeno, kamerové moduly s jednočipovým mikroprocesorem nemohou dosahovat takového výpočetního výkonu při zpracování obrazu jako běžné PC nebo výkonné procesory. Přesto mají své opodstatnění a to zejména v projektech, kde je kladen důraz na cenu, spotřebu a velikost robotu. Stále ovšem musíme brát v úvahu i omezení, která z využití těchto modulů plynou. Jedná se zejména o nutnost použití pouze základních algoritmů, omezení využitelné paměti, nutnost optimalizace přenosu dat mezi modulem a řídicím procesorem z důvodu malé přenosové rychlosti a v neposlední řadě i nižší rozlišení. 4.1 LUV LUV5 je projekt, který měl za cíl vyvinout levné vozidlo schopné pohybu pod vodou (ponorka). Hlavním kritériem pro výběr senzorů a řídicího HW byly cena a spotřeba. Senzory musely být odolné vůči změnám tlaku, vlhkosti a teploty a to zejména z hlediska přesnosti. Řídicí jednotka byla postavena na mikroprocesoru OOPic s klasickou PIC architekturu. Byl vybrán, protože disponuje dostatečným množstvím analogových, digitální a optických I/O pro připojení všech potřebných senzorů a čidel. Úkolem řídicího procesoru bylo vést vozidlo takovým směrem, aby se vyhnulo všem překážkám a doplulo do cílové pozice. Jako hlavní navigační člen sloužila CMUcam2. Modul byl nastaven tak, aby na základě změny barvy dokázal najít a rozpoznat předmět ve vodě a pomocí dalších algoritmů rozpoznat jeho texturu a tím určit o jaký objekt se jedná (úkol klasifikace a segmentace obrazu). CMUcam byla vybrána proto, že data dokáže předzpracovat a řídicímu procesoru posílá již vyhodnocené údaje o poloze překážky. Ve chvíli, kdy není žádný předmět rozpoznán, nezatěžuje modul procesor žádnými daty. Ten má tak dostatek procesového času počítat na základě údajů z dalších senzorů (sonar, digitální 5 Low-cost underwater vehicle 30 Obr. 23: Schéma řídicího machanizmu LUV, převzato z [22] kompas, talkový senzor a akcelerometr) trajektorii pohybu a řídit motory vozidla. Bližší informace a specifikace jednotlivých částí jsou v [22]. Podobný projekt postavený na stejném řídicím mechanizmu využívající k navigaci CMUcam3 je popsán v [23]. 4.2 Hardcore III Hardcore III [24] je robot vyvinutý pro soutěž IGVC 6 [25]. V této soutěži mají autonomní robotická vozidla za úkol projet naplánovanou trasu v co možná nejkratším čase a vyhnout se jak umělým, tak i přírodním překážkám. V tomto projektu byla CMUcam2 použita hned ze 2 důvodů. Protože trasa byla vyznačena bílými pruhy v trávě, bylo velmi jednoduché získat z obrazu trajektorii cesty. Data se tak opět nemusela přenášet kompletní, ale kamerový modul posílal řídicímu procesoru pouze potřebné údaje týkající se cesty. Dalším důvodem byl fakt, že umělé překážky měly výrazně oranžovou 6 Intelligent Ground Vehicle Competition 31 barvu. Jejich poloha v obraze je tak pomocí CMUcam2 snadno identifikovatelná a komunikace s procesorem opět probíhá na základě výměny pouze statistických údajů o poloze objektu. Modul tak v systému zastupuje funkci 2 algoritmů pro zpracování obrazu, které by jinak musel provádět řídicí procesor a tím mu znatelně šetří procesní čas. Obr. 24: Fotografie robotu Hardcore III s připojenou CMUcam, převzato z [24] 4.3 Stolní tenis Dalším zajímavým projektem je vývoj robotu hrajícího stolní tenis [26]. Úkolem robotu bylo odehrát ping-pongový míč zpět protihráči. V tomto složitém systému figurovala CMUcam jako důležitý nástroj pro výpočet trajektorie míče a určení místa dopadu. Kamera byla umístěna nad stolem tak, aby snímala pouze modrou plochu stolu a bílou dělicí čáru (viz obr. 25). Tím bylo zajištěno, že oranžový míč byl vůči pozadí dostatečně kontrastní. K určení místa dopadu pak stačí získat informace o 2 místech, kterými míček proletí. Z dat o poloze řídicí procesor dopočítá pravděpodobnou trajektorii letu a místo dopadu míče. 32 Obr. 25: Systém pro odpalování ping-pongových míčů s CMUcam umístěnou nad hracím stolem, převzato z [26] 4.4 robuDOG O tom, že kamerové moduly CMUcam nejsou používány pouze k experimentálním účelům, svědčí např. průmyslový projekt robuDOG [27]. Tento robotický systém ve tvaru psa je produktem společnosti Robosoft. Robot je možné programovat prostřednictvím dodávaného softwaru, který umožňuje simulovat pohyb robotu ve 3D prostředí. Celkem je možné nezávisle ovládat 17 kloubů (4 na každé přední noze, 3 na každé zadní noze a 3 na hlavě). Přední nohou je možné např. kopat do míče a ve spolupráci s dalšími podobnými roboty hrát fotbal. Jako inteligentní vizuální senzor je použit kamerový modul CMUcam3, a to zejména díky možnosti jej podle potřeby přeprogramovat. Modul může být vhodně nastavený např. pro hledání míče v prostoru a určení směru pohybu k němu. Robot je dále vybaven infra-senzory, 2D akcelerometrem a řadou rozhraní (wi-fi, ethernet, USB). Robot lze objednat na stránkách výrobce [28] a jeho cena je 3 200 €. 33 Obr. 26: robuDOG s CMUcam3 umístěnou v díře v hlavě, převzato z [27] Mnoho dalších podobných projektů je možné najít na stránkách CMUcam3 [21] v sekci Projects (sledovací roboti, kamerové senzory, roboti pro soutěže FIRST). Pokud se v těchto projektech zaměříme na princip použití kamerových modulů CMUcam, vyjde najevo, že je pro většinu z nich velmi podobný. Kamerový modul je používán jako podpora pro segmentaci obrazu a je využíváno toho, že data přenášená mezi modulem a procesorem mají malý objem a maximální potřebnou informační hodnotu. Řídicí procesor proto nemusí implementovat algoritmy pro segmentaci obrazu, ale data pouze klasifikuje a tím se zvyšuje jeho rychlost reakce na změny. CMUcam3 nabízí další zjednodušení a zrychlení procesu zpracování obrazu, a to zejména díky možnosti naprogramovat si potřebné funkce přesně pro cílovou aplikaci. Modul nevykonává pouze segmentaci obrazu, ale může data i klasifikovat, čímž dojde k dalšímu urychlení při zpracování dat řídicím procesorem. 34 5 Úlohy pro kamerové moduly CMUcam2 a CMUcam3 Tato část práce se zabývá návrhem a implementací úloh pro zpracování obrazu kamerovými moduly CMUcam2 a CMUcam3. 5.1 Uživatelské rozhraní CMUcam2 Jak již bylo zmíněno v 3.5.2 má CMUcam2 pevně definovaný komunikační protokol. Ten specifikuje příkazy pro: Nastavení registrů kamerového modulu Nastavení vlastností vyhledávání a sledování objektů v obraze Nastavení parametrů servomotorů Získání histogramu obrazu Získání středních barevných hodnot v obraze Získání informací o poloze sledovaného objektu Získání obrazu sejmutého kamerovým modulem Komunikace modulu s řídicím procesorem je paketově orientovaná. Pakety mohou být posílány ve formě textového řetězce nebo v bajtové7 formě. Každý paket je tvořen hlavičkou, tělem a patičkou. Hlavička je písmeno určující typ paketu a tím i jaká data budou následovat. CMUcam2 rozlišuje 4 typy paketů: o F paket – přenos sejmutého obrazu 7 Číselné hodnoty nejsou přenášeny jako ASCII znaky, ale jako jedno číslo. Např. při přenosu čísla 112 se v textové formě přenesou 3 bajty s číslicemi ‘1‘ ‘1‘ ‘2‘, ale v bajtové formě se přenese pouze 1 bajt odpovídající dekadické hodnotě 112, tedy písmeno ‘p‘. 35 o H paket – přenos dat histogramu o T paket – přenos dat o sledovaném objektu o S paket – přenos dat o středních barevných hodnotách v obraze Tělo paketu obsahuje přenášená data. Délka těla je proměnlivá a závisí na formě přenosu dat a v případě textové formy na číselných hodnotách8. Patička zakončuje každý paket. Je ve tvaru carriage return (‘\r’). Přesná definice paketů a popis funkce jednotlivých příkazů je v manuálu ke kamerovému modulu CMUcam2 [18]. Komunikační protokol je implementován v jazycích Java a C++. 5.1.1 Implementace v jazyce Java Tato implementace je popsána v [19]. Obsluhuje všechny příkazy používané kamerovým modulem a umožňuje číst a ukládat všechny datové pakety. Dále je možné s výhodou využít ukázkových programů, ve kterých se může uživatel jednoduše a rychle seznámit s principem funkce kamerového modulu a s implementací uživatelského rozhraní. Tato verze je vhodná pro první seznámení a pochopení funkce CMUcam2. 5.1.2 Implementace v jazyce C++ Toto komunikační rozhraní bylo implementováno s cílem použít jej pro řízení robotu. Umožňuje nastavit všechny registry a parametry důležité pro vyhledávání a sledování barevných objektů. Z datových funkcí obsluhuje pouze vyhledávací a sledovací funkce, jejichž výstup je ve tvaru T paketu. Podle potřeby je ale možné jednoduše doplnit i obsluhu dalších datových funkcí. 8 Čísla nejsou doplňována nulami. 36 5.2 ÚLOHY ZPRACOVÁNÍ OBRAZU Vlastní úlohy jsou implementovány pro kamerové moduly CMUcam2 a CMUcam3. Díky možnosti modulu CC3 emulovat chování CC2 je zachována zpětná kompatibilita. Implementovány jsou tyto úlohy: Sledování barevného objektu robotem (CMUcam2) Multi-blob finder (CMUcam3) GeNav (CMUcam3) 5.2.1 Sledování barevného objektu robotem 5.2.1.1 Rozbor úlohy Základní úlohou sledování objektů v obraze je jejich nalezení podle zadaných kritérií a jejich sledování při dalším pohybu. Kritériem může být barva objektu, textura, tvar, poloha, aj. Využití této aplikace je možné např. v robotickém fotbale, kde umožní hráči vybavenému kamerovým modulem autonomně najít míč, jet za ním a snažit se jej odrážet na soupeřovu branku. Další možností je určování směru pohybu k významným bodům v prostředí, kdy modul pouze předá řídicímu procesoru informace o nalezeném objektu, ten je zpracuje a vyhodnotí. Kamerový modul může zatím již hledat další určený bod. Cílem úlohy je implementovat algoritmus pro autonomní sledování barevného objektu robotem G2BOT [29] na základě údajů z kamerového modulu CMUcam2 upevněného na těle robotu, viz obr. 27. 37 Obr. 27: G2BOT s CMUcam2 a krabicí použitou při testování algoritmu 5.2.1.2 Implementace Úkolem CMUcam2 je nalézt v obraze objekt definované barvy a informace o jeho poloze poslat řídicímu procesoru. Ten je zpracuje a podle potřeby nastaví rychlosti motorů jednotlivých kol tak, aby objekt byl stále uprostřed kamerovým modulem snímaného obrazu. Dojde tak k oddělení části pro zpracování obrazu a řízení robotu. Řídicí procesor tak není zatěžován vyhodnocováním obrazu. Kamerový modul je s řídicím počítačem robotu propojen prostřednictvím převodníku USBRS232. Algoritmus je implementován v C++. Popis algoritmu řízení robotu: Po nastavení parametrů kamerového modulu (AWB, AGC, datový mód) začne vyhledávání barvy objektu zájmu. Vyhledávací fáze spočívá v otáčení robotu kolem své osy a vyhodnocování dat z CMUcam2. Ta na příkaz nalezení barvy v obraze vrací data ve formě T paketu, který má tvar: T mx my x1 y1 x2 y2 pixels confidence\r kde: mx – x souřadnice těžiště nalezené barevné oblasti 38 my – y souřadnice těžiště nalezené barevné oblasti x1 – x souřadnice levého horního rohu nalezené barevné oblasti y1 – y souřadnice levého horního rohu nalezené barevné oblasti x2 – x souřadnice pravého spodního rohu nalezené barevné oblasti y2 – y souřadnice pravého spodního rohu nalezené barevné oblasti pixels – počet nalezených pixelů odpovídajících hledané barvě kvantovaných do 255 úrovní podle rovnice (5.1) confidence – parametr určující, jak velkou část z celé obdélníkové hraniční oblasti zabírají správné9 pixely. Maximální hodnota je 255. (5.2) Pokud je hledaná barva nalezena, zkontroluje se, zda jsou správné pixely dostatečně konzistentní. K tomu slouží parametr confidence. Pokud je tato hodnota dostatečně vysoká 10, jedná se o hledaný objekt a robot přejde do sledovací fáze. V té dochází k vyhodnocení polohy středu nalezené oblasti správných pixelů. Cílem řízení robotu je udržet tento střed oblasti uprostřed celého pozorovaného obrazu. Rychlost pohybu robotu se řídí jednoduchým softwarovým proporcionálním regulátorem, který mění akční veličiny dopředné a úhlové rychlosti v závislosti na velikosti rozdílu zmiňovaných středů oblasti a obrazu. Pokud robot předmět ztratí z dohledu, přejde opět do vyhledávací fáze. Algoritmus řízení robotu je zobrazen v podobě vývojového diagramu na obr. 28. 9 Pixely odpovídající hledané barvě 10 Dobrých výsledků je dosahováno při confidence>20% 39 Start Inicializace modulu a motorů Otáčej robota na místě Hledej barvu objektu Nalzena hledaná barva? NE ANO Je hledaného objektu? NE ANO Je objekt na středu obrazu? Je objekt v pravé části obrazu? NE ANO NE ANO Jeď vpřed Zatoč vpravo Zatoč vlevo Obr. 28: Vývojový diagram aplikace sledování barevného objektu 5.2.1.3 Testování programu Při testování algoritmu měl robot za úkol v prostoru najít zelenou krabici, dojet k ní a při změně polohy ji dále sledovat. Největším problémem je velká závislost rozpoznávání barvy na typu osvětlení. Pokud není osvětlení homogenní v celém pracovním prostoru, dochází k chybnému vyhodnocení barvy krabice, a i když se nachází ve viditelném poli kamerového modulu, není správně rozpoznána a robot přejde do vyhledávací fáze. Tomuto problému lze předejít vylepšením algoritmu o 40 část, která bude adaptivně měnit parametry hledané barvy podle informací z předchozího obrazu. Další možností je použití značek umístěných na hledaném objektu tak, aby je mohl robot vidět. Důležitou podmínkou pro použití takovýchto značek je, že jsou složeny alespoň z 3 různě barevných tvarů, které mají společné těžiště. CMUcam2 ho dokáže při vyhledávání jednotlivých barev štítku najít a k úspěšné identifikaci objektu nám pak stačí nalézt v obraze alespoň 2 barevné oblasti, které si svými těžišti odpovídají. Poslední barva pak může být identifikována chybně. Příklady možných značek jsou na obr. 29. Obr. 29: Příklady možných barevných značek pro identifikaci objektu 5.2.2 Multi-blob finder 5.2.2.1 Rozbor úlohy Z dokumentace k modulu CMUcam2 [16] plyne, že tento kamerový modul dokáže poslat jen informace o hraniční obdélníkové oblasti okolo všech nalezených správných pixelů. V reálném měření to znamená, že i když kamera vidí několik objektů stejné barvy, hraniční oblast je kolem všech těchto objektů, viz obr. 30 b). Je tedy nutné naprogramovat jiný vnitřní algoritmus inspekce obrazu a ten použít pro hledání více stejně barevných objektů v obraze. Tuto úpravu vnitřních funkcí nabízí kamerový modul CMUcam3. Cílem tohoto projektu je implementovat algoritmus pro CMUcam3, který umožní najít v obraze stejně barevné objekty a pro potřebu dalšího zpracování obrazu získat popis jejich polohy pomocí těžiště plochy a obdélníkové hranice oblasti. Tento algoritmus bude v budoucnu použit v rámci dalších projektů. 41 a b c Obr. 30: Příklady ohraničení objektů v obraze: a) bez ohraničení; b) ohraničení CMUcam2; c) požadovaný výsledek ohraničení CMUcam3 a Multi-blob finder algoritmem 5.2.2.2 Implementace Z principu tohoto problému je jasné, že je třeba provést vždy inspekci celého obrazu. Časová náročnost tak přímo závisí na použitém rozlišení (čím vyšší rozlišení, tím vyšší doba inspekce). Standardní rozlišení CMUcam3, které je 176x144 pixelů je pro tuto úlohu, kde není třeba identifikovat drobné objekty, dostačující. Optimálně by inspekce obrazu měla být provedena pouze jednou a všechna rozhodnutí o nalezení nebo uzavření objektu vykonána hned při inspekci. 42 Parametry hledané barvy je možné zadat v RGB nebo HSV modelu v rozmezí 0-255 pro každou složku. Hledání objektů je implementováno jako API knihovna pro CMUcam3 a je popsána v příloze B. Komunikační protokol je upraven tak, aby se mezi modulem a řídicím počítačem přenášela jen nezbytně nutná data. Datový paket je textový. Struktura, v níž jsou uloženy informace o nalezených objektech má tyto proměnné: x0, y0 – souřadnice levého horního rohu obdélníkové hranice objektu x1, y1 – souřadnice pravého spodního rohu obdélníkové hranice objektu centroid_x, centroid_y – souřadnice těžiště nalezeného objektu pix_cnt – celkový počet správných pixelů v objektu change_flag – příznak určující otevření/uzavření nalezeného objektu (slouží pro kontrolu v průběhu inspekce obrazu) Pro hledání objektů jsou důležité 3 parametry, jejichž správné nastavení je významné jejich pro úspěšné nalezení. Jedná se o: noise_filter – určuje minimální počet správných pixelů v řadě, které již lze pokládat za sekvenci příslušející k objektu. Potlačuje rušení při náhodné identifikaci několika málo pixelů jako správných. min_blob_distance – v pixelech určuje minimální vzdálenost mezi objekty. Slouží k potlačení rušení vlivem nehomogenity povrchu objektů, kdy může být pixel uvnitř objektu vyhodnocený jako nesprávný. Pokud je v rámci této minimální vzdálenosti opět nalezna správná sekvence, je tato chyba ignorována a obě přerušené sekvence spojeny do jedné. MAX_BLOBS – definuje maximální možný počet objektů v obraze. Obě datové struktury jsou podrobně popsány v příloze B. Algoritmus hledání objektů lze rozdělit do 5 fází: 1. inicializace proměnných a parametrů hledání 2. načtení obrazových dat 43 3. nalezení sekvence správných pixelů 4. kontrola integrity nalezené sekvence s neuzavřenými objekty 5. uzavření nepokračujících objektů kde 4. fáze přichází v úvahu pouze tehdy, je-li ve 3. fázi úspěšně nalezena sekvence. Přesná posloupnost jednotlivých fází je nejlépe patrná ve vývojovém diagramu na obr. 32. Nalezení sekvence správných pixelů Jednotlivé řádky sejmutého obrazu jsou pixel po pixelu procházeny s cílem nalézt homogenní posloupnost pixelů odpovídajících hledané barvě s ohledem na zadané parametry (noise_filter, min_blob_distance). Této posloupnosti říkejme sekvence správných pixelů. Jakmile je identifikován poslední pixel sekvence, přechází algoritmus do fáze kontroly integrity. Hledání další sekvence pak pokračuje, dokud algoritmus nezkontroluje všechny pixely aktuálního řádku. Kontrola integrity dat V této fázi dochází ke kontrole, zda nalezená sekvence patří některému z neuzavřených objektů. Probíhá na základě znalosti, že mezi pixely patřící jednomu objektu musí existovat cesta, a tedy, že alespoň část nalezené sekvence musí mít sousední pixel11 v některém z neuzavřených objektů. Tento fakt je ilustrován na obr. 31, kde jsou všechny možné vzájemné polohy objektu (modrá) a nalezené sekvence správných pixelů (červená), kdy jsou klasifikovány jako k sobě příslušející. Obr. 31: Možné kombinace pro určení příslušnosti sekvence správných pixelů k objektu Je-li nalezená sekvence součástí některého z objektů, jsou jeho příslušná data upravena v závislosti na nové sekvenci. Pokud sekvence součástí žádného z neuzavřených objektů není, je uložena jako nový objekt. 11 Ve smyslu 4-sousedství 44 Start Inicializace Sejmi obraz Zpracovány všechny řádky? ANO NE Načti řádek Zpracovány všechny pixely? ANO Je sekvence ukončena? NE ANO NE Načti pixel NE ANO Byl předchozí pixel správný? ANO Byl předchozí pixel správný? Je pixel správný? NE NE ANO Uzavři sekvenci Začni sekvenci Zkontroluj integritu Přidej k objektu NE ANO Patří sekvence k objektu? Jsou v seznamu nepokračující objekty? ANO Uzavři objekty Konec Obr. 32: Vývojový diagram pro aplikaci multi-blob finder 45 NE Založ objekt Uzavření nepokračujících objektů Na konci inspekce každé řádky je provedena kontrola, zda pro všechny neuzavřené objekty byla v právě prozkoumané řádce nalezena příslušející sekvence. K tomu slouží příznak change_flag. Ten je inkrementován při každém načtení nové řádky do paměti a resetován, pokud je v této řádce nalezena sekvence příslušející danému objektu. Pokud ve 2 po sobě jdoucích řádkách není taková sekvence nalezena, je objekt označen za uzavřený a jsou vypočítána data o poloze a těžišti objektu. Tato data se již dále nemohou měnit. 5.2.2.3 Testování algoritmu Testování algoritmu probíhalo při statickém umístění kamery před bílou plochou s červenými objekty s různým rozmístěním. Plocha byla rovnoměrně nasvícena žárovkou. Je-li snímané prostředí osvětleno homogenně (nepohybuje se v prostoru), je dobré kamerový modul kalibrovat pomocí automatického vyvážení bílé barvy a automatické expozice. Modul si tyto hodnoty upravuje automaticky při načtení snímku do obrazového bufferu. Před vypnutím kalibračních funkcí je tedy nutné do bufferu nahrát alespoň 5 snímků. Není-li však osvětlení snímaného povrchu stálé, je vhodné kalibrovat kamerový modul popsaným způsobem alespoň každých 10 snímků, případně nechat kalibrační funkce stále zapnuté. Důležitými parametry, které mají přímý vliv na úspěšnost hledání objektů, jsou zmiňované noise_filter (NF) a min_blob_distance (MBD). Z testování vyplynulo, že příliš malá hodnota MBD způsobuje u jinak homogenního objektu jeho rozdělení na více malých. Dochází k tomu zejména v situaci, kdy je povrch objektů lesklý nebo je nerovnoměrné osvětlení. Důvodem je, že pixely ve středu objektu nemusí být detekovány jako správné a při kontrole integrity pak není nalezen vhodný objekt, ke kterému přerušenou sekvenci přiřadit. Naopak, příliš velká hodnota MBD způsobuje „slití“ několika objektů do jednoho velkého, jak je vidět na obr. 33 d). Hodnotu NF je vhodné nastavit na 3-6 pixelů. Při nižší hodnotě mohou totiž jako objekty být identifikovány i náhodně sejmuté sekvence 1-2 pixelů. Velká hodnota NF způsobí necitlivost algoritmu vůči malým předmětům (což může být někdy výhodné). Obecně lze říci, že nastavení obou parametrů je závislé na konkrétním typu úlohy a vlastnostech detekovaných objektů. 46 Algoritmus byl testován programem Blob-finder, který využíval připravené API knihovny a byl implementován pro kamerový modul CMUcam3. Program funguje jako uživatelské rozhraní umožňující měnit parametry hledání objektů (barva objektu, NF, MBD) a zvolit si požadovaný formát výstupních dat algoritmu (pouze výpis informačních dat o objektech, výpis hraničních bodů objektů ve všech řádcích nebo binární obraz). Dále je možné získat sejmutý obraz v grafickém formátu ppm. Doba hledání (ms) Zvolené Skutečný Počet nalezených rozlišení počet objektů objektů RGB HSV 176 x 143 3 3 152 265 176 x 143 4 4 159 269 176 x 143 5 5 164 274 176 x 143 6 6 171 282 176 x 143 7 7 178 288 88 x 143 3 3 91 146 88 x 143 4 4 96 153 88 x 143 5 5 101 158 88 x 143 6 6 107 166 88 x 143 7 7 114 173 88 x 77 3 3 62 91 88 x 77 4 4 68 97 88 x 77 5 5 75 103 88 x 77 6 6 82 107 88 x 77 7 7 88 113 Tabulka 3: Porovnání doby hledání objektů v obraze 47 Jak ukazuje tabulka 3, je doba hledání objektů přímo úměrná zvolenému rozlišení obrazu a počtu objektů v obraze. Na ploše objektu doba hledání nezávisí, a to proto, že inspekce musí být vždy provedena nad všemi pixely obrazu a čas potřebný pro kontrolu integrity a uzavření objektu je na jeho ploše nezávislý. Významný nárůst doby inspekce obrazu je také patrný při definici parametrů objektu v HSV modelu. Je to proto, že je nutné všechny pixely obrazu přepočítat12 z RGB do HSV. Celková doba hledání je také ovlivněna množstvím dat, která potřebujeme mezi modulem a řídicím procesorem přenášet. Parametry vyhledávání byly po celou dobu měření NF=3 a MBD=10 a hledaná barva byla zadána v RGB13. Celková doba hledání a počet nalezených objektů v obraze byl brán jako průměr z 10 měření. Reálně se ale hodnota času měnila maximálně v rámci 2ms a s ohledem na to, že podmínky při testování byly ideální, byla detekce objektů ve všech případech bezchybná. a) b) c) d) Obr. 33: Výsledky multi-blob finder algoritmu: a) Vstupní obraz pro zpracování sejmutý CMUcam3; b) Teoretický výsledek při použití algoritmu CMUcam2; c) Výsledná segmentace obrazu multi-blob finder algoritmem; d) multiblob finder algoritmus s příliš velkou hodnotou MBD 12 Přepočet je prováděn podle rovnic 2.8, 2.9 a 2.10 13 Rozmezí hledané barvy pro testovací obraz: R=<80,255>; G=<0,30>; B=<0,30> 48 Na obr. 33 a) je příklad rozmístění objektů na ploše. Tento obraz byl vstupem programu Blobfinder a výstupem byla data ve formě textového řetězce ve tvaru: found 7 blobs obj nr.1 : x0=79 y0=24 ; x1=107, y1=44 ; Cx=94 Cy=34 ; flag=255 obj nr.2 : x0=28 y0=28 ; x1=65, y1=57 ; Cx=46 Cy=37 ; flag=255 obj nr.3 : x0=118 y0=35 ; x1=156, y1=72 ; Cx=137 Cy=53 ; flag=255 obj nr.4 : x0=57 y0=65 ; x1=80, y1=87 ; Cx=69 Cy=76 ; flag=255 obj nr.5 : x0=31 y0=92 ; x1=55, y1=122 ; Cx=41 Cy=105 ; flag=255 obj nr.6 : x0=136 y0=94 ; x1=160, y1=122 ; Cx=149 Cy=108 ; flag=255 obj nr.7 : x0=94 y0=96 ; x1=121, y1=128 ; Cx=109 Cy=111 ; flag=255 it took 178 ms to track multi color Výpis programu 1 Kde: x0, y0 – souřadnice levého horního rohu hraniční oblasti okolo objektu x1, y1 – souřadnice pravého dolního rohu hraniční oblasti okolo objektu Cx, Cy – souřadnice těžiště objektu flag – příznak určující uzavření objektu Pro názornost jsou tato data přenesena do původního obrazu a výsledek je na obr. 33 c). Žlutá hranice je oblast, ve které se objekt s jistotou nachází s ohledem na nastavené parametry hledání. Žlutý čtverec s černým středem znázorňuje těžiště nalezeného objektu. Tento bod není středem hraniční oblasti, ale přímo závisí na počtu správných pixelů v určité části hraniční oblasti (čím je hustota srávných pixelů v oblasti vyšší, tím blíže je k ní těžiště). Další testování probíhalo v podmínkách, které oproti předchozím nebyly ideální. Cílem bylo nalézt v obraze 4 válcové objekty červené barvy. Bylo použito standardní osvětlení místnosti a jak je vidět na obr. 34 a) pozadí scény nebylo homogenní. Také je patrný odraz od povrchu, který je rušivým jevem. Parametry hledané barvy byly zadány v RGB14. Výsledek použití 14 Rozmezí hledané barvy pro testovací obraz: R=<80,255>; G=<0,30>; B=<0,30> 49 multi-blob finder algoritmu je zakreslen na obr. 34 b). Doba inspekce byla v 10 měřeních průměrně 159ms, což potvrzuje, že doba hledání není závislá na ploše objektů. Oddělení od odrazů na povrchu plochy bylo zajištěno vhodnou volbou rozmezí hledané barvy. a) b) Obr. 34: Příklad obrazu pro testování multi-blob finder algoritmu v reálné scéně; a) původní obraz scény; b) obraz scény se zakreslenými výsledky hledání objektů pomocí multi-blob finder algoritmu Pro zajímavost je na obr. 35 ukázán příklad, kdy jsou 2 objekty v zákrytu a tím dojde k jejich chybnému vyhodnocení a označení za jeden. Obr. 35: Příklad rozložení objektů, kdy jsou 2 z nich v zákrytu Při hledání objektů v reálné scéně je velmi důležité vhodně zvolit rozmezí hledané barvy a barevný model, který ji definuje. Důkazem toho je poslední testování, kdy bylo použito 50 obrazů s podobnou kompozicí jako na obr. 34. Hledaná barva byla pro polovinu snímků definována v RGB a pro druhou polovinu v HSV. Světelné podmínky se průběžně měnily podle osvětlení místnosti. Eliminovat tento jev je částečně možné zapnutím funkce automatického vyvážení bílé, která vždy při změně osvětlení dokáže během několika nově načtených snímků obraz vyvážit a díky tomu se hledaná barva porovnává vždy s podobně barevným obrazem. V průběhu vyvažování často dochází ke špatné detekci objektů v obraze. 50 Ve většině případů je ale nadetekována alespoň část hledaného objektu a i tato informace může být v některých případech užitečná. Rozdíl mezi zadáním parametrů v RGB nebo HSV byl nejvýraznější při snaze detekovat společně s objekty i jejich odrazy od povrchu, kdy bylo použití HSV modelu efektivnější. Při výše popsaných podmínkách se úspěšnost detekce (včetně částečné detekce) pohybuje okolo 90%. Tato hodnota se ale pro každou aplikaci může výrazně měnit v závislosti na okolních vlivech (osvětlení, špatně zvolené pozadí scény) a vlastnostech detekovaných objektů (lesklý povrch, nevýrazná barva, aj.). 5.2.3 GeNav 5.2.3.1 Rozbor úlohy GeNav [30] (Gerstner Navigation) je navigační systém pro vyhledávání cest a křižovatek v obraze, který je snímaný kalibrovanou kamerou zamířenou na oblast před robotem. Systém byl vyvinut v Gerstnerově laboratoři ČVUT jako součást projektu autonomního topologického průzkumu prostředí na základě vizuálního rozpoznávání. Vizuální systém je v původním projektu tvořen jednou kamerou umístěnou na těle robotu a GeNav algortimem, který je spuštěn na řídicím počítači. Blokové schéma je na obr. 37. Vyhledávání cest a křižovatek je založené na barevné segmentaci sejmutého obrazu. Úkolem je oddělit oblast odpovídající barvě cesty od okolí. Barva cesty je určena buď pomocným senzorem, nebo je předem zadána. Z důvodu větší odolnosti vůči změnám jasu je pro specifikaci barvy cesty použit HSV barevný model. Cílem algoritmu hledání cesty v systému GeNav je zajistit polohu robotu uprostřed cesty zatímco se pohybuje vpřed. V případě nalezení křižovatky ji pak identifikovat, popsat a data předat řídicímu počítači, který ji buď vyhodnotí jako novou křižovatku a rozhodne o směru dalšího průzkumu, nebo je vyhodnocena jako bázová15 a prohledávání prostoru je ukončeno. 15 Křižovatka, ve které byl topologický průzkum okolí zahájen 51 Při experimentech popsaných v publikaci [30] byla jako vizuální senzor použita kamera Fire i-400, která pracovala s rozlišením 640x480 pixelů a poskytovala 15 barevných snímků za vteřinu. Obrazová data byla přenášena po sběrnici IEEE1394 FireWire a zpracována počítačem s procesorem Intel Core 2 Duo, který byl zároveň i řídicím počítačem robotu Pioneer 3AT (viz obr. 36). Obraz byl zpracováván rychlostí 10fps. Vzhledem k tomu, že zpracování obrazu zabralo velkou část procesorového času, bylo snahou oddělit systém zpracování obrazu od řízení robotu. Cílem projektu je nahradit původní vizuální systém kamerovým modulem CMUcam3, na kterém bude implementován algoritmus hledání cesty a uživatelské rozhraní umožňující nastavení parametrů hledání. Výstupem algoritmu budou hodnoty určující dopřednou a úhlovou rychlost, které řídicí procesor použije pro korekci směru robotu. Obr. 36: Robot Pioneer 3AT s CMUcam3 na sloupku nad robotem 52 Obr. 37: Blokové schéma systému GeNav, převzato z [30] 5.2.3.2 Implementace Algoritmus hledání cesty pro CMUcam3 je implementován obdobně jako v [30] s ohledem na vlastnosti a parametry kamerového modulu. Z důvodu jednoduššího adresování a efektivnější práce s pamětí je kamerový modul na těle robotu umístěn tak, že obraz je snímán vzhůru nohama. To dovoluje provádět inspekci obrazu od první řádky16 a použít tak již implementované funkce pro práci s obrazem. Algoritmus je implementován jako API knihovna a její popis je v příloze C. Algoritmus hledání cesty začíná inspekcí první řádky obrazu, ve kterém je hledána sekvence pixelů odpovídajících zadané barvě cesty. Pokud je taková sekvence nalezena, je spočítán horizontální střed cesty a algoritmus přejde k inspekci druhé řádky. Ta je prováděna postupně do obou stran od středu nalezeného v předchozím kroku. Hledání sekvence je ukončeno, když jsou nalezeny oba kraje cesty. Pokud je počet správných pixelů sekvence větší než definovaná hranice, pokračuje algoritmus další řádkou opět od středu předchozí sekvence. Pokud tato podmínka splněna není, nebo v další řádce není sekvence nalezena vůbec, je inspekce obrazu zastavena. Ze získaných dat (počet prozkoumaných řádkek a celková odchylka jednotlivých středů cesty od středu obrazu) jsou spočítány hodnoty určující velikost dopředné rychlosti v a úhlové rychlosti ω. Tyto hodnoty jsou ve tvaru hexadecimálních čísel, ze kterých řídicí 16 Původní algoritmus prováděl inspekci obrazu od posledního řádku 53 procesor počítá skutečné velikosti příslušných rychlostí. Vztah pro výpočet vstupních hodnot regulátoru je (5.3) kde w je šířka obrazu, mi je odchylka středu cesty od středu obrazu v i-tém řádku, r je počet řádek obsahujících cestu. Vývojový diagram popsaného algoritmu je na obr. 38. Rozhodování, zda právě testovaný pixel patří cestě, je založeno na porovnání jednotlivých barevných složek pixelu s korespondující minimální a maximální hodnotou definující cestu. Je možné použít HSV nebo RGB barevný model. Dále je možné zadat i barevné parametry okolí, což umožní robustnější klasifikaci pixelu. Pokud je vyhodnocen jako správný pro parametry cesty, je ještě otestován, zda-li zároveň není správný i pro parametry specifikující okolí. Pokud ano, pak je vyhodnocen jako pixel nepatřící cestě. Je-li při inspekci řádky nalezena sekvence nesprávných pixelů delší než je definovaná mez, je poslední nalezený správný pixel označen jako kraj cesty (pravý nebo levý, podle aktuálního směru inspekce řádky od středu cesty). Tento rozhodovací algoritmus je v podobě vývojového diagramu na obr. 39. Aby bylo možné algoritmus hledání cesty využít v rámci celého systému GeNav, je v kamerovém modulu implementováno uživatelské rozhraní umožňující nastavovat parametry cesty a okolí a získávat další informace. Komunikační protokol je textový a je tvořen: hlavičkou definující parametry, které se budou nastavovat tělem obsahujícím číselné hodnoty specifikující maximální a minimální barevné hodnoty cesty nebo okolí pro použitý barevný model patičkou zakončující příkaz, pro kterou je použit znak carriage return (‘\r’). Komunikační protokol je popsán v příloze D. 54 Start Načti obraz Je v prvním řádku obrazu sekvence pixelů cesty? NE Nastav dopřednou a úhlovou rychlost na 0 ANO Najdi střed sekvence Načti další řádek Testuj pixely vpravo od nalezeného středu sekvence Je nalezen pravý kraj cesty? NE ANO Testuj pixely vlevo od nalezeného středu sekvence Je nalezen levý kraj cesty? NE ANO ANO Je počet pixelů sekvence větší než definovaná mez? NE Spočítej dopřednou a úhlovou rychlost. Obr. 38: Vývojový diagram algoritmu hledání cesty pro systém GeNav 55 Start Načti další pixel Splňuje pixel parametry cesty? NE NE Je počet nesprávných pixelů větší než definovaná mez? ANO Splňuje pixel parametry okolí? ANO ANO NE Ulož poslední správný pixel jako kraj cesty Označ pixel jako správný Konec Obr. 39: Rozhodovací algoritmus pro příslušnost pixelu k cestě 5.2.3.3 Testování algoritmu Pro testování algoritmu hledání cesty bylo použito zmíněné uživatelské rozhraní. Kamerový modul CMUcam3 byl umístěn na sloupku nad robotem Pioneer 3AT (viz. obr. 36) tak, aby snímal prostředí před robotem. Kamerový modul musí být upevněn tak, aby byl snímaný obraz otočený o 180°. Obraz byl snímán v rozlišení 352x288 pixelů a po prvotní inicializaci byly automatické funkce vyvážení bílé a nastavení expozice vypnuty. Tím je zaručeno, že podmínky snímaní jsou po celou dobu sledování cesty stejné. Mez určující minimální šířku cesty byla 20 pixelů. Nejdříve byl algoritmus otestován při sledování cesty, která je vůči okolí kontrastní. Pro simulaci byla použita bílá páska na tmavém podkladu. Barva cesty byla definována v HSV modelu. Výsledek algoritmu je vidět na obr. 40. V tomto případě je detekce cesty přesná a 56 bezchybná v celé výšce obrazu. Zelené body značí nalezené hranice cesty a červenými body jsou vyznačeny středy cesty v jednotlivých řádcích. Obr. 40: Cesta a její střed vyznačený pomocí testovacích dat z algoritmu hledání cesty v systému GeNav (otočeno o 180°) a) b) Obr. 41: Výsledek algoritmu hledání cesty aplikovaný pomocí definovaných oblastí (otočeno o 180°); a) vstupní obraz s definovanými oblastmi pro výpočet parametrů cesty (modrá oblast) a okolí (žlutá oblast); b) výsledná nalezená cesta Na obr. 41 je algoritmus hledání cesty použitý v reálném prostředí chodby. Parametry cesty a okolí byly vypočítány z barevných hodnot jednotlivých pixelů uvnitř modré, respektive žluté oblasti a definovány byly v HSV modelu. Výsledek detekce cesty je na obr. 41 b). Cesta je 57 opět nalezena v celé výšce obrazu, ale je patrné, že tmavá místa v pravém horním a dolním rohu jsou označena jako okolí. Dále je dobré si uvědomit, že ačkoliv hranice cesty (zelené body) v některých řádcích hodně kolísá, je trend jejího středu (červené body) téměř spojitý. Pro vyhlazení je možné použít vhodný filtr. Důležitým parametrem algoritmu je doba, za kterou je schopný cestu v obraze detekovat. Systém GeNav v původní konfiguraci dokázal zpracovat průměrně 10 snímků za vteřinu při plném vytížení řídicího počítače. Pro správnou funkčnost je třeba s kamerovým modulem dosáhnout rychlosti alespoň 3 snímků za vteřinu, což odpovídá době hledání maximálně 330ms. Vzhledem k implementaci je doba hledání cesty kamerovým modulem velmi závislá na sejmutém obrazu. Čas inspekce roste úměrně s počtem řádků, ve kterých je cestu možné detekovat17 a šířce cesty ve všech detekovaných řádcích. K dalšímu výraznému nárůstu doby inspekce dojde při použití HSV barevného modelu, protože je nutné každý zkoumaný pixel přepočítat z RGB. Naopak při definici parametrů hledání barvou cesty i okolí je nárůst času asi 10%. Přímý vliv těchto omezení ukazuje tabulka 4, kde jsou zaznamenány časy potřebné k nalezení cesty v obr. 42. Ve druhém měření byla cesta v půlce přerušena. Rozlišení obrazu bylo po celou dobu měření 352x288 pixelů. Výsledné hodnoty jsou brány jako průměr z 10 měření a přenášena byla pouze tabelovaná data a výstupní paket pro definici rychlostí. Měření celé cesty Počet Počet řádek pixelů HSV – pouze cesta 251 21 652 HSV – cesta, okolí 251 RGB – pouze cesta RGB – cesta, okolí Parametry hledání Měření přerušené cesty Počet Počet řádek pixelů 429 173 17 746 317 21 670 467 173 17 475 332 248 21 367 283 172 16 848 208 248 21 435 324 172 16 833 237 Čas (ms) Čas (ms) Tabulka 4: Čas potřebný pro vyhledání cesty v obraze v závislosti na různém nastavení algoritmu 17 Cesta detekovaná v řádku je širší než 20 pixelů 58 Obr. 42: Zdrojový obraz pro testování doby hledání cesty, otočeno o 180° Je patrné, že časová podmínka pro detekci cesty v obraze je při použití HSV modelu splněna jen jednou, a to při omezené hloubce prohledávání a šířce cesty nezabírající celou šířku obrazu. Se zvyšujícím se počtem testovaných pixelů roste i celková doba běhu algoritmu. Řešení tohoto problému je několik: Snížení rozlišení obrazu – kamerový modul umožňuje snížit rozlišení nezávisle v horizontální i vertikální ose. Tím se sníží počet testovaných pixelů a tedy i celkový čas potřebný pro vyhledání cesty. Nevýhodou je, že dojde ke snížení citlivosti a přesnosti algoritmu. Omezení maximálního počtu testovaných řádek – pro výpočet dopředné a úhlové rychlosti není nutné mít informace z celého obrazu. Máme-li dostatečný počet řádek a algoritmus bude dostatečně rychlý, dokážeme v jeho další iteraci najít cestu ve vynechaných řádkách. Nevýhodou tohoto řešení je, že jedna definovaná hraniční hodnota nezaručuje dostatečnou robustnost algoritmu. Při pevné hranici bude čas hledání závislý jen na počtu testovaných pixelů a tato hodnota se může v závislosti na vlastnostech cesty velmi měnit. Omezení maximálního času běhu algoritmu – toto řešení se dá označit i jako omezení počtu testovaných pixelů. Využívá výhod předchozího řešení, kdy není třeba provést inspekci celého obrazu k získání korektních hodnot dopředné a úhlové rychlosti, ale zároveň se hloubka inspekce dynamicky mění v závislosti na detekované šířce cesty. Toto řešení je optimální z hlediska času a efektivity algoritmu. 59 Nelineární krok inspekce řádek v ose y – každá jednotlivá řádka obrazu reprezentuje v reálné cestě různě dlouhý úsek, přičemž platí, že čím „vzdálenější“ řádka, tím je reprezentovaný úsek delší a tím i informačně významnější. Navíc informace v několika po sobě jdoucích řádkách se většinou příliš neliší. Můžeme tedy využít možnosti, že u délkově méně významných řádek obrazu (např. prvních 100) budeme několik po sobě jdoucích řádek (např. 2) přeskakovat a informace potřebné pro výpočet hodnot dopředné a úhlové rychlosti v těchto řádkách budou stejné jako u poslední zkoumané. U dalších řádek bychom postupovali analogicky, tedy např. pro řádky 100-200 by se inspekce prováděla u každé druhé a pro zbytek obrazu by se již zkoumala každá řádka. S výhodou by se pak toto řešení dalo zkombinovat s omezením doby běhu algoritmu, čímž by došlo ke zvýšení počtu zkoumaných řádek. Nevýhodou je možnost rizika přeskočení řádek obsahujících překážku v cestě. Je tedy nutné parametry hledání vždy vhodně nastavit v závislosti na terénu. Z předchozích možností bylo do vyhledávacího algoritmu implementováno časové omezení hledání cesty s lineárním krokem při inspekci řádek. V celé výšce obrazu je zkoumána každá 3. řádka a do vynechaných jsou doplněna data z poslední testované řádky. Časové omezení bylo stanoveno na 300ms. Takové řešení ve většině případů zaručí inspekci obrazu v celé jeho výšce ve vyhrazeném čase. Obr. 43: Oddělení cesty od okolí pro systém GeNav ve venkovním prostředí Takto upravený algoritmus byl použit pro hledání cesty ve venkovním prostředí. Při testování bylo nutné nechat po celou dobu zapnutou funkci AWB, která umožňovala přizpůsobení 60 vlastností snímání aktuálním světelným podmínkám. Zapnutí této funkce také umožnilo snazší oddělení cesty od okolí při přejezdu ze světla do stínu. Barevné parametry byly definovány vyznačením oblastí cesty a okolí stejně jako v příkladu na obr. 41. Nejlepších výsledků bylo dosaženo při zadání oblastí, které obsahují cestu i okolí jak ve světle, tak ve stínu. Testování probíhalo v parku na Karlově náměstí. Příklad výsledné segmentace cesty od okolí je uveden na obr. 43. Výsledky testování ukázaly, že kamerový modul je dostatečně rychlý pro implementaci algoritmu hledání cesty a dokáže nahradit stávající vizuální systém. Velkou výhodou tohoto řešení je snadná přenositelnost na libovolný systém s potřebou minimálních nebo žádných úprav v samotném algoritmu. 61 6 Závěr Cílem této diplomové práce bylo seznámit se se základními principy a postupy zpracování obrazu v kontextu jejich dalšího využití na kamerových modulech s jednočipovým mikroprocesorem a na základě těchto informací pak navrhnout a implementovat několik úloh pro kamerové moduly CMUcam2 a CMUcam3, které by pracovali jako systémy pro předzpracování obrazu. V projektu sledování barevného objektu robotem byl využit kamerový modul CMUcam2 a jeho implementované algoritmy pro segmentaci obrazu na základě odlišení barev. Tato jednoduchá aplikace nabízí další možnosti rozšíření a zdokonalení sledovacího algoritmu, které jsou v práci uvedeny a je tak možno využít jej např. pro výukové účely. Multi-blob finder algoritmus byl implementován s cílem jeho dalšího využití na robotických systémech. Kód je optimalizovaný pro rychlost vyhledávání objektů a z výsledků je patrné, že úspěšnost hledání objektů je při dobře definovaných parametrech velmi vysoká. Algoritmus tedy může být využíván v robotických soutěžích např. pro identifikaci jednotlivých robotů (např. robotický fotbal) nebo při soutěžích typu Eurobot, kdy je cílem autonomně nalézt a identifikovat různé objekty. Implementací algoritmu hledání cesty pro systém GeNav bylo dokázáno, že při vhodném nastavení dokáže kamerový modul s jednočipovým mikroprocesorem nahradit samostatnou kameru připojenou k výkonnému PC. Výhodou tohoto řešení je nízká cena, snadná přenositelnost na libovolný systém a vzhledem k rozměrům CMUcam3 i jednodušší hardwarová instalace. Tento algoritmus však nemá využití pouze pro původní topologický systém, ale je ho možné použít např. pro autonomní řízení robotu při pohybu po vyznačené čáře (autonomní automobil). Dalším plánovaným využitím algoritmu je vizuální systém pro autonomní invalidní vozíky. Úkolem bude zajistit, aby se vozík nedostal mimo definovanou cestu nebo zastavil před překážkou. Při vývoji aplikací je proti modulům s definovaným protokolem výhodné použít programovatelné moduly, jako je CMUcam3. Umožňují totiž mnohem širší spektrum použití 62 a možnost přizpůsobení algoritmu pro výslednou aplikaci. Tím je zaručeno efektivnější a rychlejší zpracování obrazu. V úlohách bylo dokázáno, že kamerové moduly s jednočipovým mikroprocesorem dokáží při vhodné implementaci a nastavení algoritmů pro zpracování obrazu nahradit i výkonnější systémy. Další vývoj by tedy mohl směřovat k testování dalších, složitějších algoritmů pro rozpoznávání objektů nebo textur v obraze. Stále je však třeba brát v úvahu omezení velikosti použitelné paměti na modulu a minimální požadavky na časovou náročnost algoritmů. 63 7 Použitá literatura a zdroje [1] Hlaváč, V. a Sedláček, M. Zpracování signálů a obrazů. Praha : Vydavatelství ČVUT, 2002. ISBN 80-01-02114-9. [2] Šonka, M., Hlaváč, V. a Boyle, R. Image Processing, Analysis and Machine Vision. 3rd edition. Toronto : Thomson Learning, 2007. ISBN 0-495-08252-X. [3] Hlaváč, V. a Kybic, J. Materiály k předmětu 33ZSL1. [Elektronický dokument] [4] Hlaváč, V. Materiály k předmětu 33PVR. [Elektronický dokument] [5] Vision Sensor On GlobalSpec. [Online] [Citace: 23. březen 2008.] http://sensorstransducers.globalspec.com/Industrial-Directory/vision_sensor. [6] Wright, A., Sargent, R. a Witty, C. Cognachrome Vision System. [Online] [Citace: 23. březen 2008.] http://www.newtonlabs.com/cognachrome/. [7] Electronics, Testech. [Online] [Citace: 23. březen 2008.] http://www.testechelect.com/tern/ceye.htm. [8] Orlando, J. R. JRobot. [Online] http://www.jrobot.net/Projects/AVRcam.html. [9] Rahimi, M., a další. Cyclops: In Situ Image Sensing and Interpretation. [Elektronický dokument] San Diego : ACM SenSys, 2005. [10] Typl, P. DP: Zpracování videosignálu s pomocí FPGA. Praha : ČVUT v Praze, Fakulta elektrotechnická, 2005. [11] Robotics Institute - Carnegie Mellon University. [Online] [Citace: 24. březen 2008.] http://www.ri.cmu.edu/. [12] Omnivision OV6620 Advanced Information Preliminary. [Elektronický dokument] 2000. [13] CMUcam Vision System. [Online] [Citace: 24. březen 2008.] http://www.cs.cmu.edu/~cmucam/home.html. [14] Rowe, A., Rosenberg, C. a Nourbakhsh, I. A Low Cost Embedded Color Vision System. [Elektronický dokument] Pittsburgh : Carnegie Mellon University, 2002. [15] CMUcam2. [Online] [Citace: 24. březen 2008.] http://www.cs.cmu.edu/~cmucam2/. [16] Rowe, A., Rosenberg, Ch. a Nourbakhsh, I. A Second Generation Low Cost Embedded Color Vision System. [Elektronický dokument] Pittsburgh : Carnegie Mellon University, 2004. 64 [17] Seattle Robotics. [Online] [Citace: 4. duben 2008.] http://www.seattlerobotics.com/index.htm. [18] Rowe, Anthony. CMUcam2 Vision Sensor - User Guide. [Elektronický dokument] Pittsburgh : Carnegie Mellon University, 2003. [19] Janouch, M. Semestrální práce: Aplikace modulu CMUcam2+. [Elektronický dokument] Praha : ČVUT v Praze, 2006. [20] A., Rowe, Goode, A. a Nourbakhsh, I. Embedded Vision Processor CMUcam3. [elektronický dokument] Pittsburgh : Carnegie Mellon University, 2006. [21] CMUcam3. [Online] [Citace: 24. březen 2008.] http://www.cmucam.org/. [22] Sehgal, Anuj, Kadarusman, Jason a Fife, Leslie. LUV: The Low Cost Underwater Vehicle. [Elektronický dokument] Laie : Brigham Young University-Hawaii. [23] Mozeika, Annan, a další. PROWLER V. [Elektronický dokument] New York : University of Rhode Island. [24] Umez-Eronini, Iheanyi. HARDCORE III – IGVC Design Report. [Elektronický dokument] Rochester : Rochester Institute of Technology. [25] IGVC - Intelligent Ground Vehicle Competiton. [Online] [Citace: 3. duben 2008.] www.igvc.org. [26] Van Dyk, Robert. Augmented Reality Table Tennis Robot. [Elektronický dokument] New York : Rensselaer Polytechnic Institute, 2003. [27] Robosoft. robuDOG - Programmable 4-legged robot. [Elektronický dokument] Bidart : Robosoft. [28] Mobile Robots - Robosoft. [Online] [Citace: 15. duben 2008.] http://www.robosoft.com/eng/. [29] Chudoba, Jan. G2BOT - experimentální mobilní robot. [Elektronický dokument] Praha : ČVUT v Praze, červen 2005. hardwarová dokumentace k projektu. [30] Košnar, K., Krajník, T. a Přeučil, L. Visual Topological Mapping. [Elektronický dokument] ČVUT v Praze : The Gerstner Laboratory for Intelligent Decision Making and Control. [31] Rowe, A., a další. CMUcam3: An Open Programmable Embedded Vision Sensor. [Elektronický dokument] Pittsburgh : Carnegie Mellon University, 2007. CMU-RI-TR07-13. 65 Příloha A. Popis adresářové struktury vývojového prostředí CMUcam3 hal/lpc2106-cmucam3 Obsahuje soubory popisující hardwarovou vrstvu modulu CC3. Pokud není k modulu připojen nový hardware, není třeba tyto soubory upravovat. include Obsahuje soubor cc3.h. Ten řeší propojení základních uživatelských funkcí s odpovídajícím hardwarem. Jedná se o funkce nastavující registry kamerového čipu, nastavující parametry komunikačních rozhraní, funkce pro práci s obrazovým bufferem nebo systémové funkce procesoru. Obsahuje také velmi důležitou datovou strukturu cc3_g_pixbuf_frame, která po celou dobu běžícího programu uchovává informace o stavu registrů kamerového čipu. lib/cc3-ilp Obsahuje knihovny se základními funkcemi pro práci se sejmutým obrazem, jako např. vyhledávání objektů, získání histogramu nebo jiných statistických údajů, uložení obrazu na paměťovou kartu aj. Pokud chceme naprogramovat vlastní knihovnu s funkcemi pracujícími nad daty uloženými přímo v obrazovém bufferu, pak je vhodné zdrojové kódy umístit právě do tohoto adresáře. projects V tomto adresáři jsou vzorové projekty a úlohy od tvůrců CC3. Popis funkce některých úloh je možné najít v [31]. Pro vlastní projekty je třeba vytvořit makefile a to nejlépe podle vzoru již naimplementovaných projektů. docs Obsahuje soubor s doporučením, jak psát syntakticky správně vlastní zdrojové kódy pro kamerový modul CMUcam3. 66 Příloha B. Popis API multi-blob finder algoritmu Zdrojové kódy jsou umístěny v cc3\lib\cc3-ilp\ a jedná se o soubory cc3_track_multi_blobs.h a cc3_track_multi_blobs.c. Popis datových struktur: blob_info_t: o Struktura obsahující všechny informace o nalezeném objektu. uint16_t x0, y0 o souřadnice levého horního rohu nalezeného objektu uint16_t x1, y1 o souřadnice pravého dolního rohu nalezeného objektu uint32_t centroid_x, centroid_y o souřadnice těžiště nalezeného objektu uint32_t pix_cnt o počet správných pixelů v nalezeném objektu uint8_t change_flag o příznak určující, jestli při inspekci řádky došlo k úpravě výše popsaných údajů. V případě uzavření objektu je hodnota příznaku change_flag=255. cc3_track_pkt_multi_t: o Struktura představující datový paket, který je předáván jako parametr pro funkce hledání objektů v obraze. Tento paket slouží pro nastavení parametrů hledání objektů a nese i informace o všech nalezených objektech. blobs_data[MAX_BLOBS] o udržuje průběžné a finální informace o nalezených objektech v obraze. Maximální možný počet nalezených objektů je definován parametrem MAX_BLOBS noise_filter o hodnota noise filtru blob_data_index o index prvního neuzavřeného objektu v poli blobs_data[] min_blob_dist o hodnota minimální vzdálenosti mezi objekty track_invert 67 o parametr umožňující hledat v obraze pouze objekty, které jsou mimo definovanou barevnou hranici upper_bound o definice horní barevné hranice objektu lower_bound o definice spodní barevné hranice scratch_x, scratch_y o dočasné hodnoty polohy testovaných pixelů print_data o parametr definující, jaká data se budou tisknout na výstup (0=binární obrázek; 1=nalezené informace o každém řádku; 2=pouze výpis informací o nalezených objektech) color_space o parametr definující použitý barevný model (1=RGB; 2=HSV) bool HSV_inverted o parametr umožňující hledat H složku okolí v HSV modelu i přes 0 (např. v rozmezí 340-40) Popis funkcí API: uint8_t cc3_track_multi_blobs(cc3_track_pkt_multi_t * pkt) o Funkce provádí inspekci obrazu uloženého v obrazovém bufferu na základě parametrů uložených v *pkt (viz výše). V tomto paketu jsou zároveň uloženy i výsledné informace o všech nalezených objektech. Funkce vrací hodnot 1, když inspekce obrazu proběhne úspěšně, jinak vrací hodnotu 0. 68 Příloha C. Popis API algoritmu hledání cesty pro systém GeNav Zdrojové kódy jsou umístěny v cc3\lib\cc3-ilp\ a jedná se o soubory cc3_genav_img_proc.h a cc3_genav_img_proc.c. Zdrojové kódy programu, který API implementuje a funguje jako komunikační rozhraní mezi řídicím počítačem a kamerovým modulem CMUcam3 je umístěn v cc3\projects\genav\. Popis datových struktur: cc3_genav_pkt_t: o Struktura představující datový paket, který je předáván jako parametr pro funkce hledání cesty pro systém GeNav. Tento paket slouží pro nastavení parametrů hledání cesty jsou v něm uložena i výsledná data nalezené cestě. uint8_t noise_filter o hodnota noise filter uint16_t current_middle o proměnná, ve které je uložena hodnota středu cesty v aktuálním řádku cc3_pixel_t path_upper_bound o definice horní barevné hranice cesty cc3_pixel_t path_lower_bound o definice spodní barevné hranice cesty cc3_pixel_t bcg_upper_bound o definice horní barevné hranice okolí cc3_pixel_t bcg_lower_bound o definice horní barevné hranice okolí uint8_t color_space o parametr definující použitý barevný model (1=RGB; 2=HSV) bool path_only o parametr definující, je-li inspekce obrazu prováděna pouze na základě zadaných parametrů cesty nebo cesty i okolí bool HSV_path_inverted o parametr umožňující hledat H složku cesty v HSV modelu i přes 0 (např. v rozmezí 340-40) bool HSV_bcg_inverted 69 o parametr umožňující hledat H složku okolí v HSV modelu i přes 0 (např. v rozmezí 340-40) bool print_line_data o parametr určující, zda-li se budou tisknout hranice cesty v každém řádku uint16_t line_cnt o celkový počet prozkoumaných řádků int total_diff o celkový součet odchylek středů prozkoumaných řádků od středu obrazu int res_x o výsledná hodnota úhlové rychlosti int res_y o výsledná hodnota dopředné rychlosti Popis funkcí API: uint8_t cc3_genav_img_proc(cc3_genav_pkt_t *pkt) o Tato funkce hledá cestu v obraze uloženém v obrazovém bufferu na základě parametrů definovaných v paketu *pkt (popis parametrů viz výše). Výsledné hodnoty definující velikost dopředné a úhlové rychlosti jsou pak v tomto paketu také uloženy. Funkce vrací hodnotu 0 pokud v první testované řádce obrazu nebyla cesta nalezena a hodnotu 1 pokud cesta úspěšně nalezena. 70 Příloha D. Popis komunikačního protokolu mezi kamerovým modulem CMUcam3 a řídicím počítačem systému GeNav Blok nastavování parametrů hledání cesty je inicializován odesláním příkazu PARAM\r kamerovým modulem. Následující možné příkazy jsou: H hmin hmax Smin Smax Vmin Vmax\r – definuje rozmezí barev cesty v HSV18 modelu h hmin hmax Smin Smax Vmin Vmax\r – definuje rozmezí barev okolí cesty v HSV modelu R Rmin Rmax Gmin Gmax Bmin Bmax\r – definuje rozmezí barev cesty v RGB19 modelu r Rmin Rmax Gmin Gmax Bmin Bmax\r – definuje rozmezí barev okolí cesty v RGB modelu A x0 y0 x1 y1\r – definuje oblast cesty v obraze ohraničenou obdélníkem, kde x0, y0 je souřadnice jeho levého horního rohu a x1 y1 je souřadnice jeho pravého spodního rohu. Z této oblasti je pak spočítáno rozmezí barev definující cestu v HSV modelu. a x0 y0 x1 y1\r – definuje oblast okolí cesty v obraze ohraničenou obdélníkem, kde x0, y0 je souřadnice jeho levého horního rohu a x1 y1 je souřadnice jeho pravého spodního rohu. Z této oblasti je pak spočítáno rozmezí barev definující okolí cesty v HSV modelu. O\r – zapnutí funkce posílání nalezených krajních bodů cesty pro všechny zkoumané řádky v obraze. Tyto hodnoty jsou posílány řídicímu procesoru v textové formě ve tvaru: H x01 x02 x11 x12 x21 x22 … xr1 xr2\ kde B je hlavička uvozující paket, xi0 je souřadnice levého kraje cesty v i-tém řádku, xi1 je souřadnice pravého kraje cesty v i-tém řádku, r je celkový počet zkoumaných řádků, „\“ je zakončovací sekvence přenosu krajních bodů cesty. o\r – zapnutí funkce posílání nalezených krajních bodů cesty pro všechny zkoumané řádky v obraze. I\r – kamerový modul pošle sejmutý obraz řídicímu procesoru ve tvaru paketu: 255I šířka výška RBG0RGB1RGB2 … RGBn255 Paket je uvozen a ukončen bytem s hodnotou 255, I je hlavička paketu, šířka je šířka obrazu přenášená jako ASCII znaky, výška je výška obrazu přenášená jako ASCII znaky, RGBi jsou jednotlivé barevné složky i-tého pixelu přenášené v bytové formě. 18 Rozmezí možných hodnot je H=<0, 360>; S=<0, 255>; V=<0, 255> 19 Rozmezí možných hodnot je R=<0, 255>; G=<0, 255>; B=<0, 255> 71 Aby nedošlo k chybnému ukončení přenosu, jsou všechny hodnoty RGB přenášeny s maximální hodnotou 254. Povinným výstup z kamerového modulu je paket obsahující hodnoty dopředné a úhlové rychlosti ve tvaru: :07xxyy# - je výstupní informace předávaná řídicímu procesoru po každé dokončené inspekci obrazu, kde :07 je hlavička uvozující paket, xx je velikost spočítané dopředné rychlosti v šestnáctkové soustavě20, yy je velikost spočítané úhlové rychlosti v šestnáctkové soustavě s nulovou výchylkou při hodnotě 7Fh, # je znak zakončující paket. 20 Rozmezí hodnot <00, FF> 72
Podobné dokumenty
Podpůrný software pro výuku mobilní robotiky
vyvinuta robotická platforma Morbot. Součástí podpory výuky je konfigurace palubního počítače Morbotu skládající se z nastavení parametrů jeho periférií, ale především přípravy prostředí křížové ko...
Bulletin 2011 - Česká společnost pro zdravotnickou techniku
profese je to jiné. Řešíme, co bylo na začátku, co má být první, zda slepice nebo vejce. Nemůţeme tudíţ
trvat na tom, aby lektor či školitel sám byl jiţ klinickým inţenýrem, pro určitou část VP nem...
Stáhnout PDF.
že signály mohou být přenášeny normálními hlasovými kanály. A právě díky tomu, že SSTV
je možné přenášet pomocí standardního SSB rádiového vysílače na všech pásmech, která
radioamatéři používají js...
Import speciálních driverů
Nastavení pomocí ELAB AVRco pascalu je možné pouze s
programátorem od ELAB
Pinnacle Studio 16 Příručky
Vypálit obraz disku.
Místní nabídky
Místní nabídka je seznam příkazů, který se zobrazí po
klepnutí pravým tlačítkem myši v určitých oblastech
rozhraní aplikace. V závislosti na tom, kde myší
klepne...