BAKALÁŘSKÁ PRÁCE. Bohdan Maslowski. Motivace matematické analýzy pro studenty informatiky

Podobné dokumenty
Bézierovy křivky Bohumír Bastl KMA/GPM Geometrické a počítačové modelování Bézierovy křivky GPM 1 / 26

KTE/TEVS - Rychlá Fourierova transformace. Pavel Karban. Katedra teoretické elektrotechniky Fakulta elektrotechnická Západočeská univerzita v Plzni

Kosinová transformace 36ACS

Funkce komplexní proměnné a integrální transformace

MATURITNÍ TÉMATA Z MATEMATIKY

Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy

1 Báze a dimenze vektorového prostoru 1

KMA/GPM Barycentrické souřadnice a

Jana Dannhoferová Ústav informatiky, PEF MZLU

15. listopadu Matematický ústav UK Matematicko-fyzikální fakulta. Hermitovská interpolace

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

PŘEDNÁŠKA 2 POSLOUPNOSTI

Křivky a plochy technické praxe

Derivace funkce. Přednáška MATEMATIKA č Jiří Neubauer

Kristýna Bémová. 13. prosince 2007

Přednáška 3: Limita a spojitost

Úvodní informace. 17. února 2018

Gymnázium Česká a Olympijských nadějí, České Budějovice, Česká 64, 37021

Bakalářská matematika I

Učební texty k státní bakalářské zkoušce Matematika Skalární součin. študenti MFF 15. augusta 2008

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace

Interpolace, ortogonální polynomy, Gaussova kvadratura

Čebyševovy aproximace

INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ. Modernizace studijního programu Matematika na PřF Univerzity Palackého v Olomouci CZ.1.07/2.2.00/28.

MATICE. a 11 a 12 a 1n a 21 a 22 a 2n A = = [a ij]

Necht tedy máme přirozená čísla n, k pod pojmem systém lineárních rovnic rozumíme rovnice ve tvaru

7. Funkce jedné reálné proměnné, základní pojmy

18 Fourierovy řady Úvod, základní pojmy

1 Linearní prostory nad komplexními čísly

Vektorové podprostory, lineární nezávislost, báze, dimenze a souřadnice

Definice. Vektorový prostor V nad tělesem T je množina s operacemi + : V V V, tj. u, v V : u + v V : T V V, tj. ( u V )( a T ) : a u V které splňují

Úvod do lineární algebry

1 Řešení soustav lineárních rovnic

Transformace obrazu Josef Pelikán KSVI MFF UK Praha

Matematika (KMI/PMATE)

Matematická analýza III.

i=1 Přímka a úsečka. Body, které leží na přímce procházející body a a b můžeme zapsat pomocí parametrické rovnice

Funkce a limita. Petr Hasil. Podpořeno projektem Průřezová inovace studijních programů Lesnické a dřevařské fakulty MENDELU v Brně (LDF)

Občas se používá značení f x (x 0, y 0 ), resp. f y (x 0, y 0 ). Parciální derivace f. rovnoběžného s osou y a z:

Texty k přednáškám z MMAN3: 4. Funkce a zobrazení v euklidovských prostorech

Těleso racionálních funkcí

Zavedeme-li souřadnicový systém {0, x, y, z}, pak můžeme křivku definovat pomocí vektorové funkce.

10 Funkce více proměnných

0.1 Funkce a její vlastnosti

FOURIEROVA ANAL YZA 2D TER ENN ICH DAT Karel Segeth

Derivace funkce Otázky

16 Fourierovy řady Úvod, základní pojmy

Matematika I (KMI/PMATE)

IB112 Základy matematiky

EUKLIDOVSKÉ PROSTORY

3 Lineární kombinace vektorů. Lineární závislost a nezávislost

Mgr. Ladislav Zemánek Maturitní okruhy Matematika Obor reálných čísel

10. Soustavy lineárních rovnic, determinanty, Cramerovo pravidlo

V předchozí kapitole jsme podstatným způsobem rozšířili naši představu o tom, co je to číslo. Nadále jsou pro nás důležité především vlastnosti

Derivace funkce DERIVACE A SPOJITOST DERIVACE A KONSTRUKCE FUNKCÍ. Aritmetické operace

Maturitní témata z matematiky

Diferenciální počet 1 1. f(x) = ln arcsin 1 + x 1 x. 1 x 1 a x 1 0. f(x) = (cos x) cosh x + 3x. x 0 je derivace funkce f(x) v bodě x0.

(Cramerovo pravidlo, determinanty, inverzní matice)

Elementární křivky a plochy

z = a bi. z + v = (a + bi) + (c + di) = (a + c) + (b + d)i. z v = (a + bi) (c + di) = (a c) + (b d)i. z v = (a + bi) (c + di) = (ac bd) + (bc + ad)i.

Aplikovaná numerická matematika

ANALYTICKÁ GEOMETRIE V ROVINĚ

0.1 Úvod do lineární algebry

PRIMITIVNÍ FUNKCE. Primitivní funkce primitivní funkce. geometrický popis integrály 1 integrály 2 spojité funkce konstrukce prim.

6 Skalární součin. u v = (u 1 v 1 ) 2 +(u 2 v 2 ) 2 +(u 3 v 3 ) 2

Matematický ústav UK Matematicko-fyzikální fakulta

Operace s maticemi. 19. února 2018

5. Lokální, vázané a globální extrémy

Greenova funkce pro dvoubodové okrajové úlohy pro obyčejné diferenciální rovnice

Multimediální systémy. 03 Počítačová 2d grafika

0.1 Úvod do lineární algebry

Vypracoval: Mgr. Lukáš Bičík TENTO PROJEKT JE SPOLUFINANCOVÁN EVROPSKÝM SOCIÁLNÍM FONDEM A STÁTNÍM ROZPOČTEM ČESKÉ REPUBLIKY

INTEGRÁLY S PARAMETREM

MKI Funkce f(z) má singularitu v bodě 0. a) Stanovte oblast, ve které konverguje hlavní část Laurentova rozvoje funkce f(z) v bodě 0.

Maturitní témata profilová část

FOURIEROVA TRANSFORMACE

0.1 Úvod do matematické analýzy

Báze a dimenze vektorových prostorů

2. Schurova věta. Petr Tichý. 3. října 2012

Matematický ústav UK Matematicko-fyzikální fakulta

Je založen na pojmu derivace funkce a její užití. Z předchozího studia je třeba si zopakovat a orientovat se v pojmech: funkce, D(f), g 2 : y =

7B. Výpočet limit L Hospitalovo pravidlo

Aproximační křivky. Trocha historie. geometrické modelování veliký pokrok v oblasti letectví 1944 Roy Liming

PRIMITIVNÍ FUNKCE DEFINICE A MOTIVACE

Definice 13.1 Kvadratická forma v n proměnných s koeficienty z tělesa T je výraz tvaru. Kvadratická forma v n proměnných je tak polynom n proměnných s

1. Několik základních pojmů ze středoškolské matematiky. Na začátku si připomeneme následující pojmy:

Přednáška 11, 12. prosince Část 5: derivace funkce

Maturitní otázky z předmětu MATEMATIKA

Funkce jedn e re aln e promˇ enn e Derivace Pˇredn aˇska ˇr ıjna 2015

Matematika I 12a Euklidovská geometrie

19 Hilbertovy prostory

FOURIEROVA TRANSFORMACE FOURIEROVA VĚTA

8.3). S ohledem na jednoduchost a názornost je výhodné seznámit se s touto Základní pojmy a vztahy. Definice

22 Základní vlastnosti distribucí

ŘADY KOMPLEXNÍCH FUNKCÍ

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic

Komplexní analýza. Fourierovy řady. Martin Bohata. Katedra matematiky FEL ČVUT v Praze

Necht L je lineární prostor nad R. Operaci : L L R nazýváme

Otázky k ústní zkoušce, přehled témat A. Číselné řady

13 Barvy a úpravy rastrového

Transkript:

Univerzita Karlova v Praze Matematicko-fyzikální fakulta BAKALÁŘSKÁ PRÁCE Bohdan Maslowski Motivace matematické analýzy pro studenty informatiky Katedra matematické analýzy Vedoucí bakalářské práce: doc. RNDr. Stanislav Hencl, Ph.D. Studijní program: Matematika, Obecná matematika 2010

Chtěl bych poděkovat Stanislavu Henclovi za obětavé vedení práce. Dále děkuji kamarádům Janě a Janovi za konzultaci a přítelkyni Johance za trpělivost. Prohlašuji, že jsem svou bakalářskou práci napsal(a) samostatně a výhradně s použitím citovaných pramenů. Souhlasím se zapůjčováním práce a jejím zveřejňováním. V Praze dne 1.8.2010 Bohdan Maslowski 2

Obsah Úvod 7 1 Bézierovy křivky 8 1.1 Základní pojmy......................... 9 1.1.1 Parametrizované křivky................ 9 1.1.2 Derivace a spojitost................... 9 1.2 Bernsteinovy polynomy..................... 11 1.3 Bézierovy křivky........................ 12 1.4 Úsečky, kvadriky a kubiky................... 14 1.4.1 Lineární Bézierovy křivky............... 14 1.4.2 Kvadratické Bézierovy křivky............. 15 1.4.3 Kubické Bézierovy křivky............... 16 1.5 Bézierovy cesty......................... 17 1.6 De Casteljaův algoritmus.................... 18 1.7 Racionální Bézierovy křivky.................. 20 1.8 Využití Bézierových křivek................... 23 1.8.1 SVG........................... 23 1.8.2 PostScript........................ 26 2 DCT komprese 28 2.1 Fourierovy řady......................... 29 2.1.1 Trigonometrické Fourierovy řady........... 29 2.1.2 Exponenciální Fourierovy řady............. 31 2.1.3 Fourierova transformace................ 31 2.2 Diskrétní Fourierova transformace............... 32 2.2.1 Diskrétní ortogonální transformace.......... 32 2.2.2 Diskrétní Fourierova transformace........... 33 2.2.3 Diskrétní kosinová transformace (DCT II)...... 34 3

2.3 2D Transformace........................ 35 2.3.1 2D ortogonální Transformace............. 35 2.3.2 2D kosinová Transformace............... 36 2.4 Formát JPEG.......................... 37 2.4.1 Převod z RGB do Y C b C r............... 40 2.4.2 Podvzorkování chromatických složek......... 41 2.4.3 Transformace bloků................... 43 2.4.4 Kvantizace koeficientů................. 43 2.4.5 Kódování........................ 44 2.4.6 Uložení do JFIF..................... 45 2.4.7 Rozšíření EXIF..................... 49 Literatura 50 4

Seznam obrázků 1.1 Bernsteinovy polynomy stupňů nula až pět.......... 11 1.2 Bézierova křivka stupně pět a její řídící polygon....... 12 1.3 Lineární Bézierova křivka................... 14 1.4 Kvadratická Bézierova křivka................. 15 1.5 Kubická Bézierova křivka.................... 16 1.6 Bézierova cesta složena ze dvou segmentů........... 17 1.7 Důkaz korektnosti De Casteljaova algoritmu......... 19 1.8 Konstrukce Bézierovy křivky de Castaljaovým algoritmem. 20 1.9 Aproximace kruhu pomocí Bézierových křivek........ 21 1.10 Racionální kvadratická Bézierova křivka........... 21 1.11 Příklad SVG........................... 23 1.12 Text vedený podél Bézierovy cesty.............. 24 1.13 Příklad Beziérových křivek v SVG............... 26 1.14 Bézierova cesta v PostScriptu................. 27 2.1 Částečné součty Fourierových řad............... 29 2.2 Báze DCT pro N = 8...................... 34 2.3 Báze dvourozměrné DCT pro N = 8............. 36 2.4 Ukázka JPEG komprese: Lena (512 512)......... 38 2.5 Ukázka JPEG komprese: Lena (512 512), výřez 180 180 39 2.6 Detail RGB mřížky na CRT monitoru............. 40 2.7 Převod z barevného prostoru RGB do Y C b C r........ 42 2.8 Zkreslení barev při podvzorkování chromatických složek... 43 2.9 Linearizace DCT koeficientů.................. 44 5

Název práce: Motivace matematické analýzy pro studenty informatiky Autor: Bohdan Maslowski Katedra: Katedra matematické analýzy Vedoucí bakalářské práce: doc. RNDr. Stanislav Hencl, Ph.D. e-mail vedoucího: Stanislav.Hencl@mff.cuni.cz Abstrakt: Cílem práce je ukázat použití pojmů a základních vět z prvního dvouletí matematické analýzy v oblastech informatiky. K tomu byla vybrána dvě témata se kterými se v informatice setkáváme nejčastěji. V první kapitole jsou představeny Bézierovy křivky, což jsou nejpoužívanější parametrické křivky ve vektorové grafice (využívají se například k reprezentaci počítačových fontů). Druhá kapitola se zabývá ztrátovou kompresí obrazu založenou na diskrétní kosinové transformaci. Tato metoda se používá například ve formátu JPEG. Klíčová slova: Bézierovy křivky, diskrétní kosinová transformace, DCT, komprese, JPEG Title: Motivation of mathematical analysis for students of computer science Author: Bohdan Maslowski Department: Department of Mathematical Analysis Supervisor: doc. RNDr. Stanislav Hencl, Ph.D. Supervisor s e-mail address: Stanislav.Hencl@mff.cuni.cz Abstract: The aim of this work is to demonstrate the use of basic definitions and theorems of mathematical analysis in computer science. Two topics have been selected, both of great importance in everyday applications. In the first chapter, Bézier curves are introduced which are the most used parametric curves in vector computer graphics. The second chapter deals with a method of lossy image compression based on discrete cosine transform (DCT). This method is used in the widespread JPEG file format. Keywords: Bézier curves, Discrete cosine transform, DCT, Compression, JPEG 6

Úvod Náplní této práce je demonstrace významu matematické analýzy ve vybraných oblastech informatiky. Důraz byl přitom kladen na srozumitelné podání látky a uvedení podrobných příkladů praktického využití, není tedy striktně dodrženo schéma definice-věta-důkaz. Práce se skládá ze dvou hlavních částí kapitola 1 pojednává o Bézierových křivkách a kapitola 2 o kompresi obrazu pomocí diskrétní Fourierovy transformace. Obě kapitoly se dále dělí na teoretickou a praktickou část. V teoretické části jsou představeny matematické základy daného tématu a v praktické části je na příkladech známých technologií uvedeno konkrétní využití. Prvním tématem jsou Bézierovy křivky, což jsou parametrické křivky využívané především v počítačové grafice. Zjednodušeně by se dalo říci, že posloupnosti Bézierových křivek nahrazují lomené čáry v úloze aproximace libovolných křivek, přičemž na rozdíl od lomených čar dosahují hladkosti ve všech bodech. Používají se zde základní pojmy matematické analýzy jako spojitost, derivace a hladkost a pojmy diferenciální geometrie (parametrizované křivky, regulární křivka, změna parametru apod.) Je zavedena parametrická a geometrická hladkost, pojmy které se často používají v počítačové grafice. V praktické části jsou popsány běžně používané formáty vektorové grafiky a na příkladech je předvedeno, jakým způsobem se v těchto formátech s Bézierovými křivkami pracuje. Dalším tématem je metoda komprese obrazu pomocí diskrétní kosinové transformace, která je využívána v dnes velmi rozšířeném formátu JPEG. V této kapitole se dostaneme od trigonometrických Fourierových řad probíraných na přednáškách matematické analýzy k diskrétním Fourierovým transformacím a jejich variantám, které se využívají v mnoha oblastech informatiky. V druhé polovině kapitoly je detailně popsán formát JPEG, který využívá diskrétní kosinovou transformaci ke ztrátové kompresi obrazu. V praktické části jsou popsány i části komprese, které s vlastní transformací přímo nesouvisí, jsou však důležité k pochopení celého procesu. 7

Kapitola 1 Bézierovy křivky Bézierovy křivky vznikly na konci padesátých let dvacátého století ve Francii. Jako první je v roce 1959 začal používat při návrhu karosérií zaměstnanec automobilky Citroën, matematik a fyzik Paul de Casteljau. Téměř současně tyto křivky objevil také zaměstnanec Peugeotu Pierre Étienne Bézier. Ten o nich publikoval první vědeckou práci [1] a tak se nakonec ustálilo pojmenování Bézierovy křivky. Jméno jejich objevitele Paula de Casteljaua však nebylo úplně zapomenuto je po něm nazván algoritmus používaný k vykreslování a dělení Bézierových křivek. Mezi výhody Bézierových křivek patří jednoduchá úprava křivek i efektivní vykreslování. Bézierovy křivky tvoří základ technologií TrueType, Post- Script, PDF, SVG a řady dalších, většina grafických programů je umožňuje vytvářet a upravovat. V první části této kapitoly budou představeny matematické principy Bézierových křivek a v druhé popsány některé formáty, které jsou na těchto křivkách založeny. Teoretická část je zpracovaná podle materiálů [2], [3], [4], [5], [6], [7], [8] a [9], praktická část podle oficiálních referencí formátů SVG [10] a PostScript [11]. 8

1.1 Základní pojmy 1.1.1 Parametrizované křivky Nejdříve zavedeme pojem parametrizované křivky. 1 Definice 1.1. Buď I R interval. Diferencovatelné zobrazení c : I R n se nazývá parametrizovaná křivka v R n. Množina c(i) R n se nazývá obraz křivky. Příklad. Křivka c(t) = (cos t, sin t) odpovídá jednotkové kružnici, křivka c(t) = (t, sin t) grafu funkce sin t. Poznámka. Různé parametrizované křivky mohou mít tentýž obraz. Například c(t) = (t, t) a c(t) = (t 2, t 2 ) pro t [0, 1] definují stejnou úsečku v R 2 spojující počátek s bodem (1, 1). 1.1.2 Derivace a spojitost Poznámka. Zobrazením f : R R n se říká vektorové funkce. Můžeme se na ně dívat jako na uspořádané n-tice (f 1,..., f n ). Funkcím f 1,..., f n budeme říkat složky vektorové funkce f. Platí f (x) = (f 1(x),..., f n(x)), tedy vektorové funkce můžeme derivovat po složkách. Definice 1.2. Řekneme, že parametrizovaná křivka c : I R n je regulární, platí-li c (t) 0 pro každé t I. V krajních bodech intervalu I uvažujeme jednostranné derivace. Vektor c (t) pak nazveme tečným vektorem křivky v bodě c(t) Poznámka. Často je výhodné uvažovat o parametru t jako o čase a o křivce c(t) jako o trajektorii. První derivace c (t) pak odpovídá vektoru rychlosti, druhá derivace c (t) vektoru akcelerace. Pokud je křivka regulární, znamená to, že se v žádném bodě pohyb nezastaví. Definice 1.3. Nechť c : I R n je regulární parametrizovaná křivka a ϕ : Ĩ I je difeomorfismus intervalu Ĩ na I. Pak je c = c ϕ : Ĩ Rn regulární parametrizovaná křivka se stejným obrazem jako c. Difeomorfismus ϕ nazýváme změnou parametru křivky c. 1 Tato část je zpracovaná podle [2] a [3]. 9

Definice 1.4. Křivka je parametrizovaná obloukem, je-li c (t) = 1 pro všechna t I. Věta 1.1. Ke každé regulární parametrizované křivce c : I R n existuje změna parametru ϕ : Ĩ I tak, že c = c ϕ je parametrizovaná obloukem. Definice 1.5. Množinu všech funkcí, které mají na nějakém intervalu I spojité derivace k-tého řádu značíme C k (I). Řekneme, že parametrizovaná křivka c : I R n je C k -hladká, jsou-li všechny její složky z C k (I). Je-li interval I uzavřený nebo polouzavřený, uvažujeme v krajních bodech derivace jednostranné. Parametrická hladkost C k Definice 1.6. Nechť c 1 : [a 1, b 1 ] R n a c 2 : [a 2, b 2 ] R n jsou dvě regulární parametrizované křivky. Řekneme, že se napojují s hladkostí C k, jsou-li obě C k -hladké a platí-li c (i) 1 (b 1 ) = c (i) 2 (a 2 ) pro i = 0,..., k. Poznámka. V počítačové grafice se často používají pojmy parametrická spojitost C k a geometrická spojitost G k. Geometrická hladkost G k Definice 1.7. Nechť c 1 : [a 1, b 1 ] R n a c 2 : [a 2, b 2 ] R n jsou dvě regulární parametrizované křivky. Řekneme, že se napojují s hladkostí G k, jsou-li obě C k -hladké a i = 0,..., k h i R, h i 0 : c (i) 1 (b 1 ) = h i c (i) 2 (a 2 ), tedy jsou-li vektory derivací kolineární. Věta 1.2. Nechť c 1 : [a 1, b 1 ] R n a c 2 : [a 2, b 2 ] R n jsou dvě regulární parametrizované křivky. Následující výroky jsou ekvivalentní. 2 (i) Křivky c 1 a c 2 se napojují s hladkostí G k. (ii) Existuje změna parametru ϕ : [a 2, b 2 ] [ã 2, b 2 ] tak, že se křivky c 1 a c 2 = c ϕ napojují s hladkostí C k. (iii) Křivky parametrizované obloukem odpovídající křivkám c 1 a c 2 se napojují s hladkostí C k. 2 Důkaz je uveden ve článku Three Characterizations of Geometric Continuity for Parametric Curves [3]. 10

Důsledek. Je-li křivka geometricky hladká, je také parametricky hladká. Obrácené tvrzení neplatí. 1.2 Bernsteinovy polynomy Dříve než definujeme samotné Bézierovy křivky, zavedeme tzv. Bernsteinovy polynomy [4] [5] [6]. Definice 1.8. Bernsteinovy polynomy stupně n definujeme předpisem ( ) n B i,n (t) = t i (1 t) n i i = 0,..., n. i Obrázek 1.1: Bernsteinovy polynomy stupňů nula až pět Poznámka. (i) Všechny Bernsteinovy polynomy B i,n jsou kladné na intervalu (0, 1). (ii) Platí n B i,n (t) = 1. (1.1) i=0 Říkáme, že součet Bernsteinových polynomů daného stupně tvoří rozklad jednotky. 11

(iii) Bernsteinovy polynomy jsou symetrické ve smyslu B i,n (t) = B n i,n (1 t). (1.2) (iv) Polynomy B i,n nabývají v bodě i/n svého jediného maxima. (v) Polynomy B 0,n,..., B n,n jsou lineárně nezávislé a tvoří bázi prostoru polynomů stupně n. 1.3 Bézierovy křivky Nyní můžeme přistoupit k vlastní definici Bézierových křivek. 3 Definice 1.9. Nechť B i,n jsou Bernsteinovy polynomy stupně n. Bézierova křivka stupně n je parametrizovaná křivka c : [0, 1] R 2 určena n + 1 body P 0,..., P n R 2 a vztahem c(t) = n P i B i,n (t) t [0, 1]. (1.3) i=0 Krajním bodům P 0 a P n říkáme kotvící body, vnitřním bodům P 1 až P n 1 (pro n 2) řídící body. Spojíme-li body P 0,..., P n úsečkami, dostaneme tzv. řídící polygon. Obrázek 1.2: Bézierova křivka stupně pět a její řídící polygon 3 Tato část je zpracovaná podle [7], [8] a [9]. 12

Poznámka. (i) Z definice vyplývá, že každý bod na křivce je lineární kombinací řídících a kotvících bodů křivky s koeficienty danými Bernsteinovými polynomy. V této souvislosti je dobré připomenout, že Bernsteinovy polynomy B i,n (t) jsou na intervalu (0, 1) kladné, nabývají maxima v bodě t = i/n a tvoří rozklad jednotky. (ii) Pro P i = (x i, y i ) můžeme psát x = n i=0 x ib i,n (t), y = n i=0 y ib i,n (t). Součtům na pravé straně těchto rovnic se říká Bernsteinovy aproximační polynomy. Ty se používají k aproximaci funkcí na intervalu (0, 1) na základě hodnot v bodech i/n [12]. Na body P i tedy můžeme pohlížet jako na vybrané hodnoty nějaké obecné křivky a na Bézierovu křivku jako na její aproximaci metodou Bernsteinových polynomů. (iii) Bézierovy křivky je možné analogicky definovat i pro vyšší dimenze, v praxi se běžně setkáme s křivkami v R 3. (iv) Složkami Bézierovy křivky jsou polynomy stupně n. Ty mají derivace všech řádů, Bézierova křivka je tedy C -hladká. Vlastnosti. (i) Bézierova křivka začíná a končí v kotvících bodech, tedy c(0) = P 0 a c(1) = P n. Obecně však neprochází řídícími body. (ii) Všechny body Bézierovy křivky leží uvnitř konvexního obalu kotvících a řídících bodů. (iii) V krajních bodech má křivka tečné vektory rovny P 1 P 0 v bodě P 0 a P n P (n 1) v bodě P n. Druhý a předposlední bod křivky tedy určují tečny v krajních bodech. 13

1.4 Úsečky, kvadriky a kubiky V počítačové grafice se používají zejména Bézierovy křivky stupňů jedna až tři, tedy úsečky, kvadriky a kubiky. Tyto speciální případy v této části stručně popíšeme. 1.4.1 Lineární Bézierovy křivky Lineární Bézierova křivka je dána dvěma kotvícími body P 0 a P 1 a rovnicí c(t) = P 0 B 0,1 (t) + P 1 B 1,1 (t), (1.4) kde B 0,1 (t) = t B 1,1 (t) = 1 t jsou Bernsteinovy polynomy stupně 1. (a) Bernsteinovy polynomy B i,1 (b) Lineární Bézierova křivka Obrázek 1.3: Lineární Bézierova křivka Poznámka. Platí C(t) = P 0 + t(p 1 P 0 ) t [0, 1]. (1.5) Odtud je zřejmé, že lineární Bézierova křivka je úsečka s koncovými body P 0 a P 1. 14

