DOC

Werbung
Entropiekodierung
Formeln
 P( xi ) - Wahrscheinlichkeit für x P( x, y )  P( x) * P( y )
Komprimierung
loosy
* bildet Daten unter einer
bestimmten Fehlerquote ab
*bildet verschiedene Eingaben
auf die selben Ausgaben a
loosless
 X - Menge der möglichen Ereignisse (Zeichen) mit ihren
* Bildet eine einige Eingaben
dazugehörigen Wahrscheinlichkeiten
auf kürze Ausgaben
* bildet immer einige Eingaben auf  X Anzahl der Ereignisse (Zeichen) in X
längere Ausgaben ab
 h(x) - Shannon information content
h( x)  log 2
1
(in
P( x)
Source Coding Theorem
Bit); h( x, y )  h( x)  h( y ) ; gibt an wie viel Information ein
für eine gegebene Fehlerquote 0    1 und ein beliebiges aber
bestimmtes Ereignis (Zeichen) hat. Daher ist h(x) die optimale
festes   0 gilt: Es existiert ein N 0 so das für alle N  N 0 gilt:
Codelänge für x.
1
N
 H ( X ) -Entropie; Informationsgehalt für eine bestimmte
H ( X )    L ( X )  H ( X )  
N
Menge H ( X )   P( xi ) * h( xi )
1
i
N
L ( X )  H ( X )  
=>
N
 L0 ( X )  log 2 X  Bitlänge pro Zeichen ohne Fehler
N
mit X eine N-Elementige Kette von Werten aus X
 L ( X )  log 2 S  mit S  {x | x  X  P( x)  1   }
=> jede Komprimierung die auf weniger als N*H(X) Bits
komprimiert ist verlustbehaftet!
Symbolcodes
Quellalphabets mit
konstanter Länge
pro Zeichen (z.B. 8 Bit)
Zielalphabet mit variabler
Länge pro Zeichen
*häufige Zeichen kürzer,
seltenere Zeichen länger
*muss eindeutig decodierbar sein
*sollte einfach zu decodieren
*so kompakt wie möglich
Huffman coding:

Kraft-McMillan-Ungleichung
l(x )
Jeder Code hat ein Gewicht von 2 i wobei l ( x i ) die Länge
xi ist. Damit ein (Präfix-) Symbolcode eindeutig
1
ist muss gelten:  l ( x )  1
i
i 2
des Codewortes
Probleme bei Huffman coding:
1) repräsentiert zunächst alle möglichen Zeichen als einfache
Bäume, die nur aus einem Blatt bestehen. Der Knoten jedes dieser
Bäume enthält außerdem den Wahrscheinlichkeitswert für das
entsprechende Zeichen.
2) fasse solange die zwei Teilbäume mit den geringsten
Wahrscheinlichkeiten zusammen bis nur noch ein Baum existiert.
Bei jedem Zusammenfassen erhält die neu Wurzel den Wert der
der Summe der Teilbäume entspricht.
3) das Ergebnis ist ein Binärbaum mit nahezu optimaler Codelänge
Arithmetic Coding:
Bitlänge pro Zeichen mit Fehler
 
 bildet jede Eingabe auf eine Zahl im Intervall 0,1  R ab.
 benötigt besonderes Steuerzeichen um das Ende des kodierten
Textes zu signalisieren
Kodierung:
1) partioniere Intervall entsprechend der Wahrscheinlichkeit der
möglichen Zeichen
2) Wähle das Teilintervall in dem nächstes Eingabezeichen liegt.
3) wiederhole Schritt 1-2 für jedes weitere Zeichen
Dekodierung:
1) partioniere Intervall entsprechend der Wahrscheinlichkeit der
möglichen Zeichen
2) Wähle das Teilintervall in dem das Codewort liegt.
3) schreibe das den Teilintervall entsprechende Zeichen
4) wiederhole Schritt 1-3 bis das EOF-Zeichen gelesen wurde
 Code mitspeichern oder suboptimalen statischen Code
verwenden
 betrachtet nur einzelne Zeichen, nicht die Wahrscheinlichkeit
von Zeichenpaaren
 verwendet immer n ganze Bits pro Zeichen  h(x) muss nicht
ganzzahlig sein
Probleme bei Arithmetic Coding:
 benötigt immer ein Wahrscheinlichkeitsmodel
 Qualität vom verwendeten Model abhängig
 Probleme bei der Implementierung: Floating Zahlen haben nur
beschränkte Genauigkeit.
Wörterbuchtechniken
Statische Verfahren:
 festen Wörterbuch (Grundzeichen + häufige Zeichenpaare)
 einfach + wenig effizient
Semiadaptive Verfahren
 erzeugen zu jeder Eingabe optimales Wörterbuch
 muss aber Wörterbuch mit Daten speichern
 Entscheidung welche Phrasen im Wörterbuch auftreten
kompliziert
Adaptive Verfahren
 beginnen mit leerem/kleinem Wörterbuch
 erweitern Wörterbuch erst beim auftreten einer Phrase =>müssen
Wörterbuch nicht speichern
 können u.U. auch Phrasen aus Wörterbuch wieder entfernen
LZ77
1) vergleiche die nächsten zu kodierenden Zeichen (Look-AheadBuffer) mit bereits kodierten Zeichen (Search-Buffer) um die
längste Übereinstimmung zu finden.
2) speichere Entfernung zur Übereinstimmung und deren Länge,
sowie das nächste zu kodierende Zeichen
 beachte das auch die Zeichen im Look-Ahead-Buffer zum
Search-Buffer
 gzip, png
LZ78
 verwendet separates Wörterbuch, zu beginn leer
1) finde längste Übereinstimmung zwischen nächsten zu
kodierenden Zeichen und Wörterbuch
2) speichere Indexnummer des Wörterbucheintrages und das erste
Zeichen nach der Übereinstimmung (Folgezeichen)
3) nimm Übereinstimmung + Zeichen als neuen
Wörterbucheintrag auf
 speichere die Indexnummer nur mit soviel Bits das der höchste
momentane Index gespeichert werden könnte
 compress, gif
Variationen zu LZ77:
 unbeschränkter Search-Buffer (LZR)
 kurze Übereinstimmungen als Klartext speichern (LZSS)
 Teilstrings aus Search-Buffer zwischenspeichern
(Kodiergeschwindigkeit) (LZSS)
 Offset-Wert-Länge dynamisch verkürzen (LZB)
 Länge-Wert-Länge dynamisch verkürzen (LZB)
 Token mit Huffman-Code komprimieren (LZH)
Variationen zu LZ78:
 Wörterbuch begrenzen, wenn voll komplett löschen
 Wörterbuch begrenzen, wenn voll statisch weiterverwenden
 Folgezeichen nicht explizit speichern (LZW, patentiert)
 variable Bitlänge für Token verwenden (LZC)
 Wörterbuch begrenzen, wenn voll statisch weiterverwenden bis
Komprimierungsrate spürbar absinkt, dann löschen (LZC)
Herunterladen