JPEG. Tihendusalgoritm

Tere jälle! Leidsin selle artikli, mis on kirjutatud 2019. aasta mais. See on WAVE-i ja JPEG-i käsitlevate artiklite seeria jätk esimene. See väljaanne sisaldab teavet pildi kodeerimisalgoritmi ja vormingu kohta tervikuna.

Natuke ajalugu

Supilusikatäis Wikipedia artiklit:

JPEG (Joint Photographic Experts Group) on üks populaarsemaid rastergraafika vorminguid, mida kasutatakse fotode ja sarnaste piltide salvestamiseks.

Selle standardi töötas välja Joint Photographic Experts Group 1991. aastal tõhusaks piltide tihendamiseks.

Kuidas lähevad pildid töötlemata kujult JPEG-vormingusse?

Mõned inimesed arvavad, et JPEG-pildid on Huffmani meetodil tihendatud töötlemata andmed, kuid see pole tõsi. Enne kontrolli tihendamist liiguvad andmed kaugele.

Esiteks muudetakse värvimudel RGB-lt YCbCr-le. Selle jaoks on isegi spetsiaalne algoritm - siin. Y-d ei puudutata, kuna see vastutab heleduse eest ja selle muutus on märgatav.

Esimene asi, mida pildiga teha, on "hõrenemine" (alavalim). Seda on lihtne mõista: võetakse 2x2 pikslite massiiv, seejärel võetakse Cb ja Cr - nende 4 piksli iga YCbCr komponendi keskmised väärtused. Niisiis, võitsime 6 baiti, 4 Y, 4 Cb, 4 Cr asemel saime 4 Y ja igaühe jaoks samad Cb ja Cr (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6). Isegi skaalal 2x2 kõlab kadudeta pakkimine tihendussuhtega 2:1 kindlalt. See kehtib kogu pildi kohta. Ja nii - nad langesid poole võrra. Ja tänu oma värvitajule saame seda tehnikat kasutada. Inimene märkab kergesti erinevust heleduses, kuid mitte värvides, kui see on keskmise pikslite ploki kohta keskmistatud. Harvendust saab teha ka jooneliselt, 4 pikslit horisontaalselt ja vertikaalselt. Esimest võimalust kasutatakse sagedamini. Kui pildi kvaliteet on oluline, siis detsimeerimist üldse ei tehta.
Harvendamise visuaalne illustratsioon (Habr ei lubanud mul gifi sisestada) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Ettevalmistuse põhiosa

Dkp

Nüüd tuleb kõige raskem ja vajalikum osa. Kogu pilt on jagatud 8x8 plokkideks (täitmist kasutatakse juhul, kui eraldusvõime ei ole plokipoolse kordne).

Nüüd rakendage igale plokile DCT (diskreetne koosinusteisendus). Selles osas on kõik ebavajalik pildilt välja võetud. DCT-d kasutades peate mõistma, kas antud plokk (8×8) kirjeldab kujutise mõnda monotoonset osa: taevast, seina; või sisaldab keerulist struktuuri (juuksed, sümbolid jne). On loogiline, et 64 sarnast värvi pikslit saab kirjeldada vaid 1-ga, sest ploki suurus on juba teada. Niipalju siis tihendamisest: 64:1.

DCT muudab ploki spektriks ja seal, kus näidud järsult muutuvad, muutub koefitsient positiivseks ja mida teravam on üleminek, seda suurem on väljund. Kui koefitsient on suurem, on pildil selged värvide ja heleduse üleminekud, kus see on madalam - nõrgad (sujuvad) muutused ploki YCbCr komponentide väärtustes.

Kvantimine

Tihendusseaded on siin juba rakendatud. Iga 8x8 maatriksi koefitsient jagatakse teatud arvuga. Kui te pärast kõiki selle muudatusi pildikvaliteeti ei vähenda, peaks jagaja olema üks. Kui selle foto hõivatud mälu on teile olulisem, on jagaja suurem kui 1 ja jagatis ümardatakse. Selgub, et pärast ümardamist on sageli palju nulle.

Kvantimist tehakse selleks, et luua võimalus veelgi suuremaks tihendamiseks. Graafi y = sin(x) kvantimise näitel näeb see välja järgmine:

JPEG. Tihendusalgoritm

kokkusurumine

Kõigepealt läbime maatriksi siksakilise mustriga:

JPEG. Tihendusalgoritm

Saame arvudega ühemõõtmelise massiivi. Näeme, et selles on palju nulle, neid saab eemaldada. Selleks sisestame paljude nullide jada asemel 1 nulli ja selle järele numbri, mis näitab nende arvu jadas. Nii saate lähtestada 1/3 kogu massiivi suurusest. Ja siis me lihtsalt tihendame selle massiivi Huffmani meetodil ja kirjutame selle faili endasse.

Kus kasutatakse

Igal pool. Sarnaselt PNG-ga kasutatakse JPEG-vormingut kaamerates, operatsioonisüsteemides (ettevõtte logodena, rakenduste ikoonidena, pisipiltidena) ja kõigis võimalikes piirkondades, kus on vaja pilte tõhusalt salvestada.

Väljund

Praegu on teadmised JPEG-i kohta nüüd väärtuslikud vaid hariduslikel eesmärkidel, sest need on juba kõikjale sisse ehitatud ja suurte inimgruppide poolt optimeeritud, kuid teaduse graniit on siiski maitsev.

allikatest

Artikkel YCbCr kohta Vikipeedias
Wikipedia artikkel JPEG-vormingus
Natuke PrEP-ist Pikabu postitusest
Wikipedia artikkel PrEP-i kohta

Allikas: www.habr.com

Lisa kommentaar