How the JPEG format works

JPEG-bilder finnes overalt i vĂ„rt digitale liv, men bak dette laget av bevissthet skjuler det seg algoritmer som eliminerer detaljer som ikke oppfattes av det menneskelige Ăžyet. Resultatet er strĂ„lende bildekvalitet med minimal filstĂžrrelse – men hvordan fungerer egentlig dette? La oss se nĂŠrmere pĂ„ hva Ăžynene vĂ„re ikke ser!

How the JPEG format works

Det er lett Ă„ ta for gitt muligheten til Ă„ sende et bilde til en venn uten Ă„ bekymre seg for hvilken enhet, nettleser eller operativsystem de bruker – men slik har det ikke alltid vĂŠrt. PĂ„ begynnelsen av 1980-tallet kunne datamaskiner lagre og vise digitale bilder, men det var mange konkurrerende ideer om den beste mĂ„ten Ă„ gjĂžre dette pĂ„. Man kunne ikke bare sende et bilde fra Ă©n datamaskin til en annen og hĂ„pe at alt ville fungere.

For Ă„ lĂžse dette problemet ble det i 1986 opprettet et ekspertutvalg fra hele verden kalt «Joint Photographic Experts Group, JPEG» (Joint Photographic Experts Group, JPEG), dannet under et samarbeid mellom Den internasjonale standardiseringsorganisasjonen (ISO) og Den internasjonale elektrotekniske kommisjonen (IEC) – to internasjonale standardiseringsorganisasjoner med hovedkontor i GenĂšve (Sveits).

Gruppen av mennesker kalt JPEG etablerte JPEG-kompressionsstandarden for digitale bilder i 1992. Enhver som har brukt internett, har sannsynligvis stĂžtt pĂ„ bilder i JPEG-koding. Dette er den mest utbredte metoden for koding, sending og lagring av bilder. Fra nettsider til e-post og sosiale medier, brukes JPEG milliarder av ganger om dagen – omtrent hver gang vi ser et bilde pĂ„ nettet eller sender det. Uten JPEG ville nettet vĂŠrt mindre livlig, tregere, og sannsynligvis mindre fullt av kattbilder!

Denne artikkelen handler om hvordan man dekoder et JPEG-bilde. Med andre ord, hva som kreves for Ä konvertere komprimerte data som lagres pÄ datamaskinen til et bilde som vises pÄ skjermen. Dette er viktig Ä vite, ikke bare fordi det er essensielt for Ä forstÄ teknologien vi bruker daglig, men ogsÄ fordi Ä avdekke komprimeringslagene gir oss en bedre forstÄelse av persepsjon og syn, samt hvilke detaljer Þynene vÄre er mest fÞlsomme overfor.

I tillegg er det veldig interessant Ä eksperimentere med bilder pÄ denne mÄten.

How the JPEG format works

Se inn i JPEG

PÄ datamaskinen lagres alt som en sekvens av binÊre tall. Vanligvis grupperes disse bitene, nuller og enere, i grupper pÄ Ätte for Ä danne bytes. NÄr du Äpner et JPEG-bilde pÄ datamaskinen, mÄ noe (nettleseren, operativsystemet, eller noe annet) dekode bytes, og gjenskape det originale bildet som en liste av farger som kan vises.

Hvis du laster ned dette sÞte kattebildet og Äpner det i en tekstredigerer, vil du se en haug med uforstÄelige tegn.

How the JPEG format works
Her bruker jeg Notepad++ for Ă„ undersĂžke innholdet i filen, fordi vanlige tekstredigerere, som Notepad i Windows, vil Ăždelegge den binĂŠre filen etter lagring, og den vil ikke lenger oppfylle JPEG-formatet.

Ved Ä Äpne bildet i en tekstredigerer forvirrer du datamaskinen, akkurat som du forvirrer hjernen din nÄr du gnir Þynene og begynner Ä se fargede flekker!

Disse flekkene du ser er kjent som fosefen, og er ikke et resultat av lysstimuli eller hallusinasjoner skapt av sinnet. De oppstĂ„r fordi hjernen din antar at alle elektriske signaler i Ăžynenes nerver overfĂžrer informasjon om lys. Hjernen mĂ„ gjĂžre slike antagelser, ettersom det ikke er mulig Ă„ vite om signalet er lyd, syn eller noe annet. Alle nerver i kroppen overfĂžrer helt identiske elektriske impulser. NĂ„r du trykker pĂ„ Ăžynene, sender du signaler som ikke er visuelle, men som aktiverer Ăžyets reseptorer, noe hjernen din tolker – i dette tilfellet feilaktig – som noe visuelt. Du kan bokstavelig talt se trykket!

