FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ KYBERNETIKA, AUTOMATIZACE A MĚŘENÍ
MRBT Projekt
S11. Jízda po čáře - optické snímání čáry
Vypracoval: Program: Obor:
Bc. Ondřej Zapletal EEKR-M1 M1-KAM
Vedoucí:
Ing. Aleš Jelínek
Datum odevzdání:
8.5. 2015
Brno 2015
1. Zadání Za použití webkamery a PC pro zpracování obrazu navrhněte, sestavte a otestujte systém pro navigaci robotu při jízdě po čáře. Zvolte vhodný způsob vyznačení navigační čáry s ohledem na použití v reálném prostředí vnitřních prostor. Systém by měl být dostatečně rychlý pro provoz během jízdy a dále odolný vůči částečnému zašpinění/poškození vodicí čáry. Výstupem systému bude relativní poloha a orientace senzoru (webkamery) vzhledem k navigační čáře.
2. Teoretický rozbor 2.1.
Barevný prostor
Obraz kamery je nejčastěji zaznamenán v RGB barevném prostoru. Barvě jednotlivých pixelu obrazu je tedy reprezentovaná pomoci intensity červené, zelené a modré barvy. Pro potřeby filtrace barev je tento barevny prostor poněkud nevýhodný protože části obrazu většinou nenabývají monolitického barevného odstínu. Oblasti obrazu, které nabývají podobných barev v tomto barevném prostoru obvykle nejsou reprezentovaný blízkými hodnotami. Proto pro potřeby je vhodnější barevný prostor, ve kterém je reprezentace odstínu barvy v jejím kódování odděleno od barevné světlosti a intensity. Příkladem takového prostoru je HSV.
V HSV barevném prostoru je barva pixelu reprezentovaná pomoci tří údajů: odstín, sytost a intenzita.
2
2.2.
Morfologické operace
Eroze Operace, která způsobí zmenšeni každé oblasti pixelů podle zadaných zákonitosti (např. úroveň zmenšení, tvar) Dilatace Inverzní operace k erozi. Rozšířeni každé oblasti pixelů. Intuice pro operace eroze a dilatace:
Původní obraz
Erodovaný obraz
Dilatovaný obraz
Otevírání Aplikace eroze následovaná dilatací. Používá se pro odstranění šumu v obraze. Uzavírání Aplikace dilatace následovaná erozí. Používá se k uzavření malých děr v obraze.
2.3.
Detekce hran
Canny detektor Jednoduchá a poměrně spolehlivá metoda, používaná pro detekování hran v obraze. Principiálně tato detekce funguje takto: - z obrazu je odstraněn šum pomocí filtru (nejčastěji Gaussova) - je naleze gradient intenzity v obraze (jsou aplikovány konvoluční masky ve směru x a y) - jsou vybrána pouze lokální maxima (tím je docílena minimální šířka detekovaných hran) - nevýznamné hrany jsou eliminovány (toho je docíleno stanovením hraničních úrovní pro detekované hrany)
2.4.
Houghova transformace
Metoda používaná pro detekci rovných čar v obraze. Je žádoucí, aby tento obraz byl před touto transformací zpracován pomocí detektorů hran. Pro potřeby Houghovy transformace je výhodné popisovat obraz v polárních souřadnicích. Přímku ve 2D prostoru lze popsat pomocí polárních souřadnic jako (
)
(
)
3
Figure 1: Přímka popsaná pomocí polárních souřadnic Pokud je libovolný bod [
] vyjádřen v polárních souřadnicích podle
Je možné provést zobrazení všech potencionálních čar procházejících tímto bodem v souřadnicovém systému [ ] jako na Figure 2. Na Figure 3 je vidět zobrazení několika bodů [ bod je reprezentován jednou křivkou). Pokud se křivky v tomto zobrazeni protínají, znamená to, že všechny křivky (každá z nich představující bod [ jedné rovné čáře.
Figure 2: Křivka v souřadnicovém systému [ ] představující potenciální přímky procházející bodem [ ].
Figure 3: Množina křivek v souřadnicovém systému [ ]. Průnik těchto křivek značí, že všechny body náleží jedné rovné čáře.
3. Praktická část V rámci praktické části byla naprogramována aplikace v programovacím jazyce C++ a s použitím knihovny OpenCV. Dále byl vyroben hardwarový přípravek pro upevnění kamery, s LED diodami, který zabezpečuje zdroj světla. Pro zajištění spolehlivé detekce vodicí pásky byly vybrány tři různé barvy: modrá, černá a červená. Tyto 3 by měli stačit k tomu, aby navigace robota fungoval na velkém počtu rozmanitě barevných povrchů.
4
Figure 4: Použité barevné pásky
3.1.
Popis aplikace
V aplikaci byly vytvořeny 4 třídy: Point - Třída vytvořená pro převod souřadnicového systému objektu CV::Mat na system s počátkem definovaným uživatelem. LineSegment - Třída reprezentující všechny čáry nalezené v obraze. Třída obsahuje logiku, která přepočítává mezi jednotlivými popisy přímky (popis pomocí dvou bodů, směrnice přímky, polární souřadnic). ColorFilter – třída pro uchovávání horních a dolních hodnot barevného rozsahu jednotlivých barev navigační pásky. Controller – Řídící třída, která zabezpečuje funkci zpracování obrazu a nalezení středu pásky. Funkce aplikace je realizována zavoláním metody void processImage(const int &color) na instanci třídy Controller.
3.1.1. Postup zpracovaní obrazu z kamery (předzpracování obrazu) Metoda processImage nejprve zavolá metodu void updateImage(),
která načte obraz z kamery do cv::Mat struktury origImage. Předzpracovaní tohoto obrazu je vyřešeno zavoláním metody: void threshold(const int &color, int erodeDialteCount),
kde color představuje barvu vybrané pásky a erodeDialteCount počet operací eroze a dilatace aplikovaných na obraz. Postup operací metody threshold je následující:
5
Obraz z kamery – obsah struktury cv::Mat
origImage
převod do HSV barevneho prostoru – pomocí openCV procedury void cvtColor( InputArray src, OutputArray dst, int code, int dstCn=0 );
HSV obraz – obraz z kamery reprezentován novými barvami korespondujícími jejich ekvivalentům v HSV barevném prostoru.
prahovaní barevného pásma – pomocí openCV procedury: void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst);
binární obraz - již obsahuje pouze žádanou barevnou složku specikovanou podle horní a dolní prahové hodnoty HSV barevného prostoru. V této části výsledný obraz často obsahuje různé nežádoucí artefakty, které jsou většinou důsledky šumu nebo kupříkladu nežádoucích barevných prvků v původním obraze.
eroze obrazu (3x) - odstraní veškerý neždoucí šum včetně nežádoucích barevných prvků v původním obraze. dilatace obrazu (5x) - vyplní případné díry v detekovaném obraze eroze obrazu (2x) - zmenší obraz detekované čáry do původních rozměrů binární obraz – čistý obraz obsahující pouze oblast korespondující detekované pásce
6
3.1.2. Detekce pásky v předzpracovaném obraze Detekování pásky má za úkol metoda void findLines(),
Postup operací metody findLines je následující: hledání hran pomocí openCV procedury: void Canny( InputArray image, OutputArray edges, double threshold1, double threshold2, int apertureSize=3, bool L2gradient=false );
binární obraz - obraz obsahující pouze dvě představující okraje pásky.
hrany
Hledání rovných čar v binarním obraze pomocí Houghovy transformace void HoughLines( InputArray image, OutputArray lines, double rho, double theta, int threshold, double srn=0, double stn=0 );
Detekované čáry v obraze
Na skupinu nalezených čar je zavolána metoda void findTangentFromLines(std::vector
&source)
Skupina čar je rozdělena do dvou skupin každá odpovídající jedné straně pásky pomcí metody void splitLinesByCloseness(std::vector &source, std::vector &group1, std::vector &group2)
7
Pro každou skupinu je nalezena čára která odpovídá střední hodnotě skupiny čar pomocí metody lt::LineSegment averageLine(std::vector source)
Nalezena střední hodnta dvou krajových čar a tím identifiakce středu pásky. Opět pomocí metody averageLine.
Nalezení kolmice ze středu souřadnicového systému ke středu pásky. Kolmice je popsána úhlem theta a počtem pixelů rho.
Poslední krok metody processImage je void showImages(),
tato metoda vykreslí uživatelem zvolené části identifikačního řetězce společně s obrazem kamery, který obsahuje vykreslené informace o detekované pásce.
8
3.1.3. Uživatelské rozhraní Pro nastavení aplikace je pro uživatele k dispozici okno knihovny HighGui, které je zobrazeno na Figure 5.
Figure 5:Ovládání aplikace První posuvník s názvem slouží k výběru detekované barvy. K dispozici je modrá, černá, červená a volně nastavitelná. Posuvník history slouží k přepínání historie (detekovaná čára je buďto vyhodnocována jako okamžitá hodnota anebo jako průměrná hodnota několika posledních hodnot). Možnost debug opt přepíná mati minimalistickým zobrazením a zobrazením mezi kroků zpracování obrazu. Posuvníky x offset a y offset umožnují uživateli aby si mohl nastavit střed souřadnicového systému.
Figure 6: Digram tříd aplikace LineTracker 9
3.2.
Vytvoření osvětlení
Byl vytvořen přípravek pro uchycení kamery a přídavného osvětleni. Osvětlení bylo vyřešeno pomocí dvou paralelních větví po pěti sériově spojených LED diodách. Dvěma tranzistory bylo převedeno napájecí napětí 24V na zdroj konstantního proudu regulovatelného pomoci potenciometru. Horní hranice průchozího proudu byla nastavena na 60 mA. Schéma celého zapojení je na Figure 7.
Figure 7: Schéma zapojeni osvětlovacích LED diod Vytvořený přípravek je potom na Figure 8 a Figure 9.
Figure 8: Horní strana přípravku 10
Figure 9: Dolní strana přípravku
11
4. Příklady detekce na rozmanitých površích
12
5. Závěr V rámci tohoto projektu byla vytvořena aplikace pro detekci pozice pásky v obraze pořízeným digitální kamerou. Systém bude v budoucnu sloužit jako součást navigačního systému robota, proto bylo pro správnou funkci detekce potřeba zajistit stabilní úroveň osvětleni. Toho bylo dosaženo vytvořením zastínění přípravku s kamerou a přidáním umělého osvětleni. Aplikace je schopna detekovat 3 rozdílné barevné pásky, čímž je zajištěna velká rozmanitost povrchů, na kterých je možné zařízení provozovat. Výsledek detekce pásky je v aplikaci reprezentován čarou procházející jejím středem. Poloha této čáry je popsána pomocí její kolmice procházející středem souřadnicového systému. Tato kolmice je popsaná délkou rho (její rozměry jsou v pixelech) a úhlem svírající s počátkem théta (v radiánech). Výstupní hodnota může být buďto okamžitá hodnota anebo střední hodnota vybraného počtu vzorků.
13
6. Použitá literatura Opencv: canny_detector [online]. [cit. 2015-05-11]. Dostupné z:
http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.html Opencv: Morphological Transformations [online]. [cit. 2015-05-11]. Dostupné z:
http://docs.opencv.org/doc/tutorials/imgproc/opening_closing_hats/opening_closing_hats.htm l Opencv: hough_lines [online]. [cit. 2015-05-11]. Dostupné z:
http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html Learning openCV: computer vision in C++ with the OpenCV library. ISBN 9781449314651.
14