- Jpg
-
Dieser Artikel beschreibt die Norm zur Bildkompression. Für das Dateiformat mit der Dateiendung .jpg oder .jpeg, in dem mit diesen Verfahren komprimierte Bilder üblicherweise gespeichert werden, siehe JPEG File Interchange Format. - Farbraumumrechnung vom (meist) RGB-Farbraum ins YCbCr-Farbmodell (nach IEC 601).
- Tiefpassfilterung und Unterabtastung der Farbabweichungssignale Cb und Cr (verlustbehaftet).
- Einteilung in 8×8-Blöcke und diskrete Kosinustransformation dieser Blöcke.
- Quantisierung (verlustbehaftet).
- Umsortierung.
- Entropiekodierung.
- Entropie-Dekodierung
- Umsortierung
- Requantisierung
- Inverse Diskrete Kosinustransformation.
- Überabtastung und Tiefpassfilterung der Farbdifferenzsignal U und V (verlustbehaftet)
- Farbraumumrechnung vom YCbCr-Farbraum in den Zielfarbraum (meist RGB)
- Bilddrehungen um 90°, 180° und 270°
- horizontale und vertikale Bildspiegelungen
- Beschneiden von Rändern um Vielfache von 16 Pixeln (bzw. 8 Pixel bei Schwarzweißbildern oder Farbbildern ohne Unterabtastung)
- digitale Strichzeichnungen (z. B. Screenshots oder Vektorgraphiken), die viele hochfrequente Bildteile (harte Kanten) enthalten,
- Schwarzweißbilder mit 1 Bit pro Bildpunkt,
- gerasterte Bilder (Zeitungsdruck).
- JPEG (verlustbehaftet und verlustfrei): ITU-T T.81 , ISO/IEC IS 10918-1
- JPEG (Erweiterungen): ITU-T T.84
- JPEG-LS (verlustfrei, verbessert): ITU-T T.87 , ISO/IEC IS 14495-1
- JBIG (Schwarzweißbilder): ITU-T T.82 , ISO/IEC IS 11544-1
- JPEG-2000 (Nachfolger von JPEG und JPEG-LS): ITU-T T.800, ISO/IEC IS 15444-1
- JPEG-2000 (Erweiterungen): ITU-T T.801
- Motion JPEG (auch MJPEG oder M-JPEG)
- Progressive Graphics File
- 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
- Offizielle JPEG-Website
- Mathematik zur JPEG-Kompression
- faqs.org: Introduction to JPEG
- The Hitchhiker's Guide to JPEG (Java-Applet)
- Die freie Software JpegCrop (für Windows) kann JPEGs verlustfrei beschneiden.
- Programm jpegoptim für Unix-Systeme (Englisch)
JPEG ist die gebräuchliche Bezeichnung für die 1992 vorgestellte Norm ISO/IEC 10918-1 bzw. CCITT Recommendation T.81, die verschiedene Methoden der Bildkompression beschreibt. Die Bezeichnung „JPEG“ geht auf das Gremium Joint Photographic Experts Group zurück, das die JPEG-Norm entwickelt hat.
JPEG schlägt verschiedene Komprimierungs- und Kodierungsmethoden vor, darunter verlustbehaftete und verlustfreie Komprimierung, verschiedene Farbtiefen sowie sequenzielle oder progressive Modi (normaler Bildaufbau bzw. allmähliche Verfeinerung). Weithin verbreitet ist nur die verlustbehaftete Komprimierung bei sequenziellem oder progressivem Modus und 8-Bit-Farbkanälen.
Die JPEG-Norm beschreibt lediglich Bildkompressionsverfahren, legt aber nicht fest, wie die so entstandenen Daten gespeichert werden sollen. Gemeinhin werden mit „JPEG-Dateien“ oder „JPG-Dateien“ Dateien im Grafikformat JPEG File Interchange Format (JFIF) bezeichnet. JFIF ist jedoch nur eine Art, JPEG-Daten abzulegen; SPIFF und JNG sind weitere, wenn auch wenig gebräuchliche, Möglichkeiten.
Inhaltsverzeichnis |
Übersicht
Die JPEG-Norm ISO/IEC 10918-1 definiert folgende Modi, von denen nur die farbig unterlegten gebräuchlich sind:
Sequenziell (Sequential) | Progressiv (Progressive) | Verlustfrei (Lossless) | Hierarchisch (Hierarchical) | ||||||
Huffman-Kodierung | Arithmetische Kodierung | Huffman-Kodierung | Arithmetische Kodierung | ||||||
8 Bit | 12 Bit | 8 Bit | 12 Bit | 8 Bit | 12 Bit | 8 Bit | 12 Bit |
Zusätzlich zum in ISO/IEC 10918-1 definierten verlustbehafteten Modus gibt es noch die verbesserte, verlustfreie Komprimierungsmethode JPEG-LS, die in einer anderen Norm festgelegt wurde. Außerdem existiert noch die JBIG-Norm zur Komprimierung von Schwarzweißbildern.
Die JPEG-Komprimierung
JPEG-Kompression ist in der Norm ITU T.81 definiert, die frei verfügbar ist ([1], PDF) und den offiziellen Titel Information technology – Digital compression and coding of continuous-tone still images: Requirements and guidelines. trägt. Die Norm ist identisch mit ISO 10918-1 (die dort gegen Bezahlung bezogen werden kann). Das „Joint“ im Namen stammt von der Zusammenarbeit von ITU, IEC und ISO.
Die Norm definiert 41 verschiedene Unterdateiformate, von denen aber meist nur eines unterstützt wird (und welches auch fast alle Anwendungsfälle abdeckt).
Die Kompression erfolgt durch das Anwenden mehrerer Verarbeitungsschritte, von denen nur zwei verlustbehaftet sind.
Die Datenreduktion erfolgt durch die verlustbehafteten Verarbeitungschritte in Zusammenwirken mit der Entropiekodierung.
Kompressionen 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 praktisch unbrauchbar, das Bild wird zunehmend von unübersehbaren Kompressionsartefakten (Blockbildung, stufige Übergänge, Farbeffekte an Graukeilen) überdeckt. Der Nachfolger JPEG 2000 ist wesentlich weniger für diese Art von Artefakten anfällig.
Sieht man als Quellformat 24-Bit-RGB-Dateien an, erhält man Kompressionsraten von 12 bis 15 für visuell verlustfreie Bilder und 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.
Der JPEG Lossless Mode zur verlustfreien Kompression verwendet ein anderes Verfahren (prädiktiver Koder und Entropiekodierung).
Farbraumumrechnung
Das Ausgangsbild, welches meist als RGB-Bild vorliegt, wird in den YCbCr-Farbraum umgerechnet. Grundsätzlich wird dabei das YPbPr-Schema nach CCIR 601 verwendet:
Da die R'G'B'-Werte bereits digital als 8-bit-Zahlen im Bereich {0, 1, ..., 255} vorliegen, müssen die YPbPr-Komponenten lediglich verschoben (renormiert) werden, wodurch die Komponenten Y' (Luminanz), Cb (color blueness) und Cr (color redness) entstehen:
Die Komponenten liegen nun wiederum im Wertebereich {0, 1, ..., 255}.
Bei der Umrechnung des Farbraums entstehen die üblichen Rundungsfehler durch begrenzte Rechengenauigkeit, aber noch keine Datenreduktion.
Tiefpassfilterung der Farbdifferenzsignale
Die Farbabweichungssignale Cb und Cr werden meist in reduzierter Auflösung gespeichert. Dazu werden sie tiefpassgefiltert und unterabgetastet (im einfachsten Fall durch eine Mittelwertbildung).
Meist wird eine vertikale und horizontale Unterabtastung jeweils um den Faktor 2 verwendet (YCbCr 4:2:0), die die Datenmenge um den Faktor 2 reduziert. Bei dieser Umwandlung wird die Tatsache ausgenutzt, dass die Ortsauflösung des menschlichen Auges für Farben deutlich geringer ist als für Helligkeitsübergänge.
Blockbildung und diskrete Kosinustransformation
Jede Komponente (Y, Cb und Cr) des Bildes wird in 8×8-Blöcke eingeteilt. Diese werden einer zweidimensionalen diskreten Kosinustransformation (DCT) unterzogen:
mit
Diese Transformation lässt sich unter Nutzung der schnellen Fourier-Transformation (FFT) mit sehr wenig Aufwand implementieren. Die DCT ist eine orthonormale Transformation, weist gute Energiekompressioneigenschaften auf und es gibt eine inverse Transformation, die IDCT (was auch bedeutet, dass die DCT verlustfrei ist, es gingen keine Informationen verloren, da die Daten lediglich in eine für die weitere Verarbeitung günstigere Form gebracht wurden).
Quantisierung
Wie bei allen verlustbehafteten Kodierungsverfahren wird die eigentliche Datenreduktion (und Qualitätsverschlechterung) durch eine Quantisierung erreicht. Dazu werden die DCT-Koeffizienten durch die Quantisierungsmatrix geteilt (elementweise dividiert) und danach auf die nächstliegende Ganzzahl abgerundet:
Bei diesem Rundungsschritt findet eine Irrelevanzreduktion statt. Die Quantisierungsmatrix ist sowohl für die Qualität, als auch für die Kompressionsrate verantwortlich. Sie ist in JPEG-Dateien im Header abgespeichert (DQT-Marker).
Optimal ist die Quantisierungsmatrix, wenn sie in etwa die Empfindlichkeit des Auges für die entsprechenden Ortsfrequenzen repräsentiert. Für grobe Strukturen ist das Auge empfindlicher, daher sind die Quantisierungswerte für diese Frequenzen kleiner als die für hohe Frequenzen.
Hier ein Beispiel für eine Quantisierungsmatrix und ihre Anwendung auf einen 8×8-Block aus DCT-Koeffizienten:
Umsortierung und Differenzkodierung des Gleichstromanteils
Die 64 Koeffizienten der diskreten Cosinus-Transformation werden anhand der Frequenz sortiert. Dadurch ergibt sich eine Zick-Zack-förmige Reihenfolge, beginnend mit dem Gleichstromanteil mit der Frequenz 0. Nach dem englischen Direct Current wird er mit DC abgekürzt, hier bezeichnet er die mittlere Helligkeit. Die Koeffizienten mit hohem Wert stehen nun meist zuerst und kleine Koeffizienten weiter hinten. Dies optimiert die Eingabe der nachfolgenden Lauflängenkodierung. Die Umsortierreihenfolge sieht folgendermaßen aus:
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
Weiterhin wird der Gleichstromanteil noch einmal differentiell zum Block links daneben kodiert und auf diese Weise die Abhängigkeiten zwischen benachbarten Blöcken berücksichtigt.
Das obige Beispiel führt zu den folgenden umsortierten Koeffizienten
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 ...
Die Differenzkodierung des ersten Koeffizienten ergibt dann:
-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 ...
In strukturarmen Regionen (desselben Bildes) können die Koeffizienten auch so aussehen:
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 ...
Diese Bereiche lassen sich natürlich besser als strukturreiche Gebiete kodieren. Beispielsweise durch eine Lauflängenkodierung.
Die Zick-Zack-Umsortierung der DCT-Koeffizienten fällt zwar unter den Schutzbereich des US-Patentes 4,698,672 (und weiterer Anmeldungen und Patente in Europa und Japan), jedoch wurde 2002 Stand der Technik gefunden, der das beanspruchte Verfahren offenbart, sodass die Ansprüche kaum durchsetzbar sind (siehe [2]).
Entropiekodierung
Als Entropiekodierung wird meist eine Huffman-Kodierung verwendet. Der JPEG-Standard erlaubt auch eine arithmetische Kodierung. Obwohl diese zwischen 5 und 15 Prozent kleinere Dateien generiert, wird sie aus patentrechtlichen Gründen kaum verwendet, zudem ist diese Kodierung deutlich langsamer.
Die JPEG-Dekodierung
Die Dekompression (meist Dekodierung genannt) erfolgt invers zur Kompression:
Die Dekompression ist zwar (weitgehend) verlustfrei, allerdings tritt das Inverse-Dekoder-Problem auf. Aus dekodierten Daten ist es nur schwierig möglich, die ursprüngliche Datei zu rekonstruieren. Ein Dekodier-Kodier-Vorgang verändert die Datei und ist damit nicht verlustfrei, es treten wie beim analogen Überspielen Generationsverluste auf.
Die Generationsverluste von JPEG sind allerdings vergleichsweise klein, wenn wieder die gleiche Quantisierungstabelle zum Einsatz kommt und die Blockgrenzen die gleichen sind. Bei geeigneten Randbedingungen kann man sie bei JPEG sogar vermeiden. Bei JPEG-2000 ist das nicht mehr der Fall (überlappende Transformationen, wie sie bei JPEG-2000 wie auch in der Audiodatenkompression zum Einsatz kommen, erfordern dafür utopische Rechenleistungen).
Inverse diskrete Kosinustransformation
Zur DCT existiert die inverse Transformation, die IDCT:
mit den gleichen Korrekturfaktoren Ck wie bei der DCT.
Farbraumumrechnung
Die Rückrechnung vom YCbCr- in den RGB-Farbraum erfolgt über die inverse Matrix der Hinrechnung, sie lautet:
mit:
Progressives JPEG
Ein JPEG-Bild besteht aus Koeffizienten. Diese speichern keine Pixel, sondern Annäherungen des gesamten Bildinhalts eines 8x8-Bildblocks. Beim Progressive JPEG werden erst die ersten Koeffizienten jedes Bildblocks, dann die zweiten usw. der Reihe nach abgespeichert, so dass die Annäherung an das Originalbild immer besser wird.
Wie beim Interlacing, das bei GIF angewendet wird, liegt der Zweck darin, dem Benutzer, noch bevor die gesamte Datei geladen ist, schnell ein grobes Vorschaubild zu geben. Dies ist besonders dann sinnvoll, wenn das Laden eines Bildes länger als eine halbe bis ganze Sekunde dauert bzw. man nur ein Vorschaubild benötigt. Jedoch werden große Bilder trotzdem meistens im normalen JPEG Modus zum Download angeboten.
Verlustfreie Nachbearbeitung von JPEG
Obwohl eine Dekodierung und Rekodierung meist verlustbehaftet ist, lassen sich einige Bildmanipulationen (prinzipiell) ohne unerwünschte Datenverluste durchführen:
Dazu ist die Entropiekodierung und die Zick-Zack-Umsortierung rückgängig zu machen. Die Operationen erfolgen dann auf Grundlage der DCT-Koeffizienten (umsortieren, weglassen nicht benötigter Blöcke). Danach erfolgt wieder die Zick-Zack-Umsortierung und die Entropiekodierung. Wie man leicht sieht, erfolgen keine verlustbehafteten Arbeitsschritte mehr. Nicht jedes Programm führt diese Operationen verlustfrei durch, es muss dazu spezielle dateiformatspezifische Verarbeitungsmodule aufweisen. Bei den verbreiteten Bildbearbeitungsprogrammen ist das meist nicht der Fall, da diese in der Regel die Datei komplett dekodieren und dann mit diesen Daten arbeiten.
Einschränkungen:
Bilder, deren Auflösung nicht ein Vielfaches von 16 Pixeln (bzw. 8 Pixel bei Schwarzweißbildern oder Farbbildern ohne Unterabtastung) beträgt, sind problematisch. Sie weisen unvollständige Blöcke auf, das heißt, Blöcke, die nicht alle synthetisierten Pixel verwenden. JPEG erlaubt solche Blöcke aber nur am rechten und am unteren Bildrand. Einige dieser Operationen verlangen daher einmalig, dass diese Randstreifen verworfen werden.
Visuelle Qualität und verwandte Formate
Die JPEG-Kompression ist für natürliche (Raster-)Bilder entwickelt worden, wie man sie in der Fotografie oder bei computergenerierten Bildern vorfindet.
Ungeeignet ist JPEG für
Für diese Bilder sind Formate wie GIF, PNG oder JBIG weitaus besser geeignet.
Ein nachträgliches Heraufsetzen des Qualitätsfaktors vergrößert zwar den Speicherbedarf der Bilddatei, bringt aber verlorene Bildinformation nicht mehr zurück. Die Quantisierungstabellen können beliebig gewählt werden und sind nicht genormt. Viele Bildbearbeitungsprogramme lassen aber den Benutzer einen pauschalen Qualitätsfaktor zwischen 0 und 100 auswählen, der gemäß einer Formel in der vom JPEG-Komitee herausgegebenen JPEG-Bibliothek in eine Quantisierungstabelle umgewandelt wird. Auch bei Qualitätsfaktoren wie „100“ oder „100 %“ findet immer noch eine Quantisierung und damit ein – bei für JPEG ungeeigneten Bildern erheblicher – Qualitätsverlust statt.
Eine JPEG-Transformation ist im Allgemeinen nicht idempotent. Das Öffnen und anschließende Speichern einer JPEG-Datei führt zu einer neuen verlustbehafteten Kompression.
Das Beispielbild vergleicht Aufnahmen, die mit unterschiedlichen Qualitätseinstellungen kodiert wurden. Die Portrait-Aufnahme besitzt eine Größe von 200×200 Pixeln. Bei 24 Bit Farbtiefe und unkomprimierter Speicherung erzeugt dieses Bild eine 120 Kbyte große Datei (exklusive Header und anderer Meta-Informationen). Die Klötzchenbildung der 8×8 Pixel großen Quadrate stellt das rechte Teilbild vergrößert dar. Ein weiteres Problem neben der Klötzchenbildung ist das „Ringing“, eine Konsequenz des schlechten Verhaltens der DCT bei harten Farbübergängen.
Für den Profi-Bereich ist JPEG als Dateiformat wegen der verlustbehafteten Datenreduktion ungeeignet. Stattdessen werden Formate eingesetzt, die verlustfrei komprimieren, ungeachtet des großen Speicherbedarfs. Beispiele sind TIFF, BMP, TGA oder PNG (Vollfarbenmodus). Moderne Quellgeräte (Scanner, Digitale Kameras) erfassen mehr als 8 Bit pro Farbpixel. Bereits einfache Scanner arbeiten intern mit 12 Bit, erlauben aber nur die Speicherung von 8 Bit pro Farbpixel. Eine Profiaufnahme von 6 Megapixel erfordert bei einer Farbtiefe von 16 Bit pro Grundfarbe und 3 Grundfarben einen Speicherbedarf von 36 Mbyte, der sich bei strukturreichen, körnigen oder verrauschten Bildern durch verlustlose Kompression nur unwesentlich verkleinern lässt.
Es ist möglich, die Komprimierung von JPEG-Dateien verlustfrei zu optimieren und somit die Dateigröße etwas zu verringern (siehe das Programm jpegoptim unter Weblinks).
Die Bewegtbildkompressionsverfahren MPEG-1 und MPEG-2 bauen auf dem JPEG-Standard auf. Ein Nachfolgeprojekt von JPEG zur Speicherung von Bildern ist JPEG 2000, das über eine bessere Kompression und viele sinnvolle Eigenschaften verfügt, sich aber zumindest bis jetzt nicht in breitem Maße durchsetzen konnte. Ein weiteres potentielles Nachfolgeformat ist HD Photo, das von der Firma Microsoft entwickelt wurde. Es ist ebenfalls nur gering verbreitet, aber es befindet sich derzeit im Standardisierungsprozess unter dem Namen JPEG XR.[1]
Standards
Siehe auch
Literatur
Weblinks
Quellenangaben
Wikimedia Foundation.