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
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 -
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) -
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:
kokkusurumine
Kõigepealt läbime maatriksi siksakilise mustriga:
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
Allikas: www.habr.com