Ich frage mich, wie ich programmgesteuert (dh mit einer Programmiersprache und nicht mit einem Editor) von einer Farbtemperatur in eine andere konvertieren kann.
Wenn ich zum Beispiel die Annahme (und es ist eine große Annahme), dass ein Weißabgleichsalgorithmus ein verarbeitetes Bild (z. B. JPEG usw.) aufnehmen und die Gesamttemperatur in einer Szene bei 6500 platzieren könnte, wie würden Sie algorithmisch "cool" cool " " oder die Szene auf eine bestimmte Temperatur "erwärmen"?
Offensichtlich ist dies eine übliche Operation in einem Bildbearbeitungsprogramm, aber diese arbeiten normalerweise mit RAW-Bildern, auf die keine Verarbeitung angewendet wurde (Farbraummanipulation oder auf andere Weise). Im Fall von RAW-Dateien enthalten vielleicht die einzelnen RAW-Dateien genügend Informationen (im Dateikopf) bezüglich der Farbkalibrierung des Kamerasensors, um die spezifische Temperaturtransformation deterministischer zu machen?
Übrigens habe ich diese Frage im regulären Stack Overflow gestellt und es wurde vorgeschlagen, dass ich hier eine bessere Antwort bekomme.
Sie müssten eine Farbraum-Weißpunktkonvertierung im L*a*b*-Raum durchführen. Die meisten Farbmodelle, mit denen wir normalerweise arbeiten, hauptsächlich RGB, aber oft CMYK, sind so konzipiert, dass sie die Einschränkungen und Anforderungen physischer Hardware unterstützen. Diese Modelle stellen den "wahrnehmungsbezogenen" Farbraum jedoch normalerweise nicht sehr gut dar, und der Weißpunkt ist definitiv ein wahrnehmungsbezogener Aspekt der Farbe.
Wann immer Sie Wahrnehmungsanpassungen auf ein Bild anwenden müssen, wie z. B. Farbtemperatur oder Farbtonverschiebungen, tun Sie dies am besten durch Konvertieren von RGB in XYZ, und während der Konvertierung können Sie „Referenz-Weißpunkte“ für den Quell- und Zielfarbraum anwenden . Die Konvertierung von XYZ zu Lab bringt Sie dann in einen Farbraum, in dem Sie den Weißpunkt und alle Farben per Wahrnehmung so neu zuordnen können, dass sie die Kontinuität beibehalten.
Farbraumkonvertierungen, chromatische Anpassungen, Weißpunktanpassungen usw. sind mathematisch ziemlich komplex. Je wahrnehmungsgenauer Sie vorgehen möchten, desto komplexer wird die Mathematik normalerweise. Eine hervorragende Informationsquelle für Farbraumkonvertierungen finden Sie auf der Website von Bruce Lindbloom . Einige zusätzliche nützliche Informationen finden Sie auf Wikipedia . Möglicherweise finden Sie diese Informationen zu CIEs D-Serie-Beleuchtungsstörungen nützlich, da sie weiße Punktspezifische Informationen, Berechnungen und Konstanten enthält.
Der Weißabgleich ist eine sehr einfache Manipulation der Bildverarbeitung. Es ist nur eine Verstärkung pro Kanal im linearen RGB-Raum. JPG-Dateien sind für den Weißabgleich suboptimal, da sie normalerweise sowohl eine Tonwertkurve als auch eine inverse elektrooptische Monitor-Transformationsfunktion (EOTF) haben, die die lineare Beziehung zu den Luminanzwerten der Szene aufhebt. Aus diesem Grund wird normalerweise mit RAW-Daten begonnen. Wenn Sie entweder über die RAW-Daten oder durch Invertieren der oben beschriebenen Nichtlinearität zu linearen RGB-Werten gelangen, können Sie den Weißabgleich durchführen, indem Sie Folgendes anwenden.
R_out = R_in * R_gain
G_out = G_in
B_out = B_in * B_gain
Beachten Sie, dass es üblich ist, keine Verstärkung auf den grünen Kanal anzuwenden, da er sehr grob mit der Luminanz zusammenhängt und eine Änderung aller drei Kanäle auch die Gesamtbelichtung verschieben würde.
In den RAW-Dateien gibt es normalerweise ein Metadatenfeld, das eine Reihe von Weißabgleichsverstärkungen enthält, die von der Kamera mithilfe eines integrierten Algorithmus berechnet werden. Diese Algorithmen basieren normalerweise auf einer Art Farbkonstanz-Beleuchtungsart-Schätzalgorithmus.
Sobald die Verstärkungen angewendet werden, sollten eine primäre Kodiermatrix, die Zieltonwiedergabekurve und der inverse EOTF angewendet werden.
Ich hatte ein großartiges Bild von einer Frau, das ich unter seltsamer, komplexer Beleuchtung (Natriumdampf- und Quecksilberdampflicht) aufgenommen hatte. Tolles Lächeln, perfekte Fokussierung, exzellentes Bild, abgesehen von einer sehr, sehr farblichen Abweichung.
Ich habe eine Stunde lang in Adobe Camera Raw mit Temp/Tint herumgespielt, ohne gutes Ergebnis. Ich habe ein Programm geschrieben, um die Sidecar-XMP-Datei zu hacken, die Temperatur zu variieren und dann einen symbolischen Link zum ursprünglichen NEF mit dem Namen parallel zur XMP-Datei zu erstellen.
Dies ist NICHT annähernd so ausgefallen oder technisch korrekt wie die obige Antwort, sondern wirft stattdessen eine enorme Menge an CPU auf das Problem und liefert einige (möglicherweise) interessante Ergebnisse.
Dadurch werden eine Reihe von .NEF-Dateiverknüpfungen und für jede eine echte .XMP-Sidecar-Datei erstellt. Kopieren Sie einfach eine echte nef/xmp-Datei-Kombination zum Klonen in das Testverzeichnis und legen Sie die min/max-Temp und dif_temp (Kelvin zwischen Klonen) fest. Eine weitere Schleife kann eingefügt werden, um den Farbtonwert bei einem konstanten Kelvin zu variieren, aber die erzeugten Dateien werden mit der Anzahl der Farbtöne multipliziert.
Führen Sie Photoshop file -> scripts -> image_processor aus, verweisen Sie auf dieses Verzeichnis und es wird ein echtes tif/jpg/whatever für jeden Link bei der angegebenen Farbtemperatur erstellt.
Dieser Code ist ein schmutziger, hässlicher Hack, und wenn Sie ihn ausführen, wird Ihr Prozessor wahrscheinlich schmelzen, während Kugelblitze und Killerbienen in die unmittelbare Umgebung gelockt werden. Keine Garantie versteht sich von selbst.
Erfordert Perl (sicherlich täglich verwendet) und mklink (kann vorhanden sein).
sub color_temp_experiment() {
$nef = '6s-2014.1004-237695.acl.nef';
$xmp = '6s-2014.1004-237695.acl.xmp'; # crs:Temperature="6000"
$min_temp = 7800;
$max_temp = 9000;
$dif_temp = 200; # Difference in temp per loop.
$xd = `cat $xmp`; # Xmp Data;
($base = $nef) =~ s/\.nef//; # Basename common to both nef and xmp.
$ii = -1;
for($temp = $min_temp; $temp <= $max_temp; $temp += $dif_temp) {
$ii++;
$link = $base . ".$temp" . 'k.nef'; # Abuse Kelvins with lower case.
$xfn = $base . ".$temp" . 'k.xmp'; # Abuse Kelvins with lower case.
if(-f $link) {
print("Found FILE (s/b sym link!) $link. Next!\n"); # This prints!
next;
}
$cmd = "mklink $link $nef";
printf("$ii) Cmd = $cmd\n");
$sto = `$cmd`;
unless(-f $link) {
print("ERROR! Sym link $link not found!\n StdOut=<<$sto>>\n\n");
exit;
}
($xt = $xd) =~ s/crs:Temperature="\d+/crs:Temperature="$temp/ms;
open(O, ">$xfn");
print(O "$xt");
close O;
}
}
Jari Keinänen
Trikan
Jari Keinänen
-color-matrix
Option könnte Ihnen den Einstieg erleichtern; siehe auch: fmwconcepts.com/imagemagick/whitebalance/index.phpagf1997