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

Легко принять, как само собой разумеющееся, возможность отправить фотку другу, и не волноваться по поводу того, какое устройство, браузер или операционную систему он использует – однако так было не всегда. К началу 1980-х компьютеры умели хранить и показывать цифровые изображения, однако по поводу наилучшего способа для этого существовало множество конкурирующих идей. Нельзя было просто отправить изображение с одного компьютера на другой и надеяться, что всё заработает.

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

Заглядывая внутрь JPEG

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!

Эти пятна, которые вы видите, известны, как 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

Другие изменения, например, замена 7 на строке 1988 на число 254 изменяет цвет, но только последующих пикселей.

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 и Хаффмана

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.

Теперь числа чуть проще расшифровать. Это почти что простой список цветов, у которого каждый байт изменяет ровно один пиксель, но при этом он уже в два раза меньше несжатого изображения (которое занимало бы ок. 300 Кб в таком уменьшенном размере). Догадаетесь, почему?

Можно видеть, что эти числа не обозначают стандартные красную, зелёную и синюю компоненты, поскольку если заменить все числа нулями, мы получим зелёное изображение (а не белое).

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-типа чувствительны в фиолетово-синей (S от англ. Short — коротковолновый спектр), M-типа — в зелено-желтой (M от англ. Medium — средневолновый), и L-типа — в желто-красной (L от англ. Long — длинноволновый) частях спектра. Наличие этих трёх видов колбочек (и палочек, чувствительных в изумрудно-зелёной части спектра) даёт человеку цветное зрение. / прим. перев.]. 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.

Поэтому удаление одного числа из редактора полностью рушит все цвета. Компоненты хранятся в виде Y Y Y Y Cb Cr (на самом деле, не обязательно в таком порядке – порядок хранения задаётся в заголовке файла). Удаление первого числа приведёт к тому, что первое значение Cb будет воспринято, как Y, Cr как Cb, и в целом получится эффект домино, переключающий все цвета картинки.

Спецификация JPEG не обязывает вас использовать YCbCr. Но в большинстве файлов она используются, поскольку она даёт изображения лучшего качества после субдискретизации по сравнению с RGB. Но вам не обязательно верить мне на слово. Посмотрите сами в табличке ниже, как будет выглядеть субдискретизация каждого отдельного компонента как в RGB, так и в YCbCr.

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!

На этом уровне находится секрет шахматных узоров. В отличие от других эффектов, которые мы видели, появление этих узоров не является глюком. Они – строительные блоки всего изображения. В каждой строчке редактора содержится ровно 64 числа, коэффициенты дискретного косинусного преобразования (DCT), соответствующие интенсивностям 64-х уникальных узоров.

Эти узоры формируются на основе графика косинуса. Вот, как выглядят некоторые из них:

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

С конца можно удалить более 60 000 чисел практически без заметных изменений на фотке.

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

Числа в начале обозначают изменения низкой частоты в изображении, и наши глаза улавливают их лучше всего. Числа ближе к концу обозначают изменения высоких частот, которые сложнее заметить. Чтобы «увидеть то, что не видно глазом», мы можем изолировать эти детали высокой частоты, обнулив первые 5000 чисел.

Hogyan működik a JPEG formátum

Мы видим все области изображения, в которых происходит наибольшее изменение от пикселя к пикселю. Выделяются глаза кота, его усы, махровое одеяло и тени в нижнем левом углу. Можно пойти и дальше, обнулив первые 10 000 чисел:

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.

Вот, просто для интереса, что получится при использовании всего 24 000 чисел:

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.

Как можно сжать что-либо, не отбрасывая информацию? Представьте, как бы мы описали простой чёрный прямоугольник 700 х 437.

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.

Изменения таблиц радикально повлияют на любое изображение. Хороший пример – поменять на 15-й строке 1 на 12.

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.

Поэтому очень сложно разобраться в байтах на этом этапе сжатия. Байты не представляют то, что кажется. Не буду углубляться в детали работы с таблицей в данной статье, но anyagok по этому вопросу в сети 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.

Что ещё можно сделать – совсем немного изменить таблицу Хаффмана. Для других это будет выглядеть, как испорченная картинка. И только вы будете знать волшебный вариант её исправления.

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

  1. Извлечь таблицу (таблицы) Хаффмана из заголовка и декодировать биты.
  2. Извлечь коэффициенты дискретного косинусного преобразования для каждого компонента цвета и яркости для каждого блока 8х8, проведя обратные преобразования кодирования длин серий и дельты.
  3. Скомбинировать косинусы на основе коэффициентов, чтобы получить значения пикселей для каждого блока 8х8.
  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!

Серьёзная работа для простого просмотра фотки с котиком! Однако, что мне в этом нравится – видно, насколько технология JPEG человекоцентрична. Она основана на особенностях нашего восприятия, позволяющих достичь гораздо лучшего сжатия, чем обычные технологии. И теперь, понимая, как работает JPEG, можно представить, как эти технологии можно перенести в другие области. К примеру, дельта-кодирование в видео может дать серьёзное уменьшение размера файла, поскольку там часто есть целые области, не меняющиеся от кадра к кадру (к примеру, фон).

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