====== Lauflängencodierung ======
Eine einfache Methode der verlustfreien Komprimierung von Nutzdaten ist die **Lauflängencodierung** (RLE((Run Length Encoding))):
* Voraussetzung: in der zu komprimierenden Zeichenfolge gibt es Zeichen, die sich wiederholen.
* Idee: man gibt die Anzahl der Wiederholungen an und dann das Zeichen, das sich wiederholt.
==== Ein einfaches Beispiel: ====
{{ :faecher:informatik:oberstufe:codierung:llc:rle.png?300 |}}
==== Ein besseres Verfahren ====
Das kann man jetzt natürlich durchaus etwas ausgefeilter umsetzen. Wir betrachten dazu ein S/W PBM Bild.
P1
20 11
00000000000000000000
00000000111000000000
00000001110000000000
00000001110000111111
11111111110001111111
11111110011111111111
11100000000000000111
00000000000000011100
00000000000011100000
00000000001110000000
00000000000000000011
Nun kann man natürlich (wie oben) schreiben: ''26w3s15w3s15w3s4w14s3w15s2w14s13w3s13w3s13w3s22w2s'', das sind 51 ASCII-Zeichen, also 51 Byte. Die Bildinformationen umfassen 220Bit - kein wirklicher Gewinn.
Nun vereinbaren wir folgenden Code:
* Wir bilden Code-Worte aus 4 Bit
* Das erste Bit legt die Farbe fest (0 für weiß, 1 für schwarz)
* Die folgenden 3 Bit geben an, wie oft diese Farbe wiederholt wird (000 für 1 Mal, 001 für 2 Mal, 010 für 3 Mal usw.)
Das ergibt die folgende Code Tabelle:
|Code|Bedeutung|
|0000|1 weißes Pixel|
|0001|2 weißePixel|
|0010|3 weiße Pixel|
|0011|4 weiße Pixel|
|0100|5 weiße Pixel|
|0101|6 weiße Pixel|
|0110|7 weiße Pixel|
|0111|8 weiße Pixel|
|1000|1 schwarzes Pixel|
|1001|2 schwarze Pixel|
|1010|3 schwarze Pixel|
|1011|4 schwarze Pixel|
|1100|5 schwarze Pixel|
|1101|6 schwarze Pixel|
|1110|7 schwarze Pixel|
|1111|8 schwarze Pixel|
----
{{:aufgabe.png?nolink |}}
=== (A1) ===
Codiere das Testbild mit dieser Code-Tabelle. Wie viele Bit benötigst Du dafür?
{{ :faecher:informatik:oberstufe:codierung:llc:testbild.png |}}
++++ Lösung |
0111 0111 0111 0011 // 28 we
1010 // 3 sw
0111 0111 // 16 we
1010 // 3 sw
0111 0111 0000 // 17 we
1010 // 3 sw
0011 // 4 we
1111 1111 // 16 sw
0010 // 3 we
1111 1101 // 14 sw
0001 // 2we
1111 1101 // 14 sw
0111 0101 // 14 we
1010 // 3 sw
0111 0100 // 15 we
1010 // 3 sw
0111 0101 // 14 we
1010 // 3 sw
0111 0110 // 15 we
1010 // 3 sw
0111 0111 0111 0000 // 25 we
1001 // 2 sw
* Komprimiert: 38 * 4 Bit = 152 Bit
* Original: 20*11 = 220Bit
* Verhältnis: 152/220 = 0,69 = 69%
++++
----
{{:aufgabe.png?nolink |}}
=== (A2) ===
Dekodiere folgende Daten für ein Bild mit 8 Pixel Breite und 11 Pixel Höhe.
0111-0111-0001-1011-0110-1000-0110-1000-0101-1001-0100-1000-0101-1000-0110-1011-0111-0111-0001
Erstelle eine bmp-Datei. Ermittle die Kompressionsrate in Prozent.
----
{{:aufgabe.png?nolink |}}
=== (A3) ===
Beschreibe ein Schwarz-Weiß-Bild, das gut mit Lauflängencodierung komprimiert werden kann und eines, das schlecht mit Lauflängencodierung komprimiert werden kann.
----
{{:aufgabe.png?nolink |}}
=== (A4) ===
Ein anderes System für eine Lauflängencodierung könnte folgendermaßen funktionieren.
* Die Code-Blöcke bestehen aus 3 Bit
* Der erste Code-Block einer Datei bezeichnet stets weiße Zeichen.
* Es kommt die folgende Codetabelle zur Anwendung:
^ Code ^ Bedeutung ^
|000|Farbwechsel |
|001|1 Zeichen der aktuellen Farbe |
|010|2 Zeichen der aktuellen Farbe |
|011|3 Zeichen der aktuellen Farbe |
|100|4 Zeichen der aktuellen Farbe |
|101|5 Zeichen der aktuellen Farbe |
|110|6 Zeichen der aktuellen Farbe |
|111|7 Zeichen der aktuellen Farbe |
Codiere das Testbild mit diesem Verfahren. Beurteile das Verfahren.
==== Material ====
{{simplefilelist>.:*}}