Benutzer-Werkzeuge

Webseiten-Werkzeuge


farbbild_-_graubild_-_binaerbild

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
farbbild_-_graubild_-_binaerbild [2024/01/20 09:07] – [Umwandlung von Farbbildern im RGB-System in Graubilder] torsten.roehlfarbbild_-_graubild_-_binaerbild [2024/01/20 09:26] (aktuell) – [Beispiel] torsten.roehl
Zeile 12: Zeile 12:
 <color #00a2e8>b = Blauanteil (0.255)</color>\\ <color #00a2e8>b = Blauanteil (0.255)</color>\\
 **y** ist der Grauwert der auch als **Luminanz** bezeichnet wird. **y** ist der Grauwert der auch als **Luminanz** bezeichnet wird.
 +
 +==== Beispiel ====
 +
 +Das folgende Programm lädt ein Bild und berechnet die Luminanz (den Grauwert) an der Stelle x=5, y=4.<Code Java linenums:1>
 +import java.awt.Color;
 + 
 +import de.informatics4kids.Picture;
 +import de.informatics4kids.PictureViewer;
 + 
 +public class Luminanz {
 + 
 +    public static void main(String[] args) {
 +         
 +      Picture pic = new Picture();
 +      pic.open("/home/student/katze.jpg");
 +          // Farbwert holen
 +      Color alt = pic.getColor(4, 3);
 +      int y = (int) (0.3 * alt.getRed() + 0.59 * alt.getGreen() + 0.11 * alt
 +                .getBlue());
 + 
 +      // neuen Farbwert erstellen und setzen
 +      Color grau = new Color(y, y, y);
 +      pic.setColor(4,3, grau);
 +      System.out.println("Luminanz=" + y );
 +        
 +    }
 +}
 +</Code>
 +
 +|{{ :inf:java:krebsnebel_color.png?300 |}}|{{ :inf:java:krebsnebel_grey.png?300 |}} |
 +|<WRAP>**Das Orginal:**\\
 +Der Krebsnebel zeigt die Überreste einer Supernova (Sternenexplosion). Sie wurde im Jahre 1054 von Chinesen beobachtet.</WRAP> |<WRAP>D**as Graubild:**\\ Hier wurde für jeden Pixel anhand der oben gegebenen Vorschrift die Luminanz berechnet  und in einem neuen Bild abgespeichert.</WRAP>|
 +
 +Die Werte für 30% Rot-, 59% Grün- und 11% Blauanteil, die auch von Gimp verwendet werden um Graubilder zu erzeugen, haben ihre Begründung letztendlich in der Psychophysik (z.B. Weber-Fechner-Gesetz).  Beispielsweise nimmt das menschliche Auge grün heller wahr als rot und rot wiederum heller als blau. 
 +Die Ursprünge der Formel liegen u.a. in der Fernsehtechnik, denn bei der Darstellung von Farb- und Schwarz/Weiß-Bildern wurde sie früh benötigt.
 +
 ===== Umwandlung von Graubildern in Binärbilder ===== ===== Umwandlung von Graubildern in Binärbilder =====
 +
 +== Der Schwellenwert c ==
 +
 +Ein Graubild enthält noch viele verschiedene Grauanteile. Wenn man lediglich zwei verschiedene Farbwerte (schwarz/weiß) verwendet, bekommt man ein Binärbild. Dabei ist erst einmal nicht klar definiert, ab wann ein Grauwert nun schwarz oder weiß werden soll. Oft muss ein Schwellenwert c experimentell gefunden werden, um gute Ergebnisse zu erhalten.
 +
 +  * Alle Grauwerte unterhalb des Schwellenwerts werden schwarz.
 +  * Diejenigen Grauwerte, die größer oder gleich dem Schwellenwert sind, werden weiß.
 +
 +Das folgende Programm lädt ein Graubild und berechnet den Farbwert (schwarz oder weiß) für einen Pixel an der Stelle x=5, y=4.d.h. die Bildkoordinaten sind (4,3).
 +==== Beispiel ====
 +
 +<Code Java linenums:1>
 +import java.awt.Color;
 +import de.informatics4kids.Picture;
 + 
 +public class Main {
 + 
 +    public static void main(String[] args) {
 + 
 + 
 +        // testbild.jpg öffnen
 +        Picture pic = new Picture();
 +        pic.open("/home/student/Bilder/testbild.jpg");
 +        // Farbe beziehen
 +        Color color = pic.getColor(4,3);
 +        // Grauwert berechnen - alle Farbwerte sind gleich!
 +        int g = color.getRed();
 +        // BInärwert berechnen
 +        int binarvalue;
 +        if (g <= 150)
 +            binarvalue = 0;
 +        else
 +            binarvalue = 255;
 + 
 +        // Binärwert in neue Farbe einfügen
 +        Color binarcolor = new Color(binarvalue, binarvalue, binarvalue);
 +    }
 +</Code>
 +
 +|{{:inf:java:krebsnebel_grey.png?200|}} |{{:inf:java:krebsnebel_binar2.png?200|}}|{{ :inf:java:krebsnebel_binar.png?200|}}|
 +|Das Orginal Graubild.|Binärbild mit Schwellenwert  c=50. Der Schwellenwert ist nicht ideal, da viele Details im Bildinneren verlorengehen.|Binärbild mit Schwellenwert c=180|
 ===== Ein wenig 'brighter'... ===== ===== Ein wenig 'brighter'... =====
-=====  ===== 
  
 +In der Java-Bibliothek existieren zwei Methoden - **brighter()** und **darker()** - mit deren Hilfe ein Farbwert heller beziehungsweise dunkler gesetzt werden kann.
 +
 +  * Color brighter() liefert einen helleren Farbton zurück.
 +  * Color darker() liefert einen dunkleren Farbton zurück.
 +
 +
 +Da für diese Methoden der Quellcode eingesehen werden kann, können wir unmittelbar nachvollziehen, was im Detail geschieht.
 +
 +
 +|<Code Java linenums:1>
 +public Color brighter() {
 +    return new Color(Math.min((int)(getRed()  *(1/FACTOR)), 255),
 +                     Math.min((int)(getGreen()*(1/FACTOR)), 255),
 +                     Math.min((int)(getBlue() *(1/FACTOR)), 255));
 +}
 +public Color darker() {
 +    return new Color(Math.max((int)(getRed()  *FACTOR), 0),
 +                     Math.max((int)(getGreen()*FACTOR), 0),
 +                     Math.max((int)(getBlue() *FACTOR), 0));
 +}
 +</Code>|
 +|Codebeispiel aus der Java-Bibliothek. Die Konstante FACTOR hat dabei den Wert 0.7.|
 +
 +==== Beispiel ====
 +
 +Das folgende Programm lädt ein Bild und  setzt den Bildpunkt an der Stelle x=5, y=4 ein wenig "brighter".
  
 +<Code Java linenums:1>
 +import java.awt.Color;
 + 
 +import de.informatics4kids.Picture;
 +import de.informatics4kids.PictureViewer;
 + 
 +public class Main {
 + 
 +    public static void main(String[] args) {
 +         
 +      Picture pic = new Picture();
 +      pic.open("/home/student/katze.jpg");      
 +      Color alt = pic.getColor(4, 3);
 +     Color neu = alt.brighter();    
 +      pic.setColor(4,3, neu);
 +   
 +        
 +    }
 +}
 +</Code>
  
 +Durchläuft man alle Bildpunkte (Pixel) kann man auf diese Weise Bilder //aufhellen// b.z.w. //verdunkeln//.
 +| {{ :inf:java:hund_normal.png?200 |}}|{{ :inf:java:hund_brighter.png?200 |}} | {{ :inf:java:hund_darker.png?200 |}}|
 +|Orginal Bild|Die Java-Methode ''brighter'' angewandt auf das Bild.|Die Java-Methode ''darker'' angewandt auf das Bild.|
  
 +<WRAP center round info 100%>
 +Wer tiefer einsteigen will, dem sei das Buch //Java Insel (Kapitel 'Farben')// empfohlen. Dort wird auch erklärt, wie man echte Helligkeitsänderungen erzeugt.
 +</WRAP>
  
  
farbbild_-_graubild_-_binaerbild.1705741620.txt.gz · Zuletzt geändert: 2024/01/20 09:07 von torsten.roehl