Facsimilie Codierung
Bei der Facsimilie Codierung handelt es sich um ein Verfahren zur Kompression von schwarz/weiss Bildern. Dieses Verfahren wird bereits seit langer Zeit beim Faxen verwedet, und ist eines der ersten Kompressionsverfahren überhaupt. Die Kompression ist notwendig, um das zu faxende Bild über die Telefonleitung zu senden.
1 Aufwand
Der Aufwand faximilie-basierter Kompression ist (mindestens) quadratisch.
2 Modell
Es existieren verschiedene Algorithmen, die jedoch von den selben Vorraussetzungen ausgehen: gegeben seien zwei Zustände (schwarz und weiß), die die Zustände eines Marov-Modells bilden. Der Zustand Sb sagt aus, das das zuletzt gesehene Pixel ein schwarzes war. Im Zustand Sw wurde zuletzt ein weißes Pixel betrachtet. Von beiden Zuständen kann man in den jeweils anderen Zustand wechseln, oder aber im gegenwärtigen Zustand bleiben. Mit den bedingten Wahrscheinlichkeiten für die Zustandswechlsel folgt daraus folgendes Modell:
Man kann davon ausgehen, dass einem schwarzen Pixel eher wieder ein schwarzes folgt, und einem weißem Pixel wieder ein weißes.
Es gilt also: P(w|w) und P(b|b) sind größer als P(w|b) und P(b|w). Hieraus ergeben sich dann die einzelnen Wahrscheinlichkeiten für das Auftreten von verschiedenen Blöcken. Mit Hilfe dieser empirisch festgelegten Wahrscheinlichkeiten für die Blockgrößen kann man nun eine sinnvolle Codierung der Blockgrößen bestimmen. Mehr dazu in Abschnitt 4.3 Varianten
In der Praxis werden in der Regel folgende Algorithmen verwendet: der einsimensionale MH-Algorithmus (MH=modified Huffman), sowie der zweidimensionale MR-Algorithmus (MR=modified READ; READ=relative element adress designate). Der MH-Algorithmus funktioniert auf folgende Weise: Man betrachtet jede Zeile für sich, und bildet nacheinander maximal große schwarze und weiße Blöcke. In jedem erzeugten Block sind also nur Pixel der gleichen Farbe. Anschließend holt man sich den modifizierten Huffman-Code des entsprechenden Farb-/Blöckgröße-Paares. Wichtig ist hier jedoch, das man mit einem weißen Pixelblock beginnt. Beginnt die Zeile mit einem schwarzen Pixelblock, so wird ein vorangedachter weißer Pixelblock der Länge 0 angehangen. Am Ende der Zeile wird noch ein spezieller End-of-Line Huffman-Code hinzugefügt.
function MH (String Bildzeile)4 Spezielle Codes für den MH-Algorithmus
Entwickelt wurde eine Reihe von Codes, die alle auf folgende Grundlage basieren:
Bei einer Faxseite gibt es nach DIN-Norm 1728 Zeichen je Zeile. Ein Block kann demnach maximal 1728 Zeichen lang sein. Zudem sind ebenfalls 1728 verschieden große Blöcke möglich, so das das HuffmanAlphabet sehr groß werden würde. Aus diesem Grund wird ein Block r, welcher mehr als 63 Zeichen enthält folgendermaßen codiert: r = 64 * m + t für m=1,2,...27 und t=0,1,...63 Der Block wird dann als Codepaar 64*m und t dargestellt. Codes für 64*m werden Grobcodes (make-up Codes), Codes für 1 bis 63 Schlusscodes (terminate Codes) genannt. Im Nachfolgenden wird ein Ausschnitt des Codes der geläufigen CCITT Gruppe T4 gezeigt (Dieser wird auch in nachfolgenden Applet verwendet):5 Beispiel
Gegeben Sei folgende Bildzeile (0=weiß, 1=schwarz): 0000 1111 0110 1101 1111 1111 1111 1011 1111 1101 1111 1111 1110 0000 Nun werden nacheinander maximal Große Blöcke gleicher Farbe gebildet: 0000 1111 0 11 0 11 0 11111111111111 0 11111111 0 111111111111 00000 s w s w s w s w s w s w s Nun schauen uns das Paar aus Blockgröße und Blockfarbe an: 4 4 1 2 1 2 1 14 1 8 1 12 s w s w s w s w s w s w Da wir nicht mit einem weißen Block, wie gefordert, beginnen, fügen wir einen leeren weißen Block hinzu: 0 4 4 1 2 1 2 1 14 1 8 1 12 w s w s w s w s w s w s w Jede Zeile muss mit einem Zeilen-Ende Signal abgeschlossen werden: 0 4 4 1 2 1 2 1 14 1 8 1 12 EOL w s w s w s w s w s w s w s Und suchen den zu jedem paar entsprechenden Code (0,w --> 00110101; 4,s -->011; 4,w -->1011; ...): 00110101 011 1011 010 0111 010 0111 010 110100 010 10011 010 001000 000000000001 Nun noch den Code sauber hinschreiben, und fertig: 0011 0101 0111 0110 1001 1101 0011 1010 1101 0001 0100 1101 0001 0000 0000 0000 001
6 Applet
Das Applet soll veranschaulichen, wie der MH-Algorithus abläuft.
Handhabung des Applets:
Entwickelt von Nadine Hassis und Rene Worzischek im Rahmen der Datenkommpressionsvorlesung der Universität Tübingen, 2007.