Farbstich
Ist ein Bild zu grün, rot oder blau, stimmt etwas mit der Farbenbalance nicht. Ein weißes Objekt in der fotografierten Szene sollte auch im Foto knallweiß und ohne Farbeinschlag zu sehen sein. Analoges gilt für graue oder pechschwarze Objekte. Wurde der Weißabgleich der Kamera aber nicht justiert, wie es für Profis selbstverständlich ist, sind öfter mal unnatürliche Farbanteile zu sehen. Solche Fehler lassen sich nach einem in [2] beschriebenen Verfahren auch noch hinterher im digitalen Bild korrigieren. Die Möglichkeiten sind beim JPG-Format, das viele preiswerte Kameras per Default verwenden, zwar beschränkt, aber etwas lässt sich meistens doch noch rausholen.
Zunächst ergibt sich das Problem, dass nicht jedes Bild rein weiße, schwarze oder graue Elemente enthält. Es gibt aber im Fotofachhandel genormte Plastikkarten, die der Fotograf einfach ins Bild hält, eine Testaufnahme macht und die Messwerte dann für alle folgenden Aufnahmen der gleichen Szene verwendet. Ändern sich allerdings die Lichtverhältnisse ist eine neue Kontrollaufnahme mit den Karten fällig.
In Abbildung 3 habe ich mit Gimps Color-Picker-Tool den Farbwert einer Stelle der grauen Karte gemessen. Das Ergebnis war: Rot 122, Grün 127 und Blau 123. Wäre die Aufnahme perfekt, müssten alle drei Farbkanäle denselben Wert haben. Ähnliches gilt für die weiße und die schwarze Karte.

|
Abbildung 3: Ein Satz weißer, grauer und schwarzer Kärtchen erleichtert das Finden der Kontrollpunkte für den Farbabgleich.
|
Die Datei »colorcast.yml« (Abbildung 4) zeigt die mit Gimp eingefangenen Messwerte im Yaml-Format. Das Skript liest sie aus der Datei ein, deren Namen es in der Kommandozeile findet; »picfix -c colorcast.yml file.jpg«. So kann es anschließend beliebig viele Bilder derselben Szene korrigieren. Dafür muss es alle im Bild verwendeten Farben so transformieren, dass die Farbanteile in den eigentlich farblosen Bildelementen verschwinden. Dazu dient eine Übergangsfunktion, deren Graph sich an den bekannten Messpunkten entlangschlängelt und für alle übrigen Werte Spline-ähnliche Interpolationen bereithält.

|
Abbildung 4: Die Datei »colorcast.yml« speichert die gemessenen Farbwerte für die weiße, die graue und die schwarze Karte.
|
In Gimp erlaubt das der »Curves«-Dialog aus dem Menü »Tools | Color Tools«. In seiner Auswahlbox stellt der Retuscheur die zu korrigierende Farbe ein und verbeult dann die anfangs gerade Linie so, dass sie die Kontrollwerte berührt.
Das Verfahren ist recht simpel. Angenommen die graue Karte liefert diese Werte: Rot 122, Grün 127 und Blau 123. Dann besteht die Korrektur einfach darin, sowohl den roten als auch den blauen Kanal auf den Wert 127 für Grün einzustellen. Dadurch ergibt sich das gewünschte farblose Grau. Hierzu öffnet man den roten Kanal im »Curves«-Dialog und zieht die sich geschmeidig anpassende Kurve am Punkt »122/122« (auf der Geraden) zum Punkt »122/127« (Beule).
Gimp zeigt während des Verschiebens links oben die aktuellen Koordinaten an. Im blauen Kanal ist entsprechend der Punkt »123/123« auf den Punkt »123/127« zu verschieben. So entstehen im roten und blauen Kanal leicht verbeulte Kurven wie in Abbildung 5 gezeigt.
Wenn der Fotograf das Verfahren auch für die schwarze und die weiße Karte wiederholt, befinden sich sowohl im roten als auch im blauen Kanal jeweils drei Kontrollpunkte. Das Ganze lässt sich natürlich auch skripten. Listing 2 zeigt, dass der Konstruktor zwei Werte erwartet, »yml_file« (die Yaml-Datei mit den Messwerten) und den Gimp-Layer, (»drawable«).

