JPEG

Innen: testwiki
Ugrás a navigációhoz Ugrás a kereséshez

Sablon:Fájlformátum infobox 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

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

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

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:

[YPbPr][0,2990,5870,1140,1687360,3312640,50,50,4186880,081312][RGB]

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:

[YCbCr][0128128]+[0,2990,5870,1140,1687360,3312640,50,50,4186880,081312][R'dG'dB'd]

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

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ó

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:

Fxy=14CxCym=07n=07fmncos(2m+1)xπ16cos(2n+1)yπ16

ahol

Cx,Cy={12ha x,y=01különben 

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

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:

FQ(x,y)=F(x,y)Q(x,y)

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:

Q=[10152537516682100151928395267831012528354558728810537394554667994111515258667689103119666772798910111413082838894103114127142100101105111119130142156]F=[782,9144,93172,5235,2820,5835,932,883,85122,3575,467,5255,0030,7217,738,291,972,9932,7757,1830,071,7617,6312,2313,577,980,662,4121,2831,0717,209,6816,943,877,070,565,132,4715,0917,703,763,770,801,463,501,484,136,3218,471,783,284,633,272,392,315,2111,771,750,432,723,053,951,831,983,87]FQ=[78371010084011000012100000000000000000000000000000000000000000000]

Átrendezés és különbségi kódolá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

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

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ó

A DCT invertálható, inverze az IDCT:

fxy=14m=07n=07CmCnFmncos[(2x+1)mπ16]cos[(2y+1)nπ16]

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

A színtér átszámítása

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

[RGB]=[101,40210,3441360,71413611,7720][YPbPr]

ahol:

[YPbPr]=[YCbCr][0128128]

Progresszív JPEG

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

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

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

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

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

Sablon:Jegyzetek

Források

  • Heiner Küsters: Bilddatenkomprimierung mit JPEG und MPEG. Franzis, Poing 1995, Sablon:ISBN
  • Thomas W. Lipp: Grafikformate. Microsoft Press, Unterschleißheim 1997, Sablon:ISBN
  • John Miano: Compressed Image File Formats. Addison-Wesley, Reading 2000, Sablon:ISBN
  • William Pennebaker, Joan Mitchell: JPEG Still Image Data Compression Standard. Chapman & Hall, New York 1993, Sablon:ISBN
  • Tilo Strutz: Bilddatenkompression. Vieweg, Wiesbaden 2005, Sablon:ISBN

Fordítás

Lásd még

Külső hivatkozások

Sablon:Portál

Sablon:Csonk-informatika