JPEG. Algoritem kompresije

Ponovno zdravo! Našel sem ta članek, napisan maja 2019. To je nadaljevanje serije člankov o WAVE in JPEG, tukaj ena. Ta objava bo vsebovala informacije o algoritmu kodiranja slik in o formatu na splošno.

Ščepec zgodovine

Žlico članka iz Wikipedije:

JPEG (Joint Photographic Experts Group) je priljubljen format rastrskih slik, ki se uporablja za shranjevanje fotografij in podobnih slik.

Ta standard je bil razvit s strani Združene ekspertne skupine za fotografijo že leta 1991 za učinkovito stiskanje slik.

Kakšno pot slike prehajajo od surove oblike do JPEG

Nekateri menijo, da so JPEG slike stisnjeni podatki v formatu Huffman, vendar to ni res. Pred končnim stiskanjem podatki preidejo dolgo pot.

Najprej se barvni model spremeni iz RGB v YCbCr. Za to obstaja poseben algoritem — ovde. Y ostane nespremenjen, saj odgovarja za svetlost in bi bila kaka sprememba opazna.

Prvo, kar naredijo s sliko, je »vzorcevanje« (subsampling). To je enostavno razumeti: vzame se 2x2 matrika pikslov, nato pa se vzamejo Cb in Cr – povprečne vrednosti vsake od komponent YCbCr teh 4 pikslov. Tako smo pridobili 6 bajtov, namesto 4 Y, 4 Cb, 4 Cr smo dobili 4 Y in enake Cb in Cr za vsak od njih (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 — 6 = 6). V primeru celo 2×2 stiskanje s kompresijskim razmerjem 2:1 zveni precej dobro. To se uporablja za celo sliko. Tako smo zmanjšali velikost na polovico. Takšne trike lahko uporabimo zahvaljujoč našem barvnem zaznavanju. Človek zlahka opazi razliko v svetlosti, a ne v barvi, če je povprečena v majhnem bloku pikslov. Prav tako se vzorcevanje lahko izvede v vrstici, 4 piksli po horizontali in vertikali. Prva možnost se pogosteje uporablja. Če je kakovost slike pomembna, vzorcevanje sploh ni izvedeno.
Jasna ilustracija vzorcevanja (Habr ni dovoli vstaviti gif) — https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Osrednji del priprave

DCT

Sedaj je najtežji in najpomembnejši del. Vsaka slika se razdeli na bloke 8×8 (uporabljajo se polnjenja, če resolucija ni večkratnik dolžine bloka).

Sedaj se vsakemu bloku uporabi DCT (Diskretna Kosinusna Transformacija). V tejto časti obrázka sa odstraňujú všetky nadbytočné prvky. Použitím DCT treba zistiť, či tento blok (8×8) opisuje nejakú monotónnu časť obrázka: oblohu, stenu; alebo obsahuje zložitú štruktúru (vlasy, symboly atď.). Je logické, že 64 podobných pixelov farbou možno opísať jediným, keďže veľkosť bloku je už známa. A takto dochádza k zmršteniu: 64 na 1.

DCT prevádza blok na spektrum a tam, kde sa hodnoty rýchlo menia, stáva sa koeficient kladným, a čím ostrejší je prechod, tým vyšší bude výstup. Tam, kde je koeficient vyšší, na obrázku sú znázornené jasné prechody v farbe a jasnosti, zatiaľ čo tam, kde je nižší — slabé (hladké) zmeny hodnôt komponentov YCbCr v bloku.

Kvantomovanie

Tu sa už aplikujú nastavenia kompresie. Každý z koeficientov v každej z matic 8×8 sa delí na určité číslo. Ak po všetkých modifikáciách viac nechcete znižovať kvalitu obrázka, musí byť deliteľ rovný jednotke. Ak je dôležitejšia pamäť zaberajúca tento obrázok, deliteľ bude väčší ako 1 a podiel sa zaokrúhľuje. Takto sa často stáva, že po zaokrúhlení vychádza veľa nul.

Kvantomovanie sa vykonáva za účelom ďalšieho zmrštenia. Takto to vyzerá na príklade kvantomovania grafu y = sin(x):

JPEG. Algoritem kompresije

Komprimiranje

Najprv prechádzame maticou zigg-zaggom:

JPEG. Algoritem kompresije

Získavame jednorozmerné pole s číslami. Vidíme, že v ňom je veľa núl, ktoré môžeme odstrániť. Namiesto sekvencie mnohých núl zapisujeme 1 nulu a za ňou číslo, ktoré označuje ich počet v sekvencii. Takto sa môže zmenšiť na 1/3 veľkosti celého poľa. A potom sa jednoducho toto pole komprimuje Huffmanovou metódou a zapisuje do samotného súboru.

Uporaba

Všade. Tak ako PNG, JPEG sa používa v fotoaparátových systémoch, operačných systémoch (ako logá spoločností, ikony aplikácií, náhľady) a vo všetkých možných oblastiach, kde je potrebné efektívne uchovávať obrázky.

Izlaz

Momentálne sú poznatky o JPEG cenné iba na vzdelávacie účely, pretože je už všade zabudovaný a optimalizovaný veľkými skupinami ľudí, ale granit vedy je predsa len chutný.

Izvori

Článok o YCbCr na Wikipédii
Článok o JPEG na Wikipédii
Trochu o DCT z príspevku na Pikaboo
Článok o DCT na Wikipédii

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster