Tobias Klepp: Algorithmus zur Kontrast- und Helligkeitserhöhung

Hallo,

ich bin auf der Suche nach einem Algorithmus zur Kontrast- und Helligkeitserhöhung. Ich habe keine Informatik studiert und bin etwas auf dem trockenen, das ich nicht weiß, wo ich eine gut verständliche Anleitung bzw. Beschreibung finden kann. ich möchte mit PHP und der GD2lib Bilder online bearbeiten. Kann mir jemand einen Tipp geben? das wäre super.

Gruß Tobias

  1. hi!

    ich bin auf der Suche nach einem Algorithmus zur Kontrast- und
    Helligkeitserhöhung. Ich habe keine Informatik studiert und bin etwas auf
    dem trockenen, das ich nicht weiß, wo ich eine gut verständliche
    Anleitung bzw. Beschreibung finden kann. ich möchte mit PHP und der
    GD2lib Bilder online bearbeiten. Kann mir jemand einen Tipp geben? das
    wäre super.

    Hm, du hast nicht geschrieben, ob du was über die Grundlagen wissen willst
    und darüber, wie diese Operationen auf Bildern prinzipiell funktionieren,
    oder ob du einfach eine Anleitung für die GD2Lib suchst.

    Falls du dich für die Grundlagen solcher recht einfachen Bildoperationen
    interessierst, gibt es auf folgender Seite einen ganz guten Überblick über
    verschiedene Bearbeitungs- und Filtermethoden zur Bildverbesserung -- mit
    angerissenen Erklärungen der Algorithmen. Verfahren für die zwei von dir
    gesuchten Operationen sind dort auch beschrieben:
      http://www.imse.med.tu-muenchen.de/mi/theormed/HI-8/A04Verbe.htm

    Bei der Frage, dieses Wissen auf die GD2Lib anzuwenden, muss ich leider
    passen... ;)

    bye, Frank!

    --
    Never argue with an idiot. He will lower you to his level and then
    beat you with experience.
    1. Hi Frank,

      vielen Dank für deinen Beitrag! Ich möchte meine Anwendung genauer beschreiben. Ich habe deine doppelte for-Schleife in PHP, die jeden Bildpunkt des Bildes durchläuft und daran Änderungen vornimmt.

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

      In dieser for-Schleife stehen mir die einzelnen Farbwerte des Bildpunktes zur Verfügung in $rot, $gruen, $blau. Jetzt suche ich eine Möglichkeit, die Farbe so zu verändern, dass ich

      a) die Helligkeit ändern kann und
      b) den Kontrast ändern kann.

      Die Ausführungen von diesen Leuten (http://www.imse.med.tu-muenchen.de/mi/theormed/HI-8/A04Verbe.htm) sind, glaube ich, nicht ganz meine Liga. Ich kapier' es nicht so wirklich, dass ich es für meinen Fall umsetzen kann.

      Gruß Tobias

      1. 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

      2. Hallo,

        brauchbare Vorgehensweisen findest du unter http://www.codeproject.com/cs/media/csharpgraphicfilters11.asp.
        Das ist jetzt zwar kein PHP aber von der Sache her für dich interessant.
        Wenn du bei codeproject mal nach "Image Processing" suchst,
        dann wirst du so einiges zu Bildmanipulationen finden.

        Viel Spaß
        bernd

      3. Super,

        vielen Dank für die Beiträge. Es haut hin. Ich habe jetzt eine klasse Helligkeits- und Kontraständerung.

        Vielen Dank noch einmal!

        Gruß Tobias