VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY SEMESTRÁLNÍ PRÁCE - ROBOTIKA M05 Registrace snímků z RGB kamer AUTOŘI PRÁCE FILIP BAÁŠ MARTIN TILGNER LUKÁŠ REJCHLÍK VEDOUCÍ PRÁCE ING. ADAM LIGOCKI BRNO 2018
ZADÁNÍ Proveďte rešerší dostupných state-of-art řešení pro registraci RGB snímků a tvorbu panoramat. Na dodaných fotografiích otestujte funkčnost metody a předveďte spojení několika fotografií do panoramatu.
Obsah 1 Úvod... 6 2 Metody použivané pro tvorbu panoramat... 7 2.1 SIFT Scale invariant features transform... 7 2.2 SURF Speeded-Up Robust Features... 8 2.3 RANSAC Random Sample Consensus... 9 3 Kalibrace kamery... 10 4 Programová část... 12 4.1 Použité prostředky... 12 4.1.1 Microsoft Visual Studio... 12 4.1.2 Knihovna OpenCV... 12 4.1.3 Framework Qt... 12 4.2 Koncept programu... 13 4.3 Popis algoritmu... 13 4.4 Grafické uživatelské rozhraní... 14 5 Výsledky programu... 16 5.1 Operační náročnost algoritmu... 16 5.2 Limity algoritmu v počtu deskriptorů... 17 5.3 Limity algoritmu v překrytí snímků... 18 5.4 Srovnání s Microsoft Image Composite Editor... 20 6 Závěr... 21 Bibliografie... 22 4
Seznam obrázků Obrázek 1 Kalibrační šachovnice... 11 Obrázek 2 Úvodní obrazovka programu... 14 Obrázek 3 Program po vytvoření panoramatického obrázku... 15 Obrázek 4 Záložka kalibrace... 15 Obrázek 5 Jednotlivé snímky... 17 Obrázek 6 Deskriptory... 18 Obrázek 7 Deskriptory... 18 Obrázek 8 Testovací scéna... 19 Obrázek 9 Překrytí scény... 19 5
1 ÚVOD S panoramatickými fotografiemi se dnes setkáváme téměř denně a většinou si to ani neuvědomujeme, ať už jde o širokoúhlé fotografie nebo o aplikace typu Google Streetview. Panoramatické fotografie jsou pro člověka velice přirozené, protože jsou velmi blízké tomu, jak člověk vnímá své okolí. Proto je tvorba panoramatických fotografií velmi žádaná. Panoramatický snímek můžeme v zásadě vytvořit několika způsoby. A to použitím speciálního panoramatického fotoaparátu, ořezem fotografie běžného formátu na formát panoramatický nebo pořízení více snímků scény po částech a následné složení těchto snímků v jeden panoramatický. Tato práce se bude zabývat automatizací poslední z vypsaných možností tedy automatickým skládáním více snímků jedné scény v jeden panoramatický snímek. Práce je rozdělena do dvou tematických celků. V první části jsou teoreticky popsány metody, používané pro tvorbu panoramatických fotografií. Druhá část se věnuje samotné tvorbě programu jak použitým prostředkům, tak samotnému algoritmu. 6
2 METODY POUŽIVANÉ PRO TVORBU PANORAMAT 2.1 SIFT Scale invariant features transform Metoda SIFT se používá pro detekci a popis lokálních příznaků obrazu. Mezi hlavní výhody této metody patří do značné míry nezávislost na měřítku a na rotaci porovnávaných snímků pořízených v různých úhlech a vzdálenostech od scény. SIFT algoritmus pracuje ve čtyřech fázích: 1. Detekce významných bodů ve scale-space, 2. Zpřesnění stability a lokalizace významných bodů, 3. Výpočet orientace těchto bodů, 4. Určení příznakového vektoru pro každý bod Nezávislosti na měřítku je dosáhnuto detekcí významných bodů ve scale-space. Velikost scale-space byla heuristicky určena na čtyři oktávy, kdy je snímek vždy podvzorkován, a na každou oktávu je vytvořeno pět snímků s Gaussovským vyhlazením. Poté autoři využili rozdílu dvou takto vyhlazených obrazů (DoG Difference of Gaussian), který je počítán v každé oktáv pro dva sousedící snímky. Následně jsou filtrovány lokální extrémy v diferenčních snímcích a porovnávány s jejich osmiokolím. Bod je určen jako významný, pokud je jeho hodnota menší než hodnota všech bodů z osmiokolí. V dalším bodu se vylučují body s nízkým kontrastem (šum) a filtrují se hrany, kde mohly být chybně lokalizovány extrémy vzledem k použití DoG. Pro tento účel se používá Hessovy matice (determinantu a stopy) a po vyfiltrování nevhodných bodů zůstávají body se subpixelovou přesností. Výpočet orientace bodů zajišťuje invarianci vůči rotaci snímku. Pro každý bod se vybere jedno, z námi již určených měřítek, a vypočítá se k němu velikost gradientu m(x,y) a jeho směr θ(x,y). [1] m(x, y) = (L(x + 1, y) L(x 1, y)) 2 + (L(x, y + 1) L(x, y 1)) 2 θ(x, y) = tan 1 ((L(x, y + 1) L(x, y 1))/(L(x + 1, y) L(x 1, y)) (1) (2) Z vypočítaných hodnot gradientů se vytvoří histogram o 36 intervalech (tedy po 10 ). Každý z přidaných gradientů je vážen Gaussovským oknem. O výsledné orientaci bodu pak rozhoduje interval s nejvyšší hodnotou. Pokud některé další hodnoty histogramu 7
dosahují nebo převyšují 80 % prvního maxima, jsou na stejné pozici vytvořeny další významné body. Následně se sestavuje SIFT deskriptor klíčového bodu. SIFT deskriptor se pro daný bod konstruuje s gradientu bodu v okolí daného klíčového bodu, v oktáve, ve které byl klíčový bod nalezen. Jak je ukázané na obrázku 2.12 vezme se 8x8 okolí klíčového bodu a toto okolí se rozdělí na čtyři samostatné 4x4 pod-okolí, v těchto pod-okolích je vypočten histogram o osmi binech (směrech), a ten je umístěn do pole 2x2. Toto je již výsledný deskriptor, který má velikost 2x2x8 = 32 hodnot. Univerzální a nejčastěji používaná varianta je brát 16x16 okolí, které je rozděleno na 4x4 pod-okolí, v podokolích histogramy o osmi binech a 4x4 velký výsledný deskriptor, tudíž 4x4x8 = 128 hodnot. 2.2 SURF Speeded-Up Robust Features Algoritmus SURF vychází do značné míry z předešlého. Hlavním důvodem jeho vzniku je vysoká výpočetní náročnost algoritmu SIFT. Je zde však též kladen důraz na dobrou výkonnost a schopnost pracovat v reálném čase. SURF se podobně jako SIFT sestavuje ze čtyř fází, které jsou velmi podobné jako v předešlé podkapitole. SURF využívá pro detekci významných bodů determinantu Hessovy matice namísto DoG. Pro rozmazání snímků jednotlivých oktáv se pro menší výpočetní náročnost využily diskreditované a aproximované Haarovy vlnky. H(x, σ) = ( L xx(x, σ) L xy (x, σ) L xy (x, σ) L yy (x, σ) ) (3) kde Lxx (x; σ) vyjadřuje konvoluci vstupního snímku s druhou derivací Gaussovy funkce v bodě x= (x; y), obdobně pro Lyy (x; σ) a Lxy (x; σ). Determinant Hessovy aproximované matice v SURFu vyjadřuje hodnotu jedné položky v Scale space. Při výpočtu, se pro urychlení, využívá integrální reprezentace obrazu. Integrální obraz je speciální reprezentace obrazu, kdy každý bod vyjadřuje součet všech předešlých bodu, které mají stejnou nebo menší x-ovou a y-novou souřadnici. To platí v případě, že souřadnicový systém obrazu má počátek v levém horním rohu. Výpočet integrálního obrazu je možné vypočítat v lineárním case. [diplomka tý holky] Výpočet orientace bodu je realizován pomocí výpočtu odezvy Harových vlnek v okolí daného bodu. Orientace je určena ve směru, kde je největší hustota odezev na Haarovy vlnky. Velikost okolí bodu a vlnky závisí na měřítku, ve kterém byl bod nalezen. Následně je ve směru orientace bodu provedeno oknování, které rozdělí oblast do 4x4 regionů. V každém z těchto regionů je spočítána odezva na Haarovy vlny v horizontálním i 8
vertikálním směru. Následně je v každém z regionů vypočítán čtyř prvkový vektor. Výsledný deskriptor tedy obsahuje 64 hodnot. 2.3 RANSAC Random Sample Consensus Je iterativní metoda, kdy jsou vstupní datové body rozděleny algoritmem do dvou skupin (outliers a inliers). Outliers jsou nekorespondující body a inliers jsou body nacházející se blízko k ideálnímu řešení. Algoritmus pracuje v pěti základních bodech: 1. Vybere se náhodný počet bodů, který musí být vyšší než stanovené minimum 2. Vyřeší se model s danými parametry 3. Určí se počet bodů splňujících dané kritérium s definovanou tolerancí 4. Pokud počet těchto inliers bodů překročí stanovenou hranici, použije se tento model a skončí se 5. Pokud počet inliers bodů nepřekročí stanovenou hranici, opakuj body 1-4 maximálně x-krát. 9
3 KALIBRACE KAMERY Vzhledem k nedokonalé technologii výroby kamer, je většina dnes používaných kamer zdrojem zkreslení obrazu. Mezi hlavní dvě deformace patří radiální zkreslení a tangenciální zkreslení. Díky radiálnímu zkreslení se přímé linie zobrazují jako zakřivené. Tento efekt je silnější na krajích fotografie než v jejím středu. [2] x zkres = x(1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) (4) y zkres = y(1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) (5) Obdobně se projevuje tangenciální zkreslení, k němuž dochází, protože obrazová čočka není zarovnána dokonale paralelně k zobrazovací rovině. Některé oblasti obrazu mohou vypadat blíž, než se očekávalo. x zkres = x + [2p 1 xy + p 2 (r 2 + 2x 2 )] (6) y zkres = y + [p 1 (r 2 + 2y 2 ) + 2p 2 xy] (7) Hledáme tedy pět parametrů - koeficienty zkreslení (distortion coefficients) distortioncoef = (k 1 k 2 p 1 p 2 k 3 ) (8) Dále musíme najít intrinsické a extrinsické parametry. Intrinsické parametry jsou specifické pro každou kameru. Jedná se o údaje jako ohnisková vzdálenost (fx, fy) a optická centra (cx,cy). Dohromady tvoří kamerovou matici. f x 0 c x cam = ( 0 f y c y ) 0 0 1 Extrinsické parametry odpovídají rotačním a překladovým vektorům, které překládají souřadnice 3D bodu do souřadného systému. U stereofonních aplikací je třeba tyto zkreslení nejprve opravit. Abychom zjistili všechny tyto parametry, musíme aplikaci poskytnout vzorové obrázky dobře definovaného vzoru (např. Šachovnice). Těchto obrázků by mělo být alespoň 10. Z těchto vzorů je vypočtena kalibrabrace kamery. (9) 10
Obrázek 1 Kalibrační šachovnice 11
4 PROGRAMOVÁ ČÁST 4.1 Použité prostředky Zde si v krátkosti popíšeme použitě prostředky pro tvorbu našeho programu. 4.1.1 Microsoft Visual Studio Microsoft Visual Studio je vývojové prostředí (IDE) od Microsoftu. Visual Studio podporuje jazyky prostřednictvím jazykových služeb, což umožňuje, aby editor kódu a debugger podporoval jakýkoliv programovací jazyk. Mezi vestavěné jazyky patří C/C++, VB.NET a C#. [3] Visual Studio nepodporuje žádný programovací jazyk nebo nástroj samo o sobě. Místo toho je mu možno přidat různá rozšíření funkčnosti. Každá funkčnost je zabalena do balíčku VSPackage. Když je nainstalována, je dostupná jako služba. IDE poskytuje tři služby: SVsSolution, která umožňuje očíslovat projekty a sestavy; SVsUIShell, který poskytuje rozdělování na okna a UI funkce (jako panely, nástrojové lišty a okna nástrojů); a SVsShell, který se stará o registraci balíčků VSPackage. IDE je také odpovědné za koordinaci služeb a umožnění komunikace mezi nimi. Všechny editory, designery, typy projektů a další nástroje jsou implementovány jako balíčky VSPackage. 4.1.2 Knihovna OpenCV OpenCV (Open Source Computer Vision Library) je open source knihovna pro počítačové vidění a strojové učení. OpenCV byla vytvořena tak, aby poskytovala společnou infrastrukturu pro aplikace počítačového vidění a urychlila používání vnímání stroje v komerčních produktech. [4] OpenCV je vydána pod licencí BSD, a proto je zdarma pro akademické i komerční využití. Má rozhraní C ++, Python a Java a podporuje operační systémy Windows, Linux, Mac OS, ios a Android. OpenCV byla navržena pro výpočetní efektivitu a se silným zaměřením na aplikace v reálném čase. 4.1.3 Framework Qt Qt je multiplatformní framework pro tvorbu GUI (grafické uživatelské rozhraní). Aplikace napsané pomocí toolkitu je možno distribuovat pod licencí GPL, LGPL, nebo po splnění určitých podmínek i komerčně. Qt je knihovna programovacího jazyka C++, ale existuje například i pro jazyky Python, C, Pascal, C#, Java. Podporuje lokalizaci aplikací a také SQL, zpracování XML, správu vláken, přístup k souborům, práci s grafikou a multimédii. Velkou výhodou Qt je velmi přehledně zpracovaná dokumentace a také vývojové programy Qt Creator nebo Qt Designer. Aplikace vytvořené pro grafické uživatelské prostředí používají nativní vzhled 12
operačního systému, takže vyvinuté aplikace se vždy přizpůsobí vzhledu používaného prostředí. [5] 4.2 Koncept programu Náš program jsme se rozhodli vytvořit tak, aby umožňoval použití v robotice, ale aby byl také použitelný pro běžného uživatele. Z tohoto důvodu jsme program koncipovali tak, aby umožnil běh v grafickém rozhraní, ale aby běžel i jako samotná konzolová aplikace. Defaultně se program spouští s GUI. Pomocí argumentu lze však při startu aplikace GUI zakázat, program pak běží jako konzolová aplikace a jednotlivé fotky a upřesňující volby je možné nastavit pouze jako argumenty aplikace při spuštění. 4.3 Popis algoritmu Program umožňuje běh ve dvou režimech. Prvním režimem je běh v uživatelském modu. Zde se zobrazuje GUI. Druhou možností je běh programu pouze jako konzolová aplikace. Tyto dva mody je možné nastavit pomocí parametru při spuštění aplikace. Pokud aplikace nedostane žádný parametr, spustí se defaultně v modu s GUI. Pokud aplikace dostane parametry, spustí se pouze jako konzolová aplikace. V této kapitole se budeme věnovat pouze aplikaci v konzolovém modu, běhu aplikace s GUI se budeme věnovat v kapitole 4.4 Grafické uživatelské rozhraní. Algoritmus pro skládání jednotlivých obrázku do jednoho obrázku panoramatického je však pro oba mody stejný. Nejprve je vyhodnocen počet argumentů. Pokud jsou zadány nějaké argumenty programu, program se spustí v příkazové řádce. Následně jsou pomoci funkce parsecmdargs vyhodnoceny jednotlivé argumenty programu. Možné argumenty jsou: --help, pro vypsání nápovědy --try_use_gpu, pro pokus o vypočet pomoci grafické karty místo CPU --d3, moznost pro rozdělení obrázku k zvýšení přesnosti --output <name>, pojmenování výsledného obrázku --mode <panorama/scans>, pro vyber modu panorama/scans Zbylé argumenty jsou považovány jako názvy obrázků pro tvorbu panorama Po načteni argumentu následuje kontrola, zda jsou argumenty validní. Následně jsou pomocí funkcí Stitcher::create a stitcher->stitch vytvoříme výsledné panorama. Funkce využívají algoritmu SURF. 13
4.4 Grafické uživatelské rozhraní Grafické uživatelské rozhraní je vytvořené pomocí frameworku QT5. Při návrhu jsme dbali na co nejintuitivnější ovládaní a přehlednost cele aplikace. První, co uživatel uvidí po zapnuti programu je základní obrazovka umožňující vytvoření panoramatu. V levém horním rohu je v souladu s většinou programu pro operační systém Windows umístěno základní menu, obsahující položky file a help. V položce file je možné vybrat soubory pro uložení panorama nebo již hotové panorama uložit. Pod položkou help se skrývá stručný návod k použiti a informace o autorech. Obrázek 2 Úvodní obrazovka programu Jako další je na úvodní obrazovce viditelné záložkové menu, obsahující záložky Panorama a Calibration. Záložka Panorama slouží pro tvorbu panoramat nebo scanu. Tato záložka je defaultně otevřena při spuštění programu. Záložka je dále rozdělena na dvě okna. V levém okně je možné pomoci prvku push button vybrat soubory pro vytvoření panorama (viz. Obr. 2). V pravém okně je možné panorama vytvořit pomoci tlačítka Stitch. Dále je zde možně vybrat dodatečné nataveni, jako použití GPU pro výpočty místo CPU, zvolit mód panorama nebo scans. Další možnou volbou je využití vytvořené kalibrační matice, nicméně algoritmus je schopen kalibrovat si obrázky sám. Největší část této záložky zabírá náhled na vytvořené panorama. 14
Obrázek 3 Program po vytvoření panoramatického obrázku V záložce Calibration probíhá vytvoření kalibrační matice pro spojovaní obrázku. Nejprve je nutné nahrát alespoň čtyři kalibrační šachovnice. Pote je nutné vyplnit skutečnou délku mřížky. Vyplnit počet sloupců a počet řádku. Pote lze vytvořit kalibrační matici, kterou lze využít pro vytvoření panorama. Obrázek 4 Záložka kalibrace 15
5 VÝSLEDKY PROGRAMU V následujících podkapitolách bude probráno zhodnocení programu a dosažených výsledků. 5.1 Operační náročnost algoritmu Prvním kritériem je určení času potřebného pro vykonání algoritmu v závislosti na velikosti vstupních dat. V našem případě je velikost vstupních dat dána počtem 15 Mpx fotografií o velikostech přibližně 3 MB. Měření probíhalo ve dvou úlohách. V první úloze algoritmus využíval pouze systémové prostředky bez GPU, ve druhé byla zapojena i GPU. Co se týče GPU, v grafu č. 1 jsou znázorněny hodnoty pouze pro integrovanou grafickou kartu, ne pro dedikovanou. Závislost lze proložit exponenciální křivkou a časovou složitost lze vyjádřit: O(f(1,911e 0,166N )) (10) 40 Časová závislost zpracování panoramatu na počtu snímků 30 t [s] 20 10 t_cpu [s] t_gpu [s] 0 2 4 6 8 10 12 14 16 18 Intel CORE i5, 8GB RAM, Intel HD Graphic 4400 Graf 1 Časová závislost panoramatu Počet porovnávaných deskriptorů obrazu, nalezených pomocí SURF algoritmu, vzrůstal s počtem fotografií od 17572 po 86507. Na většině fotografií bylo nalezeno průměrně 4500 významných bodů, krajní hodnoty nalezených bodů byly 2*10 3 a 10 4. N [-] 16
Fotografie použité k testování byly pořizovány uvnitř místnosti a jejich miniatury jsou zobrazeny na následujícím obrázku pro znázornění složitosti scény. Úhel rotace objektivu je 15. Obrázek 5 Jednotlivé snímky 5.2 Limity algoritmu v počtu deskriptorů Pro nalezení stavu, ve kterém algoritmus začíná selhávat, bylo využito znalosti o počtu významných bodů obrazu, respektive z nich vypočítaných deskriptorů v jednotlivých snímcích určených ke spojení. V jednoduché scéně, obsahující co nejméně rohů, byly vždy pořizovány dva snímky se změnou rotace objektivu o 30. Při přidání jednoduchých objektů do snímané scény se poté zvětšuje počet významných bodů v obraze a tím nalezení více korespondencí mezi významnými body nalezenými v jednotlivých snímcích. V prvním případě, bez vloženého objektu, algoritmus dle očekávání selhává právě v důsledku nenalezených korespondencí. Druhá situace je na obrázku č. 6. Do scény byl vložen jednoduchý objekt a počet společných deskriptorů v průniku snímků vzrostl z 33 na 150. V obou snímcích bylo nalezeno přibližně o 30 významných bodů více, ty si však neodpovídaly. Při tomto počtu společných deskriptorů algoritmus stále není schopen v dané scéně snímky spojit. 17
Obrázek 6 Deskriptory Ve třetím případě byl vyměněn původní objekt za objekt se složitějším tvarem. V oblastech průniku scény na jednotlivých snímcích je v tomto případě 300 a 380 významných bodů, přičemž si odpovídá 280 deskriptorů mezi snímky. Algoritmus při nalezení tohoto počtu deskriptorů již dokáže snímky spojit. Obrázek 7 Deskriptory Hledaná hranice se tedy nejspíše nachází přibližně v intervalu od 150 do 280 deskriptorů. Tato hranice se ale bude měnit v závislosti na složitosti scény a míry překrytí fotografií. Při složitější scéně lze nalézt více deskriptorů s větší vahou příznakových vektorů a přesto, že bude překrytí minimální a počet deskriptorů pod spodní hranicí určeného intervalu, větší váhy příznakových vektorů zajistí více si korespondujících bodů a tím i spojení fotografií s minimálním překrytím. 5.3 Limity algoritmu v překrytí snímků Jak již bylo předesláno, schopnost spojení snímků závisí především na počtu nalezených deskriptorů, které si v jednotlivých snímcích odpovídají. V předešlé podkapitole byla pozornost věnována pouze jednoduché scéně s konstantním pootočením objektivu. 18
V případě vybrání obecné scény exteriéru může být potřebné překrytí snímků pro spojení mnohem menší právě v souvislosti s nalezením více významných bodů v obraze. Pro experimentální zjištění potřebného procentuálního překrytí dvou snímků v případě horizontální rotace objektivu byla úmyslně vybrána scéna s velkým zastoupením deskriptorů ve vertikální ose. Pokud by byly nalezené významné body soustředěné pouze v jednom místě, pravděpodobnost spojení by klesala. Scéna použitá k testování je na obrázku č. 8. Obrázek 8 Testovací scéna Právě z vybraných fotografií na zmíněném obrázku bylo experimentálně zjištěné nejmenší procentuální překrytí přibližně 13 % pro danou scénu. Pro orientaci o výskytu vypočítaných deskriptorů v překrývajících se oblastech je přidán obrázek č. 9. Obrázek 9 Překrytí scény 19
5.4 Srovnání s Microsoft Image Composite Editor V závěru byl algoritmus srovnán s programem Microsoft Image Composite Editor. Pro porovnání se opět změřila doba spojování snímků na stejné datové sadě, avšak výsledky jsou pouze orientační z důvodu omezených možností měření času spojování programu společnosti Microsoft. Ve vytvořeném projektu lze snadno implementovat časomíru, ale u Image Composite Editoru byl čas měřen pouze pomocí stopek. Čas potřebný pro spojení fotografií je v celém měřeném intervalu u programu Image Composite Editor vyšší, jak ukazuje graf č. 2. Vzhledem k průběhům křivek lze však očekávat, že pro větší datovou sadu (19 a více snímků) bude vytvořený program potřebovat více času než Image Composite Editor. 45 40 35 30 Porovnání časové závislosti zpracování panoramatu na počtu snímků s Microsoft ICE t [s] 25 20 15 10 5 0 t_cpu ICE 2 4 6 8 10 12 14 16 18 N [-] Graf 2 Porovnání časové závislosti zpracování panoramatu s Microsoft ICE 20
6 ZÁVĚR Tato práce se zabývala tvorbou panoramatických fotografií. V rámci práce byl vytvořen program pro tvorbu panoramatických snímků s využitím frameworků OpenCV a QT5 pro operační systém Windows. Celá práce je rozdělena do několika tematických celků. V první kapitole jsme seznámili s algoritmy pro tvorbu panoramatických snímků, tedy s algoritmy SIFT, SURF a RANSAC. V druhé kapitole jsme se zaměřili na proces kalibrace kamery a vytvoření kalibrační matice. Třetí kapitola je zaměřena na tvorbu programu. Jedná se o základní myšlenku, stručný algoritmus našeho vytvořeného programu a návrh GUI. V poslední řadě je zde popis ovládání jak konzolové aplikace, tak aplikace běžící v grafickém rozhraní. Poslední kapitola se věnuje zhodnocení výsledků programu. Je zde popsána časová složitost námi vytvořeného programu, která byla aproximována jako O(f(1,911e 0,166N )). Dále jsou zde popsány významné body pro spojování snímků deskriptory. Z námi získaných dat vyplývá, že je průměrně potřeba alespoň 13 % překrytí snímků. V poslední řadě zde proběho porovnání s komerčním řešením Microsoft ICE. Zjistili jsme, že náš program je pro menší počty snímků (pro maximálně 18 snímků) rychlejší, od 19 snímků a více je rychlejší program ICE. Úspěšně jsme vytvořili program na tvorbu panoramatických snímků, který jsme posléze otestovali a porovnali s komerčním řešením. Zadání tedy bylo splněno. 21
BIBLIOGRAFIE [1] LOWE, David G. Distinctive Image Features from Scale-Invariant Keypoints. 2004,, 28. [2] What Is Camera Calibration?. Mathworks [online]. 2018 [cit. 2018-05-03]. Dostupné z: https://www.mathworks.com/help/vision/ug/camera-calibration.html [3] Microsoft Visual Studio. In: Wikipedia: the free encyclopedia [online]. San Francisco (CA): Wikimedia Foundation, 2001- [cit. 2018-05-03]. Dostupné z: https://cs.wikipedia.org/wiki/microsoft_visual_studio [4] OpenCV. OpenCV [online]. 2018 [cit. 2018-05-03]. Dostupné z: https://opencv.org/about.html [5] Qt. Qt [online]. 2018 [cit. 2018-05-03]. Dostupné z: https://www.qt.io/ 22
Seznam příloh Příloha A Příloha B Příloha C Zabalený program Zdrojový kód programu Vytvořené panoramatické snímky a testovací soubory 23