Schwarz-Weiß oder graue Grafik

Ja, es hatten damals viele gedacht, dass zu den 2 Pokemon Editionen Schwarz und Weiß wie in den Generationen zuvor etwas später eine dritte erscheinen würde. Und da lag die Spekulation auf den Namen “Grau” natürlich nahe.

Doch Nintendo bzw. Game Freak machte allen Strich durch die Rechnung und brachte sowohl Schwarz als auch Weiß in einer 2. Edition heraus und brach somit im Jahr 2012 ein Schema, welches sie seit 1998 konsequent verfolgt hatten.

Das Umrechnen von Farbpixel in graue oder im Extremfall in schwarz-weiße hat auch heute noch Relevanz, wenn es um das sparen von Speicherplatz geht, oder um Bereiche, wo Farben irrelevant sind (z.B. in bestimmten Szenarien der Bilderkennung).


Schon seit langer Zeit baute ich oft in Grafikfunktionen eine primitive Konvertierung von Farben auf Graustufen ein und tat das früher immer in der sehr einfachen Form:

1GRAY = (RED + GREEN + BLUE) / 3

Aber gerade bei Fotos wirkt dieser RGB-Durchschnittswert nicht gerade “schön”. Zum Glück zeigt einem aber gleich der Wikipedia-Artikel zum Thema Graustufen ein besseres Umrechnungsschema auf, welches dem menschlichen Auge besser “schmeckt”.

1GRAY = 0.21 * RED + 0.72 * GREEN + 0.07 * BLUE

Grün genießt die meiste Aufmerksamkeit und alle jene, die schon mal mit 16-bit Grafikformaten gearbeitet haben, konnten schon dort in der Doku nachlesen, dass unsere Augen grüne Farbtöne genauer unterscheiden können, als andere.
Deshalb werden die 16 Bits mit 5 Bits Rot, 5 Bits Blau aber 6 Bits Grün aufgefüllt.

Auf Integer-Arithmetik umgerechnet, heißt das dann:

1GRAY = (54 * RED + 182 * GREEN + 19 * BLUE) / 255

Ist schon ziemlich krass, dass wir um so viel besser grün sehen, als rot und vor allem blau.

Ebenso spannend ist das Umrechnen in reine schwarz-weiß Informationen. Denn so spart man den meisten Speicherplatz … verliert aber meistens immer jeden Zusammenhang für das Auge.

Ich durfte ja einige Zeit Profis über die Schulter blicken, die an bestimmten Strukturerkennungen in Bildern arbeiteten. Diese braucht harte Schwarz-Weiß übergänge für die Erkennung von Kanten und daher bestand die größte Herausforderung in einer möglichst guten Umrechnung des Bildes, damit bei allen Lichtverhältnissen Strukturen erkannt werden konnten.

Es ist schon bemerkenswert, was an Know-How für der Erstellung solcher Filter nötig ist.

Eine andere Form der Umrechnung, die für unsere Augen halbwegs gut aussieht, kennt eigentlich jeder. Denn jeder Schwarz-Weiß-Druck wie in klassischen Tageszeitungen nutzt es: Dithering

Hier werden die Bildpunkte nach einem Fehler-/Streumuster von einer größeren (Farb-)Palette in eine kleinere (Schwarz/Weiß-) Palette konvertiert.

Im GATE Projekt ist hierfür eine einfache Implementierung des Floyd-Steinberg Algorithmus implementiert, um Graustufenbilder nach Schwarz/Weiß zu konvertieren.

Hierzu ein Beispiel:

  • Originales Bild: C++ Logo
  • Graustufenbild: C++ Logo Gray
  • Floyd-Steinberg Schwarz-Weiß Dithering: C++ Logo BW