• Nebyly nalezeny žádné výsledky

Mobilníaplikaceprovylepšenífotografiídokument˚u }w  !"#$%&'()+,-./012345<yA|

N/A
N/A
Protected

Academic year: 2022

Podíl "Mobilníaplikaceprovylepšenífotografiídokument˚u }w  !"#$%&'()+,-./012345<yA|"

Copied!
43
0
0

Načítání.... (zobrazit plný text nyní)

Fulltext

(1)

MASARYKOVA UNIVERZITA

FAKULTA INFORMATIKY

}w !"#$%&'()+,-./012345<yA|

Mobilní aplikace pro vylepšení fotografií dokument ˚u

BAKALÁ ˇRSKÁ PRÁCE

Martin Mouˇcka

Brno, jaro 2015

(2)

Prohlašuji, že tato bakaláˇrská práce je mým p ˚uvodním autorským dílem, které jsem vypracoval samostatnˇe. Všechny zdroje, prameny a literaturu, které jsem pˇri vypracování používal nebo z nich ˇcerpal, v práci ˇrádnˇe cituji s uvedením úplného odkazu na pˇríslušný zdroj.

Martin Mouˇcka

Vedoucí práce: RNDr. Vladimír Ulman, Ph.D.

(3)

Dˇekuji RNDr. Vladimíru Ulmanovi, Ph.D. za ˇcas, nápady a rady.

(4)

Cílem bakaláˇrské práce bylo vytvoˇrit mobilní aplikaci zamˇeˇrenou na vylepšení fotografií dokument ˚u. Na základˇe porovnání a vy- brání vhodných metod byl navržen postup pro automatickou detekci okraj ˚u dokument ˚u na fotografii, byly vybrány vhodné metody a pa- rametry pro potlaˇcení šumu a doostˇrení snímk ˚u, které typicky obsa- hují textovou informaci. Tyto metody byly využity pˇri tvorbˇe apli- kace pro platformu iOS. Aplikace využívá zejména Cannyho hra- nový detektor, Houghovu pˇrímkovou transformaci, bilaterální filtr a filtrneostrá maska.

(5)

detekce ˇctyˇrúhelníku, vylepšení fotografie dokumentu, Houghova transformace, Cannyho hranový detektor, bilaterální filtr, neostrá maska, iOS, OpenCV

(6)

1 Úvod . . . 1

2 Metody zpracování obrazu . . . 3

2.1 Konvoluce . . . 3

2.2 Metody potlaˇcení šumu . . . 3

2.2.1 Pr ˚umˇerování více fotografií . . . 4

2.2.2 Pr ˚umˇerový filtr . . . 4

2.2.3 Gauss ˚uv filtr . . . 4

2.2.4 Mediánový filtr . . . 6

2.2.5 Bilaterální filtr . . . 6

2.3 Segmentaˇcní metody . . . 8

2.3.1 Globální prahování . . . 8

2.3.2 Lokální prahování . . . 10

2.3.3 Detekce hran pomocí první derivace . . . 11

2.3.4 Detekce hran pomocí druhé derivace . . . 12

2.3.5 Cannyho hranový detektor . . . 13

2.4 Doostˇrovací metody . . . 15

2.4.1 Doostˇrení pomocí druhé derivace . . . 16

2.4.2 Neostrá maska . . . 16

2.5 Houghova transformace . . . 18

3 Implementace . . . 22

3.1 iOS . . . 22

3.2 OpenCV . . . 23

3.3 Získání fotografie . . . 23

3.4 Pˇredzpracování obrazu . . . 23

3.5 Získání hran . . . 24

3.6 Aplikace Houghovy transformace . . . 26

3.7 Nalezení roh ˚u . . . 27

3.8 Transformace konvexního ˇctyˇrúhelníku na obdélník . . 29

3.9 Potlaˇcení šumu . . . 30

3.10 Doostˇrení . . . 30

3.11 Uživatelské rozhraní aplikace . . . 32

4 Závˇer . . . 34

4.1 Možnosti budoucího vývoje . . . 34

A Elektronické pˇrílohy . . . 37

(7)

Mobilní telefony již mnoho let neslouží pouze ke komunikaci dvou vzdálených osob, ale s rostoucí oblibou chytrých mobilních zaˇrízení se zvyšuje spoleˇcnˇe s výkonem i možnost jejich využití. Uživatelé tak mají stále u sebe malý pˇrenosný poˇcítaˇc, který mohou používat k pˇrístupu na Internet, zábavˇe, práci a uchovávání informací. V nˇe- kterých pˇrípadech je využití mobilního zaˇrízení z d ˚uvodu neustálé dostupnosti a vysoké funkcionality efektivnˇejší a pohodlnˇejší, proto mu dá ˇrada uživatel ˚u pˇrednost pˇred použitím stolního poˇcítaˇce ˇci notebooku. V kontrastu s rozšiˇrujícím se polem p ˚usobnosti poˇcítaˇc ˚u a mobilních telefon ˚u z ˚ustává stále jedním z nejoblíbenˇejších médií pro pˇrenos a uchování informací papír [1, 2]. Dennˇe se lidé setkávají s informacemi vytištˇenými na papíˇre, jsou na nˇem tištˇeny smlouvy, plakáty, zadání zkoušek, knihy, noviny a mnoho dalšího. V pˇrípadˇe, že chceme taková data uložit v digitální formˇe a nemáme po ruce skener, je možným ˇrešením informaci vyfotit mobilním telefonem.

Takto poˇrízená fotografie ale vˇetšinou není ideální a je žádoucí ji ná- slednˇe upravit, aby byl obrázek lépe ˇcitelný a bližší originálu na pa- píru.

Cílem této bakaláˇrské práce bylo vyvinout pro nˇekterou z bˇež- ných mobilních platforem aplikaci, která uživatel ˚um zjednoduší sní- mání textových a obrazových dat a jejíž výstupy budou lépe ˇcitelné a opticky bližší originálu, než výsledky získané prostým použitím fotoaparátu mobilního telefonu bez následných úprav fotografie.

Jako platformu, pro vývin aplikace, jsem zvolil Apple iOS (dále jen iOS). Aplikaci jsem vyvinul v prostˇredí Xcode, které je standard- ním nástrojem pro tvorbu aplikací, jež jsou urˇceny pro mobilní ope- raˇcní systém iOS [3]. Pˇri tvorbˇe aplikace byly použity dva jazyky – Objective-C a C++. Jelikož v jazyce Objective-C jsou napsány tˇrídy nativního uživatelského rozhraní operaˇcního systému iOS, byl tento jazyk použit právˇe pro tvorbu uživatelského rozhraní. Jazyk C++ byl v aplikaci použit pro samotnou práci s fotografií. Pro práci s obrazo- vými daty byla použita knihovna OpenCV (Open Source Computer Vision Library), která je napsána v jazycích C a C++ a poskytuje po- tˇrebné nástroje pro práci s rastrovými obrazy [4, 5, 6].

(8)

Prvním problémem, který je pˇri zpracovávání vyfoceného doku- mentu potˇreba vyˇrešit, je geometrické zkreslení. Je velmi obtížné, až prakticky nemožné vyfotit list papíru tak, aby jeho rohy byly pˇresnˇe v rozích fotografie. Proto je potˇreba, aby aplikace ve fotografii na- šla okraje dokumentu a následnˇe ji oˇrízla a narovnala tak, aby okraje dokumentu lícovaly s okraji fotografie.

Problémem, který se vyskytuje i u profesionálních fotoaparát ˚u, je šum. Ten je výraznˇejší u fotoaparát ˚u zabudovaných do mobilních telefon ˚u, zejména pokud fotografujeme pˇri nízké hladinˇe osvˇetlení.

Šumu se nelze zcela zbavit, ale je vhodné jej alespo ˇn ˇcásteˇcnˇe potlaˇcit.

Je také vhodné fotografii doostˇrit, aby byl text v ní obsažený lépe ˇcitelný.

V druhé kapitole popisuji metody zpracování digitálního obrazu [7, 8, 9], které se dají použít k potlaˇcení šumu, segmentaci obrazu a doostˇrení obrazu. Také popisuji Houghovu transformaci [10], která lze použít k detekci pˇrímek v obraze.

Ve tˇretí kapitole se vˇenuji porovnání a výbˇeru vhodných metod a implementaci mobilní aplikace.

V závˇereˇcné kapitole zmi ˇnuji možnosti rozšíˇrení a budoucího vý- voje vytvoˇrené aplikace.

(9)

2.1 Konvoluce

Jendou z nejd ˚uležitˇejších operací, která se používá v oblasti zpraco- vání digitálního obrazu, je konvoluce. Na jejím základˇe stojí mnohé filtry, které slouží k vyhlazování, doostˇrování ˇci detekci hran v ob- raze. Nˇekteré z nich jsou uvedeny v této práci a pro jejich lepší po- chopení pˇredstavím nejprve princip konvoluce.

Konvoluce je operátor (znaˇcíme⊗) nad dvˇema funkcemi. Jelikož fotografie typicky bývá dvoudimenzionální, v pˇrípadˇe zpracování digitálního obrazu se obvykle jedná o diskrétní funkce dvou pro- mˇenných.

2D diskrétní konvoluci definujeme:

I(x,y)⊗F(x,y) = I0(x,y) =

m i=−m

n j=−n

I(x−i,y−j)·F(i,j).

Funkce I je vstupní obraz, funkce I0 je výsledný obraz a funkci F nazýváme konvoluˇcní jádro. Hodnota výsledného obrazu v da- ném bodˇe je získána jako vážený souˇcet hodnot vstupního obrazu v okolí tohoto bodu. Velikost okolí je dána velikostí konvoluˇcního jádra, které zárove ˇn udává váhy, kterými se násobí hodnoty odpo- vídajících bod ˚u. Váhy a velikost konvoluˇcního jádra volíme podle toho, jakého výsledku chceme dosáhnout.

2.2 Metody potlaˇcení šumu

Šum je problém, který postihuje obrazy získané snímacím zaˇrízením, jako je fotoaparát. Ve fotoaparátech mobilních telefon ˚u se obvykle nachází velmi malý snímaˇc, který produkuje, zejména pˇri nízké hla- dinˇe osvˇetlení, výrazný šum. Šum je žádoucí alespo ˇn ˇcásteˇcnˇe potla- ˇcit. Nejen proto, aby fotografie vypadala lépe, ale také kv ˚uli snazší detekci objekt ˚u na fotografii.

(10)

2.2.1 Pr ˚umˇerování více fotografií

Šum zp ˚usobený snímaˇcem fotoaparátu se ve fotografiích vyskytuje náhodnˇe. Z toho d ˚uvodu je vhodná metoda pro odstranˇení šumu vy- fotografování více snímk ˚u téže scényI1, . . . ,Ina následné vypoˇcítání pr ˚umˇeru hodnot pixel ˚u v jednom místˇe:

I(x,y) = 1 n

n i=1

Ii(x,y)

Tato metoda vyžaduje, aby scéna byla statická a aby se fotoaparát mezi expozicemi nepohyboval.

2.2.2 Pr ˚umˇerový filtr

Po aplikaci pr ˚umˇerového filtru je hodnota pixelu výsledného ob- razu dána pr ˚umˇerem hodnot tohoto pixelu a pixel ˚u v jeho okolí. Pro okolí 3×3 lze pr ˚umˇerový filtr aplikovat pomocí konvoluce s jádrem zobrazeným na obrázku 2.1. Pˇríklad aplikace pr ˚umˇerového filtru je na obrázku 2.2.

1 9·

1 1 1 1 1 1 1 1 1

Obrázek 2.1:Pˇríklad pr ˚umˇerového filtru o velikosti 3×3.

2.2.3 Gauss ˚uv filtr

Aplikací Gaussova filtru poˇcítáme vážený pr ˚umˇer hodnot pixel ˚u v daném okolí pixelu. Vyšší váhy jsou dány pixel ˚um blízko referenˇc- ního pixelu a s rostoucí vzdáleností od nˇej tyto váhy klesají. Váhy jsou urˇceny Gaussovou funkcí G:

G(x,y) = 1

2πσ2 ·ex

2+y2 2 .

Promˇennéx,yudávají vzdálenost od poˇcátku a parametrσudává rychlost klesání funkce s rostoucí vzdáleností od poˇcátku. Pro malé

(11)

(a) (b)

Obrázek 2.2: (a) Pˇríkad vstupního obrazu o rozmˇerech 735×980 pixel ˚u, (b) výsledný obraz po aplikaci pr ˚umˇero- vého filtru o rozmˇerech 7×7.

σbudou mít vzdálené body malé váhy a naopak. Gauss ˚uv filtr se pro parametr σ = 1 m ˚uže aproximovat konvoluˇcním jádrem o velikosti 5×5, viz obrázek 2.3.

1 273·

1 4 7 4 1

4 16 26 16 4 7 26 41 26 7 4 16 26 16 4

1 4 7 4 1

Obrázek 2.3:Gauss ˚uv filtr o velikosti 5×5,σ=1.

(12)

(a) (b) (c) Obrázek 2.4: Aplikace Gaussova filtru na obraz 2.2a. (a) Rozmˇery 19×19, σ = 3, (b) rozmˇery 31×31, σ = 5, (c) roz- mˇery 45×45, σ = 7. Je vidˇet, že s rostoucím parametrem σ se zvyšuje rozmazání obrazu.

Cím vyšší je rozmazání obrazu, tím více je potlaˇcen šum, avšakˇ z obrázk ˚u 2.2 a 2.4 je vidˇet, že pr ˚umˇerový a Gauss ˚uv filtr znaˇcnˇe degradují informaci obsaženou v obraze.

2.2.4 Mediánový filtr

Mediánový filtr nahrazuje hodnotu pixelu mediánem hodnot pixel ˚u v jeho okolí. Pˇri aplikaci mediánového filtru se volí parametr urˇcující velikost okolí. Mediánový filtr ilustruje obrázek 2.5.

2.2.5 Bilaterální filtr

Bilaterální filtr [11] pˇri použití vhodných parametr ˚u vyhlazuje ob- raz a zárove ˇn zachovává hrany. Hodnotu pixelu nahrazuje neline- ární kombinací hodnot pixel ˚u v jeho okolí. Na rozdíl od Gaussova fil- tru, kde váhy závisí pouze na vzdálenosti od zpracovávaného pixelu, v pˇrípadˇe bilaterálního filtru závisí také na vzdálenosti jejich hodnot (rozdíl hodnot, podobnost barvy). Díky tomuto pˇrístupu je možno dát pixel ˚um, které se výraznˇe liší od referenˇcního pixelu, velmi ma- lou ˇci nulovou váhu a brát v potaz pouze pixely, které mají podobné

(13)

(a) (b)

Obrázek 2.5:Výˇrez zašumˇené fotografie obsahující roh pa- píru. (a) vstupní obraz, (b) obraz po aplikaci mediánového filtru s rozmˇery 5×5.

hodnoty. Když bereme pˇri zpracovávání v potaz pouze pixely po- dobné zpracovávanému pixelu, vyhlazujeme oblasti s podobnými hodnotami, díky ˇcemuž z ˚ustávají v obraze zachovány hrany, které oddˇelují oblasti s rozdílnými hodnotami. Bilaterální filtr má kromˇe velikosti další dva parametry:σsse stejným významem jako u Gaus- sova filtru aσc, který udává jak vzdálené mohou být hodnoty pixel ˚u od hodnoty referenˇcního pixelu, aby pˇri filtrování byly brány v po- taz.

Na obrázku 2.6 lze vidˇet, že bilaterální filtr velmi dobˇre potlaˇcuje šum v oblastech, kde se pˇríliš nemˇení barva a zárove ˇn zachovává hrany, takže text je ˇcitelný. Nevýhodou tohoto filtru je vysoká výpo- ˇcetní nároˇcnost.

(14)

(a) (b)

Obrázek 2.6:Výˇrez zašumˇené fotografie. (a) Vstupní obraz, (b) obraz po aplikaci bilaterálního filtru s rozmˇery 15×15 a parametryσs =7,σc =45.

2.3 Segmentaˇcní metody

Cílem segmentace je rozdˇelit obraz na oblasti s podobnými vlast- nostmi. V ideálním pˇrípadˇe by tyto oblasti mˇely odpovídat reál- ným objekt ˚um, které jsou na obraze zachyceny, a segmentace by mˇela usnadnit následnou automatickou analýzu a porozumˇení ob- razu. V našem pˇrípadˇe je cílem segmentace nalézt v obraze oblast, která odpovídá focenému papíru. V následujících podkapitolách po- píši nˇekteré techniky, které se používají k segmentaci obrazu.

2.3.1 Globální prahování

Nejstarší a nejjednodušší segmentaˇcní technikou je prahování [9].

Díky nízké výpoˇcetní nároˇcnosti a jednoduché implementaci se stále hojnˇe využívá. Zakládá se na pˇredpokladu, že jednotlivé objekty v obraze mají urˇcitý jas a jsou umístˇeny na pozadí s jasem odlišným (napˇr. svˇetlé objekty na tmavém pozadí). Prahování si klade za cíl oddˇelit objekty od pozadí následujícím postupem:

• Zvolíme práh T

(15)

• Na každý bod obrazu aplikujeme podmínku:

I0(x,y) =

(1, pokud I(x,y) ≥T 0, pokud I(x,y) <T

Pakliže je hodnota výsledného obrazu v bodˇe 1, pˇrísluší bod nˇeja- kému objektu v popˇredí, pokud je jeho hodnota nulová, patˇrí do po- zadí. Pro úspˇešnou segmentaci pomocí prahování je velmi d ˚uležitá volba prahu. Globální prahování používá pro celý obraz jediný práh.

Ten m ˚uže být zvolen manuálnˇe, nebo vypoˇcítán na základˇe zpra- covávaného obrazu. Existuje množství metod, jak vypoˇcítat vhodný práh. Globální prahování ilustruje obrázek 2.7

(a) (b)

Obrázek 2.7:(a) Vstupní obraz, (b) obraz po aplikaci globál- ního prahování.

(16)

2.3.2 Lokální prahování

Z d ˚uvodu, že objekty a pozadí nebývají zcela rovnomˇernˇe osvˇetleny, nemají ve všech místech stejnou barvu apod., je v praxi ˇcasté, že pra- hování s konstantním prahem nevede k úspˇešné segmentaci obrazu.

Pˇri aplikaci lokálního prahování není práh stejný pro celý obraz, ale mˇení se v závislosti na poloze bodu v obraze. Tento pˇrístup pomáhá ˇrešit problém s nerovnomˇerným jasem objekt ˚u a pozadí.

Prvním pˇrístupem je rozdˇelení obrazu na více menších oblastí a následný výpoˇcet prahu a provedení prahování pro každou oblast zvlášt’. Je možné navíc prahy mezi stˇredy oblastí interpolovat a kaž- dému bodu pˇriˇradit vlastní práh. Tento pˇrístup ˇreší problém nerov- nomˇerného osvˇetlení, ale selže, pokud se v nˇekteré oblasti, na které je obraz rozdˇelen, nachází pouze pozadí ˇci popˇredí.

Další možností, jak lokální prahování provádˇet, je vypoˇcítat práh pro každý pixel obrazu na základˇe jeho okolí. Pˇri aplikaci tohoto pˇrí- stupu se práh ˇcasto poˇcítá jako lineární kombinace pr ˚umˇeru a stan- dardní odchylky hodnot z okolí pixelu. Na obrázku 2.8 je porovnání globálního a lokálního prahování.

(a) (b) (c)

Obrázek 2.8:Fotografie nerovnomˇernˇe osvˇetleného papíru.

(a) Vstupní obraz, (b) obraz po aplikaci globálního praho- vání, (c) obraz po aplikaci lokálního prahování.

(17)

2.3.3 Detekce hran pomocí první derivace

Na rozdíl od prahování, kde je cílem nalézt oblasti s podobnými vlastnostmi, pˇri detekci hran [12] se snažíme najít taková místa v ob- raze, kde se vlastnosti sousedních bod ˚u prudce mˇení.

Jeden z páru bod ˚u, mezi kterými se ostˇre mˇení intenzita obrazu, se nazývá hranový pixel. Hrana je potom množina hranových pixel ˚u, které spolu sousedí. Pˇri segmentaci založené na hledání hran se sna- žíme nalézt hranice objekt ˚u na základˇe pˇredpokladu, že jsou od sebe oddˇeleny výraznou zmˇenou jasu.

Základem pˇri detekci hran pomocí první derivace je vypoˇcítat gradient obrazu. Gradient obrazu v bodˇe je dvousložkový vektor udávající smˇer nejvyšší zmˇeny hodnot a velikost této zmˇeny. Gra- dient získáme spoˇcítáním parciálních derivací ve smˇeru os x a y ve všech bodech obrazu. Maxima, resp. minima první derivace jsou v místech, kde se v obraze vyskytuje nejvyšší nár ˚ust, resp. pokles intenzit. Jelikož není obraz spojitý, ale diskrétní, aproximujeme deri- vaci pomocí konvoluce s vhodnými konvoluˇcními jádry, viz obrázek 2.9.

-1 0 1 -1 0 1 -1 0 1

(a)

-1 -1 -1

0 0 0

1 1 1

(b)

Obrázek 2.9: Aproximace první derivace — (a) ve smˇeru osyx, (b) ve smˇeru osyy.

Tato konvoluˇcní jádra se nazývají Prewittové operátory. Derivaci lze aproximovat i pomocí jiných konvoluˇcních jader, napˇr. Sobel ˚uv, Roberts ˚uv nebo Scharr ˚uv operátor. Po konvoluci získáme dva ob- razy gx a gy - složky gradientu ve smˇeru osy x, resp. y. Výsledný obrazGs velikostí gradientu získáme:

G(x,y) =qg2x(x,y) +g2y(x,y).

(18)

Kv ˚uli nižší výpoˇcetní nároˇcnosti se pˇri implementaci ˇcasto používá jednodušší vzorec:

G(x,y) =|gx(x,y)|+|gy(x,y)|.

Z obrazu G, který obsahuje velikost gradientu, získáme hrany po- mocí prahování. To znamená, že nalezené hrany jsou v místech, kde je zmˇena jasu mezi sousedními pixely vˇetší, než daný práh. Hledání hran pomocí první derivace ilustruje obrázek 2.10.

(a) (b) (c)

Obrázek 2.10:(a) Vstupní obraz, (b) obraz G obsahující veli- kost gradientu, (c) výsledek prahování obrazu G.

2.3.4 Detekce hran pomocí druhé derivace

Maxima, resp. minima první derivace se nacházejí v místech nejvyšší zmˇeny hodnot. Druhá derivace je v tˇechto místech nulová, proto nej- prve spoˇcítáme druhou derivaci obrazu a v ní potom hledáme místa s nulovou hodnotou. Jelikož je obraz diskrétní, nemusí se v bodˇe, kde je druhá derivace nulová, skuteˇcnˇe nacházet nula. Proto apro- ximujeme druhou derivaci a body hrany hledáme v místech, kde se mˇení znaménko. Zárove ˇn nesmíme zapomenout, že druhá derivace je též nulová v místech, kde jsou hodnoty obrazu konstantní. Z toho d ˚uvodu se hrany nacházejí v místech, kde se nejen mˇení znaménko, ale zárove ˇn je zde gradient vyšší než zvolený práh.

(19)

Pro výpoˇcet druhé derivace obrazu se používá tzv. Laplace ˚uv operátor znaˇcený∇2:

2I =

2I

∂x2 +

2I

∂y2.

Aproximovat se dá Laplace ˚uv operátor konvolucí s jádrem uvede- ným na obrázku 2.11.

0 1 0

1 -4 1

0 1 0

Obrázek 2.11:Aproximace Laplaceova operátoru.

Nevýhodou druhé derivace je vyšší citlivost na šum v obraze.

K potlaˇcení šumu lze pˇred konvolucí s Laplaceovým operátorem vy- hladit obraz Gaussovým filtrem. Tyto dva operátory m ˚užeme zkom- binovat do jednoho, který se nazývá Laplacián Gaussiánu [13] a lze aproximovat napˇríklad konvoluˇcním jádrem podle obrázku 2.12.

Hledání hran pomocí Laplaciánu Gaussiánu ilustruje obrázek 2.13.

0 0 -1 0 0

0 -1 -2 -1 0 -1 -2 16 -2 -1

0 -1 -2 -1 0

0 0 -1 0 0

Obrázek 2.12:Aproximace Laplaciánu Gaussiánu.

2.3.5 Cannyho hranový detektor

Cannyho hranový detektor [14] je algoritmus navržený na základˇe analýzy problém ˚u pˇri detekci hran jinými hranovými dektektory. Pˇri jeho návrhu byla brána v potaz následující tˇri kritéria, která by mˇel optimální hranový detektor plnit:

(20)

(a) (b)

Obrázek 2.13: (a) Výsledek aplikace Laplaciánu Gaussiánu na obraz 2.10a — šedé oblasti jsou nulové, svˇetlé jsou kladné a tmavé jsou záporné. (b) Místa, kde se mˇení znaménko jsou bilá.

1. Nízká chybovost. Všechny hrany v obraze by mˇely být deteko- vány a zárove ˇn by nemˇely být hrany detekovány v místech, kde se ve skuteˇcnosti nenacházejí.

2. Správná lokalizace hran. Detekované hrany by mˇely být co nejblíže skuteˇcným hranám v obraze. Vzdálenost hranového bodu a stˇredu skuteˇcné hrany by mˇela být minimální.

3. Jediná hrana.Jedné skuteˇcné hranˇe by mˇela odpovídat jen jedna detekovaná hrana.

Základem pˇri návrhu Cannyho hranového detektoru bylo vyjád- ˇrit tato tˇri kritéria v matematické formˇe a pokusit se najít optimální ˇrešení. Pro jednorozmˇerný signál se ukázala první derivace Gaus- sovy funkce jako vhodná aproximace optimálního hranového de-

(21)

tektoru. Pro dvojrozmˇerný obraz byl odvozen algoritmus s tˇemito kroky:

1. Potlaˇcí se šum pomocí Gaussova filtru.

2. Vypoˇcítá se obraz G obsahující velikost gradientu a obraz α obsahující smˇer gradientu vyhlazeného obrazu.

3. Ztenˇcí se hrany pomocí potlaˇcení nemaxim — pro každý pixel (x,y)z obrazuαse provede následující:

• Smˇer gradientu α(x,y) zaokrouhlíme na 0°, 45°, -45°, nebo 90°.

• Pokud je hodnota pixeluG(x,y)menší než alespo ˇn jeden ze soused ˚u ve smˇeru zaokrouhleného gradientu v tomto bodˇe, potom se hodnota pixelu G(x,y) nahradí nulou.

V opaˇcném pˇrípadˇe se hodnota zachová.

4. Provede se hysterézní prahování obrazu G. V ˇcásti 2.3.3 bylo zmínˇeno získávání hran z gradientního obrazu pomocí praho- vání. Tento pˇrístup má následující nevýhody: pokud je práh zvolen pˇríliš nízko, ve výsledném obraze se objeví falešné hrany, které neodpovídají skuteˇcným hranám ve vstupním ob- raze. Pokud je na druhou stranu práh pˇríliš vysoký, dojde k odstranˇení nˇekterých hranových bod ˚u, které by mˇely být ve výsledném obraze zachovány. Tento problém ˇreší hyste- rézní prahování. Zvolí se nízký a vysoký práh TL, resp. TH

a po prahování s tˇemito prahy vzniknou dva obrazy EL, resp.

EH. Do výsledného obrazu s hranami patˇrí všechny hrany z obrazu EH a dále ty hrany z obrazu EL, které sousedí s hra- nami zEH.

Aplikaci Cannyho hranového detektoru s r ˚uznými parametry lze vidˇet na obrázku 2.14.

2.4 Doostˇrovací metody

Metody popsané v této ˇcásti nenapraví chybnˇe zaostˇrenou fotografii ˇci neodstraní rozmazání obrazu díky pohybu fotoaparátu pˇri expo- zici. Vytváˇrí pouze efekt ostˇrejšího obrazu zvýraznˇením hran tím, že

(22)

(a) (b) (c) Obrázek 2.14:Fotografie bílého papíru na bílém pozadí se špatnˇe viditelnými okraji. (a) Vstupní obraz, (b) výstup Can- nyho hranového detektoru s velikostí jádra pro výpoˇcet gra- dientu 5×5, nízký práhTL=3, vysoký práhTH =7, (c) vý- sledek Cannyho detektoru s velikostí jádra 5×5, TL = 7, TH =10.

tmavou ˇcást hrany ztmaví a svˇetlou ˇcást zesvˇetlí. Lidskému oku se potom obraz jeví jako ostˇrejší.

2.4.1 Doostˇrení pomocí druhé derivace

Druhá derivace obrazu je v konstantních místech nulová, ale v tˇes- ném okolí hran se prudce mˇení. Této skuteˇcnosti se dá využít pˇri zvýraznˇení hran v obraze. Pro výpoˇcet druhé derivace se stejnˇe jako pˇri detekci hran využívá Laplace ˚uv operátor. Obraz získaný aplikací Laplaceova operátoru se od p ˚uvodního obrazu odeˇcte, pˇrípadnˇe se k nˇemu pˇriˇcte. Zde je nutno brát v potaz použitou aproximaci Lapla- ceova operátoru. Pˇri použití aproximace z 2.11 obraz odeˇcítáme. Do- ostˇrení obrazu pomocí Laplaceova operátoru ilustruje obrázek 2.15.

2.4.2 Neostrá maska

Technikaneostrá maska, anglickyunsharp maskfunguje na podobném principu, kdy nejprve získáme obraz obsahující pouze místa, kde do-

(23)

(a) (b)

Obrázek 2.15: (a) Vstupní obraz, (b) obraz doostˇrený po- mocí Laplaceova operátoru.

chází k výrazným zmˇenám hodnot, a tento obraz následnˇe pˇriˇcteme k p ˚uvodnímu obrazu. Vstupní obraz se rozmaže Gaussovým filtrem.

Rozmazaný obraz se odeˇcte od vstupního obrazu, ˇcímž vznikne tzv.

maska, která, podobnˇe jako obraz po aplikaci Laplaceova operátoru, obsahuje pouze místa s výraznými zmˇenami hodnot. Maska se pˇri- ˇcte k p ˚uvodnímu obrazu v místech, kde je její absolutní hodnota vyšší než zvolený práh. Toto pˇrináší výhodu oproti doostˇrování po- mocí Laplaceova operátoru, nebot’ m ˚užeme obraz doostˇrovat pouze v místech obsahující výrazné hrany. Díky tomu se tolik nezvýraz ˇnuje šum v homogenních oblastech. K p ˚uvodnímu obrazu m ˚užeme pˇriˇcí- tat i násobky masky, ˇcímž se mˇení síla efektu doostˇrení. Pˇri aplikaci neostré masky volíme tˇri parametry:

1. σ- parametr Gaussova filtru (popsán v ˇcásti 2.2.3),

2. W - parametr udávající, kolikrát se maska pˇriˇcítá k obrazu, 3. T- práh udávající minimální absolutní hodnotu masky.

Aplikaceneostré maskyje vidˇet na obrázku 2.16.

(24)

(a) (b)

Obrázek 2.16:Doostˇrení obrazu 2.15a s parametry (a)σ =3, A=1,T=7, (b)σ=3,A=3,T=30.

2.5 Houghova transformace

Pomocí Houghovy transformace lze v obraze detekovat objekty tvar ˚u, které se dají vyjádˇrit rovnicí. Nejˇcastˇeji se Houghova trans- formace využívá pro detekci pˇrímek a kružnic, lze ale také použít k detekci jiných tvar ˚u, které se dají parametricky vyjádˇrit. Jelikož se v této práci zabývám zpracováním fotografií, které obsahují papír ˇci jiný podobný ˇctyˇrúhelníkový objekt charakterizován ˇctyˇrmi pˇrím- kami, popíši, jak lze za použití Houghovy transformace najít v ob- raze pˇrímky.

Normálová rovnice pˇrímky má tvar:

ρ= xcosθ+ysinθ.

Parametr θ je úhel v radiánech, který je sevˇrený osou x a normá- lou pˇrímky. Parametrρje vzdálenost pˇrímky od poˇcátku souˇradného systému. Pˇrímka s parametryθi,ρi v obrazovém prostoru odpovídá bodu(θi,ρi)v parametrickém prostoru, viz obrázek 2.17.

Bodem(xi,yi)prochází nekoneˇcné množství pˇrímek a tyto pˇrímky se zobrazí do parametrického prostoru jako množina bod ˚u tvoˇrící

(25)

θ ρ

x

y

(a)

θ

ρ

(b)

Obrázek 2.17:(a) Pˇrímka v obrazovém prostoru a (b) jí od- povídající bod v parametrickém prostoru.

kˇrivkuCvyjádˇrenou rovnicíρ =xicosθ+yisinθ. Bod v obrazovém prostoru tedy odpovídá kˇrivceCv parametrickém prostoru, viz ob- rázek 2.18.

x

y

(a)

ρ

θ

(b)

Obrázek 2.18: (a) Bod v obrazovém prostoru se znázor- nˇenými procházejícími pˇrímkami a (b) jemu odpovídající kˇrivka v parametrickém prostoru.

Obraz obsahuje informaci pouze o polohách bod ˚u, nikoli pˇrímek.

Houghovou transformací množiny všech bod ˚u v obraze vznikne

(26)

v parametrickém prostoru množina kˇrivek. Pokud podmnožina bod ˚u leží v obrazovém prostoru na jedné pˇrímce, jim odpovídající kˇrivky v parametrickém prostoru se protnou v jediném bodˇe se souˇradni- cemi(θi,ρi). Parametryθiaρipak udávají pˇrímku v obrazovém pro- storu, na které tato podmnožina bod ˚u leží.

Houghova transformace zobrazí body v obraze do množiny kˇri- vek v parametrickém prostoru. Tyto kˇrivky se mohou v r ˚uzných mís- tech vzájemnˇe protínat. Poˇcet kˇrivek, které procházejí pr ˚useˇcíkem (θi,ρi), odpovídá poˇctu bod ˚u ve vstupním obraze, které na pˇrímce dané rovnicí ρi = xcosθi+ysinθi skuteˇcnˇe leží, viz obrázek 2.19.

Cím vyšší je poˇcet kˇrivek procházejících pr ˚useˇcíkem, tím vyššíˇ je pravdˇepodobnost, že se ve vstupním obraze skuteˇcnˇe nachází pˇrímka s odpovídajícími parametry.

Po transformaci bod ˚u do parametrického prostoru se kˇrivky vy- kreslí do tzv. akumulátoru. Ten je zpoˇcátku ve všech bodech roven nule a pˇri vykreslování kˇrivky se každý bod, kudy kˇrivka prochází, inkrementuje o 1. V bodech, kde se protíná více kˇrivek má akumulá- tor hodnotu odpovídající poˇctu kˇrivek tímto bodem procházejícím.

Pˇrímky v p ˚uvodním obraze se získají hledáním lokálních maxim v akumulátoru ˇci jeho prahováním.

Výhodou Houghovy pˇrímkové transformace je, že se s její pomocí dají detekovat neúplné pˇrímky, které, napˇríklad díky nedokonalé de- tekci hran, obsahují díry.

(27)

x

y

(a)

θ

ρ

(b)

Obrázek 2.19:(a) Body v obrazovém prostoru ležící na jedné pˇrímce, (b) kˇrivky protínající se v bodˇe(θi,ρi), který odpo- vídá pˇrímce, na níž leží body v (a).

(28)

Cílem bakaláˇrské práce bylo implementovat aplikaci pro mobilní platformu. Pro testování aplikace a získání testovacích snímk ˚u jsem použil telefon Apple iPhone 4S s 8Mpx fotoaparátem, s 512 MB ope- raˇcní pamˇeti a dvoujádrovým procesorem o frekvenci 800 MHz. Pˇri vývoji aplikace bylo tˇreba brát ohled na výpoˇcetní výkon mobilního telefonu, který zdaleka nedosahuje výkonu bˇežných stolních poˇcí- taˇc ˚u a notebook ˚u.

Vyfotografoval jsem deset snímk ˚u s papírem na r ˚uzném pozadí pod r ˚uzným nasvˇetlením a na tyto snímky jsem zkoušel aplikovat metody popsané v pˇredchozí kapitole. Pˇred samotnou implementací mobilní aplikace byly metody testovány na stolním poˇcítaˇci za vyu- žití knihovny OpenCV a jazyka C++. Nˇekteré metody jsem vyzkou- šel v prostˇredí MATLAB.

Po vyzkoušení metod a nalezení vhodných parametr ˚u byla im- plementována mobilní aplikace pro platformu iOS, kde kód, který zpracovává obraz byl napsán v jazyce C++ s využitím knihovny OpenCV a ostatní kód v jazyce Objective-C.

3.1 iOS

iOS je mobilní operaˇcní systém od firmy Apple Inc., který se mimo jiné využívá v mobilních telefonech iPhone. K vývoji aplikací ur- ˇcených pro iOS se využívá vývojové prostˇredí Xcode [15]. Hlav- ním programovacím jazykem ve kterém se vyvíjí iOS aplikace je Objective-C a od ˇcervna 2014 také novˇe pˇredstavený jazyk Swift, který by mˇel v budoucnu Objective-C nahradit. Objective-C je ob- jektovˇe orientovaný jazyk, který poskytuje rozšíˇrení nad jazykem C.

Dá se jednoduše kombinovat s jazykem C++. Jeden zdrojový sou- bor m ˚uže zárove ˇn obsahovat kód obou jazyk ˚u a tato kombinace se oznaˇcuje jako Objective-C++.

(29)

3.2 OpenCV

Open Source Computer Vision Library (OpenCV) je knihovna s ote- vˇreným zdrojovým kódem zamˇeˇrená na zpracování obrazu, poˇcí- taˇcové vidˇení a strojové uˇcení. Zdrojový kód knihovny je napsán v jazycích C a C++ a je silnˇe optimalizován s ohledem na to, aby s pomocí OpenCV mohly být tvoˇreny aplikace zpracovávající obraz v reálném ˇcase. Knihovna obsahuje více než 2500 algoritm ˚u a po- skytuje rozhraní mimo jiné v jazycích C a C++. Do aplikace tvoˇrené pro platformu iOS se dá knihovna snadno integrovat pomocí tzv.

frameworku [16]. Knihovna OpenCV nabízí množství funkcí, které implementují metody popsané v pˇredchozí kapitole, proto jsem se rozhodl ji využít pˇri tvorbˇe aplikace, kterou v této kapitole budu po- pisovat.

3.3 Získání fotografie

P ˚uvodním zámˇerem bylo získat více fotografií jedné scény, které by byly vyfotografovány velmi rychle po sobˇe a následnˇe zpr ˚umˇero- vány s cílem potlaˇcení šumu. S využitím tˇrídy UIImagePickerCon- troller [17] i s využitím frameworku AV Foundation [18] byla mi- nimální dosažená prodleva mezi jednotlivými expozicemi zhruba

1/3 sekundy. Vyfotografování tˇrí snímk ˚u zabralo zhruba sekundu, díky ˇcemuž byl ve fotografiích znát pohyb a jejich obsah byl vzá- jemnˇe posunutý. Z toho d ˚uvodu se v implementované aplikaci fo- tografuje pouze jeden snímek a na potlaˇcení šumu je použita jiná metoda.

3.4 Pˇredzpracování obrazu

Získaná fotografie má rozmˇery 3264×2448 px. Pro úˇcel nalezení hran, které odpovídají okraj ˚um fotografovaného papíru, není tˇreba, aby mˇel obraz tak velké rozmˇery, jelikož hrany jsou dobˇre viditelné i po nˇekolikanásobném zmenšení. S ohledem na výpoˇcetní a pamˇe- t’ovou nároˇcnost je vhodné vstupní obraz zmenšit a hledat okraje papíru v obraze s menšími rozmˇery.

(30)

Pˇred samotným zmenšením je obraz pˇreveden na šedotónní po- mocí funkcecv::cvtColor(...), která z trojkanálového obrazu vy- tvoˇrí jednokanálový v pomˇeru 0, 299·R+0, 587·G+0, 114·B, kde Rje ˇcervený,Gzelený a Bmodrý kanál.

Dále je pˇred zmenšením potlaˇcen šum. Cílem bylo minimalizovat poˇcet detekovaných hran v místech, kde se hrany ve skuteˇcnosti ne- nacházejí. Tyto falešnˇe detekované hrany vznikají díky pixel ˚um, ve kterých je výrazný šum. Po porovnání technik z ˇcásti 2.2 jsem pro tento pˇrípad zvolil mediánový filtr, po jehož aplikaci výstup hra- nového detektoru obsahoval více opravdových hran a ménˇe faleš- ných hran než po aplikaci pr ˚umˇerového nebo Gaussova filtru. V po- rovnání s bilaterálním filtrem byl mediánový filtr podobnˇe úspˇešný.

Kv ˚uli nižší výpoˇcetní nároˇcnosti jsem zvolil mediánový filtr, který efektivnˇe potlaˇcil šum v pixelech, jejichž hodnota se výraznˇe lišila od soused ˚u, a zárove ˇn zachoval skuteˇcné hrany dostateˇcnˇe viditelné.

Byla využita funkcecv::medianBlur(...)s jádrem o velikosti 3×3.

Obraz byl zmenšen tak, aby jeho delší strana mˇela 544 px. Pro fo- tografie získané fotoaparátem telefonu to znamená, že oba rozmˇery jsou šestkrát zmenšeny a výsledek je velký 544×408 px. Pˇri zmen- šení je využita lineární interpolace.

3.5 Získání hran

Pro detekci okraj ˚u papíru se prahování ukázalo jako nevhodné.

Na fotografiích, kde mˇel papír barvu pˇríliš blízkou pozadí jsem po- mocí prahování nedokázal najít všechny ˇctyˇri strany papíru, viz ob- rázek 3.1.

Jako nejvhodnˇejší ˇrešení jsem zvolil Cannyho hranový detektor, jehož výstup (hranová mapa) obsahoval nejvíce bod ˚u odpovídajících skuteˇcným hranám a nejménˇe falešných hran, které byly detekovány vlivem šumu. Cannyho hranový detektor ilustruje obrázek 2.14.

Parametry jsem zvolil tak, aby hranová mapa všech testovaných obraz ˚u obsahovala hrany odpovídající okraj ˚um fotografovaného do- kumentu. Velikost jádra Cannyho hranového detektoru jsem zvolil 5, dolní práh pro funkcicv::Canny(...) je 200 a horní práh 355. Tyto

(31)

(a) (b) (c) Obrázek 3.1:(a) Fotografie bílého papíru na bílém pozadí, (b) výsledek globálního prahování, (c) výsledek lokálního prahování. Výstup Cannyho detektoru na stejném vstupním obraze je vidˇet na obrázku 2.14.

prahy odpovídají1 parametr ˚umTL ≈ 4, TH ≈ 7. Díky obraz ˚um, na kterých je hranice mezi papírem a pozadím tˇežko viditelná, jsem mu- sel parametry TL a TH zvolit pomˇernˇe nízko, díky ˇcemuž hranové mapy ostatních obraz ˚u obsahovaly velké množství falešných hran.

Z hranové mapy jsem pomocí funkcícv::findContours(...)adra- wContours(...)odstranil všechny hrany obsahující ménˇe než 40 pi- xel ˚u a aplikoval jsem dilataci se ˇctvercovým strukturním elementem se stranou 9 px. Dilatace spojila malé falešné hrany do vˇetších bílých oblastí a rozšíˇrila skuteˇcné hrany. Aby se hranám vrátila p ˚uvodní 1px šíˇrka, po dilataci následuje eroze se stejným strukturním elementem.

V místech, kde byla vˇetší koncentrace falešných hran z ˚ustaly po erozi bílé oblasti. Proto jsem do výsledného hranového obrazu vykreslil pouze hranice bílých objekt ˚u a opˇet jsem odstranil hrany obsahující ménˇe než 40 pixel ˚u. Celý postup je na pˇríkladu vidˇet na obrázku 3.2.

1. Použitá funkce poˇcítá gradient obrazu pomocí nenormovaných konvoluˇcních jader. Souˇcty jejich prvk ˚u pˇri velikosti 5×5 jsou 48.

(32)

(a) (b) (c)

(d) (e) (f)

Obrázek 3.2:(a) Vstupní obraz — zmenšená šedotónní fo- tografie, na kterou byl aplikován mediánový filtr, (b) výstup Cannyho detektoru, (c) hranová mapa po odstranˇení malých hran, (d) výsledek dilatace, (e) výsledek eroze, (f) vykreslené hranice objekt ˚u z (e) bez malých hran.

3.6 Aplikace Houghovy transformace

Pro hledání pˇrímek v obraze, získaném postupem popsaným v pˇred- chozích dvou ˇcástech, jsem použil Houghovu transformaci, imple- mentovanou funkcí cv::HoughLines(...), jejímž výstupem je pole dvojic (ρ,θ). Jedním z parametr ˚u této funkce je práh T, který je po- užit pˇri získávání parametr ˚u pˇrímek z akumulátoru pomocí praho- vání. Nevýhodou tohoto pˇrístupu oproti hledání lokálních maxim v akumulátoru je, že je tˇreba zvolit nízký práh, aby funkce vrátila všechny kýžené pˇrímky. Pˇri nízkém prahu ale funkce vrátí i množ- ství pˇrímek v okolí pˇrímek, které nás zajímají. Je proto tˇreba vrácené pˇrímky profiltrovat.

Vycházel jsem z pˇredpokladu, že uživatel bude papír fotografo- vat tak, aby nebyl pˇríliš natoˇcen. Proto jsem z pole pˇrímek odstranil

(33)

všechny pˇrímky, jejichž parametrθbyl v intervalu(π4π8;π4 +π8)∪ (4π8;4 + π8).

V poli, které vrací funkce cv::HoughLines(...) je poˇradí dáno poˇctem bod ˚u, které na dané pˇrímce ve vstupním obraze leží. Pˇrímka, na které leží nejvíce bod ˚u, je v poli první.

Pro dvˇe pˇrímky l1,l2 jsem definoval kritérium blízkosti. Body, ve kterých pˇrímkal1protíná hranice obrazu nazvemeL11aL12, body, ve kterých pˇrímkal2protíná hranice obrazu nazvemeL21 aL22. Dvˇe pˇrímky jsou blízké, pokud jsou splnˇeny tyto podmínky:

• pˇrímky se v obraze protínají,

• (kL11−L21k <k∧ kL12−L22k<k)∨

∨(kL11−L22k <k∧ kL12−L21k <k),

kdek je konstanta urˇcující, jak nejvíce od sebe mohou být vzdáleny body dvou pˇrímek, ve kterých se tyto pˇrímky protínají s hranicí ob- razu. Konstantukjsem pro obraz s delší stranou o 544 pixelech expe- rimentálnˇe urˇcil na√

300. Všechny vzájemnˇe blízké pˇrímky odpoví- dají jedné skuteˇcné pˇrímce v hranové mapˇe. Z množiny vzájemnˇe blízkých pˇrímek jsem vybral pouze tu, na které leželo v hranové mapˇe nejvíce bod ˚u.

Pole pˇrímek jsem filtroval tímto postupem:

• Vytvoˇril jsem nové prázdné pole vyfiltrovaných pˇrímek.

• Procházel jsem všechny pˇrímkyli v poli pˇrímek.

Pokud v poli vyfiltrovaných pˇrímek nebyla uložena pˇrímka blízká pˇrímceli, uložil jsemli do pole vyfiltrovaných pˇrí- mek.

Po tomto filtrování obsahovalo pole vyfiltrovaných pˇrímek ve vˇet- šinˇe pˇrípad ˚u pro každou ze ˇctyˇr stran fotografovaného dokumentu pouze jednu pˇrímku, viz obrázek 3.3.

3.7 Nalezení roh ˚u

K tomu, abychom mohli papír, který se nachází na fotografii, oˇríz- nout, je potˇreba najít ˇctyˇri body, které definují ˇctyˇrúhelník, v nˇemž se papír nachází.

(34)

(a) (b)

Obrázek 3.3: (a) Vykreslené pˇrímky vrácené funkcí cv::HoughLines(...), (b) vykreslené pouze vyfiltrované pˇrímky.

Prvním krokem je nalezení pr ˚useˇcík ˚u pˇrímek, které jsem zís- kal pomocí Houghovy transformace. Abych pr ˚useˇcíky omezil pouze na body, které mohou odpovídat roh ˚um fotografovaného doku- mentu, pˇredpokládal jsem, že mezi dvˇema pˇrímkami, které udávají roh dokumentu, by mˇel být pravý úhel. Pakliže jsem pˇripustil per- spektivní zkreslení, rozšíˇril jsem interval, ve kterém se úhel sevˇrený pˇrímkami m ˚uže nacházet, naU = hπ3;3 i. Nalezl jsem tedy pr ˚use- ˇcíky všech pˇrímek, které svíraly úhel náležející do intervaluU.

Ze všech nalezených pr ˚useˇcík ˚u jsem spoˇcítal jejich pr ˚umˇer se sou- ˇradnicemi(mx,my). Obraz I jsem pomyslnˇe rozdˇelil na ˇctyˇri oblasti A,B,C,D, kde

A={(x,y) ∈ I| x≤mx∧y≤my}, B ={(x,y) ∈ I| x>mx∧y≤my}, C={(x,y) ∈ I |x >mx∧y>my},

(35)

D={(x,y)∈ I |x ≤mx∧y >my}.

V každé z této oblastí jsem našel pr ˚useˇcík nejvzdálenˇejší od bodu (mx,my). Pakliže se v nˇekteré z oblastí žádný pr ˚useˇcík nenacházel, vybral jsem místo nˇej roh obrazu, který leží v této oblasti. Výsledek výbˇeru pr ˚useˇcík ˚u pˇrímek je vidˇet na obrázku 3.4.

(a) (b)

Obrázek 3.4:Obraz s vyfiltrovanými pˇrímkami a (a) všemi pr ˚useˇcíky, (b) pouze vybranými pr ˚useˇcíky.

3.8 Transformace konvexního ˇctyˇrúhelníku na obdélník

Ctyˇrúhelníkˇ Q definovaný vrcholy, které jsou totožné s vybranými pr ˚useˇcíky z pˇredchozí ˇcásti, jsem transformoval na obdélníkRo roz- mˇerech odpovídajícím dvˇema nejdelším stranám ˇctyˇrúhelníka Q.

Knihovna OpenCV poskytuje funkcicv::getPerspectiveTrans- form(...), která vypoˇcítá transformaˇcní matici urˇcenou k pˇrevodu

(36)

ˇctyˇrúhelníkaQ1na ˇctyˇrúhelníkQ2. Tuto funkci jsem využil pro nale- zení transformaˇcní maticeT, která transformovalaQna R.

Funkce cv::warpPerspective(...) aplikuje na obraz transfor- maˇcní maticiT, ˇcímž vznikne oˇríznutý obraz s narovnanou perspek- tivou.

3.9 Potlaˇcení šumu

Pro potlaˇcení šumu v obraze, na kterém se m ˚uže nacházet drobný text, se ukázal pr ˚umˇerový i Gauss ˚uv filtr jako nevhodný. Pokud se zvolí velikost jádra více než 5, efektivnˇe vyhlazují šum, ale zárove ˇn nepˇrijatelnˇe rozmazávají text, který by mˇel z ˚ustat ostrý. Mediánový filtr pˇri stejnˇe zvolené velikosti jádra vyhlazuje šum podobnˇe, ale písmo zachovává ostˇrejší. Nejlepší výsledky vykazuje bilaterální filtr, kde i pˇri vˇetší velikosti vyhlazovacího jádra z ˚ustává text ˇcitelný a os- trý. Porovnání výstup ˚u filtr ˚u potlaˇcujících šum je na obrázku 3.5.

Pro potlaˇcení šumu jsem zvolil bilaterální filtr. Filtr s velkými já- dry vracel velmi dobré výsledky, ale s ohledem na rychlost zpraco- vání na testovaném telefonu jsem zvolil jádro o velikosti 9×9 a pa- rametry σc = 50,σs = 3. Filtr s jádrem této velikosti dostateˇcnˇe po- tlaˇcí šum a jeho aplikace na testovaném telefonu trvala v pr ˚umˇeru 8 sekund.

3.10 Doostˇrení

Doostˇrovací metoda neostrá maska má oproti doostˇrování pomocí druhé derivace výhodu, že lze pomocí vhodné volby prahu omezit doostˇrování pouze na oblasti, kde se vyskytují výrazné zmˇeny hod- not. Vhodnou volbou prahu lze docílit doostˇrení textu, zatímco šum v homogenních oblastech z ˚ustane nezvýraznˇen. Pro neostrou masku jsem zvolil velikost Gaussova filtru 5×5, σ = 2,T = 5,W = 1, 5.

Výstupneostré maskys tˇemito parametry je na obrázku 3.6.

(37)

(a) (b)

(c) (d)

Obrázek 3.5:(a) Výˇrez fotografie s textem, (b) výstup Gaus- sova filtru o velikosti 5×5 a s parametremσ=3, (c) výstup mediánového filtru o velikosti 5, (d) výstup bilaterálního fil- tru s jádrem velikosti 9×9 a parametryσc =50,σs =3.

(38)

(a) (b)

Obrázek 3.6:(a) Výˇrez fotografie s textem po aplikaci bila- terálního filtru, (b) doostˇrený obraz pomocí neostré masky.

3.11 Uživatelské rozhraní aplikace

Uživatel má po spuštˇení aplikace na výbˇer, jestli chce otevˇrít exis- tující obraz z knihovny obrázk ˚u, nebo nový obraz vyfotografovat.

Po tom, co uživatel naˇcte obraz z vybraného zdroje, aplikace se po- kusí najít okraje papíru ˇci jiného podobného objektu, který se na ob- raze nachází. Okraje se vykreslí na obrazovku telefonu a uživatel je má možnost pomocí pˇremist’ování rohových bod ˚u, upravit. Po od- souhlasení okraj ˚u papíru aplikace narovná perspektivu a oˇrízne ob- raz tak, aby se vybraná oblast zobrazila do obdélníku. V tomto oˇríz- nutém obraze aplikace potlaˇcí šum a následnˇe obraz doostˇrí. Upra- vený obraz je zobrazen a uživatel má možnost jej uložit do knihovny obrázk ˚u v mobilním telefonu.

Jelikož detekce okraj ˚u papíru a úprava obrazu zabere nezanedba- telné množství ˇcasu, jsou tyto operace provádˇeny ve vláknˇe na po- zadí. Aby byl uživatel informován o ˇcasovˇe nároˇcném výpoˇctu, který probíhá, a nenabyl dojmu, že aplikace nereaguje, využil jsem kni- hovnu SVProgressHUD [19], která dokáže zobrazit rotující indikátor aktivity s pˇríslušným popiskem.

(39)

(a) (b) (c)

(d) (e) (f)

Obrázek 3.7:Uživatelské rozhraní aplikace. (a) Obrazovka sloužící pro výbˇer zdroje obrazu, (b) knihovna obrázk ˚u, (c) fotoaparát, (d) obraz s detekovanými okraji papíru, (e) obra- zovka s finálnˇe upraveným obrazem, (f) indikátor symboli- zující práci na pozadí.

(40)

Cílem bakaláˇrské práce bylo vytvoˇrit pro zvolenou mobilní plat- formu aplikaci zamˇeˇrenou na vylepšení fotografií papírových doku- ment ˚u, cedulí a podobných objekt ˚u.

Porovnal jsem metody používané v oblasti zpracování digitál- ního obrazu, zejména metody zamˇeˇrené na potlaˇcení šumu, segmen- taci obrazu, doostˇrení obrazu a Houghovu transformaci.

Tyto metody jsem s r ˚uznými parametry vyzkoušel na sadˇe tes- tovacích snímk ˚u. Navrhl a popsal jsem postup, jak v obraze deteko- vat ˇctyˇrúhelníkový objekt. Na základˇe tohoto postupu a vybraných vhodných metod pro potlaˇcení šumu a doostˇrení obrazu jsem vytvo- ˇril mobilní aplikaci pro platformu iOS.

Uživatel pomocí aplikace vyfotografuje nový obraz ˇci otevˇre exis- tující fotografii z knihovny. Aplikace za využití Cannyho hranového detektoru a Houghovy transformace automaticky detekuje okraje dokumentu, který se na fotografii nachází a nabídne uživateli upra- vení tˇechto okraj ˚u. Dále narovná perspektivu a fotografii oˇrízne tak, aby okraje fotografovaného dokumentu lícovaly s okraji fotografie.

V poslední ˇradˇe ve fotografii pomocí bilaterálního filtru potlaˇcí šum a doostˇrí ji filtremneostrá maska.

4.1 Možnosti budoucího vývoje

V budoucnu je možné rozšíˇrit uživatelské rozhraní o možnost ma- nuálního nastavení parametr ˚u bilaterálního filtru aneostré maskytak, aby odpovídaly potˇrebám konkrétní fotografie.

Je možné dotvoˇrit funkce zajišt’ující automatickou korekci expo- zice, korekci nerovnomˇerného osvˇetlení ˇci binarizaci obrazu.

Dalším možným rozšíˇrením je možnost sdílení fotografie e-mailem a jinými komunikaˇcními kanály ˇci možnost nahrání fotografie do slu- žeb urˇcených pro zálohování a sdílení soubor ˚u.

(41)

[1] A. Christensen, “Paper beats computer screens,”

ScienceNordic, 2013. [Online]

http://sciencenordic.com/paper-beats-computer-screens [cit 26. 11. 2014].

[2] A. Mangen, B. R. Walgermo a K. Brønnick, “Reading linear texts on paper versus computer screen: Effects on reading comprehension,”International Journal of Educational Research, vol. 58, pp. 61–68, 2013.

[3] Apple Inc., “iOS 8,” Apple Inc., 2015. [Online]

https://www.apple.com/ios/ [cit 20. 4. 2015].

[4] Itseez, “ABOUT | OpenCV,” OpenCV, 2014. [Online]

http://opencv.org/about.html [cit 26. 11. 2014].

[5] G. Bradski a A. Kaehler,Learning OpenCV, 1st ed.

Sebastopol, CA: O’Reilly, 2008.

[6] K. Kornyakov a A. Shishkov,Instant OpenCV for iOS.

Birmingham, United Kingdom: Packt Publishing, 2013.

[7] W. K.Pratt,Digital Image Processing: PIKS Scientific Inside, 4th ed. Hoboken, NJ: Wiley-Interscience, 2007.

[8] R. C. Gonzalez a R. E. Woods,Digital Image Processing, 3rd ed.

Upper Saddle River, NJ: Pearson Prentice Hall, 2008.

[9] M. Šonka, V. Hlaváˇc a R. Boyle,Image processing analysis and machine vision, 2nd ed. Pacific Grove, CA: PWS Publishing, 1999.

[10] R. O. Duda a P. E. Hart, “Use of the hough transformation to detect lines and curves in pictures,”Commun. ACM, vol. 15, no. 1, pp. 11–15, Jan. 1972.

[11] C Tomasi a R. Manduchi, “Bilateral filtering for gray and color images,” inSixth International Conference on Computer Vision, Jan 1998, pp. 839–846.

(42)

[12] G.T. Shrivakshan a C. Chandrasekar, “A comparison of various edge detection techniques used in image processing,”IJCSI International Journal of Computer Science Issues, vol. 9, no. 5, pp. 272–276, 2012.

[13] J. S. Chen, A. Huertas a G. Medioni, “Fast convolution with laplacian-of-gaussian masks,”IEEE Transactions on Pattern Analysis and Machine Intelligence, no. 4, pp. 584–590, 1987.

[14] J. Canny, “A computational approach to edge detection,”IEEE Transactions on Pattern Analysis and Machine Intelligence, no. 6, pp. 679–698, 1986.

[15] Apple Inc., “Xcode - What’s New,” Apple Inc., 2015. [Online]

https://developer.apple.com/xcode/ [cit 1. 5. 2015].

[16] Apple Inc., “iOS Frameworks,” Apple Inc., 2014. [Online]

https://developer.apple.com/library/ios/documentation/

Miscellaneous/Conceptual/iPhoneOSTechOverview/

iPhoneOSFrameworks/iPhoneOSFrameworks.html [cit 20. 4.

2015].

[17] Apple Inc., “AV Foundation for iOS and OS X,” Apple Inc., 2015. [Online] https://developer.apple.com/av-foundation/

[cit 20. 4. 2015].

[18] Apple Inc., “UIImagePickerController Class Reference,” Apple Inc., 2015. [Online]

https://developer.apple.com/library/ios/documentation/

UIKit/Reference/UIImagePickerController_Class/ [cit 20. 4.

2015].

[19] Sam Vermette et al., “SVProgressHUD,” GitHub, 2015. [Online]

https://github.com/TransitApp/SVProgressHUD [cit 26. 4.

2015].

(43)

Souˇcástí bakaláˇrské práce je pˇríloha BP.zip obsahující vytvoˇrenou mobilní aplikaci ve formˇe projektu prostˇredí Xcode. Tato pˇríloha je dostupná v archívu této práce v Informaˇcním systému Masarykovy univerzity.

Odkazy

Související dokumenty

Existuje i česká verze DBpedie, ta aktuálně (listopad 2014) popisuje necelých 300 tisíc věcí pomocí 30 milionů

HathiTrust na jednej strane predstavuje medzinárodnú spoločnosť výskumných inštitúcií a kniž- níc, ktorej cieľom je zachovanie kultúrneho dedičstva pre budúce generácie,

Dal²í dva projekty, které sice nejsou k IMSLP nebo k Petrucci Music Library LLC p°idruºeny, ale sdílí shodné objekty jako IMSLP, jsou Inter- national Music Score Library Project

Jsou sbírány také plné texty s OCR (optické rozpoznávání znak ˚u) z digitálních knihoven, které sice nejsou uživateli zpˇrístupnˇeny, je však možné v nich vyhledávat

Neb milost není něčím mrtvým v duši, milost posvěcující neleží v duši jako kámen, nýbrž jest organickým přetvořením duše, jež jest účastna vskutku 'a vpravdě

On the Sprint Review meetings, one member of the team presented the completed user stories to the Product Owner in the form of vi- sual inspection of the developed functionality.

It was compared to nfdump, which is widely used framework for network flow data manipulation, and PostgreSQL database, as relational databases are still sometimes used for flow

Applety pre vizualizáciu dát vytvorené v rámci [3] boli úspešne rozšírené o dva grafy zobrazujúce riešenie odpoved- níkov v ˇcase, o graf, ktorý pomocou