JPEG-formaadiga pildid on meie digitaalses elus igal pool, kuid selle teadlikkuse katte taga peituvad algoritmid, mis kĂ”rvaldavad detailid, mida inimsilmad ei suuda tajuda. Tulemus on ÀÀrmiselt kĂ”rge visuaalne kvaliteet vĂ€ikseima failisuuruse juures â kuid kuidas see tĂ€pselt toimib? Vaatame, mida meie silmad tĂ”eliselt ei nĂ€e!

On lihtne vĂ”tta enesestmĂ”istetavalt vĂ”imalust saata sĂ”brale foto, muretsedes, millist seadet, brauserit vĂ”i operatsioonisĂŒsteemi ta kasutab â kuid nii ei olnud see alati. 1980. aastate alguseks oskasid arvutid salvestada ja kuvada digitaalseid pilte, kuid parima lĂ€henemise osas oli palju konkureerivaid ideid. Ei saanud lihtsalt ĂŒht pildifaili ĂŒhest arvutist teise saata ja loota, et kĂ”ik töötab.
Selle probleemi lahendamiseks kogunes 1986. aastal ekspertide komitee ĂŒle kogu maailma nimega â» (Ăhine fotokodeerimise ekspertide grupp, JPEG) asutati Rahvusvahelise standardimise organisatsiooni (ISO) ja Rahvusvahelise elektrotehnilise komisjoni (IEC) koostöös â kahe rahvusvahelise standardimisorganisatsiooni peakorter asub Genfis (Ć veits).
JPEG-nimeliste inimeste rĂŒhm lĂ”i 1992. aastal digitaalsete piltide tihendamise standardi JPEG. IgaĂŒks, kes on internetti kasutanud, on tĂ”enĂ€oliselt kokku puutunud JPEG-kodeeringuga piltidega. See on kĂ”ige levinum viis piltide kodeerimiseks, saatmiseks ja salvestamiseks. Alates veebi lehtedest kuni e-kirjade ja sotsiaalmeediaini kasutatakse JPEG-i miljardeid kordi pĂ€evas â praktiliselt igal korral, kui vaatame pilti veebis vĂ”i saadame selle. Ilma JPEG-ita oleks veeb vĂ€hem vĂ€rviline, aeglasem ja tĂ”enĂ€oliselt vĂ€hem kasse puudutavaid fotosid sisaldav!
See artikkel rÀÀgib JPEG kujutise dekodeerimisest. TeisisÔnu, sellest, mida on vaja tihendatud andmete, mis arvutis hoitakse, kuvamiseks ekraanil. Selle teemaga tasub tutvuda mitte ainult sellepÀrast, et see on oluline arusaamiseks tehnoloogiast, mida iga pÀev kasutame, vaid ka seetÔttu, et tihendustasemeid avades saame paremini aru tajumisest ja nÀgemisest ning sellest, millistele detailidele meie silmad kÔige rohkem reageerivad.
Lisaks on sellisel moel piltidega mÀngimine vÀga huvitav.

Vaadates JPEG sisse
Arvutis hoitakse kĂ”ike kui jĂ€rjestikku binaarnumbrid. Tavaliselt koondatakse need bitid, nullid ja ĂŒhed, kaheksa kaupa, moodustades baitidele. Kui avad JPEG kujutise arvutis, peab midagi (brauser, operatsioonisĂŒsteem vĂ”i midagi muud) dekodeerima baitid, taastades algse kujutise vĂ€rvide loendina, mida saab kuvada.
Kui saad alla selle armas ja avad selle tekstiredaktoris, siis nÀed sa hulka seosetuks mÀrke.

Siin kasutan Notepad++ faili sisu uurimiseks, kuna tavalised tekstiredaktorid, nagu Windowsi Notepad, rikuvad binaarfaili pÀrast salvestamist, ja see prÔhku ei vasta JPEG formaadile.
Avades pildi tekstiredaktoris, segate arvuti segadusse, tÀpselt nagu segate oma aju, kui hÔÔrute silmi ja hakkate nÀgema vÀrvilisi laike!
Need laigud, mida nĂ€ete, tuntakse nimena , ja need ei ole valgusstimuli mĂ”ju vĂ”i mĂ”istuse tekitatud hallutsinatsioonide tulemus. Need tekivad, kuna teie aju arvab, et kĂ”ik elektrilised signaalid silmanĂ€rvides edastavad teavet valguse kohta. Aju peab selliseid oletusi tegema, kuna ei saa kuidagi teada, kas signaal on heli, nĂ€gemine vĂ”i midagi muud. KĂ”ik nĂ€rvid kehas edastavad tĂ€iesti samu elektrilisi impulsse. Surudes silmadele, saadate mitte-visuaalseid signaale, kuid aktiveerite silma retseptoreid, mida teie aju tĂ”lgendab â antud juhul vale â kui midagi, mida nĂ€ha. Te olete sĂ”na otseses mĂ”ttes suuteline nĂ€gema survet!
Naljakas on mĂ”elda, kui sarnased arvutid on ajule, kuid see on ka kasulik analoogia, mis illustreerib, kui palju andmete tĂ€hendus â olgu need edastatud nĂ€rvide kaudu kehast vĂ”i salvestatud arvutisse â sĂ”ltub nende tĂ”lgendusest. KĂ”ik binaarsed andmed koosnevad nullidest ja ĂŒhetistest, pĂ”hikomponendid, mis suudavad edastada igasugust teavet. Teie arvuti aimab sageli, kuidas neid tĂ”lgendada, kasutades vihjeid, nĂ€iteks faililaiendeid. Ent praegu sunnime me seda tĂ”lgendama neid tekstina, kuna just seda eeldab tekstiredaktor.
Kuidas JPEG'i dekodeerimiseks, peame nĂ€gema algseid signaale â binaarsete andmete. Seda saab teha heksadesimaalse redigeerija abil vĂ”i otse ! Seal on pilt, mille kĂ”rval on tekstivĂ€ljas kĂ”ik selle baitide kokkuvĂ”tte (ilma pĂ€iseta), esitatuna kĂŒmnendsĂŒsteemis. Saate neid muuta ja skript kodeerib ja esitab uue pildi jooksvalt.

Selle redigeerijaga mÀngides on vÔimalik palju avastada. NÀiteks, kas oskate öelda, millises jÀrjekorras pikslid salvestatakse?
Selles nĂ€ites on kummaline see, et mĂ”nede numbrite muutmine ei mĂ”juta pilti ĂŒldse, aga kui nĂ€iteks asendate numbri 17 nulliga esimeses reas, siis pilt rikneb tĂ€ielikult!

Teised muudatused, nÀiteks 1988. rea 7 asendamine numbriga 254, muudab vÀrvi, kuid ainult jÀrgnevaid pikslit.

VĂ”ib-olla on kĂ”ige kummalisem see, et mĂ”ned numbrid muudavad mitte ainult vĂ€rvi, vaid ka pildi kuju. Muutke 12. reas 70 numbriks 2 ja vaadake pildi ĂŒlemist rida, et nĂ€ha, mida ma mĂ”tlen.

Ja olenemata sellest, millist JPEG pilti te kasutate, leiate redigeerimise kĂ€igus alati need mĂŒstilised malemustrid.
Redigeerija kaudu mĂ€ngides on raske mĂ”ista, kuidas pilt nende baitide seast taastatakse, kuna JPEG kompressioon koosneb kolmest erinevast tehnoloogiast, mis rakendatakse jĂ€rjestikku tasemetel. Uurime igaĂŒht neist eraldi, et avada meie ees ilmne mĂŒstiline kĂ€itumine.
Kolm JPEG kompressiooni taset:
- .
- .
- , ja
Kujutise tihendamise ulatust silmas pidades, pöörake tĂ€helepanu, et ĂŒlaltoodud pilt sisaldab 79 819 numbrit, mis tĂ€hendab umbes 79 KB. Kui me oleksime salvestanud selle tihendamata, oleks iga piksel nĂ”udnud kolme numbrit - punase, rohelise ja sinise komponendi jaoks. See oleks kokku andnud 917 700 numbrit, vĂ”i umbes 917 KB. SeetĂ”ttu vĂ€henes JPEG tihenduse tulemuslik fail rohkem kui 10 korda!
Tegelikult on seda pilti vÔimalik veelgi rohkem tihendada. Allpool on kaks pilti kÔrvuti - paremal olev foto on tihendatud 16 KB-ni, mis on 57 korda vÀhem kui tihendamata versioon!

Kui tÀhelepanelikult vaadata, on nÀha, et need pildid ei ole identsed. MÔlemad on JPEG tihendusega pildid, kuid parempoolne on mahtusid palju vÀiksem. Samuti nÀeb see natuke halvem vÀlja (vaadake taustavÀrvide ruute). SeetÔttu kutsutakse JPEG tihendust sageli ka kadudega tihendamiseks; tihendamise protsessis muutub pilt ja kaotab teatud detaile.
1. VĂ€rvisubdiskreetimine
Siin on pilt, millel on rakendatud ainult esimest tihendustaset.

(Interaktiivne versioon â sisse artiklid). Ăhe numbri eemaldamine rikub kĂ”ik vĂ€rvid. Kuid kui eemaldada just kuus numbrit, ei mĂ”juta see praktiliselt pilti.
NĂŒĂŒd on numbreid veidi lihtsam deĆĄifreerida. See on peaaegu lihtne vĂ€rvide loend, kus iga bait muudab tĂ€pselt ĂŒhe piksli, kuid samas on see juba kaks korda vĂ€iksem kui tihendamata kujutis (mis vĂ”taks sellises vĂ€hendatud suuruses ligi 300 Kb). Kas arvate, miks?
On nÀha, et need numbrid ei tÀhista standardseid punase, rohelise ja sinise komponente, sest kui asendada kÔik numbrid nulldega, saame rohelise pildi (mitte valge).

See on sellepÀrast, et need baitid tÀhistavad Y (heleduse),

Cb (suhteline sinisus),

ja Cr (suhteline punasus) pildi kohta.

Miks mitte kasutada RGB-d? LĂ”ppude lĂ”puks töötab enamik kaasaegseid ekraane just nii. Teie monitor vĂ”ib kuvada mis tahes vĂ€rvi, sealhulgas punast, rohelist ja sinist erineva intensiivsusega iga pikseli jaoks. Valge saadakse, kui kĂ”ik kolm on tĂ€ielikult heledaks seatud, ja must kui need on kĂ”ik vĂ€lja lĂŒlitatud.

See on samuti vĂ€ga sarnane inimese silma tööle. Meie silmade vĂ€rviretseptoreid nimetatakse ««, mis jagunevad kolme tĂŒĂŒbi vahel, millest igaĂŒhel on suurem tundlikkus kas punase, rohelise vĂ”i sinise vĂ€rvi suhtes [S-tĂŒĂŒpi koobaste tundlikkus on violett-sinises (S inglise keeles Short â lĂŒhilaine spekter), M-tĂŒĂŒpi â roheliselt-kollases (M inglise keeles Medium â keskmise laine), ja L-tĂŒĂŒpi â kollaselt-punasel (L inglise keeles Long â pikalaine) spektri osades. Nende kolme tĂŒĂŒpi koobaste (ja pulkade, mis on tundlikud smaragdrohelise spektri osas) olemasolu annab inimesele vĂ€rvitĂ€it nĂ€gemist. / MĂ€rkus tĂ”lkijalt]. , teine meie silmade fotoretseptorite tĂŒĂŒp, on vĂ”imeline tabama muutusi heleduses, kuid on palju tundlikum vĂ€rvi suhtes. Meie silmades on umbes 120 miljonit pulka ja vaid 6 miljonit koobast.
SeetĂ”ttu mĂ€rkavad meie silmad palju paremini ereduse muutusi kui vĂ€rvi muutusi. Kui eraldada vĂ€rv eredusest, on vĂ”imalik eemaldada veidi vĂ€rvi, ilma et keegi midagi mĂ€rkaks. VĂ€rvisubdiskreetimine on protsess, kus pildi vĂ€rvikomponente esitatakse madalama lahutusvĂ”imega vĂ”rreldes ereduse komponentidega. Eelnevas nĂ€ites on igal piksel ĂŒks komponent Y, ja igal nelja pikseli grupil on tĂ€pselt ĂŒks komponent Cb ja ĂŒks Cr. SeetĂ”ttu sisaldab pilt neli korda vĂ€hem vĂ€rviinfot kui originaal.
VĂ€rviruum YCbCr ei kasutata ainult JPEG-is. Selle leiutas algselt 1938. aastal teleĂŒlekannete jaoks. KĂ”igil ei ole vĂ€rvilist telerit, seega vĂ”imaldas vĂ€rvi ja ereduse eraldamine kĂ”igil sama signaali vastu vĂ”tta, ja vĂ€rvituks jÀÀvad telerid kasutasid lihtsalt ainult ereduse komponenti.
SeetĂ”ttu toob ĂŒhe numbri eemaldamine redigeerijast kaasa vĂ€rvide tĂ€ieliku rikkumise. Komponendid salvestatakse kujul Y Y Y Y Cb Cr (tegelikult ei pea see olema sellises jĂ€rjekorras â salvestamise jĂ€rjekord mÀÀratakse faili pĂ€ises). Esimese numbri eemaldamine pĂ”hjustab, et esimene Cb vÀÀrtus tĂ”lgendatakse kui Y, Cr kui Cb, ja see loob dominos efekti, mis muudab kĂ”iki pildi vĂ€rve.
JPEG spetsifikatsioon ei nÔua YCbCr kasutamist. Kuid enamikus failides kasutatakse seda, kuna see annab pÀrast alamsubdiscretiseerimist parema pildikvaliteedi vÔrreldes RGB-ga. Kuid teil ei pea minu sÔnasse usaldama. Vaadake ise allolevas tabelis, milline on iga komponent alamsubdiscretiseerimine nii RGB kui ka YCbCr puhul.

