JPEG. Kompresný algoritmus

Ahoj zas! Tento článok som našiel napísaný v máji 2019. Toto je pokračovanie série článkov o WAVE a JPEG tu prvý. Táto publikácia bude obsahovať informácie o algoritme kódovania obrázkov a samotnom formáte ako celku.

Štipka histórie

Lyžica článku z Wikipédie:

JPEG (Joint Photographic Experts Group) je jedným z populárnych formátov rastrovej grafiky, ktorý sa používa na ukladanie fotografií a podobných obrázkov.

Tento štandard bol vyvinutý skupinou Joint Photographic Experts Group už v roku 1991 pre efektívnu kompresiu obrázkov.

Ako prechádzajú obrázky z raw do JPEG?

Niektorí ľudia si myslia, že obrázky JPEG sú nespracované údaje komprimované pomocou Huffmanovej metódy, ale to nie je pravda. Pred riadiacou kompresiou prejdú dáta dlhú cestu.

Najprv sa zmení farebný model z RGB na YCbCr. Na to existuje dokonca špeciálny algoritmus - tu. Y sa nedotkne, pretože je zodpovedné za jas a jeho zmena bude viditeľná.

Prvá vec, ktorú treba urobiť s obrázkom, je "rednutie" (podvzorkovanie). Je to ľahké pochopiť: vezme sa pole 2x2 pixelov, potom sa zoberú Cb a Cr - priemerné hodnoty každej zložky YCbCr týchto 4 pixelov. takže, vyhrali sme 6 bajtov, namiesto 4 Y, 4 Cb, 4 Cr sme dostali 4 Y a pre každú z nich rovnaké Cb a Cr (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6). Aj v mierke 2x2 znie stratová kompresia s kompresným pomerom 2:1 solídne. To platí pre celý obrázok. A tak - klesli o polovicu. A túto techniku ​​môžeme využiť vďaka nášmu vnímaniu farieb. Človek si ľahko všimne rozdiel v jase, ale nie vo farbe, ak je spriemerovaný cez malý blok pixelov. Riedenie je možné vykonať aj v rade, 4 pixely horizontálne a vertikálne. Prvá možnosť sa používa častejšie. Ak je dôležitá kvalita obrazu, decimácia sa vôbec nevykonáva.
Vizuálna ilustrácia rednutia (Habr mi nedovolil vložiť gif) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Hlavná časť prípravy

PrEP

Teraz prichádza tá najťažšia a najpotrebnejšia časť. Celý obrázok je rozdelený na 8x8 blokov (výplň sa používa, ak rozlíšenie nie je násobkom strany bloku).

Teraz použite na každý blok DCT (Diskrétna kosínusová transformácia). V tejto časti je z obrazu vytiahnuté všetko nepotrebné. Pomocou DCT musíte pochopiť, či daný blok (8×8) opisuje nejakú monotónnu časť obrazu: oblohu, stenu; alebo obsahuje zložitú štruktúru (vlasy, symboly atď.). Je logické, že 64 pixelov podobnej farby možno opísať len 1, pretože veľkosť bloku je už známa. Toľko ku kompresii: 64 ku 1.

DCT zmení blok na spektrum a tam, kde sa hodnoty prudko zmenia, koeficient sa stane pozitívnym a čím ostrejší je prechod, tým vyšší bude výstup. Kde je koeficient vyšší, na obrázku sú zreteľné prechody vo farbe a jase, kde je nižší - slabé (hladké) zmeny hodnôt zložiek YCbCr v bloku.

Kvantovanie

Nastavenia kompresie sú tu už použité. Každý z koeficientov v každej z matíc 8x8 je vydelený určitým číslom. Ak po všetkých jeho úpravách neznížite kvalitu obrazu, potom by mal byť deliteľ jedna. Ak je pre vás pamäť obsadená touto fotografiou dôležitejšia, potom bude deliteľ väčší ako 1 a podiel bude zaokrúhlený. Ukazuje sa, že po zaokrúhlení často skončíte s množstvom núl.

Kvantovanie sa robí, aby sa vytvorila možnosť ešte väčšej kompresie. Takto to vyzerá na príklade kvantovania grafu y = sin(x):

JPEG. Kompresný algoritmus

kompresia

Najprv prechádzame maticou cik-cak vzorom:

JPEG. Kompresný algoritmus

Dostaneme jednorozmerné pole s číslami. Vidíme, že je v ňom veľa núl, dajú sa odstrániť. Aby sme to dosiahli, namiesto postupnosti mnohých núl zadáme 1 nulu a za ňou číslo označujúce ich počet v postupnosti. Týmto spôsobom môžete resetovať na 1/3 veľkosti celého poľa. A potom toto pole jednoducho skomprimujeme pomocou Huffmanovej metódy a zapíšeme ho do samotného súboru.

Kde sa používa

Všade. Podobne ako PNG, aj JPEG sa používa vo fotoaparátoch, operačných systémoch (ako firemné logá, ikony aplikácií, miniatúry) a vo všetkých možných oblastiach, kde je potrebné efektívne ukladať obrázky.

Výkon

Momentálne sú poznatky o JPEG hodnotné už len na vzdelávacie účely, pretože je už všade zabudovaný a optimalizovaný veľkými skupinami ľudí, no žula vedy je stále chutná.

zdroje

Článok o YCbCr na Wikipédii
Wikipedia článok o JPEG
Trochu o PrEP z príspevku Pikabu
Článok na Wikipédii o PrEP

Zdroj: hab.com

Pridať komentár