JPEG

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. november 5-én felülvizsgált verziótól ; az ellenőrzések 7 szerkesztést igényelnek .
JPEG
Kiterjesztés .jpg, .jpeg, .JPG, .JPEG, .jpevagy.JPE
MIME típusú kép/jpeg
Aláírás 0xFF 0xD8
közzétett 1992. szeptember 18
Formátum típusa Grafikus formátum
ben fejlődött JPEG 2000 , JPEG-LS , JPEG XR , MotionJPEG
Szabvány(ok) ISO/IEC 10918
Weboldal jpeg.org/jpeg/ (  angol)
 Médiafájlok a Wikimedia Commons oldalon

A JPEG (ejtsd: jpeg [1] , eng .  Joint Photographic Experts Group , a fejlesztői szervezet neve után ) a fényképek és hasonló képek tárolására használt egyik népszerű raszteres grafikai formátum . A JPEG adatokat tartalmazó fájlok általában .jpg (legnépszerűbb), .jfif , .jpe vagy .jpeg kiterjesztéssel ( utótaggal) rendelkeznek . A MIME típusa image/jpeg.

A JPEG algoritmus lehetővé teszi a kép tömörítését veszteséges és veszteségmentesen is (veszteségmentes JPEG tömörítési mód). A 65535 × 65535 képpontnál nem nagyobb lineáris méretű képek támogatottak.

2010-ben annak érdekében, hogy az utókor számára megőrizzék a 21. század elején népszerű digitális formátumokról szóló információkat, a PLANETS projekt tudósai a JPEG formátum olvasására vonatkozó utasításokat helyezték el egy speciális kapszulába, amelyet a svájci Alpokban egy speciális tárolóban helyeztek el. [2] .

Hatókör

A JPEG algoritmus a leghatékonyabb olyan fényképek és festmények tömörítésére, amelyek valósághű jeleneteket tartalmaznak egyenletes fény- és színátmenetekkel. A JPEG-et legszélesebb körben a digitális fényképezésben , valamint a képek interneten keresztüli tárolására és továbbítására használják .

A JPEG formátum veszteséges tömörítési módban kevéssé használható rajzok, szövegek és jelgrafikák tömörítésére, ahol a szomszédos képpontok közötti éles kontraszt észrevehető műtermékekhez vezet . Az ilyen képeket tanácsos veszteségmentes formátumban menteni, például JPEG-LS , TIFF , GIF , PNG , vagy használja a veszteségmentes JPEG tömörítési módot.

A JPEG (valamint más veszteséges tömörítési formátumok ) nem alkalmas képek tömörítésére többlépcsős feldolgozás során, mivel a köztes feldolgozási eredmények minden egyes mentésekor torzítások jelennek meg a képekben.

A JPEG nem használható olyan esetekben, amikor a minimális veszteség is elfogadhatatlan, például csillagászati ​​vagy orvosi képek tömörítésekor. Ilyen esetekben a JPEG szabvány által biztosított veszteségmentes JPEG tömörítési mód (amelyet azonban a legtöbb népszerű kodek nem támogat ), vagy a JPEG-LS tömörítési szabvány javasolt .

Tömörítés

Tömörítéskor a kép az RGB színtérből YCbCr formátumba konvertálódik . A JPEG-szabvány (ISO / IEC 10918-1) nem szabályozza az YCbCr kiválasztását, lehetővé téve más típusú átalakítást (például háromtól eltérő komponensek számával [3] ), és konverzió nélküli tömörítést (közvetlenül RGB-be) azonban a JFIF specifikáció (JPEG File Interchange Format, amelyet 1991-ben javasolt a C-Cube Microsystems, és ma már de facto szabvány) magában foglalja az RGB-> YCbCr konverzió használatát.

Az RGB->YCbCr konverziót követően a színért felelős Cb és Cr képcsatornák esetében „decimáció” (almintavételezés [4] ) végezhető, ami azt jelenti, hogy az Y fényerőcsatorna minden 4 pixeles (2x2) blokkja hozzá van rendelve. átlagos Cb és Cr értékek (decimációs séma "4:2:0" [5] ). Ugyanakkor minden 2x2-es blokkhoz 12 érték helyett (4 Y, 4 Cb és 4 Cr) csak 6-ot használnak (4 Y és egy átlagolt Cb és Cr). Ha a tömörítés után helyreállított kép minőségére magasabb követelmények vonatkoznak, a vékonyítást csak egy irányban - függőlegesen ("4:4:0" séma) vagy vízszintesen ("4:2:2") - lehet végrehajtani, vagy nem. egyáltalán ("4:4:4").

A szabvány azt is lehetővé teszi a tizedelést Cb és Cr átlagolásával nem egy 2x2-es blokkra, hanem négy egymást követő (függőlegesen vagy vízszintesen) pixelre, azaz 1x4-es, 4x1-es blokkra („4:1:1” séma), valamint 2x4 és 4x2 (séma "4:1:0"). Különféle tizedelési módokat is lehet használni a Cb és a Cr esetében, de a gyakorlatban az ilyen sémákat rendkívül ritkán alkalmazzák.

Továbbá az Y fényerőkomponens, valamint a Cb és Cr színért felelős komponensek 8x8 pixeles blokkokra vannak osztva. Minden ilyen blokkot diszkrét koszinusz transzformációnak (DCT) vetünk alá . Az eredményül kapott DCT együtthatók kvantálásra kerülnek (általában különböző kvantálási mátrixokat használnak Y, Cb és Cr esetén), és futtatás és Huffman kódok használatával csomagolják . A JPEG szabvány sokkal hatékonyabb aritmetikai kódolást is lehetővé tesz , azonban a szabadalmi korlátozások miatt (a JPEG szabványban leírt aritmetikai QM kódoló szabadalma az IBM -é ) a gyakorlatban ritkán alkalmazzák. A népszerű libjpeg könyvtár a legújabb verziókban támogatja az aritmetikai kódolást, de az ezzel a módszerrel tömörített képek megtekintése problémás lehet, mivel sok néző nem támogatja a dekódolásukat.

A DCT együtthatók kvantálására használt mátrixok a JPEG fájl fejlécében vannak tárolva. Általában úgy épülnek fel, hogy a nagyfrekvenciás együtthatókat erősebb kvantálásnak vetik alá, mint az alacsony frekvenciájúakat. Ez a kép finom részleteinek eldurvulásához vezet. Minél nagyobb a tömörítési arány, annál erősebb az összes együttható kvantálása.

A kép JPEG fájlként való mentésekor a kódoló egy minőségi paramétert kap valamilyen tetszőleges mértékegységben, például 1-től 100-ig vagy 1-től 10-ig. A magasabb szám általában jobb minőséget (és nagyobb tömörített fájlt) jelent. Magában a JPEG fájlban azonban nincs ilyen paraméter, és a rekonstruált kép minőségét a kvantálási mátrixok, a színkülönbség-komponensek decimálásának típusa, valamint a matematikai műveletek pontossága határozza meg mind a kódoló, mind a dekódoló oldalon. Ebben az esetben még a legjobb minőség használata esetén sem (amely a csak egységekből álló kvantálási mátrixnak és a színkülönbség-komponensek tizedelésének hiányában) a rekonstruált kép nem fog pontosan megegyezni az eredetivel, ami a véges pontossághoz kapcsolódik. A DCT értékét, és az Y , Cb, Cr és DCT együtthatók értékeit a legközelebbi egész számra kell kerekíteni. A Lossless JPEG tömörítési mód, amely nem használ DCT-t, pontos egyezést biztosít a visszaállított és az eredeti képek között, de alacsony hatékonysága (a tömörítési arány ritkán haladja meg a 2-t) és a szoftverfejlesztők támogatásának hiánya nem járult hozzá a Lossless népszerűségéhez. JPEG.

