Info2go

Hier gibt ́s Videos über spannende Experimente, Aufnahmen von wissenschaftlichen Phänomenen und Reportagen über nordbord-Projekte sowie interessante Unternehmen. Das Beste: Du kannst auch deine eigenen Filme drehen und hier mit anderen nordbordern teilen.

Bildkompression mit Lauflängenkodierung

Bilder werden nicht Pixel für Pixel gespeichert, aber wie dann?

Letzte Woche haben wir uns angeschaut, welchen Effekt eine Veränderung der Auflösung auf die Übertragungs- oder Speichergröße eines Bildes hat. Heute schauen wir uns mal an, wie man die in der letzten Woche berechneten Größen in der Praxis verkleinern könnte. Dafür arbeiten wir mit den drei Bildern aus der Artikelgrafik:

  • Bild 1 ist 5 × 5 Pixel groß und komplett rot
  • Bild 2 ist 5 × 5 Pixel groß und sieht aus wie ein Schachbrett mit grünen Feldern
  • Bild 3 ist 5 × 5 Pixel groß und hat nur einen blauen Pixel in der Mitte
  • Bild 4 ist 5 × 5 Pixel groß und sieht aus wie sehr bunte Clown-Kotze

In der naiven Form der Speicherung vom letzten Mal benötigt man also 5 × 5 = 25 Zahlen zwischen 0 und 16.777.216 um diese Bilder zu speichern. Aber offensichtlich kann man einige dieser Bilder auch besser beschreiben. Die ersten drei Bilder könnte ein Freund von euch aufgrund der textuellen Beschreibung wohl akkurat wiedergeben, ihr müsstet ihm nicht Pixel für Pixel das Bild aufsagen. Aber bei der Clown-Kotze wird euch das nicht gelingen.

Ein Mittelweg zwischen dieser intuitiv menschlichen Beschreibung und dem aufschreiben wirklich jeder einzelnen Zahl ist die so genannte "Lauflängenkodierung". Hier speichert man nicht jeden Pixel für sich, sondern gibt immer einen Farbwert und dann die Anzahl der Wiederholungen an. In dieser Form könnten die Bilder wie folgt beschrieben werden:

  • Bild 1 ist 5 × 5 Pixel groß und enthält 25 Mal In Folge einen roten Pixel.
    • Oder Mathematisch mit zwei Zahlen: (25,Rot)
  • Bild 2 ist 5 × 5 Pixel groß und hat erst 1 Mal ein grünes Pixel, dann 1 Mal ein weißes Pixel, dann 1 Mal ein grünes Pixel, ...
    • Oder mathematisch mit 50 Zahlen: (1, Grün), (1, Weiß), (1, Grün), (1, Weiß), (1, Grün), (1, Weiß), (1, Grün), (1, Weiß), (1, Grün), (1, Weiß), (1, Grün), (1, Weiß), (1, Grün), (1, Weiß), (1, Grün), (1, Weiß), (1, Grün), (1, Weiß), (1, Grün), (1, Weiß), (1, Grün), (1, Weiß), (1, Grün), (1, Weiß), (1, Grün)
  • Bild 3 ist 5 × 5 Pixel groß und hat erst 12 Mal ein weißes Pixel, dann 1 Mal ein grünes Pixel und dann 12 Mal ein weißes Pixel
    • Oder mathematisch mit 6 Zahlen: (12, Weiß), (1, Grün), (12, Weiß)

Die Lauflängenkodierung kann die Bilder 1 und 3 also mit deutlich weniger als 25 Zahlen speichern, für das Bild 2 verdoppelt sich die Anzahl der Zahlen aber. Und auch Bild 4 ließe sich nur mit 50 Zahlen statt 25 abspeichern. Das ist leider ein grundsätzliches Problem mit allen Kompressionsverfahren: Für einige Eingaben funktionieren sie sehr gut, für andere Eingaben sind sie aber sogar schlechter als die "normale" Speicherung.

Zurück