Jak se obrázky zapisují

V tomto díle seriálu o digitálním zpracování fotografií se seznámíme s nejběžnějšími grafickými formáty. Povíme si hlavně o tom, na jakých principech fungují, k čemu se který z nich hodí a kde se s kterým lze setkat.

Úvodem je potřeba poznamenat, že vzhledem k tomu, že nám jde o fotografie, vše, co bude níže řečeno, se bude týkat rastrových obrázků, nikoli vektorové grafiky.
Ve srovnání např. s textem, představují digitální obrázky obrovská kvanta dat. Obrázek, v rozlišení vhodném pro tisk, se skládá z několika miliónů pixelů a každý pixel obyčejně představuje jeden nebo více bytů. Je proto velmi důležité digitální obrázky ukládat co možná nejefektivněji, aby se minimalizoval prostor potřebný pro jejich skladování i čas, který vyžaduje jejich přenos mezi počítači nebo jejich zaznamenání na dané médium. Komprese obrazových dat je tak jednou ze základních úloh v oblasti zpracování digitálního obrazu.


Algoritmy pro kompresi obrazu lze rozdělit do dvou základních skupin.

První tvoří
bezztrátové, druhou ztrátové.

Bezztrátové algoritmy pracují na bázi efektivního kódování. Využívají toho, že digitální obrázek není zcela libovolné dvojrozměrné pole čísel, ale existují v něm jakési zákonitosti. Například, podíváme-li se na dva sousední pixely, tak ve většině případů si budou jejich hodnoty velmi blízké, pouze na menším množství míst jsou na obrázku nějaké náhlé přechody. Toho lze využít mnoha různými způsoby. Například lze vytvořit kód, ve kterém se namísto každé posloupnosti opakujících se stejných čísel zapíše toto číslo pouze jednou a k němu kolikrát se má opakovat (run-length encoding). Další způsob je zavést speciální kódy pro skupiny hodnot, které se často opakují (např. Lempel-Ziv-Welch neboli LZW algoritmus). Jiná skupina metod je založená na tom, že se zavedou pro jednotlivé hodnoty kódy, které mají různý počet bitů a těm, které se opakují nejčastěji, se přidělí kódy nejkratší, zatímco těm nejméně častým nejdelší (entropy coding, prvním takovým kódem byl Huffmanův kód, dalším příkladem je např. arithmetic encoding). Další možná cesta je hodnotu každého pixelu vždy nejprve odhadnout na základě hodnot jednoho nebo více předchozích pixelů a zaznamenat pouze rozdíl mezi odhadnutou a skutečnou hodnotou (predictive coding). Čím dokonalejší je metoda odhadu hodnot, tím častěji bude rozdíl mezi skutečnou a odhadovanou metodou nula nebo přinejhorším nějaké hodně malé číslo. T.j. řetězec hodnot pixelů se takto převede na jiný řetězec čísel, kde převažují nuly a malá čísla. Ten se pak dá výhodně kódovat pomocí některé z předchozích metod. Kromě predikce hodnot lze „stlačitelnost“ obrázku pomocí těchto kódů zlepšit i prostřednictvím řady různých matematických transformací (např. Haarovy transformace).

Ztrátové metody využívají kromě principů uvedených výše také to, že část informace obsažené v obrázku lze zahodit, aniž by to způsobilo nějaký viditelný rozdíl. Využívá se zde znalost toho, jak obrázek vnímá lidské oko – na co je citlivé a na co ne. Obvykle je zapotřebí obrázek nějak transformovat. Například je možné převést obrázek do některého prostoru, který separuje jas a barvu, jako např. Lab nebo HSI (viz minulý díl seriálu) a barevnou informaci zaznamenat jen v hrubším rozlišení. Nejčastěji se využívají transformace, které převádějí obrázek do frekvenční oblasti (Fourierova nebo kosinová transformace, wavelety a pod.) – nejvyšší frekvence se pak často zahazují úplně (hlavně ty, které jdou diagonálním směrem, kde je na ně lidské oko nejméně citlivé) a ty zbylé se různě hrubě kvantizují (zaokrouhlují), podle toho jak jsou důležité. Tyto metody umožňují výrazně větší kompresi (menší soubory) než bezztrátové metody, ale jejich nevýhodou je, že způsobené ztráty jsou nevratné a i když třeba původně vidět vůbec nejsou, po dodatečných úpravách obrázku mohou začít být viditelné. Stejně tak opakované ztrátové ukládání obrázku může způsobit již viditelné artefakty. Proto, pokud má být obrázek ještě někdy v budoucnu dál upravován, nejsou tyto metody příliš vhodné a je lepší při archivaci obrázků neskrblit místem a pokud možno je ukládat bezztrátově.

Podívejme se teď na grafické formáty nejčastěji používané pro ukládání digitálních obrázků. V prvé řadě je potřeba zdůraznit, že grafický formát a metoda komprese jsou dvě diametrálně odlišné věci. Grafický formát nemusí zahrnovat vůbec žádnou kompresi nebo může naopak umožňovat použití několika různých způsobů komprese. Navíc pro danou metodu komprese nemusí vůbec udávat, jak přesně se má komprese provést. Třeba u ztrátových metod nemusí vůbec specifikovat, kolik a čeho se má zahodit. Je to pouze jakási norma, která určuje formát souboru, t.j. přesně říká, jak je potřeba soubor, alias dlouhý řetězec čísel, o kterém víme, že je v tomto formátu, interpretovat, abychom obdrželi obrázek, který je tam zaznamenaný.



Přehnaná JPEG komprese
Obr. 1 – Přehnaná JPEG komprese. Na obrázku jsou patrné kontury místo plynulých přechodů, rozbitá textura a duchové kolem hran. Typický je tvar artefaktů v podobě malých čtverečků.

Nyní ale už ke konkrétním formátům:

  • JPG (JPEG, přesněji JFIF). Formát navržený nezávislou Joint Photography Experts Group. Je dnes asi nejběžněji používaným formátem pro ukládání fotografií. Je to hlavní formát pro prezentaci fotografií na webu a také ho zhusta používají digitální fotoaparáty. Je to ztrátový formát založený na diskrétní kosinové transformaci. Vzhledem k tomu, že aplikovat transformaci globálně na celý obrázek by bylo po stránce výpočtů příliš náročné, obrázek se rozdělí na malé čtverečky o rozměrech 8×8 pixelů a každý čtvereček se transformuje zvlášť. Pokud je komprese příliš velká (t.j. zahodí se příliš mnoho dat) začnou se v obrázku objevovat viditelné artefakty, které mají tvar těchto čtverečků. Typické projevy příliš velké JPEG komprese jsou kontury místo plynulých přechodů barev,
    vzorečky v oblastech s drobnou texturou a duchové kolem hran (ostrých přechodů na obrázku). Extrémní podoba těchto artefaktů je vidět na Obr. 1. Vzhledem k tomu, že specifikace formátu jako taková nepředepisuje, jak přesně obraz komprimovat , existují mezi JPEG kodéry velké rozdíly. Některé dokáží při srovnatelné vizuální kvalitě vyprodukovat podstatně menší soubory. (V zásadě ale vždy bude platit to, že čím méně je na obrázku drobné textury a hran, tím menší bude soubor.) Také parametr udávající množství komprese znamená u každého programu něco jiného. Obyčejný JPEG soubor má obrázek uložený normálně, shora dolů. Tzv. progressive JPEG dovoluje přenos obrázku po frekvencích, od nejnižších po nejvyšší. Tzn. už během downloadu je pak k dispozici k náhledu hrubší verze celého obrázku sestavená z nižších frekvencí, která se postupně zjemňuje.

  • GIF (Graphics Interchange Format). Vděčíme za něj firmě Compuserve a je vedle JPEGu dalším nejrozšířenějším formátem na webu. Je bezztrátový, založený na LZW kódování. Je vhodný ale spíš pouze pro jednoduchou grafiku než pro fotografie. Dovoluje totiž maximálně 8 bitů na pixel, t.j. pouhých 256 barev, což je pro barevné fotografie nedostatečné. Na Obr. 2. vidíme příklad konverze obrázku, který obsahuje velkou škálu tónů na indexovaný obrázek o 256 barvách. Při použití univerzální tabulky barev, která obsahuje barvy rovnoměrně rozložené po celém barevném prostoru, je výsledek zcela neuspokojivý. Druhá ukázka používa tabulku barev, která je vlastní tomuto obrázku. Vznikla vybráním 256 vhodných barev přímo z tohoto obrázku. Kvalita je výrazně lepší, ale i zde vidíme skoky místo plynulých přechodů. K zamaskování těchto přechodů je možné použít dithering – tečkování, které se snaží opticky nasimulovat chybějící barvy, ale i tak je ztráta kvality viditelná. GIF je lepší než JPEG pro obrázky s malým počtem barev a výraznými hranami (barevně jednoduchá grafika kombinovaná s textem a pod.). Existují dvě varianty GIFu – starší 87 a novější 89a. Novější verze podporuje průhlednost, animace, interlacing (něco podobného jako progressive JPEG) a pod. Patent na použití LZW algoritmu vlastní Unisys a od r. 95 začal vyžadovat, aby každý, kdo produkuje komerční softwre aplikující tento algoritmus (tzn. mimo jiné každý, kdo produkuje nějaký program, který umí psát a číst obrázky ve formátu GIF) zakoupil licenci. Pro koncového uživatele je ale použití zdarma.



    Gradient
    Originální RGB obrázek.
    Gradient 1
    256 barev – univerzální paleta.
    Gradient 2
    256 barev – adaptivní paleta.
    Gradient 3
    256 barev – adaptivní paleta a dithering.
    Obr. 2 – RGB obrázek převedený na indexovaný obrázek o 256 barvách.

  • PNG (Portable Network Graphics). Novější formát podporovaný na webu, který vzniknul jako reakce na problémy s patentem Unisysu u GIFu. Je rovněž bezztrátový a používá starší Lempel-Ziv kompresi, na kterou se patent nevztahuje. Dovoluje 1-48 bitů na pixel. Prozatím je rozšířený mnohem méně, než GIF.

  • TIFF (Tagged Image File Format). Formát vyvinutý firmou Adobe je patrně nejběžnější formát používaný pro archivaci, ukládání předloh pro tisk a všude tam, kde se očekává, že obrázek bude ještě dále upravován nebo kde je z jiného důvodu zapotřebí nejvyšší možná kvalita a ztrátová komprese je nežádoucí. Je to poměrně komplikovaný formát, který dovoluje ukládat obrázky mnoha způsoby – zcela bez komprese nebo různě komprimované (LZW, run-length a další), dokonce i se ztrátovou JPEG kompresí. Zdaleka ne každá implementace však zvládá všechno a tak pokud chcete mít jistotu, že soubor v TIFFu přečtou i ostatní programy, je lepší se nejrůznějším vymoženostem vyhnout a držet se nejjednodušší verze – buď úplně bez komprese nebo s LZW kompresí (některé programy, jako např. gimp ji neumožňují, právě kvůli zmíněnému problému s patentem vlastněným Unisysem). V minulosti byly problémy s tím, že na Macu a na PC se používalo jiné pořadí bytů. Dnešní standard ale vyžaduje, aby software dokázal číst obě verze.

  • FPX (Flashpix). Pokus firem Kodak, Hewlet Packard, Microsoft a Live Picture vytvořit formát, který umožňuje např. prohlížení velkých obrázků webovým browserem. V současné době tento formát vlastní nezávislé konsorcium Digital Imaging Group. Obrázek je v souboru uložený jako pyramida různých rozlišení, což umožňuje v něm zoomovat dovnitř a ven. Komprese je ztrátová, podobná JPEGu. Existují pluginy pro grafické editory a browsery, ale zdá se, že se tento formát příliš neujal.

  • PCD (PhotoCD). Formát vyvinutý a vlastněný firmou Kodak. Většina grafických editorů umí tento formát číst, ale prakticky žádný v něm neumí obrázky ukládat. Komprese je bezztrátová a obrázek je uložený ve formě pyramidy, což umožňuje přečíst ze souboru obrázek podle potřeby v různých rozlišeních, od 128×192 až po 2048×3072 (u Pro PhotoCD také 4096×6144) pixelů. Často se s tímto formátem setkáme, necháme-li si fotografie profesionálně naskenovat z filmu.

  • PSD. Domácí (bezztrátový) formát Adobe Photoshopu. Jeho výhodou je, že podporuje vrstvy, alfa kanály, cesty a pod.

  • PDF (Portable Document Format). Formát firmy Adobe používaný pro elektronické publikace. Umožňuje jak ztrátovou, tak bezztrátovou kompresi. Prohlížeč (Acroread) si lze stáhnout zdarma.

  • EPS (Encapsulated PostScript). Také formát vyvinutý firmou Adobe. Používá se především pro přidávání obrázku do nejrůznějších dokumentů. Primárně jde o vektorovou grafiku, ale zvládá i rastrové obrázky.

  • BMP Jednoduchá bitmapa, kterou používají Microsoft Windows jak pro indexované, tak pro RGB obrázky. Obrázek může mít 1, 4, 8 nebo 24 bitů na pixel. Data jsou ukládána buď nekomprimovaná nebo bezztrátově komprimovaná pomocí run-length kódu.

  • XBM (X BitMap). Domácí bitmapa v X Windows (Unix).

  • PICT Formát, který používá Macintosh. Bez komprese nebo run-length encoding.

  • TGA (Truevision/Targa ) Jeden z nejpoužívanějších formátů v oblasti počítačové grafiky (hry a pod.).

Kromě formátů zde vyjmenovaných pochopitelně existuje ještě obrovské množství dalších, méně rozšířených. Jak těch, které se z nějakého důvodu neujaly, jsou teprve v plenkách nebo naopak už zastaraly, tak i těch, které jsou určené pro různé speciální aplikace (kopmprese satelitních obrázků, digitalizovaných otisků prstů a jiné).

Co z toho pro fotografa plyne? Pro prezentaci fotografií na webu je nejvhodnější JPEG. Pro jednoduchou grafiku s malým množstvim barev, nápisy a pod. je nejlepší GIF. V jakém formátu obrázky archivovat? Pokud máte dostatek prostoru, nejlepší je asi TIFF. Pokud ho nemáte a nemáte ani ve zvyku s obrázky příliš manipulovat, můžete místo něj zvážit JPEG v maximální kvalitě. Proč zrovna tyhle formáty? Protože jsou nejběžnější. Každý editační software a každý digitální lab je musí umět přečíst a nehrozí u nich, že by snad v nejbližší budoucnosti vymizely.

Napsat komentář