Ako funguje formát JPEG

Obrázky vo formáte JPEG sú v našom digitálnom živote všadeprítomné, no za touto vrstvou vedomia sú algoritmy, ktoré odstraňujú detaily, ktoré ľudské oko nepostrehne. Výsledkom je najvyššia vizuálna kvalita pri najmenšej veľkosti súboru – ale ako presne to celé funguje? Pozrime sa, čo presne naše oči nevidia!

Ako funguje formát JPEG

Je ľahké považovať za samozrejmosť možnosť poslať fotografiu priateľovi a nestarať sa o to, aké zariadenie, prehliadač alebo operačný systém používajú – no nie vždy to tak bolo. Začiatkom osemdesiatych rokov mohli počítače ukladať a zobrazovať digitálne obrázky, ale existovalo veľa konkurenčných nápadov o najlepšom spôsobe, ako to urobiť. Nemohli ste len poslať obrázok z jedného počítača do druhého a dúfať, že to bude fungovať.

Na vyriešenie tohto problému bola v roku 1986 zostavená komisia odborníkov z celého sveta s názvom „Spoločná skupina fotografických expertov» (Joint Photographic Experts Group, JPEG), založená ako spoločné úsilie Medzinárodnej organizácie pre normalizáciu (ISO) a Medzinárodnej elektrotechnickej komisie (IEC), dvoch medzinárodných normalizačných organizácií so sídlom v Ženeve vo Švajčiarsku.

Skupina ľudí s názvom JPEG vytvorila v roku 1992 štandard kompresie digitálneho obrazu JPEG. Každý, kto používal internet, sa pravdepodobne stretol s obrázkami v kódovaní JPEG. Toto je najbežnejší spôsob kódovania, odosielania a ukladania obrázkov. Od webových stránok cez e-mail až po sociálne médiá sa JPEG používa miliardy krát denne – prakticky vždy, keď si prezeráme obrázok online alebo ho odošleme. Bez JPEG by bol web menej farebný, pomalší a pravdepodobne by mal menej obrázkov mačiek!

Tento článok je o tom, ako dekódovať obrázok JPEG. Inými slovami, čo je potrebné na konverziu komprimovaných údajov uložených v počítači na obrázok, ktorý sa zobrazí na obrazovke. Toto stojí za to vedieť, nielen preto, že je dôležité pochopiť technológiu, ktorú používame každý deň, ale aj preto, že odblokovaním úrovní kompresie sa dozvieme viac o vnímaní a videní a o tom, na aké detaily sú naše oči najcitlivejšie.

Navyše hranie sa s obrázkami týmto spôsobom je veľmi zaujímavé.

Ako funguje formát JPEG

Pohľad do vnútra JPEG

V počítači je všetko uložené ako postupnosť binárnych čísel. Typicky sú tieto bity, nuly a jednotky, zoskupené do skupín po ôsmich, aby tvorili bajty. Keď otvoríte obrázok JPEG na počítači, niečo (prehliadač, operačný systém, niečo iné) musí dekódovať bajty, čím sa obnoví pôvodný obrázok ako zoznam farieb, ktoré je možné zobraziť.

Ak si stiahnete túto sladkosť fotka mačky a otvorte ho v textovom editore, uvidíte kopu nesúvislých znakov.

Ako funguje formát JPEG
Tu používam program Poznámkový blok ++ na preskúmanie obsahu súboru, pretože bežné textové editory, ako je Poznámkový blok v systéme Windows, po uložení binárny súbor poškodia a už nebudú vyhovovať formátu JPEG.

Otvorenie obrázka v textovom procesore zmätie počítač, rovnako ako si popletiete mozog, keď si pretriete oči a začnete vidieť farebné škvrny!

Tieto škvrny, ktoré vidíte, sú známe ako fosfénya nie sú výsledkom svetelného podnetu alebo halucinácie generovanej mysľou. Vyskytujú sa, pretože váš mozog si myslí, že akékoľvek elektrické signály v optických nervoch prenášajú informácie o svetle. Mozog musí urobiť tieto predpoklady, pretože neexistuje spôsob, ako zistiť, či je signál zvuk, vízia alebo niečo iné. Všetky nervy v tele prenášajú presne rovnaké elektrické impulzy. Tlakom na oči vysielate signály, ktoré nie sú vizuálne, ale aktivujete očné receptory, ktoré váš mozog interpretuje – v tomto prípade nesprávne – ako niečo vizuálne. Môžete doslova vidieť tlak!

