Informatik

Farbe und Kanäle

Bis jetzt war das Foto grau. Ein Farbbild braucht drei Zahlen je Bildpunkt – für Rot, Grün und Blau. Statt eines Gitters hast du also drei, alle gleich groß, und dieselbe Stelle steht in allen dreien für denselben Bildpunkt.

Die drei Kanäle einzeln

Drei Gitter derselben Größe beschreiben ein Farbbild:

r[zeile][spalte] der Rotanteil dieses Bildpunkts, 0 bis 255
g[zeile][spalte] der Grünanteil
b[zeile][spalte] der Blauanteil

Alle drei auf 0 ergibt Schwarz, alle drei auf 255 ergibt Weiß. Sind alle drei gleich, ist der Bildpunkt grau – genau das war das Bild der letzten beiden Seiten.

Das leere Gitter nichts zeigt nebenbei etwas Nützliches: new int[72][96] ist nicht leer, sondern mit Nullen gefüllt. Java legt jedes frische Zahlenfeld so an.

Aufgabe 1: Graustufen selbst rechnen

Bisher hat foto.graustufen() die Umrechnung für dich erledigt. Jetzt machst du sie selbst.

a) Die naheliegende Vorschrift ist der Durchschnitt der drei Kanäle. Schreibe grauEinfach und vergleiche das Ergebnis mit foto.graustufen().

b) Das Auge sieht Grün heller als Blau. Deshalb rechnet man üblicherweise

grau = (rot * 30 + grün * 59 + blau * 11) / 100

Schreibe grauGewichtet und stelle beide nebeneinander. Wo siehst du einen Unterschied – und warum gerade dort?

Tipp: Drei Gitter, eine Schleife

Du brauchst keine drei Schleifenpaare. Zeile und Spalte gelten für alle drei Gitter gleichzeitig:

neu[zeile][spalte] = (pRot[zeile][spalte] + pGruen[zeile][spalte]
                      + pBlau[zeile][spalte]) / 3;
Eine mögliche Lösung. Erfrage das Passwort bei deiner Lehrkraft oder sieh auf der Seite Lösungspasswörter nach.

Aufgabe 2: Kanäle vertauschen und Sepia

a) Zeige das Foto einmal mit vertauschten Kanälen: Rot an die Stelle von Blau, Blau an die Stelle von Rot. Wie viele Zeilen Code brauchst du dafür? (Die Antwort ist überraschend kurz.)

b) Sepia ist der Braunton alter Fotografien. Man erhält ihn, indem man zuerst Graustufen berechnet und die drei Kanäle dann unterschiedlich stark wieder anhebt – Rot am stärksten, Blau am schwächsten. Probiere

rot   = grau * 110 / 100
grün  = grau *  95 / 100
blau  = grau *  75 / 100

Vergiss das Begrenzen nach oben nicht.

c) Baue dir daraus einen Regler: Schreibe farbstich(int[][] pGrau, int pRot, int pGruen, int pBlau), dem du die drei Prozentzahlen übergibst. Welche Zahlen ergeben einen kalten, blaustichigen Look?

Tipp zu a)

Du musst kein einziges Gitter umrechnen. Sieh dir an, in welcher Reihenfolge leinwand.zeige seine drei Parameter erwartet.

Eine mögliche Lösung. Erfrage das Passwort bei deiner Lehrkraft oder sieh auf der Seite Lösungspasswörter nach.

Zum Weiterdenken

Ein Grünfilter für Videokonferenzen soll alle Bildpunkte finden, die „grün genug" sind, um durch einen Hintergrund ersetzt zu werden.

a) Eine erste Idee wäre g[zeile][spalte] > 150. Warum reicht das nicht? Denk an eine hell beleuchtete weiße Wand.

b) Formuliere eine bessere Bedingung, die Grün nicht absolut, sondern im Verhältnis zu Rot und Blau prüft.

c) Setze sie um: Zeige das Foto und färbe jeden Bildpunkt, der die Bedingung erfüllt, kräftig magenta ein. Am Foto mit der LED wirst du kaum etwas finden – genau das ist ein brauchbares Ergebnis.

Farbe und Kanäle

Teilbare URL erstellen

Abschnitte auswählen