Univerzita Karlova v Praze Matematicko-fyzik´aln´ı fakulta
´ RSK ˇ ´ PRACE ´ BAKALA A
Marek Novotn´y Grafick´ e filtry pro projekt AGE Katedra distribuovan´ ych a spolehliv´ ych syst´em˚ u
Vedouc´ı bakal´aˇrsk´e pr´ace: Mgr. Pavel Jeˇzek Studijn´ı program: Informatika Studijn´ı obor: Programov´an´ı
2010
Na tomto m´ıstˇe bych chtˇel podˇekovat vedouc´ımu sv´e bakal´aˇrsk´e pr´ace panu Mgr. Pavlu Jeˇzkovi za cenn´e odborn´e rady a pˇripom´ınky a za ˇcas, kter´ y str´avil bˇehem konzultac´ı.
Prohlaˇsuji, ˇze jsem svou bakal´aˇrskou pr´aci napsal samostatnˇe a v´ yhradnˇe s pouˇzit´ım citovan´ ych pramen˚ u. Souhlas´ım se zap˚ ujˇcov´an´ım pr´ace a jej´ım zveˇrejˇ nov´an´ım. V Praze dne 3. srpna 2010
Marek Novotn´ y
2
Obsah ´ Uvod
6
1 Anal´ yza 1.1 N´astroje pro implementaci . . . . . 1.2 Reprezentace a pr´ace s barvou . . . 1.2.1 Poˇzadavky na implementaci 1.2.2 Moˇznosti . . . . . . . . . . . 1.2.3 Z´avˇereˇcn´e rozhodnut´ı . . . . 1.3 Reprezentace a pr´ace s rastrem . . 1.3.1 Moˇznosti . . . . . . . . . . . 1.3.2 Z´avˇereˇcn´e rozhodnut´ı . . . . 1.4 Panoramata . . . . . . . . . . . . . 1.4.1 Moˇznosti . . . . . . . . . . . 1.4.2 Z´avˇereˇcn´e rozhodnut´ı . . . . 1.5 Filtry . . . . . . . . . . . . . . . . 1.5.1 Transformaˇcn´ı filtry . . . . . 1.5.2 Konvoluˇcn´ı filtry . . . . . . 1.5.3 Barevn´e filtry . . . . . . . . 1.6 GUI . . . . . . . . . . . . . . . . . 2 Implementace 2.1 Z´akladn´ı n´avrh . . . . . . . . . 2.2 Barvy . . . . . . . . . . . . . . 2.3 Bitmapy . . . . . . . . . . . . . 2.3.1 Zmˇena velikosti . . . . . 2.3.2 Paralelismus na bitmapˇe 2.4 Filtry a jejich n´astroje . . . . . 2.4.1 Nejobecnˇejˇs´ı tˇr´ıdy filtr˚ u 2.4.2 Barevn´e filtry . . . . . . 2.4.3 Transformaˇcn´ı filtry . . . 2.4.4 Konvoluˇcn´ı filtry . . . . 3
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . . . .
8 8 8 9 9 10 12 12 13 13 14 15 16 16 20 23 25
. . . . . . . . . .
26 26 28 29 31 32 33 34 35 36 37
. . . . . .
39 40 41 42 43 44
3 Srovn´ an´ı s konkurenc´ı 3.1 Gimp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Adobe Photoshop . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Shrnut´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46 46 47 48
Z´ avˇ er
49
Literatura
51
2.5 2.6
2.4.5 N´astroje . . . . . . Panoramata . . . . . . . . GUI . . . . . . . . . . . . 2.6.1 Prostˇred´ı . . . . . . 2.6.2 Editace filtr˚ u . . . 2.6.3 Editace panoramat
. . . . . .
. . . . . .
4
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
N´azev pr´ace: Grafick´e filtry pro projekt AGE Autor: Marek Novotn´ y Katedra (´ ustav): Katedra distribuovan´ ych a spolehliv´ ych syst´em˚ u Vedouc´ı bakal´aˇrsk´e pr´ace: Mgr. Pavel Jeˇzek E-mail vedouc´ıho:
[email protected] Abstrakt: Pˇredloˇzen´a pr´ace se zab´ yv´a implementac´ı knihoven pro projekt AGE. Knihovny obsahuj´ı implementaci transformaˇcn´ıch a kovoluˇcn´ıch filtr˚ ua filtr˚ u pro pr´aci s barvou. Naleznou se zde konvoluˇcn´ı filtry ve dvou variant´ach a to ve formˇe n´ızkofrekvenˇcn´ı a vysokofrekvenˇcn´ı. V knihovn´ach je d´ale zahrnuta tvorba jednorozmˇern´ ych panoramat z ˇca´steˇcnˇe se pˇrekr´ yvaj´ıc´ıch rastrov´ ych obr´azk˚ u se zasazen´ım do struktury objekt˚ u projektu AGE. K prezentaci jednotliv´ ych funkcionalit knihoven byl vytvoˇren grafick´ y editor, v nˇemˇz se daj´ı vytv´aˇret zm´ınˇen´a panoramata a aplikovat grafick´e filtry na vektorov´ y ˇci rastrov´ y obr´azek. Kl´ıˇcov´a slova: grafick´ y, filtr, panorama, editor, AGE
Title: Graphical Filters for the AGE Project Author: Marek Novotn´ y Department: Department of Distributed and Dependable Systems Supervisor: Mgr. Pavel Jeˇzek Supervisor’s e-mail address:
[email protected] Abstract: The goal of this thesis was to develop a set of libraries for the AGE project. The libraries implement common transform, convolution (both high and low frequency) and color filters. The libraries also include an implementation of one-dimensional panoramas of overlapping images. All of the functionality is designed to seamlessly fit into the AGE project class structure. In order to present the main results of the thesis a simple graphical editor was created as part of the thesis. The editor supports generation of panoramas as well as application of all the implemented filters to bitmap and vector images. Keywords: graphical, filter, panorama, editor, AGE
5
´ Uvod C´ılem bakal´aˇrsk´e pr´ace je vytvoˇrit skupinu knihoven pro projekt AGE (Advanced Graphics Editor), kter´e by implementovaly grafick´e filtry a dalˇs´ı funkˇcn´ı prvky vyuˇz´ıvaj´ıc´ı tyto filtry. Grafick´ y filtr je n´azvem pro funkci na grafick´ ych prvc´ıch jako je vektorov´ y ˇci rastrov´ y obr´azek. Je d´an vztah Y = f (X). Zobrazen´ı f je zmiˇ novan´ y grafick´ y filtr a X vstupn´ı obr´azek. Y pˇredstavuje transformovan´ y obr´azek, jeˇz vznikl aplikac´ı filtru na zdrojov´ y obr´azek. Transformac´ı se rozum´ı napˇr´ıklad zmˇena barvy, geometrick´a transformace obr´azku atd., jeˇz z´avis´ı na implementaci a aktu´aln´ım nastaven´ım filtru. V pr˚ ubˇehu transformace m˚ uˇze nastat situace, kdy bude potˇreba pˇrev´est vektor na bitmapu a filtr aplikovat na v´ ysledn´e bitmapˇe. To pozdˇeji zapˇr´ıˇcin´ı rozdˇelen´ı filtr˚ u na kategorie vektorov´e a rastrov´e. Filtry se budou d´ale dˇelit na n´ızkofrekvenˇcn´ı, vysokofrekvenˇcn´ı, transformaˇcn´ı a filtry pro pr´aci s barvou. Tato problematika vˇsak bude podrobnˇeji rozebr´ana v dalˇs´ıch kapitol´ach. Dalˇs´ım prvkem, kter´ y by mˇely knihovny zahrnovat, je tvorba panoramat. Panoramatem se rozum´ı pohled na nˇejak´ y objekt ˇci krajinu v ˇsirok´em zorn´em poli, kter´e m˚ uˇze dosahovat hodnoty aˇz 360 stupˇ n˚ u. Vˇetˇsina fotoapar´at˚ u nem´a moˇznost fotit ve velmi ˇsirok´em zorn´em poli, a proto se nab´ız´ı jedin´a moˇznost nafotit v´ıce sn´ımk˚ u, kter´e se pak urˇcit´ ym zp˚ usobem sloˇz´ı. D´ale by knihovny mˇely obsahovat tvorbu opakovateln´ ych grafick´ ych textur. Pod t´ımto pojmem je myˇslena transformace bitmapov´eho obr´azku tak, aby se transformovan´ y obr´azek pˇri jeho horizont´aln´ım a vertik´aln´ım opakov´an´ı jevil jako textura, kter´a neobsahuje skokov´ y pˇrechod. V neposledn´ı ˇradˇe bude potˇreba rozmyslet a naimplementovat reprezentaci rastrov´eho (bitmapov´eho) obr´azku, na kter´ y se budou aplikovat pˇredchoz´ı body funkcionality. Zmiˇ novan´ y projekt AGE je integrovan´ ym prostˇred´ım pro grafickou tvorbu zejm´ena v oblastech vektorov´e, rastrov´e a prostorov´e grafiky, jehoˇz hlavn´ı myˇslenkou je poskytovat uˇzivateli komplexn´ı grafick´e prostˇred´ı, jehoˇz moˇznosti uspokoj´ı jeho veˇsker´e potˇreby, a nebude tak nucen pouˇz´ıt jin´ y grafick´ y n´astroj s u ´zk´ ym spektrem moˇznost´ı. Jelikoˇz AGE zat´ım existuje 6
pouze ve v´ yvojov´e f´azi, bylo nutn´e vytvoˇrit aplikaci pro prezentaci knihoven. Tato aplikace vyuˇz´ıv´a i dalˇs´ı knihovny, kter´e jsou souˇca´st´ı Bakal´aˇrsk´e pr´ace ˇ Jana Sebetovsk´ eho [1] nav´azan´e na Bakal´aˇrskou pr´aci Tom´aˇse Hercega [2], kter´a nen´ı pˇr´ımo vyuˇz´ıv´ana, ale nˇekter´e jej´ı ˇca´sti jsou nutn´e pro chod knihoven z pr´ace [1]. V textu bude zm´ınˇeno vyuˇzit´ı jednotliv´ ych ˇc´ast´ı tˇechto knihoven.
7
Kapitola 1 Anal´ yza V t´eto kapitole budou pops´any myˇslenky a rozhodov´an´ı autora pˇri n´avrhu t´eto pr´ace. Budou zde zobrazeny klady a z´apory jednotliv´ ych variant ˇreˇsen´ı probl´em˚ u a po celkov´em zhodnocen´ı dojde k v´ ybˇeru jedn´e z variant a opodstatnˇen´ı jej´ıho v´ ybˇeru.
1.1
N´ astroje pro implementaci
Aplikace a knihovny t´eto pr´ace budou naps´any pomoc´ı v´ yvojov´e platformy .NET verze 3.5 a programovac´ıho jazyka C# verze 3.0. K tomuto rozhodnut´ı vedl fakt, ˇze autor t´eto pr´ace m´a se zm´ınˇen´ ymi implementaˇcn´ımi n´astroji v porovn´an´ı s jin´ ymi moˇznostmi nejvˇetˇs´ı zkuˇsenosti. D´ale je br´ano v potaz, ˇze v´ ysledn´a aplikace AGE bude naps´ana takt´eˇz pomoc´ı tˇechto n´astroj˚ u.
1.2
Reprezentace a pr´ ace s barvou
Pˇred u ´vahami nad t´ım, jak by mˇela b´ yt implementov´ana barva, je nutn´e si poloˇzit ot´azku, co to vlastnˇe barva je. Ve sv´e podstatˇe se jedn´a o vlnovou d´elku elektromagnetick´eho z´aˇren´ı, kter´e lid´e naz´ yvaj´ı viditeln´ ym svˇetlem. Rozsah vlnov´e d´elky viditeln´eho svˇetla se pro informaci pohybuje mezi 400-750 nm, pˇriˇcemˇz modr´e barvˇe pˇr´ısluˇs´ı nejkratˇs´ı vlnov´a d´elka, ˇcerven´e zase ta nejdelˇs´ı a mezi t´ım je rozprostˇreno cel´e spektrum barev. Jak je dobˇre zn´am´e, lidsk´e oko nen´ı dokonol´e a ne vˇsechny ˇca´sti pro ˇclovˇeka viditeln´eho spektra vn´ım´a se stejnou intenzitou. Nˇekter´e barvy ˇci odst´ıny barev jsou oproti jin´ ym potlaˇceny. V literatuˇre [3] je moˇzno se dostat k podrobnˇejˇs´ım informac´ım, kde je viditeln´e spektrum lidsk´eho oka oznaˇcov´ano jako Lab Color. Jelikoˇz pˇri pouˇz´ıv´an´ı dneˇsn´ıch technick´ ych zaˇr´ızen´ı nelze pracovat pˇr´ımo s vlnovou d´elkou barvy, je moˇzno se ve zm´ınˇen´e literatuˇre doˇc´ıst, jak´e 8
existuj´ı moˇznosti reprezentace barvy v dneˇsn´ı technice, a to pomoc´ı reprezentace RGB a CMYK. V t´eto pr´aci budou tyto reprezentace oznaˇceny jako barevn´e prostory. I tyto barevn´e prostory nebudou dokonal´ ym vyj´adˇren´ım barvy, jelikoˇz nepokryj´ı cel´e viditeln´e spektrum lidsk´eho oka a nav´ıc se nebudou moci mezi sebou pˇrev´adˇet beze ztr´at.
1.2.1
Poˇ zadavky na implementaci
Jak´e poˇzadavky mohou b´ yt kladeny na implementaci barev? Jelikoˇz s barvou bude pracovat velk´e mnoˇzstv´ı entit jako je filtr nebo panorama, bude d˚ uleˇzit´e, aby byla barva vyj´adˇrena pouze jedn´ım barevn´ ym prostorem. V pˇr´ıpadˇe, ˇze by reprezentac´ı bylo v´ıc, potom by se stalo nutnost´ı vytv´aˇret nav´azan´e prvky v´ıckr´at. Na tento jedin´ y prostor barev bude kladen d˚ uraz, aby se do nˇej pˇrev´adˇely bezeztr´atovˇe ostatn´ı prostory. D´ale bude nutn´e, aby dan´ y prostor nekladl velik´e pamˇet’ov´e a implementaˇcn´ı n´aroky.
1.2.2
Moˇ znosti
Nyn´ı budou nast´ınˇeny moˇznosti pro v´ ybˇer barevn´eho prostoru. Barevn´ y prostor RGB Tento barevn´ y prostor je definov´an pomoc´ı tˇr´ı barev; ˇcerven´e (Red), zelen´e (Green) a modr´e (Blue). Pomoc´ı skl´ad´an´ı tˇechto tˇr´ı sloˇzek se dost´avaj´ı ostatn´ı barvy spektra prostoru. V praxi b´ yv´a tento prostor implementov´an tak, ˇze ˇ ım je ˇc´ıslo pro jeden barevn´ y kan´al se vyhrad´ı jedno osmibitov´e cel´e ˇc´ıslo. C´ vˇetˇs´ı, t´ım se dostane barva s vˇetˇs´ım pod´ılem jasu do dan´eho kan´alu barvy. Mezi nejvˇetˇs´ı klady barevn´eho prostoru RGB patˇr´ı, ˇze je asi nejrozˇs´ıˇrenˇejˇs´ı barevnou reprezentac´ı ve v´ ypoˇcetn´ı sf´eˇre. Tˇeˇzko se najde aplikace pro pr´aci s grafikou, kter´a by tento prostor nevyuˇz´ıvala. Pˇri pouˇzit´ı tohoto barevn´eho prostoru ˇca´steˇcnˇe ˇci u ´plnˇe odpadla implementace, jelikoˇz je tento prostor jiˇz hotov v prostˇred´ı .NET, kter´e bude vyuˇz´ıv´ano. D´ale je nutno zm´ınit, ˇze drtiv´a vˇetˇsina t´emat literatur a r˚ uzn´ ych ˇcl´ank˚ u prov´ad´ı sv´e u ´vahy nad t´ımto prostorem. Jedinou, avˇsak d˚ uleˇzitou nev´ yhodou by bylo, ˇze tento barevn´ y prostor nepokr´ yv´a spektrum lidsk´eho oka a konverze z jin´ ych barevn´ ych prostor˚ u by byla ztr´atov´a. Barevn´ y prostor CMYK Barevn´ y prostor zaloˇzen´ y na subtraktivn´ım m´ıch´an´ı barev je sloˇzen ze ˇctyˇr barevn´ ych sloˇzek, a to z azurov´e (Cyan), purpurov´e (Magenta), ˇzlut´e (Yellow) 9
a ˇcern´e (blacK). Subtraktivn´ı m´ıch´an´ı barev je m´ıch´an´ı barev, ve kter´em se barvy nesˇc´ıtaj´ı, ale naopak odˇc´ıtaj´ı. Tato barevn´a reprezentace se vyuˇz´ıv´a pˇredevˇs´ım v oblasti tisku. Podrobnˇeji je tento barevn´ y prostor pops´an v [4]. Na prvn´ı pohled pro potˇrebu t´eto aplikace nen´ı moc vhodn´ ym reprezentantem, jelikoˇz nepokr´ yv´a barevn´e spektrum viditelnosti lidsk´eho oka a konverze do tohoto prostoru by byla ztr´atov´a. Odborn´a literatura nav´ıc tento barevn´ y prostor neuvaˇzuje. D´ale by pˇri potenci´aln´ım vybr´an´ı nastala povinnost tento prostor naimplementovat.
1.2.3
Z´ avˇ ereˇ cn´ e rozhodnut´ı
Obr´azek 1.1: Obr´azek pˇrekryt´ı barevn´ ych prostor˚ u pˇrevzat´ y z [3]. A - viditeln´e spektrum lidk´eho oka, B - RGB model, C - CMYK model Zat´ım vˇsechny barevn´e prostory nezahrnovaly cel´e viditeln´e spektrum lidsk´eho oka, viz obr´azek 1.1. Tud´ıˇz nezb´ yv´a neˇz takov´ yto barevn´ y prostor navrhnout. RGB prostor, aˇz na tuto podm´ınku, celkem vyhovoval, z ˇcehoˇz vypl´ yv´a poznatek, ˇze by bylo vhodn´e z tohoto modelu vych´azet. RGB model obsahuje celkem 256 u ´rovn´ı jasu na kan´al a tvoˇr´ı jak´ ysi troj´ uheln´ık uprostˇred barevn´eho spektra viditelnosti barev. Proˇc tedy tento troj´ uheln´ık nezvˇetˇsit tak, ˇze by barevn´ y prostor lidsk´eho oka pojmul, viz obr´azek 1.2. To by znamenalo, ˇze by se musely pˇridat dalˇs´ı u ´rovnˇe jasu barevn´eho kan´alu, ale se stejnou granularitou. Dle zmiˇ novan´eho obr´azku bude 16bit˚ u ˇcili 65538 u ´rovn´ı jasu na kan´al staˇcit. Rozhodnut´ı pouˇz´ıt tento barevn´ y nadprostor spektra lidsk´eho oka umoˇzn ˇuje bezeztr´atov´ y pˇrevod do toho prostoru a d´ıky analogii s RGB modelem lze bez probl´em˚ uau ´skal´ı vyˇz´ıt literatury poposuj´ıc´ı oblasti, kter´e budou pozdˇeji vyuˇzity. Jedinou nev´ yhodou je, ˇze se tento prostor bude muset implementovat od z´akladu, coˇz by nemˇelo p˚ usobit takov´e probl´emy.
10
Obr´azek 1.2: Obr´azek zn´azorˇ nuj´ıc´ı budouc´ı stav nadprostoru lidsk´eho oka. Pro mal´e ulehˇcen´ı se zat´ım tento prostor bude pˇrevodovˇe jevit jako prostor RGB se ˇsesn´actibitovou granularitou viz obr´azek 1.3, jelikoˇz zat´ım nebudou jin´e barevn´e modely potˇreba. Bude zde pouze aplikov´an pˇrevod RGB modelu kv˚ uli zobrazov´an´ı operac´ı aplikace v GUI. Pozdˇeji, aˇz se v aplikaci AGE projev´ı potˇreba pracovat s dalˇs´ımi prostory, pˇrevod bude upraven dle popisovan´e idey zn´azornˇen´e na obr´azku 1.2.
Obr´azek 1.3: Obr´azek zn´azorˇ nuj´ıc´ı prozatimn´ı stav nadprostoru lidsk´eho oka. D´ale se nesm´ı zapomenout na alfa kan´al, kter´ y bude ud´avat pr˚ uhlednost. U vˇsech zmiˇ novan´ ych prostor˚ u by staˇcila reprezentace pomoc´ı 8 bit˚ u cel´eho ˇc´ısla.
11
1.3
Reprezentace a pr´ ace s rastrem
Cel´a ideologie aplikace AGE se soustˇred’uje kolem sc´eny, kter´a je pˇredmˇetem pr´ace [1], jeˇz m´a pˇredstavovat pracovn´ı plochu pro uˇzivatele. Sc´ena bude obsahovat strom objekt˚ u, kde kaˇzd´ y objekt bude vracet svoje vyrenderov´an´ı. Toto vyrenderov´an´ı m´a pˇredstavovat grafickou reprezentaci dan´eho objektu ve vektorov´e ˇci rastrov´e formˇe. Vyrenderov´an´ı bude reprezentovan´e tˇr´ıdou Rendred a jej´ı vektorov´a varianta pomoc´ı RenderedCurves. Tyto dvˇe tˇr´ıdy jsou souˇca´st´ı pr´ace [1]. A pro c´ıl t´eto pr´ace zb´ yv´a doimplementovat tˇr´ıdu, kter´a bude implementovat rastrovou variantu vyrenderov´an´ı. Nab´ız´ı se varianta rozdˇelit implementaci bitov´e mapy nebo-li rastru do dvou tˇr´ıd, kde jedna tˇr´ıda bude druhou obalovat a pˇrepos´ılat j´ı poˇzadavky. Prvn´ı tˇr´ıda by plnila funkci konkr´etn´ı reprezentace bitov´e mapy a druh´a tˇr´ıda by zapadala od hierarchie dˇediˇcnosti vyrenderov´an´ı. Toto rozdˇelen´ı by poskytovalo v´ yhodu v tom, ˇze v pˇr´ıpadˇe ˇspatn´e volby reprezentace by n´asledn´a oprava obn´aˇsela pouze vymˇenˇen´ı vnitˇrn´ı tˇr´ıdy a venkovn´ı tˇr´ıda by z˚ ustala zachov´ana. V dneˇsn´ı dobˇe mnoho v´ ypoˇcetn´ıch zaˇr´ızen´ı nab´ız´ı nˇekolik jader, kter´a dok´aˇz´ı pracovat paralelnˇe. Z tohoto vyvst´av´a myˇslenka, ˇze by mˇel b´ yt vytvoˇren komplexn´ı mechanismus pro paraleln´ı pr´aci s bitovou mapou, jeˇz by se z navazuj´ıc´ıch ˇcast´ı snadno pouˇz´ıval.
1.3.1
Moˇ znosti
Zde budou poloˇzeny a n´aslednˇe vybr´any implementovan´e ˇci neimplementovan´e moˇznosti konkr´etn´ı reprezentace bitov´e mapy. Pouˇ zit´ı bitmapy z .NET Jednou z moˇznost´ı, jak se na celou situaci d´ıvat, je vyuˇzit´ı implementovan´e bitmapy, kter´a se nach´az´ı ve vyuˇz´ıvan´em prostˇred´ı .NET jmenn´eho prostoru System.Drawing. Tato tˇr´ıda by se pot´e obalila tˇr´ıdou zapadaj´ıc´ı do hierarchie vyrenderov´an´ı. Pˇr´ıstup k jednotliv´ ym pixel˚ um bitmapy by musel b´ yt proveden pˇres ”unmanaged”k´od, jelikoˇz nejsou na bitmapˇe definov´any pˇr´ısluˇsn´e metody. To pˇredstavuje jistou nev´ yhodu v tom, ˇze by implementace reprezentace bitov´e mapy byla obt´ıˇznˇejˇs´ı z hlediska udrˇzen´ı stability k´odu. Avˇsak hlavn´ı nev´ yhodou t´eto bitmapy je, ˇze pouze uˇz´ıv´a barevn´ y prostor RGB a t´ım by popˇrela ideu uvaˇzovanou v pˇredchoz´ı podkapitole.
12
Implementace vlastn´ı bitov´ e mapy Dalˇs´ı moˇznost´ı se jev´ı implementace nov´e bitmapy. Tato bitmapa by byla naps´ana dle potˇreb n´asledn´ ych funkcionalit aplikace AGE a kdykoliv by se dala dle nutnosti upravit. Podporovala by barevn´e spektrum lidsk´eho oka, jelikoˇz by pixely byly tvoˇreny reprezentac´ı barevn´eho prostoru ze z´avˇeru pˇredchoz´ı podkapitoly. Jelikoˇz bude tato bimapa tvoˇrena od z´akladu, nastav´a zde tak´e nutnost naimplementovat pˇrevod do .NET bitmapy ze jmenn´eho prostoru System.Drawing, jelikoˇz bude vyuˇzita pˇri zobrazov´an´ı v grafick´em rozhran´ı.
1.3.2
Z´ avˇ ereˇ cn´ e rozhodnut´ı
Po zv´aˇzen´ı obou variant by bezesporu jednoznaˇcnˇe mˇela b´ yt naimplementov´ana varianta druh´a, jelikoˇz moˇznost mˇenit k´od reprezentace bitov´e bitmapy bude velice vhodn´a v horizontu v´ yvoje aplikace AGE.
1.4
Panoramata
Panorama, jinak ˇreˇceno skupina obr´azk˚ u, kter´a je urˇcit´ ym zp˚ usobem pozmˇenˇena tak, ˇze se tv´aˇr´ı jako jeden, by mˇela rozumn´ ym zp˚ usobem zapadat do hierarchie AGE. Mˇelo by se vyuˇz´ıt toho, ˇze sc´enu AGE tvoˇr´ı strom grafick´ ych objekt˚ u, na nˇeˇz se aplikuj´ı grafick´e filtry.
Panorama
Obrázek 1
Obrázek 2
Obrázek 3
Filtry
Filtry
Filtry
Obr´azek 1.4: Diagram zobrazuj´ıc´ı strukturu panoramata Jak by reprezentace panoramat mohla vypadat? Jelikoˇz je panorama urˇcit´a skupina, mohlo by b´ yt panorama objektem sc´eny, kter´a bude obsahovat dalˇs´ı
13
podobjekty reprezentace rastrov´eho obrazu. Na tyto podobjetky by se aplikovaly filtry, kter´e by provedly konkr´etn´ı zmˇenu obr´azku tak, aby zapadaly do v´ ysledn´eho panorama viz obr´azek 1.4.
1.4.1
Moˇ znosti
V dneˇsn´ı dobˇe se nach´az´ı v´ıce zp˚ usob˚ u, jak modifikovat zdrojov´e obr´azky tak, aby ve v´ ysledku tvoˇrily panorama. Nyn´ı budou pops´any a n´aslednˇe zhodnoceny zp˚ usoby tvorby panoramat. Dvourozmˇ ern´ a panoramata Dvourozmˇern´ ym panoramatem se rozum´ı spojov´an´ı obr´azk˚ u jak v horizont´aln´ı ose, tak i v ose vertik´aln´ı. Z toho vypl´ yv´a, ˇze je moˇzn´e nafotit velk´e mnoˇzstv´ı fotografi´ı, kter´e se nˇejak´ ym zp˚ usobem pˇrekr´ yvaj´ı a mechanismus je s´am spoj´ı. Focen´e sn´ımky nemus´ı b´ yt zarovn´any v ˇz´adn´e ose, staˇc´ı pouze pˇrekryt´ı. Tento mechanismus je podrobnˇe pops´an v literatuˇre [5]. Funguje zhruba tak, ˇze se nejprve ze sn´ımk˚ u z´ıskaj´ı SIFT viz [6] pˇr´ıznaky z obr´azk˚ u, jeˇz tvoˇr´ı maxim´aln´ı, ˇci minim´aln´ı rozd´ıly Gaussovy funkce. D´ale se najde k sousedn´ıch pˇr´ıznak˚ u pro kaˇzd´ y pˇr´ıznak, kter´e se uloˇz´ı do K-D stromu viz [7]. Po t´eto operaci se zjist´ı, kter´e obr´azky na sebe navazuj´ı. Pomoc´ı dan´ ych pˇr´ıznak˚ u se obr´azky transformuj´ı a m˚ uˇze doj´ıt k jejich pˇrekryt´ı a prolnut´ı. Tato panoramata maj´ı velikou v´ yhodu, nebot’ nepotˇrebuj´ı ˇz´adn´e vstupn´ı informace od uˇzivatele a dovedou pracovat v plnˇe automatizovan´em reˇzimu. Jedn´a se o nejpokroˇcilejˇs´ı metody jak tvoˇrit panoramata a mˇely by pokr´ yt vˇsechny poˇzadavky uˇzivatele. Naproti tomu velik´a nev´ yhoda se nach´az´ı v tom, ˇze je tento mechanismus znaˇcnˇe n´aroˇcn´ y na implementaci a jeho zasazen´ı do pr´ace by zabralo pˇr´ıliˇs mnoho ˇcasu, jelikoˇz tvorba tˇechto panoramat obsahuje mnoho pokroˇcil´ ych algoritm˚ u se sloˇzitou implementac´ı, jak vypl´ yv´a z literatury [5]. Jednorozmˇ ern´ a panoramata Jednorozmˇern´a panoramata spojuj´ı obr´azky pouze v horizont´aln´ı ose. Jde o typ panoramat, se kter´ ymi se lze bˇeˇznˇe setkat. Idea je takov´a, ˇze uˇzivatel nafot´ı sn´ımky s urˇcit´ ym pˇrekryt´ım na stativu ˇci bez nˇej a bude se ot´aˇcet s fotoapar´atem kolem osy kolm´e k zemsk´e ploˇse. Body tˇechto sn´ımk˚ u se pot´e prom´ıtnou na abstraktn´ı v´alec a rozvinou se do roviny. Potom se pomoc´ı Lucas-Kanede algoritmu urˇc´ı vz´ajemn´a pozice sn´ımk˚ u. Naslednˇe se sn´ımky prolnou a v´ ysledn´e panorama se oˇr´ızne. Prodrobnˇejˇs´ı popis lze nal´ezt v literatutuˇre [8]. 14
Jen struˇcnˇe, jak Lucas-Kanede algoritmus funguje. Algoritmus dostane dva obr´azky s poˇc´ateˇcn´ım odhadem pˇrekryt´ı. Z kaˇzd´eho obr´azku vytvoˇr´ı pyramidu obr´azk˚ u takovou, ˇze se obr´azek zmenˇsuje vˇzdy na poloviˇcn´ı rozmˇery, dokud nebude tak mal´ y, ˇze by jeho zmenˇsen´ı nemˇelo ˇz´adn´ y smysl. V pˇr´ıpadˇe, ˇze budeme m´ıt obr´azek o velikosti 400x300, bude pyramida sloˇzena z obr´azk˚ u o velikosti 400x300, 200x150, 100x75, 50x37, atd. Algoritmus postupnˇe bere obr´azky z obou pyramid od nejmenˇs´ıho po nejvˇetˇs´ı a poˇc´ıt´a, o kolik a kam se maj´ı obr´azky posunout tak, aby navazovaly tzv. svˇeteln´e toky ve zmenˇsen´ ych obr´azc´ıch. Tento druh panoramat neklade takov´e n´aroky na implementaci a jejich tvorba je dobˇre pops´ana. Nev´ yhodou vˇsak pro uˇzivatele je, ˇze bude muset zad´avat odhad pˇrekryt´ı jednotliv´ ych obr´azk˚ u tak, aby nav´az´an´ı svˇeteln´ ych tok˚ u se neub´ıralo ˇspatn´ ym smˇerem. Posouv´ an´ı obr´ azk˚ u s prolnut´ım Tato varianta je zjednoduˇsen´ım jednorozmˇern´ ych panoramat a inspirovala se v pluginu Pandora viz [9] grafick´e aplikace Gimp. Zde uˇzivatel nejprve vloˇz´ı nafocen´e sn´ımky, seˇrad´ı je dle n´avaznosti, urˇc´ı jednotliv´a pˇrekryt´ı a po potvrzen´ı vstupn´ıch informac´ı dostane v´ ysledn´e panorama. Jednotliv´ ym sn´ımk˚ um jsou pˇriˇrazeny vrstvy a kraje navazuj´ıc´ıch sn´ımk˚ u jsou umaz´any. Jedin´ ym zp˚ usobem jak panoramata doladit je posouvat vrstvy sn´ımk˚ u v˚ uˇci sobˇe. Tato implementace je velice trivi´aln´ı a nezabrala by skoro ˇz´adn´ y ˇcas. Tato v´ yhoda je vˇsak vykoupena t´ım, ˇze ve v´ ysledku bude panorama obsahovat velk´e mnoˇzstv´ı nepˇresnost´ı, kter´e by byly na prvn´ı pohled patrn´e. Nav´ıc po vytvoˇren´ı panoramata nen´ı moˇzn´e pohodln´ ym zp˚ usobem mˇenit prolnut´ı obr´azk˚ u, jelikoˇz umaz´an´ı okraj˚ u je trval´e. Tato situace by se dala vyˇreˇsit pomoc´ı budouc´ı hierarchie panoramat. Na kaˇzd´em obr´azku, jeˇz bude podobjektem panoramatu, se budou moci pˇrid´avat, odeb´ırat a mˇenit filtry a zm´ınˇen´e odmaz´av´an´ı by bylo ˇreˇseno filtrem prolnut´ı do pr˚ uhledna. D´ale tento mechanismus postr´ad´a veˇskerou automatizaci tvorby panoramat a uˇzivatel je nucen si vytv´aˇret vˇse s´am.
1.4.2
Z´ avˇ ereˇ cn´ e rozhodnut´ı
Pro koneˇcnou tvorbu panoramat se rozhodl autor t´eto pr´ace vyuˇz´ıt druh´e varianty. Tato varianta by mˇela tvoˇrit jist´ y kompromis mezi kvalitou tvoˇren´ ych panoramat a m´ırou obt´ıˇznosti implementace. D´ale bude moci uˇzivatel v´ ysledek procesu tvorby panoramat modifikovat, jelikoˇz budou jednotliv´e operace reprezentov´any pozic´ı objekt˚ u a aplikac´ı filtr˚ u. Z hlediska 15
tvorby tohoto mechanismu bude potˇreba naimplementovat zmenˇsovac´ı filtr, jeˇz se vyuˇzije pro tvorbu grafick´ ych pyramid, soudkovac´ı filtr obstar´avaj´ıc´ı funkcionalitu projekce na v´alec, gradientn´ı filtr umoˇzn ˇuj´ıc´ı prolnut´ı a nakonec oˇrezov´ y filtr, jehoˇz n´azev popisuje funkcionalitu. Vˇsechny tyto filtry budou pops´any v n´asleduj´ıc´ı podkapitole.
1.5
Filtry
V t´eto sekci pr´ace nast´av´a ot´azka, jak´e druhy filtr˚ u by mˇely b´ yt vytvoˇreny. Sortiment filtr˚ u by mˇel pokr´ yt alespoˇ n z´akladn´ı poˇzadavky uˇzivatele. Bˇeˇznˇe uˇzivatel potˇrebuje upravovat sv´e rastrov´e obr´azky pro tvorbu grafiky um´ıstˇen´e na webu a jin´ ych m´ıstech. Bezesporu bude potˇrebovat mˇenit barvu a tvar zdrojov´ ych obr´azk˚ u. K tomuto u ´ˇcelu budou slouˇzit transformaˇcn´ı filtry a filtry pro pr´aci s barvou. Faktem je, ˇze zdrojov´e obr´azky vˇetˇsinou neb´ yvaj´ı vytvoˇreny s ˇ ide´aln´ı kvalitou. Casto se v nich nach´az´ı ˇsum a b´ yvaj´ı rozostˇren´e. K tomuto u ´ˇcelu bude slouˇzit kategorie konvoluˇcn´ıch filtr˚ u. D´ale je nutn´e uv´aˇzit, ˇze by filtry mˇely umˇet pracovat nad vektorov´ ym obrazem, jelikoˇz by AGE mˇel b´ yt vektorovˇerastrov´ y editor. U nˇekter´ ych filtr˚ u vˇsak tohoto poˇzadavku nelze doc´ılit, jelikoˇz jejich definice uvaˇzuje pouze obr´azky s rastrovou strukturou. Pˇr´ıkladem jsou konvoluˇcn´ı filtry. Tento probl´em se d´a vyˇreˇsit t´ım, ˇze se pro tyto filtry bude vektorov´ y obr´azek pˇrev´adˇet na rastrov´ y. A ten v t´eto podobˇe jiˇz z˚ ustane. T´ım vznikne dalˇs´ı kategorizace filtr˚ u. Vektrov´e filtry budou pracovat pˇr´ımo s vektorov´ ym obr´azkem, kdeˇzto rastrov´e filtry vyuˇzij´ı pˇrevodu.
1.5.1
Transformaˇ cn´ı filtry
Vˇsechny transformaˇcn´ı filtry ve sv´e podstatˇe funguj´ı obdobnˇe, pouze jin´ ym zp˚ usobem a s jin´ ym v´ ysledkem. Vezmou zdrojov´ y bod obr´azku s urˇcitou pozic´ı a prom´ıtnou jej do jin´e pozice, viz obr´azek 1.5. Pˇri t´eto operaci vˇsak m˚ uˇze doj´ıt ke zvˇetˇsen´ı ˇci specifick´e deformaci obr´azku, kter´a se neobejde bez n´avaznosti na jin´e body. Touto n´avaznost´ı je napˇr´ıklad myˇsleno, ˇze barva nˇekter´ ych bod˚ u se bude muset pr˚ umˇerovat dle specifick´ ych pravidel. Maticov´ e filtry Maticov´ y filtr je speci´aln´ım pˇr´ıpadem transformaˇcn´ıho filtru a prom´ıtnut´ı bodu je vyˇreˇseno pomoc´ı maticov´eho n´asoben´ı. K dan´e operaci jako je posunut´ı, otoˇcen´ı ˇci zkosen´ı odpov´ıd´a pˇr´ısluˇsn´a matice viz literatura [10]. Souˇradnice zdrojov´eho bodu tvoˇr´ı vektor [x, y] ten je pˇren´asoben zleva
16
projekce
bod bod
Obr´azek 1.5: Zn´azornˇen´ı operace transformaˇcn´ıho filtru. konkr´etn´ı matic´ı A a z dan´eho maticov´eho souˇcinu se z´ısk´a c´ılov´a pozice bodu [x0 , y 0 ]. V implementaci se bude postupovat opaˇcn´ y zp˚ usobem. Implementace se bude pt´at, jak´ y pˇr´ısluˇsn´ y bod bude n´aleˇzet do pˇredem urˇcen´e c´ılov´e pozice. Proto bude nutn´e n´asobit c´ılovou souˇradnici [x0 , y 0 ] inverzn´ı matic´ı k A, aby se z´ıskala souˇradnice zdroje [x, y]. Aby matice mˇela A inverzn´ı protˇejˇsek, nesm´ı b´ yt singul´arn´ı, coˇz zapˇr´ıˇcin´ı jist´a omezen´ı v implementaci. D˚ uvod pouˇzit´ı zpˇetn´e projekce je takov´ y, ˇze pˇri paraleln´ı aplikaci filtru pˇri obyˇcejn´e projekci by doch´azelo ke koliz´ım mezi jednotliv´ ymi vl´akny. Jak je moˇzno se d´ale v t´eto pr´aci doˇc´ıst, kaˇzd´emu vl´aknu bude pˇrisouzena ˇca´st rastrov´eho obrazu. Transformace obrazu vˇsak zp˚ usobuje, ˇze bod se m˚ uˇze prom´ıtnout i do ˇca´sti jin´eho vl´akna, neˇz zp˚ usobilo danou projekci. T´ım m˚ uˇze doj´ıt k pˇr´ıpadn´e kolizi pˇri zapisov´an´ı v´ ysledku transformace. Rotaˇ cn´ı filtr Tento filtr by mˇel umoˇzn ˇovat ot´aˇcet objekty ve sc´enˇe pomoc´ı definice u ´hlu otoˇcen´ı a spolupr´ace s myˇs´ı. Pro takovouto interakci s uˇzivatelem by mˇel b´ yt vytvoˇren n´astroj, kter´ y bude ovl´ad´an´ı myˇsi pˇred´avat filtru. Otoˇcen´ı objektu by mˇelo b´ yt provedeno okolo specifick´eho bodu, jeˇz m˚ uˇze b´ yt definov´an jako stˇred dan´eho objektu. A=
cos(φ) − sin(φ) sin(φ) cos(φ)
!
V´ yˇse se nach´az´ı pˇresn´a definice matice A pro rotaˇcn´ı filtr viz [10]. Znak φ znaˇc´ı u ´hel rotace. Zkosovac´ı filtr Na tento filtr by mˇely b´ yt kladeny podobn´e poˇzadavky jako na pˇredchoz´ı, s t´ım rozd´ılem, ˇze u tohoto filtru budou figurovat u ´hly dva a 17
nebude se nikam ot´aˇcet, n´ ybrˇz se pomoc´ı nˇej bude zkosovat obr´azek v˚ uˇci horizont´aln´ı nebo vertik´aln´ı ose o urˇcen´ yu ´hel se stˇredem definovan´em jako v pˇredchoz´ım filtru. A=
1 tan(α) tan(β) 1
!
Na uveden´e matici A, kter´a nebyla pˇrevzata z ˇz´adn´e literatury, znamen´a α u ´hel posunut´ı ve smˇeru vertik´aln´ı osy a β u ´hel posunut´ı ve smˇeru osy horizont´aln´ı. U t´eto matice se m˚ uˇze st´at, ˇze bude singul´arn´ı, jelikoˇz funkce tangenty m˚ uˇze nab´ yvat hodnot 1 ˇci −1 a velikost u ´hl˚ u je navz´ajem nez´avisl´a. Proto bude jejich absolutn´ı souˇcet omezen na 70 stupˇ n˚ u s jistou rezervou, aby se zbyteˇcnˇe nevytv´aˇrel velik´ y v´ ysledn´ y obr´azek a nezatˇeˇzoval tak aplikaci, jelikoˇz u souˇctu bl´ıˇz´ıc´ıho se k 90 stupˇ n˚ um vznikne z obr´azku u ´seˇcka konˇc´ıc´ı v nekoneˇcnu. Ostatn´ı filtry Tyto filtry se nedaj´ı d´ale kategorizovat, jelikoˇz jejich charakteristika je natolik specifick´a, ˇze by nemohla tvoˇrit ˇza´dnou ucelenou skupinu s podobnou funkcionalitou. Pˇ revracec´ı filtr Mˇel by umoˇzn ˇovat zrcadlov´eho pˇrevracen´ı objektu dle jeho vertik´aln´ı ˇci horizont´aln´ı osy. Oˇ rezov´ y filtr Pomoc´ı nˇeho by se mˇely d´at prov´adˇet v´ yˇrezy na pˇredloˇzen´ ych objektech. Pro tuto funkci by se bezesporu hodil n´astroj ovl´adac´ı tento filtr pomoc´ı myˇsi. V´ yˇrez by mˇel b´ yt specifikov´an vzd´alenostmi oˇrezov´ ych hran od stˇredov´eho bodu, pomoc´ı nˇehoˇz by se v´ yˇrez dal posouvat. Soudkovac´ı filtr Stejnˇe jako pˇredchoz´ı filtr bude tento filtr vytvoˇren z d˚ uvodu tvorby panoramat v t´eto aplikaci. Soudkov´an´ı pˇredstavuje prom´ıtnut´ı souˇradnic obr´azku na virtu´aln´ı v´alec a jeho pomysln´eho rozstˇrihnut´ı a rozbalen´ı do roviny viz [8]. Dan´a projekce by se mˇela d´at ovlivnit vzd´alenost´ı obr´azku od stˇredu v´alce a jeho polomˇerem. Dlaˇ zdiˇ ckovac´ı filtr Zde bude implementov´ana funkcionalita pro tvorbu textur, jelikoˇz je zbyteˇcn´e ˇclenit toto odvˇetv´ı do speci´aln´ı ˇca´sti. K u ´ˇcelu naprosto postaˇc´ı jeden filtr. Ze zdrojov´eho obr´azku nejprve odˇr´ızne kus z lev´e ˇci prav´e strany a vloˇz´ı ho na opaˇcnou stranu, kde se tento kus prolne zbytkem obr´azku. Prolnut´ım 18
je myˇsleno v´aˇzen´e m´ıch´an´ı barev pˇrem´ıstˇen´eho kusu a zbytku obr´azku dle ˇ ım bude vzd´alenost od kraje vˇetˇs´ı, t´ım bude v´aha barev vzd´alenosti od kraje. C´ pˇrem´ıstˇen´eho kusu menˇs´ı. T´ım se z´ıskal opakovateln´ y obr´azek v horizont´aln´ım smˇeru. A tato operace bude jeˇstˇe jednou analogicky provedena pro vertik´aln´ı smˇer. Zoom filtr Funkcionalitou tohoto filtru bude zvˇetˇsov´an´ı ˇci zmenˇsov´an´ı zdrojov´ ych obr´azk˚ u. V praxi existuje nˇekolik metod, jak prov´adˇet zmˇenu velikosti rastrov´eho obr´azku viz [11]. Pro implementaci tohoto filtru budou vybr´any jen nˇekter´e, kter´e je moˇzno vidˇet n´ıˇze. Nejbliˇ zˇ s´ı bod Tento algoritmus proch´az´ı c´ılovou bitmapu a pt´a se zdrojov´e bitmapy, jakou m´a m´ıt bod barvu. Ve sv´e podstatˇe vezme algoritmus souˇradnici c´ılov´eho bodu, prom´ıtne ji do zdrojov´e bitmapy viz obr´azek 1.6 a urˇc´ı, kter´ y bod zdrojov´e bitmapy je nejbl´ıˇze a jeho barvou obarv´ı c´ılov´ y bod. cílový pixel při zmenšení
cílový pixel při zvětšení
Obr´azek 1.6: Zn´azornˇen´ı prom´ıtnut´ı c´ılov´eho bodu do p˚ uvodn´ıho obr´azku.
Biline´ arnˇ e Algoritmus pracuje obdobnˇe jako ten pˇredchoz´ı s t´ım rozd´ılem, ˇze neurˇc´ı pouze jeden nejbliˇzˇs´ı bod, ale hned ˇctyˇri. Z tˇechto ˇctyˇrech bod˚ u se pak pomoc´ı v´aˇzen´eho m´ıch´an´ı barev z´ısk´av´a v´ ysledn´a barva. Zm´ınˇen´a ˇ ım v´aha pro toto m´ıch´an´ı je urˇcena vzd´alenost´ı pozice od konkr´etn´ıho bodu. C´ v´ıce vzd´alenˇejˇs´ı od bodu, t´ım menˇs´ı v´aha barvy. Supersampling U tohoto algoritmu je pˇr´ıstup odliˇsn´ y. Z c´ılov´e bitmapy se prom´ıt´a do zdrojov´e cel´ y ˇctverec urˇcuj´ıc´ı velikost rozmˇery pixelu. Podle toho, kam se ˇctverec pixelu prom´ıtne a jak´e body zdrojov´e bitmapy bude pˇrekr´ yvat, se provede nam´ıch´an´ı barvy c´ılov´eho pixelu. 19
Pixelizaˇ cn´ı filtr Tento filtr bude zmenˇsovat rozliˇsen´ı zdrojov´eho obr´azku pˇri zachov´an´ı rozmˇer˚ u. V´ ysledek by mˇel vypadat jako rozkostiˇckov´an´ı zdrojov´eho obrazu, kter´e by pro tento u ´ˇcel mˇelo vyuˇz´ıvat algoritm˚ u z pˇredeˇsl´eho filtru.
1.5.2
Konvoluˇ cn´ı filtry
Tyto filtry z´ıskaly sv˚ uj n´azev podle konvoluˇcn´ı masky, jeˇz pro svou pr´aci vyuˇz´ıvaj´ı. Konvoluˇcn´ı maska je oznaˇcen´ı pro ˇctvercovou matici definuj´ıc´ı v´ahy jednotliv´ y bod˚ u. Algoritmus tˇechto filtr˚ u prob´ıh´a tak, ˇze konvoluˇcn´ı maska rozmˇeru n∗n jede po zdrojov´em obr´azku a jednotliv´ ym bod˚ um pˇrisuzuje v´ahy dle hodnot v matici. Z tˇechto v´aˇzen´ ych barev se pomoc´ı m´ıch´an´ı dost´av´a barva c´ılov´eho bodu. Souˇradnice c´ılov´eho bodu b´ yv´a zpravidla stejn´a jako souˇradnice zdrojov´eho bodu, nad n´ımˇz se nach´az´ı stˇred konvoluˇcn´ı masky. Pro vytvoˇren´ı idei funkcionality tˇechto filt˚ u bylo ˇcerp´ano z [12], v n´ıˇz popis jednotliv´ ych ˇca´st´ı je dosti v´agn´ı. N´ızkofrekvenˇ cn´ı filtry Hlavn´ım u ´kolem tˇr´ıdy tˇechto filtr˚ u viz [12] je odstraˇ novat z rastrov´eho obrazu ˇsum. Ten b´ yv´a charakterizov´an skokovou zmˇenou obrazu, coˇz je ve sv´e podstatˇe vysok´a frekvence zmˇeny jasu. Filtry tedy budou propouˇstˇet pouze n´ızk´e frekvenˇcn´ı spektrum jasu. U tˇechto filtr˚ u ze d´a mˇenit velikost konvoluˇcn´ı masky a zapojit t´ım do operace v´ıce pixel˚ u. Nejmenˇs´ı maska vˇsak pˇrich´az´ı v u ´vahu o velikosti 3 ∗ 3, jelikoˇz souˇradnice c´ılov´eho bodu mus´ı leˇzet uprostˇred masky, a pˇr´ıpadn´e zvˇetˇsen´ı se provede ve skoc´ıch rozmˇer˚ u o dva. Nutnost´ı je, aby byl souˇcet hodnot konvoluˇcn´ıch masek 1. V pˇr´ıpadˇe, ˇze by tomu tak nebylo, doch´azelo by k zesvˇetlov´an´ı ˇci ztmavov´an´ı obrazu. Medi´ an Tento filtr viz [12] nepouˇz´ıv´a konvoluˇcn´ı masku jako takovou a dalo by se polemizovat, jestli zde m´a b´ yt tento filtr zaˇrazen. Na druhou stranu se jedn´a o n´ızkofrekvenˇcn´ı filtr, kter´ y posouv´a ˇctvercov´e ok´enko urˇcit´e velikosti po zdrojov´em obr´azku. V´ yˇrez ok´enka urˇc´ı body, ze kter´ ych se bude vypoˇc´ıt´avat medi´an barev. Tato barva bude v´ yslednou pro c´ılov´ y bod. Pr˚ umˇ erov´ e filtry Tyto filtry viz [12] budou dˇelat aritmetick´ y pr˚ umˇer barev bod˚ u, nad nimiˇz se nach´az´ı urˇcit´ y grafick´ y obrazec jako je ˇctverec, kosoˇctverec ˇci kruh. N´ıˇze jsou uvedeny pˇr´ıklady pˇr´ısluˇsn´ ych konvoluˇcn´ıch masek o velikosti 5∗5 .
20
1/25 1/25 1/25 1/25 1/25
1/25 1/25 1/25 1/25 1/25
1/25 1/25 1/25 1/25 1/25
1/25 1/25 1/25 1/25 1/25
1/25 1/25 1/25 1/25 1/25
0 0 1/13 0 0 0 1/13 1/13 1/13 0 1/13 1/13 1/13 1/13 1/13 0 1/13 1/13 1/13 0 0 0 1/13 0 0
Gauss˚ uv filtr Tento filtr viz [12] funguje obdobn´ y zp˚ usobem jako pˇredchoz´ı kategorie pr˚ umˇerov´ ych filtr˚ u s t´ım rozd´ılem, ˇze Gauss˚ uv filtr d´av´a vˇetˇs´ı v´ahu tˇem bod˚ um, kter´e se bl´ıˇz´ı v´ıce stˇredu. Toto rozdˇelen´ı je d´ano Gaussovou kˇrivkou, jeˇz maska bude aproximovat. Dalˇs´ı zp˚ usob, jak´ ym si lze vyloˇzit masku tohoto filtru je, ˇze masku tvoˇr´ı kvadr´at ˇra´dku Pascalova troj´ uheln´ıku s pˇr´ısluˇsn´ ym poˇctem ˇc´ısel. N´ıˇze je uvedena maska o velikosti 5 ∗ 5.
1 256
1 4 6 4 1 4 16 24 16 4 6 24 36 24 6 4 16 24 16 4 1 4 6 4 1
Vysokofrekvenˇ cn´ı filtry Tyto filtry viz [12] slouˇz´ı k detekci hran v obraze a oproti n´ızkofrekvenˇcn´ım filtr˚ um vysokou frekvenci jas˚ u vyhled´avaj´ı. Hled´an´ı hran je ˇreˇseno pomoc´ı parci´aln´ıch derivac´ı jasu. Jelikoˇz se zde bude pracovat na obr´azc´ıch a nikoliv na spojit´ ych funkc´ıch, bude muset b´ yt parci´aln´ı derivace aproximov´ana. K tomu budou slouˇzit pˇr´ısluˇsn´e aproximaˇcn´ı masky. Souˇcet hodnot tˇechto masek bude d´avat hodnotu 0 a jejich velikost bude vˇzdy konstantn´ı. Jak bylo zm´ınˇeno v [12], filtry se daj´ı vyuˇz´ıt i pro ostˇren´ı obrazu. Pro ostr´ y obraz je specifick´e, ˇze obsahuje velmi ostr´e hrany. Neostr´ y obraz by se dal doostˇrit t´ım, ˇze by se p˚ uvodn´ı obraz seˇcetl s detekovanou hranou. Dle autora t´eto pr´ace by se ostˇren´ı obrazu mˇelo doc´ılit t´ım, ˇze do prostˇredn´ı hodnoty masky se pˇriˇcte jedniˇcka, ˇc´ımˇz se pˇriˇcte i bod zdrojov´e bitmapy. D´ale by u tˇechto filtr˚ u byla vhodn´a moˇznost mˇenit efektivitu, respektive ji sniˇzovat. Toho autor t´eto pr´ace doc´ılil t´ım, ˇze se pˇr´ısluˇsn´a konvoluˇcn´ı maska vyn´asobila koeficientem nab´ yvaj´ıc´ım hodnoty mezi 0 a 1. To zapˇr´ıˇcinilo, ˇze charakteristika hrany nebude tak patrn´a. Pˇri z´amˇeru ostˇrit obr´azek se vˇsak mus´ı n´asoben´ı koeficientu aplikovat dˇr´ıve, neˇz se do konvoluˇcn´ı masky bude pˇriˇc´ıtat jedniˇcka.
21
Roberts˚ uv filtr Tento filtr pouˇz´ıv´a dvˇe konvoluˇcn´ı matice 2∗2 a to z´aroveˇ n. C´ılov´ y bod se nach´az´ı v lev´em horn´ım rohu kaˇzd´e konvoluˇcn´ı matice. V´ ypoˇcet prob´ıh´a tak, ˇze se vypoˇc´ıtaj´ı absolutn´ı jasy po aplikaci obou masek a seˇctou se. N´ıˇze jsou uvedeny zm´ınˇen´e masky. 1 0 0 −1
!
0 1 −1 0
!
Filtry prvn´ı parci´ aln´ı derivace Zde se vyuˇz´ıv´a prvn´ıch parci´aln´ıch derivac´ı, pˇri nichˇz se testuje kolmice na smˇer hrany (skokov´eho gradientu). Jak jiˇz bylo ˇreˇceno, derivace se mus´ı aproximovat. Zde se pouˇz´ıv´a osmice konvoluˇcn´ıch masek o velikosti 3 ∗ 3, pˇriˇcemˇz kaˇzd´a symbolizuje jin´ y smˇer derivace. Vˇsechny se postupnˇe aplikuj´ı a vybere se v´ ysledek t´e, jej´ıˇz aplikace vr´atila nejvˇetˇs´ı jas. Aproximace derivace jasu prob´ıh´a tak, ˇze jasy bod˚ u na jedn´e stranˇe konvoluˇcn´ı masky se pˇriˇctou a na druh´e odeˇctou. V pˇr´ıpadˇe, ˇze dan´e body maj´ı podobnou hladinu jasu, dost´av´a se zanedbateln´a zmˇena, jeˇz je reprezentov´ana ˇcernou barvou. Naopak v pˇr´ıpadˇe, ˇze jasy bod˚ u, kter´e se pˇriˇctou, budou pˇr´ıliˇs rozd´ıln´e oproti jas˚ um bod˚ u, kter´e se odeˇctou, pak bude v´ ysledek reprezentov´an barvou bl´ıˇz´ıc´ı se b´ıl´e a t´ım se zn´azorn´ı hrana. Moˇznost´ı, jak aproximovat derivace, je cel´a ˇrada, proto existuje v´ıce filtr˚ u ˇreˇs´ıc´ıch ten sam´ y probl´em. N´ıˇze jsou uvedeny masky pro smˇer zezdola nahoru: Sobelova, Prewittova, Robinsonova a Kirschova filtru viz [12]. Ostatn´ı masky pˇr´ısluˇsn´eho filtru se z´ıskaj´ı postupn´ ym ot´aˇcen´ım matice o 45 stupˇ n˚ u zvolen´ ym smˇerem.
1 2 1 1 1 1 1 1 1 3 3 3 0 0 0 0 0 1 −2 1 3 0 3 0 −1 −2 −1 −1 −1 −1 −1 −1 −1 −5 −5 −5 Laplac˚ uv filtr Filtr je jedin´ y z´astupce filtr˚ u pracuj´ıc´ıch s druhou derivac´ı. Oproti pˇredchoz´ı kategorii pouˇz´ıv´a najednou pouze jednu matici 3 ∗ 3 aproximuj´ıc´ı druhou derivaci, nebot’ u druh´e derivace nen´ı potˇreba urˇcovat nˇejak´ y smˇer, jelikoˇz pomoc´ı druh´e derivace se hled´a minimum ˇci maximum v obraze. Aproximace prob´ıh´a tak, ˇze se testuje jasov´a zmˇena bodu, kter´ y se odeˇc´ıt´a, oproti bod˚ um okoln´ım, jeˇz jejich jasov´e sloˇzky se pˇriˇc´ıtaj´ı. Tento filtr je definov´an ve ˇctyˇrech variant´ach viz [12], jejichˇz konvoluˇcn´ı masky jsou vidˇet n´ıˇze.
0 1 0 1 1 1 2 −1 2 −1 2 −1 1 −4 1 1 −8 1 −1 −4 −1 2 −4 2 0 1 0 1 1 1 2 −1 2 −1 2 −1
22
1.5.3
Barevn´ e filtry
Pˇri u ´vah´ach v t´eto sekci nebylo vyuˇzito ˇz´adn´ ych ciz´ıch zdroj˚ u a literatury. Tyto filtry mˇen´ı barvy jednotliv´ ych bod˚ u at’ uˇz vektorov´ ych ˇci rastrov´ ych obr´azk˚ u dle specifick´eho pravidla konkr´etn´ıho filtru. U tˇechto filtr˚ u by se mˇela operace na barvˇe delegovat do operac´ı na jednotliv´ ych barevn´ ych kan´alech, aby bylo moˇzn´e operaci na konkr´etn´ım kan´alu vylouˇcit. Delegac´ı operace do operac´ı na barevn´ ych kan´alech je myˇsleno, ˇze dan´a operace se bude prov´adˇet zvl´aˇst’ po jednotliv´ ych barevn´ ych sloˇzk´ach. Jasov´ y filtr Tento filtr bude umoˇzn ˇovat zmenˇsovan´ı ˇci zvˇetˇsovan´ı jasu na dan´em obr´azku, pomoc´ı pomˇern´eho m´ıchan´ı barvy bodu s ˇcernou ˇci b´ılou ˇ ım v´ıce v´ahy se bude pˇrikl´adat p˚ barvou. C´ uvodn´ı barvˇe, t´ım bude jas obr´azku v´ıce zachov´an. Kontrastov´ y filtr Funkcionalitou filtru bude zmˇena kontrastu zdrojov´eho obr´azku. Kontrast barvy se d´a ch´apat jako odstup b´ıl´e barvy jakoˇzto maxima a barvy ˇcern´e jakoˇzto minima. Tud´ıˇz nulovou barvou se rozum´ı barva ˇsed´a. Nab´ız´ı se pro zmenˇsen´ı kontrastu barvy pomˇerov´e m´ıch´an´ı se ˇsedivou barvou. Naopak zvˇetˇsen´ı kontrastu bude provedeno tak, ˇze se vezme odstup barvy od ˇsediv´e a s urˇcit´ ym koeficientem bude nav´ yˇsen. Bude-li barevn´a sloˇzka m´ıt menˇs´ı jas neˇz pˇr´ısluˇsn´a sloˇzka ˇsediv´e, bude jej´ı jas jeˇstˇe v´ıc sn´ıˇzen. Opaˇcn´ y pˇr´ıpad bude ˇreˇsen analogicky. Filtr zmˇ eny barvy U tohoto filtru budou m´ıt hlavn´ı roli v operaci dvˇe barvy. Prvn´ı, v˚ uˇci kter´e se bude porovn´avat barva bodu obr´azku. Porovn´an´ım se mysl´ı testov´an´ı podobnosti barev dle hodnoty jasu jednotliv´ ych kan´al˚ us urˇcitou toleranc´ı. V pˇr´ıpadˇe, ˇze barvy budou oznaˇceny jako shodn´e, barva bodu se nahrad´ı barvou druhou. Invertovac´ı filtr Jak je z n´azvu patrn´e, funkcionalitou toho filtru bude invertace jasu jednotliv´ ych kan´al˚ u, pˇriˇcemˇz inverz´ı jasu se rozum´ı pˇrevr´acen´ı rozd´ılu jasu od intenzity barevn´e sloˇzky ˇsediv´e zdola nahoru ˇci obr´acenˇe. Odbarvovac´ı filtr Zde bude prob´ıhat transformace barvy do barvy ˇsediv´e ˇsk´aly, jej´ıˇz kan´aly maj´ı stejnou hodnotu jasu. Pˇri t´eto operaci vˇsak bude muset b´ yt zachov´an celkov´ y jas barvy.
23
Obarvovac´ı filtr Obarvov´an´ım bitmapy se rozum´ı pomˇerov´e m´ıch´an´ı ˇ ım vˇetˇs´ı v´ahu bude konkr´etn´ı obarvovac´ı barvy s barvou bodu bitmapy. C´ m´ıt obarvovac´ı barva, t´ım bude barva obr´azku v´ıce t´onov´ana do t´eto barvy. Gradientn´ı filtr Tento filtr bude vytvoˇren jako jedna z funkˇcn´ıch ˇca´st´ı tvorby panoramat. Tato ˇc´ast m´a za u ´kol zpr˚ uhlednit okraje obr´azk˚ u tak, aby na sebe navazovaly. Jelikoˇz se jedn´a o prolnut´ı obr´azku s pr˚ uhlednou barvou, bude filtr naps´an obecnˇe. U tohoto prolnut´ı se bude moci nastavit barva, se kterou se obr´azek prolne. Rovnˇeˇz bude moˇzn´e urˇcovat smˇer tohoto prolnut´ı na obr´azku pomoc´ı poˇc´ateˇcn´ıho a koncov´eho bodu. Bylo by vhodn´e, aby byla poskytnuta moˇznost ovl´adat body myˇs´ı za pomoc´ı vytvoˇren´ı pˇr´ısluˇsn´eho n´astroje, jeˇz bude danou funkcionalitu poskytovat.
Obr´azek 1.7: Obr´azek zn´azorˇ nuj´ıc´ı otoˇcen´ı souˇradnic zdrojov´eho obr´azku pˇri aplikaci gradientn´ıho filtru. Poˇc´ateˇcn´ı a koncov´ y bod urˇcuj´ı vektor prolnut´ı nebo-li gradientu. Jak tento mechanismus bude fungovat? Jelikoˇz vektor gradientu m˚ uˇze m´ıt libovoln´ y smˇer, nelze snadno urˇcit, s jakou intenzitou m˚ uˇze b´ yt aplikov´ana barva gradientu. To znamen´a, ˇze se ned´a jednoznaˇcnˇe urˇcit, jestli bude gradientn´ı barva aplikov´ana s plnou intenzitou od koncov´eho bodu vpravo, vlevo, nahoru ˇci dolu. Ani jedna z moˇznos´ı nen´ı spr´avn´a, jelikoˇz gradient nesmˇeˇruje vˇzdy po vertik´aln´ı ˇci horizontaln´ı ose. Proto se obr´azek nejprve pootoˇc´ı, viz obr´azek 1.7 tak, ˇze bude smˇer gradientu smˇeˇrovat horizont´alnˇe zprava doleva. Ve skuteˇcnosti se pootoˇc´ı (pˇrepoˇc´ıtaj´ı) souˇradnice jednotliv´ ych bod˚ u obr´azku. T´ım se poˇca´teˇcn´ı a koncov´ y bod ocitnou na horizont´aln´ı ose. Pro tuto akci bude vyuˇzito vnitˇrn´ıch ˇc´ast´ı implementovan´ ych v rotaˇcn´ım filtru. Body, kter´e se vyskytnou vlevo od koncov´eho bodu, budou obarveny barvou gradientu. Naopak barvy napravo od poˇca´teˇcn´ıho bodu budou zachov´any. Mezi body bude provedeno pomˇerov´e m´ıchan´ı barvy bodu s barvou gradientu.
24
1.6
GUI
GUI (grafick´e uˇzivatelsk´e rozhran´ı) by mˇelo zpˇr´ıstupnit funkce aplikace pro pr´aci s filtry a panoramaty uˇzivateli. Uˇzivatel by mˇel pˇrehlednˇe vidˇet v´ ysledek sv´e pr´ace a jednoduˇse naj´ıt pˇr´ısluˇsn´a nastaven´ı. Grafick´e rozhran´ı by mˇelo vypadat zhruba tak, ˇze bude obsahovat pracovn´ı plochu, kde uvid´ı v´ ysledek sv´e pr´ace, menu s bˇeˇzn´ ymi prvky jako b´ yv´a naˇc´ıt´an´ı, ukl´ad´an´ı, apod. a d´ale r˚ uzn´e informativn´ı ˇca´sti, kter´e by usnadnily se orientovat v pr´aci uˇzivatele. Nyn´ı je nutn´e se rozhodnout, jakou technologii pro tvorbu grafick´eho rozhran´ı zvolit. Budou zde zm´ınˇeny pouze dvˇe varianty, kter´e obsahuje prostˇred´ı .NET. Ostatn´ı byly rovnou zavrˇzen´e, jelikoˇz by bylo jejich pouˇzit´ı komplikovanˇejˇs´ı. WinForms je technologie vyuˇz´ıvaj´ıc´ı staˇriˇck´e Win32 API. Tuto technologii autor t´eto pr´ace dobˇre zn´a, a nebyl by probl´em ji pouˇz´ıt. D´ale se nab´ız´ı moˇznost pouˇz´ıt tehnologii Windows Presentation Foundation zkr´acenˇe WPF. Jej´ı velikou v´ yhodou je, ˇze sv´e zobrazen´ı prezentuje pomoc´ı DirectX. S touto technologi´ı nem´a autor ˇza´dn´e pˇredchoz´ı zkuˇsenosti. Nakonec se vˇsak autor rozhodl vyuˇz´ıvat technologie WPF, jelikoˇz se ji chce nauˇcit. Tato technologie by mˇela m´ıt pˇred sebou perspektivn´ı budoucnost. Nav´ıc GUI v´ ysledn´e aplikace AGE by mˇelo b´ yt pomoc´ı WPF vytvoˇreno. ˇ C´asti aplikace pro nastaven´ı filtr˚ u a tvorby panoramat by pozdˇeji mohly b´ yt pouˇzity v GUI aplikace AGE.
25
Kapitola 2 Implementace Tato kapitola popisuje podrobn´ y n´ahled na implementaci knihoven a ˇ aˇr zde v´ ysledn´e aplikace pro pr´aci s panoramaty a grafick´ ymi filtry. Cten´ nalezne rozdˇelen´ı jednotliv´ ych blok˚ u funkcionalit do knihoven a jmenn´ ych prostor˚ u. Je zde pˇresnˇe zobrazeno, jak k´od t´eto pr´ace navazuje na k´od pr´ace [1]. A v neposledn´ı ˇradˇe se zde nalezne popis jednotliv´ ych implementovan´ ych tˇr´ıd s jejich vz´ajemn´ ymi n´avaznostmi.
2.1
Z´ akladn´ı n´ avrh
K´od t´eto pr´ace je u ´zce spjat s k´odem pr´ace [1]. Na obr´azku 2.1 je ˇ zn´azornˇeno, jak jsou jednotliv´e knihovny obou prac´ı propojeny. Sedivˇ e jsou vyznaˇceny knihovny, v nichˇz se nach´az´ı k´od t´eto pr´ace. Na obr´azku se vˇsak nevyskytuj´ı vˇsechny ˇca´sti pr´ace [1], jelikoˇz nejsou prov´az´any s knihovnami t´eto pr´ace, z ˇcehoˇz vypl´ yv´a, ˇze nejsou potˇrebn´e pro chod aplikace t´eto pr´ace. Z´aroveˇ n se zde daj´ı naj´ıt ˇca´sti obsaˇzen´e v pr´aci [2], jeˇz tato pr´ace pˇr´ımo nevyuˇz´ıv´a. V n´asleduj´ıc´ım seznamu jsou struˇcnˇe pops´any obsaˇzen´e funkˇcn´ı ˇca´sti jednotliv´ ych knihoven t´eto pr´ace. Pozdˇeji se vˇsak dostane podrobnˇejˇs´ıho popisu. Age.Core.Render.Render2D Obsahuje implementaci barev, bitmap a mimo jin´e vektorov´ ych kˇrivek z pr´ace [1]. Tyto grafick´e prvky se budou moci vyuˇz´ıvat r˚ uzn´ ymi objekty, kter´e je budou modifikovat, napˇr´ıklad grafick´e filtry. Age.Core.Filters Obsahuje veˇsker´ y k´od, kter´ y nˇejak´ ym zp˚ usobem souvis´ı s filtry. Existuj´ı zde konkr´etn´ı filtry, ale i jejich abstraktn´ı tˇr´ıdy a n´astroje pro nˇekter´e z nich, jeˇz jsou d˚ uleˇzit´e pro snadnˇejˇs´ı interakci mezi aplikac´ı a uˇzivatelem. 26
Age.Application.Dev.FiltersApplication
Age.Application.Main
Age.Application.Dev.Filters
Age.Core.Panoramas
Age.Core.Filters
Age.Application.Dev.Editor2D
Age.Application.Controls
Age.Core.Objects.Objects2D
Age.Core.Curves
Age.Core.Scene
Age.Core.Render.Render2D
Age.Core.Scene.Tree
Age.Core.Utils
Obr´azek 2.1: Digram popisuj´ıc´ı z´avislosti jednotliv´ ych knihoven t´eto pr´ace. Nejsou zde zn´azornˇeny tranzitivn´ı z´avislosti. Age.Core.Panoramas Zde lze nal´ezt implementaci panoramat, jeˇz pro svoj´ı tvorbu vyuˇz´ıvaj´ı nˇekter´e grafick´e filtry. Age.Dev.Filters Obsahuje grafick´e komponenty, z nichˇz se skl´ad´a v´ ysledn´e GUI. Age.Application.Controls Rovnˇeˇz obsahuje grafick´e komponenty pro v´ ysledn´e GUI. D´ale tato aplikace vyuˇz´ıv´a komponenty pr´ace [1] v Age.Application.Dev.Editor2D. Rozdˇelen´ı komponent do v´ıce knihoven je d˚ usledkem toho, ˇze bylo nutn´e odseparovat pr´aci jednotliv´ ych autor˚ u. Nav´ıc pr´ace [1] potˇrebovala 27
pouˇz´ıvat komponenty obsaˇzen´e v Age.Application.Controls, a z´aroveˇ n nebylo moˇzn´e, aby vyuˇzit´ı prob´ıhalo pˇr´ımo z knihovny Age.Dev.Filters, jelikoˇz nˇekter´e z komponent t´eto knihovny vyuˇz´ıvaj´ı komponenty pr´ace [1] v Age.Application.Dev.Editor2D. Toto celkov´e rozdˇelen´ı knihoven je prozatimn´ı a pro v´ yslednou aplikaci AGE bude sjednoceno. Age.Dev.FiltersApplication Tento projekt je vytvoˇren pouze ke spouˇstˇen´ı aplikace a vyuˇz´ıv´a pˇredeˇsl´e knihovny komponent.
2.2
Barvy
Ve jmenn´em prostoruAge.Core.Render.Render2D.Colors se nach´az´ı veˇsker´ y k´od reprezentace barev. Nalezne se zde nˇekolik struktur a rozhran´ı, kter´e reprezentuj´ı barvu, jeˇz se daj´ı mezi sebou pˇrev´adˇet jak je to vyznaˇcen´e na obr´azku 2.2. D´ale jsou zde obsaˇzeny i dva v´ yˇctov´e typy.
IAgeColor
AgeRgbColor
AgeLabColor
AgeCmykColor
převody
Obr´azek 2.2: Diagram popisuj´ıc´ı hierarchii tˇr´ıd barev.
AgeColorStatus V´ yˇctov´ y typ ud´avaj´ıc´ı pˇr´ıznak, jestli je barva pr´azdn´a, pr˚ uhledn´a ˇci norm´aln´ı. Norm´aln´ı barva je jak´akoliv barva, u kter´e lze rozpoznat urˇcit´ y barevn´ y odst´ın. Naopak pr˚ uhledn´a a pr´azdn´a barva ˇz´adn´ y barevn´ y odst´ın nemaj´ı. Rozd´ıl mezi pr˚ uhlednou a pr´azdnou barvou je takov´ y, ˇze pr˚ uhledn´a barva m´a pˇri m´ıch´an´ı dvou barev urˇcitou v´ahu, z ˇcehoˇz plyne, ˇze pr˚ uhledn´a barva ovlivn´ı v´ ysledek, kdeˇzto pr´azdn´a barva se pˇri m´ısen´ı u ´plnˇe zanedb´av´a.
28
GrayscaleConversionType V´ yˇctov´ y typ ud´av´a, jakou metodou se bude barva pˇrev´adˇet na stupeˇ n ˇsedi. IAgeColor Kaˇzd´a tˇr´ıda reprezentuj´ıc´ı barvu mus´ı implementovat toto rozhran´ı. Jsou v nˇem definov´any pˇrevody z a do struktury AgeLabColor. AgeRgbColor Tato struktura reprezentuje barvu v RGB modelu a je j´ı moˇzno pˇrev´edˇet do struktury AgeLabColor. AgeCmykColor Tato struktura reprezentuje barvu v CMYK modelu a je j´ı moˇzno pˇrev´adˇet do struktury AgeLabColor. AgeLabColor Pˇredstavuje implementaci nadprostoru viditelnosti lidsk´eho oka zm´ınˇen´eho v kapitole Anal´ yza. Jak jiˇz bylo uvedeno, dan´ y prostor je zat´ım implementov´an provizornˇe, a to tak, ˇze se z a do RGB prostoru pˇrev´ad´ı jako jeho 16ti bitov´e zjemnˇen´ı pro barevn´ y kan´al. Standardnˇe se pro RGB kan´al vyuˇz´ıv´a 8 bit˚ u. K tomuto provizorn´ımu ˇreˇsen´ı vedlo usnadnˇen´ı pr´ace a situace, ˇze se pro zobrazov´an´ı zat´ım nebude pouˇz´ıvat jin´ y neˇz RGB model. Pozdˇeji by mˇel pˇrevod vypadat tak, ˇze se rozestupy mezi jednotliv´ ymi u ´rovnˇemi kan´alu budou pˇrev´adˇet z AgeLabColor do AgeRgbColor jedna ku jedn´e a AgeLabColor bude skuteˇcn´ ym nadprostorem lidsk´eho oka.
2.3
Bitmapy
Implementace bitov´ ych map, respektive reprezentace rastrov´eho obrazu, je obsaˇzena celkem ve tˇrech jmen´ ych prostorech. Age.Core.Render.Render2D.BitmapThreadPool Zde se vyskytuje mechanismus umoˇzn ˇuj´ıc´ı paraleln´ı operace na bitov´ ych map´ach, jeˇz bude pops´an pozdˇeji. Age.Core.Render.Render2D.Bitmaps Obsahuje implementaci reprezentace bitov´e mapy AgeBitmap a mechanismy pro zmˇenu jej´ı velikosti. AgeBitmap Tato tˇr´ıda pˇredstavuje bitovou mapu. Pod touto tˇr´ıdou si ve zjednuˇsen´e formˇe lze pˇredstavit pole struktur AgeLabColor uloˇzen´e
29
po sloupc´ıch, kter´e reprezentuj´ı barvu pixelu. Jsou zde definov´any pˇr´ıstupy k jednotliv´ ym pixel˚ um pomoc´ı dvourozmˇern´ ych souˇradnic. Lze zde naj´ıt i dalˇs´ı funkce, napˇr´ıklad konverze do jin´ ych reprezentac´ı bitov´ ych map, konkr´etnˇeji do bitmapy pouˇz´ıvan´e v prostˇred´ı .NET. Tuto bitovou mapu lze nal´ezt ve jmenn´em prostoru System.Drawing. Vyrendrování scény
Scene2D
RenderedGroup
BitmapImage
RenderedCurves
Group
RenderedBitmap
RenderedBitmap BitmapImage
Curves
rastrové vyrenderování
vektorové vyrenderování
skupinové vyrenderování
Obr´azek 2.3: Diagram popisuj´ıc´ı hierarchii vyrenderov´an´ı v z´avislosti na zdrojov´ ych objektech. Age.Core.Render.Render2D.Rendered Z hlediska bitmap obsahuje pouze jednu tˇr´ıdu autora t´eto pr´ace se jm´enem RenderedBitmap, kter´a umist’uje reprezentaci rastru do hierarchie vyrenderov´an´ı AGE. Mimo jin´e jsou zde obasaˇzeny jin´e implementaˇcn´ı prvky, jeˇz jsou souˇca´st´ı [1]. Pro pochopen´ı situace bude pops´ana hierarchie sc´eny AGE, kter´a je pˇredmˇetem pr´ace [1]. Pod sc´enou je si tˇreba pˇredstavit kresl´ıc´ı pl´atno s mnoˇzinou objekt˚ u reprezentuj´ıc´ı grafick´e u ´tvary, jejichˇz tˇr´ıdy jsou uloˇzen´e ve jmenn´em prostoru pr´ace [1] Age.Age.Core.Objects.Objects2D. Tato mnoˇzina objekt˚ u tvoˇr´ı stromovou strukturu. Obr´azek 2.3 popisuje n´asdleduj´ıc´ı situaci. Aby byl objekt vykreslen (vyrenderov´an), mus´ı vr´atit sv´e vykreslen´ı reprezentovan´e tˇr´ıdou Rendered. Tato vyrenderov´an´ı se vykresluj´ı do sebe dle u ´rovnˇe stromov´e struktury. Vyrenderov´an´ı potomka je vˇzdy vykresleno do vyrenderov´an´ı nadˇr´ızen´eho objektu a to pokraˇcuje aˇz do objektu sc´eny, jeˇz pˇredstavuje koˇren stromu. Vyrenderov´an´ı mohou b´ yt rozd´ıln´a, napˇr´ıklad vektorov´a, skupinov´a ˇci rastrov´a. V pˇr´ıpadˇe, ˇze na jedn´e u ´rovni stromov´e hierarchie se vyskytuje rastrov´e a vektorov´e ˇci skupinov´e vyrenderov´an´ı, je vektorov´e ˇci skupinov´e vyrenderov´an´ı pˇrevedeno na rastrov´e. Toto 30
pˇretypov´an´ı se d´ale ˇs´ıˇr´ı do horn´ıch pater stromov´e hierarchie vyrenderov´an´ı. Rendered Abstraktn´ı tˇr´ıda reprezentuj´ıc´ı obecn´e vyrenderov´an´ı a je souˇc´ast´ı pr´ace [1]. RenderedBitmap Tato tˇr´ıda byla vytvoˇrena autorem t´eto pr´ace pro zapojen´ı bitov´ ych map do hierarchie vykreslov´an´ı. Obsahuje funkcionalitu, kter´a vykresluje vyrenderov´an´ı do vyrenderov´an´ı a pro reprezentaci bitov´e mapy ve sv´e podstatˇe RenderedBitmap zaobaluje tˇr´ıdu AgeBitmap. Drˇz´ı na ni referenci. Veˇsker´e veˇrejn´e metody a vlastnosti jsou znovu naps´any v RenderedBitmap a pˇrepos´ıl´any na referencovanou tˇr´ıdu. RenderedCurves Tˇr´ıda reprezentuj´ıc´ı vektorov´e vyrenderov´an´ı, jeˇz m´a obdobnou u ´lohu jako RenderedBitmap s vektorovou formou. Tˇr´ıda je souˇca´st´ı pr´ace [1]. RenderedGroup Rovnˇeˇz tˇr´ıda obsaˇzen´a v pr´aci [1] reprezentuje vyrenderov´an´ı skupiny objekt˚ u.
2.3.1
Zmˇ ena velikosti
Jak uˇz bylo zm´ınˇeno, kaˇzd´ y objekt ve sc´enˇe AGE, aby mohl b´ yt vykreslen, mus´ı vr´atit sv´a vyrenderov´an´ı a ta se daj´ı vykreslovat do sebe. U kaˇzd´eho vyrenderov´an´ı je definov´an obd´eln´ıkov´ y v´ yˇrez ud´avan´ y v abstraktn´ıch AGE jednotk´ach, kter´e jsou ekvivalentn´ı metrick´e stupnici v milimetrech. V´ yˇrez urˇcuje velikost a pozici vyrenderov´an´ı v˚ uˇci vyrenderov´an´ı rodiˇcovsk´eho objektu a rozliˇsen´ı urˇcen´e vztahem mezi AGE jednotkou a poˇctem pixel˚ u. Jelikoˇz vyrenderov´an´ı mohou m´ıt rozd´ıln´a rozliˇsen´ı, je nutn´e je sjednotit pˇri vykreslov´an´ı jednoho vyrenderov´an´ı do druh´eho. Zmˇena rozliˇsen´ı na vektorov´em obr´azku se provede jednoduˇse, prostˇe se zmˇen´ı. Naopak u rastrov´eho obr´azku prob´ıh´a zmˇena sloˇzitˇeji. Velikost rozliˇsen´ı u rastrov´eho obr´azku je urˇcena pomˇerem velikosti bitmapy, kter´a je pevn´a, a velikost´ı v´ yˇrezu. Tud´ıˇz bude zde nutn´e mˇenit velikost bitmapy. Ke zmˇenˇe velikosti bitmapy slouˇz´ı implementaˇcn´ı prvky obsaˇzen´e ve jmenn´em prostoru Age.Core.Render.Render2D.Bitmaps. AgeBitmapRescaler Statick´a tˇr´ıda obsahuje naimplementovan´e metody pro zmˇenu velikosti, 31
o nichˇz bylo pojedn´ano v pˇredchoz´ı kapitole. AgeBitmapRescalerType V´ yˇctov´ y typ, kter´ y slouˇz´ı jako identifik´ator metody pro zmˇenu velikosti bitmapy v pˇr´ıpadˇe, ˇze je potˇreba zmˇenit velikost bitov´e mapy.
2.3.2
Paralelismus na bitmapˇ e
V dneˇsn´ı dobˇe mnoho poˇc´ıtaˇc˚ u obsahuje nˇekolik procesorov´ ych jader a je efektivn´ı, kdyˇz se mohou v´ ypoˇcty prov´adˇet paralelnˇe. Z tohoto d˚ uvodu byl vytvoˇren mechanismus, jeˇz umoˇzn ˇuje paralelizovat operace na bitov´e mapˇe. AbstractBitmapThreadParameter 1
BitmapThreadPool 2
Thread
Thread
Obr´azek 2.4: Diagram zobrazujc´ı vztah objekt˚ u v mechanismu paraleln´ı pr´ace na rastru. BitmapThreadPool Tato tˇr´ıda stoj´ı za reprezentac´ı zm´ınˇen´eho mechanismu. Jak tedy cel´ y mechanismus funguje? Obr´azek 2.4 zn´azorˇ nuje situaci v n´asleduj´ıc´ıch bodech. Bod 1. Pomoc´ı parametr˚ u jsou BitmapThreadPool pˇred´any informace o prov´adˇen´e operaci. Ty obsahuj´ı c´ılovou bitmapu s deleg´atem na prov´adˇenou operaci a dalˇs´ı pomocn´e informace, kter´e lze vyˇc´ıst z program´atorsk´e dokumentace. Tyto informace jsou reprezentov´any tˇr´ıdou AbstractBitmapThreadParameter. Bod 2. D´ıky tomu, ˇze AbstractBitmapThreadParameter obsahuje informaci o poˇctu sloupc˚ u v c´ılov´e bitmapˇe, BitmapThreadPool rozhodne, kolik paraleln´ıch bˇeh˚ u se provede. Tento poˇcet nikdy nepˇres´ahne poˇcet jader v´ ypoˇcetn´ıho stroje. Kaˇzd´emu bˇehu je pˇrisouzen urˇcit´ y poˇcet sloupc˚ u c´ılov´e bitmapy, na nichˇz bude pracovat. Jednotliv´e bˇehy 32
jsou reprezentov´any pomoc´ı tˇr´ıdy Thread ze jmenn´eho prostoru System.Threading prostˇred´ı .NET. Kaˇzd´emu bˇehu pˇred jeho spuˇstˇen´ım se opˇet pˇred´a parametr AbstractBitmapThreadParameter, jak jiˇz bylo u BitmapThreadPool. AbstractBitmapThreadParameter Abstraktn´ı tˇr´ıda reprezentuj´ıc´ı parametr informac´ı pˇred´avan´ y BitmapThreadPool. BitmapThreadParameter Tˇr´ıda podˇedˇen´a od AbstractBitmapThreadParameter reprezentuje konkr´etn´ı parametr, u kter´eho se pˇredpokl´ad´a, ˇze pro prov´adˇenou operaci bude staˇcit pouze jedna bitov´a mapa. Ta bude slouˇzit jak pro z´ısk´av´an´ı zdrojov´ ych barevn´ ych bod˚ u, tak i pro uloˇzen´ı v´ ysledku. BitmapThreadCopyParameter Potomek BitmapThreadParameter, kter´ y poˇc´ıt´a s t´ım, ˇze budou pro operaci potˇrebn´e bitmapy dvˇe, a to bitmapa zdroje dat a bitmapa, do kter´e se uloˇz´ı v´ ysledek operace. Vˇsechny tˇr´ıdy parametr˚ u jsou generick´e, coˇz poskytuje moˇznost pracovat jak s AgeBitmap, tak i s RenderedBitmap.
2.4
Filtry a jejich n´ astroje
V pˇredchoz´ı kapitole bylo ˇreˇceno, ˇze existuj´ı r˚ uzn´e kategorie filtr˚ u. To se prom´ıtlo do rozdˇelen´ı implementace mezi jmenn´e prostory. Age.Core.Filters V tomto hlavn´ım koˇrenov´em jmenn´em prostoru se nach´az´ı k´od nejabstraktnˇejˇs´ıch tˇr´ıd a specifikace vˇetˇsiny rozhran´ı, kter´e budou pops´any pozdˇeji. Age.Core.Filters.ColorFilters Obsahuje tˇr´ıdy filtr˚ u pro pr´aci s barvou. Age.Core.Filters.TransformationFilters Zde se nach´azej´ı tˇr´ıdy a rozhran´ı implementuj´ıc´ı transformaˇcn´ı filtry. Age.Core.Filters.ConvolutionMaskFilters Zde jsou obsaˇzeny abstraktn´ı tˇr´ıdy se spoleˇcnou funkcionalitou pro vˇsechny konvoluˇcn´ı filtry. Age.Core.Filters.ConvolutionMaskFilters.LowFrequencyFilters Tento prostor je urˇcen pro n´ızkofrekvenˇcn´ı (vyhlazovac´ı) filtry.
33
Age.Core.Filters.ConvolutionMaskFilters.HighFrequencyFilters Tento prostor je vyhrazen pro tˇr´ıdy vysokofrekvenˇcn´ıch (ostˇr´ıc´ıch) filtr˚ u. Age.Core.Filters.Tools Obsahuje n´astroje pro vybran´e filtry, kter´e by mˇely usnadnit pr´aci uˇzivateli.
2.4.1
Nejobecnˇ ejˇ s´ı tˇ r´ıdy filtr˚ u
IFilter
Filter
Ostatní rozhraní
RasterFilter VectorFilter
ConvolutionMaskFilter
TransformationRasterFilter
TransformationVectorFilter
HighFrequencyFilter
Konkrétní filtry
Konkrétní filtry
MatrixFilter
Konkrétní filtry
Konkrétní filtry
Konkrétní filtry
ColorFilter
ColorFilterWithAlpha
Konkrétní filtry
Konkrétní filtry
Konkrérní filtry
Obr´azek 2.5: Diagram hierarchie dˇediˇcnosti abstraktn´ıch tˇr´ıd filtr˚ u. Jak uˇz bylo ˇreˇceno, Age.Core.Filters obsahuje tˇr´ıdy, kter´e tvoˇr´ı nejvrchnˇejˇs´ı patra stromov´eho uspoˇra´d´an´ı dˇediˇcnosti. Na obr´azku 2.5 je zn´azornˇena dˇediˇcnost abstraktn´ıch tˇr´ıd filtr˚ u. IFilter Toto rozhran´ı slouˇz´ı jako prvek kolekˇcn´ı tˇr´ıdy FilterManager. FilterManager pln´ı funkci mechanismu pro postupnou aplikaci filtru na objekt ve sc´enˇe a je spoleˇcnˇe se zm´ınˇen´ ym rozhran´ım souˇca´st´ı pr´ace [1] a je moˇzn´e jej naj´ıt v prostoru Age.Core.Scene.Scene2D.Filters. Filter Tˇr´ıda tvoˇr´ı samotn´ y koˇren hierarchie dˇediˇcnosti a implementuje pˇredevˇs´ım metody rozhran´ı IFilter. 34
RasterFilter Tˇr´ıda dˇed´ı od tˇr´ıdy Filter. Jsou zde definov´any metody pro paraleln´ı aplikaci filtru na bitovou mapu. Od vˇsech potomk˚ u t´eto tˇr´ıdy, jeˇz nebudou ve vˇetvi dˇed´ıc´ı od VectorFilter, se pˇredpokl´ad´a, ˇze kdyˇz obdrˇz´ı libovoln´e vyrenderov´an´ı, pˇrevedou si ho na rastrovou podobu. VectorFilter Tˇr´ıda dˇed´ı od RasterFilter. U tˇr´ıd dˇed´ıc´ıch od VectorFilter bude pˇr´ısluˇsn´a operace filtru na vektorov´e vyrenderov´an´ı aplikov´ana vektorovˇe. V popisovan´em prostoru se d´ale vyskytuj´ı rozhran´ı, jeˇz maj´ı b´ yt spoleˇcn´ ym reprezentantem filtr˚ u s podobnou specifickou charakteristikou, kter´a je zejm´ena uplatnˇena pˇri implementaci grafick´eho rozhran´ı. Tato rozhran´ı takt´eˇz jako tˇr´ıda Filter implementuj´ı rozhran´ı IFilter z d˚ uvodu pˇr´ıstupu k metod´am ˇci vlastnostem implementovan´ ych ve Filter pˇri pˇretypov´an´ı na dan´e rozhran´ı. Pro podrobnˇejˇs´ı popis rozhran´ı je dobr´e se pod´ıvat do program´atorsk´e dokumentace. IEffectivityFilter Tˇr´ıdy implementuj´ıc´ı rozhran´ı mohou mˇenit intenzitu p˚ usobnosti filtru. T´ım je myˇsleno, ˇze lze u filtru nastavit m´ıru zmˇeny, kterou filtr provede. IDifferentColorFilter Toto rozhran´ı zaruˇcuje, ˇze operace pˇr´ısluˇsn´eho filtru na urˇcit´em pixelu bude provedena po barevn´ ych sloˇzk´ach a dle nastaven´ı filtru lze aplikaci operace na jednotliv´ ych sloˇzk´ach vynechat. IDifferentColorFilterWithAlfa Toto rozhran´ı dˇed´ı od IDifferentColorFilter a umoˇzn ˇuje oproti rodiˇci modifikovat kan´al alfa. IResizableFilter Rozhran´ı definuj´ıc´ı konvoluˇcn´ı filtry, u kter´ ych se d´a mˇenit velikost konvoluˇcn´ı masky. Viz sekce s N´ızkofrekvenˇcn´ımi filtry.
2.4.2
Barevn´ e filtry
Barevn´e filtry, nach´azej´ıc´ı se ve jmenn´em prostoru Age.Core.Filters.ColorFilters, lze povaˇzovat za filtry vektorov´e a je nutno zm´ınit, ˇze barevn´e filtry vyuˇz´ıvaj´ı speci´aln´ıho mechanismu pro aplikaci operace filtru na vektorov´e vyrenderov´an´ı. Tento mechanismus, jeˇz je implementov´an v kaˇzd´e tˇr´ıdˇe vyrenderov´an´ı ze jmenn´eho prostoru Age.Core.Render.Render2D, vznikl z toho d˚ uvodu, aby bylo moˇzn´e 35
jednoduch´ ym zp˚ usobem mˇenit barvu na jednotliv´ ych vyrenderov´an´ıch v pr´aci [1]. Ve sv´e podstatˇe jsou na filtru definov´any dvˇe operace. Jedna pro modifikaci barvy a druh´a pro paraleln´ı modifikaci bitov´e mapy. Tyto operace jsou pˇred´any zm´ınˇen´emu mechanismu vyrenderov´an´ı, ten dle uv´aˇzen´ı zvol´ı pˇr´ısluˇsnou operaci. Pro pˇremˇenu vektorov´eho vyrenderov´an´ı se vyuˇzije operace barvy a pro rastrov´e vyrenderov´an´ı naopak operace bitmapov´a. ColorFilter Nejabstraktnˇejˇs´ı tˇr´ıda barevn´ ych filtr˚ u dˇed´ı od tˇr´ıdy VectorFilter, viz obr´azek 2.1. Tˇr´ıda implementuje rozhran´ı IEffectivityFilter pro zmˇenu intenzity filtru a d´ale rozhran´ı IDifferentColorFilter pro moˇznost aplikovat filtr zvl´aˇst’ na barevn´e sloˇzce. Od t´eto tˇr´ıdy dˇed´ı tˇr´ıdy konkr´etn´ıch filtr˚ u jako je BrightnessFilter, ContrastFilter a GrayScaleFilter. ColorFilterWithAlpha Tato tˇr´ıda je potomkem ColorFilter viz obr´azek 2.1. D´ıky tomu, ˇze implementuje rozhran´ı IDifferentColorFilterWithAlfa, jej´ı potomci mohou modifikovat alfa kan´al. Mezi tyto potomky se ˇrad´ı OverlayFilter,ColorInvertFilter a ColorChangeFilter.
2.4.3
Transformaˇ cn´ı filtry
U transformaˇcn´ıch filtr˚ u, nach´azej´ıc´ıch se ve jmenn´em prostoru Age.Core.Filters.TransformationFilters, nen´ı situace zaˇrazen´ı filtr˚ u jednoznaˇcn´a. Existuj´ı zde dvˇe vˇetve tˇr´ıd. Jedna vˇetev reprezentuje transformaˇcn´ı rastrov´e filtry a druh´a ty vektorov´e. TransformationRasterFilter Tato abstraktn´ı tˇr´ıda reprezentuje rastrovou vˇetev transformaˇcn´ıch filtr˚ u a tud´ıˇz dˇed´ı od RasterFilter viz obr´azek 2.1. Zm´ınˇen´a vˇetev zahrnuje filtry, kter´e si pro svoj´ı aplikaci pˇrevedou vektorov´e vyrenderov´an´ı na rastrov´e. Mezi tyto filtry patˇr´ı CropFilter, TileFilter a CylinderFilter, kter´e dˇed´ı pˇr´ımo od popisovan´e abstraktn´ı tˇr´ıdy. TransformationVectorFilter Tato abstraktn´ı tˇr´ıda pro zmˇenu reprezentuje vˇetev vektorov´ ych trans’ formaˇcn´ıch filtr˚ u. Filtry v t´eto vˇetvi pracuj´ı zvl´aˇst s vektorov´ ym a rastrov´ ym obrazem. Tato vˇetev je d´ale ˇclenˇena na filtry, jejichˇz tˇr´ıdy pˇr´ımo dˇed´ı od zm´ınˇen´e abstraktn´ı tˇr´ıdy,sem patˇr´ı tˇr´ıdy OverturnFilter, PixelizationFilter a ZoomFilter, a filtry s dˇediˇcnost´ı proloˇzenou abstraktn´ı tˇr´ıdou MatrixFilter MatrixFilter Tato abstraktn´ı tˇr´ıda reprezentuje filtry mˇen´ıc´ı pozice bod˚ u zdrojov´eho 36
zobrazen´ı pomoc´ı maticov´e projekce rozebran´e v pˇredchoz´ı kapitole. MatixFilter pln´ı funkci implementace mechanismu projekce, kdeˇzto konkr´etn´ı tˇr´ıdy pouze definuj´ı konkr´etn´ı matice pro danou projekci. Mezi tyto tˇr´ıdy patˇr´ı RotationFilter a SlopeFilter. IMiddlePointFilter Rozhran´ı reprezentuj´ıc´ı filtry, u nichˇz je potˇreba definovat stˇredov´ y bod. Operace pˇr´ısluˇsn´eho filtru pro svou aplikaci vyuˇz´ıv´a tohoto stˇredov´eho bodu a je u nˇej moˇzno mˇenit pozici v˚ uˇci poˇca´tku ˇcili stˇredu editovan´eho obr´azku. V t´eto sekci filtr˚ u se nal´ez´a podobn´a situace, jako je tomu u barevn´ ych filtr˚ u. U transformaˇcn´ıch vektorov´ ych filtr˚ u existuje podobn´ y mechanismus pro aplikaci zmˇeny pozice bodu. Jsou zde opˇet nadefinov´any dvˇe operace. Jedna oparace pro zmˇenu pozice bodu a druh´a pro celkovou paraleln´ı transformaci bitov´e mapy. Tyto operace jsou znovu pˇred´any aplikovan´emu vyrenderov´an´ı a to aplikuje operace dle sv´eho uv´aˇzen´ı.
2.4.4
Konvoluˇ cn´ı filtry
Konvoluˇcn´ı filtry se povaˇzuj´ı za filtry rastrov´e, tud´ıˇz se zdrojov´ y obr´azek nejdˇr´ıv pˇrevede na rastrovou podobu a pak se na nˇej aplikuje operace filtru. ConvolutionMask
VirtualConvolutionMask
BinomialConvolutionMask
CircleMeanConvolutionMask
HighFrequencyConvolutionMask
SquareMeanConvolutionMask
DiamondConvolutionMask
Obr´azek 2.6: Diagram zobrazuj´ıc´ı dˇediˇcnost konvoluˇcn´ıch masek. ConvolutionFilter Tato tˇr´ıda slouˇz´ı jako koˇren hierarchie konvoluˇcn´ıch filtr˚ u, kter´a dˇed´ı od tˇr´ıdy RasterFilter a implementuje rozhran´ı IDifferentColorFilterWithAlpha. Oba dva implementaˇcn´ı prvky se nach´az´ı ve jmenn´em prostoru Age.Core.Filters. 37
ConvolutionMask Tˇr´ıda tvoˇr´ı abstrakci mezi konvoluˇcn´ımi maskami. Od t´eto tˇr´ıdy dˇed´ı abstraktn´ı tˇr´ıdy jak n´ızkofrekvenˇcn´ıch masek, tak i masek vysokofrekvenˇcn´ıch. Na obr´azku 2.6 je vyznaˇcena zm´ınˇen´a dˇediˇcnost. N´ızkofrekvenˇ cn´ı filtry N´ızkofrekvenˇcn´ı filtry tvoˇr´ı dvˇe tˇr´ıdy a nach´azej´ı se ve jmenn´em prostoru Age.Core.Filters.ConvolutionMaskFilters.LowFrequencyFilters. Konvoluˇcn´ı masky tˇechto filtr˚ u se nach´azej´ı ve jmenn´em podprostoru s n´azvem ConvolutionMasks. Mezi tˇemito maskami se tak´e objevuje dˇediˇcnost viz obr´azek 2.6. MedianFilter Dˇed´ı od tˇr´ıdy RasterFilter a je pˇr´ımou implementac´ı medi´anov´eho filtru. Tento filtr tvoˇr´ı v´ yjimku, protoˇze se nejedn´a o konvoluˇcn´ı filtr, ale je zde zaˇrazen, protoˇze se naopak povaˇzuje za filtr n´ızkofrekvenˇcn´ı. Tato tˇr´ıda implementuje rozhran´ı IResizableFilter, kter´e filtr vyuˇz´ıv´a pro definici velikosti ˇctverce bod˚ u, ze kter´ ych je vyb´ır´an medi´an. LinearConvolutionMask Generick´a tˇr´ıda LinearConvolutionMask, podˇedˇen´a od ConvolutionFilter, slouˇz´ı pro u ´ˇcel reprezentace pr˚ umˇerov´ ych filtr˚ u popsan´ ych v kapitole Anal´ yza. Samostatn´e filtry jsou potom odliˇseny pomoc´ı r˚ uzn´ ych konvoluˇcn´ıch masek, jejichˇz typ se pˇred´a jako generick´ y parametr tˇr´ıdy LinearConvolutionFilter. Tˇr´ıda implementuje rozhran´ı IResizableFilter. To zapˇr´ıˇcin´ı moˇznost mˇenit velikost konvoluˇcn´ı masky. VirtualConvolutionMask Tato abstraktn´ı tˇr´ıda reprezentuje masky n´ızkofrekvenˇcn´ıch konvoluˇcn´ıch filtr˚ u a vˇsechny tˇr´ıdy masek konkr´etn´ıch pr˚ umˇerov´ ych filtr˚ u od t´eto tˇr´ıdy dˇed´ı a je z´aroveˇ n podˇedˇena od tˇr´ıdy ConvolutionMask. Vysokofrekvenˇ cn´ı filtry Vysokofrekveˇcn´ı filtry se nach´azej´ı ve jmenn´em prostoru Age.Core.Filters.ConvolutionMaskFilters.HighFrequencyFilters a obsahuj´ı pouze jednu abstraktn´ı tˇr´ıdu, viz obr´azek 2.5. D´ale se ve jmenn´em podprostoru ConvolutionMasks nach´az´ı implementaˇcn´ı prvky vysokofrekvenˇcn´ıch konvoluˇcn´ıch masek. HighFrequencyMaskFilter Abstraktn´ı tˇr´ıda podˇedˇen´a od tˇr´ıdy ConvolutionFilter definuje paraleln´ı 38
aplikaci vysokofrekvenˇcn´ıch konvoluˇcn´ıch masek na rastrov´ y obr´azek. Konkr´etn´ı tˇr´ıdy podˇedˇen´e od abstraktn´ı tˇr´ıdy, kter´e se daj´ı nal´ezt v program´atorsk´e dokumentaci, definuj´ı pouze konkr´etn´ı instanci masek a t´emˇeˇr ˇz´adn´e v´ yznamnˇe d˚ uleˇzit´e metody. HighFrequencyConvolutionMask Tˇr´ıda reprezentuj´ı vysokofrekvenˇcn´ı konvoluˇcn´ı masku dˇed´ı od tˇridyConvolutionMask, viz obr´azek 2.6. Na rozd´ıl od n´ızkofrekvenˇcn´ıch obsahuje tato tˇr´ıda v´ıce masek pevn´ ych rozmˇer˚ u. HighFrequencyConvolutionMaskSelection Tˇr´ıda, pomoc´ı n´ıˇz se nastavuje jedna konvoluˇcn´ı maska vysokofrekvenˇcn´ıho filtru jako aktu´aln´ı.
2.4.5
N´ astroje
Implementace n´astroj˚ u hierarchicky navazuje na n´astroje z pr´ace [1], kter´e je moˇzno nal´ezt ve jmenn´em prostoru Age.Core.Objects.Objects2D.Tool. N´astroje spadaj´ıc´ı do pˇredmˇetu t´eto pr´ace se nach´azej´ı v Age.Core.Filters.Tools. AbstractTool Abstraktn´ı tˇr´ıda, jeˇz umoˇzn ˇuje zapojen´ı veˇsker´ ych n´astroj˚ u do sc´eny, je souˇc´ast´ı pr´ace [1]. SelectionTool Tˇr´ıda reprezentuje n´astroj pro v´ ybˇer a posouv´an´ı objekt˚ u, je podˇedˇena od tˇr´ıdy AbstractTool, je rovnˇeˇz souˇca´st´ı pr´ace [1]. ZoomSelectionTool Tˇr´ıda opˇet reprezentuje n´astroj pro v´ ybˇer a posouv´an´ı objekt˚ u. Implementaˇcn´ım vzorem t´eto tˇr´ıdy se stala tˇr´ıda SelectionTool. Vytvoˇren´ı t´eto tˇr´ıdy bylo zp˚ usobeno z d˚ uvodu, ˇze SelectionTool obsahuje nˇekter´e funkˇcn´ı prvky, jeˇz nejsou potˇrebn´e pro v´ ysledek t´eto pr´ace. AbstractFilterTool Filtrov´e n´astroje, kter´e jsou pˇredmˇetem t´eto pr´ace, jsou reprezentov´any touto tˇr´ıdou, kter´a obsahuje funkcionality spoleˇcn´e pro konkr´etn´ı n´astroje, a to pˇredevˇs´ım pˇrepoˇcty pozic bod˚ u po aplikaci filtr˚ u ve sc´enˇe. Od t´eto tˇr´ıdy uˇz dˇed´ı pouze konkr´etn´ı n´astroje, jeˇz jsou uvedeny v program´atorsk´e dokumentaci a pˇredevˇs´ım slouˇz´ı k ovl´ad´an´ı jednotliv´ ych filtr˚ u myˇs´ı.
39
2.5
Panoramata
Implementace panoramat byla shrnuta pouze do jednoho jmenn´eho prostoru Age.Core.Panoramas. V kapitole anal´ yzy se navrhla myˇslenka, jak bude tˇr´ıda panoramat zapadat do hierarchie sc´eny AGE. Jedn´a se tedy o skupinu rastrov´ ych obr´azk˚ u, na nˇeˇz jsou aplikov´any filtry. Rastrov´ y obr´azek je objektem sc´eny a pˇr´ısluˇsn´e tˇr´ıdy jeho reprezentace lze nal´ezt ve jmenn´em prostoru Age.Core.Objects.Objects2D.Objects pr´ace [1]. Nyn´ı budou aˇz na v´ yjimky pops´any jen tˇr´ıdy t´ ykaj´ıc´ı se tvorby panoramat. BitmapImage Tato tˇr´ıda je obecnou reprezentac´ı rastrov´eho obr´azku a spad´a do pr´ace [1]. BitmapFromFile Tˇr´ıda dˇed´ı od BitmapImage. Jej´ı pˇr´ıdavnou funkcionalitou oproti rodiˇci je naˇc´ıtat se nebo se ukl´adat do soboru standardn´ıho typu, jako je .png, .jpg, .bmp, atd. Tˇr´ıda je souˇca´st´ı pr´ace [1]. PanoramaObject Tato tˇr´ıda reprezentuje panoramata jako takov´a, dˇed´ı od tˇr´ıdy Group ze zm´ınˇen´eho jmenn´eho prostoru objekt˚ u Age.Core.Objects.Objects2D.Objects z pr´ace [1]. V PanoramaObject je implementov´an proces pro tvorbu panoramat, zm´ınˇen´ y v pˇredchoz´ı kapitole. Jen pro pˇripomenut´ı, proces je tvoˇren z ˇca´st´ı jako je zesoudkov´an´ı jednotliv´ ych obr´azk˚ u, v´ ypoˇcet pozic obr´azk˚ u pomoc´ı bitmapov´ ych pyramid, prolnut´ı obr´azk˚ u a oˇr´ıznut´ı v´ ysledku. ImagePyramid Tato tˇr´ıda slouˇz´ı pro reprezentaci bitmapov´ ych pyramid. Tu pro sv´e v´ ypoˇcty pouˇz´ıv´a tˇr´ıda DistanceCalculator. DistanceCalculator Tato tˇr´ıda prov´ad´ı v´ ypoˇcet v´ ysledn´eho rozestupu mezi obr´azky a pro svoji funkcionalitu ji vyuˇz´ıv´a PanoramaObject. ImagePath Tˇr´ıda reprezentuje cestu k obr´azku uloˇzen´eho na disku. Je vytvoˇrena se z´amˇerem uchov´avat cestu v pr˚ ubˇehu existence obr´azku v panoramatu.
40
2.6
GUI
Grafick´e prostˇred´ı aplikace je soustˇredˇeno ve tˇrech knihovn´ach. Age.Application.Dev.FiltersApplication Tato knihovna obsahuje pouze jedno okno MainWindow, viz obr´azek 2.7 ˇca´st 1, kter´e se objev´ı po spuˇstˇen´ı aplikace. Toto okno obsahuje pouze jednu komponentu, jeˇz zastˇreˇsuje veˇsker´e funkˇcn´ı prvky. Tato komponenta se nach´az´ı v Age.Application.Dev.Filters. Age.Application.Dev.Filters Tato knihovna obsahuje komponenty a dialogov´a okna, z nichˇz je tvoˇreno grafick´e rozhran´ı t´eto pr´ace. Na rozd´ıl od ostatn´ıch grafick´ ych knihoven obsahuje nˇekolik jmenn´ ych prostor˚ u. Age.Application.Dev.Filters.Components Zde se nach´az´ı zmiˇ novan´a zastˇreˇsuj´ıc´ı komponenta grafick´eho rozhran´ı FiltersApplicationControl. Age.Application.Dev.Filters.Components.Application Obsahuje grafick´e komponenty, z nichˇz je sloˇzena komponenta aplikace FiltersApplicationControl. Age.Application.Dev.Filters.Components.Filter Obsahuje grafick´e komponenty pro tvorbu dialogov´eho okna s nastaven´ım jednotliv´ ych filtr˚ u. Age.Application.Dev.Filters.Window.Filters Jmenn´ y prostor zahrnuje mechanismy pro tvorbu zm´ınˇen´eho okna editace filtr˚ u. Age.Application.Dev.Window.Panoramas Jmenn´ y prostor obsahuje mechanismus pro tvorbu dialogov´eho okna pro tvorbu panoramat. Age.Application.Controls Obsahuje rovnˇeˇz grafick´e komponenty, z nichˇz je tvoˇreno GUI t´eto pr´ace. Rozdˇelen´ı komponent do dvou knihoven je d˚ usledkem toho, ˇze pr´ace [1] potˇrebovala pouˇz´ıvat komponenty obsaˇzen´e v Age.Application.Controls, a nebylo moˇzn´e je vyuˇz´ıvat pˇr´ımo z Age.Application.Dev.Filters, protoˇze nˇekter´e z komponent t´eto knihovny vyuˇz´ıvaj´ı komponenty z pr´ace [1]. Rozdˇelen´ım se zabr´anilo kruhov´ ym referenc´ım. Toto celkov´e rozdˇelen´ı projektu AGE je prozatimn´ı a pro v´ yslednou aplikaci bude sjednoceno.
41
2.6.1
Prostˇ red´ı
Pracovn´ı prostˇred´ı t´eto pr´ace je zn´azornˇeno na obr´azku 2.7, kter´ y bude v t´eto sekci vyuˇz´ıv´an k popisu.
Obr´azek 2.7: Obr´azek zobrazuje hlavn´ı okno grafick´eho rozhran´ı.
FiltersApplicationControl Jak jiˇz bylo zm´ınˇeno, hlavn´ı prostˇred´ı aplikace tvoˇr´ı pˇredevˇs´ım tato komponenta, na kterou se odkazuj´ı vˇsechny ostatn´ı komponenty, z nichˇz je sloˇzena, kter´e potˇrebuj´ı informace o sc´enˇe ˇci editovan´em objektu jako jsou reference na sc´enu ˇci zpracov´avan´ y nebo vybran´ y objekt. ScrollableViewport Komponenta viz obr´azek 2.7 ˇc´ast 3 patˇr´ı do jmenn´eho prostoru pr´ace [1] Age.Application.Dev.Editor2D, umoˇzn ˇuje zobrazovat sc´enu s obsaˇzen´ ymi objekty. FiltersMenu Tato komponenta reprezentuje hlavn´ı menu, viz obr´azek 2.7 ˇca´st 2., a drˇz´ı referenci na komponentu hlavn´ıho okna FiltersApplicationControl. Pomoc´ı toho m˚ uˇze prov´est naˇcten´ı sc´eny ze souboru a jej´ıho zaˇrazen´ı 42
do kontextu pr´ace uˇzivatele. Stejnˇe tak, se daj´ı naˇc´ıtat a ukl´adat rastrov´e objekty ze sc´eny. Konkr´etn´ı implementace naˇc´ıt´an´ı ˇci ukl´ad´an´ı u obou pˇr´ıpad˚ u je ˇreˇsena tˇr´ıdami BinarySaver a BitmapSaver ze jmenn´eho prostoru Age.Core.Scene.Scene2D.Saving pr´ace [1]. Pˇrid´an´ı objekt˚ u do sc´eny lze tak´e doc´ılit tvorbou ˇci editac´ı panoramat pomoc´ı spuˇstˇen´ı pˇr´ısluˇsn´eho dialogu, kter´ y poskytne dan´ y objekt a menu ho pˇres referenci zaˇrad´ı do bˇehu aplikace. D´ale se v menu vytv´aˇrej´ı konkr´etn´ı filtry, kter´e jsou pot´e pˇriˇrazeny vybran´emu objektu. ZoomInformationPanel Komponenta viz obr´azek 2.7 ˇc´ast 4. Jiˇz bylo zm´ınˇeno, ˇze aplikace naˇc´ıt´a sc´enu nebo objekty do sc´eny. Ve skuteˇcnosti neobsahuje sc´ena pouze prvky, kter´e se naˇcetly. Vedle naˇcten´ ych prvk˚ u se do koˇrene stromu objekt˚ u sc´eny pˇrid´av´a objekt Group, na kter´ y je aplikov´an filtr zoomov´an´ı. Tento objekt ve stromˇe sc´eny je uˇzivateli skryt, ale ve sv´e podstatˇe slouˇz´ı k pˇribliˇzov´an´ı ˇci oddalov´an´ı uˇzivatelovy pr´ace ve sc´enˇe. Pro nastaven´ı tohoto pˇribl´ıˇzen´ı slouˇz´ı tato komponenta z n´ıˇz je d´ale moˇzno spustit dialog pro nastaven´ı jmenovan´eho zoomovac´ıho filtru. Hlavn´ı komponenta aplikace d´ale do t´eto komponenty ukl´ad´a informace o typu naˇcten´eho objektu, kter´ y je pak n´aslednˇe zobrazen. TreeComponent Komponenta viz obr´azek 2.7 ˇc´ast 5. slouˇz´ı k vyb´ır´an´ı aktu´aln´ıho objektu a z´aroveˇ n zobrazuje strom objekt˚ u sc´enou bez zm´ınˇen´eho objektu pro pˇribl´ıˇzen´ı. Vybran´ y objekt nastav´ı komponenta pˇri v´ ybˇeru do hlavn´ı komponenty aplikace a ta se postar´a o to, aby byl objekt aktualizov´an v komponentˇe PositionComponent a AppliedFilters. PositionComponent Tato komponenta viz obr´azek 2.7 ˇc´ast 6. slouˇz´ı ke zmˇenˇe pozice vybran´eho objektu.
2.6.2
Editace filtr˚ u
AppliedFilters Tato komponenta viz obr´azek 2.7 ˇca´st 7. slouˇz´ı k editaci filtr˚ u na vybran´em objektu. Tato komponenta je grafickou reprezentac´ı FilterManager dan´eho objektu, lze zde mˇenit poˇrad´ı aplikace filtr˚ u a nechtˇen´e filtry smazat z FilterManager. Zmˇeny proveden´e na t´eto kolekci se automaticky aktualizuj´ı pomoc´ı rozhran´ı INotifyCollectionChanged a INotifyPropertyChanged, jeˇz jsou souˇca´st´ı .NET. AppliadFilter Komponenta je grafickou reprezentac´ı filtru. Pˇri vytoveˇren´ı t´eto grafick´e 43
reprezentace se vytvoˇr´ı skryt´e dialogov´e okno pro editaci konkr´etn´ıho filtru a po stisknut´ı tlaˇc´ıtka se zviditeln´ı. U AppliedFilter lze tak´e mˇenit n´azev filtru, jeˇz bylo doc´ıleno pomoc´ı komponenty EditableLabel z knihovny Age.Application.Controls. FilterWindow Dialogov´e okno viz. obr´azek 2.8 je urˇceno pro editaci nastaven´ı konkr´etn´ıho filtru. Obsah tohoto okna se vytv´aˇr´ı dynamicky dle toho, jak´ y typ filtru byl oknu pˇred´an a dle toho, jak´e rozhran´ı tˇr´ıda tohoto filtru implementuje. Vytv´aˇren´ım obsahu se rozum´ı v´ ybˇer komponent pˇr´ısluˇsn´e charakteristiky filtru ze jmenn´eho prostoru Age.Application.Dev.Filters.Components.Filters. Mezi tyto komponenty paˇr´ı r˚ uzn´e slidery, comboxy s titulky, atd., kter´e lze naj´ıt v program´atorsk´e dokumentaci.
Obr´azek 2.8: Obr´azek pˇr´ıklad dialogov´eho okna pro editaci kontrastov´eho filtru.
2.6.3
Editace panoramat
PanoramaWindow Toto okno viz obr´azek 2.9 obstar´av´a funkcionalitu editace panoramat. Pˇri vytv´aˇren´ı tohoto okna pˇred´a komponenta menu FiltersMenu referenci na PanoramaObject, kter´ y se bude editovat, a okno si z nˇej naˇcte potˇrebn´e informace. U pˇred´avan´eho panoramatu se m˚ uˇze jednat o u ´plnˇe nov´e pr´azdn´e panorama nebo panorama jiˇz zaˇrazen´e do sc´eny. Okno se skl´ad´a ze tˇr´ı ˇca´st´ı viz obr´azek 2.9. Prvn´ı ˇc´ast naˇc´ıt´a cesty a zobrazuje n´azvy obr´azk˚ u, kter´e budou pro tvorbu panoramata vyuˇzity. Druh´a ˇca´st zajiˇst’uje zad´an´ı informac´ı o fotoapar´atu a posledn´ı ˇca´st umoˇzn ˇuje zobrazovat a nastavovat vlastnosti obr´azk˚ u, kter´e budou d˚ uleˇzit´e pro tvorbu panorama, jako je poˇca´teˇcn´ı pˇrekryt´ı v˚ uˇci pˇredchoz´ımu obr´azku. Po potvrzen´ı dialogu jsou vˇsechny informace pˇred´any panoramatu a na nˇem je zavol´an pˇrepoˇcet, kter´ y potrv´a jistou dobu. 44
Obr´azek 2.9: Obr´azek zobrazuje dialogov´e okno pro tvorbu panoramat. ProgressBarWindow Toto okno slouˇz´ı k zobrazen´ı stavu vypoˇctu tvorby panorama.
45
Kapitola 3 Srovn´ an´ı s konkurenc´ı Tato kapitola obsahuje pojedn´an´ı o tom, jak si produkt t´eto pr´ace stoj´ı mezi jiˇz zabˇehlou konkurenc´ı, kter´a m´a jistˇe velk´ y n´askok v tom, jak dlouho na n´ı prob´ıh´a v´ yvoj. U aplikace se d´a hovoˇrit o d´elce doby v´ yvoje v ˇra´dech mˇes´ıc˚ u, zat´ımco u konkurence se jedn´a o ˇra´dy let. D´ale je tˇreba uv´aˇzit, ˇze se pr´aci vˇenoval pouze jeden autor s vyuˇzit´ım knihoven jednoho jin´eho autora, kdeˇzto konkurenci tvoˇr´ı vˇetˇs´ı v´ yvojov´e t´ ymy. I pˇresto budou aplikace srovn´any dle n´asleduj´ıc´ıch krit´eri´ı. U jednotliv´ ych produkt˚ u konkurence bude vˇzdy srovn´ana rychlost operac´ı oproti rychlosti operac´ı v aplikaci t´eto pr´ace. Bude zde hodnoceno mnoˇzstv´ı a zpracov´an´ı grafick´ ych filtr˚ u s ohledem na vektorovou a rastrovou grafiku. A mimo jin´e bude u kaˇzd´e konkurenˇcn´ı aplikace pops´ano, zda ˇreˇs´ı tvorbu panoramat a opakovateln´ ych grafick´ ych textur. V pˇr´ıpadˇe ˇze ano, bude bl´ıˇze specifikov´ano jak´ ym zp˚ usobem.
3.1
Gimp
Tento grafick´ y editor slouˇz´ı k editaci rastrov´eho obr´azu. To znamen´a, ˇze umoˇzn ˇuje u ´pravu nafocen´ ych fotografi´ı, tvorbu rastrov´ ych obr´azk˚ u, kter´e lze z´ıskat pomoc´ı vektorov´ ych n´astroj˚ u jako jsou Bazierovy kˇrivky a podobnˇe. Je volnˇe ˇs´ıˇren a naps´an pod licenc´ı GPL, jeˇz umoˇzn ˇuje v´ yvoj´aˇr˚ um z cel´eho svˇeta do tohoto projektu pˇrisp´ıvat. Pomoc´ı dialektu jazyka Scheme jsou definov´any z´akladn´ı operace v aplikaci. To m´a za v´ yznam, ˇze se daj´ı do t´eto aplikace ps´at ”scripty”, jeˇz se pot´e daj´ı do aplikace zaˇrazovat jako dodateˇcn´e z´asuvn´e moduly neboli ”pluginy”. Srovn´an´ı bude provedeno na verzi 2.6.7 viz [13]. V aplikaci lze nal´ezt vˇsechny kategorie filtr˚ u, jeˇz jsou implementov´any v aplikaci t´eto pr´ace. Pˇri hled´an´ı se vˇsak mus´ı d´avat pozor, jelikoˇz transformaˇcn´ı filtry a filtry pro pr´aci s barvou jsou reprezentov´any pomoc´ı n´astroj˚ u. Celkovˇe 46
Gimp obsahuje mnohem v´ıce filtr˚ u neˇz aplikace t´eto pr´ace. Najdou se ale i detaily, kter´e se v Gimpu nenach´az´ı jako napˇr´ıklad filtr pro nahrazen´ı barvy barvou, filtr pro tvorbu opakovateln´ ych grafick´ ych textur a jin´e. D´ale se u nˇekter´ ych filtr˚ u postr´ad´a urˇcit´a funkcionalita jako je u odbarvovac´ıho filtru moˇznost mˇenit intenzitu barvy a u vysokofrekvenˇcn´ıch filtr˚ u moˇznost nastavit reˇzim ostˇren´ı. Zde se vysokofrekvenˇcn´ı filtry pouˇz´ıvaj´ı pouze pro detekci hran v obraze. Dalˇs´ı nev´ yhodou Gimpu je bezesporu, ˇze se po definitivn´ı aplikaci filtru ned´a filtr d´ale nastavovat. Nastaven´ı se d´a pouze mˇenit odstranˇen´ım filtru z historie zmˇen a jeho opˇetovn´ ym pˇrid´an´ım. Tento postup m˚ uˇze b´ yt docela nepˇr´ıjemn´ y, jelikoˇz po aplikaci filtru mohou n´asledovat i dalˇs´ı operace. M˚ uˇze doj´ıt k prom´ıch´an´ı tohoto poˇrad´ı z d˚ uvodu, ˇze se aplikace filtru jakoˇzto zmˇena na obr´azku pˇrid´a vˇzdy nakonec. Jak uˇz bylo ˇreˇceno v kapitole Anal´ yza, Gimp umoˇzn ˇuje tvorbu panoramat pomoc´ı ”pluginu”Pandora, kter´ y vytv´aˇr´ı panorama pomoc´ı posouv´an´ı obr´azk˚ u s prolnut´ım, jeˇz neposkytuje pˇr´ıliˇs kvalitn´ı v´ ysledky. Pˇri porovn´an´ı rychlosti Gimpu a aplikace t´eto pr´ace vych´az´ı Gimp nˇekolikan´asobnˇe l´epe. To je zapˇr´ıˇcinˇeno pomalost´ı jednotliv´ ych operac´ı v aplikaci t´eto pr´ace.
3.2
Adobe Photoshop
Tento produkt by mˇel b´ yt absolutn´ı ˇspiˇckou mezi grafick´ ymi editory pro pr´aci s rastrovou grafikou. Jeho v´ yvoj m´a ve sv´e kompetenci gigant v oblasti poˇc´ıtaˇcov´e grafiky Adobe Systems. V´ yvoj na tomto produktu prob´ıh´a pˇres 20 let a byly do nˇej investov´any nemal´e finanˇcn´ı prostˇredky, jeˇz mˇely motivovat pracovn´ıky k intenzivn´ımu v´ yvoji. Nyn´ı aplikace existuje ve sv´em nejnovˇejˇs´ım vyd´an´ı 12.0 CS5, s n´ıˇz se aplikace t´eto pr´ace bude srovn´avat v jej´ı trialov´e verzi viz [14]. Funkcionalita transformaˇcn´ıch filtr˚ u je zde rozprostˇrena do ovl´adac´ıch n´astroj˚ u a nastaven´ı pˇr´ısluˇsn´ ych kresl´ıc´ıch vrstev, z nichˇz se skl´ad´a sc´ena aplikace. Podobn´a situace se vyskytuje u filtr˚ u pro pr´aci s barvou. S t´ım rozd´ılem, ˇze funkˇcn´ı prvky tˇechto filtr˚ u lze naj´ıt pouze u nastaven´ı prolnut´ı pˇr´ısluˇsn´e vrstvy. Filtry jako takov´e zde vytv´aˇrej´ı sloˇzit´e grafick´e efekty, z nichˇz pouh´ ym pohledem nelze vyˇc´ıst algoritmus. Konvoluˇcn´ı filtry jsou zde prezentov´any pouze formou existence jednoho filtru urˇcen´eho k detekci hran. Oproti aplikaci Gimp se zde vyskytuje o trochu m´enˇe filtr˚ u. Pravdˇepodobnˇe to bylo zp˚ usobeno t´ım, ˇze se k testu pouˇzilo pouze trialov´e verze. Nev´ yhoda t´eto aplikace tkv´ı v tom, ˇze uˇzivateli neposkytuje ˇz´adn´ y mechanismus pro usnadnˇen´ı pr´ace pˇri vytv´aˇren´ı panoramat. Uˇzivateli nezb´ yv´a nic jin´eho neˇz rozˇradit obr´azky do vrstev a manu´alnˇe je posouvat a prol´ınat. 47
Rychlost t´eto aplikace a jejich jednotliv´ ych operac´ı lze povaˇzovat za nejlepˇs´ı mezi rychlostmi uvaˇzovan´ ych aplikac´ı.
3.3
Shrnut´ı
Panoramata
Rychlost
Program AGE – Filtry a panoramata Gimp Adobe Photoshop
Mnoˇzstv´ı filtr˚ u
Pouh´ ym pohledem je patrn´e, ˇze na dvou konkurenˇcn´ıch aplikac´ıch bylo provedeno v´ıce pr´ace. To se prom´ıtlo na poˇcet naimplementovan´ ych filtr˚ u. Pˇresto se naˇsla i odvˇetv´ı, ve kter´ ych aplikace t´eto pr´ace pˇredˇcila ostatn´ı. Kamenem u ´razu se vˇsak stala doba prov´adˇen´ ych operac´ı, kter´a by mˇela b´ yt pro budouc´ı projekt AGE zkr´acena. V porovn´an´ı s ostatn´ımi m´a editor t´eto pr´ace v´ yhodu v tom, ˇze se filtry daj´ı aplikovat na rastr i vektor z´aroveˇ n, jelikoˇz ostatn´ı editory dovedou upravovat jenom rastr. N´ıˇze se nach´az´ı tabulka charakterizuj´ıc´ı v´ ysledek testu. Jednotliv´e body jsou hodnoceny zn´amkami ˇ jedna aˇz ˇctyˇri. C´ım niˇzˇs´ı ˇc´ıslo, t´ım lepˇs´ı hodnocen´ı.
2 1 1
2 3 4
3 1 1
Tabulka 3.1: Souhrnn´a tabulka srovn´an´ı s konkurenc´ı
48
Z´ avˇ er V t´eto pr´aci se povedlo vytvoˇrit grafick´ y editor, jeˇz umoˇzn ˇuje aplikovat bˇeˇzn´e grafick´e filtry na vektorov´e ˇci rastrov´e obr´azky. V´ ysledn´a aplikace trp´ı jist´ ymi nedostatky. Prvn´ı z nich je pomalost operac´ı na rastrov´em obrazu, jeˇz byla dok´az´ana v pˇredchoz´ı kapitole. Ta existuje i pˇresto, ˇze na bitov´e mapˇe byl vytvoˇren mechanismus pro paraleln´ı pr´aci a vˇsechny filtry jej naplno vyuˇz´ıvaj´ı. Jedn´ım z moˇzn´ ych faktor˚ u je pomalost knihoven pr´ace [1], s n´ıˇz je aplikace t´eto pr´ace u ´zce spjata. K t´eto myˇslence vede fakt, ˇze rychlost aplikace filtr˚ u na vektor a n´asledn´e pˇrekreslen´ı vektorov´e sc´eny neprob´ıh´a pˇr´ıliˇs rychle. To vˇsak neopodstatˇ nuje pomalost pr´ace aplikace s bitmapou. Tato problematika si bude v budoucnu pˇri v´ yvoji grafick´eho prostˇred´ı AGE ˇza´dat vˇetˇs´ıho rozboru a n´avrhu ˇreˇsen´ı. D´ale i tvorba panoramat nen´ı zcela ide´aln´ı. V pˇr´ıpadˇe, ˇze uˇzivatel zad´a nevyhovuj´ıc´ı odhad rozestupu mezi jednotliv´ ymi obr´azky, stane se, ˇze se algoritmus vyd´a nespr´avn´ ym smˇerem a obr´azky se prolnou nevhodn´ ym zp˚ usobem. To potom nut´ı uˇzivatele mˇenit pozice obr´azk˚ u a nastaven´ı filtr˚ u ruˇcnˇe, nebo absolvovat zad´an´ı odhadu rozestupu a n´asledn´eho v´ ypoˇctu znovu. Proto by nebylo od vˇeci jeˇstˇe jednou zv´aˇzit implementaci dvourozmˇern´ ych panoramat, jeˇz jsou plnˇe automatizovan´a. Bezesporu se d´a aplikaci t´eto pr´ace vytknout, ˇze pˇri nˇekolikan´asobn´em pˇribl´ıˇzen´ı sc´eny nesed´ı graficky n´astroje filtr˚ u pˇresnˇe tak, jak by mˇely. To je zp˚ usobn´e t´ım, ˇze pozice n´astroje se vypoˇc´ıt´av´a s vektorovou pˇresnost´ı, kdeˇzto pˇri vykreslov´an´ı bitmapy dojde zaokrouhlen´ı pozice bitmapy na velikost jednotliv´ ych pixel˚ u. Tato odchylka se pˇri pˇribl´ıˇzen´ı n´asob´ı urˇcit´ ym koeficientem vˇetˇs´ım neˇz jedna, tud´ıˇz je na pohled patrn´a. N´astroje grafick´ ych filtr˚ u byly vytvoˇreny nad r´amec zad´an´ı pro zpˇr´ıjemnˇen´ı pouˇzit´ı t´eto aplikace a nejsou nepostradatelnou souˇca´st´ı t´eto pr´ace.
49
Jak jiˇz bylo pops´ano v z´akladn´ım n´avrhu kapitoly Implementace a d´ale v cel´em obsahu t´eto kapitoly, je aplikace t´eto pr´ace u ´zce spjata s nˇekter´ ymi ˇca´stmi aplikace pr´ace [1]. Tohoto faktu bude pˇri dalˇs´ım v´ yvoji aplikace AGE vyuˇzito a dojde k vytvoˇren´ı projektu Age.Application.Main, kter´ y bude spouˇstˇet v´ yslednou aplikaci viz obr´azek 2.1.
50
Literatura ˇ ´ Jan: Vektorov´y grafick´y editor pro projekt AGE, [1] SEBETOVSK Y, Praha: Univerzita Karlova, Matematicko-fyzik´aln´ı fakulta, Katedra distribuovan´ ych a spolehliv´ ych syst´em˚ u, 2010. Vedouc´ı bakal´aˇrsk´e pr´ace Mgr. Pavel Jeˇzek [2] HERCEG, Tom´aˇs: Grafick´y editor 3D sc´en pro projekt AGE, Praha: Univerzita Karlova. Matematicko-fyzik´aln´ı fakulta, Katedra distribuovan´ ych a spolehliv´ ych syst´em˚ u, 2010. Vedouc´ı bakal´aˇrsk´e pr´ace Mgr. Pavel Jeˇzek [3] cmpg.org: An Introduction to Color Space and Color Calibration, [online], 2005 [cit. 2010-07-22].
[4] Wikipedia: CMYK color model, [online], 2010 [cit. 2010-07-22],
[5] BROWN, Matthew; LOWE, David G.: Automatic Panoramic Image Stitching using Invariant Features, [PDF soubor, online], Vancouver (Canada): Department of Computer Science, University of British Columbia, 2007 [cit. 2010-07-22]. [6] Wikipedia: Scale-invariant feature transform, [online], 2010 [cit. 2010-0722], [7] Wikipedia: kd-tree, [online], 2010 [cit. 2010-07-22], [8] CHANG Yung-Yu: Image stitching, [PDF soubor, online], 2007-04-03 [cit. 2010-07-22].
51
[9] shallowsky.com: Pandora: a GIMP Plugin for Making Panoramas, [online], 2007 [cit. 2010-07-22]. [10] SZELISKI, Richard: Image Alignment and Stitching: A Tutorial1, [PDF soubor, online], 2006-12-10 [cit. 2010-07-22], s. 2-4. [11] Wikipedia: Image scaling, [online], 2010-06-03 [cit. 2010-07-22]. ´ C, ˇ V´aclav; SEDLA ´ CEK, ˇ [12] HLAVA Miloˇs: Zpracov´an´ı sign´al˚ u a obrazu. ˇ Praha: Vydavatelstv´ı CVUT Praha, 2007 [cit. 2010-07-22], s. 191-210. [13] The GIMP Team: GNU Image Manipulation Program, [online], 2010 [cit. 2010-07-22]. [14] Adobe Systems: Adobe Photoshop CS5, [online], 2010 [cit. 2010-07-22].
52