Je zábavné premýšľať o tom, ako podobné sú počítače mozgu, ale je to tiež užitočná analógia na ilustráciu toho, do akej miery význam údajov – či už prenášaných cez telo nervami alebo uložených v počítači – závisí od toho, ako sa interpretujú. Všetky binárne dáta sa skladajú z 0 a 1, základných komponentov, ktoré môžu sprostredkovať informácie akéhokoľvek druhu. Váš počítač často príde na to, ako ich interpretovať pomocou kľúčov, ako sú prípony súborov. Teraz ho nútime, aby ich interpretoval ako text, pretože to textový editor očakáva.

Aby sme pochopili, ako dekódovať JPEG, musíme vidieť samotné pôvodné signály – binárne dáta. Dá sa to urobiť pomocou hexadecimálneho editora alebo priamo na pôvodná webová stránka s článkom! Je tu obrázok, vedľa ktorého sú v textovom poli všetky jeho bajty (okrem hlavičky), uvedené v desiatkovej forme. Môžete ich zmeniť a skript sa znova zakóduje a vytvorí nový obrázok za chodu.

Ako funguje formát JPEG

Hraním s týmto editorom sa môžete veľa naučiť. Viete napríklad povedať, v akom poradí sú pixely uložené?

Zvláštne na tomto príklade je, že zmena niektorých čísel nemá vplyv na obrázok vôbec, ale ak napríklad v prvom riadku vymeníte číslo 17 za 0, fotografia sa úplne zničí!

Ako funguje formát JPEG

Ďalšie zmeny, ako napríklad nahradenie 7 na riadku 1988 číslom 254, menia farbu, ale iba nasledujúcich pixelov.

Ako funguje formát JPEG

Azda najzvláštnejšie je, že niektoré čísla menia nielen farbu, ale aj tvar obrazu. Zmeňte 70 v riadku 12 na 2 a pozrite sa na horný riadok obrázka, aby ste videli, čo tým myslím.

Ako funguje formát JPEG

A bez ohľadu na to, aký obrázok JPEG použijete, pri úprave bajtov vždy nájdete tieto tajomné šachové vzory.

Pri hraní s editorom je ťažké pochopiť, ako sa fotografia vytvára z týchto bajtov, pretože kompresia JPEG pozostáva z troch rôznych technológií, ktoré sa aplikujú postupne v úrovniach. Budeme študovať každý zvlášť, aby sme odhalili záhadné správanie, ktoré vidíme.

Tri úrovne kompresie JPEG:

  1. Podvzorkovanie farieb.
  2. Diskrétna kosínusová transformácia a vzorkovanie.
  3. Kódovanie dĺžky chodu, delta и Huffman

Aby ste mali predstavu o veľkosti kompresie, všimnite si, že obrázok vyššie predstavuje 79 819 čísel alebo približne 79 KB. Ak by sme ho uložili bez kompresie, každý pixel by vyžadoval tri čísla – pre červenú, zelenú a modrú zložku. To by predstavovalo 917 700 čísel alebo približne. 917 kB. V dôsledku kompresie JPEG sa výsledný súbor zmenšil viac ako 10-krát!

V skutočnosti môže byť tento obrázok komprimovaný oveľa viac. Nižšie sú dva obrázky vedľa seba - fotografia vpravo bola skomprimovaná na 16 KB, teda 57-krát menšia ako nekomprimovaná verzia!

Ako funguje formát JPEG

Ak sa pozriete pozorne, uvidíte, že tieto obrázky nie sú totožné. Oba sú obrázky s kompresiou JPEG, no ten pravý je objemovo oveľa menší. Tiež to vyzerá trochu horšie (pozrite sa na štvorčeky farby pozadia). Preto sa JPEG nazýva aj stratová kompresia; Počas procesu kompresie sa obraz zmení a stratí niektoré detaily.

1. Podvzorkovanie farieb

Tu je obrázok s aplikovanou iba prvou úrovňou kompresie.

Ako funguje formát JPEG
(Interaktívna verzia - in originálny články). Odstránenie jedného čísla zničí všetky farby. Ak sa však odstráni práve šesť čísel, nemá to na obrázok prakticky žiadny vplyv.

Teraz sú čísla o niečo jednoduchšie dešifrovať. Ide takmer o jednoduchý zoznam farieb, v ktorom každý bajt zmení presne jeden pixel, no zároveň je už polovičný oproti nekomprimovanému obrázku (čo by v tejto zmenšenej veľkosti zabralo cca 300 KB). Uhádnete prečo?

Môžete vidieť, že tieto čísla nepredstavujú štandardnú červenú, zelenú a modrú zložku, pretože ak nahradíme všetky čísla nulami, dostaneme zelený obrázok (a nie biely).

Ako funguje formát JPEG

Je to preto, že tieto bajty znamenajú Y (jas),

Ako funguje formát JPEG

Cb (relatívna modrosť),

Ako funguje formát JPEG

a Cr (relatívne začervenanie).

Ako funguje formát JPEG

Prečo nepoužiť RGB? Koniec koncov, takto funguje väčšina moderných obrazoviek. Váš monitor môže zobraziť akúkoľvek farbu, vrátane červenej, zelenej a modrej, s rôznou intenzitou pre každý pixel. Biela sa získa zapnutím všetkých troch na plný jas a čierna sa získa ich vypnutím.

Ako funguje formát JPEG

To je tiež veľmi podobné tomu, ako funguje ľudské oko. Farebné receptory v našich očiach sa nazývajú „šišky“, a sú rozdelené do troch typov, z ktorých každý je citlivejší buď na červenú, zelenú alebo modrú farbu [Čapíky typu S sú citlivé vo fialovo-modrej (S z anglického Short - krátkovlnné spektrum), M -typ - v zeleno-žltej (M z anglického Medium - stredná vlna) a typ L - v žlto-červenej (L z anglického Long - dlhovlnná) časti spektra. Prítomnosť týchto troch typov čapíkov (a tyčiniek, ktoré sú citlivé v smaragdovo zelenej časti spektra) dáva človeku farebné videnie. / približne. preklad]. tyčinky, ďalší typ fotoreceptorov v našich očiach, je schopný detekovať zmeny jasu, ale je oveľa citlivejší na farby. Naše oči majú asi 120 miliónov tyčiniek a iba 6 miliónov čapíkov.

To je dôvod, prečo naše oči oveľa lepšie zisťujú zmeny jasu ako zmeny farby. Ak oddelíte farbu od jasu, môžete odstrániť trochu farby a nikto si nič nevšimne. Chroma subsampling je proces reprezentácie farebných zložiek obrazu s nižším rozlíšením ako jasové zložky. Vo vyššie uvedenom príklade má každý pixel presne jeden komponent Y a každá jednotlivá skupina štyroch pixelov má presne jeden komponent Cb a jeden Cr. Preto obrázok obsahuje štyrikrát menej farebných informácií ako originál.

Farebný priestor YCbCr sa používa nielen v JPEG. Pôvodne bol vynájdený v roku 1938 pre televízne programy. Nie každý má farebný televízor, takže oddelenie farieb a jasu umožnilo každému získať rovnaký signál a televízory bez farby jednoducho používali iba jasovú zložku.

Takže odstránenie jedného čísla z editora úplne zničí všetky farby. Komponenty sú uložené v tvare YYYY Cb Cr (v skutočnosti nie nevyhnutne v tomto poradí - poradie uloženia je uvedené v hlavičke súboru). Odstránenie prvého čísla spôsobí, že prvá hodnota Cb bude vnímaná ako Y, Cr ako Cb a vo všeobecnosti budete mať dominový efekt, ktorý zmení všetky farby obrázka.

Špecifikácia JPEG vás nenúti používať YCbCr. Väčšina súborov ho však používa, pretože vytvára lepšie prevzorkované obrázky ako RGB. Ale nemusíte ma brať za slovo. Presvedčte sa sami v tabuľke nižšie, ako bude vyzerať podvzorkovanie každého jednotlivého komponentu v RGB aj YCbCr.

Ako funguje formát JPEG
(Interaktívna verzia - in originálny články).

Odstránenie modrej nie je také výrazné ako pri červenej alebo zelenej. To kvôli šiestim miliónom čapíkov vo vašich očiach je asi 64 % citlivých na červenú, 32 % na zelenú a 2 % na modrú.

Najlepšie je vidieť prevzorkovanie zložky Y (vľavo dole). Aj malá zmena je badateľná.

Konverzia obrázka z RGB na YCbCr nezmenšuje veľkosť súboru, ale uľahčuje nájdenie menej viditeľných detailov, ktoré je možné odstrániť. V druhej fáze dochádza k stratovej kompresii. Je založený na myšlienke prezentácie údajov v komprimovanejšej forme.

2. Diskrétna kosínusová transformácia a vzorkovanie

Táto úroveň kompresie je z väčšej časti to, o čom je JPEG. Po prevode farieb na YCbCr sú komponenty komprimované jednotlivo, takže sa môžeme sústrediť len na komponent Y A takto vyzerajú bajty komponentu Y po nanesení tejto vrstvy.

Ako funguje formát JPEG
(Interaktívna verzia - in originálny články). V interaktívnej verzii sa kliknutím na pixel posunie editor na riadok, ktorý ho predstavuje. Skúste odobrať čísla od konca alebo pridať niekoľko núl k určitému číslu.

Na prvý pohľad to vyzerá na veľmi zlú kompresiu. Na obrázku je 100 000 pixelov a na vyjadrenie ich jasu (zložky Y) je potrebných 102 400 čísel – to je horšie ako komprimovať vôbec nič!

Všimnite si však, že väčšina z týchto čísel je nula. Navyše všetky tie nuly na konci riadkov je možné odstrániť bez zmeny obrazu. Zostáva asi 26 000 čísel, čo je takmer 4-krát menej!

Táto úroveň obsahuje tajomstvo šachových vzorov. Na rozdiel od iných efektov, ktoré sme videli, vzhľad týchto vzorov nie je závada. Sú stavebnými kameňmi celého obrazu. Každý riadok editora obsahuje presne 64 čísel, koeficienty diskrétnej kosínusovej transformácie (DCT) zodpovedajúce intenzitám 64 jedinečných vzorov.

Tieto vzory sú tvorené na základe kosínusového grafu. Niektoré z nich vyzerajú takto:

Ako funguje formát JPEG
8 z 64 kurzov

Nižšie je obrázok zobrazujúci všetkých 64 vzorov.

Ako funguje formát JPEG
(Interaktívna verzia - in originálny články).

Tieto vzory sú obzvlášť dôležité, pretože tvoria základ obrázkov 8x8. Ak nie ste oboznámení s lineárnou algebrou, znamená to, že z týchto 8 vzorov možno vytvoriť akýkoľvek obrázok s rozmermi 8x64. DCT je proces rozdelenia obrázkov na bloky 8x8 a prevod každého bloku na kombináciu týchto 64 koeficientov.

Zdá sa ako kúzlo, že každý obrázok môže byť zložený zo 64 špecifických vzorov. To je však to isté, ako keby ste povedali, že každé miesto na Zemi možno opísať dvoma číslami – zemepisnou šírkou a dĺžkou [udávajúce pologule / cca. preklad]. Povrch Zeme často považujeme za dvojrozmerný, takže nám stačia dve čísla. Obrázok 8x8 má 64 rozmerov, takže potrebujeme 64 čísel.

Zatiaľ nie je jasné, ako nám to pomáha z hľadiska kompresie. Ak potrebujeme 64 čísel na reprezentáciu obrázka 8x8, prečo by to bolo lepšie ako len uložiť 64 zložiek jasu? Robíme to z rovnakého dôvodu, prečo sme zmenili tri čísla RGB na tri čísla YCbCr: umožňuje nám to odstrániť jemné detaily.

Je ťažké presne vidieť, aké detaily sú v tejto fáze odstránené, pretože JPEG aplikuje DCT na bloky 8x8. Nikto nám však nezakazuje aplikovať to na celý obraz. Takto vyzerá DCT pre komponent Y aplikovaný na celý obrázok:

Ako funguje formát JPEG

Viac ako 60 000 čísel je možné odstrániť od konca prakticky bez viditeľných zmien na fotografii.

Ako funguje formát JPEG

Upozorňujeme však, že ak vynulujeme prvých päť čísel, rozdiel bude zrejmý.

Ako funguje formát JPEG

Čísla na začiatku predstavujú nízke frekvenčné zmeny v obraze, ktoré naše oči najlepšie zachytávajú. Čísla ku koncu označujú zmeny vo vysokých frekvenciách, ktoré je ťažšie si všimnúť. Aby sme „videli, čo oko nevidí“, môžeme izolovať tieto vysokofrekvenčné detaily vynulovaním prvých 5000 čísel.

Ako funguje formát JPEG

Vidíme všetky oblasti obrázka, kde dochádza k najväčšej zmene z pixelu na pixel. Vyniknú mačacie oči, jeho fúzy, froté deka a tiene v ľavom dolnom rohu. Môžete ísť ďalej vynulovaním prvých 10 000 čísel:

Ako funguje formát JPEG

20 000:

Ako funguje formát JPEG

40 000:

Ako funguje formát JPEG

60 000:

Ako funguje formát JPEG

Tieto vysokofrekvenčné detaily odstráni JPEG počas fázy kompresie. Pri prevode farieb na koeficienty DCT nedochádza k žiadnym stratám. K strate dochádza v kroku vzorkovania, kde sa odstránia vysokofrekvenčné alebo takmer nulové hodnoty. Keď znížite kvalitu ukladania JPEG, program zvýši prah pre počet odstránených hodnôt, čím sa zníži veľkosť súboru, ale obrázok bude viac pixelovaný. Preto obrázok v prvej sekcii, ktorý bol 57-krát menší, vyzeral takto. Každý blok 8x8 bol zastúpený oveľa menším počtom DCT koeficientov v porovnaní s kvalitnejšou verziou.

Môžete vytvoriť taký skvelý efekt, ako je postupné streamovanie obrázkov. Môžete zobraziť rozmazaný obrázok, ktorý sa stáva čoraz detailnejším, ako sa sťahuje viac a viac koeficientov.

Tu je len pre zábavu to, čo získate použitím iba 24 000 čísel:

Ako funguje formát JPEG

Alebo len 5000:

Ako funguje formát JPEG

Veľmi rozmazané, ale nejako rozpoznateľné!

3. Kódovanie dĺžky behu, delta a Huffman

Doteraz boli všetky stupne kompresie stratové. Posledná etapa naopak prebieha bez strát. Nevymaže informácie, ale výrazne zníži veľkosť súboru.

Ako môžete niečo komprimovať bez toho, aby ste zahodili informácie? Predstavte si, ako by sme opísali jednoduchý čierny obdĺžnik s rozmermi 700 x 437.

JPEG na to používa 5000 čísel, ale dajú sa dosiahnuť oveľa lepšie výsledky. Viete si predstaviť schému kódovania, ktorá by opísala takýto obrázok na čo najmenší počet bajtov?

Minimálna schéma, s ktorou som mohol prísť, používa štyri: tri reprezentujú farbu a štvrtú označuje, koľko pixelov má táto farba. Myšlienka reprezentovať opakujúce sa hodnoty týmto zhusteným spôsobom sa nazýva run-length kódovanie. Je bezstratový, pretože dokážeme obnoviť zakódované dáta do pôvodnej podoby.

Súbor JPEG s čiernym obdĺžnikom je oveľa väčší ako 4 bajty – nezabudnite, že na úrovni DCT sa kompresia aplikuje na bloky 8x8 pixelov. Preto potrebujeme minimálne jeden koeficient DCT na každých 64 pixelov. Potrebujeme ho, pretože namiesto uloženia jedného koeficientu DCT, za ktorým nasleduje 63 núl, kódovanie dĺžky cyklu nám umožňuje uložiť jedno číslo a uviesť, že „všetky ostatné sú nuly“.

Delta kódovanie je technika, v ktorej každý bajt obsahuje rozdiel od nejakej hodnoty, a nie absolútnu hodnotu. Preto úprava určitých bajtov zmení farbu všetkých ostatných pixelov. Napríklad namiesto skladovania

12 13 14 14 14 13 13 14

Mohli by sme začať s 12 a potom jednoducho uviesť, koľko musíme pridať alebo ubrať, aby sme dostali ďalšie číslo. A táto sekvencia v delta kódovaní má tvar:

12 1 1 0 0 -1 0 1

Prevedené údaje nie sú menšie ako pôvodné údaje, ale je jednoduchšie ich komprimovať. Použitie delta kódovania pred kódovaním dĺžky spustenia môže veľmi pomôcť, pričom stále ide o bezstratovú kompresiu.

Delta kódovanie je jednou z mála techník používaných mimo blokov 8x8. Zo 64 DCT koeficientov je jeden jednoducho konštantná vlnová funkcia (plná farba). Predstavuje priemerný jas každého bloku pre zložky luma alebo priemernú modrosť pre zložky Cb atď. Prvá hodnota každého bloku DCT sa nazýva hodnota DC a každá hodnota DC je delta kódovaná vzhľadom na predchádzajúce. Preto zmena jasu prvého bloku ovplyvní všetky bloky.

Posledná záhada zostáva: ako zmena jednotného čísla úplne zničí celý obraz? Úrovne kompresie doteraz takéto vlastnosti nemali. Odpoveď je v hlavičke JPEG. Prvých 500 bajtov obsahuje metadáta o obrázku – šírku, výšku atď., a s tými sme ešte nepracovali.

