JPEG. Tihendamisalgoritm

Tere jÀlle! Leidsin selle artikli, mis on kirjutatud 2019. aasta maikuus. See on jÀtk seeriale artikleid WAVE ja JPEG kohta, siit esimene. See postitus sisaldab teavet pildikodeerimise algoritmi ja formaadi enda kohta.

Veidi ajalugu

SupilusikatÀis teavet Vikipeediast:

JPEG (Joint Photographic Experts Group) on ĂŒks populaarsemaid rasterskeemide formaate, mida kasutatakse fotode ja sarnaste piltide salvestamiseks.

See standard loodi juba 1991. aastal fotograafiaekspertide ĂŒhenduse poolt piltide efektiivseks tihendamiseks.

Millise tee lÀbib pilt toorversioonist JPEG-iks

MÔned arvavad, et JPEG-pildid on Huffmani meetodil tihendatud toored andmed, kuid see ei ole tÔsi. Andmed lÀbivad enne tihendamist pika tee.

Esiteks muudetakse vÀrvimudel RGB-st YCbCr-ks. Selle jaoks on isegi spetsiaalne algoritm - siit. Y-d ei muudeta, kuna see vastutab heleduse eest ja selle muutmine oleks mÀrgatav.

Esimene asi, mida pildiga tehakse, on „kujuldamine“ (subsampling). On seda lihtne mĂ”ista: vĂ”etakse 2x2 pikslite massiiv, seejĂ€rel vĂ”etakse Cb ja Cr — iga YCbCr komponendi keskmised vÀÀrtused nende 4 piksli kohta. Ning nii, me saime 6 baiti, asemel et 4 Y, 4 Cb, 4 Cr, saime 4 Y ja igale neist ĂŒhesugused Cb ja Cr (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 — 6 = 6). Isegi 2×2 ulatuses kĂ”lab kaotusega tihendamine suhtes 2:1 muljetavaldavalt. Seda rakendatakse kogu pildile. Nii — viskasime pool ruumi minema. Ja sellist tehnikat saame kasutada tĂ€nu meie vĂ€rvitajumisele. Inimene mĂ€rkab kergesti heleduse erinevust, kuid mitte vĂ€rvi, kui see on vĂ€ikeses pikslite plokis keskmistatud. Samuti vĂ”ib vahe tegemine toimuda ridades, 4 pikslit horisontaalselt ja vertikaalselt. Esimene variant on sagedamini kohane. Kui pildi kvaliteet on oluline, siis vahe tegemist ei tehta ĂŒldse.
Illustratiivne nĂ€ide vahe tegemisest (Habr ei lubanud gif'i sisestada) — https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Valmistamise peamine osa

DCT

NĂŒĂŒd kĂ”ige keerulisem ja vajalik osa. Kogu pilt jagatakse 8x8 plokkideks (kasutatakse tĂ€itmist juhul, kui resolutsioon ei ole ploki kĂŒljega jagatavad).

NĂŒĂŒd rakendatakse iga ploki peale DCT (Diskreetne kosinusmuundamine). Selles osas eemaldatakse pildist kĂ”ik ĂŒleliigne. DCT kasutamisel on oluline aru saada, kas antud plokk (8×8) kirjeldab mingit monotoonset osa pildist: taevast, seintest; vĂ”i sisaldab see keerulist struktuuri (juuksed, sĂŒmbolid jne). On mĂ”istlik, et 64 sarnase vĂ€rviga pikslit saab kirjeldada ĂŒhega, kuna ploki suurus on juba teada. See on compressioon: 64 : 1.

DCT muundab ploki spektriks, ja seal, kus nĂ€idud jĂ€rsult muutuvad, muutub koefitsient positiivseks, ning mida jĂ€rsem on ĂŒleminek, seda kĂ”rgem on vĂ€ljund. Seal, kus koefitsient on kĂ”rgem, on pildil selged ĂŒleminekud vĂ€rvuses ja heleduses, kus see on madalam - nĂ”rgad (sujuvad) muutused YCbCr komponentide suurustes plokis.

Kvantimine

Siin rakendatakse juba kokkusurumise seadeid. Iga koefitsient igas 8×8 maatriksis jagatakse kindla arvuga. Kui pildi kvaliteeti pĂ€rast kĂ”iki selle modifikatsioone enam ei vĂ€hendata, siis peaks jagaja olema ĂŒks. Kui teile on tĂ€htsam see, kui palju mĂ€lu see foto kasutab, siis jagaja on suurem kui 1, ning jagatis ĂŒmardatakse. Nii juhtub, et pĂ€rast ĂŒmardamist tekib sageli palju nullide.

Kvantimine vÔimaldab veelgi suuremat kokkusurumist. Nii see vÀlja nÀeb, kui vÔtame nÀiteks kvantimise y = sin(x) graafiku:

JPEG. Tihendamisalgoritm

Kompresseerimine

Esiteks lÀheme lÀbi maatriksi zick-zack'i viisiliselt:

JPEG. Tihendamisalgoritm

Saame ĂŒhemÔÔtmelise massi numbrid. Nagu nĂ€eme, on seal palju nullide jĂ€rjestusi, mida saab kĂ”rvaldada. Selleks asendame jĂ€rjestuse mitme nulliga ĂŒhe nulliga ja pĂ€rast seda numbriga, mis tĂ€histab nende kogust jĂ€rjestuses. Nii saame kogu massi vĂ€hendada kuni 1/3 originaalsuurusest. Edasi surume selle massi Hufmani meetodil ja salvestame juba faili.

Kus kasutatakse

Igal pool. Nagu PNG, kasutatakse JPEG-i ka kaamerates, opsĂŒsteemides (nĂ€iteks ettevĂ”tte logode, rakenduste ikoonide, thumbnail'ide jaoks) ning kĂ”igis vĂ”imalikes valdkondades, kus on vaja tĂ”husalt pilte salvestada.

KokkuvÔte

Praegu on teadmised JPEG-ist vÀÀrtuslikud vaid hariduslikel eesmÀrkidel, kuna see on juba igale poole integreeritud ja optimeeritud suurte inimgruppide poolt, kuid teaduse graniit on siiski ahvatlev.

Allikad

Artikkel YCbCr kohta Vikipeedias
Artikkel JPEG kohta Vikipeedias
Veidi DCT-st Pikabust postist
Artikkel DCT kohta Vikipeedias

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster