JPEG. Algoritam kompresije

Ponovno pozdrav! Pronašao sam ovaj članak napisan u svibnju 2019. godine. Ovo je nastavak serije članaka o WAVE i JPEG-u. Evo prva. Ova publikacija uključuje informacije o algoritmu kodiranja slika i o samom formatu u cjelini.

Malo povijesti

Jedna žlica članka s Wikipedije:

JPEG (Joint Photographic Experts Group) je jedan od popularnih bitmap formata, koristi se za pohranu fotografija i sličnih slika.

Ova norma je razvijena od strane Udružene grupe stručnjaka za fotografiju još 1991. godine za učinkovito komprimiranje slika.

Kakav put prolaze slike od sirovog stanja do JPEG-a

Neki smatraju da su JPEG slike sirovi podaci komprimirani metodom Huffman, no to nije točno. Prije konačne kompresije, podaci prolaze dug put.

Prvo, promjena modela boje se vrši s RGB na YCbCr. Za to postoji poseban algoritam — ovdje. Y se ne dira, jer on odgovara za svjetlinu i njegovo mijenjanje bi bilo primjetno.

Prva stvar koja se radi sa slikom je «subsampling» (smanjenje uzorka). To je lako razumjeti: uzima se 2x2 matrica piksela, zatim se uzimaju Cb i Cr — srednje vrijednosti svake od komponenata YCbCr ovih 4 piksela. I tako, dobijamo 6 bajtova, umjesto 4 Y, 4 Cb, 4 Cr dobivamo 4 Y i jednake za svaku od njih Cb i Cr (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 — 6 = 6). U razmjeru čak 2×2 kompresija s gubitkom s omjerom kompresije 2:1 zvuči značajno. To se primjenjuje na cijelu sliku. I tako — smanjili smo polovicu veličine. Takoj pristup možemo koristiti zahvaljujući našem percepciji boja. Čovjek lako primijeti razliku u svjetlini, ali ne u boji, ako je prosječna u maloj grupi piksela. Također, smanjenje uzorka može se izvoditi u liniji, 4 piksela horizontalno i vertikalno. Prva opcija se koristi češće. Ako je kvaliteta slike važna, tada se smanjenje uzorka ne izvodi uopće.
Ilustracija smanjenja uzorka (Habr nije dopustio dodavanje gif-a) — https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Glavni dio pripreme

DCT

Sada dolazi najkompliciraniji i najpotrebniji dio. Cijela slika se podijeli u blokove 8×8 (koristi se punjenje ako rezolucija nije višekratnik strane bloka).

Sada se svakom bloku primjenjuje DCT (Diskretna kosinusna transformacija). U ovom dijelu slike se uklanjaju svi suvišni dijelovi. Koristeći DCT treba razumjeti opisuje li ovaj blok (8×8) neku monotone dijela slike: neba, zida; ili sadrži složenu strukturu (kosa, simboli itd.). Logično je da se 64 slična po boji piksela može opisati samo jednim, jer je veličina bloka već poznata. A tu vam je i kompresija: 64 prema 1.

DCT pretvara blok u spektar, i gdje se očitanja oštro mijenjaju, koeficijent postaje pozitivan, a što je prijelaz oštriji, to će izlaz biti veći. Tamo gdje je koeficijent viši, na slici su prikazani jasni prijelazi u boji i svjetlini, a gdje je niži — slabi (glatki) prijelazi magnituda komponenti YCbCr u bloku.

Kvantizacija

Ovdje se već primjenjuju podešavanja za kompresiju. Svaki od koeficijenata u svakoj od matrica 8×8 dijeli se sa određenim brojem. Ako kvalitetu slike nakon svih njenih modifikacija ne želite više smanjivati, onda bi dijelitelj trebao biti jedan. Ako vam je važnija memorija koju zauzima ova fotografija, onda će dijelitelj biti veći od 1, a količnik se zaokružuje. Tako dolazimo do toga da nakon zaokruživanja često dobijamo puno nula.

Kvantizacija se radi kako bi se omogućila još veća kompresija. Evo kako to izgleda na primjeru kvantizacije grafa y = sin(x):

JPEG. Algoritam kompresije

Kompresija

Prvo prolazimo kroz matricu u zig-zag putanji:

JPEG. Algoritam kompresije

Dobijamo jednodimenzionalni niz s brojevima. Vidimo da ih ima puno nula, koje možemo ukloniti. Za to umjesto niza s mnogo nula upisujemo 1 nulu, a nakon nje broj koji označava njihov broj u nizu. Na taj način možemo smanjiti veličinu cijelog niza na 1/3. A zatim jednostavno kompresiramo ovaj niz metodom Huffmana i upisujemo u sam datoteku.

Gdje se koristi

Svuda. Kao i PNG, JPEG se koristi u fotoaparatima, operativnim sustavima (kao logotipi kompanija, ikone aplikacija, sličice) i u svim mogućim područjima gdje je potrebno efikasno pohranjivanje slika.

Izvještaj

Trenutno su znanja o JPEG-u vrijedna isključivo u obrazovne svrhe, jer je već svuda ugrađen i optimiziran od strane velikih grupa ljudi, ali znanstveni kamen je ipak slastan.

Izvori

Članak o YCbCr na Wikipediji
Članak o JPEG-u na Wikipediji
Malo o DCT-u sa Pikabu posta
Članak o DCT-u na Wikipediji

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster