JPEG. Algoritem stiskanja

Pozdravljeni ponovno! Ta članek sem našel napisan maja 2019. To je nadaljevanje serije člankov o WAVE in JPEG, tukaj najprej. Ta publikacija bo vključevala informacije o algoritmu kodiranja slike in samem formatu kot celoti.

Ščepec zgodovine

Jedilna žlica članka iz Wikipedije:

JPEG (Joint Photographic Experts Group) je eden od priljubljenih rastrskih grafičnih formatov, ki se uporablja za shranjevanje fotografij in podobnih slik.

Ta standard je leta 1991 razvila Joint Photographic Experts Group za učinkovito stiskanje slik.

Kako slike preidejo iz raw v JPEG?

Nekateri mislijo, da so slike JPEG neobdelani podatki, stisnjeni po Huffmanovi metodi, vendar to ni res. Pred nadzornim stiskanjem podatki prepotujejo dolgo pot.

Najprej se barvni model spremeni iz RGB v YCbCr. Za to obstaja celo poseben algoritem - tukaj. Y se ne dotika, saj je odgovoren za svetlost in njegova sprememba bo opazna.

Prva stvar, ki jo je treba narediti s sliko, je "redčenje" (podvzorčenje). To je enostavno razumeti: vzame se niz slikovnih pik 2x2, nato se vzameta Cb in Cr - povprečne vrednosti vsake od komponent YCbCr teh 4 slikovnih pik. Torej, osvojili smo 6 bajtov, namesto 4 Y, 4 Cb, 4 Cr smo dobili 4 Y in enaka Cb in Cr za vsakega od njih (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6). Pri enakomernem merilu 2x2 se stiskanje z izgubo z razmerjem stiskanja 2:1 sliši solidno. To velja za celotno sliko. In tako – padle so za pol številke. In to tehniko lahko uporabljamo zahvaljujoč našemu barvnemu zaznavanju. Oseba bo zlahka opazila razliko v svetlosti, ne pa tudi v barvi, če je povprečna za majhen blok slikovnih pik. Redčenje je možno tudi v liniji, 4 slikovne pike vodoravno in navpično. Prva možnost se uporablja pogosteje. Če je kakovost slike pomembna, se decimacija sploh ne izvede.
Vizualna ilustracija redčenja (Habr mi ni dovolil vstaviti gifa) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Glavni del priprave

PrEP

Zdaj pride najtežji in najnujnejši del. Celotna slika je razdeljena na bloke 8x8 (polnilo se uporablja, če ločljivost ni večkratnik strani bloka).

Zdaj uporabite za vsak blok DCT (diskretna kosinusna transformacija). V tem delu je iz slike odvzeto vse nepotrebno. Z uporabo DCT morate razumeti, ali dani blok (8 × 8) opisuje kateri koli monoton del slike: nebo, steno; ali vsebuje kompleksno strukturo (lasje, simboli itd.). Logično je, da je 64 slikovnih pik podobne barve mogoče opisati s samo 1, ker velikost bloka je že znana. Toliko o kompresiji: 64 proti 1.

DCT spremeni blok v spekter in kjer se odčitki močno spremenijo, postane koeficient pozitiven in ostrejši kot je prehod, višji bo izhod. Kjer je koeficient višji, slika prikazuje jasne prehode v barvi in ​​svetlosti, kjer je nižji - šibke (gladke) spremembe vrednosti komponent YCbCr v bloku.

Kvantizacija

Tukaj so že uporabljene nastavitve stiskanja. Vsak od koeficientov v vsaki od matrik 8x8 je deljen z določenim številom. Če po vseh spremembah ne boste zmanjšali kakovosti slike, mora biti delilnik ena. Če vam je pomembnejši spomin, ki ga zaseda ta fotografija, bo delitelj večji od 1, količnik pa zaokrožen. Izkazalo se je, da po zaokroževanju pogosto na koncu dobite veliko ničel.

Kvantizacija se izvede, da se ustvari možnost še večje kompresije. Takole je videti na primeru kvantiziranja grafa y = sin(x):

JPEG. Algoritem stiskanja

Stiskanje

Najprej gremo skozi matrico v cik-cak vzorcu:

JPEG. Algoritem stiskanja

Dobimo enodimenzionalni niz s števili. Vidimo, da je v njem veliko ničel, jih je mogoče odstraniti. Da bi to naredili, namesto zaporedja številnih ničel vnesemo 1 ničlo in za njo številko, ki označuje njihovo število v zaporedju. Na ta način lahko ponastavite na 1/3 velikosti celotne matrike. In potem to matriko preprosto stisnemo s Huffmanovo metodo in jo zapišemo v samo datoteko.

Kjer se uporablja

Povsod. Tako kot PNG se tudi JPEG uporablja v fotoaparatih, operacijskih sistemih (kot logotipi podjetij, ikone aplikacij, sličice) in na vseh možnih področjih, kjer je treba slike učinkovito shraniti.

Izhod

Trenutno je znanje o JPEG dragoceno le za izobraževalne namene, ker je že povsod vgrajeno in optimizirano s strani velikih skupin ljudi, vendar je granit znanosti še vedno okusen.

viri

Članek o YCbCr na Wikipediji
Članek Wikipedije o JPEG
Nekaj ​​malega o PrEP iz objave Pikabu
Članek v Wikipediji o PrEP

Vir: www.habr.com

Dodaj komentar