JPEG. SaspieŔanas algoritms.

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 pirmā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 — Å”eit. 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) — https://i.ibb.co/Rg5Th9H/150953010617579181.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):

JPEG. SaspieŔanas algoritms.

Saspiest

Vispirms ejam cauri matricei pa zig-zag:

JPEG. SaspieŔanas algoritms.

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

Raksts par YCbCr Vikipēdijā
Raksts par JPEG Vikipēdijā
Mazliet par DCT no Pikabu posta
Raksts par DCT Vikipēdijā

Avots: habr.com

Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster