Formáty pro ukládání fotografií - 2.díl: jpeg
7.11.2007, Roman Pihan, článek
Statistika formátů používaných fotografy by nejspíše skončila drtivým vítězstvím formátu JPEG. Má mnoho výhod a tak se stal velmi rozšířeným a široce podporovaným. Není to však jediný formát vhodný pro fotografie a jeho použití přináší jistá úskalí.
Z minulého článku vyplynulo, že jedna 6 MPix fotografie uložená ve 24 bitové barevné hloubce (8 bitů na kanál) musí mít velikost 18 MB. Pokud použijete 48 bitovou barevnou hloubku (16 bitů/kanál), fotografie bude mít dokonce 36 MB. Určitou úsporu dat umožní uložení ve formátu RAW, který díky ještě neprovedené Bayerově interpolaci sice produkuje soubory menší, ale díky nestandardnosti RAWů jednotlivých výrobců a nutnosti RAW na PC náročně zpracovat jen těžko může být považován za vhodný formát pro ukládání snímků běžnými uživateli. Řešení pro zmenšení souborů s fotografiemi se nalezlo v kompresi potřebné zejména (ale nejen) na internetu.
Princip komprese spočívá v zakódování dat takovým způsobem, aby výsledný soubor byl menší než soubor původní. Představte si např. řadu 30 čísel:
Pokud se dohodneme, že symbol "n/B" bude znamenat n-krát opakuj číslo B, je možné těchto 30 čísel převést takto:
Na první pohled je zřejmé, že se množství potřebných čísel zmenšilo a na zápis předchozí řady 30 čísel potřebujeme nyní jen čísel 15. 15 čísel jsme tedy ušetřili. Je přitom 100% možné restaurovat původní řadu a nedošlo tedy k žádné ztrátě informace. To je princip bezeztrátové komprese.
Bezeztrátovou kompresi používá např. populární ZIP, kterým je běžné pakovat (komprimovat) nejrůznější druhy dat. Fakt, že originální data je možné 100% rekonstruovat jej předurčuje pro obecné pakování „čehokoliv“ - například i počítačových programů, textů a také fotografií. Algoritmus skutečné komprese je samozřejmě mnohem složitější než výše uvedený příklad, obecně řečeno ale využívá statistické redundance obsažené v datech. Stupeň komprese neboli poměr velikosti originálních dat ku komprimovaným ale záleží na obsahu – čím více redundance v sobě data mají, tím více se podaří je zmenšit.
Tato fotografie půjde poměrně dobře zmenšit, protože obsahuje hodně podobných oblastí neboli je datově hodně redundantní. 6 MPix originál této fotografie uložen bez komprese vytvoří 18 MB soubor (např. TIFF). Komprese této fotografie na soubor typu ZIP ji zmenší na 4,1 MB, tj. více než 4x. Přitom originál lze ze ZIP souboru 100% rekonstruovat.
Ztrátová komprese jde ještě dál a podle znalosti obsahu a jeho kontextu odstraňuje nepotřebné a nezajímavé detaily (čísla, písmena, slova atp.). Příkladem by mohlo být významné zkrácení tohoto článku na desetinu, neboli jakási anotace. Hlavní myšlenka zůstane, jemné detaily se však nenávratně ztratí. Nikdy již není možné obnovit originál, přesto se však zkrácená (zkomprimovaná) verze může originálu velmi obsahově podobat. Jak moc detailů se neuloží = nenávratně ztratí určí tzv. stupeň komprese. Když stoupá stupeň komprese, klesá kvalita neboli podobnost originálu a kopie.
Za ztrátovou kompresi by bylo možné považovat i kresbu velkými plochami. Soubor bude bezpečně menší, ale jemná kresba se nenávratně ztrácí. Neboli klesá rozlišení obrazu.
Ztrátovou kompresi je obtížně provádět jaksi obecně. Mnohem lepších výsledků se dosáhne tehdy, když komprese je navržena pro určitý charakteristický obsah. A proto např. pro video je navržen MPEG či DivX, pro hudbu MP3 a pro fotografie JPEG. Znalost typu obsahu umožňuje totiž navrhnout kompresi tak, aby nenávratně odstraněné detaily byly co nejméně vidět a aby komprimovaný výsledek se subjektivně co nejlépe podobal originálu. JPEG je tedy formát používající ztrátovou kompresi navrženou tak, aby co nejvíce zmenšila velikost souboru, ale přitom co nejméně degradovala fotografie.
JPEG je zkratka z Joint Photographic Experts Group, což je název komise, která byla ustanovena v roce 1986 a v roce 1992 vytvořila standard pro ukládání a kompresi obrazů. JPEG používá ztrátovou kompresi neboli, jak již bylo uvedeno, výsledek je jiný než originál! Rozdíl je ale okem nepostřehnutelný a navíc stupeň komprese je možné v poměrně širokém rozsahu měnit. JPEG tak vyhoví jak tam, kde je potřeba maximální kvalita fotografie (např. tisk), tak tam, kde je preferována velikost souboru (internet, mail).
Finální úspora velikosti souboru záleží nejen na nastaveném stupni komprese ale i na obsahu fotografie. Ostré fotografie plné jemných detailů (např. pole nebo tráva) lze zkomprimovat mnohem méně než např. jemný portrét s rozostřeným pozadím.
Přestože pro fotografickou praxi není nezbytné znát princip komprese používaný v JPEG, alespoň zjednodušená představa se může hodit. Průběh kódování do JPEG lze tedy velmi zjednodušeně popsat takto:
1. Vstupní obraz se z barevného modelu RGB převede do modelu YCbCr, který má samostatně uložen jasový kanál Y a dvě barvonosné složky Cb a Cr. Podobný způsob přenosu používá i televize v systému PAL či barevný model L*a*b.
2. Důvod převodu do YCbCr je v tom, že oko je mnohem méně citlivé na změny v barvě než v jasu. Jinými slovy – barvu lze komprimovat mnohem více než jas a oko si této komprese nevšimne. Toho využívá i JPEG, který barevné složky Cb a Cr obvykle 2x redukuje. To samo o sobě značně zmenší velikost výsledného souboru.
U obrázku nahoře byl s poloměrem 2 pixely rozostřen jen jasový (Y) kanál. U spodního obrázku naopak jen barevné složky Cr a Cb. Jak je vidět, rozostření v barevných kanálech oko vůbec nevnímá. Podobný test si snadno můžete udělat i sami, stačí ve Photoshopu pracovat v režimu Lab, kde L je jasový kanál a a,b, jsou barvonosné složky.
1. Další krok je uplatněn stejně na Y, Cb i Cr složku, kdy je obraz rozdělen do čtverců 8x8 pixelů a v nich je pomocí tzv. diskrétní cosinové transformace (DCT) hledán opakující se vzorek (zjednodušeně řečeno). Podle nastaveného stupně komprese je potom místo 8x8=64 čísel tvořících obrazový čtverec uloženo jen několik čísel charakterizujících vzorek v tomto čtverci.
2. Na závěr je na výsledek ještě aplikována bezeztrátová komprese a výsledek je uložen jako JPEG soubor (typická přípona „jpg“).
To, že JPEG komprese používá bloky 8x8 pixelů, se snadno odhalí při vysokém stupni komprese, kdy čtverce jsou dobře vidět. Vznikají na jemné kresbě (lana lodí) i na jemných přechodech (obloha).
Příště se podíváme na praktické využití JPEGu.
Bezeztrátová komprese
Princip komprese spočívá v zakódování dat takovým způsobem, aby výsledný soubor byl menší než soubor původní. Představte si např. řadu 30 čísel:
9 7 3 0 0 0 0 0 0 0 0 0 9 9 9 9 9 9 6 7 6 3 7 6 5 5 5 5 5 5
Pokud se dohodneme, že symbol "n/B" bude znamenat n-krát opakuj číslo B, je možné těchto 30 čísel převést takto:
9 7 3 „9/0“ „6/9“ 6 7 6 3 7 6 „6/5“
Na první pohled je zřejmé, že se množství potřebných čísel zmenšilo a na zápis předchozí řady 30 čísel potřebujeme nyní jen čísel 15. 15 čísel jsme tedy ušetřili. Je přitom 100% možné restaurovat původní řadu a nedošlo tedy k žádné ztrátě informace. To je princip bezeztrátové komprese.
Bezeztrátovou kompresi používá např. populární ZIP, kterým je běžné pakovat (komprimovat) nejrůznější druhy dat. Fakt, že originální data je možné 100% rekonstruovat jej předurčuje pro obecné pakování „čehokoliv“ - například i počítačových programů, textů a také fotografií. Algoritmus skutečné komprese je samozřejmě mnohem složitější než výše uvedený příklad, obecně řečeno ale využívá statistické redundance obsažené v datech. Stupeň komprese neboli poměr velikosti originálních dat ku komprimovaným ale záleží na obsahu – čím více redundance v sobě data mají, tím více se podaří je zmenšit.
Tato fotografie půjde poměrně dobře zmenšit, protože obsahuje hodně podobných oblastí neboli je datově hodně redundantní. 6 MPix originál této fotografie uložen bez komprese vytvoří 18 MB soubor (např. TIFF). Komprese této fotografie na soubor typu ZIP ji zmenší na 4,1 MB, tj. více než 4x. Přitom originál lze ze ZIP souboru 100% rekonstruovat.
Ztrátová komprese
Ztrátová komprese jde ještě dál a podle znalosti obsahu a jeho kontextu odstraňuje nepotřebné a nezajímavé detaily (čísla, písmena, slova atp.). Příkladem by mohlo být významné zkrácení tohoto článku na desetinu, neboli jakási anotace. Hlavní myšlenka zůstane, jemné detaily se však nenávratně ztratí. Nikdy již není možné obnovit originál, přesto se však zkrácená (zkomprimovaná) verze může originálu velmi obsahově podobat. Jak moc detailů se neuloží = nenávratně ztratí určí tzv. stupeň komprese. Když stoupá stupeň komprese, klesá kvalita neboli podobnost originálu a kopie.
Za ztrátovou kompresi by bylo možné považovat i kresbu velkými plochami. Soubor bude bezpečně menší, ale jemná kresba se nenávratně ztrácí. Neboli klesá rozlišení obrazu.
Ztrátovou kompresi je obtížně provádět jaksi obecně. Mnohem lepších výsledků se dosáhne tehdy, když komprese je navržena pro určitý charakteristický obsah. A proto např. pro video je navržen MPEG či DivX, pro hudbu MP3 a pro fotografie JPEG. Znalost typu obsahu umožňuje totiž navrhnout kompresi tak, aby nenávratně odstraněné detaily byly co nejméně vidět a aby komprimovaný výsledek se subjektivně co nejlépe podobal originálu. JPEG je tedy formát používající ztrátovou kompresi navrženou tak, aby co nejvíce zmenšila velikost souboru, ale přitom co nejméně degradovala fotografie.
JPEG
JPEG je zkratka z Joint Photographic Experts Group, což je název komise, která byla ustanovena v roce 1986 a v roce 1992 vytvořila standard pro ukládání a kompresi obrazů. JPEG používá ztrátovou kompresi neboli, jak již bylo uvedeno, výsledek je jiný než originál! Rozdíl je ale okem nepostřehnutelný a navíc stupeň komprese je možné v poměrně širokém rozsahu měnit. JPEG tak vyhoví jak tam, kde je potřeba maximální kvalita fotografie (např. tisk), tak tam, kde je preferována velikost souboru (internet, mail).
Finální úspora velikosti souboru záleží nejen na nastaveném stupni komprese ale i na obsahu fotografie. Ostré fotografie plné jemných detailů (např. pole nebo tráva) lze zkomprimovat mnohem méně než např. jemný portrét s rozostřeným pozadím.
Přestože pro fotografickou praxi není nezbytné znát princip komprese používaný v JPEG, alespoň zjednodušená představa se může hodit. Průběh kódování do JPEG lze tedy velmi zjednodušeně popsat takto:
1. Vstupní obraz se z barevného modelu RGB převede do modelu YCbCr, který má samostatně uložen jasový kanál Y a dvě barvonosné složky Cb a Cr. Podobný způsob přenosu používá i televize v systému PAL či barevný model L*a*b.
2. Důvod převodu do YCbCr je v tom, že oko je mnohem méně citlivé na změny v barvě než v jasu. Jinými slovy – barvu lze komprimovat mnohem více než jas a oko si této komprese nevšimne. Toho využívá i JPEG, který barevné složky Cb a Cr obvykle 2x redukuje. To samo o sobě značně zmenší velikost výsledného souboru.
U obrázku nahoře byl s poloměrem 2 pixely rozostřen jen jasový (Y) kanál. U spodního obrázku naopak jen barevné složky Cr a Cb. Jak je vidět, rozostření v barevných kanálech oko vůbec nevnímá. Podobný test si snadno můžete udělat i sami, stačí ve Photoshopu pracovat v režimu Lab, kde L je jasový kanál a a,b, jsou barvonosné složky.
1. Další krok je uplatněn stejně na Y, Cb i Cr složku, kdy je obraz rozdělen do čtverců 8x8 pixelů a v nich je pomocí tzv. diskrétní cosinové transformace (DCT) hledán opakující se vzorek (zjednodušeně řečeno). Podle nastaveného stupně komprese je potom místo 8x8=64 čísel tvořících obrazový čtverec uloženo jen několik čísel charakterizujících vzorek v tomto čtverci.
2. Na závěr je na výsledek ještě aplikována bezeztrátová komprese a výsledek je uložen jako JPEG soubor (typická přípona „jpg“).
To, že JPEG komprese používá bloky 8x8 pixelů, se snadno odhalí při vysokém stupni komprese, kdy čtverce jsou dobře vidět. Vznikají na jemné kresbě (lana lodí) i na jemných přechodech (obloha).
Příště se podíváme na praktické využití JPEGu.