|
Abbildung 5: Mit Hilfe des »Curves«-Dialogs lässt sich ein Farbstich korrigieren. Das Beispiel passt dafür die Kurve des roten Kanals mit drei Kontrollpunkten wie im Text beschrieben an.
|
01 ###########################################
02 package ColorCast;
03 # Mike Schilli, 2008 (m@perlmeister.com)
04 ###########################################
05 use strict;
06 use warnings;
07
08 use YAML qw(LoadFile DumpFile);
09 use Gimp qw(:auto);
10 use Log::Log4perl qw(:easy);
11
12 my %channels = (
13 red => HISTOGRAM_RED,
14 blue => HISTOGRAM_BLUE,
15 green => HISTOGRAM_GREEN,
16 );
17
18 ###########################################
19 sub new {
20 ###########################################
21 my($class, %options) = @_;
22
23 my $self = {
24 yml_file => undef,
25 drawable => undef,
26 ctrls => undef,
27 %options,
28 };
29
30 bless $self, $class;
31 }
32
33 ###########################################
34 sub save {
35 ###########################################
36 my($self) = @_;
37
38 DumpFile $self->{yml_file},
39 $self->{ctrls};
40 }
41
42 ###########################################
43 sub load {
44 ###########################################
45 my($self) = @_;
46
47 $self->{ctrls} =
48 LoadFile $self->{yml_file};
49 }
50
51 ###########################################
52 sub adjust_to {
53 ###########################################
54 my($self, $ref_channel) = @_;
55
56 DEBUG "Adjusting to $ref_channel";
57
58 for my $channel (keys %channels) {
59
60 next if $ref_channel eq $channel;
61
62 my $ctrls = $self->{ctrls};
63
64 my @points = (0, 0, 255, 255);
65
66 for my $ctrl (keys %$ctrls) {
67 push @points,
68 $ctrls->{$ctrl}->{$channel},
69 $ctrls->{$ctrl}->{$ref_channel};
70 }
71
72 gimp_curves_spline(
73 $self->{drawable},
74 $channels{ $channel },
75 @points);
76 }
77 }
78
79 1;
|
Die Methode »load()« liest dann die Yaml-Werte ein, die anschließend in einem Hash von Hashes liegen. Ab Zeile 52 erwartet dann »adjust_to()« einen Kanal (etwa »green«), auf den es die Werte der restlichen Kanäle anpasst.
Dies geschieht mit der Gimp-Funktion »gimp_curves_spline()«, die als Parameter den aktiven Layer des zu modifizierenden Bildes, den zu modifizierenden Kanal und eine Reihe von Kontrollpunkten erwartet. Zusätzlich zu den Messpunkten kommen in »adjust_to()« immer auch »(0,0)« und »(255,255)« hinzu, damit die Kurve links unten anfängt und rechts oben aufhört.
Die Option »-c« des Hauptprogramms gibt eine eventuell vorher erstellte Yaml-Datei an und die Option »-a« (adjust) nimmt einen Kanalnamen an, auf den die beiden anderen Kanäle auszurichten sind.
Trickreich installieren
Eigentlich sollte ein einfaches »sudo apt-get install libgimp-perl« die ganze Perl-Gimp-Enchilada installieren, aber leider flippt zumindest Ubuntu 7.10 dabei aus. Synaptic treibt es noch bunter und will gar Gimp und sogar den Ubuntu-Desktop entfernen. Schuld scheint ein kaputtes Gimp-Paket zu sein.
Als Ausweg erlauben es die Kommandos in Listing 3, die »libgimp-perl«-Sourcen herunterzuladen, zu kompilieren, eine Version mit einer um 1 höheren Nummer zu erzeugen und zu installieren. Ganz sauber ist die Lösung nicht, das nächste Gimp-Update wird wahrscheinlich dazwischenfunken. Alternativ käme ein Ubuntu-Ugrade auf 8.04 in Frage, dort gibt es das Problem nicht mehr.

|
Abbildung 6: Unter dem voreingestellten Loglevel loggt das Skript sehr detailliert mit, was es gerade treibt.
|
01 sudo apt-get install devscripts
02 sudo apt-get source libgimp-perl
03 sudo apt-get build-dep libgimp-perl
04 cd libgimp-perl-2.0.dfsg+2.2pre1.dfsg
05 sudo dch --newversion=2.0.dfsg+2.2pre1.dfsg-3 -- Version Bump
06 sudo dpkg-buildpackage -uc -us
07 cd ..
08 sudo dpkg --install --force-overwrite libgimp-perl_2.0.dfsg+2.2pre1.dfsg-3_i386.deb
|
Das Modul »ColorCast.pm« sollte nach der Installation an einem Ort landen, an dem »picfix« es findet, alternativ lässt sich in »picfix« mit »usr lib Verzeichnis;« auf das Installationsverzeichnis von »ColorCast.pm« hinweisen. Die zusätzlich verwendeten Perl-Module Log::Log4perl und Yaml liegen auf dem CPAN und lassen sich mit einer CPAN-Shell oder mit »apt-get install libyaml-perl« und »liblog-log4perl-perl« installieren. Zeile 13 in Listing 1 stellt mit dem Logging-Level »$DEBUG« detailliertes Logging ein (Abbildung 6). Wen diese Geschwätzigkeit nervt, der setzt es auf »$ERROR« hoch.
| Whitepaper |
|
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele (Folge 2)
Der zweite Teil des Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele White Papers beleuchtet anhand weiterer ausgewählter Case Studies die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.
Download PDF (Registrierung erforderlich)
|
|
Usage Landscape Enterprise Open Source Data Integration
Die Nachfrage nach Datenintegrationslösungen für Unternehmen ist zunehmend gestiegen und vor allem das Interesse an Open Source Technologien wird immer größer. Doch wie und von wem werden Open Source Datenintegrationslösungen genutzt und welches Nutzungsverhalten lässt sich daraus ableiten? Das vorliegende White Paper präsentiert die Erfahrungswerte von über 1000 Open Source Nutzern und liefert fundierte Antworten auf diese Fragen.
Download PDF (Registrierung erforderlich)
|
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links"
nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedrucken Fassung entsprechen.
|