Det er morsomt Ä tenke pÄ hvor lik datamaskiner er pÄ hjernen, men det er ogsÄ en nyttig analogi som illustrerer hvor mye betydningen av data - som overfÞres gjennom kroppen av nerver, eller lagres pÄ datamaskinen - avhenger av hvordan de tolkes. All binÊr data bestÄr av nuller og enere, grunnleggende komponenter som kan overfÞre informasjon av enhver art. Datamaskinen din gjetter ofte hvordan man skal tolke dem ved hjelp av ledetrÄder, som for eksempel filutvidelser. Og nÄ ber vi den om Ä tolke dem som tekst, ettersom dette er det tekstbehandleren forventer.

For Ä forstÄ hvordan JPEG dekodes, mÄ vi se de opprinnelige signalene - den binÊre dataen. Dette kan gjÞres ved hjelp av en heksadesimal redigerer, eller rett pÄ websiden til den opprinnelige artikkelen! Der finnes det et bilde, ved siden av hvilket alle byte (unntatt headeren) er oppfÞrt i tekstfeltet, representert i desimal form. Du kan endre dem, og skriptet vil omkode og gi et nytt bilde i sanntid.

How the JPEG format works

Du kan lĂŠre mye bare ved Ă„ spille med denne redigereren. For eksempel, kan du si i hvilken rekkefĂžlge pikslene lagres?

Det merkelige med dette eksemplet er at endring av noen tall ikke pÄvirker bildet i det hele tatt, men for eksempel, hvis du erstatter tallet 17 med 0 i den fÞrste linjen, vil bildet bli helt Þdelagt!

How the JPEG format works

Andre endringer, for eksempel Ä erstatte 7 i linje 1988 med tallet 254, endrer fargene, men bare for de pÄfÞlgende pikslene.

How the JPEG format works

Kanskje det mest merkelige er at noen tall endrer ikke bare fargen, men ogsÄ formen pÄ bildet. Endre 70 i linje 12 til 2 og se pÄ den Þverste raden i bildet for Ä se hva jeg mener.

How the JPEG format works

Og uansett hvilket JPEG-bilde du bruker, vil du alltid finne disse mystiske sjakkmÞnstrene nÄr du redigerer byte.

NÄr du leker med redigereren, er det vanskelig Ä forstÄ hvordan bildet rekonstruksjonere fra disse byte, siden JPEG-kompresjon bestÄr av tre forskjellige teknologier som brukes sekvensielt pÄ nivÄer. Vi vil utforske hver enkelt for Ä avdekke den mystiske oppfÞrselen vi observerer.

Tre nivÄer av JPEG-kompresjon:

  1. Fargesubdiscretisering.
  2. Diskret cosinus-transformasjon og diskretisering.
  3. Koding av lengder, delta og Huffman

For you to grasp the scale of compression, note that the image above represents 79,819 numbers, or about 79 KB. If we stored it uncompressed, each pixel would require three numbers – for the red, green, and blue components. This would amount to 917,700 numbers, or approximately 917 KB. As a result of JPEG compression, the final file size has been reduced by more than 10 times!

In fact, this image can be compressed even more. Below are two images side by side – the photo on the right has been compressed to 16 KB, which is 57 times smaller than the uncompressed version!

How the JPEG format works

If you take a closer look, you will notice that these images are not identical. Both are JPEG compressed images, but the one on the right is significantly smaller. It also looks a bit worse (look at the squares of the background colors). That’s why JPEG is also referred to as lossy compression; during compression, the image changes and loses some details.

1. Color Subsampling

Here is an image using only the first level of compression.

How the JPEG format works
(Interactive version – in the original article). Removing a single number disrupts all colors. However, if six numbers are removed, it has virtually no impact on the image.

Now the numbers are slightly easier to decipher. It’s almost a simple list of colors, in which each byte changes exactly one pixel, and yet it is already half the size of the uncompressed image (which would take about 300 KB in this reduced size). Can you guess why?

It can be seen that these numbers do not represent the standard red, green, and blue components, since replacing all the numbers with zeros would yield a green image (not white).

How the JPEG format works

This is because these bytes represent Y (luminance),

How the JPEG format works

Cb (chroma blue),

How the JPEG format works

and Cr (chroma red) of the image.

How the JPEG format works

