Kompression mit Huffman-Codierung
Informationsgehalt, Entropie, mittl. Wortlänge, Redundanz
Zunächst einige Begriffe:
Alphabet: |
Einfachstes Alphabet: binäre Stellen - womit pro Stelle zwei Werte möglich sind, zum Beispiel 0 oder 1. Jede Stelle entspricht hier einer Informationsmenge von 1 Bit.
Die Zeichen eines deutschen Textes können 26 unterschiedliche Werte (26 Buchstaben) annehmen. |
Informationsgehalt p: |
Der Informationsgehalt einer Nachricht hängt von der Wahrscheinlichkeit, mit der diese Nachricht auftritt, ab.
Wird die Auftrittswahrscheinlichkeit einer Nachricht größer sinkt deren Informationsgehalt. Der Wertebereich geht von 0 - 1.
Angenommen, man fragt ein Hotel, das 100 Zimmer hat, nach freien Zimmern.
Dazu könnte es zwei mögliche Antworten geben:
a) 10 Zimmernummern freier Zimmer
b) 90 Zimmernummern belegter Zimmer.
Der Informationsgehalt ist bei beiden Antworten gleich, nur dass der Umfang bei b) 9 mal größer ist. |
Entropie H: |
Der (mittlere) Informationsgehalt einer Nachricht heißt Entropie der Informationsquelle. Sie ist maximal, wenn alle Nachrichten gleichwahrscheinlich sind. |
mittl. Wortlänge L: |
Summe der Produkte aus den einzelnen Codewortlängen li und den Auftrittswahrscheinlichkeiten pi der zugehörigen Zeichen des zu komprimierenden Textes. |
Redundanz R: |
Differenz aus mittlerer Wortlänge und Entropie: R = L - H. Mitunter gibt es Bereiche von Codes, die keine weitere Information enthalten (sie sind redundant), da die Information bereits in anderen Bereichen der Nachricht enthalten ist. Redundanz spielt eine Rolle, wenn fehlerhafte Codes korrigiert werden sollen.
Beispiel:
weißer Schimmel ("doppelt gemoppelt")
oder:
D knnst ds bstmmt lsn, bwhl dsr Txt knn Vkl nthlt.
Der eigentliche Informationsgehalt hat sich trotz Weglassung der Vokale nicht geändert. |
Beispiel zur Datenverdichtung mittels Huffman-Codierung AB
Dazu nehmen wir den Text abrakadabra
Zuerst wird das Alphabet zu diesem Code bestimmt: arbkd - Aus diesen Buchstaben (und ihren Wiederholungen) besteht der zu codierende Text.
Für die Ermittlung des Codes mittels Code-Baumes wird die bottom-up-Methode verwendet:
1. Ordnen aller Zeichen nach ihren Auftrittswahrscheinlichkeiten: Das a tritt 5 mal auf, der Text umfasst 11 Zeichen, p beträgt also 5/11.
2. Eintragen der Zeichen und ihrer Auftrittswahrscheinlichkeiten in die Blätter
2. Zusammenfassung der beiden vaterlosen Zeichen mit den geringsten Wahrscheinlichkeiten
(Häufigkeiten) in einem Vater-Knoten, in dem die Wahrscheinlichkeiten der Söhne addiert werden
3. Fortführung des Verfahrens, stets die beiden Zeichen mit den geringsten
Wahrscheinlichkeiten zu einem weiteren Knoten zusammenführend,
bis es keinen vaterlosen Knoten mehr gibt
4. Den linken Kanten wird je eine 0, den rechten je eine 1 zugewiesen.
Das ist der Code:
a 0 (a kommt am häufigsten vor, erhält deshalb den kürzesten Code)
r 10
b 110
k 1110
d 1111 Bitfolge für abrakadabra: 01101001110011110110100
Das sind 23 Bit (anstatt 88 Bit wegen 11 Bytes bei ASCII-Verschlüsselung, 1 Byte = 8 Bit)
Kompression: Die Zeichenfolge wurde um ca. 73,1 % komprimiert.
An den zu übertragenden Code ist noch die Information, wie die einzelnen Zeichen codiert sind, anzuhängen. Deshalb wird die Zahl der Bits wieder etwas steigen.
Angewendet wird die Huffman-Codierung zum Beispiel beim FAX, bei MPEG, JPEG
Nachteile:
- Je größer das Alphabet ist, umso größer wird die Code-Tabelle.
- ungleichmäßige Bitrate und Decodierverzögerung wegen der unterschiedlichen Codewortlängen
- Wird ein Bit falsch erkannt, hat dies auch Auswirkungen auf die Bestimmung
der nachfolgenden Zeichen.
- Wahrscheinlichkeiten der Zeichen müssen bekannt sein oder sie müssen (aufwendig) abgeschätzt werden.
Bestimmung der Redundanz an obigem Beispiel
|
Auftrittswahrscheinlichkeit |
Informationsgehalt |
Code |
Codelänge |
Wortlänge |
|
Alphabet |
Anzahl des Auftretens des Zeichens im zu codierenden Text (inkl. Leerzeichen) geteilt durch Gesamtzahl der Zeichen des Textes |
Sie können aber auch einfach den Online-Rechner nutzen. |
|
|
|
|
|
pi |
hi |
|
li |
pi * li |
pi * hi |
a |
5/11 = 0,454 |
1.139 |
0 |
1 |
0,454 |
0,517 |
r |
2/11 = 0,181 |
2.466 |
10 |
2 |
0,362 |
0,446 |
b |
2/11 = 0,181 |
2.466 |
110 |
3 |
0,543 |
0,446 |
k |
1/11 = 0,091 |
3,458 |
1110 |
4 |
0,364 |
0,314 |
d |
1/11 = 0,091 |
3,458 |
1111 |
4 |
0,364 |
0,314 |
|
|
|
|
|
mittl. Wortlänge
L = 2,087
Bit/Zeichen |
Entropie
H = 2,037 Bit/Zeichen |
Redundanz: R = L - H = 2,087 Bit/Zeichen - 2,037 Bit/Zeichen = 0,05 Bit/Zeichen
Die Redundanz beträgt 0,05 Bit/Zeichen. Fano-Bedingung: Achtung! Der Code muss eindeutig decodiert werden können.
-> Kein Code-Wort darf Anfangswort eines anderen Codewortes sein. Es iat also klar, wann ein Codewort zu Ende ist.
Anders gesagt: Es dürfen im Codebaum nur die Blätter, die Endknoten besetzt werden.
Solche Codes werden auch Präfixcodes genannt, und zwar in der Bedeutung, dass sie präfixfrei sind.
(Bei Block-Codes - Codes mit constanter Wortlänge - wird das Ende eines Code-Wortes durch Abzählen festgestellt.)
Aufgabe g) Untersuchen Sie, ob die folgenden Codes der Fano-Bedingung entsprechen:
|
W |
E |
R |
T |
Z |
U |
a) |
0 |
1 |
00 |
01 |
10 |
11 |
b) |
1 |
01 |
11 |
001 |
100 |
101 |
c) |
000 |
001 |
010 |
110 |
100 |
101 |
d) |
01 |
11 |
000 |
001 |
100 |
101 |
|
Aufgabe h) Schauen Sie sich die Applets und an und studieren Sie die PowerPoint::
1. (Empfehlung. Achtung, bei der Angabe der Kompressionsrate geht man hier von 4 Bit pro Zeichen vor der Kompression aus!)
2.
3. |
Aufgabe j) Komprimieren Sie interaktiv PAPPERLAPAPP, KERNENERGIE, KRAMBAMBULI, SIMPLICIUS_SIMPLICISSIMUS !
Animal-Applet downloaden
Anleitung zum Applet (Huffmann-Codierung):
1. Zip-Datei auf Rechner entpacken (Verzeichnis heißt Animal), Java muss installiert sein (ansonsten bei www.sun.de zu finden)
2. Auf animal.bat doppelklicken
3. Sprache auf Deutsch stellen
4. Drittes Icon oben links anklicken, Internet ist eingeschaltet
5. Bei Title "Huffman-Codierung" suchen, anklicken, dann unten auf Accept klicken
6. Vorführung durch Klick auf Play-Knopf unten |
Aufgabe j) Huffman-Codierung: Kernenergie - Bestimmen Sie die Häufigkeit der einzelnen Buchstaben in diesem Wort!
Erstellen Sie einen Binärbaum und schreiben Sie die Bitfolge auf!
Berechnen Sie, um wie viel Prozent an Zeichen eingespart wurde, wenn zugrundegelegt wird, dass sonst für einen Buchstaben ein Byte (8 Bit also) notwendig sind!
Vergleichen Sie das Ergebnis dann mit dem auf dem AB! |
Aufgabe k) Huffman-Codierung: Kernenergie - Bestimmen Sie die Häufigkeit der einzelnen Buchstaben in diesem Wort!
Erstellen Sie einen Binärbaum und schreiben Sie die Bitfolge auf!
Berechnen Sie, um wie viel Prozent an Zeichen eingespart wurde, wenn zugrundegelegt wird, dass sonst für einen Buchstaben ein Byte (8 Bit also) notwendig sind!
Vergleichen Sie das Ergebnis dann mit dem auf dem AB! |
Aufgabe l) Arbeiten Sie sich das AB durch und komprimieren Sie {KNICKERBOCKER}. Bestimmen Sie die Entropie H, die mittlere Wortlänge L sowie die Redundanz R.
|
Aufgabe m) Wie groß ist der Informationsgehalt von 78 Tarotkarten? |
Aufgabe n) Es gibt etwa 6000 japanische Kanji-Schriftzeichen.
Welche Codegröße (Anahl der Bits) würde zur Codierung benötigt? |
Datenverdichtung mittels adaptiven Huffman-Codes
Hier wird ein dynamischer Code erstellt.
Im Laufe des Lesens werden die wahrscheinlichen Häufigkeiten abgeschätzt und damit stets neue Codewörter erstellt.
Beim Decodieren wird der Code-Baum ständig aktualisiert.
Vorteil des adapt. Codes: Zeichensatz muss nur einmal gelesen werden
Anwendung: in zip, gzip
Applet
Datenverdichtung mittels arithmetischer Codierung
Die zu codierenden Daten werden als rationale Zahl des Intervalls [0,1) codiert. Je länger die Nachricht, desto kürzer wird das Intervall., da die einzelnen zu übertragenden Zeichen entsprechend der Auftrittswahrscheinlichkeit verkleinern. Die weniger vorkommenden Symbole verringern die Größe des Intervalls mehr als die häufiger vorkommenden.
Die maximale Redundanz pro Nachricht ist <1 Bit.
Diese Kompression ist verlustlos.
1. Beginne mit einer Definition des aktuellen offenen Intervalls [0,1) (jede Zahl zw. 0 und 1, außer 1 selbst) |
|
2. Wende für jedes Symbol der Eingabe die folgenden Schritte an: |
|
|
1. Teile das aktuelle Intervall in Teilintervalle, die proportional zu den Wahrscheinlichkeiten der Eingabesymbole sind |
|
|
2. Selektiere das Teilintervall des Eingabesymbols und definiere es als das aktuelle Intervall |
3. Wenn die Codierung abgeschlossen ist, finde eine Zahl innerhalb des letzten Intervalls welches die dieses Teilintervall exakt beschreibt |
4. Schreibe die ermittelte Zahl in eine Datei. |
Applet
Weiterführende Informationen Datenverdichtung mit dem Lempel-Ziv-Welch Code
- verlustlos, adaptiv
- keine Info über Wahrscheinlichkeitsverteilung der Zeichen des Ausgangszeichensatzes
erforderlich
Im LZW- Verfahren werden redundante Zeichenketten durch kürzere Codes ersetzt, wobei keine Informationen zur Dekomprimierung abgespeichert oder übertragen zu werden brauchen. Für das Dekomprimieren wird im Laufe der Dekodierung ein Wörterbuch (Tabelle mit Kompressionscodes) aus dem Datenstrom erstellt. Beispiel
ZZLWLWLLWZLWWLWZZLWLWLWLWWWZZWLWL
1. Möglichkeit:
ZZ LWLW L LWZ LW W LWZ Z LWLW LWLW WW ZZ W LW L
Komprimiert:
1 2 L 3 4 W 3 Z 2 2 WW 1 W 4 L
Wörterbuch dazu:
[1=ZZ, 2=LWLW, 3=LWZ, 4=LW]
2. Möglichkeit:
ZZLWLWL LW Z LW W LW ZZLWLWL LW LW WWZZW LW L
Komprimiert:
1 2 Z 2 W 2 1 2 2 WWZZW 2 L
Wörterbuch dazu:
[1=ZZLWLWL, 2=LW] (weniger Einträge -> weniger Speicherbedarf als bei der 1. Möglichkeit)
Tutorial
Anwendung: bei Daten mit häufig wiederholten Symbolen, GIF, TIF, einige Komprimierungstools
Aufgabe o) Applet (ganz unten, LZW und ABC wählen, dann einen Text wie aabaabac eingeben, Step) |
Animation 1
Fraktale Bildkompression Ausgangsvorstellung: In der Natur kommen häufig gebrochene Dimensionen vor, zu Beispiel in Form einer Küstenlinie oder eines Gebirgszuges oder bei der Baumrinde.
Beispiele für Fraktale:
Fraktale Plantagen
Fraktal-Generator
WinCIG
Prinzip bei der fraktalen Bildkompression:
Das Bild wird auf Ähnlichkeiten hin untersucht, welche durch Verkleinerungen und Drehungen ineinander übergehen. Für solche Selbstähnlichkeiten werden an den Empfänger nur entsprechende Formeln (Linsenparameter) gesendet. Beispiel: Sierpinski-Dreieck oder Drachenkurve
Vorteile:
- hohe Kompressionsrate
- Vergrößerung des Bildes ohne große gefahr der Pixelierung
Nachteil:
Komprimierung erfordert (im Gegensatz zur Dekomprimierung) relativ viel Zeit.
Wavelet-Kompression
Diese Kompression ist verlustbehaftet.
Demo 1
Erläuterungen
Beispiele: (Prof. Dr. Ansorg)
SPHIT, EZW (Videokompression)
Diese Kompression ist verlustbehaftet.
Anwendung: MPEG-1, MPEG-2, MPEG-4
Erläuterung:
ASPEC (Audiokompression)
JPEG, JPEG2000 (Bildkompression)
Kompression von Bildern zugunsten der Dateigröße
Anwendung: JPG (häufigstes Format bei digitalen Fotoapparaten) Erläuterung:
|