1.4.2 Kvadratické Bézierovy křivky Kvadratická Bézierova křivka je dána kotvícími body P 0 a P 2, jedním řídícím bodem P 1 a rovnicí 2 C(t) = P i B i,2 (t), (1.6) i=0 kde B 0,2 (t) = (1 t) 2 B 1,2 (t) = 2t(1 t) B 2,2 (t) = t 2 jsou Bernsteinovy polynomy stupně 2. (a) Bernsteinovy polynomy B i,2 (b) Kvadratická Bézierova křivka Obrázek 1.4: Kvadratická Bézierova křivka Křivka prochází prvním a třetím bodem a druhý bod současně určuje oba tečné vektory. Kvadratické Bézierovy křivky neboli kvadriky jsou využívány ve formátu TrueType pro popis fontů. To je ale spíše výjimka, většinou se kvůli přesnější kontrole používají křivky o stupeň vyšší. 15

1.4.3 Kubické Bézierovy křivky Kubická Bézierova křivka je dána dvěma kotvícími body P 0 a P 3, dvěma řídícími body P 1 a P 2 a rovnicí C(t) = 3 P i B i,3 (t), (1.7) i=0 kde B 0,3 (t) = (1 t) 3 B 1,3 (t) = 3t(1 t) 2 B 2,3 (t) = 3t 2 (1 t) B 3,3 (t) = t 3 jsou Bernsteinovy polynomy stupně 3. (a) Bernsteinovy polynomy B i,3 (b) Kubická Bézierova křivka Obrázek 1.5: Kubická Bézierova křivka Křivka vychází z bodu P 0 a končí v bodě P 3, přičemž bod P 1 určuje tečnu v P 0 a P 2 určuje tečnu v P 3. Podpora pro kubické Bézierovy křivky neboli kubiky je obsažena snad v každém programu či formátu pracujícím s vektorovou grafikou. 4 4 Výjimku tvoří formát TrueType, který obsahuje jen křivky kvadratické. 16

1.5 Bézierovy cesty Bézierovy křivky stupňů vyšších než 3 jsou pro praktické využití nevhodné a nepoužívají se. Hlavním důvodem je fakt, že posunutí libovolného řídícího bodu změní tvar křivky po celé její délce. Jak pro tvorbu a úpravu křivek uživateli, tak pro efektivní vykreslování je však žádoucí, aby se úpravy projevily pouze v blízkosti změny, kterou provádíme. Této vlastnosti říkáme lokální kontrola. Jedna možnost, jak docílit lokální kontroly nad tvarem křivky je spojení několika Bézierových křivek za sebe, tedy ztotožnění posledního bodu (P n ) každé křivky s prvním bodem (P 0 ) sousední křivky. Takto spojeným křivkám budeme říkat Bézierovy cesty nebo jen cesty. Jednotlivým křivkám pak říkáme segmenty. Je-li první bod prvního segmentu ztotožněn s posledním bodem posledního segmentu, mluvíme o uzavřené cestě. Obrázek 1.6: Bézierova cesta složena ze dvou segmentů Hladkost. Zatímco jednotlivé segmenty Bézierovy cesty jsou C -hladké, v bodech napojení máme zaručenu pouze parametrickou hladkost C 0. Hladkosti C 1 lze docílit, vzdáme-li se kontroly nad jedním z řídících bodů každé křivky a určíme jeho umístění tak, aby se v bodě napojení sousedních křivek jejich tečné vektory rovnaly. Společný krajní bod křivek A n = B 0 tedy musí být v polovině mezi řídícími body A n 1 a B 1. Často nám stačí napojení s geometrickou hladkostí G 1, v tom případě musíme body A n = B 0, A n 1 a B 1 umístit na společnou přímku. 17

Dělení segmentu. Pokud potřebujeme v určité části cesty větší kontrolu, je možné libovolný segment rozdělit na dva. Umístíme-li nové řídící body tak, aby byl na místě vkládaného kotvícího bodu zachován tečný vektor, tvar cesty se nezmění. Přidání bodu patří mezi základní nástroje při práci s cestami. 1.6 De Casteljaův algoritmus De Casteljaův algoritmus je rekurzivní metoda nalezení bodu na Bézierově křivce v daném bodě t. Algoritmus je také možné použít k získání kontrolních bodů křivek vzniklých rozdělením segmentu v bodě t na dva. Algoritmus. Mějme křivku c : [0, 1] R 2 stupně n zadanou body P 0 až P n a parametr t. Bod c(t) můžeme získat následujícím algoritmem. 1. Body P 0,..., P n označíme P 0,0,..., P 0,n. 2. Opakujeme následující krok pro r = 1,..., n 3. P r,i ((1 t)p r 1,i + (t)p r 1,i+1 ) i = 0,..., n r. 4. Vrátíme bod P n,0. Věta 1.3. Nechť kde c je Bézierova křivka daná body P 0,..., P n. De Castaljaův algoritmus se vstupem P 0,..., P n a t [0, 1] vrátí bod c(t). Důkaz. Na obrázku 1.7a je znázorněn algoritmus pro křivku stupně 6 zadanou body P 0,..., P 6. Sloupce odpovídají jednotlivým krokům algoritmu, levý sloupec tedy znázorňuje vstupní body P 0,0,..., P 0,6 a napravo je výsledný bod P 6,0. Šipkami je znázorněn vlastní výpočet (krok 3 algoritmu), šipka nahoru odpovídá vynásobení bodu číslem t a šipka dolů číslem (1 t). Podívejme se nyní, jak přispívá bod P 0,2 k výsledku. Bod P 0,2 se používá k výpočtu P 1,1 a P 1,2, ty se zase používají k výpočtu P 2,0, P 2,1 a P 2,2 atd. Je tedy zřejmé, že se bod P 0,2 bude podílet pouze na bodech, které spadají do modré oblasti vyznačené na obrázku. Přesné zastoupení bodu P 0,2 ve výsledku zjistíme sečtením zastoupení získaného po jednotlivých cestách. Uvažujme například posloupnost P 0,2 P 1,2 P 2,1 P 3,1 P 4,1 P 5,1 P 6,0. 18

(a) (b) Obrázek 1.7: Důkaz korektnosti De Casteljaova algoritmu V bodě P 1,2 má bod P 0,2 zastoupení (1 t). V bodě P 2,1 má bod P 1,2 zastoupení t, bod P 0,2 tedy t(1 t). Takto dojdeme k výsledku, že bod P 0,2 získá po této cestě ve výsledném bodě zastoupení t 2 (1 t) 4. Obecně je zastoupení bodu P 0,i v bodě P n,0 po dané cestě dáno počtem šipek nahoru (násobení t) a dolů (násobení (1 t)), které cesta obsahuje. Snadno ale nahlédneme, že tento počet je pro všechny cesty stejný, a to sice i šipek nahoru a (n i) šipek dolů (obrázek 1.7b). Po jedné cestě tedy získá bod P 0,i zastoupení t i (1 t) n i. Celkový počet cest z P 0,i do P n,0 je dán kombinačním číslem ( ) ( i+(n i) i = n ) i (vybíráme i šipek nahoru z celkové délky cesty n). Celkové zastoupení bodu P 0,i ve výsledku je tedy ( ) n t i (1 t) n i, i což je i-tý Bernsteinův polynum stupně n. Bod P n,0 tedy můžeme napsat jako P n,0 = n B i,n (t)p 0,i. (1.8) i=0 To je ale Bézierova křivka c v bodě t. Dokázali jsme tedy P n,0 = c(t). 19

(a) Kvadratická Bézierova křivka (b) Kubická Bézierova křivka Obrázek 1.8: Konstrukce Bézierovy křivky de Castaljaovým algoritmem Poznámka. De Casteljaův algoritmus můžeme také interpretovat geometricky následujícím způsobem. 1. Rozdělíme úsečky mezi sousedními body v poměru t a (1 t). 2. Vzniklé body opět spojíme úsečkami a postup opakujeme dokud nezbude poslední bod. 3. Poslední bod je roven c(t). Postup je znázorněn na obrázku 1.8. 1.7 Racionální Bézierovy křivky Aproximace kruhu. Bézierovy křivky mají za složky polynomy stupně n, není tedy možné jimi vyjádřit například kružnici. Často se dostáváme do situace, kdy je potřeba kruh alespoň aproximovat. To se zpravidla dělá čtyřmi Bézierovými křivkami, jednou pro každý kvadrant. 5 5 Detaily jsou uvedeny v [13]. 20

(a) Aproximace čtyřmi kubikami (b) Aproximace osmi kvadrikami Obrázek 1.9: Aproximace kruhu pomocí Bézierových křivek Rozšíříme-li kontrolní body Bézierovy křivky o jeden rozměr tak, že každému bodu P i přiřadíme váhu w i, získáme nový druh křivek, tzv. Racionální Bézierovy křivky. Pomocí těch už je možné přesně reprezentovat konické sekce, tedy části elips a hyperbol. Obrázek 1.10: Racionální kvadratická Bézierova křivka Definice 1.10. Nechť B i,n jsou Bernsteinovy polynomy stupně n. Racionální Bézierova křivka stupně n je parametrizovaná křivka c : [0, 1] R 2 určena body P 0,..., P n R 2 s váhami w 0,..., w n [0, ) a vztahem c(t) = n i=0 P ib i,n (t)w i n i=0 B i,n(t)w i t [0, 1]. (1.9) Poznámka. (i) Nezáleží na absolutní hodnotě vah, pouze na jejich poměru. 21

(ii) Jsou-li váhy všech bodů stejné, dostáváme díky vztahu (1.1) obyčejnou Bézierovu křivku. (iii) Mějme kvadratickou racionální Bézierovy křivku s w 0 = w 2 = 1. Položíme-li w 1 = 1, získáme parabolu. Pro w 1 < 1 dostaneme elipsu a pro w 1 > 1 hyperbolu. Viz obrázek 1.10. 22

1.8 Využití Bézierových křivek V této části si na několika příkladech ukážeme, jakým způsobem jsou Bézierovy křivky využity v běžně používaných formátech vektorové grafiky. 1.8.1 SVG SVG je formát pro popis dvourozměrné vektorové grafiky založený na technologii XML. Jeho vývoj byl zahájen v roce 1999 konzorciem W3C. Motivací jeho tvorby byl chybějící otevřený standard vektorové grafiky použitelný v prostředí internetu. Dnes je formát podporován většinou internetových prohlížečů 6 a řadou grafických editorů. Dá se tedy očekávat, že se dále rozšíří a stane se alternativou k formátům JPEG a PNG pro účely vektorové grafiky. Obrázek 1.11: Příklad SVG Na obrázku 1.11 je jednoduchý příklad vektorové grafiky, obdélník se zaoblenými rohy překrytý znakem A, který má nastavenou 50% průhlednost. Podívejme se nyní na zdrojový kód v SVG. 6 Tedy všemi významnými prohlížeči s výjimkou Internet Exploreru. Microsoft oznámil podporu SVG v připravované verzi IE9. 23

Ukázka: Soubor ve formátu SVG <? xml version =" 1.0 "?> <! DOCTYPE svg PUBLIC " -// W3C // DTD SVG 1.1// EN" " http: // www.w3.org / Graphics / SVG /1.1/ DTD / svg11. dtd "> <svg xmlns =" http: // www.w3.org /2000/ svg " width =" 467 " height =" 462 "> <rect x="10" y="70" width =" 100 " height =" 100 " rx="10" fill =" red " stroke =" black " stroke - width ="2px" /> <text x="10" y=" 210 " font - size =" 300 " fill =" blue " fill - opacity =" 0.5 ">A</ text > </ svg > Obdélník je popsán xml elementem <rect>, text elementem <text>. Tyto objekty jsou obsaženy v kořenovém elementu <svg> a soubor je opatřen XML a DOCTYPE hlavičkami. Umístění, barva, průhlednost a další vlastnosti jsou popsány v atributech příslušných elementů. Formát SVG podporuje také CSS styly 7 a jazyk XLink. 8 Kompletní specifikace [10] je dostupná na stránkách konzorcia W3C. 9 Cesty v SVG. Jedním ze základních nástrojů formátu SVG jsou cesty popsané v XML elementu <path>. Cesty v SVG jsou posloupnostmi segmentů, které mohou být čtyř typů - rovné čáry, kubické Bézierovy křivky, kvadratické Bézierovy křivky a eliptické oblouky. Cesty mohou být obtaženy nebo vyplněny, můžou sloužit jako vodítko pro text a animace, nebo je lze aplikovat na části obrázku jako tzv. vektorové masky. Obrázek 1.12: Text vedený podél Bézierovy cesty 7 Cascading Style Sheets, používají se také na stylování HTML dokumentů. 8 Jazyk popisující vztahy v rámci XML dokumentu, kromě SVG se využívá např. také v MathML. 9 http://www.w3.org/tr/svg/. 24

Vlastní cesta se specifikuje v kompaktním formátu pomocí atributu d elementu <path> za použití příkazů uvedených v tabulce 1.1. Mezi jednotlivé příkazy a jejich argumenty je možné vkládat čárky nebo mezery. Příkaz 10 Název Popis M x y moveto Počátek nové subcesty na pozici (x, y) Z closepath Uzavření subcesty úsečkou L x y lineto Úsečka do bodu (x, y) C x 1 y 1 x 2 y 2 x 3 y 3 curveto Kubická Bézierova křivka S x 2 y 2 x 3 y 3 smooth curveto Kubická Bézierova křivka navázána s hladkostí C 1. Bod P 1 je dopočítán. Q x 1 y 1 x 2 y 2 quadratic curveto Kvadratická Bézierova křivka T x 2 y 2 smooth quadratic curveto Kvadratická Bézierova křivka navázána s hladkostí C 1. Bod P 1 je dopočítán A r x r y r l s x y elliptical arc Eliptický oblouk Tabulka 1.1: Příkazy pro tvorbu cest v SVG Cestu z obrázku 1.6 na straně 17 tedy můžeme zapsat jako <path d="m 100,300 C 200,50 300,50 350,200 S 400,100 500,300"/>. Vzhled cesty můžeme dále přizpůsobit pomocí atributů elementu <path>. Ty nejdůležitější jsou uvedeny v následující tabulce. Atribut stroke stroke-width stroke-dasharray stroke-linecap stroke-linejoin stroke-opacity fill fill-opacity transform pathlength Vlastnost barva křivky síla křivky vzor pro šrafování způsob zakončení křivky (ostré nebo zaoblené) způsob napojení segmetů (tři varianty) průhlednost křivky barva výplně průhlednost výplně transformace křivky, např. vynásobením zadanou maticí autorem vypočítaná délka křivky, vhodné k potlačení numerických chyb u animací a vedení textu podél křivky Tabulka 1.2: Atributy elementu <path> Na obrázku 1.13 jsou příklady několika kubických Bézierových křivek a jejich zápis v SVG. 10 U Bézierových segmentů, tedy u příkazů C, S, Q a T platí P i = (x i, y i ). 25

Obrázek 1.13: Příklad Beziérových křivek v SVG 1.8.2 PostScript PostScript patří mezi tzv. jazyky pro popis stránek 11, popisuje tedy způsob, jakým bude stránka zobrazena na monitoru nebo vytištěna. PostScript je interpretovaný, dynamicky typovaný programovací jazyk založený na postfixové notaci. Obsahuje funkce určené k popisu a pozicování čar, křivek a dalších grafických prvků i pro vykreslování a formátování textu. Formát byl 11 Anglicky Page Description Languages (PDL). Do této skupiny patří také jazyky PDF, DVI nebo XPS. Všechny zmíněné jazyky podporují Bézierovy křivky. 26

vyvinut v roce 1985 firmou Adobe Systems jako standard pro komunikaci s dražšími tiskárnami, které PostScript dokáží interpretovat. Soubory PostScriptu používají příponu.ps, případně.eps. Později byl PostScript do značné míry nahrazen formátem PDF, který lze považovat za jeho nástupce. Specifikaci jazyka [11] vydává firma Adobe Systems. Křivky v PostScriptu. Jak již bylo řečeno, PostScript využívá postfixovou notaci, argumenty funkcí a procedur jsou tedy uvedeny vždy před jejich názvem. Následující ukázka obsahuje jednoduchý příklad kompletního PostScript souboru. Ukázka: Soubor ve formátu PostScript %! PS 50 50 600 600 setbbox % Set boundary box 100 300 moveto % Move to starting point 200 50 300 50 350 200 curveto % First cubic segment 400 350 400 100 500 300 curveto % Second cubic segment stroke % Close curve showpage % Print all on the page Soubor začíná hlavičkou %!PS, následuje příkaz setbbox, který vymezuje oblast do které se bude kreslit. Příkazy moveto a curveto definují vlastní Bézierovu cestu (pořadí argumentů je stejné jako v SVG). Příkaz stroke potom křivku obtáhne (alternativou je příkaz fill, který cestou ohraničenou oblast vyplní). Příkazem showpage se stránka uzavře a vykreslí. Výsledek je na obrázku 1.14. Obrázek 1.14: Bézierova cesta v PostScriptu 27

Kapitola 2 DCT komprese Obrázky mohou obsahovat značné množství informace 1 a bývají reprezentovány datovými strukturami, jejichž velikost často činí problémy při jejich uskladnění či přenosu po síti. Pomocí bezztrátové komprese lze velikost obrázků snížit na určitou úroveň, potřebujeme-li však vyšší míru komprese, musíme se vzdát požadavku na zachování veškeré informace. Naštěstí se ukazuje, že obrázky obsahují zpravidla informace více, než je potřeba k naplnění jejich úlohy. Podstatou ztrátové komprese tedy bude identifikovat a vypustit ony nepodstatné detaily. Tato kapitola pojednává o metodě založené na diskrétní kosinové transformaci (DCT), která vychází v z předpokladu, že vysoké frekvence (tedy rychlé změny) jsou pro vnímání obrázku méně důležité než frekvence nízké (pomalé změny). Obrázek je možné chápat jako matici, v jejíž složkách jsou uloženy stupně šedi, 2 tedy jako bod vektorového prostoru. Pomocí diskrétní kosinové transformace ho můžeme převést do báze, kde jako složky souřadnic vystoupí zastoupení jednotlivých frekvencí. Hodnoty u vysokých frekvencí pak můžeme zaokrouhlit nebo úplně vypustit. V první části této kapitoly dojdeme od Fourierových řad k diskrétní kosinové transformaci, v druhé části pak představíme formát JPEG, který je na DCT kompresi založen. Teoretická část je zpracovaná podle materiálů [14], [15], [16] a [17], praktická část podle [18], [19] a vlastní specifikace formátu JPEG [20]. 1 Slovem informace zde míníme informaci ve smyslu Shannonovy teorie informace, která má s kompresí úzkou souvislost [16]. 2 Např. na stupnici od 0 do 255. 28

2.1 Fourierovy řady Fourierova řada slouží k vyjádření periodické funkce jako nekonečného součtu jednoduchých harmonických funkcí. Fourierovy řady jsou pojmenovány po francouzském matematikovi a lékaři Josephu Fourierovi (1768 1830), který k nim dospěl při hledání řešení rovnice vedení tepla v železné desce. Na obrázku 2.1 je znázorněna aproximace jednoduchých funkcí pomocí několika částečných součtů jejich Fourierových řad. Obrázek 2.1: Částečné součty Fourierových řad 2.1.1 Trigonometrické Fourierovy řady Definice 2.1. Funkce f se nazývá 2π-periodická, platí-li pro všechna x R vztah f(x + 2π) = f(x). Množinu všech 2π-periodických funkcí značíme P 2π. Definice 2.2. Nechť f je 2π-periodická funkce. Řekneme, že je po částech spojitá, existuje-li konečně mnoho bodů π x 1 <... < x m < π 29

tak, že f je na intervalech (x i, x i+1 ) spojitá a v krajních bodech těchto intervalů má vlastní jednostranné limity. Definice 2.3. Nechť f P 2π je po částech spojitá funkce. Řekneme, že je po částech hladká, existuje-li konečně mnoho bodů π x 1 <... < x m < π tak, že f má na intervalech (x i, x i+1 ) spojitou derivaci a v krajních bodech těchto intervalů má f i její derivace f vlastní jednostranné limity. Definice 2.4. Nechť funkce f P 2π je Lebesgueovsky integrovatelná na intervalu [ π, π]. Jejími trigonometrickými Fourierovými koeficienty rozumíme čísla a n = 1 π b n = 1 π π π π π f(x) cos(nx) dx n 0, f(x) sin(nx) dx n 1. Trigonometrickou Fourierovou řadou funkce f pak rozumíme řadu a 0 2 + (a n cos(nx) + b n sin(nx)). (2.1) n=1 Věta 2.1. Nechť f P 2π je po částech hladká. Pak platí (i) Trigonometrická Fourierova řada funkce f konverguje bodově na R a její součet v bodě x R je roven 1 2 ( lim f(t) + lim f(t)). t x t x+ (ii) Je-li navíc f spojitá na R, konverguje její trigonometrická Fourierova řada stejnoměrně a její součet v bodě x je roven f(x). Důkaz je uveden v knize [14]. Poznámka. (i) Je-li f sudá, jsou koeficienty b n = 0. (ii) Je-li f lichá, jsou koeficienty a n = 0. 30

2.1.2 Exponenciální Fourierovy řady Pojem Fourierovy řady je možné rozšířit také na komplexní koeficienty. Definice 2.5. Nechť funkce f P 2π je Lebesgueovsky integrovatelná na intervalu [ π, π]. Exponenciálními Fourierovými koeficienty rozumíme čísla c n = 1 2π π π Exponenciální Fourierovou řadou pak řadu Poznámka. f(x) = f(x)e inx dx. (2.2) n= c n e inx. (2.3) (i) Eulerův vzorec e inx = cos(nx) + i sin(nx) nám dává následující vztahy mezi a n, b n a c n. a n = c n + c n n = 0, 1, 2,... (2.4) b n = i(c n c n ) n = 1, 2,... (2.5) (ii) Exponenciální Fourierovy řady tvoří základ mimořádně významné Fourierovy transformace. 2.1.3 Fourierova transformace Fourierovy řady motivují definici Fourierovy transformace [15]. Nahradíme-li interval [ π, π] v exponenciální Fourierově řadě intervalem [ 1, 1 ], můžeme L L při L uvažovat místo posloupnosti koeficientů c n reálnou funkci ˆf. Místo sumy (2.2) pak píšeme integrál a pro f L 1 (R) získáme rovnost ˆf(ξ) = přičemž ˆf C(R). Je-li navíc ˆf L 1 (R), platí také f(x) e 2πixξ dx, (2.6) f(x) = ˆf(ξ) e 2πixξ dξ s.v. (2.7) 31

2.2 Diskrétní Fourierova transformace Rovnosti (2.6) a (2.7) mají řadu aplikací, pro naše potřeby jsou ale nevhodné. V praxi totiž nemůžeme zaznamenat signál pro všechny hodnoty t z intervalu 0 t T. Místo toho máme naměřenou hodnotu signálu v určitých okamžicích t n z tohoto intervalu. Mezi okamžiky t n se běžně dodržuje pravidelný interval. V této části představíme diskrétní Fourierovu transformaci, kterou lze použít k převedení diskrétního signálu z časové domény do frekvenční. Dále rozšíříme tento koncept na dvourozměrné signály. 2.2.1 Diskrétní ortogonální transformace Definice 2.6. Nechť {e 0,..., e N 1 } je nějaká ortogonální báze prostoru C N. Pak pro každý vektor v C N existuje právě jeden vektor v C N, pro který platí v = N 1 j=0 v(j)e j. (2.8) Říkáme, že vektor v je ortogonální transformace vektoru v vzhledem k bázi {e 0,..., e N 1 }. Poznámka. (i) Z pohledu lineární algebry je proces ortogonální transformace změnou báze. Vektor v jsou nové souřadnice vektoru v vzhledem k bázi {e 0,..., e N 1 }. (ii) Označme E matici složenou ze sloupců e i. Rovnost (2.8) můžeme napsat jako v = E v (2.9) Věta 2.2. Nechť je báze {e 0,..., e N 1 } navíc ortonormální. Pak pro všechna v C N platí vztah v = (E) v (2.10) Důkaz. Sloupce matice E jsou ortonormální, zřejmě tedy platí (E) E = I a E 1 = (E). Odtud a z (2.9) dostaneme tvrzení. 32

2.2.2 Diskrétní Fourierova transformace Definice 2.7. Systém w k = 1 N 1 e 2πik/N. e 2πijk/N. e 2πi(N 1)k/N k = 0,..., N 1 (2.11) tvoří ortonormální bázi prostoru C N. Ortonormální transformaci vzhledem k této bázi nazveme Diskrétní Fourierova transformace (DFT) Ze vztahů (2.9) a (2.10) dostaneme vzorce Poznámka. ĥ(v) = h(k) = N 1 1 h(k)e 2πikv/N v = 0,..., N 1, (2.12) N k=0 N 1 1 ĥ(v)e 2πikv/N k = 0,..., N 1. (2.13) N v=0 (i) Počítání DFT pomocí vzorce (2.12) vyžaduje N 2 operací. Existuje však velice efektivní algoritmus zvaný FFT (Fast Fourier Transform), pomocí kterého lze DFT vypočítat pomocí O(N log N) operací. Stejným algoritmem lze navíc počítat i zpětnou transformaci, navíc má velmi jednoduchou strukturu a je ideální pro hardwarovou implementaci. (ii) Diskrétní Fourierova transformace má široké využití ve spektrální analýze k převedení navzorkovaného signálu z časové domény do frekvenční. Další důležité uplatnění této transformace je při násobení polynomů dva polynomy stupně n se převedou z reprezentace pomocí n koeficientů do funkčních hodnot v n bodech, tyto hodnoty se potom po dvojicích vynásobí a výsledek se převede zpět do reprezentace pomocí koeficientů. Při správně zvolených bodech lze k převodu mezi dvěma reprezentacemi použít diskrétní Fourierovu transformaci. Díky efektivními algoritmu FFT pak lze polynomy násobit v čase O(N log N) (triviální algoritmus potřebuje O(N 2 )). Podrobný popis této metody najdeme v [21]. 33

2.2.3 Diskrétní kosinová transformace (DCT II) Definice 2.8. Systém a k = C(k) cos kπ 2N cos 3kπ 2N. cos (2N 1)kπ 2N k = 0,..., N 1, (2.14) kde C(0) = 1/N a C(k) = 2/N pro k 0 tvoří ortonormální bázi. Ortonormální transformaci vzhledem k této bázi nazveme Diskrétní kosinová transformace (DCT II). Obrázek 2.2: Báze DCT pro N = 8 Ze vztahů (2.9) a (2.10) získáme rovnosti x(v) = x(v) = N 1 k=0 x(k)c(v) cos N 1 x(v)c(v) cos v=0 (2k + 1)vπ 2N (2k + 1)vπ 2N v = 0,..., N 1, (2.15) k = 0,..., N 1. (2.16) Tento typ transformace se po rozšíření do dvou rozměrů (které bude dále popsáno) využívá ve formátu JPEG. 34

Poznámka. Má-li vektor x reálné složky, bude mít jeho DCT transformace x také pouze reálné složky. Říkáme, že DCT je reálná transformace. Platí tedy kde A je matice složená ze sloupců a i. 2.3 2D Transformace v = A v (2.17) v = A v (2.18) Abychom mohli pracovat s dvourozměrnými signály (v našem případě s obrázky), potřebovali bychom rozšířit diskrétní transformace do 2D. Obě transformace představené v minulé sekci, tedy DCT a DFT jsou speciálními případy obecnějších ortogonálních transformací. V této sekci nejprve ukážeme, jak tyto transformace obecně rozšířit do 2D. Potom postup demonstrujeme na 2D diskrétní kosinové transformaci, která se používá ve specifikaci JPEG. 2.3.1 2D ortogonální Transformace Prvky báze ortogonální 2D transformace můžeme zkonstruovat z báze jednorozměrné ortogonální transformace. Mějme ortogonální transformaci s bází {e 0,..., e N 1 }. Pro každou dvojici u, v = 0,..., N 1 definujme matici B uv, jejíž prvky jsou dány B uv (j, k) = e u (j)e v (k) 0 j, k N 1. (2.19) Dá se ukázat že těchto N 2 matic tvoří ortonormální bázi prostoru C N 2. Nechť nyní f je matice typu N N. Existuje právě jedna matice ˆf tak, že f(j, k) = N 1 u,v=0 ˆf(j, k)b uv (j, k). (2.20) Matici ˆf budeme říkat transformace matice f vzhledem k bázi Analogicky jako v (2.10) platí {B uv 0 u, v N 1}. ˆf(u, v) = N 1 j,k=0 f(j, k)b uv (j, k). (2.21) 35

Poznámka. Dále bude výhodné si matici f představovat jako diskrétní dvourozměrný signál, tedy například obrázek, kde hodnota prvku f(j, k) reprezentuje intenzitu (resp. stupeň šedi) na pozici (j, k) obrázku. 2.3.2 2D kosinová Transformace Aplikujeme-li výše uvedený postup na vektory {a 0,..., a N 1 } z (2.14), získáme ortonormální bázi prostoru C N 2 tvořenou maticemi B uv s prvky B uv (j, k) = C(u) cos (2j + 1)uπ C(v) cos 2N (2k + 1)vπ. (2.22) 2N Obrázek 2.3: Báze dvourozměrné DCT pro N = 8 Dosazením do vztahů (2.20) a (2.21) získáme následující vztahy pro dopřednou a inverzní transformaci: ˆf(u, v) = f(j, k) = N 1 j,k=0 N 1 u,v=0 f(j, k)c(u) cos ˆf(u, v)c(u) cos (2j + 1)uπ (2k + 1)vπ C(v) cos 2N 2N (2j + 1)uπ C(v) cos 2N (2.23) (2k + 1)vπ (2.24) 2N Tento typ transformace se používá ve standardu JPEG. 36

2.4 Formát JPEG Formát JPEG je je dnes v podstatě jediný rozšířený formát v oblasti ztrátové komprese obrázků. K jeho popularitě zajisté přispěl fakt, že se jedná o otevřený formát, především ale JPEG dosahuje vynikajících výsledků na široké třídě obrázků při minimálních požadavcích na zdroje. JPEG je založen na myšlence lokální aproximace obrázek je rozdělen do bloků o velikosti 8 8 pixelů a bloky jsou poté zpracovávány jednotlivě. Díky tomu je implementace standardu jednoduchá, při vysoké kompresi jsou ale bloky na výsledném obrázků zřetelné. JPEG je pojmenován po expertní skupině Joint Photographic Experts Group, která standard [20] vytvořila. Práce na standardu začali v polovině osmdesátých let, hlavními požadavky byla efektivní implementace v HW i SW, podpora černobílých i barevných obrázků s barevnou hloubkou 24 a 36 bitů. V roce 1992 byl standard schválen pod označením ISO/IEC 10918 1. Přestože standard JPEG obsahuje také algoritmus pro bezztrátovou kompresi, ten se v praxi nikdy neprosadil a většina produktů tento režim nepodporuje. Skupina vydala později také standard JPEG 2000, který je založený na tzv. waveletech. Tento formát dosahuje výrazně lepších výsledků než JPEG, především při vysokých kompresních poměrech. Díky rozšířenosti formátu JPEG, jehož kvalita pro většinu aplikací dostačuje, se ale nový formát dodnes příliš nerozšířil. Komprese. Průběh komprese rozdělíme na pět fází: 1. Snížení rozlišení chromatických složek. Obrázek se převede do reprezentace, ve které jsou odděleny informace o intezitě a barvě jednotlivých bodů. Barevným složkám poté může být sníženo rozlišení až na polovinu. 2. Rozdělení obrázku do bloků. Obrázek se rozdělí do bloků o velikosti 8 8 pixelů. Například fotografie s rozlišením 3 264 2 448 pixelů (běžné rozlišení digitálních fotoaparátů) bude rozdělena na 408 306 = 124 848 bloků. 3. Transformace bloků. Každý blok je transformován tak, aby bylo zřetelné zastoupení jednotlivých prostorových frekvencí. JPEG využívá dvourozměrnou DCT transformaci typu II. 37

(a) původní PNG, 556 kb (b) JPEG, 154 kb (c) JPEG, 61 kb (d) JPEG, 13 kb (e) JPEG, 8 kb (f) JPEG, 4 kb Obrázek 2.4: Ukázka JPEG komprese: Lenaÿ (512 512) 38

(a) původní PNG, 556 kb (b) JPEG, 154 kb (c) JPEG, 61 kb (d) JPEG, 13 kb (e) JPEG, 8 kb (f) JPEG, 4 kb Obrázek 2.5: Ukázka JPEG komprese: Lena (512 512), výřez 180 180 39

4. Kvantizace. V závislosti na požadovaném kompresním poměru jsou koeficienty v transformovaném bloku kvantizovány, tedy je redukován počet hodnot kterých mohou nabývat. Kvantizace je agresivnější u koeficientů s vyššími frekvencemi. Při maximální míře kvantizace dochází k vynulování příslušných koeficientů. V tomto kroku dochází ke ztrátě informace. 5. Kódování. Výstup předchozího kroku je zakódován metodami bezztrátové komprese. JPEG podporuje Huffmanovo a aritmetické kódování, to druhé však nebývá vždy implementováno. 6. Uložení. Výsledný proud dat je spolu s dalšími informacemi uložen do souboru typu JFIF. Jednotlivé fáze budou nyní popsány podrobněji. 2.4.1 Převod z RGB do Y C b C r Barevné obrázky jsou v počítači zpravidla reprezentovány pomocí tří složek, které odpovídají červené, zelené a modré barvě. Počet bitů potřebný k uložení jednoho obrazového bodu (pixelu) se nazývá barevná hloubka. Dnes je zdaleka nejrozšířenější barevná hloubka 24 bitů, tedy 8 bitů na barevnou složku. Standard JPEG podporuje také obrázky s barevnou hloubkou 36 bitů, tato varianta však většinou nebývá implementována. Základní barvy modrá, zelená a červená odpovídají třem druhům fotoreceptorů v oční sítnici a hodnoty barevných složek obrázku se přímo převádějí na intenzitu vyzařování dané barvy na zobrazovacím zařízení. Obrázek 2.6: Detail RGB mřížky na CRT monitoru Základem ztrátové komprese je oddělení důležité informace od té méně důležité. Využijeme faktu, že lidské oko je citlivější na rozdíly v intenzitě (luminiscenci) než v barvě (chrominanci) [22]. Převedeme tedy obrázek z 40

barevného prostoru RGB do prostoru Y C b C r, kde složka Y odpovídá luminiscenci a složky C b a C r ponesou informaci o barvě. Na tyto dvě složky pak můžeme aplikovat vyšší míru komprese, nebo dokonce snížit jejich rozlišení. Převod z prostoru RGB do Y C b C r lze provést pomocí následujících vztahů, které jsou přímo součástí specifikace. Y = 0, 299R + 0, 587G + 0, 114B C b = 0, 1687R 0, 3313G + 0, 5B + 128 C r = 0, 5R 0, 4187G 0, 0813B + 128 2.4.2 Podvzorkování chromatických složek Po převedení obrázku do barevného prostoru Y C b C r následuje snížení rozlišení (podvzorkování) složek C b a C r, tedy sloučení několika sousedních pixelů (bloku) do jednoho. Hodnota v novém pixelu se nastaví na průměr bloku. Formát JPEG podporuje tři režimy: 1. původní rozlišení, 2. snížené rozlišení, bloky 1 2 pixelů, 3. snížené rozlišení, bloky 2 2 pixelů. Volba režimu podvzorkování je buď ponechána na uživateli nebo většinou nastavena automaticky programem v závislosti na zvolené kvalitě komprese. Snížení rozlišení barevných složek na polovinu se může zdát jako velmi drastické snížení kvality, ve většině případech to ale z několika důvodů není špatná strategie: Lidské oko je citlivější na intenzitu než na barvu. Většina digitálních fotoaparátů generuje obrázky s nižším rozlišením barev než je rozlišení obrázku. Barvy jednotlivých bodů jsou výsledkem interpolace několika sousedících barevných čidel na senzoru. Přestože se podvzorkování barevných složek chová poměrně dobře na větších barevných plochách, může způsobovat významné zkreslení barev v blízkosti hran. K největšímu zkreslení dochází v případě barevných pruhů širokých přibližně jeden pixel, viz obrázek 2.8. 41

(a) původní obrázek (b) složky R, G, B (c) složky Y, Cb, Cr Obrázek 2.7: Převod z barevného prostoru RGB do Y Cb Cr 42

(a) původní rozlišení (b) snížené rozlišení, bloky 2 2 Obrázek 2.8: Zkreslení barev při podvzorkování chromatických složek 2.4.3 Transformace bloků V dalším kroku jsou jednotlivé barevné složky rozděleny do bloků o velikosti 8 8 pixelů. Na tyto bloky je potom aplikována diskrétní kosinová transformace typu II, která byla představena v sekci 2.2.3 ˆf(u, v) = N 1 j,k=0 f(j, k)c(u) cos 2.4.4 Kvantizace koeficientů (2j + 1)uπ (2k + 1)vπ C(v) cos 2N 2N Kvantizace můžeme definovat jako rozdělení spojitého intervalu na několik podintervalů, přičemž každý podinterval je reprezentován hodnotou z nějaké diskrétní množiny. Příkladem kvantizace je zaokrouhlení čísla na určitý počet desetinných míst. V kompresi JPEG dochází ke kvantizaci DCT koeficientů obsažených v matici ˆf(u, v) vypočítané v předchozím kroku. Hodnoty v této matici jsou celočíselně vyděleny složkami tzv. kvantizační matice. Čím vyšší číslo se nachází na příslušném místě v kvantizační matici, tím méně hodnot může příslušný koeficient nabývat. Míra kvantizace bude samozřejmě nižší u koeficientů odpovídajících nízkým frekvencím (tedy levý horní roh matice). Toto je běžně používaná kvantizační matice definovaná ve standardu JPEG 43

Q = 16 11 10 16 24 40 51 61 12 12 14 19 26 58 60 55 14 13 16 24 40 57 69 56 14 17 22 29 51 87 80 62 18 22 37 56 68 109 103 77 24 35 55 64 81 104 113 92 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 99 Kvantizace DCT koeficientů vede k tomu, že se ve výsledné matici často opakují nízké hodnoty. Většina kvantizacovaných koeficientů bývá dokonce rovna nule. Tím jsou připraveny ideální podmínky pro další fázi, která na kvantizovaná data aplikuje metody bezztrátové komprese. 2.4.5 Kódování Dále jsou kvantizované hodnoty linearizovány: přečteny v pořadí od nízkých frekvencí směrem k vysokým, přitom jsou speciálně kódovány sekvence po sobě jdoucích nul. Následují-li navíc po některém koeficientu již jen samé nuly, je sekvence ukončena speciálním symbolem EOB. Obrázek 2.9: Linearizace DCT koeficientů První koeficient, který odpovídá průměrné barvě bloku se označuje jako DC koeficient, ostatní jako AC koeficienty. Při linearizaci je od DC koeficientu odečtena hodnota DC koeficientu předchozího bloku. Tento krok vychází z faktu, že hodnoty DC koeficientů bývají v sousedních blocích podobné, tímto postupem se tedy dosahuje nižších hodnot, které se efektivněji kódují. 44

Linearizovaná posloupnost je zakódována pomocí Huffmanova kódování. Standard JPEG umožňuje také použití aritmetického kódování, které dosahuje o něco lepších výsledků než Huffmanovo, kvůli složitější implementaci ale nebývá podporováno. Huffmanovo kódování konvertuje jednotlivé hodnoty, které se v posloupnosti vyskytují do bitových řetězců různé délky. Hodnoty, které se v posloupnosti vyskytují nejčastěji jsou konvertovány na řetězce s nejmenším počtem bitů. Bitové řetězce různých hodnot jsou přitom zvoleny tak, aby byla zajištěna jednoznačnost výsledné sekvence (tedy žádný řetězec nesmí být prefixem jiného). Komprese touto metodou probíhá ve dvou fázích. První projde posloupnost a vytvoří tabulku četností jednotlivých hodnot. Ve druhé fázi se na základě těchto hodnot vytvoří převodní tabulka (ve skutečnosti se jedná o binární strom), která se potom aplikuje na vstupní posloupnost. Tato převodní tabulka je potřeba při následné dekompresi, je tedy nutné ji přiložit ke kódovaným datům. Při kódování linearizovaných dat se používají čtyři různé převodní tabulky: 1. tabulka s AC koeficienty luminiscentní složky Y, 2. tabulka s DC koeficienty luminiscentní složky Y, 3. tabulka s AC koeficienty chromatických složek C b a C r, 4. tabulka s DC koeficienty chromatických složek C b a C r. 2.4.6 Uložení do JFIF Posledním krokem v kompresi JPEG je uložení zkomprimovaných dat do souboru, jehož typ se označuje jako JFIF. Soubory v tomto formátu mají příponu.jpeg nebo.jpg. Soubor je rozdělen do segmentů, přičemž každý začíná tzv. značkou, což je dvoubytová hodnota, kde první byte má vždy hodnotu ff 3 a hodnota druhého bytu určuje typ segmentu. Například značka ffd8 označuje segment začátku souboru, značkou ffda začíná segment obsahující vlastní proud dat. Soubor dále obsahuje segmenty s definicemi použitých kvantizačních a Huffmanových tabulek, segmenty s informacemi o rozměrech a rozlišení obrázku atd. 3 Hodnoty budeme zapisovat v šestnáctkové soustavě. 45

V této části si ukážeme na konkrétním příkladu strukturu formátu JFIF. Komprimujeme obrázek o velikosti 16 16 pixelů. Výsledek bude vypadat například takto: Ukázka: Soubor ve formátu JPEG/JFIF 0000000 : ff d8 ff e0 00 10 4 a 46 49 46 00 01 01 01 00 60 0000010 : 00 60 00 00 ff db 00 43 00 03 02 02 03 02 02 03 0000020 : 03 03 03 04 03 03 04 05 08 05 05 04 04 05 0 a 07 0000030 : 07 06 08 0c 0a 0c 0c 0b 0a 0b 0b 0d 0e 12 10 0d 0000040 : 0 e 11 0 e 0 b 0 b 10 16 10 11 13 14 15 15 15 0 c 0 f 0000050 : 17 18 16 14 18 12 14 15 14 ff db 00 43 01 03 04 0000060 : 04 05 04 05 09 05 05 09 14 0 d 0 b 0 d 14 14 14 14 0000070 : 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 0000080 : 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 0000090 : 14 14 14 14 14 14 14 14 14 14 14 14 14 14 ff c0 00000 a0: 00 11 08 00 10 00 10 03 01 22 00 02 11 01 03 11 00000 b0: 01 ff c4 00 17 00 00 03 01 00 00 00 00 00 00 00 00000 c0: 00 00 00 00 00 00 02 07 08 0 a ff c4 00 14 10 01 00000 d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000 e0: ff c4 00 14 01 01 00 00 00 00 00 00 00 00 00 00 00000 f0: 00 00 00 00 00 06 ff c4 00 23 11 00 02 01 01 08 0000100 : 03 01 00 00 00 00 00 00 00 00 00 11 13 12 61 06 0000110 : 07 14 15 21 23 41 42 02 03 16 17 ff da 00 0 c 03 0000120 : 01 00 02 11 03 11 00 3 f 00 9 c 84 41 34 1 a 0 d 7 e 0000130 : b6 67 f1 8 c b7 7 b 17 8 b 6 f 55 41 4 a af b2 52 65 0000140 : 00 e4 e8 c6 e6 6 d 0 f c3 66 1 b 4 e 72 bb 40 41 94 0000150 : f2 26 54 03 93 a7 ff d9 Soubor obsahuje 11 segmentů, které nyní popíšeme. 1. Start Of Image (SOI). Značka začátku souboru. 0000000: ff d8 2. Application Marker (APP0) JFIF hlavička. 0000000: ff e0 00 10 4a 46 49 46 00 01 01 01 00 60 0000010: 00 60 00 00 46