Why not use RGB? After all, this is how most modern displays operate. Your monitor can display any color by varying the intensity of red, green, and blue for each pixel. White is achieved by turning all three on to full brightness, while black is the result of turning them off.

How the JPEG format works

This is also very similar to how the human eye works. The color receptors in our eyes are called “cones«, og er delt inn i tre typer, der hver er mer sensitiv for rĂždt, grĂžnt eller blĂ„tt [S-type tapper er sensitive i violett-blĂ„tt (S fra engelsk Short – kort bĂžlgelengde spektrum), M-type – i grĂžnn-gul (M fra engelsk Medium – middels bĂžlgelengde), og L-type – i gul-rĂžd (L fra engelsk Long – lang bĂžlgelengde) deler av spektret. TilstedevĂŠrelsen av disse tre typene tapper (og staver som er sensitive i smaragdgrĂžnt) gir mennesker fargesyn. / overs. anm.]. Staver, en annen type fotoreceptorer i Ăžynene vĂ„re, kan oppdage endringer i lysstyrke, men er mye mer sensitiv for farge. Det finnes omtrent 120 millioner staver og bare 6 millioner tapper i Ăžynene vĂ„re.

Derfor er Þynene vÄre mye bedre til Ä oppdage endringer i lysstyrke enn endringer i farge. Hvis man skiller farge fra lysstyrke, kan man fjerne litt farge, og ingen vil merke det. Fargesubdiscretisering er prosessen med Ä representere fargekomponentene i et bilde med lavere opplÞsning sammenlignet med lysstyrkekomponentene. I eksempelet ovenfor har hvert piksel nÞyaktig én Y-komponent, mens hver enkelt gruppe av fire piksler har nÞyaktig én Cb-komponent og én Cr. Derfor inneholder bildet fire ganger mindre fargeinformasjon enn det opprinnelige.

FargeomrÄdet YCbCr brukes ikke bare i JPEG. Det ble fÞrst utviklet i 1938 for kringkasting. Ikke alle hadde farge-TV-er, sÄ separasjonen av farge og lysstyrke gjorde det mulig for alle Ä motta det samme signalet, mens farge-TV-er uten farge bare brukte lysstyrkekomponenten.

Derfor vil fjerning av ett tall fra redaktþren fullstendig þdelegge alle farger. Komponentene lagres som Y Y Y Y Cb Cr (i virkeligheten, ikke nþdvendigvis i den rekkefþlgen - rekkefþlgen spesifiseres i filoverskriften). Å fjerne det fþrste tallet vil fþre til at den fþrste Cb-verdien blir oppfattet som Y, Cr som Cb, og det vil totalt sett gi en dominoreffekt som endrer alle fargene i bildet.

JPEG-spesifikasjonen forplikter deg ikke til Ä bruke YCbCr. Men i de fleste filer brukes den, da den gir bilder av bedre kvalitet etter subprÞving sammenlignet med RGB. Men du trenger ikke Ä ta mitt ord for det. Se selv i tabellen nedenfor hvordan subprÞvingen av hver enkelt komponent vil se ut bÄde i RGB og YCbCr.

How the JPEG format works
(Interactive version – in the original artikler).

Fjerning av blÄtt er ikke sÄ merkbart som rÞdt eller grÞnt. Alt fordi 64% av de seks millionene staverne i Þynene dine er sensitive for rÞdt, 32% for grÞnt og 2% for blÄtt.

SubprÞving av Y-komponenten (nederst til venstre) er mest synlig. Selv smÄ endringer er merkbare.

Å konvertere et bilde fra RGB til YCbCr reduserer ikke filstĂžrrelsen, men gjĂžr det lettere Ă„ finne mindre synlige detaljer som kan fjernes. Tapende komprimering skjer i det andre stadium. Den er basert pĂ„ ideen om Ă„ representere data i en mer komprimerbar form.

2. Diskret kosinustransformasjon og subprĂžving

Dette kompresjonsnivÄet definerer i stor grad essensen av JPEG. Etter fargekonverteringen til YCbCr, komprimeres komponentene individuelt, sÄ vi kan fokusere pÄ Y-komponenten. Her er hvordan byte av Y-komponenten ser ut etter pÄfÞring av dette nivÄet.

How the JPEG format works
(Interactive version – in the original artikler). I den interaktive versjonen, klikker du pĂ„ en piksel for Ă„ rulle redigereren til linjen som representerer den. PrĂžv Ă„ fjerne tall fra slutten eller legge til noen nuller til et bestemt tall.

Ved fĂžrste Ăžyekast ser det ut som en veldig dĂ„rlig komprimering. I bildet er det 100 000 piksler, og for Ă„ representere lysstyrken deres (Y-komponenten) kreves 102 400 tall – dette er verre enn Ă„ ikke komprimere i det hele tatt!

Legg imidlertid merke til at de fleste av disse tallene er null. Dessuten kan alle disse nullene pÄ slutten av linjene fjernes uten Ä endre bildet. Det gjenstÄr omtrent 26 000 tall, og det er nesten fire ganger mindre!

PÄ dette nivÄet ligger hemmeligheten bak sjakkmÞnstrene. I motsetning til andre effekter vi har sett, er fremveksten av disse mÞnstrene ikke en feil. De er byggeklossene i hele bildet. Hver linje i redigeringsprogrammet inneholder nÞyaktig 64 tall, koeffisientene til den diskrete kosinus-transformasjonen (DCT), som tilsvarer intensiteten til 64 unike mÞnstre.

Disse mÞnstrene dannes basert pÄ en kosinusgraf. Slik ser noen av dem ut:

How the JPEG format works
8 av 64 koeffisienter

Nedenfor er et bilde som viser alle 64 mĂžnstre.

How the JPEG format works
(Interactive version – in the original artikler).

Disse mÞnstrene har spesiell betydning, da de danner basis for bilder i stÞrrelse 8x8. Hvis du ikke er kjent med lineÊr algebra, betyr det at ethvert bilde i stÞrrelse 8x8 kan gjengis fra disse 64 mÞnstrene. DCT er prosessen med Ä dele opp bilder i blokker pÄ 8x8 og omforme hver blokk til en kombinasjon av disse 64 koeffisientene.

At et bilde kan konstrueres fra 64 bestemte mĂžnstre virker magisk. Imidlertid er det det samme som Ă„ si at ethvert punkt pĂ„ jorden kan beskrives med to tall – breddegrad og lengdegrad [med separate halvkuler / merkn. oversetter]. Vi anser ofte jordens overflate som todimensjonal, sĂ„ vi trenger bare to tall. Et 8x8-bilde har 64 dimensjoner, sĂ„ vi trenger 64 tall.

Det er fortsatt uklart hvordan dette hjelper oss med hensyn til komprimering. Hvis vi trenger 64 tall for Ă„ representere et 8x8-bilde, hvorfor vil ikke denne metoden vĂŠre bedre enn bare Ă„ lagre 64 lysstyrkekomponenter? Vi gjĂžr dette av samme grunn som vi konverterte tre RGB-tall til tre YCbCr-tall: det lar oss fjerne usynlige detaljer.

Det er vanskelig Ä se hvilke detaljer som faktisk blir fjernet pÄ dette stadiet, siden JPEG anvender DCT pÄ blokker av 8x8. Imidlertid er ingen hindret i Ä anvende det pÄ et helt bilde. Slik ser DCT ut for komponenten Y nÄr den anvendes pÄ et helt bilde:

How the JPEG format works

Fra slutten kan vi fjerne over 60 000 tall uten merkbare endringer pÄ bildet.

How the JPEG format works

VÊr imidlertid oppmerksom pÄ at dersom vi nullstiller de fÞrste fem tallene, vil forskjellen vÊre Äpenbar.

How the JPEG format works

Tallene i starten representerer endringer i lav frekvens i bildet, og Þynene vÄre fanger dem best. Tallene nÊrmere slutten representerer endringer i hÞy frekvens, som er vanskeligere Ä legge merke til. For Ä 'se det som ikke er synlig for det blotte Þye,' kan vi isolere disse hÞyfrekvente detaljene ved Ä nullstille de fÞrste 5000 tallene.

How the JPEG format works

Vi ser alle omrÄdene i bildet hvor det skjer stÞrst endring fra piksel til piksel. Øynene til katten, dens skjegg, det fluffy teppet og skygger i nederste venstre hjÞrne blir fremhevet. Vi kan gÄ enda lenger ved Ä nullstille de fÞrste 10 000 tallene:

How the JPEG format works

20 000:

How the JPEG format works

40 000:

How the JPEG format works

60 000:

How the JPEG format works