Különféle JPEG-tömörítési sémák

A JPEG szabvány két fő módot biztosít a kódolt adatok megjelenítésére.

A legtöbb elérhető kodek által támogatott legelterjedtebb a szekvenciális (szekvenciális JPEG) adatábrázolás, amely magában foglalja a kódolt kép szekvenciális bejárását 8 bit/komponens bitmélységgel (vagy 8 bit/pixel fekete-fehér szürkeárnyalatos esetén képek) blokkonként balról jobbra, fentről lefelé. A fent leírt műveleteket minden egyes kódolt képblokkon végrehajtják, és a kódolási eredményeket egyetlen "szkennelés" formájában helyezik el a kimeneti adatfolyamban, azaz a szekvenciálisan átadott ("szkennelt") kódolt adatok tömbjeként. kép. Az alapvonal vagy "alapvonal" kódolási mód csak ilyen ábrázolást tesz lehetővé (és a kvantált DCT együtthatók Huffman-kódolását). A kiterjesztett (bővített) mód a szekvenciális móddal együtt lehetővé teszi a progresszív (progresszív JPEG) adatábrázolást is, komponensenként/pixelenként 12 bit bitmélységű képeket kódolva (az ilyen képek JFIF specifikációval történő tömörítése nem támogatott), és a kvantált DCT együtthatók aritmetikai kódolása.

Progresszív JPEG esetén a tömörített adatok szkennelések sorozataként kerülnek a kimeneti adatfolyamba, amelyek mindegyike egyre részletesebben írja le a teljes képet. Ez vagy úgy érhető el, hogy minden letapogatásnál nem a DCT együtthatók teljes készletét rögzítik, hanem csak néhányat: először - alacsony frekvenciát, a következő letapogatásoknál - nagyfrekvenciát (a "spektrális kiválasztási" módszer, vagyis a spektrális minták ), vagy egymást követő, szkennelésről letapogatásra, a DCT-együtthatók finomításával (“sucessív közelítés” módszer, azaz egymást követő közelítés). Ez a progresszív adatábrázolás különösen hasznos tömörített képek kis sebességű kommunikációs csatornákon történő továbbításakor, mivel lehetővé teszi a teljes kép megtekintését a JPEG fájl egy kis részének átvitele után.

Mindkét leírt séma (mind a szekvenciális, mind a progresszív JPEG) DCT-n alapul, és alapvetően nem teszi lehetővé az eredetivel teljesen azonos helyreállított kép létrehozását. A szabvány azonban lehetővé teszi a DCT-t nem használó, hanem lineáris prediktor (veszteségmentes, azaz „veszteségmentes”, JPEG) alapján felépített tömörítést is, amely garantálja a teljes, bitenkénti egyezést a eredeti és restaurált képek. Ugyanakkor a fényképes képek tömörítési aránya ritkán éri el a 2-t, de bizonyos esetekben szükség van a torzítás garantált hiányára. Érezhetően nagyobb tömörítési arány érhető el az ISO/IEC 14495-1 szabványban leírt JPEG-LS tömörítési módszerrel, amely a nevek hasonlósága ellenére nem kapcsolódik közvetlenül a JPEG ISO/IEC 10918-1 szabványhoz (ITU T.81 ajánlás). ) szabvány (ITU T.87 ajánlás).

Szintaxis és szerkezet

A JPEG-fájl markerek sorozatát tartalmazza , amelyek mindegyike egy 0xFF bájttal kezdődik, amely jelzi a marker elejét, és egy azonosító bájttal. Egyes markerek csak ebből a bájtpárból állnak, míg mások további adatokat tartalmaznak, amelyek egy kétbájtos mezőből állnak a marker információs részének hosszával (beleértve ennek a mezőnek a hosszát, mínusz a marker elejének két bájtja , azaz 0xFF és azonosító) és magát az adatot. Ez a fájlstruktúra lehetővé teszi, hogy gyorsan megtalálja a jelölőt a szükséges adatokkal (például a sor hossza, a sorok száma és a tömörített kép színösszetevőinek száma).

Alapvető JPEG markerek [6]
Jelző bájtok Hossz Célja Hozzászólások
SZÓVAL ÉN 0xFFD8 Nem Kép indítása
SOF0 0xFFC0 változó méretű Képkocka indítása (alap, DCT) Azt jelzi, hogy a képet alap módban kódolták DCT és Huffman kóddal . A jelölő tartalmazza a sorok számát és a képsor hosszát (kétbájtos mezők 5-ös, illetve 7-es eltolással a marker elejéhez képest), az összetevők számát (9-es bájtmező a jelölő elejéhez viszonyítva) az összetevőnkénti bitek száma szigorúan 8 (a bájtmező 4-es eltolással a kezdőjelölőhöz képest), valamint a komponensek aránya (például 4:2:0) .
SOF1 0xFFC1 változó méretű Képkocka eleje (kiterjesztett, DCT, Huffman kód) Azt jelzi, hogy a képet kiterjesztett módban kódolták DCT és Huffman kóddal. A marker tartalmazza a kép sorainak számát és sorhosszát, a komponensek számát, a komponensenkénti bitek számát (8 vagy 12), valamint a komponensek arányát (pl. 4:2:0).
SOF2 0xFFC2 változó méretű Képkocka kezdete (progresszív, DCT, Huffman kód) Azt jelzi, hogy a képet progresszív módban kódolták DCT és Huffman kóddal. A marker tartalmazza a kép sorainak számát és sorhosszát, a komponensek számát, a komponensenkénti bitek számát (8 vagy 12), valamint a komponensek arányát (pl. 4:2:0).
DHT 0xFFC4 változó méretű Huffman asztalokat tartalmaz Egy vagy több Huffman táblát határoz meg.
DQT 0xFFDB változó méretű Kvantáló táblázatokat tartalmaz Egy vagy több kvantálási táblát ad meg.
DRI 0xFFDD 4 bájt Megadja az újraindítási időköz hosszát Megadja a távolságot az n RST markerek között a makroblokkokban. DRI hiányában az n RST markerek előfordulása a kódolt adatfolyamban illegális, és hibának minősül. Ha az n RST markereket nem használjuk a kódolás során, akkor a DRI markert vagy egyáltalán nem használjuk, vagy az ismétlési intervallumot 0-ra adjuk meg.
SOS 0xFFDA változó méretű Indítsa el a szkennelést A kép első vagy következő beolvasásának eleje balról jobbra, felülről lefelé haladva. Ha az alap kódolási módot használta, a rendszer egy keresést használ. Progresszív módok használatakor többszörös letapogatást használnak. Az SOS marker elválasztja a kép informatív (fejléc) és kódolt (valójában tömörített adatok) részét.
RST n 0xFFDn _ Nem újrakezd Az újraindítási markerek az entrópiakódoló által kódolt adatok szegmentálására szolgálnak. Minden szegmensben az adatok egymástól függetlenül dekódolásra kerülnek, ami lehetővé teszi a dekódolási eljárás párhuzamosítását. Ha a kódolt adatok megsérülnek egy JPEG fájl átvitele vagy tárolása során, az újraindítási jelzők használata lehetővé teszi a veszteség korlátozását (a sértetlen szegmensekből származó makroblokkok helyesen állnak vissza). Minden r . makroblokkhoz beszúrva , ahol r  a marker DRI újraindítási intervalluma. DRI marker hiányában nem használható. n , alacsony 3 bites kódjelölő, ciklusok 0-tól 7-ig.
APP n 0xFFen _ változó méretű Alkalmazás szerint beállítva Például egy JPEG- fájl EXIF -je az APP1 jelölőt használja a metaadatok TIFF - alapú struktúrában való tárolására .
COM 0xFFFE változó méretű Megjegyzés A megjegyzés szövegét tartalmazza.
EOI 0xFFD9 Nem A kép kódolt részének vége.

Előnyök és hátrányok

A JPEG-tömörítés hátrányai közé tartozik a jellegzetes műtermékek megjelenése a visszaállított képeken nagy tömörítési arány mellett : a kép 8x8 pixeles méretű blokkokra van szétszórva (ez a hatás különösen észrevehető azokon a képterületeken, ahol a fényerő sima változásai vannak), azokon a területeken, ahol magas. A térbeli frekvencia (például a kontrasztkontúrokon és a kép határain) a műtermékek zajgördék formájában jelennek meg. A JPEG szabvány (ISO/IEC 10918-1, K melléklet, K.8. pont) speciális szűrők használatát írja elő a blokk-műtermékek elnyomására, de a gyakorlatban az ilyen szűrőket nagy hatékonyságuk ellenére gyakorlatilag nem használják.

A JPEG azonban a hiányosságok ellenére nagyon elterjedt a meglehetősen magas (a megjelenése idején létező alternatívákhoz képest) tömörítési arány, a színes képtömörítés támogatása és a viszonylag alacsony számítási bonyolultság miatt .

JPEG tömörítési arány

A JPEG szabvány szerinti tömörítési folyamat felgyorsítása érdekében hagyományosan a számítások párhuzamosítását alkalmazzák, különösen a DCT kiszámításakor. Történelmileg az egyik első kísérletet a tömörítési folyamat felgyorsítására ezzel a megközelítéssel Kasperovich és Babkin [7] 1993-as cikkében írták le , amely egy eredeti DCT-közelítést javasolt, amely lehetővé teszi a számítások hatékony párhuzamosítását 32 bites általános célú felhasználással. Intel 80386 processzorok regiszterei . A később megjelent erősebb számítási sémák az x86 architektúrájú processzor utasításkészletének SIMD kiterjesztéseit használták . Lényegesen jobb eredmények érhetők el azokkal a sémákkal, amelyek a grafikus gyorsítók számítási képességeit ( NVIDIA CUDA és AMD FireStream technológiák ) használják a párhuzamos számítások megszervezésére nemcsak a DCT, hanem a JPEG-tömörítés más szakaszaiban is (színtér-konverzió, futási szint, statisztikai kódolás stb.). ), és minden 8x8-as kódolású vagy dekódolt képblokkhoz. A cikk [8] bemutatta a JPEG algoritmus összes szakaszának párhuzamosításának megvalósítását CUDA technológiával, amely jelentősen megnövelte a JPEG szabvány szerinti tömörítési és dekódolási sebességet.

Lásd még

Jegyzetek

  1. Oxfordi szótár . Letöltve: 2014. november 11. Az eredetiből archiválva : 2014. november 11..
  2. Emma Woollacott. A digitális bárka célja az elhalt  adatformátumok megőrzése . TG Daily (2010. május 21.). Letöltve: 2016. szeptember 1. Az eredetiből archiválva : 2017. június 6..
  3. Az információtechnológia területén a GOST 34.003-90 szabványnak megfelelően ez a kifejezés férfias
  4. ISO/IEC 10918-1 : 1993(E) p.28 (hivatkozás nem érhető el) . Archiválva az eredetiből 2011. augusztus 22-én. 
  5. Kerr, Douglas A. "Chrominance Subsampling in Digital Images" . Letöltve: 2010. május 27. Az eredetiből archiválva : 2021. február 24.
  6. ISO/IEC 10918-1 : 1993(E) p.36 (hivatkozás nem érhető el) . Archiválva az eredetiből 2011. augusztus 22-én. 
  7. Kasperovich, LV, Babkin, VF "Gyors diszkrét koszinusz transzformáció közelítése JPEG képtömörítéshez" . Letöltve: 2017. október 3. Az eredetiből archiválva : 2018. június 15.
  8. "CUDA technológia használata a JPEG képek gyors tömörítésére" . Letöltve: 2012. december 3. Az eredetiből archiválva : 2013. március 30.

Linkek