JPEG

A Wikipédiából, a szabad enciklopédiából
Joint Photographic Experts Group
Egy virágról készült fénykép balról jobbra haladva lépcsőzetesen egyre veszteségesebb JPEG tömörítést használva
Egy virágról készült fénykép balról jobbra haladva lépcsőzetesen egyre veszteségesebb JPEG tömörítést használva
Fájlkiterjesztés .jpeg, .jpg, .jpe
.jfif, .jfi (konténerek)
MIME-típus image/jpeg
Fejlesztő Joint Photographic Experts Group
Formátum típusa bináris fájlformátum bittérképes képek tárolására
Mac OS típuskód JPEG
Weboldaljpeg.org/jpeg/

A JPEG – (Joint Photographic Experts Group) képek tárolására alkalmas fájlformátum. Kiterjesztéseként a .jpeg, .jpg, ritkábban a .jpe használt. A JPEG normát 1992-ben fogadták el, ami különböző képtömörítési módokat ír le.

A képen lévő információt veszteségesen tömöríti ez a formátum. A szabvány által leírt veszteségmentes tömörítést nem használják. Bár a tömörítés információveszteséggel jár, akár 10-100× kisebb fájlméret mellett is élvezhető a tömörített kép. Elsősorban fényképek, rajzok tárolására való. Grafikonok és egyéb hirtelen színátmenetű ábrák tárolására veszteségmentes tömörítésű formátum való (például PNG, GIF).

A módszer különböző színmélységeket tud kezelni, továbbá használható szekvenciális és progresszív módban is. Az előbbi soronként dolgozik, az utóbbi először a durva formákat, majd a finomabb részleteket rajzolja ki. A JPEG-ben nem képpontokat tárolnak le, hanem a képet transzformálják a frekvencia-tartományba a DCT-vel (diszkrét cosinus transzformáció).

A JPEG napjainkban az egyik leginkább elterjedt képformátum. Továbbfejlesztése a JPEG2000, mely a DCT (diszkrét cosinus transzformáció) helyett Wavelet transzformációt használ. Ez a 8×8 pixeles elemi blokkok határán jelent nagy könnyebbséget.

A szabvány csak a tömörítési eljárást írja le, de nem határozza meg azok tárolási módját. A JPEG képeket JFIF (JPEG File Interchange Format) formátumban tárolják. A SPIFF és a JNG képek szintén JPEG tömörítéssel készülnek, de máshogy tárolják őket.

Áttekintés[szerkesztés]

Az ISO/IEC 10918-1 JPEG szabvány a következő módokat definiálja:

Szekvenciális (Sequential) Progresszív (Progressive) Veszteségmentes (Lossless) Hierarchikus (Hierarchical)
Huffman-kódolás Aritmetikai kódolás Huffman-kódolás Aritmetikai kódolás
8 bit 12 bit 8 bit 12 bit 8 bit 12 bit 8 bit 12 bit

Ezek közül csak a 8 bites, Huffman-kódolású változatok használatosak.

A JPEG-LS javított, veszteségmentes módszert egy másik szabvány definiálja. A fekete-fehér képeket a JBIG eljárással is lehet tömöríteni.

A JPEG és a JPEG-LS formátumokat a következő szabványok rögzítik:

JPEG (veszteséges és veszteségmentes): ITU-T T.81 (PDF; 1,1 MB), ISO/IEC IS 10918-1
JPEG (Bővítések): ITU-T T.84
JPEG-LS (veszteségmentes, javított): ITU-T T.87 , ISO/IEC IS 14495-1

A JPEG szabvány hivatalos címe: Information technology – Digital compression and coding of continuous-tone still images: Requirements and guidelines. Itt a joint a következők együttműködésére utal: ITU, IEC és ISO.

A tömörítés[szerkesztés]

A JPEG-norma 41 különböző alformátumot ír le, amelyek közül többnyire csak egyet használnak.

A kép feldolgozása több lépcsős, amelyek közül négy veszteséges:

  • A színtér átszámítása az RGB színtérből YCbCr színtérbe a CCIR 601 szerint (veszteséges)
  • A Cb és Cr színkomponensek szűrése és letapogatása (veszteséges)
  • Felosztás 8x8-as blokkokra és a blokkok diszkrét koszinusz transzformációja (kerekítési hibák miatt veszteséges)
  • Kvantálás (veszteséges)
  • Átrendezés
  • Entrópiakódolás

A veszteséget az emberi szem egészen 1,5–2 bit/pixel adatmennyiségig nem látja; 0,3 bit/pixel alatt a kép használhatatlan, mivel a tömörítési eljárás során olyan mintázatok kerülnek rá, amelyek eredetileg nem voltak rajta: blokkok képződnek, olyan színek jelennek meg, amelyek nem voltak ott, a színek elmosódnak, a kép szürkül. A JPEG 2000-nél ezek a jelenségek lényegesen ritkábban jelentkeznek.

Ha a forrásfájl 24-bit-RGB fájl, akkor a 12 - 15-szörös tömörítés szemre veszteségmentes, 35-ig még jó kép. Ezek a számok azonban függnek magától a képtől is. Ha az sok apró részletet tartalmaz, akkor az csökkenti az élvezhető tömörítés arányát.

A veszteségmentes módszer máshogy működik, prediktív kódon és entrópiakódoláson alapul.

A színtér transzformációja[szerkesztés]

Fent az eredeti színes kép, alatta rendre az Y, Cb és Cr komponensek. A színkomponenseken látható gyenge kontraszt mutatja, hogy miért csökkenthető ezek felbontása

A kiindulási RGB képet az YCbCr színtérbe transzformálják, Alapvetően az YPbPr sémát használják a CCIR 601 szerint:

Mivel az R′G′B′ értékeknek 8 bites számokként az {0, 1, …, 255} tartományba kell esniük, ezért normálni kell őket. Így keletkeznek az Y′ (luminance), Cb (color blueness) és Cr (color redness) komponensek:

Ezzel a komponensek az {0, 1, …, 255} értéktartományba kerülnek.

A veszteségek részben kerekítési hibák, részben abból származnak, hogy a Cb és a Cr értékeket csak minden második pixelre számítják ki.

A színkülönbségi jelek mélységi szűrése[szerkesztés]

Többnyire a Cb és Cr értékeket csökkentett felbontással mentik el. A mélységi szűrés legegyszerűbb módja a középértékek számítása.

A letapogatást többnyire vízszintesen és függőlegesen is elvégzik, amelyek rendre a felére csökkentik az információmennyiséget, így az a negyedére csökken. Ezzel azt használják ki, hogy az ember színlátásának a felbontása kisebb, mint a kontrasztok látásáé.

Blokképzés és diszkrét koszinusztranszformáció[szerkesztés]

A 8x8-as blokkokat ezeknek a blokkoknak a lineáris kombinációjaként állítják elő
JPEG kép részlete kinagyítva. A kis kockák nem pixelek, hanem 8x8-as blokkok

A kép minden komponensét 8x8-as blokkokba osztják. Ezeket két dimenziós diszkrét koszinusz transzformációval transzformálják:

ahol

Ez a transzformáció a gyors Fourier-transzformációval hatékonyan implementálható. A DCT ortogonális transzformáció energiatömörítése jó, és invertálható is, inverze az IDCT. Ez a lépés elvben veszteségmentes, csak arra szolgál, hogy a további lépésekhez kedvező alakba hozza az adatokat.

Kvantálás[szerkesztés]

Ahogy a legtöbb veszteséges képtömörítési eljárásnál, úgy a tulajdonképpeni tömörítést kvantálással végzik. Ehhez a DCT együtthatókat osztják a kvantálási mátrix elemeivel, majd veszik az alsó egészrészét:

A kvantálási mátrix felel a megadott minőségért és a tömörítési arányért. Ez a mátrix a JPEG fájl fejlécében is szerepel DQT-markerként.

A kvantálási mátrix optimális esetben megfelel az emberi szem jellegzetességeinek. Mivel a durvább szerkezetekre érzékenyebb, ezért ezekre a kvantálási mátrixban kisebb számok szerepelnek.

Példa a kvantálási mátrixra és alkalmazása a 8x8-as blokkok DCT együtthatóira:

Átrendezés és különbségi kódolás[szerkesztés]

A JPEG képkomponensek cikcakkos sorrendje

