PhisigmaMathematik, Informatik, Naturwissenschaft, Technik und der ganze Rest

Mittlere Helligkeit eines Fotos mit Perl bestimmen

Für ein Projekt sollten mehrere Videokameras gleichzeitig aufnehmen. Um die Bilder später zeitlich zuordnen zu können, wurde am Anfang der Aufnahme ein Blitz ausgelöst. Nach der Zerlegung in Einzelbilder musste dann aus jeder Fotoreihe das hellste Bild ermittelt werden.

Der Lösungsansatz war die Verwendung von Perl zusammen mit der GD-Bibliothek. Diese erlaubt es Bilder zu bearbeiten und auch auszuwerten. Zusammen mit dem Methoden getPixel und rgb können die Farbwerte einzelner Bildpixel ausgelesen werden. Von den Farbwerten wird dann das arithmetische Mittel gebildet um, um einen Wert für die Helligkeit zu berechnen. Alle Helligkeitswerte werden zusammengezählt und dann durch die Anzahl der Bildpunkte geteilt.

#! /usr/bin/perl -w
use strict; # Variablen müssen definiert werden
use GD; # GD-Bibliothek benutzen für Bildbearbeitung

$| = 1; # Ausgabepuffergröße auf 1 setzen (Für Fortschrittsbalken)

# Erstes Argument hinter dem Skriptnamen ist der Name des Bildes
# GD-Bild-Objekt erzeugen
my $img = GD::Image->new( $ARGV[ 0 ] );

# Größe des Bildes bestimmen
my( $breit, $hoch ) = $img->getBounds;
print "Das Bild '$ARGV[ 0 ]' hat $breit x $hoch Pixel.\n\n";

# Mittlere Helligkeit bestimmen
my $summe = 0;
# Pixel für Pixel die Helligkeit bestimmen
# Als erstes die Zeilen
for (my $y = 1; $y <= $hoch; $y++) {
  #printf ("\b\b\b\b\b%5d", $y); # Fortschritt: Aktuelle Zeilenzahl
  print "." if (($y % 100) == 0); # Fortschritt: 1 Punkt für 100 Zeilen
  # Als nächstes die Spalten
  for (my $x = 1; $x <= $breit; $x++) {
    # Pixelfarbe auslesen und in die drei Farbcodes RGB zerlegen.
    my ($r, $g, $b) = $img->rgb( $img->getPixel( $x, $y ));
    # Helligkeit bestimmen (Mittelwert) und der Summe hinzufügen
    $summe += ($r + $g + $b)/3;
  }
}

# Mittelwert bestimmen (Summe durch Anzahl Bildpunkte)
my $mittelwert = $summe / ($breit * $hoch);

# Ausgabe des Mittelwerts
print "\n$mittelwert\n";

Das Skript wurde unter dem Namen helligkeit.pl abgespeichert. Das zu untersuchende Bild wird als Argument einfach hinter den Dateinamen geschrieben.

prof@phisigma:~/Perl/Bilder_laden> chmod 755 helligkeit.pl
prof@phisigma:~/Perl/Bilder_laden> ./helligkeit.pl specht.jpg
Das Bild 'specht.jpg' hat 2816 x 2112 Pixel.

.....................
146.472645770533
prof@phisigma:~/Perl/Bilder_laden> 

Die Helligkeit wird als Wert zwischen 0 und 255 ausgegeben. Hier ist für die Helligkeitsbestimmung einfach das arithmetische Mittel der Farbwerte für Rot, Grün und Blau ausgegeben worden. Natürlich kann man hier auch Wichtungen einbringen, die das natürliche Helligkeitsempfinden des menschlichen Auges berücksichtigt.

DokuWiki