Maturitní téma: Počítačová grafika (rastrová a vektorová grafika, grafické programy, formáty)
Grafické editory Grafické editory jsou určeny k tvorbě a editaci grafiky neboli obrázků. 2 základní druhy grafických editorů lišící se způsobem vzniku a záznamu grafické informace: Bitmapové (rastrové) editory: grafická informace vyjádřeny formou matice obrazových bodů - pixelů, přičemž u každého pixelu je udána informace o jeho barvě výhody: schopnost věrné reprezentace "přirozeného" obrazu (sejmutého skenerem či digitálním fotoaparátem), robustnost (nehrozí ztráta informací při přenosu do jiného prostředí), poměrně snadné zpracování při výstupu nevýhody: velký objem souborů, rostoucí úměrně s rozměry a rozlišením (redukci objemu nicméně napomáhají různé kompresní algoritmy), bitmapové obrázky lze jen s problémy bez ztráty kvality zvětšovat (ale i zde existují různé metody, jak kvalitního zvětšení dosáhnout), zvětšují se body, ze kterých je obrázek vytvořen, okraje obrázku jsou „zubaté“ příklady tohoto typu editoru jsou: - Paintbrush - nejsnáze dostupný, protože je součástí OS Windows - Zebra – český editor - Adobe Photoshop - Corel PhotoPaint - GIMP – OpenSource, šířen zdarma Vektorové (objektové) editory: grafická informace je uložena ve formě rovnice křivky, které jsou základním elementem každého obrázku, celý obrázek se skládá z většího počtu těchto objektů, které se mohou různě prolínat a s každým se dá pracovat zvlášť, s tímto typem grafiky pracují například profesionální návrhářské (CAD) a kartografické systémy výhody: zvětšování obrázku bez ztráty kvality jako výstupní zařízení se často používá zapisovač (plotter), kde pero nebo více barevných per jezdí po papíře a kreslí. příklady tohoto typu editoru jsou: - Corel Draw - Zoner Callisto
Bezztrátová (lossless) komprese V dnešní době se prakticky setkáváme především se dvěma typy metod pro bezztrátovou kompresi dat: Statistické metody Statistické metody využívají pravděpodobností výskytu znaků v souboru. Huffmanovo kódování Základem je nahrazení znaku (obvykle 8 bitů) kódem o určitém počtu bitů. K tomu se využívá pravděpodobnosti výskytu znaku v souboru. Vytváříme tedy schéma, ve kterém znakům s nejmenší pravděpodobností výskytu přiřazujeme kratší kódy než znakům s největší pravděpodobností. Dnes se Huffmanova komprese využívá v některých komunikačních protokolech a je součástí ztrátové komprese JPEG. Aritmetické kódování Myšlenka aritmetického kódování spočívá v reprezentaci vstupního řetězce reálným číslem R pro které platí 0 £ R < 1. V závislosti na délce vstupního řetězce se zvyšuje počet desetinných míst, která jsou pro zakódování řetězce potřeba. Předpokládejme, že vstupní řetězec je složen pouze ze samohlásek a četnost jejich výskytu je znázorněna v prvním sloupci. Počáteční interval si rozdělíme v poměru četností výskytu znaků. Každý znak je tedy reprezentován určitým menším podintervalem. Poté v závislosti na aktuálním znaku vybereme jeden podinterval, který opět rozdělíme v poměru četností a načteme další znak. Tímto postupem se interval neustále zužuje. Z posledního intervalu vybereme jedno reprezentující číslo, jehož zápis představuje zkomprimovaný řetězec. Slovníkové metody Slovníkové metody vytvářejí indexovaný slovník opakujících se částí kódu. LZ 77 se často používá u kompresních programů (ZIP, Rar, …), které tuto metodu samozřejmě kombinují s dalšími metodami a vylepšeními, čímž dosahují velmi dobrých kompresních poměrů. Princip metody spočívá v postupném prohledávání celého souboru tak, že vždy část rozdělíme na dvě „okénka“, kde první tvoří historii, kterou prohledáváme, a druhým okénkem se dívám dopředu a hledám, zda v něm není posloupnost znaků, která se už jednou vyskytuje v okénku historie. Pokud takovou posloupnost najdu, nahradím ji uspořádanou dvojicí (offset o kolik znaků jdu zpět, délka sekvence) Při konečném zápisu zkomprimovaných dat potom rozlišuji zápis samotného písmena a odkazu do minulosti použitím tzv. identifikačního bitu. LZW funguje na principu tvorby slovníku, do kterého se ukládají opakující se znaky. Jakmile se znaky objeví v souboru znovu, jsou okamžitě nahrazeny číslem, odkazující na ony znaky ve slovníku. Důležité je ještě poznamenat, že slovníky se neukládají do zkomprimovaného souboru (jsou většinou velké a komprimace by neměla smysl), nýbrž jsou dělány tak důmyslně, že se při dekódování tvoří znovu ze zakódovaných souborů.
Ztrátová (lossy) komprese Datová komprese, která se při komprimování záměrně dopouští ztráty informací díky svému úsilí docílit co nejvyššího kompresního poměru. Není použitelná tam, kde je nutný naprosto přesný přenos dat (texty, spustitelné soubory), ale je naopak velmi žádaná až nezbytná při kompresi obrázků či zvukových dat. Díky této kompresi je možné umístit např. na CD-ROM či disky DVD tisíce obrázků, celovečerní filmy či hudební díla v profesionální kvalitě. Transformační ztrátové komprese obrazu Zde se využívá poznatků ze subjektivního vnímání obrazu. Tyto metody vycházejí z analýzy obsahu obrazu. Obraz se podrobí rozkladu na několik složek podle prostorové frekvence, například použitím diskrétní kosinové transformace (DCT) nebo waveletové transformace. Jednotlivé sloky se pak různým způsobem zredukují, např změnou kvantizace (bitové hloubky) - tak, aby výsledek byl ještě "koukatelný". Podvzorkováním vznikne polotovar, který se dále upraví některými bezeztrátovými kompresními metodami. Transformační ztrátové kompresní metody poskytují o více než řád lepí kompresi, než jen bezeztrátová komprese. Jsou většinou asymetrické. Fraktální komprese obrazu Fraktální komprese obrazu není příliš využívaný algoritmus. Je silně asymetrický, komprese trvá o několik řádů déle ne dekomprese, co zatím brání jeho většímu rozšíření. Poskytuje ovšem nejlepší kompresi obrazových dat. Fraktální komprese je založena na poznatcích z teorie fraktálů. Nejdůležitější vlastností fraktálů z hlediska komprese obrazu je soběpodobnost (self-similarity). Matematicky je soběpodobná množina definována jako taková, která sestává z kopií sebe samé. Tyto kopie jsou různě transformované, např. zmenšené, otočené, posunuté atd. Nalezli bychom četné analogie v přírodě, například větev stromu sestává z dalších větví, menších a mírně odlišného tvaru, ty zase z menších větviček... Princip fraktální komprese tedy spočívá v tom, že algoritmus se snaží v obraze vyhledávat různé vzory, které se v něm různě transformovány opakují. Zaznamenávají se nalezené vzory a všechny transformace, popisující jejich další výskyty v obraze. Snahou je poskládat obraz z co nejmenšího množství vzorů, nebo popis transformace představuje mnohem méně dat, ne záznam vzoru. Dekomprese pak probíhá jednoduše tak, se na zaznamenaných vzorech provedou všechny zaznamenané transformace, jejich poskládáním pak vznikne vlastní obraz.
Formáty Nejdůležitějšími současnými grafickými formáty jsou: BMP (BitMaP) - nejstarší a zároveň nejjednodušší formát bitmapového obrázku, vytvořený firmou Microsoft v roce 1986 - 2,16,256 nebo 16777216 barev, vždy v barevném systému RGB - kódování RLE (Run Length Encoding) o proudová komprese o velmi jednoduchý a rychlý neztrátový kompresní algoritmus o dlouhé řetězce opakujících se symbolů (např. pixely stejné barvy vedle sebe) se zakódují jen jedním symbolem a udáním délky řetězce o dobře se uplatní pouze tam, kde se takové delší sekvence často vyskytují, například u monochromatických obrázků - tento formát se již dnes v podstatě na stránkách Internetu nepoužívá PICT - vytvořen firmou Apple Computer v roce 1984 - kombinovaný bitmapově-vektorový soubor - používán pro výměnu grafických dat, obvykle mimo pre-press proces - v současné době se téměř nepoužívá, nahrazen formátem PDF JPEG (Joint Photographic Experts Group) - používán pro ukládání obrazových dat, které mají charakter fotografie, pro ně dokáže bez znatelného zhoršení kvality obrazu snížit objem dat na zlomek původní hodnoty - v roce 1982 ustanovena komise za účelem vytvoření standardu pro přenos grafických údajů - základ diskrétní kosinová transformace (DCT=Discrete Cosine Transformation) - zkratka JPEG označuje organizaci tvořící standard, kompresní metodu a většinou i samotný formát souboru - sama komprese JPEG neobsahuje žádný formát pro výměnu dat, proto byl firmou C-Cube Microsystems vyvinut formát JFIF (JPEG File Interchange Format), který by měl umožňovat výměnu dat zakódovaných systémem JPEG komprese mezi různými jinak nekompatibilními platformami a programy Základní požadované vlastnosti formátu: - kvalitní komprese nastavitelná uživatelem - nezávislost na typu obrazu - přijatelná složitost softwarového kódování - sekvenční i progresivní mód
Popis JPEG komprese: Formát JPEG je pouze bitmapový formát, umožňující ukládání grafických dat v 256, 16777216 nebo4294967296 barvách. Barevné systémy, které umí využívat jsou grayscale, RGB, YcbCr nebo CMYK. - ztrátová kompresní metoda, která "nepotřebné" informace zahazuje a tím dosahuje velmi dobrých velikostí výsledného souboru (1:20 i více) - lze dosáhnout i velmi kvalitního obrazu, přesto s velmi citelným snížením velikosti souboru (např. 1:4) metoda je v základu založena na poznatku, že lidské oko je mnohem méně citlivé na malé změny barvy než malé změny jasu, jasové změny se tedy snaží co nejlépe zachovat a malé barevné změny omezuje a zahazuje. Hlavní kroky JPEG komprese: barevná transformace Samotná komprese JPEG je nezávislá na barevném modelu předlohy, protože kóduje každou barevnou složku zvlášť (RGB, HSI, CMY,...). Nejlepších kompresních poměrů se však dosahuje s modely typu jasová/chromatická složka (YUV, YCbCr). Experimentálně bylo zjištěno, že většina informací, na které je lidské oko nejvíce citlivé, se vyskytuje na vysokých frekvencích šedě odstupňovaných jasových komponent (Y), kdežto na složky barevné (Cb a Cr) je citlivé mnohem méně. Proto se ke kompresi hodí takový barevný model, kde jsou složky barevné a jasové odděleny, jako je právě YCbCr. další modely, jako RGB nebo CMY mají informace barevné a jasové rozptýleny a smíchány do sebe, takže jejich oddělení by bylo při kompresi mnohem náročnější. Proto se jako první krok provádí převod předlohy do barevného modelu YCbCr. podvzorkování barevných složek Menší citlivost lidského oka na barevné složky lze využít nejjednodušeji tak, že snížíme rozlišení obrázku v barevných složkách, zatímco v jasové složce ponecháme originální rozlišení. V jasovém kanálu tak budeme mít stále informaci o obrázku např. 100x100 pixelů, zatímco v barevných kanálech pouze o obrázku rozměru 50x50 pixelů. Tohoto se dosahuje průměrkováním barevných složek sousedních pixelů, a to buď 4 ve čtverci 2x2 pixely, nebo 2 ve obdélníčku 2x1 pixely. Tímto procesem se velmi znatelně zredukuje datový objem zpracovávaného obrázku. DCT Diskrétní kosinová transformace je neztrátovým krokem JPEG komprese (mimo drobných zaokrouhlovacích chyb), který slouží pro oddělení složek o vysoké a nízké frekvenci, což je základ pro pozdější snížení počtu uchovávaných informací. DCT je zároveň výpočetně nejnáročnějším krokem kódování JPEG. Jedná se vlastně o proces převodu prostorových souřadnic x,y do prostorových frekvencí fx a fy. A protože i statický obraz se rozkládá časově (postupně) pak se vlastně jedná o převod z časové do frekvenční oblasti.
Nejlepších výsledků takového převodu dosahuje transformace Karhunen-Loeveho, která mění transformační jádro dynamicky dle obsahu zpracovávané scény. To je však extrémně náročné na procesor, proto byla jako kompromis mezi kvalitou a náročností použita DCT. DCT nezpracovává celý obraz najednou, jak by bylo nejlepší, ale opět z důvodu náročnosti na výkon procesoru se celý obraz rozdělí do bloků 8x8 pixelů a s těmi se dále samostatně pracuje. Samotná DCT je vlastně rozložení periodické časové funkce v nekonečnou řadu harmonických kmitů, vyjádřenou v obecném případě jednotlivými sinusoidami a kosinusoidami (případně stejnosměrnou složkou). Matice koeficientů (sinusoid a kosinusoid) je však v obecném případě (použití Fourierovy transformace) komplexní, lze ji rozložit na reálnou a imaginární část. Pokud je vstupní funkce g(x,y) sudá, pak se jedná o DCT - sinové složky se ve výsledku neobjeví. Proto pokud není vstupní funkce sudá, musíme ji na sudou převést. kvantizace Jedná se o hlavní ztrátovou část JPEG komprese, která má za cíl vyřadit z DCT koeficienty, které jsou opticky nevýznamné a proto mohou být vypuštěny. Matice koeficientů DCT se dělí tzv. kvantizační maticí. Vychází se přitom z toho, že ne všechny prostorové frekvence fx a fy vyhodnocuje lidský zrak se stejnou citlivostí na jejich amplitudu. Proměnná kvantizační matice proto zmenšuje více amplitudy vysokých frekvencí nežli těch nízkých. Po vydělení kvantizační maticí se ještě všechny koeficienty zaokrouhlí na nejbližší celá čísla. Volba kvantizační matice je zcela volná a právě volbou kvantizační matice se nastavuje "velikost" komprese (volba "JPEG quality" v grafických editorech) a tedy kvalita výsledného obrazu. Většina kompresorů JPEG používá tabulky doporučené komisí ISO JPEG, ale v budoucnu budou možná vyvinuty ještě kvalitnější kvantizační matice. Kvantizační matice je celá uložena v komprimovaném JPEG souboru, takže není pro stávající dekompresor pracovat s nějakou úplně jinou a novou kvantizační maticí. Právě díky vydělení matice koeficientů DCT kvantizační maticí nedostaneme již nikdy po zpětné transformaci původní signál (obraz), ale signál (obraz) jiný. kódování výsledných koeficientů Výsledná matice koeficientů obsahuje velké množství podobných (tedy redundantních dat). Tyto informace se komprimují bezeztrátově pomocí kódování s proměnnou délkou slova (VLC VariableLengthCoding). Používá se v praxi Huffmanova kódování, kterým se nejčastěji vyskytujícímu se znaku přiřadí nejkratší délka slova, naopak řídce se opakující znaky se kódují dlouhými slovy. Správně by se mělo prozkoumávání četnosti provádět v každém bloku 8x8, což je v praxi nerealizovatelné, proto se určité skupiny dat kódují podle tabulek ověřených v praxi. Dekódování JPEG: - při dekódování JPEG obrazu se postupuje v opačném pořadí - dekódování - dekvantizace - inverzní DCT - zpětná transformace do původního barevného modelu
Progresivní JPEG: - odpověď na požadavek některých aplikačních oblastí, aby bylo možné již po získání nějaké menší části celkových dat zobrazit alespoň hrubé informace o obrazu uloženém v těchto datech, typickým příkladem je internet a www stránky - při pomalém připojení požadujeme, aby se základy obrázku začaly rýsovat již při načtení části dat, tak se můžeme jednak rychleji zorientovat a například rozhodnout, zda daný obrázek potřebujeme nebo nikoliv - obrázek nepřenáší po řádcích, ale po jednotlivých vrstvách, namísto posílání bitových ploch nebo barevného kanálu, což by nebylo efektivní, se zasílána posloupnost předloh, které se postupně zpřesňují - konkrétně je to provedeno tak, že se nejdříve zašlou stejnosměrné koeficienty ze všech bloků 8x8, následně první střídavé koeficienty všech bloků, druhé, atd. až se nakonec přenese i 67. koeficient, který nese informaci o největších podrobnostech snímku, po každém přenosu koeficientů se obrázek znovu dekóduje a díky stále většímu počtu koeficientů je rekonstrukce stále věrnější, ale již při prvním přenesení koeficientů se zobrazí hrubé rysy obrazu, i když velmi nekvalitní (jako při velmi vysokém stupni komprese). - jedinou nevýhodou tohoto principu je to, že se při každém průchodu znovu rozkódovává celý obraz, to ale nelze nijak snadno odstranit a při dnešní rychlosti počítačů to zas až tak nevadí, i vzhledem k tomu, že se toto kódování používá převážně pro malé obrázky na internetu GIF (Graphic Interchange Format, CompuServe Bitmap) - bitmapový grafický formát - vznikl v roce 1987 - před příchodem JPEG komprese velmi široce používaným formátem na ukládání jakýchkoliv obrázků - dnes se používá hlavně na ukládání internetové grafiky a relativně jednoduchých, barevně a strukturně kompaktních obrázků, pro které přináší velmi dobrou bezeztrátovou kompresi - firma CompuServe, která tento formát vytvořila, dovoluje jeho neomezené použití, avšak LZW metoda komprese, kterou tento formát používá, byla příčinou mnoha právních sporů a při vytváření programu, který umí touto kompresí zapisovat, jste povinni platit celkem vysoké licenční poplatky (jeden z důvodů vzniku formátu PNG) - skládá se ze sérií datových balíčků (bloků) spolu s dalšími informacemi o protokolu, vzhledem k tomu musí být GIF soubory čteny, jako by se jednalo o souvislý proud dat, různé bloky a subbloky se mohou vyskytnout téměř kdekoliv uvnitř tohoto proudu dat, to činí zpracování tohoto formátu obtížnější, například při použití klasických struktur jazyka C - grafické soubory ve formátu GIF jsou omezeny na 8-mi bitovou barevnou hloubku, tedy 256 barev - poskytují možnost existence několika obrázků v jediném souboru, toho se dnes často využívá pro "animaci" grafiky na internetových stránkách
PNG (Portable Network Graphics) - vznikl (verze 1.0) v lednu roku 1997 - vznikl jako náhrada bezeztrátového grafického formátu GIF – kvůli omezení formátu GIF na 256 barev a licenční politice (a poplatkům) spojené s jakýmkoliv využívání formátu GIF TIFF (Tagged Image File Format) - vytvořen firmou Aldus (zakoupena firmou Adobe) v roce 1987 - výměna obsáhlých dat v rámci předtiskové přípravy - může uvnitř obsahovat víceméně cokoliv, míněno libovolný typ bitmapového obrazu - specifikace formátu TIFF je k dispozici zdarma - na rozdíl od většiny ostatních bitmapových formátů mohou být dokumenty v TIFFu i vícestránkové - v TIFF souborech možno použít různé tagy, tedy klíčová slova popisující vlastnosti obrázku - toho je využito k tvorbě různých rozšíření a modifikací - nejširší spektrum barevných info (černobílá grafika, odstíny šedi, RGB, CMYK, CIELab, indexované barvy aj.) - využití řady bezztrátových kompresních algoritmů (PackBits, LZW, Huffman RLE a CCITT Fax Group 3 nebo 4) i ztrátové JPEG komprese a ZIP komprese - TIFF podporuje řadu různých kompresních formátů - využití v pre-press a oblastech, ve kterých je zapotřebí co nejvěrnější rastrová reprezentace obrazu, při práci se skenovanými či faxovými dokumenty, aplikace pro geografii či zdravotnictví - není příliš optimalizován pro internetové publikování či jakoukoli jinou oblast, ve které se preferuje co možná nejnižší objem dat - v pre-pressu se pak značně diskutuje o výhodnosti nahrazení TIFFu jinými formáty: donedávna byl hlavním konkurentem zejména formát EPS , nyní se začíná hodně mluvit o PDF
Kodek (kompresor + dekompresor) -
algoritmus, který snímky daného videa zakóduje do menší podoby a při přehrávání videa jej zase dekóduje dekódování je téměř vždy méně náročné než kódování ztrátové bezztrátové-kvalitnější, ale nízký poměr komprese
MPEG (Motion Picture Experts Group) Video komprimované v tomto formátů je posloupností snímků dvou druhů - takzvaných Iframes a P-frames. I-frame je celý snímek zkomprimovaný velice podobným algoritmem jako standardní JPEG (diskrétní kosinová transformace, kvantizace a neztrátová komprese). Oproti tomu P-frame je jakýsi rozdílový snímek oproti předchozímu snímku - pro každý makroblok (oblast 16×16 pixelů) se nalezne vhodný posun, aby co nejlépe odpovídal úseku předchozího obrázku, pak se provede diference proti předchozímu obrázku (po aplikaci posunů) (a nebo neprovede - pokud se nenajde dobrá shoda, pak se použije přímo daný makroblok) a na výsledek se opět použije komprese velice podobná kompresi JPEG. Takto zkomprimovaný snímek je výrazně menší než I-frame. AVI (Audio Video Interleave) - prokládání videa a zvuku - vyvinut firmou Microsoft - používá tzv. FourCC (Four Codec Code)-4 znakový kód identifikující kodek - na počítačích nejpoužívanější - podpora mnoha kodeků, lze s ním poměrně dobře manipulovat Quicktime - formát vyvinutý firmou Apple - přenosný mezi PC a Macintosh platformami - poměrně nízká kvalitu obrazu při daném datovém toku oproti jiným kodekům, nutný přehrávač firmy Apple RealVideo - vyvinuto firmou Real Network - podobné vlastnosti jako Quicktime - primárně zaměřen na kompresi streamovaného videa