Disse hÞye frekvensdelene i JPEG fjernes under kompresjonen. Fargeomformingen til DCT-koeffisienter er tapsfri. Tap skjer pÄ diskretiseringssteget, der hÞye frekvenser eller verdier nÊr null fjernes. NÄr du reduserer kvaliteten pÄ JPEG-lagringen, Þker programmet terskelen for antall verdier som fjernes, noe som gir en reduksjon i filstÞrrelse, men gjÞr bildet mer pikselert. Derfor sÄ bildet i fÞrste avsnitt ut slik, da det var 57 ganger mindre. Hver 8x8 blokk ble representert med betydelig fÊrre DCT-koeffisienter sammenlignet med en hÞyere kvalitetsversjon.

Du kan oppnÄ en kult effekt som gradvis strÞmmende bildeoverfÞring. Du kan vise et uskarpt bilde som blir mer detaljert ettersom flere koeffisienter lastes ned.

Her, bare for moro skyld, er hva som skjer med bare 24 000 tall:

How the JPEG format works

Eller bare 5 000:

How the JPEG format works

Veldig uskarpt, men pÄ en mÄte gjenkjennelig!

3. Koding av lĂžpelengder, delta og Huffman

SĂ„ langt har alle kompresjonstrinn vĂŠrt med tap. Det siste trinnet derimot, er tapsfritt. Det fjerner ikke informasjon, men reduserer filstĂžrrelsen betydelig.

Hvordan kan man komprimere noe uten Ä kaste bort informasjon? Forestill deg hvordan vi ville beskrevet et enkelt svart rektangel pÄ 700 x 437.

JPEG bruker 5000 tall for dette, men man kan oppnÄ mye bedre resultater. Kan du forestille deg et kodeord som beskriver et slikt bilde med sÄ fÄ byte som mulig?

Det minimumsformatet jeg klarte Ă„ komme opp med, bruker fire: tre for Ă„ indikere fargen, og den fjerde – hvor mange piksler har den fargen. Ideen om Ă„ representere gjentatte verdier pĂ„ en slik komprimert mĂ„te kalles koding av lĂžpelengder. Det er tapsfritt, siden vi kan gjenopprette de kodede dataene til deres opprinnelige tilstand.

JPEG-filen med det svarte rektangelet er mye stĂžrre enn 4 byte – husk at ved DCT blir komprimering anvendt pĂ„ blokker pĂ„ 8x8 piksler. Derfor trenger vi minst Ă©n DCT-koeffisient for hver 64 piksler. Vi trenger Ă©n, fordi i stedet for Ă„ lagre Ă©n DCT-koeffisient etterfulgt av 63 nuller, lar lĂžpende koding oss lagre ett tall og indikere at "alle de andre er nuller."

Delta-koding er en teknikk der hver byte inneholder forskjellen fra en verdi, snarere enn en absolutt stÞrrelse. Derfor pÄvirker redigering av bestemte byte fargen til alle de andre pikslene. For eksempel, i stedet for Ä lagre

12 13 14 14 14 13 13 14

Vi kunne startet med 12, og deretter bare angi hvor mye som mÄ legges til eller trekkes fra for Ä fÄ neste nummer. Og denne sekvensen i delta-koding fÄr utseendet:

12 1 1 0 0 -1 0 1

De transformerede dataene blir ikke mindre enn de opprinnelige, men de er lettere Ă„ komprimere. Bruken av delta-koding fĂžr lĂžpende koding kan vĂŠre svĂŠrt nyttig, samtidig som det forblir tapsfri komprimering.

Delta-koding er en av de fÄ teknikkene som brukes utenfor 8x8-blokkene. Av de 64 DCT-koeffisientene er én bare en konstant bÞlgefunksjon (en ensfarget farge). Den representerer gjennomsnittlig lysstyrke for hver blokk for lysstyrkekomponentene, eller gjennomsnittlig blÄhet for Cb-komponentene, og sÄ videre. Den fÞrste verdien for hver DCT-blokk kalles DC-verdi, og hver DC-verdi blir delta-kodet i forhold til de tidligere. Dermed vil endringen av lysstyrken i den fÞrste blokken pÄvirke alle blokkene.

Det gjenstĂ„r et siste mysterium: hvordan endringen av et enkelt tall kan Ăždelegge hele bildet? Det har forelĂžpig ikke vĂŠrt slike egenskaper ved komprimeringsnivĂ„ene. Svaret ligger i JPEG-headeren. De fĂžrste 500 byte inneholder metadata om bildet – bredde, hĂžyde, osv., og fĂžr vi har jobbet med dem.