(Interaktiivne versioon â sisse artiklid).
Sinise eemaldamine ei ole nii mÀrgatav kui punase vÔi rohelise. KÔik see tuleneb sellest, et teie silmades on kuus miljonit koonusrakku, millest umbes 64% on punasele, 32% rohelisele ja 2% sinisele tundlikud.
Y komponendi alamsubdiscretiseerimine (vasakul alumises nurgas) on kÔige paremini nÀhtav. Isegi vÀikesed muutused on mÀrgatavad.
Piltide konverteerimine RGB-st YCbCr-ks ei vĂ€henda faili suurust, kuid lihtsustab vĂ€hem nĂ€htavate ĂŒksikasjade leidmist, mille saab eemaldada. Kaotava kompressioon toimub teises etapis. Selle aluseks on idee esitada andmeid kompaktsemal viisil.
2. Diskreetne kosinuse transformatsioon ja diskreetimine
See kompressiooni tase mÀÀrab suuresti JPEG-i olemuse. PÀrast vÀrvide konverteerimist YCbCr-ks kompressitakse komponente eraldi, seega saame keskenduda ainult Y-komponendile. Siin on Y-komponendi baitide kuju pÀrast selle taseme rakendamist.

(Interaktiivne versioon â sisse artiklid). Interaktiivses versioonis klĂ”psamine pikslil kerib toimetajat reale, mis seda tĂ€histab. Proovige eemaldada numbreid lĂ”pus vĂ”i lisada teatud numbrile paar nulli.
Esmapilgul nĂ€ib, et see on vĂ€ga halb kompressioon. Pildis on 100 000 pikslit ja nende heledust (Y-komponendid) tĂ€histamiseks on vaja 102 400 numbrit â see on halvem kui kui mitte midagi kokku suruda!
Kuid pidage meeles, et enamik neist numbritest on nullid. Veelgi enam, kÔik need nullid ridade lÔpus saab eemaldada, muutes pilti mitte. JÀrele jÀÀb umbes 26 000 numbrit, mis on peaaegu neli korda vÀhem!
Sellel tasemel asub malemustrite saladus. Erinevalt teistest nÀhtud effektidest, ei ole nende mustrite ilmumine viga. Need on kogu pildi ehitusplokid. Igas redigeerija reas on tÀpselt 64 numbrit, diskreetse kosinustransformatsiooni (DCT) koefitsientidega, mis vastavad 64 ainulaadse mustri intensiivsusele.
Need mustrid moodustuvad koos kosinuse graafikuga. Siin on mÔned neist:

8 64 koefitsiendist
Allpool on pilt, mis nÀitab kÔiki 64 mustrit.

