JPEG. Algoritam kompresije

Bok opet! Pronašao sam ovaj članak napisan još u svibnju 2019. Ovo je nastavak serije članaka o WAVE i JPEG, ovdje prvo. Ova publikacija će sadržavati informacije o algoritmu za kodiranje slike i samom formatu u cjelini.

Prstohvat povijesti

Žlica članka na Wikipediji:

JPEG (Joint Photographic Experts Group) jedan je od popularnih rasterskih grafičkih formata koji se koristi za pohranu fotografija i sličnih slika.

Ovaj standard razvila je Joint Photographic Experts Group još 1991. za učinkovitu kompresiju slike.

Kako slike prelaze iz sirovog u JPEG?

Neki ljudi misle da su JPEG slike sirovi podaci komprimirani pomoću Huffmanove metode, ali to nije točno. Prije kompresije kontrole, podaci putuju dugim putem.

Prvo se mijenja model boja iz RGB u YCbCr. Postoji čak i poseban algoritam za to - здесь. Y se ne dira, jer je odgovoran za svjetlinu, a njegova promjena će biti primjetna.

Prvo što treba učiniti sa slikom je "stanjivanje" (poduzorkovanje). Lako je razumjeti: uzima se niz piksela 2x2, zatim se uzimaju Cb i Cr - prosječne vrijednosti svake YCbCr komponente ova 4 piksela. Tako, osvojili smo 6 bajtova, umjesto 4 Y, 4 Cb, 4 Cr dobili smo 4 Y i iste Cb i Cr za svaki od njih (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6). U čak 2x2 mjerilu, kompresija s gubitkom s omjerom kompresije 2:1 zvuči solidno. Ovo se odnosi na cijelu sliku. I tako – spale su za pola broja. A ovu tehniku ​​možemo koristiti zahvaljujući našoj percepciji boja. Osoba će lako primijetiti razliku u svjetlini, ali ne i u boji, ako se uprosječi na mali blok piksela. Stanjivanje se također može raditi u liniji, 4 piksela vodoravno i okomito. Prva opcija se koristi češće. Ako je kvaliteta slike važna, decimacija se uopće ne provodi.
Vizualna ilustracija stanjivanja (Habr mi nije dao da ubacim gif) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Glavni dio pripreme

DCM

Sada dolazi najteži i najnužniji dio. Cijela je slika podijeljena na blokove 8x8 (ispuna se koristi ako razlučivost nije višekratnik stranice bloka).

Sada primijenite na svaki blok DCT (diskretna kosinusna transformacija). U ovom dijelu je sve nepotrebno izbačeno iz slike. Koristeći DCT, morate razumjeti opisuje li dati blok (8×8) bilo koji monotoni dio slike: nebo, zid; ili sadrži složenu strukturu (kosa, simboli itd.). Logično je da se 64 piksela iste boje mogu opisati samo 1, jer veličina bloka je već poznata. Toliko o kompresiji: 64 prema 1.

DCT pretvara blok u spektar, a gdje se očitanja oštro mijenjaju, koeficijent postaje pozitivan, a što je prijelaz oštriji, izlaz će biti veći. Gdje je koeficijent veći, slika pokazuje jasne prijelaze u boji i svjetlini, gdje je niži - slabe (glatke) promjene vrijednosti YCbCr komponenti u bloku.

Kvantizacija

Ovdje su već primijenjene postavke kompresije. Svaki od koeficijenata u svakoj od matrica 8x8 podijeljen je s određenim brojem. Ako nećete smanjiti kvalitetu slike nakon svih njezinih izmjena, tada bi djelitelj trebao biti jedan. Ako vam je bitnija memorija koju zauzima ova fotografija, tada će djelitelj biti veći od 1, a kvocijent će biti zaokružen. Ispostavilo se da nakon zaokruživanja često završite s puno nula.

Kvantizacija se radi kako bi se stvorila mogućnost još veće kompresije. Evo kako to izgleda na primjeru kvantizacije grafa y = sin(x):

JPEG. Algoritam kompresije

Kompresija

Prvo prolazimo kroz matricu u cik-cak uzorku:

JPEG. Algoritam kompresije

Dobivamo jednodimenzionalni niz s brojevima. Vidimo da u njemu ima puno nula, mogu se ukloniti. Da bismo to učinili, umjesto niza od mnogo nula, upisujemo 1 nulu i nakon nje broj koji označava njihov broj u nizu. Na ovaj način možete vratiti na 1/3 veličine cijelog niza. Zatim jednostavno komprimiramo ovaj niz pomoću Huffmanove metode i zapisujemo ga u samu datoteku.

Gdje se koristi

Svugdje, posvuda. Poput PNG-a, JPEG se koristi u kamerama, operativnim sustavima (kao logotipi tvrtki, ikone aplikacija, minijature) i u svim mogućim područjima gdje slike trebaju biti učinkovito pohranjene.

Izlaz

Trenutačno je znanje o JPEG-u vrijedno samo u obrazovne svrhe, jer je već posvuda ugrađeno i optimizirano od strane velikih skupina ljudi, ali granit znanosti je još uvijek ukusan.

izvori

Članak o YCbCr na Wikipediji
Wikipedia članak o JPEG
Malo o PrEP-u iz Pikabu posta
Članak na Wikipediji o PrEP-u

Izvor: www.habr.com

Dodajte komentar