JPEG. Kompresní algoritmus

Ahoj znovu! Našel jsem tento článek napsaný v květnu 2019. Toto je pokračování série článků o WAVE a JPEG, zde první. Tato publikace bude obsahovat informace o algoritmu kódování obrazu a formátu samotném jako celku.

Špetka historie

Lžíce článku na Wikipedii:

JPEG (Joint Photographic Experts Group) je jeden z populárních formátů rastrové grafiky používaný pro ukládání fotografií a podobných obrázků.

Tento standard byl vyvinut společností Joint Photographic Experts Group již v roce 1991 pro účinnou kompresi obrazu.

Jak přecházejí obrázky z raw do JPEG?

Někteří lidé si myslí, že obrázky JPEG jsou nezpracovaná data komprimovaná pomocí Huffmanovy metody, ale to není pravda. Před kontrolní kompresí urazí data dlouhou cestu.

Nejprve se změní barevný model z RGB na YCbCr. Na to existuje dokonce speciální algoritmus - zde. Y se nedotkne, protože je zodpovědné za jas a jeho změna bude patrná.

První věc, kterou je třeba udělat s obrázkem, je "řídnutí" (podvzorkování). Je to snadné pochopit: vezme se pole 2x2 pixelů, pak se vezmou Cb a Cr - průměrné hodnoty každé ze složek YCbCr těchto 4 pixelů. Tak, vyhráli jsme 6 bajtů, místo 4 Y, 4 Cb, 4 Cr jsme dostali 4 Y a pro každý z nich stejné Cb a Cr (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6). I v měřítku 2x2 zní ztrátová komprese s kompresním poměrem 2:1 solidně. To platí pro celý obrázek. A tak - klesli o polovinu velikosti. A tuto techniku ​​můžeme používat díky našemu vnímání barev. Člověk snadno zaznamená rozdíl v jasu, ale ne v barvě, pokud je zprůměrován přes malý blok pixelů. Ztenčení lze také provést v řádku, 4 pixely vodorovně a svisle. První možnost se používá častěji. Pokud je důležitá kvalita obrazu, pak se decimace vůbec neprovádí.
Vizuální ilustrace řídnutí (Habr mi nedovolil vložit gif) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Hlavní část přípravy

Dkp

Nyní přichází ta nejtěžší a nejnutnější část. Celý obrázek je rozdělen do 8x8 bloků (výplň se používá, pokud rozlišení není násobkem strany bloku).

Nyní aplikujte na každý blok DCT (Discrete Cosine Transform). V této části je z obrazu vyjmuto vše nepotřebné. Pomocí DCT musíte pochopit, zda daný blok (8×8) popisuje nějakou monotónní část obrazu: oblohu, zeď; nebo obsahuje složitou strukturu (vlasy, symboly atd.). Je logické, že 64 pixelů podobné barvy lze popsat pouhým 1, protože velikost bloku je již známa. Tolik ke kompresi: 64 ku 1.

DCT změní blok na spektrum a tam, kde se hodnoty prudce změní, koeficient se stane kladným a čím ostřejší je přechod, tím vyšší bude výstup. Kde je koeficient vyšší, na obrázku jsou zřetelné přechody v barvě a jasu, kde je nižší - slabé (hladké) změny hodnot složek YCbCr v bloku.

Kvantování

Zde jsou již použita nastavení komprese. Každý z koeficientů v každé z matic 8x8 je vydělen určitým číslem. Pokud po všech jeho úpravách nesnížíte kvalitu obrazu, pak by měl být dělitel jedna. Pokud je pro vás důležitější paměť obsazená touto fotografií, pak bude dělitel větší než 1 a podíl bude zaokrouhlen. Ukazuje se, že po zaokrouhlení často skončíte se spoustou nul.

Kvantování se provádí za účelem vytvoření možnosti ještě větší komprese. Zde je návod, jak to vypadá na příkladu kvantování grafu y = sin(x):

JPEG. Kompresní algoritmus

Komprese

Nejprve projdeme maticí klikatým způsobem:

JPEG. Kompresní algoritmus

Dostaneme jednorozměrné pole s čísly. Vidíme, že je v něm hodně nul, dají se odstranit. K tomu místo posloupnosti mnoha nul zadáme 1 nulu a za ní číslo udávající jejich počet v posloupnosti. Tímto způsobem můžete resetovat na 1/3 velikosti celého pole. A pak toto pole jednoduše zkomprimujeme pomocí Huffmanovy metody a zapíšeme do samotného souboru.

Kde se používá

Všude. Stejně jako PNG se i JPEG používá ve fotoaparátech, operačních systémech (jako firemní loga, ikony aplikací, miniatury) a ve všech možných oblastech, kde je potřeba efektivně ukládat obrázky.

Výkon

V tuto chvíli jsou znalosti o JPEG nyní cenné pouze pro vzdělávací účely, protože je již všude zabudován a optimalizován velkými skupinami lidí, ale žula vědy je stále chutná.

zdroje

Článek o YCbCr na Wikipedii
Wikipedia článek o JPEG
Něco málo o PrEP z příspěvku Pikabu
Článek na Wikipedii o PrEP

Zdroj: www.habr.com

Přidat komentář