Hlavní navigace

Programujeme JPEG: Progresivní JPEG a informace EXIF

8. 2. 2007
Doba čtení: 12 minut

Sdílet

Dnes dokončíme část věnovanou známému grafickému formátu JFIF/JPEG. Řekneme si základní informace o progresivním režimu kódování a dekódování obrázku typu JPEG a také o tom, jakým způsobem mohou být do formátu JFIF/JPEG zahrnuty informace uložené podle EXIF. Řeč bude i o kompromitujících informacích, které se mohou v EXIF objevit.

Obsah

1. Progresivní režim kódování a dekódování dle JPEGu
2. Spektrální výběr
3. Postupná aproximace
4. EXIF – Exchangeable Image File Format
5. Třídy informací, které se mohou v EXIF objevit
6. Audio kanály
7. EXIF a možné kompromitující informace
8. Odkazy na další informační zdroje
9. Obsah dalšího pokračování tohoto seriálu

1. Progresivní režim kódování a dekódování dle JPEGu

V předchozích osmi částech tohoto seriálu jsme si popisovali způsob kódování a dekódování takzvaných sekvenčních souborů typu JFIF/JPEG. Soubory tohoto typu se vyznačují především ztrátovou komprimací a velmi příznivým komprimačním poměrem. Nevýhodou je právě jejich sekvenčnost – i pro zobrazení náhledu na obrázek je nutné projít celým souborem, což je zdlouhavé, především při přenosu souborů po síti (typicky webové a Intranetové aplikace) nebo z pomalého záznamového média (paměťová karta, CD-ROM atd.). Z důvodů umožnění co nejrychlejšího zobrazení náhledu na uložený obrázek byl komisí JPEG (Joint Photographics Experts Group) vytvořen i návrh takzvaného progresivního JPEGu, který si zde zevrubně popíšeme v následujících dvou kapitolách.

Největší předností progresivních JPEGů je schopnost zobrazení poměrně kvalitního náhledu na obrázek již po načtení cca jedné desetiny obsahu souboru s uloženým obrázkem, nevýhodou pak poněkud menší komprimační poměr v porovnání se sekvenčními soubory JFIF/JPEG a nutnost používat při kódování i dekódování rychlou operační paměť RAM s dostatečně velkou kapacitou pro uložení celého obrázku. Sekvenční soubory JFIF/JPEG si naproti tomu teoreticky vystačí pouze s relativně malým bufferem obsahujícím barvové informace o pouhých osmi či šestnácti obrazových řádcích (scanlines). Pojďme si nyní vysvětlit, jakým způsobem se soubory s progresivními JPEGy vytváří a jak se mohou posléze zobrazovat.

Progresivní JPEGy se od JPEGů sekvenčních odlišují až způsobem zpracování kvantovaných DCT koeficientů, to znamená, že úvodní části kódovacího programu (převod z barvového prostoru RGB do prostoru YCbCr, podvzorkování barvonosných signálů, diskrétní kosinová transformace a kvantování vypočtených DCT koeficientů) se provádí naprosto stejným způsobem. Po kvantování DCT koeficientů se však u progresivních JPEGů mohou vypočtené hodnoty zpracovat jednou ze dvou metod: spektrálním výběrem a/nebo postupnou aproximací. Dokonce je možné obě metody používat současně, což přináší lepší vizuální výsledky, ovšem na úkor složitějších postupů. Umístění bloku provádějícího spektrální výběr a/nebo postupnou aproximaci v kodéru je zobrazeno na prvním obrázku.

jpeg9_1

2. Spektrální výběr

Metoda spektrálního výběru funguje na principu přerozdělení kvantovaných DCT koeficientů před jejich kódováním a uložením do výstupního souboru. Zatímco u sekvenčního JPEGu se kvantované DCT koeficienty procházely v matici 8×8 hodnot metodou cik-cak a postupně se kódovaly Huffmanovým kódováním vždy sekvenčně blok po bloku, při použití spektrálního výběru jsou do bloku provádějícího Huffmanovo kódování nejprve přeneseny pouze hodnoty reprezentující DC koeficienty ze všech bloků, v dalším kroku koeficienty A2,1 a A1,2 atd. Celkově je provedeno osm kroků, přičemž v posledním kroku je zakódováno celkem 29 zbývajících koeficientů nesoucích informace o vysokých frekvencích. Způsob rozdělení všech 64 koeficientů z původní matice 8×8 hodnot je naznačen na druhém obrázku.

jpeg9_2

Jak vypadá dekódování a následné zobrazení obrázku uloženého v progresivním režimu? Nejprve jsou dekódovány DC koeficienty, které po provedení zpětné DCT (IDCT) vytvoří obrázek obsahující bloky 8×8 pixelů, každý blok vyplněný konstantní barvou. Nicméně pro prvotní náhled na obrázek je tato informace dostatečná a výhodou je, že je tento náhled možné uskutečnit už po přenosu 1/64 všech dat, tj. pouhých 1,5% bytů. V dalším kroku se přenesou koeficienty A2,1 a A1,2, opět se provede zpětná DCT a obrázek se znovu zobrazí – nyní už jsou i v blocích 8×8 pixelů patrné detaily o velikost 4×4 pixely. Ve třetím kroku jsou přeneseny všechny koeficienty A3,1, A2,2 a A1,3 atd. V posledním, tj. osmém kroku je přeneseno zbývajících 45% všech dat a obrázek se může zobrazit se všemi detaily.

3. Postupná aproximace

Metoda postupné aproximace pracuje na poněkud jiném principu. Vychází se z předpokladu, že pro náhled obrázku jsou nejdůležitější nejvyšší bity kvantovaných DCT koeficientů. Tyto bity jsou tedy přeneseny nejdříve (samozřejmě se zakódováním pomocí Huffmanova kódu), následně jsou přeneseny nižší bity atd. až do chvíle, kdy jsou přeneseny i nejnižší bity všech DCT koeficientů. Dekódování a postupné zobrazování takto uloženého obrázku pracuje přesně opačným způsobem: nejprve jsou přeneseny nejvyšší bity, zbytek se doplní nulami, je provedena zpětná DCT a obrázek je zobrazen; samozřejmě s vizuálními chybami. V dalším kroku jsou přeneseny nižší bity, čímž dojde po provedení IDCT ke zpřesnění obrázku. V posledním kroku jsou přeneseny i nejnižší bity všech DCT koeficientů a obrázek je možné rekonstruovat do původní podoby (s uvažování ztrátové komprimace).

Tato metoda je sice implementačně složitější než metoda spektrálního výběru, ale prvotní náhledy na obrázek mají lepší kvalitu, protože se přenáší i nejvyšší bity AC koeficientů. Na rozdíl od metody spektrálního výběru tedy nejsou patrné jednobarevné bloky 8×8 pixelů, na druhou stranu se zhoršuje celkové barevné podání obrázku (chybějící méně významné bity v počátku přenosu). Obě dvě metody jsou náročnější na výkon mikroprocesoru, protože se zpětná DCT a převod do barvového modelu RGB provádí několikrát za sebou, typicky v osmi krocích. Pro webové aplikace, u kterých je většinou úzkým hrdlem přenosová kapacita linek a obrázky mají relativně malé rozlišení (maximálně jednotky milionů pixelů), to však většinou nepůsobí větší problémy.

4. EXIF – Exchangeable Image File Format

Výrazným rozšířením souborů s obrázky typu JPEG/JFIF je začlenění bloků odpovídajících formátu EXIF. EXIF je zkratka z názvu Exchangeable Image File Format, který byl navržen standardizační skupinou Japan Electronics and Information Technology Industries Association, známou také pod zkratkou JEITA. K čemu je EXIF dobré a proč se s ním vůbec v části o JPEGu zabýváme? Pomocí informačních bloků ve formátu EXIF je možné do obrázku vložit další metainformace, například o tom, kde, kdy, jakým zařízením a za jakých podmínek byl obrázek vytvořen. Tyto informace je možné použít například pro vyhledávání fotek z rozsáhlého fotoalba, pro úpravu obrázků (znalost expozice, vyvážení bílé) atd. Dále je možné EXIF využít při záznamu zvukových dat vztahujících se k obrázku.

Není divu, že se z těchto důvodů začal EXIF masivně využívat především po nástupu digitálních fotoaparátů, EXIF informace však mohou zapisovat i jiná zařízení a samozřejmě i samostatné aplikace. EXIF není zaměřen pouze na grafický formát JPEG/JFIF, ale je ho možné použít například i v souborovém formátu TIFF (Tag Image File Format). Formát značek a datové typy použité v EXIFu jsou vlastně přímo odvozeny od značek zavedených v TIFFu. Technicky vzato vlastně nejsou obrázky JPEG obsahující EXIF platnými soubory JFIF, protože neobsahují segment APP0 (většinou jen APP1), naprostá většina dnešních prohlížečů však s těmito soubory nemá žádné problémy, proto se v praxi ani nezavedlo rozlišení podle jiné koncovky.

5. Třídy informací, které se mohou v EXIF objevit

Informační blok EXIF je v souborech JPEG/JFIF uložen v segmentu APP1. V takovém případě soubory s obrázky neobsahují segment APP0, který funguje – jak již víme z předchozích částí tohoto seriálu – jako hlavička JPEG. Sice je možné použít oba dva zmíněné segmenty (typicky v pořadí APP0, APP1), ale například digitální fotoaparáty segment APP0 většinou neukládají. Segment APP1 obsahuje na samotném začátku svou identifikační značku, dále pak délku segmentu, textovou identifikaci bloku EXIF (tu lze vyhledat například binárním editorem) a dále vlastní uložené informace, kvůli kterým byl EXIF do obrázku zařazen. Samotný segment s EXIF informacemi může nést mnoho metainformací o obrázku. Každá informace je uvozena značkou (tag, celočíselná hodnota) a hodnotou. Kromě toho je možné rozšiřující značky EXIF umístit do segmentu APP2. Všechny metainformace specifikované v EXIF je možné rozdělit do několika kategorií:

  1. Informace vztahující se k samotnému obrázku. Mezi tyto informace patří například rozlišení obrázku, jeho horizontální i vertikální velikost, počet bitů na každou barvovou složku, orientace obrázku, způsob podvzorkování barvonosných barvových složek aj.
  2. Informace o způsobu uložení obrazových dat v souboru. Obrazová data, tj. původní snímek, mohou být rozdělena do několika pásů (i když toto je doména spíše formátu TIFF) a proto je nutné specifikovat offsety začátku těchto pásů. U formátu JPEG se zde ukládá offset segmentu SOI a délka obrazových dat.
  3. Dále se zde mohou nacházet informace o barvové charakteristice obrázku, typicky pozice bílé v barvovém prostoru, transformační matice použitá pro převody z RGB do YCbCr, referenční hodnoty černé a bílé barvy, transformační funkce pro převody apod. Díky těmto informacím je možné obrázek věrně zpracovat na téměř jakémkoli zařízení, protože zde uvedená data dávají o barevnosti obrázku mnohem více relevantních informací než pouhá hodnota γ, která je (s velkou reklamou) použita v jiných obrazových formátech.
  4. V EXIF mohou být také uloženy informace o zařízení, které obrázek vytvořilo, čas a datum pořízení obrázku (nezávisle na souborovém systému), jméno a verze použitého software, jméno osoby, která obrázek s pomocí daného zařízení/aplikace vytvořila atd.
  5. Pravděpodobně nejvíce využívané informace se vztahují k zařízení, které obrázek vytvořilo. Například digitální fotoaparáty zde mohou ukládat dobu expozice, nastavenou citlivost, hodnotu zoomu, způsob měření vzdálenosti, nastavené osvětlení, informace o blesku (režim, energie atd.), původní rozlišení obrázku na CCD čipu, nastavení úrovně bílé atd.
  6. Méně známá je skutečnost, že do EXIF je možné ukládat například i informaci z GPS, samozřejmě, pokud je tato informace k dispozici (kombinovaná zařízení). Ke každému obrázku je tedy možné jednoznačně přiřadit čas vytvoření i místo, na kterém byl vytvořen.

6. Audio kanály

Pomocí speciálních značek EXIF je možné ke každému obrázku přiřadit jeden či více zvukových souborů. Možností mapování mezi obrazovými soubory a zvukovými soubory je více:

  • K obrázku je přiřazen právě jeden zvukový soubor.
  • K více obrázkům je přiřazen jeden (stejný) zvukový soubor.
  • K jednomu obrázku je přiřazeno více zvukových souborů.

Pomocí značek v segmentu APP1 je možné všechny tři mapování specifikovat. Také samotné zvukové soubory mohou být uloženy ve více formátech; ve standardu jsou popsány tyto formáty:

  1. PCM – standardní pulsní kódová modulace, mono nebo stereo, samplovací frekvence je typicky 11,025 kHz, 22,05 kHz či 44,1 kHz, počet bitů na vzorek dosahuje hodnot 8 nebo 16.
  2. µ-Law formát. Můžeme se setkat zejména se samplovací frekvencí 8 kHz a osmi bity na vzorek (sampl), vše uloženo podle standardu ITU-T G.711.
  3. ADPCM – adaptivní pulsní kódová modulace, ve které jsou na jeden vzorek rezervovány čtyři bity.

Interní formát zvukových dat je odvozen od RIFF WAVE Form Audio File formátu, který byl poprvé použit firmou Microsoft v operačních systémech Microsoft Windows. Výhoda tohoto řešení je zřejmá – pro samotné přehrání zvukové stopy není zapotřebí žádný specializovaný přehrávač, protože soubory tohoto typu (.wav) jsou podporovány standardními prostředky, včetně mnoha linuxových přehrávačů apod.

7. EXIF a možné kompromitující informace

Metainformace uložené v segmentu APP1 popř. i APP2 mohou být velmi užitečné, například při rychlém zobrazování náhledu na obrázky (fotoalba), vyhledávání obrázku podle zadaných kritérií nebo pro jejich profesionální úpravy s využitím fotometrických informací uložených digitálním fotoaparátem. Současně však mohou být tyto informace v některých případech kompromitující (nemusíme být paranoici, na druhou stranu je zbytečné o sobě prozrazovat více informací než musíme nebo chceme). Uveďme si několik příkladů:

V EXIF se typicky ukládá datum a čas vytvoření obrázku. Ten může ale také nemusí souhlasit s časem přiřazeným k souboru s obrázkem (nestačí tedy změnit čas u souboru prostředky operačního systému). Jistě se jedná o užitečnou informaci, v mnoha případech však tuto informaci nemusíme chtít poskytnout dalším osobám.

Podle EXIF informací je v některých případech možné zjistit, jestli bylo s obrázkem (fotkou) manipulováno. Například oříznutí fotky je lehce detekovatelné, stejně jako zvětšení obrázku (výřez a změna rozlišení na původní hodnotu), protože v EXIF se ukládá nastavení digitálního fotoaparátu v době vytvoření obrázku. Další manipulace s fotkou se dají poznat jinými metodami – úmyslné rozmazání obrázku softwarem se odlišuje od opravdového rozmazání vlivem pohybu nebo špatného zaostření atd.

Podle „podpisu“ zařízení, popř. softwaru, je možné zjistit, který digitální fotoaparát fotku vytvořil. Podle některých informací se dokonce neuvádí pouze výrobce a typ fotoaparátu, ale i jeho sériové číslo. A to je poměrně lehce přiřaditelné ke konkrétní osobě, minimálně od chvíle registrace u výrobce (třeba za účelem možnosti opravy v servisní síti), reklamace nebo zakoupení přes internetové obchody.

V EXIF se také může nacházet pořadové číslo obrázku, které přiděluje zařízení (fotoaparát). Z pořadového čísla je možné například zjistit, zda byly některé obrázky před publikováním smazány – obrázek s daným číslem prostě chybí. Z informací o „sousedních“ obrázcích se také dá přibližně určit časový okamžik vytvoření chybějícího obrázku.

I informace z GPS se mohou do EXIF ukládat, i když se dnes jedná spíše o výjimečné situace – zařízení, které by spojovalo digitální fotoaparát a GPS, pravděpodobně mnoho není. Jiná je situace u GPS a mobilů, takže se může snadno stát, že fotku bude možné identifikovat jak časově, tak i prostorově, například: tato fotka byla vytvořena 10.10.2006 v 12:30 fotoaparátem Minolta XYZ se sériovým číslem 123–456–789 v Brně na Kounicově ulici blízko domu číslo 10. Fotka byla oříznuta o 30 pixelů na každé straně a uměle rozmazána. Fotoaparát s tímto sériovým číslem byl zaregistrován na jméno… atd.

EXIF informací se můžeme snadno zbavit v mnoha programech; dokonce se ani nemusí provést nová dekomprimace a komprimace samotných obrazových dat (to obecně vede ke ztrátě kvality). Existují programy, které nahradí segmenty APP1 a APP2 jediným jednoduchým segmentem APP0, jehož strukturu jsme si popisovali v předchozích částech tohoto seriálu. Takto upravené obrázky je již možné vystavit na webu (předpokládám, že digitální fotoaparáty ještě neimplementují digitální vodoznaky, což ovšem již nemusí být pravda – minimálně některé kopírky a tiskárny už vodoznaky tisknou).

CS24_early

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

  1. Exchangeable image file format for digital still cameras: Exif Version 2.2
    Japan Electronics and Information Technology Industries Association (JEITA CP-3451)
  2. Hidden Data in JPEG Files:
    http://netzre­port.googlepa­ges.com/hidden_da­ta_in_jpeg_fi­les.html
  3. JPEG na Wikipedii:
    http://en.wiki­pedia.org/wiki/Jpeg
  4. Gregory K. Wallace: The JPEG Still Picture Compression Standard,
    Digital Equipment Corporation, Maynard, Massachusetts, 1991
  5. Eric Hamilton: JPEG File Interchange Format,
    C-Cube Microsystems, 1992
  6. JPEG Committee Web pages:
    http://www.jpeg­.org/
  7. Seznam aplikací implementujících JPEG:
    http://www.jpeg­.org/apps/index­.html
  8. JPEG – Frequently Asked Questions:
    http://www.faq­s.org/faqs/jpeg-faq/
  9. Introduction to JPEG:
    http://www.faq­s.org/faqs/com­pression-faq/part2/section-6.htm
  10. What is JPEG?:
    http://www.faq­s.org/faqs/com­pression-faq/part1/section-17.html

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

V následujícím pokračování tohoto seriálu dokončíme povídání o rastrových grafických formátech. Popíšeme si strukturu jednoduchých rastrových souborů typu WBMP (Wireless Bitmap), IMG (Image), RAW a ICO (icons). Po popisu těchto formátů se již zaměříme na vektorové grafické formáty a smíšené bitmapově-vektorové formáty, které jsou také velmi zajímavé, rozmanité a užitečné.

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.