Bez hlavičky je takmer nemožné (alebo veľmi ťažké) dekódovať JPEG. Bude to vyzerať, akoby som sa vám snažil opísať obrázok a začal vymýšľať slová, aby som vyjadril svoj dojem. Opis bude asi dosť zhustený, keďže si viem vymyslieť slová presne s významom, ktorý chcem sprostredkovať, ale pre všetkých ostatných nebudú dávať zmysel.

Znie to hlúpo, ale presne to sa stáva. Každý obrázok JPEG je komprimovaný pomocou špecifických kódov. Kódový slovník je uložený v hlavičke. Táto technika sa nazýva Huffmanov kód a slovná zásoba sa nazýva Huffmanova tabuľka. V záhlaví je tabuľka označená dvoma bajtmi - 255 a potom 196. Každá farebná zložka môže mať svoju tabuľku.

Zmeny v tabuľkách radikálne ovplyvnia akýkoľvek obrázok. Dobrým príkladom je zmena 15. riadku na 1.

Ako funguje formát JPEG

Stáva sa to preto, že tabuľky špecifikujú, ako sa majú jednotlivé bity čítať. Doteraz sme pracovali iba s binárnymi číslami v desiatkovom tvare. To nám však skrýva skutočnosť, že ak chcete uložiť číslo 1 do bajtu, bude to vyzerať ako 00000001, pretože každý bajt musí mať presne osem bitov, aj keď je potrebný iba jeden z nich.

To je potenciálne veľké plytvanie miestom, ak máte veľa malých čísel. Huffmanov kód je technika, ktorá nám umožňuje zmierniť požiadavku, že každé číslo musí zaberať osem bitov. To znamená, že ak vidíte dva bajty:

234 115

Potom, v závislosti od Huffmanovej tabuľky, to môžu byť tri čísla. Ak ich chcete extrahovať, musíte ich najskôr rozdeliť na jednotlivé bity:

11101010 01110011

Potom sa pozrieme na tabuľku, aby sme zistili, ako ich zoskupiť. Môže to byť napríklad prvých šesť bitov (111010) alebo 58 v desiatkovej sústave, po ktorých nasleduje päť bitov (10011) alebo 19 a nakoniec posledné štyri bity (0011) alebo 3.

Preto je v tomto štádiu kompresie veľmi ťažké porozumieť bajtom. Bajty nereprezentujú to, čo sa zdajú. V tomto článku sa nebudem venovať detailom práce s tabuľkou, ale materiály o tejto problematike online je postačujúce.

Jeden zaujímavý trik, ktorý môžete s týmito znalosťami urobiť, je oddeliť hlavičku od JPEG a uložiť ju oddelene. V skutočnosti sa ukázalo, že súbor môžete čítať iba vy. Facebook to robí, aby boli súbory ešte menšie.

Čo sa ešte dá urobiť, je trochu zmeniť Huffmanov stôl. Pre ostatných to bude vyzerať ako rozbitý obrázok. A len vy budete poznať magický spôsob, ako to opraviť.

Poďme si to zhrnúť: čo je teda potrebné na dekódovanie JPEG? Potrebné:

  1. Extrahujte Huffmanove tabuľky z hlavičky a dekódujte bity.
  2. Extrahujte diskrétne kosínusové transformačné koeficienty pre každú farebnú a jasovú zložku pre každý blok 8x8, vykonajte inverznú transformáciu run-length a delta kódovanie.
  3. Kombinujte kosínusy na základe koeficientov, aby ste získali hodnoty pixelov pre každý blok 8x8.
  4. Škálujte farebné zložky, ak sa vykonalo podvzorkovanie (táto informácia je v hlavičke).
  5. Preveďte výsledné hodnoty YCbCr pre každý pixel na RGB.
  6. Zobrazte obrázok na obrazovke!

Vážna práca za jednoduché prezeranie fotografie s mačkou! Čo sa mi na nej však páči je, že ukazuje, aká je JPEG technológia zameraná na človeka. Vychádza zo zvláštností nášho vnímania a umožňuje nám dosiahnuť oveľa lepšiu kompresiu ako konvenčné technológie. A teraz, keď sme pochopili, ako JPEG funguje, vieme si predstaviť, ako možno tieto technológie preniesť do iných oblastí. Napríklad delta kódovanie vo videu môže poskytnúť výrazné zníženie veľkosti súboru, pretože často existujú celé oblasti, ktoré sa medzi snímkami nemenia (napríklad pozadie).

Kód použitý v článku, je otvorený a obsahuje pokyny, ako nahradiť obrázky vlastnými.

Zdroj: hab.com

Pridať komentár