A diszkrét koszinusztranszformáció 64 együtthatóját frekvencia szerint rendezik. Így cikcakk alakban járják be őket, a 0 frekvenciájú résszel kezdve. Az egyenáram angol neve (direct current) alapján DC-nek is nevezik, és a közepes világosságot kódolja. Többnyire a nagy együtthatójú elemek kerülnek előre, és őket követik a kis együtthatós elemek. Ez optimalizálja a bemenetet a következő futamhossz alapú kódoláshoz. A sorrend számokkal így néz ki:

 1  2  6  7 15 16 28 29
 3  5  8 14 17 27 30 43
 4  9 13 18 26 31 42 44
10 12 19 25 32 41 45 54
11 20 24 33 40 46 53 55
21 23 34 39 47 52 56 61
22 35 38 48 51 57 60 62
36 37 49 50 58 59 63 64

Az első elemet a balszomszéd blokkhoz igazítják, így figyelembe veszik a szomszédok közötti kapcsolatot is.

A fenti példa átrendezés után a következő együtthatókat adja:

119  …
 78   3  -8  0 -4  7 -1  0 -1  0  0  0 -2  1  0  1  1 -1 0 …
102   5  -5  0  3 -4  2 -1  0  0  0  0  1  1 -1  0  0 -1 0 0 0 0 0 0 0 1 0 …
 75 -19   2 -1  0 -1  1 -1  0  0  0  0  0  0  1 …
132  -3  -1 -1 -1  0  0  0 -1  0 …

Az első együttható különbségi kódolásának eredménye:

-41   3  -8  0 -4  7 -1  0 -1  0  0  0 -2  1  0  1  1 -1 0 …
 24   5  -5  0  3 -4  2 -1  0  0  0  0  1  1 -1  0  0 -1 0 0 0 0 0 0 0 1 0 …
-27 -19   2 -1  0 -1  1 -1  0  0  0  0  0  0  1 …
 57  -3  -1 -1 -1  0  0  0 -1  0 …

A kép kevésbé részletgazdag területein az együtthatók így is kinézhetnek:

 35 -2  0 0 0 1 0 …
  4  0  1 0 …
  0  0  2 0 1 0 …
-13  0 -1 …
  8  1  0 …
 -2  0 …

Ezek a területek jobban leírhatók, mint a részletgazdag területek. A futamhossz kódolás is jobban tömöríti ezeket a régiókat.

Az együtthatók cikcakkos elrendezése szabadalmi oltalom alatt állt Európában és Észak-Amerikában is. 2002-ben kiderült, hogy a védett eljárást már korábban alkalmazták, úgyhogy a szabadalmi védelem nem tartható fenn.[1] A szabadalmak időközben lejártak.

Entrópiakódolás[szerkesztés]

Az entrópiakódoláshoz általában Huffman-kódolást használnak. A JPEG szabvány megengedi az aritmetikai kódolást is. Habár ez 10-15%-kal kisebb képet készít, ritkán használják, mivel lassítja a tömörítést, és szabadalmi oltalom alatt is áll.

Dekódolás[szerkesztés]

A kitömörítés a tömörítés inverz műveleteit hajtja végre fordított sorrendben:

  • Entrópia dekódolás
  • Átrendezés
  • Újrakvantálás
  • Inverz diszkrét koszinusztranszformáció
  • Az U és V színkülönbségjelek letapogatása és mélységi szűrése
  • Áttérés a YCbCr színtérből a célszíntérbe (többnyire RGB)

A kitömörítés veszteségmentes, de mivel a tömörítés veszteséges volt, ezért nem lehet egyértelműen rekonstruálni az eredeti képet. A tömörítés és a kitömörítés együttese veszteséges, amit a folytatólagos tömörítés és kitömörítés párosok folyamán felhalmozódó hibák mutatnak.

Ha a kvantálási mátrix ugyanaz marad, és a blokkhatárok sem változnak, akkor a folytatólagos műveletek által felhalmozódó veszteség viszonylag kicsi. Hogyha ezek a feltételek teljesülnek, akkor elhanyagolhatók. A JPEG-2000 már másként viselkedik, ott a blokkok átfedik egymást, emiatt a veszteségek a jelen számítási teljesítmények mellett nem válnak elhanyagolhatóvá, viszont csak sokkal később jelennek meg, mint a hagyományos JPEG változó blokkhatárainak esetén.

Inverz diszkrét koszinusztranszformáció[szerkesztés]

A DCT invertálható, inverze az IDCT:

a DCT-ben használt együtthatókkal.

A színtér átszámítása[szerkesztés]

Az YCbCr színtérből az RGB színtérbe az inverz mátrixszal lehet visszatérni:

ahol:

Progresszív JPEG[szerkesztés]

A JPEG fájl együtthatókat tartalmaz, amelyek nem egyes pixeleket írnak le, hanem egy 8*8-as blokk teljes tartalmának közelítését. A progresszív JPEG képben rendre először a blokkok első együtthatóit írják le, majd a második együtthatók következnek, és így tovább, a minőségtől függően. Így a kép egyre részletesebben rajzolódik ki a kitömörítés folyamán.

A progresszív JPEG a progresszív GIF-hez hasonlóan előnézetet ad; ez fontos lehet, ha csak az előnézetre van szükség, vagy ha a kitömörítés lassú, és legalább fél másodpercig tart. Ennek ellenére a nagyobb képeket általában normál JPEG módban tömörítik.

A JPEG képek utólagos feldolgozása[szerkesztés]

Veszteségek egy szabálytalan, 1021 × 767-es felbontású (a méretei nem oszthatók 16-tal) adott számú derékszögű forgatás és mentés után.
Ezzel szemben a szabályos felbontású képek (színes: mindkét méret 16-tal fekete-fehér: mindkét méret 8-cal osztható), például az 1024 × 768-as méretűek forgatása és mentése megfelelő implementációval veszteségmentes, mivel a blokkok és a kvantálási mátrix is megmarad

Habár a JPEG tömörítés és kitömörítés párosa veszteséges, néhány feldolgozási lépés elvben veszteségmentes:

  • A derékszög többszörösével való elforgatás (90 fok, 180 fok, 270 fok)
  • Vízszintes és függőleges tükrözések
  • Színes képek széléből 16 pixel többszöröseinek megfelelő szélességű csíkok levágása, illetve ugyanez fekete-fehér képek esetén a 8 pixel többszöröseinek megfelelő csíkokkal.

Mindezekhez a lépésekhez elegendő az entrópiakódot és a cikcakkos sorrendet visszafejteni. A műveletek elvégzése után ugyanezeket a műveleteket kell újra elvégezni. Mivel ezek a műveletek nem igénylik a DCT-együtthatók visszafejtését, ezért nincs szükség a veszteséges dekódolás-kódolás párra. A részleges visszafejtéshez azonban a képszerkesztőnek külön modulra van szüksége. A legtöbb képszerkesztő azonban nem tartalmaz ilyen modult.

A részleges ki- és visszatömörítést támogatja az IrfanView és a konzolos Jpegtran program.

Ha egy JPEG kép eredetijének legalább egyik mérete nem osztható 8-cal, akkor a képen a fenti műveletek csak egyszer végezhetők el veszteségmentesen, mivel például forgatáskor a blokkhatárok megváltoznak. Ugyanis a JPEG szabvány csak a kép jobb és alsó szélén enged meg csonka blokkokat. Ha viszont a művelet előtt éppen a csonka blokkokat, és esetleg 8*8-as sávokat vágunk le, akkor a kép szabályos méretűként viselkedik.

Minőség és rokon formátumok[szerkesztés]

A JPEG tömörítést a természetes raszteres fényképek és a számítógéppel generált képek számára fejlesztették ki.

A JPEG nem alkalmas a következők tárolására:

  • Digitális képek, grafikák hirtelen színátmenetekkel
  • Pontonként 1 bitet tartalmazó fekete-fehér képek

A JPEG emellett az átlátszóságot sem kezeli. Mindezek a képek számára sokkal alkalmasabbak a GIF, PNG vagy a JBIG formátumok.

A minőség utólagos megnövelése nem hozza vissza az elvesztett információkat, de megnöveli az igényelt tárhelyet. A kvantálási mátrixok tetszőlegesek lehetnek, még csak normáltnak sem kell lenniük. Egyes programokban a csúszkával 0 és 100 százalék között állítható minőség a kvantálási mátrixot állítja be. Hogyha a minőség 100%, akkor is végrehajtódik a kvantálás, ami óhatatlanul veszteséget okoz.

Az alábbi képek a különböző minőségi beállítással szerkesztett JPEG képeket hasonlítják össze. A portré mérte 200 × 200, tehát mindkét irányban 8-cal osztható. Tömörítés nélkül 24 bites színmélységgel mérete 120 kilobájt a fejléc és más kísérő információk nélkül. A 8 × 8-as blokkok a 20%-os minőségű kép kinagyított részletén láthatók. Emellett a gyűrűződés is probléma lehet, amit a DCT viselkedése okoz a hirtelen színátmeneteknél.

Különböző minőségű JPEG képek: 90, 60, és 20 százalékos minőséggel. A 20%-os minőségű kép részlete kinagyítva

A JPEG transzformáció nem idempotens. Már a kép megnyitása és elmentése is a veszteséges ki- és betömörítés párosát hajtja végre további veszteségekkel.

A professzionális képfeldolgozók, fényképészek, grafikusok ritkán használnak JPEG-et, mivel veszteséges. A tárhely csökkentésével szemben inkább a veszteségmentesség a fontos. Erre példák a TIFF, a BMP, a TGA vagy a PNG. Egy tömörítés nélkül 6 megapixeles kép három alapszínnel és alapszínenként 16 bites mélységgel 36 megabájtos, ami kevéssé csökkenthető, ha a kép sok apró részletet, ködöt vagy zajos. A részletgazdag képek esetén a tömörítési arány általában 50% körüli.[2]

A már meglevő JPEG képek tömörítése további veszteségek nélkül optimalizálható, így a szükséges tárhely csökkenthető. Az ezzel foglalkozó programok akár 25%-kal is csökkenthetik a képfájl méretét.[3]

A filmek tömörítéséhez használt MPEG-1, a hozzá kapcsolódó Motion JPEG kodek és MPEG-2 is a JPEG szabványon alapul. A JPEG továbbfejlesztése a JPEG2000, ami azonban kevéssé terjedt el annak ellenére, hogy jobb tömörítést lehet vele elérni, és más kedvező tulajdonságai vannak. Egy másik továbbfejlesztés a Microsoft JPEG XR, ami csak közvetve, a HD Photo formátumon keresztül alapul a JPEG-re. EZt szintén csak ritkán támogatják.

Szabadalmi kérdések[szerkesztés]

Több cég is megtámadott szoftverfejlesztő vállalatokat, amelyek a JPEG képek megtekintésére és szerkesztésére alkalmas programokat adtak ki. A legtöbb szabadalmi igényt megsemmisítették, sőt visszamenőlegesen hatálytalanították is. Ennek ellenére peren kívüli megegyezésekkel milliós bevételekre tesznek szert.[4]

Implementációk[szerkesztés]

A libjpeg a JPEG-kodek egy nagyon fontos ingyenes implementációját tartalmazza. Első verziója 1991-ben jelent meg, és kulcsszerepe volt a JPEG elterjedésében.[5] Rengeteg különböző program használja ezt, vagy valamelyik átdolgozott változatát.

Jegyzetek[szerkesztés]

  1. jpeg.org. [2014. október 30-i dátummal az eredetiből archiválva]. (Hozzáférés: 2011. május 29.)
  2. Vergleich der Eigenschaften (auch Kompression) von BMP GIF PNG JPEG TIFF PCX TGA, abgerufen 10. Oktober 2012
  3. Archivált másolat. [2014. szeptember 22-i dátummal az eredetiből archiválva]. (Hozzáférés: 2014. szeptember 18.)
  4. engl. Wikipedia: Patent-Forderungen
  5. http://jpeg.org/jpeg

Források[szerkesztés]

  • Heiner Küsters: Bilddatenkomprimierung mit JPEG und MPEG. Franzis, Poing 1995, ISBN 3-7723-7281-3
  • Thomas W. Lipp: Grafikformate. Microsoft Press, Unterschleißheim 1997, ISBN 3-86063-391-0
  • John Miano: Compressed Image File Formats. Addison-Wesley, Reading 2000, ISBN 0-201-60443-4
  • William Pennebaker, Joan Mitchell: JPEG Still Image Data Compression Standard. Chapman & Hall, New York 1993, ISBN 0-442-01272-1
  • Tilo Strutz: Bilddatenkompression. Vieweg, Wiesbaden 2005, ISBN 3-528-23922-0

Fordítás[szerkesztés]

  • Ez a szócikk részben vagy egészben a JPEG című német Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.

Lásd még[szerkesztés]

Külső hivatkozások[szerkesztés]