JPEG. Algoritam kompresije

Zdravo opet! Pronašao sam ovaj članak napisan još u maju 2019. Ovo je nastavak serije članaka o WAVE-u i JPEG-u, ovdje prvo. Ova publikacija će uključivati ​​informacije o algoritmu za kodiranje slike i samom formatu u cjelini.

Prstohvat istorije

Kašika članka na Wikipediji:

JPEG (Joint Photographic Experts Group) je jedan od popularnih formata rasterske grafike koji se koristi za pohranjivanje fotografija i sličnih slika.

Ovaj standard je razvila Joint Photographic Experts Group još 1991. godine za efikasnu kompresiju slike.

Kako slike prelaze iz sirovog u JPEG?

Neki ljudi misle da su JPEG slike sirovi podaci komprimirani pomoću Huffman metode, ali to nije istina. Prije kontrolne kompresije, podaci putuju dug put.

Prvo, model boja je promijenjen iz RGB u YCbCr. Za to postoji čak i poseban algoritam - ovdje. Y se ne dira, jer je odgovoran za svjetlinu, a njegova promjena će biti primjetna.

Prva stvar koju treba uraditi sa slikom je "stanjivanje" (poduzorkovanje). Ovo je lako razumjeti: uzima se niz piksela 2x2, zatim se uzimaju Cb i Cr - prosječne vrijednosti svake od YCbCr komponenti ova 4 piksela. dakle, osvojili smo 6 bajtova, umjesto 4 Y, 4 Cb, 4 Cr dobili smo 4 Y i isto Cb i Cr za svaki od njih (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6). Na čak 2x2 skali, kompresija sa gubicima sa omjerom kompresije 2:1 zvuči solidno. Ovo se odnosi na cijelu sliku. I tako - pali su za pola veličine. 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 usredsredi na mali blok piksela. Stanjivanje se takođe može uraditi u liniji, 4 piksela horizontalno i vertikalno. Prva opcija se češće koristi. Ako je kvalitet slike važan, onda se decimacija uopće ne vrši.
Vizuelna ilustracija stanjivanja (Habr mi nije dozvolio da ubacim gif) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Glavni dio pripreme

Dkp

Sada dolazi najteži i najpotrebniji dio. Cijela slika je podijeljena na blokove 8x8 (ispunjavanje se koristi ako rezolucija nije višestruka od strane bloka).

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

DCT pretvara blok u spektar, a tamo gdje se očitanja naglo mijenjaju, koeficijent postaje pozitivan, a što je prijelaz oštriji, to će biti veći izlaz. Tamo 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

Postavke kompresije su već primijenjene ovdje. Svaki od koeficijenata u svakoj od 8x8 matrica podijeljen je određenim brojem. Ako nećete smanjiti kvalitetu slike nakon svih njenih modifikacija, onda bi djelitelj trebao biti jedan. Ako vam je važnija memorija koju zauzima ova fotografija, tada će djelitelj biti veći od 1, a količnik ć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

Dobijamo jednodimenzionalni niz sa brojevima. Vidimo da u njemu ima puno nula, mogu se ukloniti. Da bismo to učinili, umjesto niza od mnogo nula, unosimo 1 nulu i nakon nje broj koji označava njihov broj u nizu. Na ovaj način možete resetirati na 1/3 veličine cijelog niza. A onda jednostavno komprimujemo ovaj niz koristeći Hafmanov metod i upisujemo ga u sam fajl.

Gdje koristiti

Svuda. Kao i PNG, JPEG se koristi u kamerama, operativnim sistemima (kao logotipi kompanije, ikone aplikacija, sličice) i u svim mogućim oblastima gde slike treba efikasno da se pohranjuju.

zaključak

Trenutno je znanje o JPEG-u vredno samo u obrazovne svrhe, jer je već svuda ugrađeno i optimizovano od strane velikih grupa ljudi, ali granit nauke je i dalje ukusan.

Izvori

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

izvor: www.habr.com

Dodajte komentar