Einleitung
kap1: wahrnehmung
kap2: das digitale bild
kap3: die digitale aufnahme
kap4: das jpeg-verfahren
kap5: farbraumveränderung
kap6: dct
kap7: quantisierung
kap8: codierung
kap9: de-codierung
kap10: dateitypen
kap11: jpeg2000
resümee
quellen
autoren


< Kapitel 3     Kapitel 5 >

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.

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.


< Kapitel 3     Kapitel 5 >

Die JPEG-Kompression, Kapitel 4 Sebastian Wickenburg, Aeneas Rooch, Johannes Groß 2002