Kuidas JPEG-formaat töötab

JPEG-formaat pilte leiavad aset meie digitaalses elus igal pool, kuid selle teadlikkuse taga peituvad algoritmid, mis eemaldavad detailid, mida inimsilma ei tajuta. Tulemuseks on kĂ”rgeim visuaalne kvaliteet minimaalsete failisuurustega – kuid kuidas see kĂ”ik tĂ€pselt töötab? Vaatame, mida meie silmad ei nĂ€e!

Kuidas JPEG-formaat töötab

On kerge vĂ”tta enesestmĂ”istetavaks vĂ”imalus saata foto sĂ”brale, muretsemata selle pĂ€rast, millist seadet, brauserit vĂ”i operatsioonisĂŒsteemi ta kasutab – kuid nii see alati ei olnud. 1980. aastate alguseks oskasid arvutid hoida ja kuvada digitaalseid pilte, kuid parima viisi leidmiseks nende edastamiseks oli palju konkurentsivĂ”imelisi ideid. Ei olnud vĂ”imalik lihtsalt saata pilti ĂŒhest arvutist teise ja loota, et kĂ”ik töötab.

Selle probleemi lahendamiseks kogunes 1986. aastal rahvusvaheline ekspertkomitee nimega „Ühine fotograafide ekspertgrupp“ (Joint Photographic Experts Group, JPEG), mis loodi rahvusvahelise standardimisorganisatsiooni (ISO) ja Rahvusvaheline Elektrotehnilise Komisjoni (IEC) koostöö raames – kahe rahvusvahelise standardimisorganisatsiooni, mille peakorter asub Genfis (Ć veits).

Grupid, kes kutsusid end JPEG-iks, lĂ”id 1992. aastal JPEG digitaalsete piltide tihendamise standardi. IgaĂŒks, kes on Internetti kasutanud, on tĂ”enĂ€oliselt kokku puutunud JPEG- kodeerimisega pilte. See on kĂ”ige levinum viis piltide kodeerimiseks, edastamiseks ja salvestamiseks. Alates veebilehtedest kuni e-kirjade ja sotsiaalmeediani, kasutatakse JPEG-i miljardeid kordi pĂ€evas – praktiliselt iga kord, kui me vaatame pilti veebis vĂ”i saadame selle edasi. Ilma JPEG-ita oleks veeb vĂ€hem elav, aeglasem ja tĂ”enĂ€oliselt vĂ€hem kassipilte!

See artikkel kÀsitleb seda, kuidas dekodeerida JPEG-pilti. TeisisÔnu, sellest, mis on vajalik kokkusurutud andmete muundamiseks, mis hoitakse arvutis, pildiks, mis kuvatakse ekraanil. Sellest tasub teada mitte ainult seetÔttu, et see on oluline arusaamiseks tehnoloogiast, mida me iga pÀev kasutame, vaid ka seetÔttu, et avades kokkusurutuse tasemeid, saame paremini mÔista tajumist ja nÀgemist ning millistele detailidele meie silmad kÔige enam reageerivad.

Lisaks on pilte sellisel viisil redigeerida vÀga huvitav.

Kuidas JPEG-formaat töötab

Vaadates JPEG-i sisse

Arvutis hoitakse kĂ”ike binaarsete numbrite jĂ€rjestusena. Tavaliselt grupeeritakse neid bitte, nullid ja ĂŒhed, kaheksaks, moodustades baitid. Kui avate JPEG-pildi arvutis, peab midagi (brauser, operatsioonisĂŒsteem, midagi muud) dekodeerima baitide, taastades algse pildi vĂ€rvide nimekirjana, mida saab kuvada.

Kui Laadite alla selle armsa kassi foto ja avate selle tekstiredaktoris, nÀete hunnikut segaseid mÀrke.

Kuidas JPEG-formaat töötab
Siin kasutan Notepad++ faili sisu uurimiseks, kuna tavalised tekstiredaktorid, nagu Windowsi Notepad, rikuvad binaarfaili pÀrast salvestamist ja see lÔpetab JPEG-formaadile vastamise.

Avades pildi tekstiredaktoris, segad te arvutit sedasi nagu segad oma ajus, kui hÔÔrud silmi ja hakata nÀgema vÀrvilisi tÀppe!

Need tÀpid, mida nÀete, on tuntud kui fosfeenid, ega ole valguse stiimuli mÔju vÔi mÔistuse poolt tekitatud hallutsinatsioonid. Need tekivad, kuna teie aju arvab, et kÔik elektrilised signaalid silmanÀrvides edastavad teavet valguse kohta. Aju peab tegema selliseid oletusi, kuna ei ole vÔimalik teada, kas signaal on heli, nÀgemine vÔi midagi muud. KÔik nÀrvid kehas edastavad tÀiesti samu elektrilisi impulsside. Silmi vajutades saadate signaale, mis ei ole nÀgemislikud, kuid aktiveeritakse silma retseptoreid, mida teie aju tÔlgendab - antud juhul valesti - kui midagi nÀgeliku. Te olete sÔna otseses mÔttes suuteline nÀgema survet!

Naljakas on mĂ”elda, kui sarnased on arvutid ajule, kuid see on ka kasulik analoogia, mis illustreerib, kuidas andmete – mis edastatakse keha kaudu nĂ€rvidega vĂ”i salvestatakse arvutisse – tĂ€hendus sĂ”ltub nende tĂ”lgendusest. KĂ”ik binaarsed andmed koosnevad nullidest ja ĂŒhtedest, pĂ”hikoostisosadest, mis suudavad edastada igasugusest teavet. Teie arvuti arvab sageli, kuidas neid tĂ”lgendada vihjete, nĂ€iteks faililaiendite, abil. Ja nĂŒĂŒd sunnime me seda tĂ”lgendama neid tekstina, kuna just seda eeldab tekstiredaktor.

Kuna mĂ”ista, kuidas JPEG-i dekodeerida, peame nĂ€gema algseid signaale – binaarseid andmeid. Seda saab teha kuuesaksteheksandiku redigeerija abil vĂ”i otse artikli originaali veebilehel! Seal on pilt, mille kĂ”rval on tekstivĂ€ljas kĂ”ik selle baitid (vĂ€lja arvatud pĂ€is), esitatud kĂŒmnendkujul. VĂ”ite neid muuta ja skript kodeerib ja vĂ€ljastab uue pildi reaalajas.

Kuidas JPEG-formaat töötab

Saame palju teada, lihtsalt mÀngides selle redigeerijaga. NÀiteks, kas suudate öelda, millises jÀrjekorras on pikslid?

Selles nĂ€ites on veider see, et teatud numbrite muutmine ei mĂ”juta pilti ĂŒldse, aga nĂ€iteks, kui asendada number 17 nulliga esimeses reas, siis pilt lĂ€heb tĂ€iesti rikki!

Kuidas JPEG-formaat töötab

Teised muudatused, nÀiteks number 7 asendamine 1988. reas numbriga 254, muudab vÀrvi, kuid ainult jÀrgmiste pikslite puhul.

Kuidas JPEG-formaat töötab

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

Kuidas JPEG-formaat töötab

Ja olenemata sellest, millist JPEG pilti te kasutate, leiate alati need mĂŒstilised ĆĄakhmattikandid bite redigeerimise kĂ€igus.

Redigeerijaga mĂ€ngides on raske mĂ”ista, kuidas see pilt nende baitide hulgast taasloodakse, kuna JPEG-i tihendamine koosneb kolmest erinevast tehnoloogiast, mida rakendatakse jĂ€rjestikku kihtide kaupa. Uurime igaĂŒht neist eraldi, et avada nĂ€htud mĂŒstilist kĂ€itumist.

Kolm JPEG-i tihendamise taset:

  1. VĂ€rvialane subdiskreetimine.
  2. Diskreetne kosinuse transformatsioon ja diskreetimine.
  3. Pikade jada kodeerimine, delt ja Huffman

Ette kujutaksid ette kokkusurumise ulatust, pane tĂ€hele, et ĂŒlalolev pilt sisaldab 79 819 numbrit, see tĂ€hendab umbes 79 Kb. Kui me oleksime seda ladustanud ilma kokkusurumiseta, oleks iga piksel nĂ”udnud kolme numbrit – punase, rohelise ja sinise komponendi jaoks. See oleks olnud 917 700 numbrit vĂ”i umbes 917 Kb. JPEG kokkusurumise tĂ”ttu vĂ€henes lĂ”plik fail rohkem kui 10 korda!

Tegelikult saab seda pilti veelgi tugevamalt kokku suruda. Allpool on kaks pilti kĂ”rval – parempoolne foto on kokku surutud 16 Kb-ni, mis on 57 korda vĂ€hem kui kokku surumata versioon!

Kuidas JPEG-formaat töötab

Kui tÀhelepanelikult vaadata, siis on nÀha, et need pildid ei ole identsed. MÔlemad on JPEG kokkusurumisega pildid, kuid parem on mahtude poolest oluliselt vÀiksem. Samuti nÀeb see veidi halvem vÀlja (vaata taustavÀrvide ruute). SeetÔttu nimetatakse JPEG-d ka kadudega kokkusurumiseks; kokkusurumise protsessis muutub pilt ja kaotab teatud detaile.

1. VĂ€rvisubdisgustimine

Siin on pilt, millel on rakendatud ainult esimest kokkusurutuse taset.

Kuidas JPEG-formaat töötab
(Interaktiivne versioon – originaalis artikkel). Ühe numbri eemaldamine hĂ€vitab kĂ”ik vĂ€rvid. Kuid kui eemaldada tĂ€pselt kuus numbrit, ei mĂ”juta see pilti praktiliselt.

NĂŒĂŒd on numbreid kergem deĆĄifreerida. See on peaaegu lihtne vĂ€rviliste loend, kus iga bait muudab tĂ€pselt ĂŒhte pikslit, kuid samas on see juba kaks korda vĂ€iksem kui kokku surumata pilt (mis oleks umbes 300 Kb selle vĂ€hendatud suuruse korral). Kas arvate, miks?

On nÀha, et need numbrid ei tÀhista standardseid punase, rohelise ja sinise komponente, sest kui asendada kÔik numbrid nullidega, saame rohelise pildi (mitte valge).

Kuidas JPEG-formaat töötab

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

Kuidas JPEG-formaat töötab

Cb (suhteline sinisus),

Kuidas JPEG-formaat töötab

ja Cr (suhteline punasus) pilti.

Kuidas JPEG-formaat töötab

Miks mitte kasutada RGB? LĂ”ppude lĂ”puks töötab enamiku tĂ€napĂ€evaste ekraanide puhul just nii. Teie monitor saab kuvada mis tahes vĂ€rvi, sealhulgas punase, rohelise ja sinise vĂ€rvi erineva intensiivsusega iga pikseli jaoks. Valge tekib, kui kĂ”ik kolm on tĂ€ielikult heledad, ja must – kui need on vĂ€lja lĂŒlitatud.

Kuidas JPEG-formaat töötab

See sarnaneb ka inimsilma tööle. Meie silmade vĂ€rviretseptorid nimetatakse "kobaradeks«, ja jagunevad need kolme tĂŒĂŒpi, millest igaĂŒks on tundlikum kas punaste, roheliste vĂ”i siniste vĂ€rvide suhtes [S-tĂŒĂŒpi kolvikesed on tundlikud violetsinises (S inglise keeles Short — lĂŒhikesed lainepikkused), M-tĂŒĂŒpi – rohelise-kollase (M inglise keeles Medium — keskmised lainepikkused) ja L-tĂŒĂŒpi – kollase-punase (L inglise keeles Long — pikad lainepikkused) spektri osadele. Nende kolme tĂŒĂŒpi kolvike (ja pulgad, mis on tundlikud smaragdrohelises spektriosas) olemasolu annab inimesele vĂ€rvitaju. / mĂ€rkus tĂ”lkes]. Pulgad, teine tĂŒĂŒp fotoretseptoreid meie silmades, suudavad tabada muutusi heleduses, kuid on palju tundlikumad vĂ€rvi suhtes. Meie silmades on umbes 120 miljonit pulka ja vaid 6 miljonit kolvikut.

SeetĂ”ttu mĂ€rkavad meie silmad muudatusi heleduses palju paremini kui muudatusi vĂ€rvis. Kui eraldada vĂ€rv heledusest, saab veidi vĂ€rvi vĂ€hendada ja keegi ei pane seda tĂ€hele. VĂ€rvi aladiĆĄreetimine on protsess, mille kĂ€igus esitatakse pildi vĂ€rvikomponendid madalama eraldusvĂ”imega vĂ”rreldes heleduskomponentidega. Ülaltoodud nĂ€ites on igas pikslis tĂ€pselt ĂŒks Y komponent ja igas nelja piksliga grupis on tĂ€pselt ĂŒks Cb ja ĂŒks Cr komponent. SeetĂ”ttu sisaldab pilt neli korda vĂ€hem vĂ€rviinfot kui originaalis.

VÀrviruum YCbCr ei kasutata mitte ainult JPEG-des. See on algselt vÀlja mÔeldud 1938. aastal televiisorite jaoks. Mitte kÔigil ei olnud vÀrvilist televiisorit, seega vÔimaldas vÀrvi ja heleduse eraldamine kÔigil saada sama signaali, samas kui vÀrvitud televiisorid kasutasid lihtsalt ainult heleduse komponenti.

SeetĂ”ttu hĂ€vitab ĂŒhe numbri eemaldamine redigeerijast tĂ€ielikult kĂ”ik vĂ€rvid. Komponendid salvestatakse kujul Y Y Y Y Cb Cr (tegelikult ei pea see olema tingimata sellises jĂ€rjekorras – salvestamise jĂ€rjekord mÀÀratakse faili pĂ€ises). Esimese numbri eemaldamine toob kaasa selle, et esimene Cb vÀÀrtus tĂ”lgendatakse kui Y, Cr kui Cb, ja see toob kaasa dominoefekti, mis muudab kĂ”iki pildi vĂ€rve.

JPEG spetsifikatsioon ei nÔua YCbCr kasutamist. Kuid enamikus failides kasutatakse seda, kuna see annab subdiskreetimise jÀrel parema kvaliteediga pilte vÔrreldes RGB-ga. Aga te ei pea mind sÔna-sÔnalt uskuma. Vaadake ise allolevas tabelis, milline vÀlja nÀeb iga eraldi komponendi subdiskreetimine nii RGB kui ka YCbCr puhul.

Kuidas JPEG-formaat töötab
(Interaktiivne versioon – originaalis artiklid).

Sinise eemaldamine ei ole nii mÀrgatav kui punase vÔi rohelise. See tuleneb sellest, et teie silmades on umbes 64% punaste, 32% roheliste ja 2% siniste koonusrakke.

Komponendi Y subdiskreetimine (vasakul all) on kÔige paremini nÀhtav. Iga vÀike muutus on mÀrgatav.

Pildi konverteerimine RGB-st YCbCr-iks ei vÀhenda faili suurust, kuid lihtsustab vÀhem nÀhtavate detailide leidmist, mida saab eemaldada. Kaod, millel on kahjulik mÔju, toimuvad teises etapis. Selle aluseks on idee esitada andmed kompaktsemal kujul.

2. Diskreetne kosinusmuundamine ja diskreetimine

See kompressiooni tase mÀÀrab peaaegu tÀielikult JPEG-i olemuse. PÀrast vÀrvide konverteerimist YCbCr-iks componeeritakse komponendid eraldi, seetÔttu saame keskenduda ainult Y-komponendile. Ja sellised nÀevad vÀlja Y-komponendi baitid pÀrast selle taseme rakendamist.

Kuidas JPEG-formaat töötab
(Interaktiivne versioon – originaalis artiklid). Interaktiivses versioonis klikkimine pikslile kerib redigeerijat reale, mida see tĂ€histab. Proovige eemaldada numbreid lĂ”pust vĂ”i lisada mĂ”nele numbrile mĂ”ned nullid.

Esmapilgul tundub, et tegemist on vÀga kehva kompressiooniga. 100 000 piksliga pildis on Y-komponentide heleduse mÀÀramiseks vajalik 102 400 numbrit - see on halvem kui juhul, kui ei compressitagi!

Kuid pidage meeles, et enamik neist numbritest on nullid. Lisaks saab kÔik need nullid ridade lÔpus eemaldada, ilma et see pilti muudaks. JÀÀb umbes 26 000 numbrit, mis on juba peaaegu neli korda vÀhem!

Selle taseme juures peitubki ƥahhi mustrite saladus. Erinevalt teistest nÀhtustest, mida me oleme nÀinud, ei ole nende mustrite ilmumine viga. Need on kogu pildi ehitusplokid. Igas redigeerija reas on tÀpselt 64 numbrit, diskreetse kosinusmuundamise (DCT) koefitsiendid, mis vastavad 64 ainulaadse mustri intensiivsusele.

Need patterns are formed based on the cosine chart. Here’s what some of them look like:

Kuidas JPEG-formaat töötab
8 out of 64 coefficients

Below is an image showing all 64 patterns.

Kuidas JPEG-formaat töötab
(Interaktiivne versioon – originaalis artiklid).

These patterns are significant as they form the basis of 8x8 sized images. If you are unfamiliar with linear algebra, this means that any 8x8 image can be obtained from these 64 patterns. DCT is the process of breaking images into 8x8 blocks and transforming each block into a combination of these 64 coefficients.

The fact that any image can be composed of 64 specific patterns seems magical. However, it’s the same as saying that any place on Earth can be described by two numbers – latitude and longitude [with specifying hemispheres / translator's note]. We often consider the Earth's surface to be two-dimensional, so we only need two numbers. An 8x8 image has 64 dimensions, so we need 64 numbers.

It’s still unclear how this helps us in terms of compression. If we need 64 numbers to represent an 8x8 image, why is this method better than just storing 64 brightness components? We do it for the same reason we transformed three RGB numbers into three YCbCr numbers: it allows us to remove imperceptible details.

It's difficult to see exactly which details are removed at this stage since JPEG applies DCT to 8x8 blocks. However, no one prevents us from applying it to an entire image. Here’s what DCT looks like on the Y component when applied to the whole image:

Kuidas JPEG-formaat töötab

From the end, we can remove over 60,000 numbers virtually without noticeable changes to the photo.

Kuidas JPEG-formaat töötab

However, note that if we zero out the first five numbers, the difference will be obvious.

Kuidas JPEG-formaat töötab

The numbers at the beginning denote low-frequency changes in the image, which our eyes catch the best. The numbers closer to the end indicate high-frequency changes that are harder to notice. To "see what is not visible to the eye," we can isolate these high-frequency details by zeroing out the first 5,000 numbers.

Kuidas JPEG-formaat töötab

We see all areas of the image where the most change occurs from pixel to pixel. The cat's eyes, its whiskers, the plush blanket, and shadows in the lower left corner stand out. We can go further by zeroing out the first 10,000 numbers:

Kuidas JPEG-formaat töötab

20 000:

Kuidas JPEG-formaat töötab

40 000:

Kuidas JPEG-formaat töötab

60 000:

Kuidas JPEG-formaat töötab

Need to transform high-frequency JPEG details and remove them at the compression stage. Color conversion to DCT coefficients is lossless. Losses occur at the discretization step, where high-frequency or near-zero values are eliminated. When you lower the quality of JPEG saving, the program increases the threshold 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, appeared this way. Each 8x8 block was represented by far fewer DCT coefficients compared to a higher-quality version.

You can create an amazing effect like gradual streaming of images. You can display a blurred image that becomes increasingly detailed as more coefficients are downloaded.

Here's, just for interest, what happens when using only 24,000 numbers:

Kuidas JPEG-formaat töötab

Or just 5,000:

Kuidas JPEG-formaat töötab

Very blurry, but somewhat recognizable!

3. Run-length encoding, delta, and Huffman

So far, all stages of compression have been lossy. The last stage, on the other hand, is lossless. It does not remove information but significantly reduces file size.

How can you compress something without discarding information? Imagine how we could describe a simple black rectangle of 700 x 437.

JPEG uses 5,000 numbers for this, but much better results can be achieved. Can you imagine a coding scheme that describes such an image in as few bytes as possible?

The minimal scheme I could come up with uses four: three to denote color, and the fourth – how many pixels have that color. The idea of representing repeating values in such a compressed way is called run-length encoding. It is lossless since we can restore the encoded data in its original form.

JPEG-faili suurus musta ristkĂŒliku puhul on palju suurem kui 4 baiti – pidage meeles, et DCT tasemel rakendatakse tihendamist 8x8 pikslite plokkide kaupa. Seega on meil vĂ€hemalt vajalik ĂŒks DCT koefitsient iga 64 piksli kohta. Üks on vajalik, sest selle asemel, et salvestada ĂŒks DCT koefitsient, millele jĂ€rgneb 63 nulli, vĂ”imaldab jĂ€rjestuste kodeerimine meil salvestada ĂŒhe numbri ja mĂ€rkida, 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 muutmine kÔigi teiste pikslite vÀrvi. NÀiteks, selle asemel, et salvestada

12 13 14 14 14 13 13 14

Me vÔiksime alustada 12-st ja seejÀrel lihtsalt nÀidata, kui palju tuleb juurde lisada vÔi Àra vÔtta, et saada jÀrgmine number. Ja see jÀrjestus delta-kodeerimises omandab jÀrgmise kuju:

12 1 1 0 0 -1 0 1

Töödeldud andmed ei muutu vÀiksemaks algsetest, kuid neid on kergem tihendada. Delta-kodeerimise rakendamine enne jÀrjestuste kodeerimist vÔib olla suureks abiks, jÀÀdes samas kaotustatud tihendamiseks.

Delta-kodeerimine on ĂŒks vĂ€heseid tehnikaid, mida rakendatakse vĂ€ljaspool 8x8 plokke. 64 DCT koefitsiendist on ĂŒks lihtsalt pidev lainefunktsioon (ĂŒhtlane vĂ€rv). See esindab iga ploki keskmist heledust valgustuskomponentide jaoks vĂ”i keskmist sinisust Cb komponentide jaoks, ja nii edasi. 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 muutmine kĂ”iki plokke.

Viimane mĂ”istatus jÀÀb: kuidas ĂŒhe numbri muutmine rikub kogu pildi? Seni ei ole tihendusastmetel olnud selliseid omadusi. Vastus peitub JPEG-i pealkirjas. Esimesed 500 baiti sisaldavad metaandmeid pildi kohta – laiust, kĂ”rgust ja muud, ja seni, kuni me nendega ei töötanud.

Ilma pealkirjata on JPEG-dekodeerimine peaaegu vĂ”imatu (vĂ”i vĂ€ga keeruline). See nĂ€eks vĂ€lja nagu ma pĂŒĂŒaksin teile maali kirjeldada ja hakkan isegi sĂ”nu leiutama, et edasi anda oma mulje. Kirjeldus on tĂ”enĂ€oliselt vĂ€ga kokkusurutud, kuna ma vĂ”in leiutada sĂ”nu just selle tĂ€hendusega, mida soovin edastada, kuid kĂ”igile teistele ei ole need tĂ”enĂ€oliselt mĂ”istetavad.

Kuulub jaburana, kuid just nii see toimub. Iga JPEG-pilt komprimeeritakse spetsiifiliste koodide abil, mis on just sellele pildile omased. Koodide sĂ”nastik salvestatakse pĂ€isesse. Seda tehnikat nimetatakse „Huffman'i koodiks“ ja sĂ”nastikku – Huffman'i tabeliks. PĂ€ises on tabel mĂ€rgitud kahe baitiga – 255 ja seejĂ€rel 196. Igal vĂ€rvikoos komponendil vĂ”ib olla oma tabel.

Muutused tabelites mÔjutavad radikaalselt igat pilti. Hea nÀide on vahetada 15. real 1 12 vastu.

Kuidas JPEG-formaat töötab

See juhtub seetĂ”ttu, et tabelites on öeldud, kuidas tuleb lugeda eraldi bitte. Siiani oleme töötanud ainult binaarsete arvudega kĂŒmnendsĂŒsteemis. Kuid see peidab meist fakti, et kui soovite hoida arvu 1 ĂŒhes baitis, siis nĂ€eb see vĂ€lja nagu 00000001, kuna igas baitis peab olema tĂ€pselt kaheksa bitti, isegi kui vajate neist ainult ĂŒhte.

Potentsiaalselt on see suur ruumipaiskumine, kui teil on palju vÀikeseid numbreid. Huffman'i kood on tehnika, mis vÔimaldab meil leevendada nÔuet, et iga number peab vÔtma kaheksa bitti. See tÀhendab, et kui nÀete kahte bitti:

234 115

Siis vÔivad need, sÔltuvalt Huffman'i tabelist, olla kolm numbrit. Nende vÀljavÔtmiseks peate esmalt jagama need eraldi bittideks:

11101010 01110011

Siis 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, ja lĂ”puks viimased neli bitti (0011), vĂ”i 3.

SeetĂ”ttu on selles faasis tihendamiseks vĂ€ga keeruline baite mĂ”ista. Baiid ei esinda seda, mida tundub. Ma ei hakka sĂŒvenema tabeli töö detailidesse selles artiklis, kuid materjale selle teema kohta internetis piisab.

Üks huvitav trikk, mida oskades teha, on eraldada JPEG-pĂ€is ja hoida seda eraldi. PĂ”himĂ”tteliselt tĂ€hendab see, et faili saate lugeda ainult teie. Facebook teeb seda, et faile veelgi rohkem vĂ€hendada.

Mis veel on vĂ”imalik teha – tabelit Huffman'i tĂ€iusta just natuke. Teiste jaoks nĂ€eb see vĂ€lja nagu rikutud pilt. Ja ainult teie teate maagilist varianti selle taastamiseks.

KokkuvÔtteks: mis siis on vajalik JPEG-dekodeerimiseks? On vajalik:

  1. Eraldada Huffman'i tabel (tabelid) pÀisest ja dekodeerida bitid.
  2. TĂ”mmake vĂ€lja diskreetse kosinuste ĂŒmberarvestamise koefitsiendid iga vĂ€rvi ja heleduse komponendi jaoks iga 8x8 ploki puhul, tehes tagasi pikkade seeriate kodeerimise ja delta ĂŒmberarvestused.
  3. Kombineerige kosinused koefitsientide pÔhjal, et saada iga 8x8 ploki jaoks pikslivÀÀrtused.
  4. Skaalake vÀrvikomponente, kui on tehtud aldisreteerimine (see teave on pealkirjas).
  5. Transformeerige saadud YCbCr vÀÀrtused igale pikslile RGB-ks.
  6. NĂ€idake pilti ekraanil!

TĂ”sine ĂŒlesanne tavalise kassifoto vaatamiseks! Kuid see, mis mulle selle juures meeldib, on see, et see nĂ€itab, kui inimese keskne JPEG-tehnoloogia tegelikult on. See pĂ”hineb meie tajumise eripĂ€radel, vĂ”imaldades saavutada palju paremat tihendust kui tavapĂ€rased tehnoloogiad. Ja nĂŒĂŒd, mĂ”istes, kuidas JPEG töötab, on vĂ”imalik kujutada, kuidas neid tehnoloogiaid saab ĂŒle kanda teistesse valdkondadesse. NĂ€iteks vĂ”ib delta kodeerimine videos anda tĂ”sise faili suuruse vĂ€hendamise, kuna seal on sageli suuri piirkondi, mis ei muutu kaadrist kaadrisse (nĂ€iteks taust).

Artiklis kasutatud kood, on avatud ja sisaldab juhiseid, kuidas asendada pilte enda omadustega.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster