JPEG (kurz JPG) ist das am weitesten verbreitete Format zur Speicherung von digitalen (Raster-)Bildern.
JPEG ist die Abkürzung für Joint Photographic Experts Group, einem 1986 gegründeten Gremium der ITU.
Dieses Gremium entwickelte ein im September 1992 standardisiertes Verfahren zur sowohl verlustbehafteten wie verlustlosen Kompression von digitalen (natürlichen) Bilder, das nach dem Gremium benannt wurde.
Nachfolgeprojekte sind JBIG (Bilevel Images, Schwarzweißzeichnungen) und JPEG-2000 (bessere Kompression, viele sinnvolle Features), die sich aber zumindest bis jetzt nicht durchsetzen konnten. Die Bewegtbildkompressionsverfahren MPEG-1 und MPEG-2 bauen auf JPEG auf. MPEG-4 baut auf JPEG-2000 auf.
JPEG Kompression
Die JPEG-Kompression ist in der ITU T.81-Norm definiert, die frei verfügbar ist (http://www.w3.org/Graphics/JPEG/itu-t81.pdf).
Norm definiert 41 verschiedene Dateiformate, allerdings wird meist nur 1 Format von den Programmen unterstützt.
Die Kompression erfolgt durch das Anwenden mehrerer Verarbeitungsschritte, von denen nur zwei verlustbehaftet sind:
- Farbraumumrechnung vom (meist) RGB-Farbraum in den YUV (nach IEC 601).
- Tiefpaßfilterung und Unterabtastung der Farbdifferenzsignal U und V (verlustbehaftet).
- Einteilung in 8x8 Blocks und Diskrete Kosinustransformation dieser.
- Quantisierung (verlustbehaftet).
- Umsortierung.
- Huffmankodierung (optional: arithmetische Kodierung)
Die Datenreduktion erfolgt durch die verlustbehafteten Verarbeitungschritte in Zusammenwirken mit der Huffmankodierung.
Kompression bis etwa 1,5...2 Bit/Pixel sind visuell verlustfrei, bei 0,7...1 Bit/Pixel sind noch gute Ergebnisse erzielbar, unter 0,3 Bit/Pixel wird JPEG allerdings unbrauchbar, das Bild wird zunehmend von unübersehbaren Kompressionsartefakten (Blockbildung, stufige Übergänge, Farbeffekte an Graukeilen) überdeckt. Der Nachfolger JPEG-2000 ist wesentlich weniger anfällig für diese Art von Artefakten.
Sieht man als Quellformat 24-bit-RGB-Dateien an, erhält man Kompressionsraten von 12 bis 15 für visuell verlustfreie Bilder bis zu 35 für noch gute Bilder. Die Qualität hängt aber neben der Kompressionrate noch von der Art der Bilder ab. Rauschen und regelmäßige feine Strukturen im Bild verringern die maximal mögliche Kompressionsrate.
Farbraumumrechung
Das Bild, welches meist als RGB-Bild vorliegt, wird in den YUV-Farbraum umgerechnet. Es wird dabei der YUV 601-Farbraum verwendet:
[ Y' 601 ] [ 0.299 0.587 0.114 ] [ R' ] [ PB 601 ] = [-0.168736 -0.331264 0.5 ] * [ G' ] [ PR 601 ] [ 0.5 -0.418688 -0.081312 ] [ B' ]
Y ist das Schwazweißsignal (entscheidet, ob eine Farbe eher heller oder dunkler ist), PB (oder auch U genannt) ist das Blau-Differenzsignal (entscheidet, ob eine Farbe gelblich oder bläulich ist) und PR (oder auch V genannt) ist das Rot-Differenzsignal (entscheidet, ob eine Farbe eher grünlich oder rötlich ist). Bei 8-Bit-Eingangsdaten sind die Wertebereiche für
Y' 601 = 0...255 PB 601 = -128...128 PR 601 = -128...128
Der maximale Hub der Farbdifferenzsignale entspricht damit in diesem Farbraum genau dem des Schwarzweißsignals (und dem der Quelldaten).
Tiefpaßfilterung der Farbdifferenzsignal
Die Farbdifferenzsignale PB und PR werden meist in reduzierter Auflösung gespeichert. Dazu werden sie tiefpaßgefiltert und unterabgetastet (im einfachsten Fall durch eine Mittelwertbildung).
Blockbildung und Diskrete Kosinustransformation
Jede Komponente des Bildes wird in 8x8 Blocks eingeteilt. Diese werden einer zweidimensionale diskreten Kosinustransformation vom Typ II unterzogen (http://en.wikipedia.org/wiki/DCT#DCT-II). Diese Transformation läßt sich unter Nutzung einer FFT mit sehr wenig Aufwand implementieren.
Die Transformation ist eine orthonormale Transformation, weist gute Energiekompressioneigenschaften auf (oder wie nennt man das im deutschen?) und es gibt eine inverse Transformation (was auch bedeutet, daß die DCT [b]verlustfrei[/b] ist, die Daten [b]nicht[/b] komprimiert, sondern nur in eine günstigere Form bringt).
Die Basisvektoren einer DCT Typ II mit 8x8 Koeffizienten sieht visualisiert so aus: http://goethe.ira.uka.de/seminare/redundanz/vortrag11/basiskl.gif
Quantisierung
Umsortierung und Differenzkodierung des DC-Anteils
Die 64 DCT-Koeffizienten werden umsortiert, so daß meist große Koeffizienten zuerst abgespeichert werden und kleine Koeffizienten weiter hinten. Dies erleichtert die Huffman-Kodierung.
Patentproblem: Es gab Probleme mit U.S. Patent 4,698,672. Diese Patent beinhaltet als Inhalt das Umsortieren von Daten, was bei der Zick-Zack-Umsortierung der DCT-Koeffizienten gemacht wird. Das Patent wurde 2002 als Prior Art abgeschmettert (http://www.jpeg.org/newsrel1.html).
Huffmankodierung
JPEG Dekompression
Die Dekompression (meist Dekodierung genannt) erfolgt invers zur Kompression
- Huffman-Dekodierung
- Umsortierung.
- Requantisierung
- Inverse Diskrete Kosinustransformation.
- Überabtastung und Tiefpaßfilterung der Farbdifferenzsignal U und V (verlustbehaftet).
- Farbraumumrechnung vom YUV-Farbraum in den Zielfarbraum (meist RGB).
Die Dekompression ist zwar (weitgehend) verlustfrei, allerdings tritt das Inverse-Decoder-Problem auf. Die Generationsverluste von JPEG sind allerdings vergleichsweise klein, wenn wieder die gleiche Quantisierungstabelle zum Einsatz kommt. Bei JPEG-2000 ist das nicht mehr der Fall.
Verlustfreie Verarbeitung von JPEG
Obwohl eine Dekodierung und Rekodierung meist verlustbehaftet ist, lassen sich einige Bildmanipulationen ohne unerwünschte Datenverluste durchführen:
- Bilddrehungen um 90°, 180° und 270°
- Bildspieglungen
- Beschneiden von Rändern um Vielfache von 16 Pixeln (bzw. 8 Pixel bei Schwarzweißbilder oder Farbildern ohne Unterabtastung).
Qualitätseinbußen
Das JPEG-Verfahren ist für natürliche (Raster-)Bilder entwickelt worden. Das sind Bilder, wie man sie in der Fotographie oder bei computergenerierten Bilder (CGI) vorfindet. Ungeeignet ist JPEG für
- digitale Strichzeichnungen (z. B. Screenshots oder Vektorgraphiken), in denen es viele benachbarte Bildpunkte mit exakt identischen Farbwerten, wenige Farben und harte Kanten gibt.
- Schwarzweißbilder (nur Schwarz und Weiß, 1 bit pro Bildpunkt).
- gerasterte Bilder (Zeitungsdruck)
Für diese Bilder sind Formate wie GIF, PNG oder JBIG weitaus besser geeignet.
Die Kompressionsparameter einer JPEG-Datei stehen explizit in der Datei drin (64 oder 128 Byte).
Ein nachträgliches Heraufsetzen des Qualitätsfaktors vergrößert zwar den Speicherbedarf der Bilddatei, bringt aber verlorene Bildinformation nicht mehr zurück. Professionelle Anwender speichern ihre Bilder in einem verlustfreien Format (z.B. TIFF) ab. Das Bildrauschen verhindert, dass verlustlose Kompressionsalgorithmen eine nennenswerte Datenreduktion erreichen. Ein 6-Millionen-Pixel-Bild erfordert ein Speichervolumen von ca. 20 MByte. Andere verlustfreie Bildformate sind BMP, je nach Farbraum auch GIF (nur 256 verschiedene Farben) und je nach Einstellung auch PNG (Multiformat).
Das Beispielbild vergleicht Aufnahmen, die mit unterschiedlicher Qualität gespeichert wurden. Die Portrait-Aufnahme besitzt eine Größe von 200x200 Pixel. Wird für jede Farbe ein Byte bereitgestellt, erzeugt die verlustfreie unkomprimierte Speicherung eine Datei von 120 kByte (Vernachlässigung des Dateiheaders).
Die Klötzchenbildung der 8x8 Pixel großen Quadrate stellt das rechte Teilbild vergrößert dar.
Dateiformat
Die Speicherung der mit dem JPEG-Verfahren komprimierten Bilddaten orientiert sich an den Vorgaben des JFIF-Formats (JPEG File Interchange Format). Eine so erzeugte Datei wird umgangssprachlich als JPEG-Datei bezeichnet. Die Dateinamen dieses Formats enden meist auf .jpg oder .jpeg. Es ist auch möglich, EXIF und IPTC-NAA Standard-Informationen in der JPEG-Datei unterzubringen. Die Erweiterungen sind nicht JFIF konform.
Bilddateien, die im JPEG-Verfahren abgespeichert werden, beginnen ungeachtet ihrer Datei-Endung immer mit FF D8
. Sind sie streng JFIF-konform, folgen die Bytes: FF E0 00 10 4A 46 49 46 00 01
. Die Sequenz 4A 46 49 46
steht für JFIF. Gängige Bildprogramme erwarten keinen JFIF-Header.
Die JPEG-Dateien sind in Segmente unterteilt. Die Segmente sind generell in folgender Form aufgebaut: Ein FF xx s1 s2
leitet den Tag ein. FF steht für Hexadezimal 255. Das xx bestimmt die Art des Tags. 256 * s1 + s2 gibt die Länge des Segmentes an. In den Segmenten können sich weitere Bilder verbergen, oft ein kleines Thumbnail-Bild für die schnelle Vorschau. Segmente können auch wiederholt vorkommen.
FF xx |
Bezeichnung/ |
FF D8 |
Start Of Image (SOI) |
FF C0 |
Image Format Information (width, height etc.) |
FF E0 |
JFIF tag |
FF C4 |
Define Huffman Table (DHT) |
FF DB |
Define Quantisation Table (DQT) |
FF E1 |
EXIF Daten |
FF EE |
Oft für Copyright Einträge |
FF En |
n=2..F allg. Zeiger |
FF FE |
Kommentare |
FF DA |
Start of Scan (SOS) |
FF D9 |
End of Image (EOI) |
Ein Beispiel für einen Copyright-Tag:
FF EE 00 26 'File written by Adobe Photoshop. 4.0'
Ein Beispiel für einen Kommentar-Tag:
FF FE sl1 sl2 'I shot this picture yesterday ...'
Aufbau einer JPEG(JFIF)-Datei:
SOI - Segment | FF D8
|
APP0 - Segment | FF E0 s1 s2 4A 46 49 46 v1 v2 ...
|
... weitere Segmente | |
SOS - Segment | FF DA s1 s2 ....
|
Data | Komprimierte Daten |
EOI - Segment | FF D9
|
Die Längenangaben der Segmente enthalten übrigens auch den Platz für die die Längenangaben selbst: Ein leeres Segment hätte daher eine Länge von 2, da dies der Länge der Komponenten s1 und s2 selbst entspricht.
Dem Start of Scan (SOS) Segment (Marker FF DA
) folgen dann direkt die komprimierten Daten, bis zum Start des nächsten Segments, welches durch den nächsten Marker angezeigt wird. Sollte innerhalb der Daten ein FF
auftreten, so wird dies mit einer folgenden 00
(Null) markiert. Andere Werte zeigen das Auftreten eines neuen Segments bzw. Markers an.