Uten headeren er det nesten umulig (eller veldig vanskelig) Ä dekode JPEG. Dette ville se ut som om jeg prÞvde Ä beskrive et maleri for deg, og jeg begynner Ä finne opp ord for Ä formidle inntrykket mitt. Beskrivelsen vil sannsynligvis bli ganske komprimert, siden jeg kan finne pÄ ord med akkurat den betydningen jeg Þnsker Ä formidle, men for alle andre vil de ikke gi mening.

Det hþres dumt ut, men slik skjer det. Hvert JPEG-bilde komprimeres med koder som er spesifikke for det. Ordboken med koder lagres i overskriften. Denne teknikken kalles 'Huffman-koding', og ordboken er en Huffman-tabell. I overskriften er tabellen merket med to byte – 255 og deretter 196. Hver fargekomponent kan ha sin egen tabell.

Endringer i tabellene vil radikalt pÄvirke ethvert bilde. Et godt eksempel er Ä endre 1 til 12 pÄ linje 15.

How the JPEG format works

Dette skjer fordi tabellene angir hvordan man skal lese de enkelte bitene. SÄ langt har vi bare arbeidet med binÊre tall i desimalform. Men dette skjuler for oss det faktum at hvis du vil lagre tallet 1 i en byte, vil det se ut som 00000001, fordi hver byte mÄ inneholde nÞyaktig Ätte biter, selv om man bare trenger én av dem.

Potensielt er dette en stor plassslÞsing hvis du har mange smÄ tall. Huffman-koding er en teknikk som lar oss svekke dette kravet om at hvert tall mÄ ta opp Ätte biter. Dette betyr at hvis du ser to byte:

234 115

SÄ, avhengig av Huffman-tabellen, kan dette vÊre tre tall. For Ä hente dem ut mÄ du fÞrst dele dem opp i separate biter:

11101010 01110011

Deretter konsulterer vi tabellen for Ä forstÄ hvordan de skal grupperes. For eksempel kan dette vÊre de fÞrste seks bitene (111010), som er 58 i desimal, etterfulgt av fem biter (10011), som er 19, og til slutt de siste fire bitene (0011), som er 3.

Derfor er det veldig vanskelig Ä forstÄ byte pÄ dette kompresjonstrinnet. Bytes representerer ikke det som det ser ut til. Jeg vil ikke gÄ inn pÄ detaljene om hvordan man arbeider med tabellen i denne artikkelen, men materialer om dette emnet pÄ nettet er ganske.

Et av de interessante triksene du kan gjÞre, nÄr du vet dette, er Ä skille overskriften fra JPEG og lagre den separat. I praksis vil det si at filen bare kan leses av deg. Facebook gjÞr dette for Ä redusere filene enda mer.

Hva annet kan gjĂžres – litt endre Huffman-tabellen. For andre vil dette se ut som et Ăždelagt bilde. Og bare du vil vite den magiske versjonen for Ă„ fikse det.

La oss oppsummere: hva trenger vi for Ă„ dekode JPEG? Vi trenger:

  1. Å hente ut Huffman-tabellen(e) fra overskriften og dekode bitene.
  2. Hent koeffisientene for den diskrete cosinus-transformasjonen for hver farge- og lysstyrkekomponent for hver 8x8 blokk, ved Ă„ utfĂžre omvendte lengde-kodings- og delta-transformasjoner.
  3. Kombiner cosinusene basert pÄ koeffisientene for Ä fÄ pikselverdier for hver 8x8 blokk.
  4. Skalere fargekomponentene hvis subprĂžve ble utfĂžrt (denne informasjonen finnes i headeren).
  5. Konverter de oppnÄdde YCbCr-verdiene til RGB for hver piksel.
  6. Vis bildet pÄ skjermen!

En seriĂžs oppgave for Ă„ bare se pĂ„ et bilde av en katt! Men det jeg liker med dette – er at det viser hvor menneskesentrert JPEG-teknologien er. Den er basert pĂ„ nyansene i vĂ„r oppfatning, som gjĂžr det mulig Ă„ oppnĂ„ mye bedre komprimering enn vanlige teknologier. Og nĂ„, ved Ă„ forstĂ„ hvordan JPEG fungerer, kan man forestille seg hvordan disse teknologiene kan overfĂžres til andre omrĂ„der. For eksempel kan delta-koding i video gi betydelig filreduksjon, ettersom det ofte finnes store omrĂ„der som ikke endres fra ramme til ramme (som bakgrunnen).

Koden som ble brukt i artikkelen, er Äpen og inneholder instruksjoner for Ä erstatte bildene med egne.

Kilde: habr.com

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster