kompressionsverfahren (für texte)

32
WS 2006-07 11 Kompressionsverfahren (für Texte) Prof. Dr. Th. Ottmann

Upload: devin-huff

Post on 03-Jan-2016

23 views

Category:

Documents


1 download

DESCRIPTION

Kompressionsverfahren (für Texte). Prof. Dr. Th. Ottmann. 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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Kompressionsverfahren  (für Texte)

WS 2006-07 11

Kompressionsverfahren (für Texte)

Prof. Dr. Th. Ottmann

Page 2: Kompressionsverfahren  (für Texte)

2 WS 2006-07

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)

Page 3: Kompressionsverfahren  (für Texte)

3 WS 2006-07

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

Page 4: Kompressionsverfahren  (für Texte)

4 WS 2006-07

Verlustfreie Kompressionsverfahren

Ziel:

Finde umkehrbare Codierung, so dass das Original (der Text) wieder (verlustfrei) rekonstruiert werden kann.

Beispiele:

• Huffmann-Code• Lauflängen-Codierung• Arithmetische Codierung• Lempel-Ziv Codierung

Page 5: Kompressionsverfahren  (für Texte)

5 WS 2006-07

Verlustfreie Kompression - PS

Musterersetzung (pattern substitution)

Beispiel 1

Beispiel 2

Beide Ersetzungen erreichen die selbe Kompressionsrate

Page 6: Kompressionsverfahren  (für Texte)

6 WS 2006-07

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

Page 7: Kompressionsverfahren  (für Texte)

7 WS 2006-07

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 100000000000000000011111111111111111100000000 17 18 80000000000000000111111111111111111111000000 16 21 60000000000111111110000000000000011111111000 10 8 14 8 30000000001111111100000000000000001111111000 9 8 16 7 30000000000011111000000000000000000111110000 11 5 18 5 40000000000001110000000000000000000011100000 12 3 20 3 50111111111111111111111111111111111111111110 1 41 10111111111111111111111111111111111111111110 1 41 10111111111111111111111111111111111111111110 1 41 10100000000000000000000000000000000000000011 1 1 39 2

Page 8: Kompressionsverfahren  (für Texte)

8 WS 2006-07

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 T L B S ... 0 1 01 10 11 ...

Kodierter Text: 10 01 0 1 1 11 0 01 0 1 (14 Bits)

Page 9: Kompressionsverfahren  (für Texte)

9 WS 2006-07

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)

Page 10: Kompressionsverfahren  (für Texte)

10 WS 2006-07

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.

BB

SSTT

LL

1100

AA

Page 11: Kompressionsverfahren  (für Texte)

11 WS 2006-07

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.

Page 12: Kompressionsverfahren  (für Texte)

12 WS 2006-07

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%

T 30%

L 20%

B 10%

S 10%

A

T

L

B

S

CodierungCodierung

Page 13: Kompressionsverfahren  (für Texte)

13 WS 2006-07

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

Page 14: Kompressionsverfahren  (für Texte)

14 WS 2006-07

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 Zeichen-wahrscheinlichkeiten 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.

Page 15: Kompressionsverfahren  (für Texte)

15 WS 2006-07

Arithmetische Codierung

Beispiel: Huffmann Code

AAAA 1111

BBBB 0000

Symbol p(Symbol) Code

A 0.01 0

B 0.99 1

Page 16: Kompressionsverfahren  (für Texte)

16 WS 2006-07

Arithmetische Codierung

Idee:

Stelle Symbole und Symbolfolgen als Intervall [l, r) bzw. als

Element daraus dar.

Beispiel:

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)

Page 17: Kompressionsverfahren  (für Texte)

17 WS 2006-07

Arithmetische Codierung

1.0

0.9

0.7

0.4

0.1

0.1 0.22 0.22 0.2263 0.22792

0.4 0.31 0.229 0.2281 0.22810

I

N

F

O

@

oxyxuxyxyx ou ,, ,

Page 18: Kompressionsverfahren  (für Texte)

18 WS 2006-07

Arithmetische Codierung

Decodierung durch Umkehrung:

Beispiel:

uouwuouvwv ou ,, ,

0.1,0.0

0.1,9.0

9.0,88.0

09.0,088.0

427.0,4264.0

2281.0,22792.0

@:0.1,9.0

:9.0,7.0

:1.0,0.0

:7.0,4.0

:4.0,1.0

O

F

N

I

Page 19: Kompressionsverfahren  (für Texte)

19 WS 2006-07

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.

Page 20: Kompressionsverfahren  (für Texte)

20 WS 2006-07

Einfaches verlustfreies Kompressionsverfahren

Ersetze häufig auftretendes Muster durch kurzes

Codewort, verwende Wörterbuch für die Codeworte

abracadabracadabra abra 11 2 1 2 1 cad 2

Page 21: Kompressionsverfahren  (für Texte)

21 WS 2006-07

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

Page 22: Kompressionsverfahren  (für Texte)

22 WS 2006-07

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

Page 23: Kompressionsverfahren  (für Texte)

23 WS 2006-07

Einfaches verlustfreies Kompressionsverfahren

Kodierung von: a b a b c b a b a b

Wörterbuch

Eintrag # Ausgabe

a 1

b 2

c 3

Page 24: Kompressionsverfahren  (für Texte)

24 WS 2006-07

Einfaches verlustfreies Kompressionsverfahren

Decodierung von: 1 2 4 3 5 8

Wörterbuch

Eintrag # Ausgabe

a 1

b 2

c 3

Page 25: Kompressionsverfahren  (für Texte)

25 WS 2006-07

Algorithmus Lempel-Ziv-Welch

Input: Ein Text T=t1…tn über dem Alphabet Output: Die LZW Kodierung von T

Initialisiere Wörterbuch D mit Zeichen aus 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

LZW Kodierung

Page 26: Kompressionsverfahren  (für Texte)

26 WS 2006-07

LZW Decodierung

Input: Sequenz von CodewörternOutput: Zeichenfolge über dem Alphabet

Initialisiere Wörterbuch D mit Zeichen aus 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 = acwend while

Page 27: Kompressionsverfahren  (für Texte)

27 WS 2006-07

Lempel-Ziv Kodierung: Beispiel

T = COCOA AND BANANAS

Wörterbuch D (anfangs)

m #(m) m #(m)

A 000 001 O 001 111

B 000 010

...

...

C 000 011 S 010 011

D 000 100

...

...

...

... Z 011 010

N 001 110 011 011

Page 28: Kompressionsverfahren  (für Texte)

28 WS 2006-07

Lempel-Ziv Kodierung: Beispiel

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 AND BANANAS

A 000 001 A 011 111 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 = COCOA AND BANANAS

# (T) = 000 011 | 001 111 | 011 100 | 000 001 | 011 011 | ...

Page 29: Kompressionsverfahren  (für Texte)

29 WS 2006-07

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

Page 30: Kompressionsverfahren  (für Texte)

30 WS 2006-07

Verlustbehaftete Kompressionsverfahren

Gegensatz: Verlustbehaftete Kompression für Bilder, Audio,

Video

Beispiele:

• JPEG• MPEG• MP3

Page 31: Kompressionsverfahren  (für Texte)

31 WS 2006-07

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)

Page 32: Kompressionsverfahren  (für Texte)

32 WS 2006-07

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)