Der Martin: Algorithmus zur Kontrast- und Helligkeitserhöhung

Beitrag lesen

Hallo Tobias,

jetzt wird deine Absicht etwas klarer, danke sehr.

for($i = 0; $i < $bildhoehe; $i++) {
  for($j = 0; $j < $bildbreite; $j++) {
    $rot
    $gruen
    $blau
  }
}

Okay, wenn du die drie RGB-Farbkomponenten hast, ist zumindest ein Verändern der Helligkeit trivial. Dazu würde ich nur jede der drei Komponenten mit demselben Faktor h multiplizieren. Dabei würde h>1 eine Aufhellung, h<1 eine Abdunklung bewirken. Du musst nur darauf achten, dass dabei keine der drei Komponenten über 100% hinausgeht (bei 8bit-Komponenten wäre das 255), bzw. müsstest dir überlegen, was du in diesem Fall tust. Begrenzt du den Wertebereich einfach, sinngemäß also
   if ($rot>255)
    { $rot = 255;
    }
dann würde sich außer der Helligkeit auch noch der Farbton ändern, weil das Verhältnis der drei Farbkomponenten zueinander nicht mehr dasselbe ist.

Mit dem Kontrast ist es schon schwieriger. Für eine Erhöhung des Kontrasts würde ich zunächst eine mittlere Helligkeit über das gesamte Bild berechnen, und dann jeden einzelnen Punkt abdunkeln bzw. aufhellen, je nachdem ob seine Helligkeit größer oder oder kleiner als der zuvor errechnete Mittelwert ist. Der Faktor, um den ich die Helligkeit ändere, ergibt sich dabei aus der Helligkeit des gerade bearbeiteten Punktes im Verhältnis zum Mittelwert des Bildes.

Ich bin sicher, dass so mancher Grafik-Profi anders an die Aufgabe herangehen würde, und bestimmt gibt es dazu auch schon fertige Musterlösungen. Das war zunächst mal mein Denkansatz, vielleicht hilft er dir ja auch schon weiter.

Schönen Sonntag noch,

Martin