Information und Informatiksysteme
Datenkompression: verlustfrei und verlustbehaftet
Wie man Dateien kleiner macht, ohne etwas zu verlieren, und wann es sich lohnt, absichtlich etwas wegzuwerfen.
Benötigte Grundlagen
Dieses Vorwissen brauchst du für das Kapitel. Schau kurz nach, wenn dir etwas davon nicht mehr präsent ist, sonst leg direkt los.
Einführung
Ein unkomprimiertes Foto aus einer Handykamera belegt rund 36 Megabyte. Auf deinem Handy liegen vielleicht 3000 Fotos, und der Speicher ist trotzdem nicht voll. Irgendjemand muss also getrickst haben.
Es gibt zwei völlig verschiedene Tricks. Der eine schreibt dieselbe nur geschickter auf und verliert dabei nichts. Der andere wirft absichtlich etwas weg, von dem man annimmt, dass es niemandem auffällt. Beide sind richtig, aber nur für jeweils ihren Zweck, und wer sie verwechselt, zerstört .
Das kannst du nach diesem Kapitel
verlustfreie und verlustbehaftete Kompression unterscheiden und je zwei Einsatzgebiete nennen.
die Lauflängencodierung anwenden und ihre Kompressionsrate berechnen.
erklären, warum häufige Zeichen kurze und seltene Zeichen lange bekommen sollten.
begründen, warum kein Verfahren jede verkleinern kann.
für einen gegebenen Zweck begründet zwischen beiden Arten wählen.
Die Grundidee: Wiederholungen kosten Platz
Sieh dir diese Zeichenfolge an:
Das sind 21 Zeichen. Man kann dieselbe Aussage kürzer aufschreiben, indem man notiert, was wiederholt wird und wie oft:
Das sind 7 Zeichen. Aus 21 wurden 7, also ein Drittel. Und der entscheidende Punkt: Aus lässt sich die ursprüngliche Folge exakt wiederherstellen. Es ist nichts verloren gegangen, nur die Schreibweise war vorher verschwenderisch.
Dieses Verfahren heißt Lauflängencodierung. Es ist der einfachste Fall einer verlustfreien Kompression.
Lauflängencodierung, die sich lohnt
Zähle die Kästchen oben ab: acht A, drei B, zehn C, zusammen 21. Unten stehen genau dieselben Angaben, nur anders notiert: , , , zusammen 7 Zeichen. Wichtig ist, was nicht passiert ist: Es ging nichts verloren. Aus der unteren Zeile lässt sich die obere Zeichen für Zeichen wiederherstellen. Verkürzt wurde nur die Schreibweise, nicht der Inhalt und genau das meint verlustfrei.
Wann Lauflängencodierung nützt und wann sie schadet
Rechnen wir gegen. Nimm die Folge , ebenfalls kurz. Lauflängencodiert ergibt das:
Aus 9 Zeichen wurden 18. Das Verfahren hat die verdoppelt.
Daraus folgt eine Regel, die für jedes Kompressionsverfahren gilt: Ein Verfahren nutzt genau die Struktur aus, für die es gebaut wurde. Lauflängencodierung braucht lange Wiederholungen. Bei Bildern mit großen einfarbigen Flächen, etwa Zeichnungen oder Bildschirmfotos, funktioniert sie gut; bei einem Foto mit feinen Farbverläufen fast gar nicht.
Dieselbe Codierung, doppelte Größe
Hier ist kein Lauf länger als ein Zeichen, also schreibt die Vorschrift vor jedes Zeichen eine , und jedes Zeichen wird zu zweien. Aus 9 werden 18. Das ist kein Fehler im Verfahren, sondern seine Bauart: Lauflängencodierung nutzt lange Wiederholungen aus, und wo es keine gibt, kostet ihre Buchführung Platz. Halte beide Bilder nebeneinander, dieselbe Vorschrift, einmal auf ein Drittel verkleinert, einmal verdoppelt. Was ein Verfahren taugt, hängt also nie nur am Verfahren, sondern immer am Zusammenspiel mit den .
Der zweite verlustfreie Gedanke: ungleiche Codes
Im ASCII-Code ist jedes Zeichen gleich lang, nämlich ein . In einem deutschen Text kommt das aber viel häufiger vor als das . Beiden gleich viel Platz zu geben ist Verschwendung.
Also gibt man häufigen Zeichen kurze und seltenen lange. Das ist derselbe Gedanke wie beim Morsealphabet: Das häufige E ist ein einzelner Punkt, das seltene Q ist vier Zeichen lang.
Damit das eindeutig bleibt, muss eine Bedingung erfüllt sein: Kein Code darf der Anfang eines anderen sein. Wäre der Code für A und der für B, wüsste der bei nicht, ob dort ein B steht oder ein A gefolgt vom Anfang eines weiteren Zeichens. Verfahren wie die Huffman-Codierung bauen genau solche Codes systematisch auf; sie lernst du in der Qualifikationsphase im Einzelnen kennen.
Warum kein Verfahren alles verkleinern kann
Diese Aussage klingt zunächst überraschend, lässt sich aber mit reinem Abzählen begründen.
Wie viele verschiedene mit 3 gibt es? . Und wie viele mit weniger als 3 Bit, also mit 1 oder 2 Bit? .
Ein Kompressionsverfahren müsste jede der 8 Dateien auf eine der 6 kürzeren abbilden. Das geht nicht ohne Doppelbelegung: Mindestens zwei verschiedene Ausgangsdateien bekämen dasselbe Ergebnis. Beim Entpacken wüsste man dann nicht, welche der beiden gemeint war, und das Verfahren wäre nicht mehr verlustfrei.
Also gilt: Jedes verlustfreie Verfahren verkleinert manche Dateien und vergrößert andere. Es lohnt sich nur, weil die Dateien, die wir tatsächlich speichern, viel Struktur haben. Zufällige Bitfolgen lassen sich nicht komprimieren, und eine bereits komprimierte Datei ein zweites Mal zu packen bringt so gut wie nichts.
Der andere Weg: absichtlich etwas weglassen
Bei Fotos, Musik und Videos ist die Sachlage anders. Dort muss das Ergebnis nicht für Bit stimmen, sondern nur für Auge und Ohr gleich wirken.
Das nutzt die verlustbehaftete Kompression aus:
- Bei Bildern werden feine Farbunterschiede zusammengefasst, weil das Auge Helligkeitsunterschiede viel genauer wahrnimmt als Farbunterschiede.
- Bei Musik werden Töne weggelassen, die von lauteren Tönen ohnehin überdeckt werden.
Damit sind Verkleinerungen auf ein Zehntel und weniger möglich, und trotzdem sieht oder hört man kaum einen Unterschied.
Der Preis ist unumkehrbar: Das Weggelassene ist weg. Wer eine verlustbehaftet komprimierte erneut speichert, verliert erneut. Nach mehreren Runden werden Kanten fleckig und Klänge blechern. Deshalb bearbeitet man Fotos in einem verlustfreien Format und speichert erst am Ende einmal verlustbehaftet.
Verlustbehaftet: feine Unterschiede fallen weg
Oben acht verschiedene Blautöne, unten nur noch vier: Je zwei benachbarte Töne wurden zu einem zusammengefasst. Für acht Möglichkeiten braucht man 3 (), für vier nur 2 Bit, ein Drittel weniger Speicher je Bildpunkt. Der Preis steht ebenfalls im Bild: Der erste und der zweite Kasten sehen jetzt gleich aus. Wer aus der unteren Reihe die obere zurückgewinnen wollte, könnte nicht mehr entscheiden, welcher der beiden Töne ursprünglich dort stand. Das Weggelassene ist weg: deshalb heißt es verlustbehaftet.
Die Entscheidungsregel
Sie ist kurz und lässt sich immer anwenden:
Muss jedes einzelne erhalten bleiben? Dann verlustfrei. Genügt es, dass es gleich wirkt? Dann darf es verlustbehaftet sein.
Bei einem Programm, einem Text, einer Tabelle oder einer Messreihe ist ein einziges falsches Bit ein Fehler. Bei einem Urlaubsfoto ist ein minimal anderer Blauton keiner.
Die Entscheidungsregel in vier Zeilen
Die zweite Zeile ist die, die im Alltag am meisten kostet. Wer ein Foto bearbeitet und jedes Mal verlustbehaftet speichert, verliert bei jedem Durchgang erneut, nach mehreren Runden werden Kanten fleckig und Klänge blechern. Deshalb die praktische Regel: während der Arbeit verlustfrei speichern, verlustbehaftet erst einmal ganz am Ende. Und die Entscheidung unten passt immer, weil sie nicht nach dem Dateityp fragt, sondern nach dem Zweck: Bei einer Messreihe ist ein einziges falsches ein Fehler, bei einem Urlaubsfoto ist ein minimal anderer Blauton keiner.
Lauflängencodierung mit Kompressionsrate
Codiere die Bildzeile (W = weiß, S = schwarz) und gib an, auf welchen Anteil sie schrumpft.
- 1
Zuerst sehen, worauf das Verfahren zielt. Die Lauflängencodierung ersetzt eine Folge gleicher Zeichen durch Anzahl plus Zeichen, sie lebt also von langen Läufen. Ein Blick auf die Zeile zeigt, dass es hier nur drei davon gibt, und das ist die günstige Ausgangslage. Zählen: 10 mal W, dann 4 mal S, dann 6 mal W. Zusammen Zeichen.
- 2
: . Das sind 7 Zeichen. Bemerkenswert ist, dass die Länge nicht von der Länge der Läufe abhängt, sondern nur von ihrer Anzahl: Drei Läufe kosten immer sechs bis sieben Zeichen, ob sie nun 20 oder 2000 Zeichen abdecken.
- 3
Anteil: , also 35 Prozent der ursprünglichen Länge. Man teilt nachher durch vorher, weil ein Anteil immer angibt, wie viel vom Ausgangswert übrig bleibt, die umgekehrte Division ergäbe die Kompressionsrate und beantwortet eine andere Frage.
- 4
Man kann auch angeben, wie viel eingespart wurde: .
- 5
Wichtig zur Ehrlichkeit der Rechnung: Hier werden Zeichen gezählt, nicht . In einer echten müsste man festlegen, wie die Anzahlen gespeichert werden, denn eine Zahl über 9 braucht mehr Platz als eine einstellige.
, also 7 statt 20 Zeichen und damit 35 Prozent der Länge.
Wann Lauflängencodierung schadet
Codiere und beurteile das Ergebnis.
- 1
Jeder Lauf hat die Länge 1: 1A, 1B, 1A, 1B, 1A, 1B, 1A, 1B.
- 2
: , also 16 Zeichen statt 8.
- 3
Das Ergebnis ist doppelt so lang wie das Original. Das Verfahren hat hier geschadet.
- 4
Der Grund ist nicht ein Fehler im Verfahren, sondern die fehlende Struktur: Lauflängencodierung setzt lange Wiederholungen voraus, und die gibt es hier nicht.
- 5
Praktische Folge: Ein Packprogramm prüft vor dem Speichern, ob das Ergebnis überhaupt kürzer ist, und legt sonst die Originaldaten ab.
16 statt 8 Zeichen. Ein Verfahren hilft nur bei der Struktur, für die es gebaut ist.
Typischer Fehler
„Ich packe die einfach zweimal, dann wird sie noch kleiner.“
Nach dem ersten Durchgang sind genau die Regelmäßigkeiten verschwunden, die ein Verfahren ausnutzt: Wiederholungen sind zu Anzahlen zusammengefasst, häufige Zeichen haben schon kurze . Die komprimierte Datei sieht einer zufälligen Bitfolge sehr ähnlich, und Zufall lässt sich nicht komprimieren.
Der zweite Durchgang findet also fast nichts mehr und muss trotzdem seine eigenen Verwaltungsangaben mitspeichern, etwa die Code-Tabelle. Deshalb wird die Datei häufig sogar ein wenig größer.
Das passt genau zum Abzählargument von oben: Wenn ein Verfahren manche Dateien verkleinert, muss es andere vergrößern. Bereits gepackte Dateien gehören zur zweiten Gruppe. Aus demselben Grund bringt es kaum etwas, ein Foto in einem verlustbehafteten Format noch einmal zu packen.
Übung 1
leichtEntscheide begründet, ob verlustfrei oder verlustbehaftet komprimiert werden darf:
a) das Zeugnis als Textdatei b) ein Urlaubsfoto für eine Bildergalerie im Netz c) ein Computerprogramm d) ein Podcast zum Anhören e) eine Messreihe aus dem Physikunterricht
Tipp anzeigen
Frage bei jedem: Was passiert, wenn ein einzelnes anders ist?
Lösung anzeigen
a) verlustfrei: Ein verändertes Zeichen kann eine Note oder einen Namen verfälschen. b) verlustbehaftet möglich: Es genügt, dass es gleich aussieht. c) verlustfrei: Ein einziges falsches Bit macht das Programm unbrauchbar. d) verlustbehaftet möglich: Es genügt, dass es gleich klingt. e) verlustfrei: Messwerte sind , keine Sinneseindrücke. Ein gerundeter Wert ist ein anderer Wert.
Detaillierte Schritterklärung anzeigen
Hier wird jeder Schritt einzeln erklärt, vor allem, warum er gemacht wird.
✦ Empfohlen: Standard – Die normale Erklärungstiefe passt zum Einstieg.
- 1
Die Entscheidungsfrage festlegen: Was kostet ein verändertes Bit?
Nicht der Dateityp entscheidet, sondern die Folge einer Abweichung: Wird die von einem Menschen wahrgenommen, oder wird sie ausgewertet? Sinneseindrücke dürfen näherungsweise gespeichert werden, Daten nicht.
- 2
a), c) und e): Was exakt bleiben muss
Beim Zeugnis kann ein verändertes Zeichen eine Note oder einen Namen verfälschen. Bei einem Programm macht ein einziges falsches Bit den Ablauf unbrauchbar. Messwerte sind Daten, keine Sinneseindrücke: Ein gerundeter Wert ist ein anderer Wert. Alle drei: verlustfrei.
- 3
b) und d): Wo eine Näherung genügt
Beim Urlaubsfoto in einer Netzgalerie genügt es, dass es gleich aussieht; beim Podcast, dass er gleich klingt. Hier entscheidet ein Sinnesorgan, und verlustbehaftete Verfahren sind zulässig.
- 4
Gegenprobe: Ist der Weg umkehrbar?
Eine zweite, unabhängige Prüfung: Verlustfrei heißt, dass sich das Original Bit für Bit zurückgewinnen lässt. Testet man das an jedem Fall, kommt man zu denselben Antworten, ein gutes Zeichen, dass die erste Überlegung nicht bloß geraten war.
Übung 2
mittelEine Bildzeile lautet .
a) Codiere sie mit Lauflängencodierung. b) Berechne, auf welchen Anteil der ursprünglichen Länge sie schrumpft. c) Erfinde eine gleich lange Zeile, bei der das Verfahren nichts einspart, und begründe.
Tipp anzeigen
Zu c): Wie kurz dürfen die Läufe höchstens sein, damit sich das Verfahren noch lohnt?
Lösung anzeigen
a) 5 mal R, 12 mal G, 3 mal B, also .
b) Vorher 20 Zeichen, nachher 7 Zeichen: , also 35 Prozent; eingespart sind 65 Prozent.
c) Zum Beispiel mit ebenfalls 20 Zeichen. Jeder Lauf hat die Länge 1, also wird aus jedem Zeichen ein Paar aus Anzahl und Zeichen: 40 Zeichen statt 20. Allgemein lohnt sich das Verfahren erst ab einer Lauflänge von 3, denn ein Lauf der Länge 2 wird zu zwei Zeichen und ist damit gleich lang.
Detaillierte Schritterklärung anzeigen
Hier wird jeder Schritt einzeln erklärt, vor allem, warum er gemacht wird.
✦ Empfohlen: Standard – Die normale Erklärungstiefe passt zum Einstieg.
- 1
Teil a): Läufe sauber abzählen
Ein Lauf ist eine ununterbrochene Folge desselben Zeichens. Man geht die Zeile einmal von links nach rechts durch und notiert bei jedem Wechsel, wie viele gleiche Zeichen zuletzt kamen.
\underbrace{RRRRR}{5};\underbrace{GGGGGGGGGGGG}{12};\underbrace{BBB}_{3}
Zwischenergebnis
Zähle die Gesamtlänge zur Kontrolle nach: . Stimmt die Summe nicht, hast du dich verzählt.
- 2
Teil b): Anteil statt Ersparnis
Gefragt ist, auf welchen Anteil die Zeile schrumpft. Das ist die neue Länge geteilt durch die alte. Die Ersparnis wäre der Rest zu 100 Prozent, und beides wird oft verwechselt.
\frac{7}{20} = 0{,}35 = 35,%
Zwischenergebnis
35 Prozent der ursprünglichen Länge, also 65 Prozent gespart.
- 3
Teil c): Den ungünstigsten Fall konstruieren
Gesucht ist eine Zeile, bei der das Verfahren nichts bringt. Weil jeder Lauf mindestens zwei Zeichen im Ergebnis erzeugt, nämlich Anzahl und Zeichen, muss man die Läufe so kurz wie möglich machen: Länge 1.
Zwischenergebnis
Bei ständigem Wechsel verdoppelt sich die Länge.
Übung 3
schwera) Begründe mit einem Abzählargument, warum kein verlustfreies Verfahren jede verkleinern kann. Benutze dafür alle Dateien mit genau 4 . b) Warum bringt es fast nichts, eine bereits gepackte Datei ein zweites Mal zu packen? c) Ein Schüler öffnet ein verlustbehaftet gespeichertes Foto, dreht es um 90 Grad und speichert es erneut im selben Format. Er wiederholt das viermal. Was passiert und warum? d) Nenne eine Situation, in der man ein Foto trotzdem verlustfrei speichern sollte.
Tipp anzeigen
Zu a): Zähle, wie viele Dateien mit weniger als 4 Bit es überhaupt gibt.
Lösung anzeigen
a) Mit genau 4 Bit gibt es verschiedene Dateien. Kürzer als 4 Bit sind Dateien mit 1, 2 oder 3 Bit, davon gibt es . Ein Verfahren müsste 16 verschiedene Eingaben auf höchstens 14 verschiedene Ausgaben abbilden. Nach dem Schubfachprinzip erhalten dann mindestens zwei verschiedene Eingaben dieselbe Ausgabe. Beim Entpacken ließe sich nicht mehr entscheiden, welche gemeint war, und das Verfahren wäre nicht verlustfrei. Also verkleinert kein verlustfreies Verfahren alle Dateien.
b) Weil der erste Durchgang genau die Regelmäßigkeiten entfernt hat, die ein Verfahren braucht. Das Ergebnis ähnelt einer zufälligen Bitfolge, in der es nichts mehr auszunutzen gibt. Zusätzlich muss der zweite Durchgang eigene Verwaltungsangaben speichern, sodass die Datei sogar leicht wachsen kann.
c) Bei jedem Speichern wird erneut verlustbehaftet komprimiert, und jedes Mal wird zusätzlich etwas weggeworfen. Die Verluste summieren sich, weil der zweite Durchgang auf dem bereits verschlechterten Bild arbeitet und nicht auf dem Original. Nach vier Runden zeigen sich klotzige Blöcke und flimmernde Kanten, besonders an scharfen Übergängen wie Schrift.
d) Zum Beispiel bei einem Foto, das noch bearbeitet werden soll, bei einer Aufnahme als Beweismittel, bei medizinischen oder wissenschaftlichen Bildern und bei Bildern mit Schrift oder scharfen Kanten wie Bildschirmfotos, weil dort die typischen Artefakte besonders auffallen.
Detaillierte Schritterklärung anzeigen
Hier wird jeder Schritt einzeln erklärt, vor allem, warum er gemacht wird.
✦ Empfohlen: Standard – Die normale Erklärungstiefe passt zum Einstieg.
- 1
a) Die beiden Mengen abzählen, die verglichen werden sollen
Mit genau 4 Bit gibt es verschiedene Dateien. Kürzer als 4 Bit sind Dateien mit 1, 2 oder 3 Bit, davon gibt es . Ein Verfahren, das jede 4-Bit-Datei verkleinert, müsste also 16 Eingaben auf höchstens 14 Ausgaben abbilden.
gegen
Zwischenergebnis
16 Eingaben, höchstens 14 mögliche Ausgaben.
- 2
a) Das Schubfachprinzip anwenden und den Widerspruch ziehen
Verteilt man 16 Dinge auf 14 Fächer, liegen in mindestens einem Fach zwei. Also erhalten mindestens zwei verschiedene Eingaben dieselbe Ausgabe. Beim Entpacken ließe sich dann nicht mehr entscheiden, welche gemeint war, das Verfahren wäre nicht verlustfrei. Widerspruch.
- 3
b) Warum zweimaliges Packen nichts bringt
Weil der erste Durchgang genau die Regelmäßigkeiten entfernt hat, die ein Verfahren braucht. Das Ergebnis ähnelt einer zufälligen Bitfolge, in der es nichts mehr auszunutzen gibt. Zusätzlich speichert der zweite Durchgang eigene Verwaltungsangaben, sodass die Datei sogar leicht wachsen kann.
- 4
c) Warum sich Verluste summieren
Bei jedem Speichern wird erneut verlustbehaftet komprimiert, und jedes Mal wird zusätzlich etwas weggeworfen. Entscheidend: Der zweite Durchgang arbeitet auf dem bereits verschlechterten Bild, nicht auf dem Original. Nach vier Runden zeigen sich klotzige Blöcke und flimmernde Kanten, besonders an scharfen Übergängen wie Schrift.
- 5
d) Wann ein Foto verlustfrei gehört
Zum Beispiel: wenn es noch bearbeitet werden soll (sonst summieren sich die Verluste nach c)), als Beweismittel, bei medizinischen oder wissenschaftlichen Aufnahmen, und bei Bildern mit Schrift oder scharfen Kanten wie Bildschirmfotos, weil dort die typischen Artefakte besonders auffallen.
Zusammenfassung
Verlustfreie Kompression schreibt dieselben kürzer auf, sodass sich das Original für Bit wiederherstellen lässt; die Lauflängencodierung ersetzt dafür Wiederholungen durch Anzahl und Zeichen, und ungleich lange geben häufigen Zeichen weniger Platz. Kein Code darf dabei der Anfang eines anderen sein. Weil es weniger kurze als lange gibt, kann kein verlustfreies Verfahren jede Datei verkleinern; es lebt davon, dass echte Dateien Struktur haben. Verlustbehaftete Kompression wirft dagegen gezielt weg, was Auge und Ohr ohnehin kaum wahrnehmen, und erreicht dadurch viel kleinere Dateien, allerdings unumkehrbar und bei jedem erneuten Speichern erneut. Die Entscheidung ist immer dieselbe Frage: Muss jedes Bit erhalten bleiben, oder genügt gleiche Wirkung?