(Interaktiivne versioon â sisse artiklid).
Need mustrid on erilised, kuna need moodustavad 8x8 suuruste piltide aluse. Kui te pole tuttavad lineaarsest algebrast, siis see tÀhendab, et igasugune 8x8 suurune pilt on saadud nende 64 mustri pÔhjal. DCT on protsess, kus pildid jagatakse 8x8 plokkideks ja iga plokk muudetakse nende 64 koefitsiendi kombinatsiooniks.
Tundub, et iga pilt saab koosneda 64 kindlast mustrist, on nagu maagia. Kuid see on sama, mis öelda, et iga maa punkt vĂ”ib olla kirjeldatud kahe numbri â laiuskraadi ja pikkuskraadi [poolkerade tĂ€histamisega / tĂ”lkija mĂ€rkus]. Me arvame sageli, et maa pind on kahemÔÔtmeline, seega vajame vaid kahte numbrit. 8x8 pilt sisaldab 64 mÔÔdet, seega vajame 64 numbrit.
Kuidas see meid tihendamise mÔttes aitab, pole selge. Kui meil on vaja 64 numbrit, et esindada 8x8 pilti, miks peaks see meetod olema parem kui lihtsalt salvestada 64 heleduskomponenti? Me teeme seda sama pÔhjusega, miks muutsime kolm RGB numbrit kolmeks YCbCr numbriks: see vÔimaldab meil eemaldada vaevu mÀrgatavaid detaile.
Raske on nÀha, milliseid detaile sel etapil eemaldatakse, kuna JPEG rakendab DCT 8x8 plokkidele. Kuid midagi ei takista meid selle rakendamisest kogu pildile. Nii nÀeb DCT vÀlja Y komponendi rakendamisel kogu pildile:

LĂ”pus saab eemaldada ĂŒle 60 000 numbrit praktiliselt mĂ€rkamatute muutustega fotol.

Siiski tasub mÀrkida, et kui me nullime esimesed viis numbrit, on erinevus ilmne.

Numbrid alguses tÀhendavad madala sageduse muutusi pildis, ja meie silmad tajuvad neid kÔige paremini. Numbrid, mis on lÀhemal lÔpus, tÀhendavad kÔrge sageduse muutusi, mida on raskem mÀrgata. Et "nÀha seda, mis silmale ei paista", saame isoleerida need kÔrge sageduse detailid, nullides esimesed 5000 numbrit.

Me nÀeme kÔiki pildi alasid, kus toimuvad suurimad muudatused pikslite vahel. TÔstetakse esile kassi silmad, tema vuntsid, flanelltekid ja varjud vasakus alumises nurgas. VÔime minna kaugemale, nullides esimesed 10 000 numbrit:

20 000:

40 000:

60 000:

Need high-frequency JPEG components are removed during compression. Color transformation into DCT coefficients is lossless. Loss occurs at the discretization step, where high-frequency or near-zero values are removed. When you lower the JPEG save quality, the program raises the threshold for the number of values removed, resulting in a smaller file size but making the image more pixelated. This is why the image in the first section, which was 57 times smaller, looked like this. Each 8x8 block was represented by a much smaller number of DCT coefficients compared to the higher quality version.
You can create a cool effect like progressively streaming images. You can display a blurred picture that becomes increasingly detailed as more coefficients are downloaded.
Here, just for curiosity, is what you get using only 24,000 numbers:

Or just 5,000:

Very blurred, but somewhat recognizable!
3. Run-length encoding, delta, and Huffman
Praegu on kÔik kompressioonietapid olnud kaotustega. Vastupidiselt, viimane etapp toimub kaotusteta. See ei eemalda teavet, vaid vÀhendab faili suurust olulisel mÀÀral.
Kuidas saab midagi edasi kompressida, visates teavet minema? Kujutage ette, kuidas me kirjeldaksime lihtsat musta ristkĂŒlikut 700 x 437.
JPEG kasutab selleks 5000 numbrit, kuid saavutada vÔiks palju paremaid tulemusi. Kas oskate ette kujutada kodeerimisskeemi, mis kirjeldaks sellist pilti vÔimalikult vÀheste baitide arvuga?
Minimaalsed skeemid, mille ma suudasin vĂ€lja mĂ”elda, kasutavad nelja: kolm vĂ€rvi tĂ€histamiseks ning neljas â kui palju pikslit on sellise vĂ€rviga. Ideed korduvate vÀÀrtuste sellise kompressimise kohta nimetatakse jĂ€rjestuste kodeerimiseks. See on kaotusteta, kuna saame taastada kodeeritud andmed algses vormis.
JPEG-faili musta ristkĂŒlikuga on palju suurem kui 4 bitti â pidage meeles, et DCT tasemel rakendatakse survet 8x8 pikslite plokkidele. SeetĂ”ttu on meil vĂ€hemalt ĂŒks DCT koefitsient iga 64 piksli kohta. Ăks on vajalik, kuna DCT koefitsendi hoidmise asemel, millele jĂ€rgneb 63 nulli, vĂ”imaldab jĂ€rjestuste kodeerimine meil hoida ĂŒhte numbrit ja nĂ€idata, et "kĂ”ik teised on nullid".
Delta-kodeerimine on tehnika, kus iga bait sisaldab erinevust mĂ”nest vÀÀrtusest, mitte absoluutset suurust. SeetĂ”ttu muudab teatud baitide redigeerimine kĂ”igi ĂŒlejÀÀnud pikslite vĂ€rvi. NĂ€iteks, selle asemel et hoida
12 13 14 14 14 13 13 14
Me vÔiksime alustada numbrist 12 ja siis lihtsalt mÀrkida, kui palju tuleb juurde lisada vÔi lahutada, et saada jÀrgmine number. Ja see jÀrjestus delta-kodeerimises nÀeb vÀlja:
12 1 1 0 0 -1 0 1
Töödeldud andmed ei ole vÀiksemad kui algsed, kuid nende kokkusurumine on juba kergem. Delta-kodeerimise rakendamine enne jÀrjestuste kodeerimist vÔib oluliselt aidata, jÀÀdes samal ajal kaotusteta survet kasutavaks.
Delta-kodeerimine on ĂŒks vĂ€heseid tehnikaid, mida rakendatakse vĂ€ljaspool 8x8 plokke. 64 DCT koefitsiendist on ĂŒks lihtsalt pĂŒsiv lainefunktsioon (ĂŒhtlane vĂ€rv). See esindab iga ploki keskmist heledust helivĂ€rvi komponentide jaoks vĂ”i keskmist sinisust Cb komponentide jaoks jne. Iga DCT ploki esimene vÀÀrtus nimetatakse DC-vÀÀrtuseks ja iga DC-vÀÀrtus lĂ€bib delta-kodeerimist eelnevate vÀÀrtuste suhtes. SeetĂ”ttu mĂ”jutab esimese ploki heleduse muutus kĂ”iki plokke.
Viimane mĂ”istatus jÀÀb: kuidas ĂŒhe arvu muutmine rikub kogu pildi? Seni pole selliseid omadusi tihendustasemetel olnud. Vastus peitub JPEG pĂ€ises. Esimene 500 baiti sisaldab pilti puudutavaid metaandmeid â laiust, kĂ”rgust jne, ja seni pole me nendega töötanud.
Pealkirjata on JPEG-i dekodeerimine praktiliselt vĂ”imatu (vĂ”i vĂ€ga keeruline). See nĂ€eks vĂ€lja nagu ma ĂŒritaksin teile maali kirjeldada, olles sunnitud leiutama sĂ”nu, et edasi anda oma mulje. Kirjeldus on tĂ”enĂ€oliselt ĂŒsna lĂŒhike, kuna ma vĂ”in vĂ€lja mĂ”elda sĂ”nu just selle tĂ€hendusega, mida tahan edasi anda, kuid kĂ”igile teistele ei pruugi need mĂ”ttekad olla.
Kuigi see kĂ”lab tobedalt, just nii see toimub. Iga JPEG-pilt komprimeeritakse koodidega, mis on spetsiifilised just sellele pildile. Koodide sĂ”nastik hoitakse pealkirjas. Seda tehnikat nimetatakse 'Huffman'i koodiks' ja sĂ”nastik 'Huffman'i tabeliks'. Pealkirjas on tabel tĂ€histatud kahe baitiga â 255 ja seejĂ€rel 196. Igal vĂ€rviko komponendil vĂ”ib olla oma tabel.
Muutused tabelites mÔjutavad iga pilti radikaalselt. Hea nÀide on vahetada 15. real 1 12 vastu.

See, et juhtub seetĂ”ttu, et tabelites on nĂ€idatud, kuidas lugeda eraldi bitte. Seni oleme töötanud vaid kĂŒmnendkujuliste binaarsete numbritega. Kuid see varjab meist tĂ”siasja, et kui soovite salvestada numbrit 1 baidis, nĂ€eb see vĂ€lja nagu 00000001, kuna igas baidis peab olema tĂ€pselt kaheksa bitti, isegi kui vajate neist ainult ĂŒhte.
See on potentsiaalselt suur ruumihÀire, kui teil on palju vÀikeseid numbreid. Huffmani kood on tehnika, mis vÔimaldab meil leevendada seda nÔuet, et iga number peab vÔtma kaheksa bitti. See tÀhendab, et kui nÀete kahte baidi:
234 115
Siis vÔivad need Huffmani tabeli sÔltuvalt tÀhendada kolme numbrit. Nende vÀljavÔtmiseks peate esmalt jagama need eraldi bittideks:
11101010 01110011
SeejĂ€rel pöördume tabeli poole, et mĂ”ista, kuidas neid rĂŒhmitada. NĂ€iteks vĂ”ivad need olla esimesed kuus bitti (111010), vĂ”i 58 kĂŒmnendsĂŒsteemis, millele jĂ€rgneb viis bitti (10011), vĂ”i 19 ning lĂ”puks viimased neli bitti (0011), vĂ”i 3.
SeetĂ”ttu on sellel kokkusurumise etapil baitidesse sĂŒĂŒvimine vĂ€ga keeruline. Bait ei esinda seda, mis tundub. Ma ei hakka kĂ€esolevas artiklis sĂŒvenema tabeli töödetailidesse, kuid selle teema kohta internetis .
Ăks huvitav trikk, mida teades teha, on eraldada pealkiri JPEG-ist ja hoida seda eraldi. Tegu on sisuliselt sellega, et faili saate lugeda ainult teie. Facebook teeb seda, et faile veel rohkem kokku suruda.
Mis veel teha â veidi muuta Huffmani tabelit. Teiste jaoks nĂ€eb see vĂ€lja nagu riknenud pilt. Ja ainult teie teate maagilist varianti selle parandamiseks.
Teeme kokkuvÔtte: mida on vaja JPEG-i dekodeerimiseks? Vajalik on:
- Eemaldada Huffmani tabel (tabelid) pealkirjast ja dekodeerida bitid.
- Eemaldada diskreetse kosinustransformatsiooni koefitsiendid iga vĂ€rvikoostisosade ja heleduse jaoks iga 8x8 ploki kohta, tehes inverseeritud seeriapikkuste ja delta kodeerimise ĂŒmberprotsessid.
- Kombineerida kosinusvÀÀrtused koefitsiendi pÔhjal, et saada pikslivÀÀrtused iga 8x8 ploki jaoks.
- Skaala vÀrvikomponente, kui tehti alamdiskreetimine (seda teavet on pealkirjas).
- Muutke saadud YCbCr vÀÀrtused iga pikseli jaoks RGB-ks.
- Kuva pilt ekraanile!
TĂ”eliselt tĂ”sine töö lihtsalt kassifoto vaatamiseks! Siiski, mis mulle siin meeldib â on nĂ€ha, kui inimkeskne JPEG-tehnoloogia on. See pĂ”hineb meie tajumise eripĂ€radel, mis vĂ”imaldavad saavutada palju paremat tihendust kui tavapĂ€rased tehnoloogiad. Ja nĂŒĂŒd, kui mĂ”ista, kuidas JPEG töötab, vĂ”ib kujutada, kuidas neid tehnoloogiaid saaks ĂŒle kanda teistesse valdkondadesse. NĂ€iteks vĂ”ib delta-koodimine videos anda tĂ”sise faili suuruse vĂ€henemise, kuna seal on sageli terveid piirkondi, mis ei muutu kaadrist kaadrisse (nĂ€iteks taust).
, on avatud ja sisaldab juhiseid, kuidas asendada pilte enda omadega.
Allikas: habr.com
