Hlavní navigace

JPEG - král rastrových grafických formátů?

7. 12. 2006
Doba čtení: 11 minut

Sdílet

V dnešní části seriálu věnovaného známým grafickým formátům se již začneme zabývat další velmi populární a často využívanou skupinou rastrových grafických formátů. Jedná se o formáty využívající ztrátovou komprimaci, mezi něž patří zejména známý formát JPEG (JFIF) a jeho následníci (JPEG 2000, LDF, LWF apod).

Obsah

1. Úvodní informace o grafickém formátu JFIF/JPEG
2. Bezeztrátové komprimační metody u grafických souborů
3. Ztrátové komprimační metody
4. Stručná historie vzniku JPEGu
5. Standardy vztahující se k JPEGu a jeho variacím
6. Čtyři režimy činnosti kodéru/dekodéru
7. Ukázkový příklad komprimace dat pomocí JPEGu
8. Odkazy na další informační zdroje
9. Obsah dalšího pokračování tohoto seriálu

1. Úvodní informace o grafickém formátu JFIF/JPEG

Dnes se začneme zabývat známým a v dnešní době prakticky všudypřítomným grafickým formátem JFIF/JPEG. Jedná se o formát používající takzvanou ztrátovou komprimační metodu, která využívá ověřeného faktu, že selektivním zanedbáním určité informace obsažené v obrázku je možné dosáhnout mnohem lepšího komprimačního poměru než při bezeztrátové komprimaci. Mohou se však zanedbat pouze ty informace, které při prohlížení lidmi nezpůsobí viditelnou ztrátu kvality obrázku. Text zvýrazněný v předchozí větě je velmi důležitý, protože pro mnoho algoritmů (a pravděpodobně i pro jinak vnímající bytosti, například pro Marťany, na které věří někteří naši politici) může být obrázek uložený do JPEGu velmi odlišný od originálu, zatímco člověk v mnoha případech žádnou ztrátu informace nepocítí.

V případě JPEGu je možné dosáhnout komprimačního poměru 1:50 až 1:100 při zanedbatelné ztrátě informace, ovšem pouze pro určitou skupinu obrázků. Pro začátek je vhodné zdůraznit, že JPEG není a ani nikdy nebyl určen pro ukládání obrázků obsahujících malé množství barev, kontrastní barevné přechody, ostré hrany, písmo apod. Dnes se však můžeme často setkat například s tím, že se do JPEGu ukládají například screenshoty obsahující text – v tomto případě bude text rozmazaný a/nebo se značným způsobem zhorší komprimační poměr. JPEG je naopak určen pro ukládání fotografií, naskenovaných dokumentů (které jsou již vlastním procesem skenování rozmazané), monochromatických rentgenových a ultrazvukových snímků atd.

Korektní název popisovaného grafického formátu je JFIF, protože JPEG je metoda „pouze“ předepisující způsob ztrátové i bezeztrátové komprimace rastrových obrázků, která však nijak nedefinuje, jakým způsobem bude zkomprimovaný obrázek uložen v souboru (JPEG je použit i v grafickém formátu TIFF, PDF, PS a multimediálním formátu MOV). Kromě toho je JPEG anglickou zkratkou z Joint Photographics Experts Group, což je skupina expertů vytvořená ze členů komise ISO a historicky staršího „nepočítačového“ sdružení Photographics Experts Group (PEG). V dalším textu však budu poněkud nepřesně používat především zkratku JPEG a ne JFIF, což by však nemělo vést k žádným zmatkům, protože bude vždy zřejmé, zda se mluví o souborovém formátu nebo komprimační metodě. V současnosti většina obrázků uložených v JFIF používá koncovku .jpeg nebo .jpg, i když by bylo správnější použít koncovku .jfif.

jpeg1_1

Obrázek Lenny uložený do JPEGu s faktorem kvality rovným 100%, velikost souboru je 43833 bytů

2. Bezeztrátové komprimační metody u grafických souborů

V předchozích částech tohoto seriálu jsme se zabývali rastrovými grafickými formáty, které měly jednu společnou vlastnost – ukládaný rastrový obraz nebyl v žádném případě modifikován takovým způsobem, aby došlo ke ztrátě informace; samozřejmě kromě snížení celkového počtu barev u formátů nepodporujících plnobarevné režimy (tato redukce barev se však provádí před vlastním ukládáním, nelze ji tedy považovat za ztrátovou komprimaci). To znamená, že dvourozměrné pole pixelů se při zpětném načtení naprosto přesně rovnalo poli pixelů, které byly do daného grafického formátu uloženy. Některé dříve popisované grafické formáty nenabízely žádnou komprimační metodu (PBM, PGM, PPM, PAM, WBMP), další využívaly pouze jednoduché kódování typu RLE (BMP, PCX, TGA) a nejvíce sofistikované bezeztrátové grafické formáty implementovaly metodu LZ77 nebo LZW (GIF a PNG).

S rostoucími grafickými schopnostmi počítačů se značným způsobem rozšířily i oblasti jejich použití. Počítače začaly být používány například při zpracování fotografií, úschově a prezentaci naskenovaných černobílých i barevných dokumentů (knihovny, muzea, úřady, rentgenové a ultrazvukové snímky), v DTP a samozřejmě nesmíme zapomenout na počítačové sítě, zejména Internet. Ve všech zmíněných oblastech použití počítačů jsou ve velké míře zpracovávány rastrové grafické soubory, které mají mnohdy před svou komprimací obrovskou velikost. Není tedy divu, že se začaly hledat způsoby, jak tyto soubory zmenšit na únosnou míru. Jedno možné řešení jsme si již popisovali; šlo o použití bezeztrátových komprimačních algoritmů, které vznikly úpravou obecných komprimačních algoritmů používaných i na jiná než rastrová data. Tyto algoritmy však nikdy nebyly určeny pro obrázky vzniklé primárně mimo počítač (fotografie, skeny), proto je jejich použití např. na zmiňovaných fotografiích málo účinné. Již počátkem osmdesátých let minulého století se proto začaly hledat vhodné algoritmy určené speciálně pro ukládání plnobarevných rastrových obrázků.

jpeg1_2

Obrázek Lenny uložený do JPEGu s faktorem kvality rovným 90%, velikost souboru je 19189 bytů

3. Ztrátové komprimační metody

Hitem posledního desetiletí se staly ztrátové komprimační metody, které vycházejí z poměrně jednoduchého principu: informaci, která je sice v obrázku prokazatelně přítomna, ale člověk ji může postrádat, je možné selektivně odstranit a dosáhnout tak výrazného komprimačního poměru. Tento princip byl poprvé ve větší míře použit právě u formátu JPEG (přesněji řečeno u formátu JFIF, který používá algoritmus navržený v JPEG) a později ve video formátu MPEG – z tohoto formátu je ostatně odvozen známý hudební formát MP3 (resp. MP3 je podmnožinou specifikace MPEGu). U JPEGu není problém dosáhnout stavu, kdy je jeden pixel v komprimovaném obrázku popsán pouze jedním bitem, zatímco původní obrázek má 24 bitů na pixel.

Se ztrátovými formáty je jedna potíž: vzhledem k tomu, že jsou postaveny na modelu vnímání informace (ať už obrazové či zvukové) člověkem, je velmi obtížné a pravděpodobně i nemožné objektivně změřit míru ztráty informace, říkejme jí poněkud nepřesně chyba. Klasické metody pro vyjádření chyby v případě těchto formátů dávají zcela nesmyslné výsledky. Pokud například budeme měřit rozdíly mezi původním obrázkem a obrázkem uloženým do JPEGu, můžeme s velkou pravděpodobností zjistit, že ani jeden pixel nemá stejnou hodnotu a typické měření chyby (součet čtverců rozdílů barevných hodnot pixelů) nám vrátí vysokou hodnotu, i když člověk mezi obrázky žádný rozdíl nepozná. Pokud naopak do obrazu schválně zaneseme například několik bílých pixelů na původně tmavém pozadí, člověk ihned rozdíl pozná, ale naměřená chyba nebude vzhledem k malému množství těchto pixelů velká.

Podobný problém nastává i u hudebních formátů, například při porovnání průběhu originálního zvukového záznamu a záznamu uloženého do MP3. Opět může nastat situace, že ani jedna hodnota odpovídajících si samplů nezůstane zachována (samply si můžeme například prohlédnout na programovém „osciloskopu“) ale průměrně slyšící člověk ve většině případů, tj. při dostatečně velké bitové rychlosti MP3, nepozná rozdíl mezi originálem a komprimovanou­ kopií.

jpeg1_3

Obrázek Lenny uložený do JPEGu s faktorem kvality rovným 80%, velikost souboru je 14890 bytů

4. Stručná historie vzniku JPEGu

Grafický formát JPEG má za sebou poměrně dlouhou historii a, podobně jako v případě grafického formátu GIF, se mu nevyhnul ani menší skandál v podobě porušeného patentu. Již v roce 1982 se sešla skupina expertů, která měla v rámci organizace ISO navrhnout ztrátový komprimační algoritmus použitelný zejména pro plnobarevné fotografie reálných objektů, monochromatické naskenované obrázky, rentgenové snímky apod. Tato skupina expertů byla nazvána Joint Photographics Experts Group (JPEG), protože byla složena z členů komise ISO a členů skupiny Photographics Experts Group (PEG). Při návrhu formátu se přihlíželo zejména k následujícím vlastnostem:

  • aplikace v reálném čase
  • efektivní implementace v HW (fotoaparáty, tiskárny apod.)
  • efektivní implementace v SW (doba procesorů Motorola 68010 a Intel 286)
  • nezávislost na rozlišení
  • kromě plnobarevných obrázků i obrázky ve stupních šedi
  • 8 a 12 bitů na barvový vzorek

Do roku 1987 bylo navrženo dvanáct různých metod komprese rastrových obrázků. Z těchto metod bylo v roce 1989 vyčleněno základní kompresní schéma JPEGu, které se skládá z barvové transformace, diskrétní kosinové transformace a Huffmannova kódování. Finální revize kompresního schématu (konkrétně se jedná o revizi 8) byla provedena v roce 1990 a následně, konkrétně v roce 1992 došlo k definitivnímu schválení schématu pod označením ISO/IEC 10918–1. Od tohoto data se začínají objevovat nové a nové aplikace i elektronické výrobky, které přímo či nepřímo JPEG používají.

jpeg1_4

Obrázek Lenny uložený do JPEGu s faktorem kvality rovným 70%, velikost souboru je 10709 bytů

5. Standardy vztahující se k JPEGu a jeho variacím

Komprimační metoda (resp. sada metod) JPEG je popsána ve dvou standardech. Na samotný JPEG navazují i další metody, zejména JBIG určený pro černo-bílé obrázky (faxy, pérovky, text apod.) a JPEG-2000, který místo DCT (diskrétní kosinové transformace) využívá vlnkovou transformaci – wavelet transformation. Všechny standardy jsou vypsány v následující tabulce:

Název standardu Číslo/označení
JPEG (lossy and lossless) ITU-T T.81, ISO/IEC IS 10918–1
JPEG (extensions) ITU-T T.84
JPEG-LS (lossless, improved) ITU-T T.87, ISO/IEC IS 14495–1
JBIG (black and white pictures) ITU-T T.82, ISO/IEC IS 11544–1
JPEG-2000 (successor of JPEG/JPEG-LS) ITU-T T.800, ISO/IEC IS 15444–1
JPEG-2000 (extensions) ITU-T T.801

Zbývá dodat, že ke ztrátové komprimaci existuje cca 100 patentů, včetně jednoho patentu, který se dotýká i JPEGu. Pikantní na celé věci je, že standard schválený ISO by již žádným patentům podléhat neměl.

jpeg1_5

Obrázek Lenny uložený do JPEGu s faktorem kvality rovným 60%, velikost souboru je 9479 bytů

6. Čtyři režimy činnosti kodéru/dekodéru

JPEG definuje čtyři režimy činnosti, které kodér i dekodér provádí při komprimaci resp. dekomprimaci:

  1. sekvenční kódování (nejméně náročné na paměť, nejpoužívanější)
  2. progresivní kódování (poněkud více náročné, určeno pro přenos obrázků po síti)
  3. bezeztrátové kódování (predikční kódování, není příliš známé)
  4. hierarchické kódování (mnoho rozlišení, rychlé náhledy, podpora zobrazení, tisku, osvitu)

Mnoho lidí si JPEG spojuje pouze s prvním a někdy i s druhým režimem činnosti. Je to pochopitelné, protože většina aplikací (včetně webových prohlížečů) podporuje jen sekvenční a progresivní kódování. JPEG však obsahuje i bezeztrátovou metodu, která vede ke komprimačnímu poměru typicky 1:2 oproti sekvenčnímu kódování, kde se poměry pohybují v rozsahu 1:50 až 1:100. Algoritmicky je mezi sekvenčním a bezeztrátovým kódováním velký rozdíl, jedná se o dvě zcela odlišné metody.

U sekvenčního kódování jsou stanoveny čtyři bitové rychlosti, což je údaj o počtu bitů, kterými je popsán pixel ve zkomprimovaném obrázku. Poznamenejme, že vstupní obrázky mají buď 24 bitů na pixel (celobarevné, true-color) či 8 bitů na pixel (monochromatické). Méně používané jsou vstupní formáty s 12 bity na pixel popř. 36 bity na pixel.

Bitová rychlost Kvalita zkomprimovaného obrázku
0,25–0,50 bpp střední kvalita obrázků
0,50–0,75 bpp dobrá kvalita, dostačující pro většinu aplikací
0,75–1,50 bpp vynikající kvalita
1,50–2,00 bpp na první pohled nerozeznatelné od originálu

Je zajímavé si uvědomit, co uvedené hodnoty znamenají. Při dobré kvalitě obrázků jsou průměrně dva pixely popsány pouhým jedním bitem! (samozřejmě se jedná o průměr vztažený k celkové délce souboru) To je o 50% méně, než u nekomprimovaných černo-bílých obrázků, přičemž v JPEGu jsou uloženy obrázky plnobarevné.

jpeg1_6

Obrázek Lenny uložený do JPEGu s faktorem kvality rovným 50%, velikost souboru je 7984 bytů

7. Ukázkový příklad komprimace dat pomocí JPEGu

Dnešní část povídání o JPEGu je pouze úvodní, proto zde není větší prostor na vysvětlení práce ztrátové komprimační metody; z tohoto důvodu si ukážeme pouze jednoduchý příklad. Většina aplikací ukládajících soubory typu JPEG/JFIF nabízí nastavení faktoru kvality (Q), typicky v rozsahu 0–100%. Tento faktor ovlivňuje složení tabulek, které po provedené DCT redukují spočtené hodnoty, které tak nemusí být ukládány. Čím nižší je nastavený faktor, tím větší je komprimační poměr, ale zvyšuje se také zkreslení. Pro mnoho aplikací se ukazuje, že se optimální hodnota pohybuje v rozmezí 70 až 80%.

Někteří lidé se domnívají, že nastavení faktoru kvality na 100% znamená bezeztrátovou komprimaci; to však není pravda (stále se jedná o sekvenční ztrátové kódování). Naopak – 100% faktor kvality vede k velkému nárůstu délky souboru, který je neopodstatněný: mezi obrázkem s faktorem kvality nastaveným na 90% a 100% není vizuálně téměř žádný rozdíl, velikosti souborů se však mohou lišit až o 300%. Prakticky nikdy by se faktor kvality neměl na 100% nastavovat, protože v případě požadavku na vyšší kvalitu (menší zkreslení) už bývá výhodnější použít bezeztrátové komprimační metody (PNG).

Následuje ukázka komprimace známého obrázku Lenny s různě nastaveným faktorem kvality. Na grafu pod tabulkou si všimněte velkého skoku mezi 90% a 100% a zkuste najít vizuální rozdíly mezi oběma obrázky (ty se nachází na začátku tohoto článku). Podrobněji komentované ukázky budou uvedeny v následujících částech seriálu.

Faktor kvality Velikost obrázku Komprese Bitová rychlost
1 1093 0,56 0,13
10 2824 1,44 0,34
20 4479 2,28 0,55
30 5917 3,01 0,72
40 7068 3,59 0,86
50 7984 4,06 0,97
60 9479 4,82 1,16
70 10709 5,45 1,31
80 14890 7,57 1,82
90 19189 9,76 2,34
100 43833 22,29 5,35

jpeg1_c

Vliv faktoru kvality na velikost souborů s uloženým zkomprimovaným obrázkem

jpeg1_7

Obrázek Lenny uložený do JPEGu s faktorem kvality rovným 40%, velikost souboru je 7068 bytů

jpeg1_8

Obrázek Lenny uložený do JPEGu s faktorem kvality rovným 30%, velikost souboru je 5917 bytů

8. Odkazy na další informační zdroje

  1. Gregory K. Wallace: The JPEG Still Picture Compression Standard,
    Digital Equipment Corporation, Maynard, Massachusetts, 1991
  2. Eric Hamilton: JPEG File Interchange Format,
    C-Cube Microsystems, 1992
  3. JPEG Committee Web pages:
    http://www.jpeg­.org/
  4. Seznam aplikací implementujících JPEG:
    http://www.jpeg­.org/apps/index­.html
  5. JPEG – Frequently Asked Questions:
    http://www.faq­s.org/faqs/jpeg-faq/
  6. Introduction to JPEG:
    http://www.faq­s.org/faqs/com­pression-faq/part2/section-6.htm
  7. What is JPEG?:
    http://www.faq­s.org/faqs/com­pression-faq/part1/section-17.html
  8. Fast DCT (Discrete Cosine Transform) algorithms:
    http://www.faq­s.org/faqs/com­pression-faq/part1/section-19.html
  9. Independent JPEG Group:
    http://www.ij­g.org/
  10. Compression Links Info – JPEG area:
    http://www.com­pression-links.info/JPEG
  11. Baseline JPEG and JPEG2000 Artifacts Illustrated:
    http://ai.fri.uni-lj.si/~aleks/jpeg/ar­tifacts.htm
  12. Image Compression Using the Discrete Cosine Transfer:
    http://vision­.arc.nasa.gov/pu­blications/mat­hjournal94.pdf
  13. Perceptual Optimization of DCT Color Quantization Matrices:
    http://vision­.arc.nasa.gov/pu­blications/icip94­.pdf
  14. The JPEG Tutorial:
    http://starga­te.ecn.purdue­.edu/~ips/tuto­rials/jpeg/jpeg­tut1.html
  15. JPEG na Wikipedii:
    http://en.wiki­pedia.org/wiki/Jpeg
  16. MIME type pro JPEG (kapitola 7.5):
    http://tools.i­etf.org/html/rfc13­41

jpeg1_9

Obrázek Lenny uložený do JPEGu s faktorem kvality rovným 20%, velikost souboru je 4479 bytů

jpeg1_a

Obrázek Lenny uložený do JPEGu s faktorem kvality rovným 10%, velikost souboru je 2824 bytů

CS24_early

9. Obsah dalšího pokračování tohoto seriálu

V následující části tohoto seriálu si podrobněji popíšeme první části řetězce provádějícího zpracování rastrových dat (tj. pixelů) při ztrátové komprimaci. Bude se jednat o bloky provádějící transformaci barev z barvového prostoru RGB, podvzorkování barev a o blok počítající diskrétní kosinovou transformaci (DCT), která tvoří ústřední část celého komprimačního řetězce.

jpeg1_b

Obrázek Lenny uložený do JPEGu s faktorem kvality rovným 1%, velikost souboru je 1093 bytů

Byl pro vás článek přínosný?

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.