Zdravo opet! Pronašao sam ovaj članak napisan još u maju 2019. Ovo je nastavak serije članaka o WAVE-u i JPEG-u, ovdje
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 -
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) -
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):
Kompresija
Prvo prolazimo kroz matricu u cik-cak uzorku:
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
izvor: www.habr.com