Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "WS 2006-07 11 Kompressionsverfahren (für Texte) Prof. Dr. Th. Ottmann."—  Präsentation transkript:

1 WS Kompressionsverfahren (für Texte) Prof. Dr. Th. Ottmann

2 2WS 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)

3 3WS 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

4 4WS 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

5 5WS Verlustfreie Kompression - PS Musterersetzung (pattern substitution) Beispiel 1 Beispiel 2 Beide Ersetzungen erreichen die selbe Kompressionsrate

6 6WS 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

7 7WS 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:

8 8WS Kodierung mit variabler Länge Die üblichen Zeichen-Codes (z.B. ISO ) 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 Die Kodierung des Worts BLATTSALAT ( ) mit konstanter Bit-Länge pro Zeichen (5 Bits für 26 Buchstaben) ist: (50 Bits) Code 2: A T L B S Kodierter Text: (14 Bits)

9 9WS 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: (24 Bits)

10 10WS 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. B ST L 10 A

11 11WS 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 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.

12 12WS 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 Codierung

13 13WS 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 p i mit der Bit-Code-Länge l i 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

14 14WS 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.

15 15WS Arithmetische Codierung Beispiel: Huffmann Code AAAA 1111 BBBB 0000 Symbolp(Symbol)Code A0.010 B0.991

16 16WS Arithmetische Codierung Idee: Stelle Symbole und Symbolfolgen als Intervall [l, r) bzw. als Element daraus dar. Beispiel: Symbolp(Symbol)Intervall F0.1[0.0, 0.1) I0.3[0.1, 0.4) N0.3[0.4, 0.7) O0.2[0.7, 1.0)

17 17WS Arithmetische Codierung I N F

18 18WS Arithmetische Codierung Decodierung durch Umkehrung: Beispiel:

19 19WS 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.

20 20WS Einfaches verlustfreies Kompressionsverfahren Ersetze häufig auftretendes Muster durch kurzes Codewort, verwende Wörterbuch für die Codeworte abracadabracadabra abra cad 2

21 21WS 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

22 22WS 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

23 23WS 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

24 24WS Einfaches verlustfreies Kompressionsverfahren Decodierung von: Wörterbuch Eintrag #Ausgabe a 1 b 2 c 3

25 25WS Algorithmus Lempel-Ziv-Welch Input: Ein Text T=t 1 …t n ü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

26 26WS LZW Decodierung Input: Sequenz von Codewörtern Output: 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 = acw end while

27 27WS Lempel-Ziv Kodierung: Beispiel T = COCOA AND BANANAS Wörterbuch D (anfangs) m#(m)m A O B C S D Z N

28 28WS Lempel-Ziv Kodierung: Beispiel m#(m)add to DT C CO OCOA AND BANANAS O OC COA AND BANANAS CO COA A AND BANANAS A A AND BANANAS 011 A AND BANANAS A AN ND BANANAS N ND D BANANAS D D BANANAS 011 B BANANAS T = COCOA AND BANANAS # (T) = | | | | |...

29 29WS 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

30 30WS Verlustbehaftete Kompressionsverfahren Gegensatz: Verlustbehaftete Kompression für Bilder, Audio, Video Beispiele: JPEG MPEG MP3

31 31WS 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)

32 32WS 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)


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

Ähnliche Präsentationen


Google-Anzeigen