JPEG. Kompresijas algoritms

Sveiks atkal! Šo rakstu atradu 2019. gada maijā. Šis ir turpinājums rakstu sērijai par WAVE un JPEG vispirms. Šajā publikācijā būs iekļauta informācija par attēla kodēšanas algoritmu un pašu formātu kopumā.

Šķipsniņa vēstures

Ēdamkarote Wikipedia raksta:

JPEG (Apvienotā fotogrāfiju ekspertu grupa) ir viens no populārākajiem rastra grafikas formātiem, ko izmanto fotogrāfiju un līdzīgu attēlu glabāšanai.

Šo standartu 1991. gadā izstrādāja Apvienotā fotogrāfiju ekspertu grupa efektīvai attēlu saspiešanai.

Kā attēli pāriet no neapstrādātiem uz JPEG?

Daži cilvēki domā, ka JPEG attēli ir neapstrādāti dati, kas saspiesti, izmantojot Hafmena metodi, taču tā nav taisnība. Pirms kontroles saspiešanas dati tiek pārvietoti tālu.

Pirmkārt, krāsu modelis tiek mainīts no RGB uz YCbCr. Tam ir pat īpašs algoritms - šeit. Y netiek aiztikts, jo tas ir atbildīgs par spilgtumu, un tā izmaiņas būs pamanāmas.

Pirmā lieta, kas jādara ar attēlu, ir "retināšana" (apakšizlase). To ir viegli saprast: tiek ņemts 2x2 pikseļu masīvs, pēc tam tiek ņemti Cb un Cr - katras YCbCr komponenta vidējās vērtības šajos 4 pikseļos. Tātad, mēs uzvarējām 6 baitus, 4 Y, 4 Cb, 4 Cr vietā mēs saņēmām 4 Y un to pašu Cb un Cr katram no tiem (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6). Pat 2x2 mērogā kompresija ar zaudējumiem ar saspiešanas pakāpi 2:1 izklausās stabili. Tas attiecas uz visu attēlu. Un tā - viņi nokrita uz pusi izmēra. Un mēs varam izmantot šo tehniku, pateicoties mūsu krāsu uztverei. Cilvēks viegli pamanīs spilgtuma, bet ne krāsas atšķirību, ja tā tiks aprēķināta vidēji nelielam pikseļu blokam. Retināšanu var veikt arī līnijā, 4 pikseļi horizontāli un vertikāli. Pirmā iespēja tiek izmantota biežāk. Ja attēla kvalitāte ir svarīga, tad decimācija netiek veikta vispār.
Vizuāla retināšanas ilustrācija (Habrs man neļāva ievietot gifu) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Galvenā sagatavošanas daļa

Dkp

Tagad nāk grūtākā un nepieciešamākā daļa. Viss attēls ir sadalīts 8x8 blokos (aizpildījums tiek izmantots, ja izšķirtspēja nav bloka puses daudzkārtņa).

Tagad piemērojiet katram blokam DCT (diskrētā kosinusa transformācija). Šajā daļā no bildes tiek izņemts viss nevajadzīgais. Izmantojot DCT, jums ir jāsaprot, vai dotais bloks (8×8) apraksta kādu monotonu attēla daļu: debesis, sienu; vai arī tajā ir sarežģīta struktūra (mati, simboli utt.). Loģiski, ka 64 līdzīgas krāsas pikseļus var raksturot tikai ar 1, jo bloka izmērs jau ir zināms. Tik daudz par saspiešanu: 64 pret 1.

DCT pārvērš bloku par spektru, un, ja rādījumi krasi mainās, koeficients kļūst pozitīvs, un jo asāka pāreja, jo lielāka būs izeja. Kur koeficients ir lielāks, attēlā redzamas skaidras krāsu un spilgtuma pārejas, kur zemāks - vājas (gludas) izmaiņas YCbCr komponentu vērtībās blokā.

Kvantēšana

Šeit jau ir lietoti saspiešanas iestatījumi. Katrs no koeficientiem katrā no 8x8 matricām ir dalīts ar noteiktu skaitli. Ja pēc visām tā modifikācijām attēla kvalitāte nesamazināsies, tad dalītājam jābūt vienam. Ja šī fotoattēla aizņemtā atmiņa jums ir svarīgāka, dalītājs būs lielāks par 1, un koeficients tiks noapaļots. Izrādās, ka pēc noapaļošanas jūs bieži nonākat pie daudzām nullēm.

Kvantēšana tiek veikta, lai radītu vēl lielākas saspiešanas iespēju. Lūk, kā tas izskatās, izmantojot diagrammas y = sin(x) kvantēšanas piemēru:

JPEG. Kompresijas algoritms

saspiešana

Vispirms mēs izejam cauri matricai zig-zag veidā:

JPEG. Kompresijas algoritms

Mēs iegūstam viendimensionālu masīvu ar skaitļiem. Mēs redzam, ka tajā ir daudz nulles, tās var noņemt. Lai to izdarītu, daudzu nulles secības vietā mēs ievadām 1 nulli un pēc tās skaitli, kas norāda to numuru secībā. Tādā veidā jūs varat atiestatīt uz 1/3 no visa masīva lieluma. Un tad mēs vienkārši saspiežam šo masīvu, izmantojot Huffman metodi, un ierakstām to pašā failā.

Ja izmanto

Visur. Tāpat kā PNG, arī JPEG tiek izmantots kamerās, operētājsistēmās (kā uzņēmuma logotipi, lietojumprogrammu ikonas, sīktēli) un visās iespējamās vietās, kur attēli ir efektīvi jāuzglabā.

secinājums

Šobrīd zināšanas par JPEG tagad ir vērtīgas tikai izglītojošiem nolūkiem, jo ​​tās jau visur ir iebūvētas un optimizētas lielas cilvēku grupas, bet zinātnes granīts tomēr garšo.

avoti

Raksts par YCbCr Vikipēdijā
Wikipedia raksts par JPEG
Mazliet par PrEP no Pikabu ieraksta
Wikipedia raksts par PrEP

Avots: www.habr.com

Pievieno komentāru