
4 Das JPEG-Verfahren
Das Hauptaugenmerk dieser Abhandlungen liegt auf einer bestimmten Kompressionsart für digitale Bilddateien, die nun, nachdem alle Voraussetzungen und Grundlagen geklärt sind, ausführlich behandelt werden soll. In diesem Kapitel finden sich einige Worte zum prinzipiellen Bildkomprimieren Kapitel 4.1 sowie eine kleine übersicht, wie das JPEG-Format im Groben funktioniert Kapitel 4.3. Die einzelnen Schritte werden detailliert ab Kapitel 5 präsentiert und vorgerechnet.
4.1 Verschiedene Kompressionsarten
Prinzipiell unterscheidet man Bildkompression nach zwei verschiedenen Methoden: Der verlustfreien und der verlustbehafteten Kompression.
Bei der verlustfreien Kompression (oder auch lossless compression) findet keine Reduktion der Bilddaten statt, die
Bildinformationen zerstören würde, sodass hier jedes Bildelement erhalten bleibt. Diese Methode findet vor allem dann Einsatz,
wenn mit komplexen, aufwendig zu berechnenden oder teuren Bilddaten gearbeitet wird, die nicht verloren gehen dürfen (zum Beispiel
in der Medizin, bei der Analyse von Satellitenbildern etc.).
Digitale Formate, die ohne Qualitätsverlust speichern, sind zum Beispiel BITMAP und TIFF. Solche unreduzierten Bilddaten sind speicheraufwendig, dafür haben sie auch eine hohe Qualität.
Bei der verlustbehafteten Kompression (lossy compression) ist dies nicht der Fall: Hier wird weniger Wert auf die
Bildqualität gelegt als darauf, die Dateigröße möglichst gering zu halten. Daher werden die Bilddaten bei dieser
Methode reduziert, sodass das Ausgangsbild nicht 1:1 wiederherstellbar ist, sondern eine schlechtere Qualität bietet. Durch zu
starkes Komprimieren können durch den Wegfall von Bilddaten Fehler im Bild entstehen; diese nennt man Artefakte.
Verlustbehaftete Bildkompression wird da eingesetzt, wo große Datenmengen nicht ohne Weiteres verarbeitet werden können,
das Paradebeispiel ist hier das Internet, das wie alle Netzwerke keine besonders hohe Übertragungsgeschwindigkeit hat,
sodass BMP-Bilder zum Beispiel viel zu viel Ladezeit in Anspruch nähmen. Dateiformate, die Bilddaten reduzieren und daher auch weniger Speicherplatz benötigen, sind zum Beispiel GIF und JPEG.

Ein verlustfrei gespeichertes Bild (links) und ein verlustbehaftetes (rechts) im Vergleich. Beim rechten Bild fällt auf,
dass sich nicht nur Artefakte gebildet haben, die bei stärkeren Kompressionen auch ohne Vergrößerung erkennbar sind,
sondern dass das Bild mit zunehmender Kompression auch Schärfe und Kontrast einbüßt (Bild: Mustang Multimedia
Spezial).
4.2 Kompressionsmodi bei JPEG
Das JPEG-Format ist von besonderem Interesse, weil es sich im Internet als Bildstandard durchgesetzt hat, um vielfarbige Bilder in True Color mit möglichst geringem Platzbedarf zu speichern. Hintergrund-Information zur Entstehung von JPEG...
Die Idee war dabei, einen Algorithmus zur Kompression "natürlicher" Grauton- oder Farbbilder zu entwickeln, das
heißt einen Kompressionsalgorithmus für Bilder zu finden, der Bilddaten so reduziert, dass sie für das menschliche Auge wenig an
Qualität verlieren (mit "natürliche Bilder" sind solche gemeint, die in der Praxis und im Alltag auftreten, wie zum Beispiel
herkömmliche Urlaubsfotos). Schwerpunkte bei der Erstellung eines geeigneten Algorithmus' waren einerseits eine hohe
Kompressionsrate und andererseits eine hohe Geschwindigkeit zum Kodieren und Dekodieren.
Leider konnte man keinen einzigen Algorithmus allein für alle Anforderungen entwickeln, sodass das Kompressionsverfahren in vier verschiedene Modi gegliedert wurde.
- Beim progressive mode wird das Bild in mehreren Durchgängen kodiert und dekodiert. Bei jedem weiteren Durchgang verbessert sich dabei die Bildqualität, was besonders nützlich ist, wenn Daten über große Entfernungen übertragen werden. Sobald das Bild eine für den Benutzer ausreichende Schärfe erreicht hat, kann dieser die Übertragung stoppen.
- Der hirarchical mode speichert das Bild in einer geringeren Auflösung und ebenfalls in voller Auflösung. Das gering aufgelöste Bild kann wesentlich schneller übertragen und dekodiert werden und eignet sich somit bestens als schnelle Vorschau auf das eigentliche Bild. Bei Interesse kann dann die vollaufgelöste Version geladen werden.
- Der lossless mode ist das einzige Verfahren, das verlustfrei kodiert und dekodiert. Der große Nachteil ist, dass die Kompressionsrate recht gering ist, weil der volle Informationsgehalt gespeichert wird.
- Beim sequentiell mode wird das Bild in einem einzigen Durchgang von links oben nach rechts unten dekodiert, was in der Praxis für die meisten Anwendungen gut geeignet ist, die besten Kompressionsraten erzielt und am leichtesten zu implementieren ist.
Auf das Verfahren des sequentiell mode wollen wir nun näher eingehen, da es das gebräuchlichste ist. Die anderen drei vorgestellten Techniken sind nur in Ausnahmefällen und ganz spezifischen Einsatzbereichen sinnvoll, basieren aber im Prinzip auf den gleichen Verfahren wie der sequentiell mode.
4.3 Ablauf der JPEG-Kompression
Die Kompression von Bilddaten durch das standardisierte JPEG-Verfahren verläuft folgendermaßen:
- Es liegen Bilddaten im RGB-Format vor, von denen jeder einzelne Wert eine Zahl zwischen 0 und 255 ist. Diese werden in das
YUV- oder YCbCr-Modell
übertragen, wo die einzelnen Komponenten (Helligkeit, Farbton und Sättigung, siehe
Kapitel 1.3)
verschieden stark gewichtet werden.
- Außerdem wird eine Indexverschiebung vorgenommen, d.h. die Werte aus der Wertemenge [0;255] werden als Zahlen zwischen -128 und 127 dargestellt. Die 3 nun vorliegenden sogenannten "Layer", was eine Bezeichnung für die verschiedenen Datenmengen für Y, U,V, Cb oder Cr ist (man kann also von "Datenschichten" sprechen), werden nun einzeln weiterbearbeitet.
- Jedes Layer wird in 8*8 große Pixelblöcke eingeteilt (das komplette Verfahren muss natürlich auf alle Matrizen und
alle Layer einzeln angewendet werden), auf die im folgenden LINK
die diskrete
Kosinustransformation einzeln angewendet wird. Die diskrete Kosinustransformation oder DCT
(aus dem Englischen: discrete cosine transform) interpretiert die Helligkeits- bzw. Farbwerte als Überlagerung von
Kosinusfunktionen, die deren Schwankungen angeben, d.h wie stark sich die Werte von Ort zu Ort ändern, und transformiert die
Werte in Amplituden für Kosinusfunktionen verschiedener Frequenzen. Hierbei ähneln sich die Amplituden für hohe
Frequenzen, wodurch man einen Vorteil für die anschließende Kodierung erhält.
- Die entstandenen Amplituden werden noch quantisiert, indem sie durch einen vom Benutzer festlegbaren Quantisierungsfaktor dividiert und danach gerundet werden, wobei viele Werte gleich Null werden.
- Im Folgenden wird die quantisierte Matrix codiert. Dazu wird die 8*8-Matrix in einen 1*64-Vektor umgeschrieben, sodass die zahlreichen Nullen, die beim Quantisieren entstanden sind, hintereinander stehen und sich gut zusammenfassen lassen. Ist diese erste Reduzierung der Datenmenge erfolgt, so wird die eigentliche Huffman-Codierung angewendet, bei der jedem Wert ein einzigartiger Binärcode zugeordnet wird. Eine große Speicherplatzersparnis wird dadurch erreicht, dass beim Huffman-Verfahren häufig auftretenden Werten ein kurzer, seltenen Werten ein langer Code zugeteilt wird und die Codes der einzelnen Werte außerdem ohne Trennzeichen auskommen und aneinandergereiht werden können.
- Wenn das Bild nun
decodiert
wird, werden die Binärcodes wieder in Zahlenwerte umgewandelt und ausführlich ausgeschrieben, sodass man wieder einen
1*64-Vektor, bzw. eine 8*8-Matrix erhält. Zur
Dequantisierung
werden die quantisierten Werte in dieser Matrix einfach mit dem Quantisierungsfaktor multipliziert. Die
inverse DCT
sorgt dann dafür, dass aus den Amplituden wieder die ursprünglichen Helligkeits- bzw. Farbwerte hergestellt werden. Zur
besseren Unterscheidung wird die DCT auch forward DCT genannt. Wann immer wir im Folgenden von DCT sprechen, ist die forward DCT
gemeint. Die von der inversen DCT erhaltenen Werte ergeben nun das komprimierte Bild.
| Die JPEG-Kompression, Kapitel 4 |
Sebastian Wickenburg, Aeneas Rooch, Johannes Groß 2002 |