www.wikidata.de-de.nina.az
Die Lauflangenkodierung englisch run length encoding kurz RLE auch die Lauflangencodierung ist ein einfacher verlustfreier Kompressionsalgorithmus Er ist geeignet um langere Wiederholungen von Symbolen zu komprimieren Er gehort nicht zur Gruppe der Entropiekodierer da er auf der absoluten Haufigkeit und nicht auf der relativen Haufigkeit von Symbolen basiert Inhaltsverzeichnis 1 Idee 2 Verfahren 2 1 Bitfolgen 2 2 Mehrwertige Symbolfolgen 2 3 Implementierung 2 4 Modifikationen 3 Anwendungen 3 1 Dateiformate 4 Literatur 5 EinzelnachweiseIdee BearbeitenDie Grundidee des Algorithmus ist jede Sequenz von identischen Symbolen durch deren Anzahl und ggf das Symbol zu ersetzen D h es werden nur die Stellen markiert an denen sich das Symbol in der Nachricht andert Da die Langenangabe im Vergleich zur Lange der Sequenz nur logarithmisch wachst spart man insbesondere bei langen Wiederholungssequenzen erheblich Speicherplatz Umgekehrt ist die Einsparung umso geringer je kurzer die Wiederholungen sind Die Lauflangenkodierung wird heutzutage als Vorkodierungsschritt z B bei der Bildkompression wie JPEG verwendet um sich im folgenden Kodierungsschritt Aufwand zu sparen Z B spart man sich bei der Huffman Kodierung die Betrachtung langerer Symbole da diese bereits zuvor reduziert wurden Beispiel Statt einer Folge mit funf Wiederholungen des Zeichens 0 und dreimal 1 0000 0111speichert man lediglich 5 3Das Startsymbol muss demnach bekannt sein oder zusatzlich kodiert werden Je langer eine einzelne Folge wird umso grosser ist die Einsparung denn fur 10 Wiederholungen benotigt man zwei Dezimalstellen fur 100 Wiederholungen benotigt man drei Dezimalstellen fur 1000 Wiederholungen benotigt man vier Dezimalstellen usw Gleiches gilt fur beliebige andere Zahlensysteme Verfahren BearbeitenBitfolgen Bearbeiten Bei der Kodierung von Bitfolgen existieren nur zwei Moglichkeiten Eine Folge von Nullen oder eine Folge von Einsen Auf jede Sequenz von Nullen folgt garantiert mindestens eine Eins und umgekehrt ebenfalls Die einzige Ausnahme ist wenn das Ende der Nachricht erreicht ist Der Kodierer einigt sich nun mit dem Dekodierer darauf mit welchem Bit begonnen wird Das kann entweder durch Konvention sein oder bspw durch ein zusatzliches Bit zu Beginn Anschliessend werden abwechselnd die Langen der Null und Eins Folgen ubertragen Der Dekodierer muss anschliessend nichts anderes tun als zu jedem empfangenen Wert entsprechend viele Null oder Eins Bits auszugeben Beispiel Die Ausgangssequenz sei 1111 1110 0000 1000 0001 1111Kodiert wird daraus 7 5 1 6 5Die notwendige Mindestanzahl an notwendigen Binarstellen ist drei denn dies deckt den Zahlenbereich von 0 bis 7 ab Binar kodiert lautet die komprimierte Folge dann 111 101 001 110 101Die ursprunglich 24 Bits konnten auf 15 Bits reduziert werden Mehrwertige Symbolfolgen Bearbeiten Bei der Kompression von Symbolfolgen die aus einem Alphabet mit mehr als zwei Symbolen bestehen ist nicht mehr eindeutig welches Symbol als nachstes folgt z B Bytes haben ein Alphabet von 256 moglichen Zeichen Hier muss neben der Anzahl der Wiederholungen auch das Symbol mitgesendet werden aus dem die Sequenz besteht Eine Besonderheit hierbei ist dass die komprimierte Nachricht u U sogar grosser wird wenn der Speicherplatz fur die Anzahl der Wiederholungen grosser ist als die Folge selbst Beispiel Die Ausgangssequenz sei AAAA ABBB BBBB CDDD EEKodiert wird daraus A 5 B 7 C 1 D 3 E 2 Grundsatzlich konnte ein Symbol statt nur aus einem auch aus zwei Buchstaben bestehen AA 2 AB 1 BB 3 CD 1 DD 1 EE 1 Im ungunstigsten Fall keine Wiederholungen ware die komprimierte Nachricht grosser als das Original Aus der Folge ABCDwurde A1B1C1D1 Implementierung Bearbeiten Der Basisalgorithmus ohne Optimierungen ist leicht implementierbar include lt stdio h gt int main int n 1 Anzahl der Wiederholungen int ch 1 Aktuelles Zeichen int prev ch getchar Vorheriges Zeichen do ch getchar if ch prev ch n 255 Symbol Wiederholungen Tupel ausgeben falls ein anderes Symbol kommt oder die maximal darstellbare Anzahl erreicht printf c c prev ch n Binare Ausgabe printf c d n prev ch n Lesbare Ausgabe als 2er Tupel n 0 Beginn einer neuen Folge prev ch ch n while ch EOF return 0 Modifikationen Bearbeiten Mitunter finden sich in einer Nachricht nur sehr wenige Wiederholungssequenzen Um nun zu verhindern dass bei einem mehrwertigen Alphabet jedes einzelne Vorkommen durch ein Tupel mit Langenangabe 1 ersetzt wird z ABC A1B1C1 kodiert man nur Folgen ab einer bestimmten Lange z B ab vier Dann benotigt man jedoch ein spezielles Zeichen escape character das anzeigt dass ein komprimiertes Tupel folgt Dieses spezielle Zeichen bzw Symbol kommt im Idealfall sonst nicht in der Nachricht vor andernfalls wahlt man ein Symbol von dem man annimmt dass es nur selten auftritt Die Besonderheit an diesem Symbol ist dass es jedes mal als Tupel kodiert werden muss auch wenn es nur einmal auftritt da sonst wieder nicht zwischen dem Symbol und dem Tupel unterschieden werden kann Beispiel Die ursprungliche Nachricht sei Auus die Maaaaauuuuus Lange 21 Zeichen Als Escape Character wahlen wir zur Verdeutlichung das Zeichen s Ausserdem kodieren wir nur Folgen die mindestens drei Wiederholungen enthalten Auu u b s b s1 u die M u b s b a5 u u b s b u5 u u b s b s1 u Lange 21 Zeichen Wiederholt sich ein Buchstabe ofter als drei Mal oder ist er das Escape Zeichen so wird durch die Ausgabe des Escape Zeichens angezeigt dass ein Tupel mit Langenangabe folgt Darauf folgt die Anzahl der Wiederholungen und abschliessend das entsprechende Zeichen Durch das Escape Zeichen besteht zwar zusatzlicher Speicherbedarf dieser wird im vorliegenden Fall jedoch durch die Einsparung an Lange 1 Folgen wieder wettgemacht Naiv kodiert wurde die Nachricht lauten 1A2u1s 1d1i1e 1M5a5u1s Lange 22 Zeichen Beim Dateiformat PCX wird je nach Anzahl der Wiederholungen ein anderes Escape Zeichen verwendet diese machen bei PCX ein Viertel des Zeichenvorrats aus sodass Escape und Langenzeichen zu einem Zeichen zusammenfallen Anwendungen BearbeitenLauflangenkodierung kommt in Kombination mit einer modifizierten Huffman Kodierung bei der Fax Ubertragung nach der ITU T Empfehlung T 30 G3 Fax zum Einsatz 1 Gerade beim Ubertragen von Schwarz Weiss Seiten erzielt die Lauflangenkodierung gute Ergebnisse da sich hier lange weisse Bereiche mit kurzeren schwarzen Bereichen abwechseln Bei der verlustbehafteten Kompression von Bildern wird die Lauflangenkodierung nach der Transformation in den Frequenzbereich auf die einzelnen Koeffizienten angewandt Insbesondere nach der Quantisierung entstehen in der Regel viele gleiche Werte oder Nullen die sich effektiv mit einer Lauflangenkodierung komprimieren lassen Anschliessend werden diese vor komprimierten Daten noch mit der Huffman Kodierung weiter komprimiert Dateiformate Bearbeiten Dateiformate die die Lauflangenkodierung verwenden sind Grafikformate wie das Interchange File Format IFF ILBM mit CmpByteRun1 Algorithmus Windows Bitmap GEM Image Targa oder PCX Unter Windows wird die Dateiendung rle ublicherweise fur RLE komprimierte Bilder verwendet Literatur BearbeitenDavid Salomon Data Compression The Complete Reference 4 Auflage Springer 2007 ISBN 978 1 84628 602 5 David Salomon Data Compression The Complete Reference 4 Auflage Springer 2007 ISBN 978 1 84628 602 5 S 23 31 Jens Rainer Ohm Multimedia Communication Technology Springer 2004 ISBN 3 540 01249 4 S 479 481 Einzelnachweise Bearbeiten T 30 Procedures for document facsimile transmission in the general switched telephone network ITU T abgerufen am 15 August 2013 Abgerufen von https de wikipedia org w index php title Lauflangenkodierung amp oldid 237316960