Hogyan működik a JPEG formátum

A JPEG képformátum mindenütt jelen van digitális életünkben, de ennek a tudásnak a mélyén olyan algoritmusok rejtőznek, amelyek eltávolítják az emberi szem által észlelhetetlen részleteket. Ennek eredményeképpen a legmagasabb vizuális minőség érhető el a legkisebb fájlméret mellett – de hogyan működik mindez pontosan? Nézzük meg, mit nem látnak a szemeink!

Hogyan működik a JPEG formátum

Könnyen észrevétlenül elfogadjuk, hogy képet küldhetünk egy barátunknak, és nem kell aggódnunk, hogy milyen eszközt, böngészőt vagy operációs rendszert használ – pedig ez nem volt mindig így. Az 1980-as évek elejére a számítógépek már képesek voltak digitális képek tárolására és megjelenítésére, de sok versengő ötlet létezett arra vonatkozóan, hogy mi a legjobb módja ennek. Nem lehetett egyszerűen csak elküldeni egy képet egyik számítógépről a másikra, és remélni, hogy működni fog.

A probléma megoldása érdekében 1986-ban világszerte szakértőkből álló bizottság alakult, amelyet "Közös fényképezési szakértők csoportja" (Joint Photographic Experts Group, JPEG) néven ismerünk, és az ISO (Nemzetközi Szabványügyi Szervezet) és az IEC (Nemzetközi Elektrotechnikai Bizottság) közötti együttműködés keretében hozták létre – két, Genfben (Svájc) székhellyel rendelkező nemzetközi szabványosító szervezet.

A JPEG nevű csoport 1992-ben létrehozta a JPEG digitális képek tömörítési szabványát. Bárki, aki használta az internetet, valószínűleg találkozott már JPEG kódolású képekkel. Ez a legelterjedtebb módszer a képek kódolására, küldésére és tárolására. A weboldalaktól a levelekig és közösségi média platformokig a JPEG-et napi milliárdszor használják – szinte minden alkalommal, amikor online képet nézünk vagy küldünk. JPEG nélkül a web szegényebb, lassabb és valószínűleg kevesebb cicás fotót tartalmazna!

Ez a cikk arról szól, hogyan kell dekódolni a JPEG képet. Más szavakkal, arról, hogy mire van szükség a számítógépen tárolt tömörített adatok képpé alakításához, amely megjelenik a képernyőn. Ezt érdemes tudni, nemcsak azért, mert fontos a technológia megértéséhez, amit napmint nap használunk, hanem azért is, mert a tömörítési szintek feltárásával jobban megismerjük az érzékelést és a látást, valamint azt, hogy a szemünk milyen részletekre érzékeny.

Ezen kívül nagyon érdekes képekkel játszani ilyen módon.

Hogyan működik a JPEG formátum

Bepillantás a JPEG-be

A számítógépen minden bináris számokká van tárolva. Ezeket a biteket, nullákat és egyeseket általában nyolcas csoportokra osztják, így alkotva byte-okat. Amikor egy JPEG képet megnyitsz a számítógépen, valaminek (böngésző, operációs rendszer, vagy más) dekódolnia kell a byte-okat, visszaállítva az eredeti képet egy színek listájává, amelyet meg lehet jeleníteni.

Ha letöltöd ezt az aranyos macska fényképet és megnyitod egy szövegszerkesztőben, egy csomó értelmetlen karaktert látsz.

Hogyan működik a JPEG formátum
Itt a Notepad++-t használom a fájl tartalmának tanulmányozásához, mivel a hagyományos szövegszerkesztők, mint például a Windows Notepad, elrontják a bináris fájlt a mentés után, és az már nem felel meg a JPEG formátumnak.

Szükségszerűen, amikor képet nyitsz meg egy szövegszerkesztőben, zavarba ejted a számítógépet, akárcsak amikor dörzsölöd a szemed, és elkezdesz színes foltokat látni!

Ezeket a foltokat, amelyeket látsz, úgy hívják, hogy fényfoltok, és nem világító ingertől származnak, vagy a tudat által előidézett hallucinációk. Ezek azért keletkeznek, mert az agyad úgy véli, hogy bármilyen elektromos jel a szem idegeiben fényinformációt közvetít. Az agynak ilyen feltételezéseket kell tennie, mivel semmilyen módon nem tudható, hogy a jel hang, látvány vagy valami más. Minden ideg a testben pontosan ugyanolyan elektromos impulzusokat közvetít. Ha nyomsz a szemedre, olyan jeleket küldesz, amelyek nem látási jellegűek, de aktiválják a szem receptorait, amit az agyad – ebben az esetben tévesen – vizuálisnak értelmez. Szó szerint képes vagy látni a nyomást!

Szórakoztató gondolni arra, mennyire hasonlítanak a számítógépek az agyra, ugyanakkor ez egy hasznos analógia is, amely illusztrálja, hogy mennyire függ a számadatok jelentése – amit az idegek továbbítanak a testben, vagy amiket a számítógép tárol – az értelmezésüktől. Minden bináris adat nullákból és egyesekből áll, amelyek alapvető összetevők, képesek bármilyen típusú információt közvetíteni. A számítógépe gyakran kitalálja, hogyan értelmezze ezeket a fájlok kiterjesztéseivel például. Most pedig arra kérjük, hogy szövegként értelmezze őket, hiszen erre számít a szövegszerkesztő.

Ahhoz, hogy megértsük, hogyan kell dekódolni egy JPEG-t, látnunk kell az eredeti jeleket – a bináris adatokat. Ezt hexadecimális szerkesztővel tehetjük, vagy közvetlenül a cikk eredeti weboldalán! Ott egy kép látható, mellette a szövegmezőben az összes byte-ját (a fejlécet kivéve) tizedes formában tüntették fel. Változtathatsz rajtuk, és a script azonnal újra kódolja és kiad egy új képet.

Hogyan működik a JPEG formátum

Sokat megtudhatsz, ha játszol ezzel a szerkesztővel. Például, meg tudod mondani, milyen sorrendben vannak tárolva a pixelek?

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

Hogyan működik a JPEG formátum

Más változtatások, például a 1988-as sorban a 7-es szám 254-re cserélése megváltoztatja a színt, de csak a következő pixeleket.

Hogyan működik a JPEG formátum

Talán a legfurcsább az, hogy egyes számok nemcsak a színt, hanem a kép formáját is megváltoztatják. Cseréld ki a 70-et a 12-es sorban 2-re, és nézd meg a kép felső sorát, hogy lásd, mire gondolok.

Hogyan működik a JPEG formátum

És függetlenül attól, hogy milyen JPEG képet használsz, mindig felfedezed ezeket a rejtélyes sakk-sorozatokat a byte-ok szerkesztésekor.

A szerkesztővel való játszáskor nehéz megérteni, hogyan kerül a kép újraalkotásra ezekből a bitekből, mivel a JPEG tömörítés három különböző technológiát használ, amelyek egymás után, szinten működnek. Mindegyiket külön-külön megvizsgáljuk, hogy feltárjuk ezt a rejtélyes viselkedést.

A JPEG tömörítési szintek:

  1. Szín alindítás.
  2. Diszkrét koszinuszos transzformáció és diszkretizálás.
  3. Sorozatok hosszának kódolása, delta és Huffman

Ahhoz, hogy el tudja képzelni a tömörítés mértékét, vegye figyelembe, hogy a fenti kép 79 819 számot tartalmaz, ami körülbelül 79 Kb. Ha tömörítés nélkül tároltuk volna, minden pixelhez három számra lett volna szükség – a vörös, zöld és kék összetevőhöz. Ez 917 700 számot jelentett volna, vagy körülbelül 917 Kb. A JPEG tömörítés eredményeként a végső fájl mérete több mint 10-szer csökkent!

Valójában ez a kép még sokkal jobban tömöríthető. Lent két kép van egymás mellett – a jobb oldali fotót 16 Kb-ra tömörítették, tehát 57-szer kisebb, mint a tömörítetlen verzió!

Hogyan működik a JPEG formátum

Ha alaposan megnézi, láthatja, hogy ezek a képek nem azonosak. Mindkettő JPEG tömörítéssel készült, viszont a jobb oldali sokkal kisebb méretű. Emellett egy kicsit rosszabbul is néz ki (nézze meg a háttér színeinek négyzetét). Ezért a JPEG-t még veszteséges tömörítésnek is nevezik; a tömörítés folyamata során a kép megváltozik és néhány részletet elveszít.

1. Szín aldiszkretizálás

Itt egy kép, amely csak az első tömörítési szintet használja.

Hogyan működik a JPEG formátum
(Interaktív verzió – a cikkben. Egy szám eltávolítása tönkreteszi az összes színt. Ha azonban pontosan hat számot eltávolítunk, az gyakorlatilag nincs hatással a képre.

Most a számok kicsit könnyebben dekódolhatók. Ez majdnem egy egyszerű színlista, amelynek minden bájt pontosan egy pixelt módosít, de már feleakkora, mint a tömörítetlen kép (amely körülbelül 300 Kb lenne ilyen kicsinyített méretben). Megtippeli, miért?

Látható, hogy ezek a számok nem a szokásos vörös, zöld és kék összetevőket jelölik, hiszen ha az összes számot nullával helyettesítjü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 Y-t (fényesség),

Hogyan működik a JPEG formátum

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

Hogyan működik a JPEG formátum

és Cr-t (relatív vörösség) jelölnek a képen.

Hogyan működik a JPEG formátum

Miért ne használjunk RGB-t? Hiszen a legtöbb modern képernyő éppen így működik. A monitora bármilyen színt képes megjeleníteni, beleértve a vörös, zöld és kék színeket is, különböző intenzitással minden pixelhez. A fehér a három szín maximális fényességének bekapcsolásával, míg a fekete a kikapcsolásával jön létre.

Hogyan működik a JPEG formátum

Ez nagyon hasonlít az emberi szem működésére. A szemünk színes receptorait „csapoknakA színlátó receptorok három típusa létezik, amelyek mindegyike érzékeny vagy a piros, vagy a zöld, vagy a kék színekre [az S típusú csapok érzékenyek a lila-kék (S az angol Short — rövid hullámhosszú spektrum), az M típusúak a zöld-sárga (M az angol Medium — közepes hullámhosszú), és az L típusúak a sárga-piros (L az angol Long — hosszú hullámhosszú) spektrum részeire. E háromféle csap (és a smaragdzöld fényérzékelő pálcikák) jelenléte színes látást biztosít az embereknek. / megj. ford.] Pálcikák, a szemünkben található másik típusú fényérzékelő receptor, képes a fényerősség változásait érzékelni, azonban sokkal érzékenyebb a színekre. A szemünk körülbelül 120 millió pálcikát és mindössze 6 millió csapot tartalmaz.

Ezért a szemünk sokkal jobban észleli a fényerő változásait, mint a színek változásait. Ha a színt leválasztjuk a fényerőről, egy kis színt eltávolíthatunk, és senki sem fogja észrevenni. A szín aldiszkretizálása az a folyamat, amelynek során a kép színkomponenseit alacsonyabb felbontásban ábrázolják, mint a fényerő komponenseit. A fenti példában minden pixelnek pontosan egy Y komponense van, míg minden egyes négy pixelből álló csoportnak pontosan egy Cb és egy Cr komponense van. Így a kép négyszer kevesebb színinformációt tartalmaz, mint az eredeti.

A YCbCr színteret nemcsak a JPEG használja. Ezt eredetileg 1938-ban találták ki tévéműsorokhoz. Nem mindenki rendelkezik színes televízióval, ezért a szín és a fényerő szétválasztása lehetővé tette, hogy mindenki ugyanazt a jelet kapja, míg a színtelen televíziók csak a fényerő komponensét használták.

Ezért egy adat eltávolítása a szerkesztőből teljesen megsemmisíti az összes színt. A komponensek Y Y Y Y Cb Cr formájában vannak tárolva (valójában nem szükséges ebben a sorrendben - a tárolási sorrendet a fájl fejléc határozza meg). Az első szám eltávolítása azt eredményezi, hogy az első Cb érték Y-ként, a Cr pedig Cb-ként fog észlelni, ami az összes szín hatásának dominohatását okozza a képen.

A JPEG specifikációja nem kötelezi Önt a YCbCr használatára. De a legtöbb fájlban ezt használják, mivel a szubdiszkretálás után jobb minőségű képeket eredményez a RGB-hez képest. De nem kell, hogy csak a szavamra adjon! Nézze meg az alábbi táblázatban, hogyan néz ki a szubdiszkretálás minden egyes komponens esetében RGB és YCbCr módban.

Hogyan működik a JPEG formátum
(Interaktív verzió – a cikkben. cikkek).

A kék eltávolítása nem olyan észlelhető, mint a pirosé vagy a zöldé. Mindez azért van, mert a hatmillió csapból, ami a szemünkben található, körülbelül 64% érzékeny a pirosra, 32% a zöldre és 2% a kékre.

A Y komponens szubdiszkretálása (bal alsó sarok) a legjobban látható. Még a kisebb változás is észrevehető.

A kép RGB-ről YCbCr-re történő konvertálása nem csökkenti a fájl méretét, de megkönnyíti a kevésbé észlelhető részletek keresését, amelyeket el lehet távolítani. A tömörítés az adat második lépésében történik. Az alapötlete, hogy az adatokat tömöríthetőbb formában ábrázoljuk.

2. Diszkrét koszinusz transzformáció és szubdiszkretálás

Ez a tömörítési szint alapvetően meghatározza a JPEG lényegét. A színek YCbCr-re történő átalakítása után a komponenseket külön-külön tömörítjük, így ezután csak a Y komponensre koncentrálhatunk. Így néznek ki a Y komponens byte-jai ennek a szintnek az alkalmazása után.

Hogyan működik a JPEG formátum
(Interaktív verzió – a cikkben. cikkek). Az interaktív verzióban az egyes pixelekre kattintva a szerkesztő a megfelelő sorra ugrik. 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 úgy tűnik, hogy ez nagyon rossz tömörítés. Egy 100 000 pixelből álló képen a fényességük (Y komponens) megjelenítéséhez 102 400 számra van szükség – ez rosszabb, mint ha egyáltalán nem tömörítenénk!

Figyelje meg azonban, hogy ezeknek a számoknak a legtöbbje nulla. Továbbá, az összes ilyen nullát a sorok végén el lehet távolítani anélkül, hogy a kép megváltozna. Körülbelül 26 000 szám marad, ami már majdnem 4-szer kevesebb!

Ezen a szinten rejlik a sakkminta titka. Más hatásokkal ellentétben, amelyeket eddig láttunk, ezeknek a mintáknak a megjelenése nem hiba. Ezek a teljes kép építőelemei. A szerkesztő minden sorában pontosan 64 szám található, ezek a diszkrét koszinusz transzformáció (DCT) együtthatói, amelyek 64 egyedi minta intenzitásának felelnek meg.

Ezek a minták a koszinuszgörbe alapján alakulnak ki. Íme, hogyan néznek ki néhány közülük:

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

Alább egy kép látható, amely megjeleníti az összes 64 mintát.

Hogyan működik a JPEG formátum
(Interaktív verzió – a cikkben. cikkek).

Ezek a minták különleges jelentőséggel bírnak, mivel az 8x8-as képek alapját képezik. Ha nem ismered a lineáris algebrát, ez azt jelenti, hogy bármely 8x8-as kép előállítható ezekből a 64 mintából. A DCT egy 8x8-as képekre való felosztási és minden blokk kombinációjának átalakítási folyamata ezen 64 koefficiens segítségével.

Az, hogy bármely kép megalkotható 64 meghatározott mintából, varázslatnak tűnik. Ugyanakkor ez ugyanaz, mint azt mondani, hogy a Föld bármely pontja két számmal leírható – szélességgel és hosszúsággal [a félgömbök megjelölésével / a fordító megjegyzése]. Gyakran úgy gondoljuk, hogy a Föld felszíne kétdimenziós, ezért csak két számra van szükségünk. Az 8x8-as kép 64 dimenzióval rendelkezik, így 64 számra van szükségünk.

Még mindig nem világos, hogyan segít ez a tömörítés szempontjából. Ha 64 számra van szükség egy 8x8-as kép megjelenítéséhez, miért lenne ez jobb, mint egyszerűen 64 fényességi összetevőt tárolni? Ezt ugyanazon okból tesszük, amiért a három RGB számot három YCbCr számra alakítottuk át: lehetővé teszi számunkra a láthatatlan részletek eltávolítását.

Nehéz látni, hogy pontosan mely részletek tűnnek el ezen a ponton, mivel a JPEG az 8x8-as blokkokra alkalmazza a DCT-t. Azonban senki sem tilthatja meg, hogy ezt egy teljes képre alkalmazzuk. Íme, hogyan néz ki a DCT a Y komponens tekintetében egy teljes képen:

Hogyan működik a JPEG formátum

A végéről több mint 60 000 szám eltávolítható szinte észlelhető változások nélkül a fotón.

Hogyan működik a JPEG formátum

De jegyezd meg, 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

A kezdeti számok az alacsony frekvenciájú változások jelölésére szolgálnak a képen, és a szemünk ezeket érzékeli a legjobban. A véghez közelebbi számok a magas frekvenciájú változások jelölésére szolgálnak, amelyeket nehezebb észlelni. Ahhoz, hogy "lássuk, ami a szemnek nem látszik", izolálhatjuk ezeket a magas frekvenciás részleteket az első 5000 szám nullázásával.

Hogyan működik a JPEG formátum

Látjuk azokat a képterületeket, ahol a pixelről pixelre való legnagyobb változás történik. Kiemelkednek a macska szemei, a bajsza, a bolyhos takaró és az árnyékok a bal alsó sarkban. Tovább mehetünk, ha az első 10 000 számot nullázzuk:

Hogyan működik a JPEG formátum

20 000:

Hogyan működik a JPEG formátum

40 000:

Hogyan működik a JPEG formátum

60 000:

Hogyan működik a JPEG formátum

Ezek a magas frekvenciájú részletek JPEG formátumban eltávolításra kerülnek a tömörítési lépés során. A színek DCT együtthatókká való átalakítása nem veszteséges. A veszteség a diszkretizálás lépésénél keletkezik, ahol eltávolítják a magas frekvenciájú vagy a nullához közeli értékeket. Amikor csökkented a JPEG mentési minőségét, a program növeli az eltávolítandó értékek számának küszöbét, ami a fájl méretének csökkenését eredményezi, de a képet pixelessé teszi. Ezért a legelső részben a 57-szorosan kisebb kép így nézett ki. Minden 8x8-as blokk sokkal kevesebb DCT együtthatót képviselt a jobb minőségű változathoz képest.

Lehet egy ilyen menő effektet létrehozni, mint a fokozatos képkocka streamelés. Ki lehet adni egy elmosódott képet, amely egyre részletgazdagabbá válik, ahogy egyre több együttható letöltődik.

Itt van, csak érdekességképpen, hogy mi történik, ha mindössze 24 000 számot használunk:

Hogyan működik a JPEG formátum

Vagy csak 5000-et:

Hogyan működik a JPEG formátum

Nagyon elmosódott, de felismerhetőnek tűnik!

3. Sorozatlengések kódolása, delta és Huffman

Eddig minden tömörítési lépés veszteséges volt. Az utolsó lépés ezzel szemben veszteségmentes. Ez nem távolít el információt, de jelentősen csökkenti a fájl méretét.

Hogyan lehet bármit tömöríteni anélkül, hogy elhagynánk az információt? Képzeljük el, hogyan írnánk le egy egyszerű fekete téglalapot 700 x 437 méretben.

A JPEG ehhez 5000 számot használ, de sokkal jobb eredményeket is elérhetünk. Képzelhetnéd el azt a kódolási sémát, amely ilyen képet a lehető legkevesebb byte-ban ír le?

A legalapvetőbb séma, amit ki tudtam találni, négy számot használ: hármat a szín megjelölésére, és a negyediket arra, hogy hány pixelnek van olyan színe. Az ismétlődő értékek ilyen tömörített módon történő ábrázolásának ötlete a sorozatlengések kódolása. Ez veszteségmentes, mivel az így kódolt adatokat az eredeti állapotukban vissza tudjuk állítani.

A JPEG file size with a black rectangle is much larger than 4 bytes – remember that at the DCT level, compression is applied to 8x8 pixel blocks. Therefore, at least one DCT coefficient is needed for every 64 pixels. We need one because instead of storing one DCT coefficient followed by 63 zeros, run-length coding allows us to store one number and indicate that "all the others are zeros."

Delta coding is a technique where each byte contains a difference from some value rather than an absolute amount. Therefore, editing certain bytes changes the color of all other pixels. For example, instead of storing

12 13 14 14 14 13 13 14

We could start with 12, and then simply indicate how much to add or subtract to get the next number. And this sequence in delta coding takes the form:

12 1 1 0 0 -1 0 1

The transformed data isn't smaller than the original, but it's easier to compress them. Applying delta coding before run-length coding can significantly help while still remaining lossless compression.

Delta coding is one of the few techniques used outside of 8x8 blocks. Of the 64 DCT coefficients, one is simply a constant wave function (a solid color). It represents the average brightness of each block for brightness components, or the average blueness for Cb components, and so on. The first value of each DCT block is called the DC value, and each DC value undergoes delta coding in relation to the previous one. Therefore, changing the brightness of the first block will affect all blocks.

The last mystery remains: how does changing a single number completely ruin the entire picture? Until now, such properties have not existed in compression levels. The answer lies in the JPEG header. The first 500 bytes contain metadata about the image – width, height, etc., and until we work with them.

Without the header, it is practically impossible (or very difficult) to decode a JPEG. It would seem like I'm trying to describe a painting to you, and I start inventing words to convey my impression. The description would probably be quite concise, as I can invent words exactly with the meaning I want to convey, but for everyone else, they would not make sense.

Bár hülyén hangzik, de pontosan így működik. Minden JPEG kép saját, rá jellemző kódokkal van tömörítve. A kódok szótárát a fejléc tárolja. Ezt a technikát Huffman-kódolásnak hívják, a szótár pedig Huffman-táblázatnak. A fejlécben a táblázat két byte-tal van megjelölve – 255 és utána 196. Minden színkomponensnek saját táblázata lehet.

A táblázatok változásai radikálisan befolyásolják bármely képet. Egy jó példa – cserélje le az 1-est a 12-esre a 15-ös sorban.

Hogyan működik a JPEG formátum

Ez azért történik, mert a táblázatok meghatározzák, hogyan kell olvasni az egyes biteket. Eddig csak bináris számokkal foglalkoztunk decimális formában. De ez eltakarja előlünk azt a tényt, hogy ha egy 1-est szeretne tárolni egy byte-ban, akkor az így fog kinézni: 00000001, mivel minden byte-ban pontosan nyolc bitnek kell lennie, még akkor is, ha csak egy bit szükséges.

Potenciálisan ez nagy helypazarlás, ha sok kis számunk van. A Huffman-kódolás egy technika, amely lehetővé teszi számunkra, hogy csökkentsük ezt a követelményt, hogy minden szám nyolc bitet foglaljon el. Ez azt jelenti, hogy ha két byte-ot lát,

234 115

akkor a Huffman-táblától függően ezek három szám lehetnek. Ahhoz, hogy ezeket kinyerjük, először szét kell bontanunk őket egyes bitekre:

11101010 01110011

Ezután a táblázathoz fordulunk, hogy megértsük, hogyan kell csoportosítani őket. Például ez lehet az első hat bit (111010), vagy 58 decimális formában, amelyet öt bit követ (10011), vagy 19, és végül az utolsó négy bit (0011), vagy 3.

Ezért nagyon nehéz kibogozni a byte-okat ezen a tömörítési szinten. A byte-ok nem azt jelentik, amit látszik. Nem szeretnék részletekbe menni a táblázat működéséről ebben a cikkben, de anyagok ezzel a kérdéssel kapcsolatban az interneten elég sok.

Az egyik érdekes trükk, amit tudva lehet csinálni, az az, hogy a fejlécet elválasztjuk a JPEG-től, és külön tároljuk. Így lényegében a fájlt csak Ön olvashatja. A Facebook ezt megteszi, hogy még jobban csökkentse a fájlokat.

Amit még lehet tenni – kisebb változtatásokat végezni a Huffman-táblázatban. Mások számára ez úgy fog kinézni, mint egy tönkrement kép. És csak Ön fogja tudni a varázslatos módját annak helyreállításának.

Foglaljuk össze: mi szükséges a JPEG dekódolásához? Szükséges:

  1. Kinyerni a Huffman-táblát (táblákat) a fejlécből és dekódolni a biteket.
  2. Kinyerni a diszkrét koszinusz-transzformáció együtthatóit minden szín- és fényerőkomponenshez minden 8x8-as blokkhoz, a hosszú sorozatok és delta kódolás inverse transzformációjának végrehajtásával.
  3. Kombinálni a koszinuszokat az együtthatók alapján, hogy pixelértékeket kapjunk minden 8x8-as blokkhoz.
  4. Skálázni a színkomponenseket, ha alulképzés történt (ez az információ a fejlécben található).
  5. Átalakítani az YCbCr értékeket minden pixelhez RGB formátumra.
  6. Jelenítse meg a képet a képernyőn!

Komoly munka, hogy egyszerűen megnézz egy cicás fotót! De ami tetszik benne, az az, hogy látható, mennyire emberközpontú a JPEG technológia. Az érzékelésünk sajátosságaira épít, lehetővé téve sokkal jobb tömörítést, mint a hagyományos technológiák. Most, hogy megértjük, hogyan működik a JPEG, elképzelhetjük, hogyan alkalmazhatók ezek a technológiák más területeken. Például a delta-kódolás a videóban jelentős fájlméret-csökkentést eredményezhet, mivel gyakran vannak 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, nyílt forráskódú, és útmutatásokat tartalmaz a képek saját képekre való cseréjéhez.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster