Microsoft PowerPoint Presentation: 10_Textkompression

Werbung
Kompressionsverfahren
(für Texte)
Prof. Dr. Th. Ottmann
WS 2006-07
11
Motivation von Datenkompression
Text
1 Seite Text mit 80 Zeichen/Zeile und 64 Zeilen/Seite und 1 Byte/Zeichen
ergibt
80*64*1*8 = 40 kbit/Seite (5 KByte/Seite).
Standbild
24 Bit/Pixel, 512x512 Pixel/Bild ergibt
512*512*24 = 6 Mbit/Bild (768 KByte/Bild)
Audio
CD-Stereo, Sampling-Rate 44,1 KHz, 16 Bit/Sample ergibt
2*44100*16 = 1,346 Mbit/s (172,266 KByte/s)
Video
Ein Vollbild 704x576 Pixel/Bild, 24 Bit/Pixel, 30 fps, ergibt
704*576*24*30=278,438 Mbit/s (34,805 MByte/s)
WS 2006-07
2
Kompressionsverfahren für Texte
Verlustfreie Kompression
Original kann perfekt rekonstruiert werden
Beispiele: Huffman Code, Lauflängencodierung, arithmetische
Codierung, Lempel-Ziv
Verlustbehaftete Kompression:
Unterschied zwischen Original und decodiertem Objekt,
nutzt physiologische und psychologische Eigenschaften des Auges und
Ohres aus,
erlaubt höhere Kompressionsraten
Beispiele: JPEG, MPEG
WS 2006-07
3
Verlustfreie Kompressionsverfahren
Ziel:
Finde umkehrbare Codierung, so dass das Original (der Text) wieder
(verlustfrei) rekonstruiert werden kann.
Beispiele:
•
•
•
•
WS 2006-07
Huffmann-Code
Lauflängen-Codierung
Arithmetische Codierung
Lempel-Ziv Codierung
4
Verlustfreie Kompression - PS
Musterersetzung (pattern substitution)
Beispiel 1
Beispiel 2
Beide Ersetzungen erreichen die selbe Kompressionsrate
WS 2006-07
5
Lauflängenkodierung (run-length encoding)
Prinzip
Ersetze Wiederholungen desselben Zeichens im Text („runs“) jeweils
durch einen Zähler und das Zeichen
Beispiel
Text:
AAAABBBAABBBBBCCCCCCCCDABCBAABBBBCCD
Kodierung:
4A3B2A5B8C1D1A1B1C1B2A4B2C1D
Folge:
Gute Kompressionsrate nur erreichbar, wenn es häufig lange „runs“
gibt
WS 2006-07
6
Lauflängenkodierung für Binärdateien
Runs von Einsen und Nullen wechseln sich ab. Es genügt daher, nur
die Länge der Runs zu speichern
Beispiel:
0000000000000000000111111111111110000000000 19 14 10
0000000000000000011111111111111111100000000 17 18 8
0000000000000000111111111111111111111000000 16 21 6
0000000000111111110000000000000011111111000 10 8 14 8 3
0000000001111111100000000000000001111111000 9 8 16 7 3
0000000000011111000000000000000000111110000 11 5 18 5 4
0000000000001110000000000000000000011100000 12 3 20 3 5
0111111111111111111111111111111111111111110 1 41 1
0111111111111111111111111111111111111111110 1 41 1
0111111111111111111111111111111111111111110 1 41 1
0100000000000000000000000000000000000000011 1 1 39 2
WS 2006-07
7
Kodierung mit variabler Länge
Die üblichen Zeichen-Codes (z.B. ISO 8859-1) verwenden gleich viele Bits für
jedes Zeichen (8 Bits).
Abhängig von der Sprache (Englisch, Französisch, Deutsch usw.) werden
verschiedene Zeichen mit unterschiedlicher Häufigkeit verwendet. Ein
Ansatz zur Datenkompression besteht darin, Zeichen die häufiger
vorkommen mit weniger Bits zu kodieren als solche die seltener
vorkommen.
Beispiel
Code 1:
A
B
C
D
E ...
00001 00010 00011 00100 00101 ...
Die Kodierung des Worts BLATTSALAT (2 12 1 20 20 19 1 12 1 20) mit
konstanter Bit-Länge pro Zeichen (5 Bits für 26 Buchstaben) ist:
00010 01100 00001 10100 10100 10011 00001 01100 00001 10100 (50 Bits)
Code 2: A
0
T
1
L
01
B
10
S ...
11 ...
Kodierter Text: 10 01 0 1 1 11 0 01 0 1 (14 Bits)
WS 2006-07
8
Kodierung ohne explizite Begrenzer
Der im Beispiel gezeigte "Code 2" kann nur dann eindeutig dekodiert werden,
wenn Zeichen-Begrenzer mit gespeichert werden. Das vergrößert die
Datenmenge erheblich.
Um die explizite Zeichenbegrenzung zu umgehen, kann man die einzelnen
Zeichen so kodieren, daß der Anfang der Kodierung eines Zeichens mit
keinem Anderen übereinstimmt.
"Kein Code-Wort ist der Prefix eines anderen Code-Worts."
Code 3:
B: 11
L: 00
A: 10
T: 010
S: 011
Kodierter Text: 11 00 10 010 010 011 10 00 10 010 (24 Bits)
WS 2006-07
9
Darstellung als Trie
Der Code für ein Zeichen wird durch den Pfad von der Wurzel (root) des Trie
bestimmt: mit 0 für "nach links gehen" und mit 1 für "nach rechts gehen".
Jeder beliebige Trie mit M äußeren Knoten (leaves) kann verwendet werden
um eine Zeichenfolge mit M verschiedenen Zeichen zu kodieren.
0
1
L
A
T
WS 2006-07
B
S
10
Huffman - Code
Ein Algorithmus der die optimale Bit-Kodierung variabler Länge für eine
gegebene Zeichenhäufigkeit findet, wurde 1952 von D. Huffman
angegeben.
Algorithmus zum Erzeugen der Huffman-Codes
1. Bestimme die Auftrittshäufigkeit der Zeichen und schreibe sie an die leaves
eines aufzubauenden Binärbaums an.
2. Nimm die bisher unerledigten zwei Knoten mit den geringsten Häufigkeiten
und berechne deren Summe.
3. Erzeuge einen Elternknoten für diese beiden und beschrifte ihn mit der
Summe. Markiere die Verzweigung zum linken Kind mit 0, die zum rechten
Kind mit 1.
4. Markiere die beiden bearbeiteten Knoten als erledigt. Wenn es nur noch
einen nicht erledigten Knoten gibt, ist die Kodierung beendet. Sonst weiter
mit Schritt 2.
WS 2006-07
11
Huffman - Code (Erzeugung)
Wahrscheinlichkeit der Zeichen:
p(B) = 0.1; p(L) = 0.2; p(A) = 0.3; p(T) = 0.3; p(S) = 0.1
A 30%
Codierung
A
T 30%
T
L 20%
L
B
B 10%
S
S 10%
WS 2006-07
12
Huffman-Code, Optimalität
Zeichen mit großen Häufigkeiten sind näher an der Wurzel des
Codebaumes und haben daher eine kürzere Codewortlänge.
Die Länge der kodierten Zeichenfolge ist das Produkt der gewichteten
äußeren Pfadlänge des Huffman-Baumes mit der Zeichenzahl der
Folge. Die "gewichtete äußere Pfadlänge" eines Baums ist gleich
der über alle Blätter gebildeten Summe der Produkte der
Wahrscheinlichkeit mit der Entfernung von der Wurzel. Damit kann
die Länge der kodierten Zeichenfolge berechnet werden.
Äquivalent dazu ist die die über alle Zeichen gebildete Summe der
Produkte aus der Wahrscheinlichkeit pi mit der Bit-Code-Länge li für
das jeweilige Zeichen.
Kein Baum mit den gleichen Häufigkeiten bei den Blättern hat eine
kleinere gewichtete äußere Pfadlänge als der Huffman-Baum
WS 2006-07
13
Arithmetische Codierung
Informationstheoretisch ist die Huffman-Kodierung in der Regel nicht
optimal, da einem Datenwort stets eine ganzzahlige Anzahl von Bits
als Codewort zugewiesen wird.
Es kann gezeigt werden, daß das Produkt aus "gewichteter äußerer
Pfadlänge" des Huffman-Baums und Zeichenlänge größer oder
gleich der Entropie einer Nachricht bei gegebenen Zeichenwahrscheinlichkeiten ist.
Idee der arithmetischen Kodierung:
Eine Nachricht wird als Gleitkommazahl aus dem Intervall [0,1) kodiert.
Dazu wird das Intervall nach den Wahrscheinlichkeiten der
einzelnen Symbole aufgeteilt. Jedes Teilintervall repräsentiert ein
Zeichen.
WS 2006-07
14
Arithmetische Codierung
Beispiel: Huffmann Code
Symbol
p(Symbol)
Code
A
0.01
0
B
0.99
1
AAAA  1111
BBBB  0000
WS 2006-07
15
Arithmetische Codierung
Idee:
Stelle Symbole und Symbolfolgen als Intervall [l, r) bzw. als
Element daraus dar.
Beispiel:
WS 2006-07
Symbol
p(Symbol)
Intervall
F
0.1
[0.0, 0.1)
I
0.3
[0.1, 0.4)
N
0.3
[0.4, 0.7)
O
0.2
[0.7, 0.9)
@
0.1
[0.9, 1.0)
16
Arithmetische Codierung
0.4
1.0
0.31
0.229
0.2281
0.22810
@
0.9
O
0.7
N
0.4
I
0.1
F
0.1
0.22
0.22
0.2263
0.22792
u ,o 
x, y  
x   y  x u, x   y  x o 
WS 2006-07
17
Arithmetische Codierung
Decodierung durch Umkehrung:
u ,o 
v, w 
v  u  o  u , w  u  o  u 
Beispiel:
0.1, 0.4 :I



0.4 , 0.7 :N


0.0 , 0.1:F


0.7 , 0.9 :O


0.9 ,1.0 :@


WS 2006-07
0.22792,0.2281
0.4264,0.427
0.088,0.09
0.88,0.9
0.9,1.0
0.0,1.0
18
Arithmetische Codierung
Es reicht natürlich ein Wert aus dem Intervall, z.B. der untere.
Die Gesamtnachricht wird zur Codierung in Teilzeichenfolgen
zerlegt, die durch Stoppzeichen beendet werden.
Nachteil: Statisches Verfahren, passt sich nicht wechselnden
Wahrscheinlichkeiten an.
Nachteil: Aufwendige Berechnungen.
WS 2006-07
19
Einfaches verlustfreies
Kompressionsverfahren
Ersetze häufig auftretendes Muster durch kurzes
Codewort, verwende Wörterbuch für die Codeworte
abracadabracadabra
1
2 1
2 1
WS 2006-07
abra
cad
1
2
20
Einfaches verlustfreies
Kompressionsverfahren
Wörterbuchbasiertes Kompressionsverfahren:
statisch:
Wörterbuch wird vor Codierung festgelegt
und bleibt unverändert
dynamisch: Wörterbuch passt sich dem zu
komprimierenden Text dynamisch an
Lempel-Ziv:
zip, TIFF ( Image File Format)
Lempel-Ziv-Welch: Compress in Unix
WS 2006-07
21
Einfaches verlustfreies
Kompressionsverfahren
Lempel-Ziv Idee:
Baue das Wörterbuch simultan mit der Kodierung des Textes auf;
anfangs seien für jeden Buchstaben des Alphabetes Codenummern
im Wörterbuch
WS 2006-07
22
Einfaches verlustfreies
Kompressionsverfahren
Kodierung von:
ababcbabab
Wörterbuch
Eintrag
a
b
c
WS 2006-07
#
1
2
3
Ausgabe
23
Einfaches verlustfreies
Kompressionsverfahren
Decodierung von:
1 2 4 3 5 8
Wörterbuch
Eintrag
a
b
c
WS 2006-07
#
1
2
3
Ausgabe
24
LZW Kodierung
Algorithmus Lempel-Ziv-Welch
Input: Ein Text T=t1…tn über dem Alphabet S
Output: Die LZW Kodierung von T
Initialisiere Wörterbuch D mit Zeichen aus S;
Initialisiere string s = t1:
while noch nicht alle Zeichen von T gelesen do
lies nächstes Zeichen c;
if s+c ist Anfangsstück eines Eintrags in D
then s = s+c /* bestimme aktuellen Match*/
else { gib Codewort(s) aus;
trage s+c in D ein;
s=c}
end while;
gib Codewort(s) aus
WS 2006-07
25
LZW Decodierung
Input: Sequenz von Codewörtern
Output: Zeichenfolge über dem Alphabet S
Initialisiere Wörterbuch D mit Zeichen aus S;
Lies lcw und gib Buchstaben string(lcw) aus, den lcw codiert;
while noch nicht alle Codewörter gelesen do
lies nächstes Codewort act;
if act ist nicht in D then /* Spezialfall*/
{ trage string(lcw) + firstchar(string(lcw)) in D ein;
gebe string(lcw) + firstchar(string(lcw)) aus }
else { trage string(lcw) + firstchar(string(act)) in D ein;
gibt string(act) aus }
lcw = acw
end while
WS 2006-07
26
Lempel-Ziv Kodierung: Beispiel
T = COCOA AND BANANAS
Wörterbuch D (anfangs)
m
A
000 001
O
B
000 010
...
...
C
000 011
S
010 011
D
000 100
...
...
Z
011 010
N
WS 2006-07
...
#(m)
...
m
001 110
#(m)
001 111
011 011
27
Lempel-Ziv Kodierung: Beispiel
T = COCOA AND BANANAS
m
#(m)
add to D
T
C
000 011
CO
011 100
OCOA AND BANANAS
O
001 111
OC
011 101
COA AND BANANAS
CO 011 100
COA 011 110
A
A
000 001
011 111
A AND BANANAS
AND BANANAS
011 011
A
100 000
AND BANANAS
A
000 001
AN
100 001
ND BANANAS
N
001 110
ND
100 010
D BANANAS
D
000 100
D
100 011
BANANAS
011 011
B
100 100
BANANAS
# (T) = 000 011 | 001 111 | 011 100 | 000 001 | 011 011 | ...
WS 2006-07
28
Lempel-Ziv Eigenschaften
• Wörterbuch passt sich dynamisch an die zu komprimierende
Zeichenkette an, d.h. es enthält schließlich die am häufigsten
vorkommende Zeichenkette
• Wörterbuch (Code Tabelle) muss nicht übertragen werden. Bekannt
sein muss nur die Anfangtabelle, alles weitere wird beim Decodieren
dynamisch erzeugt.
• Codieren und Decodieren ist in linearer Zeit möglich
• LZ führt i.a. zu höheren Kompressionsraten als Huffmann
WS 2006-07
29
Verlustbehaftete Kompressionsverfahren
Gegensatz: Verlustbehaftete Kompression für Bilder, Audio,
Video
Beispiele:
• JPEG
• MPEG
• MP3
WS 2006-07
30
JPEG-Kompression
Die JPEG-Kompression erfolgt in 4 Schritten:
1.) Bildaufbereitung (Farbraumtransformation, Blockzerlegung)
2.) Diskrete Cosinus-Transformation (Forward DTC)
3.) Quantisierung (Die verlustbehaftete Datenreduktion)
4.) Entropie-Kodierung (Huffman)
WS 2006-07
31
MPEG-1 und JPEG
Bei der MPEG-1 Videokodierung und Videokompression werden sowohl die
räumliche Redundanz (spatial) in Einzelbildern als auch die zeitliche
Redundanz in aufeinander folgenden Bildern berücksichtigt.
Die Behandlung von Einzelbildern hat einige Gemeinsamkeiten mit JPEG. Dies
gilt im Besonderen für die Kodierung von Intra-Frames (I-Frames).
1.) Ein RGB-Einzelbild wird in den YUV-Farbraum transformiert.
2.) Sub-Sampling mit 4:2:2 bzw. 4:1:1. Einem 8x8 Y-Block sind 2 4x4 U,V
Blöcke zugeordnet.
3.) DCT
4.) Quantisierung mit konstanter Quantisierungsmatrix (Hardware)
5.) Zig-Zag Kodierung
6.) RLE
7.) Huffman-Kodierung mit konstanter Tabelle (Hardware)
WS 2006-07
32
Herunterladen