
Es gibt viele verschiedene Arten der Kompression, die sich in mehreren Punkten voneinander unterscheiden, sodass man sie grob in mehrere Kategorien einteilen kann. Im Folgenden werden die wichtigsten Unterscheidungskriterien vorgestellt.
Unterscheidung nach Laufzeitkomplexität
Grundsätzlich unterscheidet man bei Laufzeitkomplexität in symmetrische und asymmetrische Kompressionsverfahren. Dabei wird die Laufzeit von Kodierung und Dekodierung miteinander verglichen.
Symmetrische Kompressionsalgorithmen
Stimmen die Laufzeiten des Kodierungs- und Dekodierungsvorganges miteinander überein, spricht man von symmetrischer Kompression. Im Prinzip heißt das, dass die Kodierung genauso schnell durchgeführt werden kann wie die Dekodierung (und natürlich auch umgekehrt).
Beispiele für symmetrische Kompressionsalgorithmen:
RLE - Runlength-Encoding
LZW - Lempel-Ziv-Welch
Asymmetrische Kompressionsalgorithmen
Bei asymmetrischen Verfahren sind die Laufzeiten für die Komprimierung und Dekomprimierung unterschiedlich. Das ist der Fall, wenn die Kompression länger oder kürzer benötigt als die Wiederherstellung der ursprünglichen Daten.
Beispiel für asymmetrische Kompressionsalgorithmen:
Wavelet
Unterscheidung nach Rekonstruierbarkeit
Hierbei unterscheidet man in verlustfreie und verlustbehaftete Verfahren.
Verlustfreie Kompressionsverfahren
Von verlustfreier Kompression spricht man, wenn man die ursprünglichen Daten, genau so wie sie vorher waren, wieder herstellen kann.
Beispiele für verlustfreie Kompressionsalgorithmen:
RLE -
Runlength-Encoding
Huffman-Kodierung
LZW - Lempel-Ziv-Welch
Verlustbehaftete Kompressionsverfahren
Können die Originaldaten nach der Kompression nicht mehr 1:1 hergestellt werden, so spricht man von verlustbehafteter Kompression (da Informationen über die Ausgangsdaten verloren gehen).
Beispiele für verlustbehaftete Kompressionsalgorithmen:
Wavelet
Unterscheidung nach der Berücksichtigung der Quelle oder Art der Daten
Hierbei unterscheidet man Entropiekodierung und Quellen-Komprimierung.
Entropiekodierung
Bei der Entropiekodierung werden Daten als Folge digitaler Werte verlustfrei komprimiert. Man berücksichtigt dabei nicht, was durch die Folge der digitalen Werte beschrieben wird
Beispiele für Entropiekodierung:
RLE -
Runlength-Encoding
Huffman-Kodierung
LZW - Lempel-Ziv-Welch
Quellen-Komprimierung
Je nach Quelle oder Art der Daten werden Kompressionsverfahren eingesetzt,
die besondere Eigenschaften der Quelldaten ausnutzen, meist auch mit
(hinnehmbaren) Verlusten.
Beispiele: Transformationskodierung wie DCT.
Wichtige Algorithmen für Kompression
RLE - Runlength-Endcoding
RLE (zu Deutsch Lauflängen-Kodierung) ist ein sehr einfaches Verfahren zur Datenkompression - Passagen mit sich wiederholenden identische Zeichen werden zusammengefasst und durch die Anzahl der gleichen Zeichen ersetzt (z.B. 4A statt AAAA).
Die Dekodierung erfolgt eben so einfach und vollkommen verlustfrei indem die Folge wieder ausgeschrieben wird.
Besonders geeignet ist dieses Kompressionsverfahren für einfache Grafiken, die viele gleichfarbige Flächen enthalten (wie beispielsweise Diagramme oder technische Zeichnungen), da hier häufig längere Reihen gleicher Zeichen vorkommen. Ungeeignet ist RLE hingegen für komplexe Farbbilder.
RLE - Runlength-Endcoding
Huffman-Kodierung
Die Grundidee bei der Huffman-Kodierung ist, dass häufig vorkommenden Zeichen ein kurzer Code zugeordnet wird, selten auftretenden ein langer.
Der Huffman-Algorithmus basiert darauf, dass allen Zeichen, die im jeweiligen Datenstrom vorkommen können, ein Endknoten in einem Binärbaum zugeordnet wird. Den Endknoten wird wiederum die Auftrittshäufigkeit des jeweiligen Zeichens zugewiesen. Dadurch dass immer die beiden Knoten mit der geringsten Auftrittshäufigkeit einem neuen Knoten untergeordnet werden, dem die Summe der beiden Auftrittswahrscheinlichkeiten zugeordnet wird, entsteht die Baumstruktur. Der Vorgang wiederholt sich so oft, bis alle Knoten in einer Wurzel zusammengeführt sind. Den Kanten des Baums werden die binären Werte 0 und 1 zugeordnet, der Weg von der Baumwurzel bis hin zum Zeichen am unteren Ende des Baums, ergibt dann den Huffman-Code.
Huffman-Kodierung
LZW - Lempel-Ziv-Welch
LZW ist ein verlustfreier, symmetrischer und adaptiver Kompressionsalgorithmus der sowohl auf Bild- als auch auf Textdaten angewendet werden kann.
LZW komprimiert mittels Lexikon/Wörterbuch in dem die am häufigsten vorkommenden Zeichenketten gespeichert werden und im kodierten Datenstrom nur noch mit Abkürzungen angesprochen werden müssen. Das Lexikon muss nicht zusätzlich abgespeichert werden, sondern der Decoder ist in der Lage, dass Lexikon aus dem Datenstrom zu rekonstruieren und somit auch die Daten zu dekomprimieren.
LZW - Lempel-Ziv-Welch
Wavelet
Generell werden Wavelets mit einer Kompressionsmethode assoziiert. Aber das Wort Wavelet bedeutet zugleich eine mathematische Theorie, eine Kompressionsmethode und ein Datenanalyse-Werkzeug. Es ist ein mächtiges Paradigma, das viele Anwendungen hat.
Wavelet
Gegenüberstellung zwischen den Kompressionsverfahren
Hier findet man eine kompakte Gegenüberstellung der Kompressionsverfahren:
Kompressionsverfahren | Laufzeitkomplexität | Rekonstruierbarkeit |
RLE - Runlength-Encodinig | symmetrisch | verlustfrei |
Huffman-Kodierung | variantenabhängig | verlustfrei |
LZW - Lempel-Ziv-Welch | symmetrisch | verlustfrei |
Wavelet | asymmetrisch | verlustbehaftet |