Hogyan működik a JPEG formátum

A JPEG képek mindenütt jelen vannak digitális életünkben, de a tudatosság e mögött olyan algoritmusok állnak, amelyek eltávolítják az emberi szem számára nem észlelhető részleteket. Az eredmény a legjobb vizuális minőség a legkisebb fájlméretben – de hogyan is működik mindez pontosan? Lássuk, pontosan mit nem lát a szemünk!

Hogyan működik a JPEG formátum

Könnyen magától értetődőnek tekinthetjük, hogy elküldhetünk egy fényképet egy barátunknak, és nem kell azon aggódni, hogy milyen eszközt, böngészőt vagy operációs rendszert használ – de ez nem mindig volt így. Az 1980-as évek elejére a számítógépek képesek voltak digitális képeket tárolni és megjeleníteni, de sok versengő ötlet volt ennek a legjobb módjáról. Nem küldhetsz egyszerűen képet egyik számítógépről a másikra, és remélheted, hogy működni fog.

Ennek a problémának a megoldására 1986-ban a világ minden tájáról összeállítottak egy szakértői bizottságot "Fényképészeti szakértők közös csoportja» (Joint Photography Experts Group, JPEG), amely a Nemzetközi Szabványügyi Szervezet (ISO) és a Nemzetközi Elektrotechnikai Bizottság (IEC) közös erőfeszítéseként jött létre, két nemzetközi szabványügyi szervezet, amelyek központja a svájci Genfben található.

A JPEG nevű embercsoport 1992-ben létrehozta a JPEG digitális képtömörítési szabványt. Aki használta az internetet, valószínűleg találkozott már JPEG kódolású képekkel. Ez a leggyakoribb módja a képek kódolásának, küldésének és tárolásának. A weboldalaktól az e-maileken át a közösségi médiáig a JPEG-formátumot naponta több milliárdszor használják – gyakorlatilag minden alkalommal, amikor egy képet online nézünk vagy elküldünk. JPEG nélkül a web kevésbé színes, lassabb lenne, és valószínűleg kevesebb macskakép lenne benne!

Ez a cikk a JPEG kép dekódolásáról szól. Más szóval, mi kell ahhoz, hogy a számítógépen tárolt tömörített adatokat a képernyőn megjelenő képpé alakítsák. Ezt nem csak azért érdemes tudni, mert fontos megérteni a mindennapi technológiát, hanem azért is, mert a tömörítési szintek feloldásával többet tudunk meg az észlelésről és a látásról, valamint arról, hogy szemünk milyen részletekre a legérzékenyebb.

Ráadásul a képekkel ilyen módon játszani nagyon érdekes.

Hogyan működik a JPEG formátum

A JPEG belsejébe nézve

A számítógépen minden bináris számsorozatként van tárolva. Általában ezek a bitek, nullák és egyesek, nyolcas csoportokba vannak csoportosítva, hogy bájtokat alkossanak. Amikor megnyit egy JPEG képet a számítógépen, valaminek (böngészőnek, operációs rendszernek, valami másnak) dekódolnia kell a bájtokat, visszaállítva az eredeti képet a megjeleníthető színek listájaként.

Ha letöltöd ezt az édességet fénykép egy macskáról és nyissa meg egy szövegszerkesztőben, akkor egy csomó inkoherens karaktert fog látni.

Hogyan működik a JPEG formátum
Itt a Notepad++ segítségével vizsgálom a fájl tartalmát, mivel a szokásos szövegszerkesztők, mint például a Windows Notepad, a mentés után megrongálják a bináris fájlt, és az már nem felel meg a JPEG formátumnak.

Egy kép megnyitása szövegszerkesztőben összezavarja a számítógépet, akárcsak az agyát, amikor megdörzsöli a szemét, és színfoltokat lát!

Ezeket a foltokat, amelyeket lát, úgy ismerik foszfének, és nem az elme által generált fényinger vagy hallucináció eredménye. Azért fordulnak elő, mert az agy úgy gondolja, hogy a látóidegekben lévő elektromos jelek információt közvetítenek a fényről. Az agynak meg kell tennie ezeket a feltételezéseket, mert nem lehet tudni, hogy egy jel hang, látás vagy valami más. A test minden idege pontosan ugyanazokat az elektromos impulzusokat továbbítja. A szemedre gyakorolt ​​nyomással olyan jeleket küldesz, amelyek nem vizuálisak, hanem a szem receptorait aktiválják, amit az agyad - jelen esetben hibásan - vizuálisan értelmez. Szó szerint láthatod a nyomást!

Vicces belegondolni, hogy a számítógépek mennyire hasonlítanak az agyhoz, de hasznos analógia annak szemléltetésére is, hogy az adatok jelentése – akár az idegek által átvitt, akár a számítógépen tárolt adatok – mennyire függ attól, hogyan értelmezik őket. Minden bináris adat XNUMX-ból és XNUMX-ből áll, ezek az alapvető összetevők, amelyek bármilyen információt továbbíthatnak. A számítógép gyakran kitalálja, hogyan értelmezze azokat olyan nyomok segítségével, mint például a fájlkiterjesztések. Most kényszerítjük, hogy szövegként értelmezze őket, mert a szövegszerkesztő ezt várja el.

A JPEG dekódolásának megértéséhez meg kell látnunk magukat az eredeti jeleket - a bináris adatokat. Ez megtehető hexadecimális szerkesztővel vagy közvetlenül a az eredeti cikk weboldala! Van egy kép, amely mellett a szövegmezőben az összes bájtja (a fejléc kivételével) decimális formában jelenik meg. Módosíthatja őket, és a szkript menet közben újrakódolja és új képet készít.

Hogyan működik a JPEG formátum

Sokat tanulhatsz, ha játszol ezzel a szerkesztővel. Például meg tudja mondani, hogy a képpontok milyen sorrendben vannak tárolva?

Ebben a példában az a furcsa, hogy egyes számok megváltoztatása egyáltalán nem befolyásolja a képet, de például ha az első sorban a 17-es számot 0-ra cseréljük, akkor a fotó teljesen tönkremegy!

Hogyan működik a JPEG formátum

Más változtatások, mint például az 7-as vonal 1988-es helyére a 254-es szám, megváltoztatja a színt, de csak a következő képpontokét.

Hogyan működik a JPEG formátum

A legfurcsább talán az, hogy egyes számok nemcsak a kép színét, hanem formáját is megváltoztatják. Módosítsa a 70. sorban a 12-et 2-re, és nézze meg a kép felső sorát, hogy lássa, mire gondolok.

Hogyan működik a JPEG formátum

És nem számít, milyen JPEG képet használ, a bájtok szerkesztésekor mindig megtalálja ezeket a titokzatos sakkmintákat.

A szerkesztővel való játék során nehéz megérteni, hogyan jön létre egy fénykép ezekből a bájtokból, mivel a JPEG-tömörítés három különböző technológiából áll, amelyeket szintek szerint egymás után alkalmaznak. Mindegyiket külön tanulmányozzuk, hogy feltárjuk a rejtélyes viselkedést, amit látunk.

A JPEG tömörítés három szintje:

  1. Színes mintavételezés.
  2. Diszkrét koszinusz transzformáció és mintavétel.
  3. Futtatási hossz kódolás, delta и Huffman

Ahhoz, hogy képet kapjon a tömörítés mértékéről, vegye figyelembe, hogy a fenti kép 79 819 számot, azaz körülbelül 79 KB-ot ábrázol. Ha tömörítés nélkül tárolnánk, minden pixelnek három számra lenne szüksége - a piros, zöld és kék komponensekhez. Ez 917 700 számot jelentene, vagyis kb. 917 KB. A JPEG tömörítés eredményeként a végleges fájl több mint 10-szeresére csökkent!

Valójában ez a kép sokkal jobban tömöríthető. Lent két kép egymás mellett - a jobb oldali fotó 16 KB-ra lett tömörítve, vagyis 57-szer kisebb, mint a tömörítetlen változat!

Hogyan működik a JPEG formátum

Ha alaposan megnézi, látni fogja, hogy ezek a képek nem azonosak. Mindkettő JPEG tömörítésű kép, de a jobb oldali sokkal kisebb térfogatú. Kicsit rosszabbul is néz ki (nézd meg a háttérszín négyzeteit). Ezért a JPEG-et veszteséges tömörítésnek is nevezik; A tömörítési folyamat során a kép megváltozik, és elveszít néhány részletet.

1. Színes részmintavétel

Itt van egy kép, amelyen csak az első szintű tömörítést alkalmazták.

Hogyan működik a JPEG formátum
(Interaktív változat - be eredeti cikkek). Egy szám eltávolítása megsemmisíti az összes színt. Ha azonban pontosan hat számot távolítunk el, annak gyakorlatilag nincs hatása a képre.

Most egy kicsit könnyebben megfejthetők a számok. Ez szinte egy egyszerű színlista, amelyben minden bájt pontosan egy pixelt változtat, ugyanakkor már a fele akkora, mint a tömörítetlen kép (ami ebben a csökkentett méretben kb. 300 KB-ot foglalna el). Kitalálod miért?

Látható, hogy ezek a számok nem a szabványos piros, zöld és kék komponenseket jelentik, hiszen ha az összes számot nullára cseréljük, zöld képet kapunk (nem fehéret).

Hogyan működik a JPEG formátum

Ez azért van, mert ezek a bájtok az Y-t (fényerő) jelentik,

Hogyan működik a JPEG formátum

Cb (relatív kékség),

Hogyan működik a JPEG formátum

és Cr (relatív vörösség) képek.

Hogyan működik a JPEG formátum

Miért nem használ RGB-t? Hiszen a legtöbb modern képernyő így működik. A monitor bármilyen színt képes megjeleníteni, beleértve a vöröset, a zöldet és a kéket is, minden pixelhez eltérő intenzitással. A fehéret úgy kapjuk meg, hogy mindhármat teljes fényerővel bekapcsoljuk, a feketét pedig kikapcsoljuk.

Hogyan működik a JPEG formátum

Ez is nagyon hasonlít az emberi szem működésére. A szemünk színreceptorait "kúpok“, és három típusra oszthatók, amelyek mindegyike érzékenyebb a vörös, zöld vagy kék színekre [az S-típusú kúpok érzékenyek az ibolya-kékben (S az angol Short - rövidhullámú spektrumból), M -típusú - a spektrum zöld-sárga (az angol Medium-ból M - középhullámú), és L-típusú - a sárga-vörös (L az angol Long - hosszúhullámú) részein. Ennek a háromféle kúpnak (és a spektrum smaragdzöld részében érzékeny rúdnak) jelenléte színlátást ad az embernek. / kb. ford.]. pálca, egy másik típusú fotoreceptor a szemünkben, képes érzékelni a fényerő változásait, de sokkal érzékenyebb a színekre. Szemünkben körülbelül 120 millió rúd és csak 6 millió kúp van.

Ez az oka annak, hogy szemünk sokkal jobban érzékeli a fényerő változásait, mint a színváltozásokat. Ha elválasztja a színt a fényerőtől, eltávolíthat egy kis színt, és senki nem fog észrevenni semmit. A színárnyalat-almintavétel az a folyamat, amelynek során a kép színösszetevőit kisebb felbontásban reprezentálják, mint a fénysűrűség-komponenseket. A fenti példában minden pixelnek pontosan egy Y komponense van, és minden egyes négy képpontból álló csoportnak pontosan egy Cb és egy Cr komponense van. Ezért a kép négyszer kevesebb színinformációt tartalmaz, mint az eredeti.

Az YCbCr színteret nem csak a JPEG-ben használják. Eredetileg 1938-ban találták ki televíziós műsorokhoz. Nem mindenkinek van színes tévéje, így a szín és a fényerő szétválasztása lehetővé tette, hogy mindenki ugyanazt a jelet kapja, a szín nélküli tévék pedig egyszerűen csak a fényerő-komponenst használták.

Tehát egy szám eltávolítása a szerkesztőből teljesen tönkreteszi az összes színt. A komponensek YYYY Cb Cr formában tárolódnak (sőt, nem feltétlenül ebben a sorrendben - a tárolási sorrend a fájl fejlécében van megadva). Ha eltávolítja az első számot, akkor a Cb első értékét Y-ként, a Cr-t Cb-ként fogja érzékelni, és általában egy dominóeffektust kapunk, amely átváltja a kép összes színét.

A JPEG specifikáció nem kötelezi az YCbCr használatát. De a legtöbb fájl ezt használja, mert jobb mintavételezett képeket készít, mint az RGB. De nem kell szavamat fogadnod. Nézze meg az alábbi táblázatban, hogyan fog kinézni az egyes komponensek almintavételezése RGB és YCbCr esetén egyaránt.

Hogyan működik a JPEG formátum
(Interaktív változat - be eredeti cikkek).

A kék eltávolítása nem olyan észrevehető, mint a piros vagy a zöld. Ez annak köszönhető, hogy a szemében található hatmillió kúp körülbelül 64%-a érzékeny a vörösre, 32%-a a zöldre és 2%-a a kékre.

A legjobban az Y komponens mintavételezése látható (balra lent). Még egy kis változás is észrevehető.

A kép RGB-ből YCbCr formátumba konvertálása nem csökkenti a fájlméretet, de megkönnyíti a kevésbé látható, eltávolítható részletek megtalálását. A veszteséges tömörítés a második szakaszban következik be. Az adatok tömörebb formában történő bemutatásán alapul.

2. Diszkrét koszinusz transzformáció és mintavétel

Ez a tömörítési szint nagyrészt a JPEG lényege. A színek YCbCr formátumba konvertálása után a komponensek egyenként tömörítésre kerülnek, így csak az Y komponensre tudunk koncentrálni, és így néznek ki az Y komponens bájtjai ennek a rétegnek az alkalmazása után.

Hogyan működik a JPEG formátum
(Interaktív változat - be eredeti cikkek). Az interaktív változatban egy pixelre kattintva a szerkesztő az azt képviselő sorhoz görgeti. Próbálja meg eltávolítani a számokat a végéről, vagy adjon hozzá néhány nullát egy bizonyos számhoz.

Első pillantásra nagyon rossz tömörítésnek tűnik. Egy képen 100 000 pixel van, és 102 400 számra van szükség a fényességük (Y-komponensek) megjelenítéséhez – ez rosszabb, mintha semmit sem tömörítenénk!

Azonban vegye figyelembe, hogy ezeknek a számoknak a többsége nulla. Ezenkívül a sorok végén lévő nullák a kép megváltoztatása nélkül eltávolíthatók. Körülbelül 26 000 szám van hátra, és ez majdnem 4-szer kevesebb!

Ez a szint tartalmazza a sakkminták titkát. Más, általunk látott effektusokkal ellentétben ezeknek a mintáknak a megjelenése nem hiba. Ők az egész kép építőkövei. A szerkesztő minden sora pontosan 64 számot tartalmaz, diszkrét koszinusz transzformációs (DCT) együtthatókat, amelyek 64 egyedi minta intenzitásának felelnek meg.

Ezek a minták a koszinusz diagram alapján jönnek létre. Némelyikük így néz ki:

Hogyan működik a JPEG formátum
8 a 64-ből

Az alábbi képen mind a 64 minta látható.

Hogyan működik a JPEG formátum
(Interaktív változat - be eredeti cikkek).

Ezek a minták különösen fontosak, mert ezek képezik a 8x8-as képek alapját. Ha nem ismeri a lineáris algebrát, ez azt jelenti, hogy ebből a 8 mintából bármilyen 8x64-as kép készíthető. A DCT az a folyamat, amely során a képeket 8x8-as blokkra osztják, és minden blokkot e 64 együttható kombinációjává alakítanak át.

Varázslatosnak tűnik, hogy bármely kép 64 meghatározott mintából állhat össze. Ez azonban ugyanaz, mintha azt mondanánk, hogy a Föld bármely helye leírható két számmal - szélességi és hosszúsági fokokkal [a féltekéket jelöli / kb. ford.]. Gyakran úgy gondoljuk, hogy a Föld felszíne kétdimenziós, ezért csak két számra van szükségünk. Egy 8x8-as kép 64 méretű, tehát 64 számra van szükségünk.

Még nem világos, hogy ez hogyan segít nekünk a tömörítésben. Ha 64 számra van szükségünk egy 8x8-as kép megjelenítéséhez, miért lenne jobb, mint 64 fényerő-komponens tárolása? Ugyanabból az okból tesszük ezt, mint három RGB számot három YCbCr számmá alakítottunk: ez lehetővé teszi számunkra, hogy eltávolítsuk a finom részleteket.

Nehéz pontosan belátni, hogy ebben a szakaszban milyen részleteket távolítottak el, mivel a JPEG DCT-t alkalmaz a 8x8-as blokkokra. Azt azonban senki sem tiltja meg, hogy a teljes képre alkalmazzuk. Így néz ki a DCT a teljes képre alkalmazott Y komponens esetében:

Hogyan működik a JPEG formátum

Több mint 60 000 szám eltávolítható a végéről, gyakorlatilag észrevehető változtatás nélkül a fotón.

Hogyan működik a JPEG formátum

Azonban vegye figyelembe, hogy ha az első öt számot nullázzuk, a különbség nyilvánvaló lesz.

Hogyan működik a JPEG formátum

Az elején lévő számok a kép alacsony frekvenciájú változásait jelzik, amelyeket szemünk a legjobban érzékel. A vége felé eső számok a magas frekvenciák nehezebben észrevehető változásait jelzik. Ahhoz, hogy „lásd, amit a szem nem lát”, elkülöníthetjük ezeket a magas frekvenciájú részleteket az első 5000 szám nullázásával.

Hogyan működik a JPEG formátum

Látjuk a kép összes olyan területét, ahol a legnagyobb változás következik be pixelről pixelre. A macska szeme, a bajusza, a frottír takaró és a bal alsó sarokban lévő árnyékok kiemelkednek. Tovább léphet, ha nullázza az első 10 000 számot:

Hogyan működik a JPEG formátum

20 000 XNUMX:

Hogyan működik a JPEG formátum

40 000 XNUMX:

Hogyan működik a JPEG formátum

60 000 XNUMX:

Hogyan működik a JPEG formátum

Ezeket a nagyfrekvenciás részleteket a JPEG eltávolítja a tömörítési szakaszban. Nincs veszteség a színek DCT-együtthatóvá konvertálása során. A veszteség a mintavételi lépésben következik be, ahol a magas frekvenciájú vagy nullához közeli értékeket eltávolítják. Ha csökkenti a JPEG mentési minőséget, a program megnöveli az eltávolított értékek számának küszöbét, ami csökkenti a fájlméretet, de pixelesebbé teszi a képet. Ezért nézett ki így az első rész képe, amely 57-szer kisebb volt. Mindegyik 8x8-as blokkot sokkal kevesebb DCT együttható képviselte a jobb minőségű változathoz képest.

Olyan hűvös hatást hozhat létre, mint a képek fokozatos streamelése. Elmosódott képet jeleníthet meg, amely egyre részletesebbé válik, ahogy egyre több együtthatót tölt le.

Íme, csak a móka kedvéért, amit mindössze 24 000 szám használatával kaphat:

Hogyan működik a JPEG formátum

Vagy csak 5000:

Hogyan működik a JPEG formátum

Nagyon homályos, de valahogy felismerhető!

3. Futtassa a hossz kódolást, delta és Huffman

Eddig a tömörítés minden szakasza veszteséges volt. Az utolsó szakasz éppen ellenkezőleg, veszteség nélkül megy végbe. Nem törli az információkat, de jelentősen csökkenti a fájl méretét.

Hogyan lehet valamit tömöríteni anélkül, hogy eldobnád az információkat? Képzeld el, hogyan írnánk le egy egyszerű, 700 x 437-es fekete téglalapot.

A JPEG 5000 számot használ ehhez, de sokkal jobb eredményeket lehet elérni. El tudsz képzelni egy olyan kódolási sémát, amely a lehető legkevesebb bájtban írna le egy ilyen képet?

Az általam kidolgozott minimális séma négyet használ: hármat egy szín ábrázolására, a negyediket pedig annak jelzésére, hogy hány pixele van az adott színnek. Az ismétlődő értékek ilyen tömörített megjelenítésének gondolatát futáshosszúságú kódolásnak nevezik. Veszteségmentes, mert a kódolt adatokat vissza tudjuk állítani az eredeti formájukba.

A fekete téglalappal rendelkező JPEG-fájlok jóval nagyobbak, mint 4 bájt – ne feledje, hogy DCT szinten a tömörítést a 8x8 pixeles blokkokra alkalmazzák. Ezért legalább egy DCT együtthatóra van szükségünk minden 64 pixelhez. Szükségünk van egyre, mert ahelyett, hogy egy DCT-együtthatót tárolnánk, amelyet 63 nulla követ, a futáshosszúságú kódolás lehetővé teszi, hogy egyetlen számot tároljunk, és jelezzük, hogy "minden többi nulla".

A delta kódolás egy olyan technika, amelyben minden bájt abszolút érték helyett eltérést tartalmaz valamilyen értéktől. Ezért bizonyos bájtok szerkesztése megváltoztatja az összes többi képpont színét. Például tárolás helyett

12 13 14 14 14 13 13 14

Kezdhetjük 12-vel, majd egyszerűen jelezhetjük, hogy mennyit kell összeadnunk vagy kivonnunk, hogy megkapjuk a következő számot. És ez a szekvencia a delta kódolásban a következő formában jelenik meg:

12 1 1 0 0 -1 0 1

A konvertált adat nem kisebb, mint az eredeti adat, de könnyebb tömöríteni. A delta kódolás alkalmazása a futási hossz kódolása előtt sokat segíthet, miközben továbbra is veszteségmentes tömörítést biztosít.

A delta kódolás azon kevés technikák egyike, amelyeket a 8x8-as blokkon kívül használnak. A 64 DCT együttható közül az egyik egyszerűen egy állandó hullámfüggvény (egyszínű). Ez az egyes blokkok átlagos fényerejét jelenti a luma komponenseknél, vagy az átlagos kékséget a Cb komponenseknél stb. Minden DCT blokk első értékét DC értéknek nevezzük, és minden DC érték delta kódolású az előzőekhez képest. Ezért az első blokk fényerejének megváltoztatása minden blokkra hatással lesz.

A végső rejtély továbbra is fennáll: hogyan teszi teljesen tönkre az összképet az egyes szám megváltoztatása? Eddig a tömörítési szintek nem rendelkeztek ilyen tulajdonságokkal. A válasz a JPEG fejlécben rejlik. Az első 500 bájt metaadatokat tartalmaz a képről - szélesség, magasság stb., és még nem dolgoztunk velük.

Fejléc nélkül szinte lehetetlen (vagy nagyon nehéz) a JPEG dekódolása. Úgy fog kinézni, mintha a képet próbálnám leírni neked, és szavakat kezdek kitalálni, hogy átadjam a benyomásomat. Valószínűleg elég tömör lesz a leírás, hiszen pontosan olyan jelentésű szavakat tudok kitalálni, amilyeneket át akarok adni, de mindenki más számára nem lesz értelme.

Hülyén hangzik, de pontosan ez történik. Minden JPEG kép a rájuk jellemző kódokkal van tömörítve. A kódszótár a fejlécben tárolódik. Ezt a technikát Huffman-kódnak, a szókészletet pedig Huffman-táblának hívják. A fejlécben a táblázat két bájttal van jelölve - 255, majd 196. Minden színösszetevőnek lehet saját táblázata.

A táblázatok változásai bármilyen képet radikálisan befolyásolnak. Jó példa erre, ha a 15. sort 1-re cseréljük.

Hogyan működik a JPEG formátum

Ez azért történik, mert a táblázatok meghatározzák, hogyan kell beolvasni az egyes biteket. Eddig csak bináris számokkal dolgoztunk decimális formában. Ez azonban eltakarja előlünk, hogy ha az 1-es számot egy bájtban akarjuk tárolni, az 00000001-nek fog kinézni, hiszen minden bájtnak pontosan nyolc bitesnek kell lennie, még akkor is, ha csak egyre van szükség.

Ez potenciálisan nagy helypazarlás, ha sok kis szám van. A Huffman-kód egy olyan technika, amely lehetővé teszi, hogy enyhítsük azt a követelményt, hogy minden számnak nyolc bitet kell elfoglalnia. Ez azt jelenti, hogy ha két bájtot lát:

234 115

Ezután a Huffman-táblázattól függően ez három szám lehet. Kibontásukhoz először külön bitekre kell bontania őket:

11101010 01110011

Ezután megnézzük a táblázatot, hogy kitaláljuk, hogyan csoportosítsuk őket. Ez lehet például az első hat bit (111010) vagy 58 decimális számban, amit öt bit (10011) vagy 19 követ, és végül az utolsó négy bit (0011) vagy 3.

Ezért nagyon nehéz megérteni a bájtokat a tömörítés ezen szakaszában. A bájtok nem azt jelentik, aminek látszanak. Ebben a cikkben nem megyek bele a táblázattal való munka részleteibe, de anyagok erről a kérdésről online elegendő.

Az egyik érdekes trükk, amelyet ezzel a tudással megtehet, az, hogy a fejlécet leválasztja a JPEG-től, és külön tárolja. Valójában kiderült, hogy csak Ön tudja elolvasni a fájlt. A Facebook ezt azért teszi, hogy a fájlokat még kisebb legyen.

Amit még tehetünk, az az, hogy a Huffman-táblát egy kicsit megváltoztatjuk. Mások számára úgy fog kinézni, mint egy törött kép. És csak te ismered a varázslatos módot a javításra.

Összefoglaljuk: mi kell tehát a JPEG dekódolásához? Szükséges:

  1. Bontsa ki a Huffman táblá(ka)t a fejlécből, és dekódolja a biteket.
  2. Kivonja a diszkrét koszinusz transzformációs együtthatókat az egyes szín- és fénysűrűség-komponensekhez minden 8x8-as blokkhoz, inverz futáshosszúságú és delta kódolású transzformációkat végrehajtva.
  3. Kombinálja a koszinuszokat az együtthatók alapján, hogy pixelértékeket kapjon minden 8x8-as blokkhoz.
  4. A színösszetevők skálázása, ha részmintavétel történt (ez az információ a fejlécben található).
  5. A kapott YCbCr értékeket minden képponthoz alakítsa át RGB-vé.
  6. Jelenítse meg a képet a képernyőn!

Komoly munka egy macskával készült fénykép megtekintéséért! Viszont az tetszik benne, hogy megmutatja, mennyire emberközpontú a JPEG technológia. Érzékelésünk sajátosságain alapul, így sokkal jobb tömörítést érhetünk el, mint a hagyományos technológiákkal. És most, hogy megértjük a JPEG működését, el tudjuk képzelni, hogyan lehet ezeket a technológiákat átvinni más területekre. Például a videó delta kódolása jelentősen csökkentheti a fájlméretet, mivel gyakran vannak olyan teljes területek, amelyek nem változnak képkockáról képkockára (például a háttér).

A cikkben használt kód, nyitva van, és utasításokat tartalmaz arra vonatkozóan, hogyan cserélheti ki a képeket a sajátjára.

Forrás: will.com

Hozzászólás