Sveiki vÄlreiz! Es atradu Å”o rakstu, kas uzrakstÄ«ts 2019. gada maijÄ. Tas ir turpinÄjums rakstu sÄrijai par WAVE un JPEG. Å eit bÅ«s iekļauta informÄcija par attÄlu kodÄÅ”anas algoritmu un paÅ”u formÄtu kopumÄ.
Mazliet vÄstures
Karote raksta no VikipÄdijas:
JPEG (Joint Photographic Experts Group) ir viens no populÄrÄkajiem rastra attÄlu formÄtiem, ko izmanto fotogrÄfiju un lÄ«dzÄ«gu attÄlu glabÄÅ”anai.
Å is standarts tika izstrÄdÄts 1991. gadÄ, apvienojoties fotogrÄfijas ekspertiem, lai efektÄ«vi saspiestu attÄlus.
KÄ attÄli nonÄk no izejas formÄta lÄ«dz JPEG
Daži uzskata, ka JPEG attÄli ir saspiesti ar HÄfa kodÄÅ”anu, bet tas nav taisnÄ«ba. Pirms kontroles saspieÅ”anas dati veic garu ceļu.
Vispirms krÄsu modelis tiek mainÄ«ts no RGB uz YCbCr. Tam ir pat Ä«paÅ”s algoritms ā . Y nekad nemaina, jo tas atbild par spilgtumu, un tÄ izmaiÅas bÅ«s pamanÄmas.
Pirmais, ko dara ar attÄlu, ir Ā«paraugu samazinÄÅ”anaĀ» (subsampling). Saprast to ir vienkÄrÅ”i: tiek Åemts 2x2 pikseļu masÄ«vs, pÄc tam tiek Åemti Cb un Cr ā katra no YCbCr komponentÄm vidÄjÄs vÄrtÄ«bas no Å”iem 4 pikseļiem. Un tÄ, mÄs ieguvÄm 6 baitus, tÄ vietÄ, lai iegÅ«tu 4 Y, 4 Cb, 4 Cr, mÄs saÅÄmÄm 4 Y un vienÄdas Cb un Cr vÄrtÄ«bas katram no tiem (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 ā 6 = 6). Pat 2Ć2 saspieÅ”anas koeficients 2:1 izklausÄs nopietni. Tas tiek piemÄrots visam attÄlam. TÄdÄjÄdi mÄs samazinÄjÄm apjomu uz pusi. Å Äds paÅÄmiens ir iespÄjams, pateicoties mÅ«su krÄsu uztverei. CilvÄks viegli pamanÄ«s atŔķirÄ«bu spilgtumÄ, bet ne krÄsÄ, ja tÄ ir vidÄjÄ mazÄ pikseļu blokÄ. ArÄ« paraugu samazinÄÅ”ana var tikt veikta pa rindu, 4 pikseļi horizontÄli un vertikÄli. Pirmais variants tiek izmantots biežÄk. Ja attÄla kvalitÄte ir svarÄ«ga, tad paraugu samazinÄÅ”ana netiek veikta vispÄr.
VizualizÄcija paraugu samazinÄÅ”anai (Habr neļÄva ievietot GIF) ā
Pamatdaļa sagatavoŔanai
DCT
Tagad visgrÅ«tÄkÄ un nepiecieÅ”ama daļa. Visu attÄlu sadala blokos 8Ć8 (tiek izmantota aizpildīŔana, ja izŔķirtspÄja nav dalÄma ar bloka malu).
Tagad katram blokam tiek piemÄrots DCT (diskrÄtÄ kosinusu transformÄcija). Å ajÄ daÄ¼Ä no attÄla tiek izÅemta visa liekÄ informÄcija. Izmantojot DCT, jÄsaprot, vai Å”is bloks (8Ć8) apraksta vienkÄrÅ”u attÄla daļu: debesis, sienas; vai tam ir sarežģīta struktÅ«ra (mati, simboli utt.). LoÄ£iski, ka 64 krÄsÄs lÄ«dzÄ«gi pikseļi var tikt aprakstÄ«ti tikai ar 1, jo bloka izmÄrs jau ir zinÄms. LÅ«k, jums ir saspieÅ”ana: 64 uz 1.
DCT pÄrvÄrÅ” bloku spektrÄ, un tur, kur rÄdÄ«jumi strauji mainÄs, koeficients kļūst pozitÄ«vs, un jo izteiktÄka ir pÄreja, jo augstÄka bÅ«s izeja. Tur, kur koeficients ir augstÄks, attÄlÄ ir skaidras pÄrejas krÄsas un spilgtuma maiÅÄ, bet tur, kur tas ir zemÄks ā vÄjas (plÅ«stoÅ”as) komponentu YCbCr maiÅas.
KvantisÄcija
Å eit jau tiek piemÄroti saspieÅ”anas iestatÄ«jumi. Katrs no koeficientiem katrÄ no 8Ć8 matÄrijÄm tiek dalÄ«ts ar noteiktu skaitli. Ja pÄc visÄm izmaiÅÄm attÄla kvalitÄti vairÄk nesamazinÄsiet, dalÄ«tÄjam jÄbÅ«t vienotam. Ja jums svarÄ«gÄka ir Ŕīs fotogrÄfijas atmiÅas ietilpÄ«ba, tad dalÄ«tÄjs bÅ«s lielÄks par 1, un rezultÄts tiek noapaļots. TÄdÄļ bieži pÄc noapaļoÅ”anas iznÄk daudz nulles.
KvantisÄciju veic, lai radÄ«tu iespÄju vÄl lielÄkai saspieÅ”anai. LÅ«k, kÄ tas izskatÄs uz kvantisÄcijas grafika y = sin(x):

Saspiest
Vispirms ejam cauri matricei pa zig-zag:

IegÅ«stam viendimensiju masÄ«vu ar skaitļiem. MÄs redzam, ka tajÄ ir daudz nulles, ko var novÄrst. TÄdÄļ vietÄ, lai uzrakstÄ«tu secÄ«bu, kurÄ ir daudz nulles, mÄs ierakstÄm 1 nulli un pÄc tam skaitli, kas norÄda to skaitu secÄ«bÄ. TÄdÄjÄdi var samazinÄt lÄ«dz 1/3 visa masÄ«va lieluma. PÄc tam vienkÄrÅ”i saspiežam Å”o masÄ«vu, izmantojot Huffman metodi, un ierakstÄm to paÅ”Ä failÄ.
Kur tiek izmantots
Visur. TÄpat kÄ PNG, JPEG tiek izmantots fotokamerÄs, operÄtÄjsistÄmÄs (kÄ uzÅÄmumu logotipi, lietotÅu ikonas, sÄ«ktÄli) un visÄs iespÄjamÄs jomÄs, kur ir nepiecieÅ”ams efektÄ«vi glabÄt attÄlus.
Izvade
PaÅ”reizÄjÄs zinÄÅ”anas par JPEG ir vÄrtÄ«gas tikai izglÄ«tÄ«bas vajadzÄ«bÄm, jo tas jau ir visur iekļauts un optimizÄts lielÄm cilvÄku grupÄm, bet zinÄtnes granÄ«ts tomÄr ir gardÅ”.
Avoti
Avots: habr.com
