Jak komprimovat JPG fotografie

Jak tuší každý počítačově gramotný člověk, nejpoužívanější obrazový formát pro fotografie všeho druhu JPG používá ztrátovou kompresi. Kdo fotí přímo do tohoto formátu, nemá se správnou kompresí žádný velký problém. Fotoaparát obvykle nabízí dvě až tři možnosti a většina lidí prostě nastaví tu nejkvalitnější a více se o to nestará. 

Ale co fotografové, kteří to s fotografií myslí vážněji, a tedy fotí zásadně do RAW formátu, a teprve po zpracování z těchto "digitálních negativů" exportují JPG obrázky? Jak mají správně nastavit kompresi? Protože v této otázce panuje spousta nejasností a Internetových fám, udělal jsem malý srovnávací test, ze kterého je vidět, jaké nastanou kompresí ztráty. Při testu jsem záměrně vybíral ty nejhorší situace, takže reálně na normální fotce to bude vždy lepší. 

Jaký jsem pro test vybral obrázek?

Ze stránek obchodu FotoŠkoda jsem stáhnul jejich testovací fotografii používanou pro kalibraci barev, samozřejmě ve formátu TIFF.

Proč právě tuhle fotku? Má pro test "báječné", tedy vlastě úplně příšerné vlastnosti, se kterými má JPG komprese velké problémy:

  1. Malé rozlišení 1795 x 1205 px (cca 2Mpx), takže pixely jsou relativně velké a každá drobná vada je dobře vidět. (Pro srovnání, rozlišení slušnějších digitálních fotoaparátů je dnes obvykle minimálně cca 10x větší - kolem 20Mpx.)
  2. Fotka má přesaturované barvy a vysoký kontrast (to je dobré právě pro barevné kalibrace, ale ne pro JPG kompresi).
  3. Fotka obsahuje náhodné struktury (např. kontrastní tráva nebo některá místa vlasů), které se komprimují velmi špatně.
  4. Fotka obsahuje ostré kontrastní hrany a dokonce počítačově generovaný text (pro JPG kompresi jeden z nejtěžších oříšků).
  5. Fotka je snadno dostupná pro každého, kdo by si chtěl test zkusit sám.

Jak jsem kompresi testoval?

Fotku jsem stáhnul v TIFF formátu, otevřel v Lightroomu a bez jakýchkoliv úprav okamžitě vyexportoval v JPG kvalitě 100%, 90%, 80% a 70%. Samozřejmě vždy v plném rozlišení (mimochodem tady výše vidíte 70% verzi v menším rozlišení).

Tím jsme získali testovací obrázky a můžeme se do toho pustit. Takže: "Najdi 5 rozdílů...". Ne, takhle by to opravdu nešlo, na to naše oko, alespoň u 100% a 90% komprese opravdu nemá. Svěřil jsem tedy hledání rozdílů tomu nejpovolanějšímu - Photoshopu. Ptáte se jak? Velmi jednoduše!

Otevřeme obrázek se 100% kvalitou (u té JPG komprese skutečně není ztrátová) a máme referenční kvalitu. Pak otevřeme jeden z obrázků s nižší kvalitou, označíme v něm vše (Ctrl-A), zkopírujeme (Ctrl-C) a vložíme do referenčního obrázku (Ctrl-V). Tím v něm vznikne nad vrstvou Background nová vrstva Layer 1.

Hlavní trik

Teď přichází základní trik celého testu. Vrstvu Layer 1 přepneme do režimu Difference (česky Rozdíl). Co to znamená? Hodnota RGB pixelu v Layer 1 se odečte od hodnoty RGB ve vrstvě Background. Má-li třeba pixel hodnoty 110, 120, 130 a nad ním je stejný pixel 110, 120, 130, jaká bude hodnota rozdílového pixelu? No přeci 0, 0, 0, rozdíl je nulový, pixely se neliší. A jak vypadá pixel s hodnotou 0, 0, 0 ? No je černý jak bota. Takže tam, kde bude výsledný obrázek černý, jsou pixely naprosto shodné, tam kde se pixely mírně liší, dostaneme nějakou nečernou barvu.

Abychom vůbec něco viděli...

Ukazuje se, že rozdíly jsou tak malé, že jsou i po této zýrazňovací operaci pro oko téměř nepostřehnutelné (alespoň u 90% komprese se hledají opravdu velmi obtížně). Jsou tam tedy vůbec? Ano jsou, jen oko je nevidí. Když si ve Photoshopu otevřete panel Info a nad fotkou začnete jezdit kurzorem, uvidíte, že hodnoty pixelů se na mnoha místech budou lišit tak do hodnoty 3, místy třeba i 7 a při pečlivém hledání v té tmě najdete i pár míst, kde některá hodnota dosáhne úrovně mírně nad 10. 

U stejného pokusu s horšími kompresemi samozřejmě rozdíly budou o trošku větší a při pečlivém pozorování i okem v té černé ploše (nikolv v reálném obrázku) malinko postřehnutelné.

Ale my je umíme zesílit! Naprosto nesmyslně, ale chtěli jste je vidět, tak se na ně pojďme podívat. Jak se to udělá? Vezme se nástroj křivky a prudce se zvýší strmost křivek výsledného obrázku. Ve svém testu jsem hodnotu koncového bodu 255 posunul na 15, tedy jsem jakoby zvýšil citlivost filmu o 4 EV (to je trochu složitější vysvětlování a výpočet). Konečně rozdíly uvidíme! Ale takto se samozřejmě nikdy na normální fotku nedíváme, takže to berte jen pro zajímavost. Mimochodem krásně vidíte, co je pro JPG algoritmus těžké nebo naopak snadné komprimovat. Ještě pro srovnání, aby bylo vidět, jak moc je chyba zesílena, jsem stejným postupem zesílil šum digitální zrcadlovky při ISO 1600 (vyfotil jsem na 1/50s zavřenou krytku objektivu, takže tmu, aby ten krásný šum nic nerušilo).

Výsledky

Zbývá jen uvést malou tabulku výsledků. Do ní jsem dal jen menší výřezy fotek (v plném rozlišení). Celé obrázky si můžete stáhnout v přiloženém ZIPu a pečlivě je prostudovat na svém počítači a monitoru.

Kvalita Velikost dat (MB) Obrázek Rozdíl (šum) Zesílený rozdíl (šum)
100% 2,07

X

X

90% 1,49
80% 1,10
70% 0,905
šum 0,754

X

Závěr

Závěr nechť si z tohoto experimentu každý udělá sám. Pro mne je při ukládání JPGů pro běžné použití (prohlížení na obrazovce nebo výroba fotografií běžnéch formátů) jasným favoritem nastavení 90%ní kvality. Oko nemůže rozdíl poznat (znovu si uvědomte, že v experimentu je záměrně vše přehnáno, u normální fotky oko nepozná ani odlišnosti 80% kvality). Velikosti výsledných obrázků jsou ale znatelně menší (opět platí, že u normálních fotek je rozdíl velikosti ještě daleko zřetelnější), a tak se s fotkami daleko lépe manipuluje.

Tak až přště budete v noci nedočkavě koukat, kdy už se ty Vaše fotky konečně douploadují na server, abyste mohli jít spát, vzpomeňte na tento experiment.

PřílohaVelikost
Cele-obrazky.zip15.62 MB