Wenn Sie die RAW-Dateien verarbeiten können, erhalten Sie ein bayer-Pixel-Array, das aus RGRGRG- und GBGBGB-Zeilen (oder möglicherweise RGBGRGBG-Zeilen) besteht. Sie können alle R- und B-Pixel ignorieren, die G-Pixel summieren und die Quadratwurzel ziehen ( da es doppelt so viele grüne Pixel gibt wie rote oder blaue) und dividiere durch die Hälfte der Anzahl von G Pixeln. Das sollte Ihnen den richtigen gewichteten Durchschnitt für "Grün" in Ihrem Foto geben. Sie könnten dann den Durchschnitt von Rot und Blau nehmen und Ihren grünen Prozentsatz aus allen drei Durchschnitten berechnen.
Um genauer zu sein, sollten Sie die richtige Gewichtung für rote, grüne und blaue Sensorpixel berücksichtigen, da CMOS-Sensoren für jede Lichtwellenlänge unterschiedliche Empfindlichkeiten aufweisen. Die Gewichte hängen im Allgemeinen vom Sensor ab. Das wäre der einfache Ansatz.
Um den Farbstich aufgrund der Tageszeit, verschiedener Arten von künstlichem Licht usw. zu berücksichtigen, ist es möglicherweise besser, jedes Foto in einem Tool wie Lightroom vorzuverarbeiten, um zuerst den Weißabgleich zu korrigieren, und dann die Berechnung für Standard-RGB-Pixelbilder durchzuführen. Im Gegensatz zur Verarbeitung von RAW-Sensordaten sollten Sie Ihre Berechnung auf der Grundlage der "grünen Reinheit" der Pixel gewichten, anstatt die grüne Komponente insgesamt zu mitteln. Je reiner ein Pixel grün ist, desto höher ist sein Gewicht im Vergleich zu den Pixeln, die roter oder blauer sind. Durch die Normalisierung des Weißabgleichs vor der Verarbeitung sollte die Notwendigkeit entfallen, eine ansonsten recht einfache Berechnung mit Tangenten zu erschweren, die zahlreiche Faktoren wie Wolkendecke, Tageszeit, Jahreszeit usw. berücksichtigen.
Möglicherweise möchten Sie weiterhin große Bereiche nicht einfallender Pixel berücksichtigen, z. B. den Himmel. Ich kann Ihnen in diesem Bereich nicht wirklich weiterhelfen, ohne genau zu wissen, was Sie erreichen wollen. Das Grün einer "Fotografie" insgesamt würde wahrscheinlich am besten durch Berechnen des Verhältnisses von Grün zu Rot und Blau erreicht, das "Himmel" -Pixel einschließen würde.
Für Ihr Verfahren sollte es selbstverständlich sein, dass, wenn Sie die Bilder mit den gleichen Kameraeinstellungen aufnehmen, diese mit dem gleichen Leuchtmittel (gleiche Intensität und Farbtemperatur), gemessen an einer gemeinsamen Grundlinie wie einer 18% -Graukarte, aufgenommen werden Ein langer Weg zur Normalisierung Ihrer Ergebnisse. Mit der RAW-Verarbeitungssoftware und einem einfachen Weißabgleich-Auswahlwerkzeug können etwaige Diskrepanzen mit Digital korrigiert werden. Stellen Sie also sicher, dass Sie mit RAW aufnehmen.
Um mehr Einblick in die Berechnung des "Grüns" Ihrer Fotos zu erhalten. Es gibt offensichtlich einfache Methoden, wie das Berechnen des Gewichts von Grün-Bayer-Pixeln gegenüber Blau und Rot oder das Berechnen der Grün-Reinheit in Bezug auf die Rot / Blau-Reinheit von RGB-Pixeln. Möglicherweise haben Sie mehr Glück, wenn Sie in einen geeigneteren Farbraum konvertieren, z. B. HSV ( Farbton / Sättigung / Wert , manchmal als HSB bezeichnet, wobei Wert durch Helligkeit ersetzt wird), und Ihren Grünanteil mithilfe einer Kurve im Farbtonbereich berechnen. (HINWEIS: HSL ist eine andere Art von Farbraum und wäre wahrscheinlich nicht ideal, um zu berechnen, wie viel "Grün" in einem Foto enthalten ist. Daher würde ich HSV verwenden. Weitere Informationen zu diesen Farbräumen finden Sie hier.) Reines Grün (unabhängig von Sättigung oder Wert) fällt in einem Farbtonwinkel von 120 ° ab und fällt von dort ab, wenn Sie sich in Richtung Rot (bei 0 °) oder in Richtung Blau (bei 240 °) bewegen. Zwischen 240 ° und 360 ° befindet sich unabhängig von Sättigung oder Wert kein Grün in einem Pixel.
Abb. 1: Farbtondiagramm - Grüne Reinheit in Farbtönen
Sie können die tatsächliche Gewichtungskurve an Ihre speziellen Bedürfnisse anpassen. Eine einfache Kurve könnte jedoch etwa so aussehen:
range = 240
period = range * 2 = 240 * 2 = 480
scale = 360/period = 0.75
pureGreen = sin(scale * 120)
Der Wert für pureGreen
sollte 1,0 sein . Eine Berechnungsformel greenness
könnte dann wie folgt lauten:
sin(scale * hue) } 0 > hue > 240
greenness =
0 } 240 <= hue <= 360 || hue == 0
Dies hue
ist der Grad der Farbe aus Ihrem HSV-Farbwert. Dies radius
ist die Hälfte, period
in der Grün zu einem gewissen Grad vorhanden ist. Das scale
passt die Sinuskurve an unsere Periode an, so dass sin(scale * hue)
Spitzenwerte (1,0) genau dort angezeigt werden, wo Sie reines Grün hätten (wobei die Intensität des Grüns ignoriert wird). Da der Betrag von greenness
nur in der ersten Hälfte unseres Zeitraums gültig ist, gilt die Grünberechnung nur, wenn der Farbton größer als 0 ° und kleiner als 240 ° ist, und seine Null für jeden anderen Farbton.
Sie können die Gewichtung anpassen, indem Sie den Zeitraum anpassen, den Bereich, in dem Sie green
möglicherweise angeben (dh statt 0 bis 240 können Sie 40 > hue > 200
stattdessen eine Einschränkung festlegen), und alle Elemente außerhalb dieses Bereichs so definieren, dass sie eine Graustufe von 0 aufweisen Es sollte beachtet werden, dass dies mathematisch genau ist, jedoch möglicherweise nicht vollständig wahrnehmungsgenau. Sie können die Formel natürlich anpassen, um den Punkt pure green
mehr in Richtung Gelb zu verschieben (was zu wahrnehmungsgenaueren Ergebnissen führen kann), die Amplitude der Kurve zu einem Plateau zu erhöhen und den Streifen reinen Grüns auf einen Farbtonbereich anstatt auf einen einzigen zu erweitern Farbtonwert usw. Für eine vollständige Wahrnehmungsgenauigkeit des Menschen ein komplexerer Algorithmus, der in CIE XYZ und CIE L a b * verarbeitet wird.Platz kann erforderlich sein. (HINWEIS: Die Komplexität der Arbeit im XYZ- und Lab-Bereich steigt dramatisch über das hier Beschriebene hinaus.)
Um die Graustufe eines Fotos zu berechnen, können Sie die Graustufe jedes Pixels berechnen und dann einen Durchschnitt erstellen. Sie könnten dann den Algorithmus von dort nehmen und ihn für Ihre spezifischen Bedürfnisse anpassen.
Bei EasyRGB finden Sie Algorithmen für die Farbkonvertierung , z. B. die für RGB in HSV:
var_R = ( R / 255 ) // Red percentage
var_G = ( G / 255 ) // Green percentage
var_B = ( B / 255 ) // Blue percentage
var_Min = min( var_R, var_G, var_B ) //Min. value of RGB
var_Max = max( var_R, var_G, var_B ) //Max. value of RGB
del_Max = var_Max - var_Min //Delta RGB value
V = var_Max //Value (or Brightness)
if ( del_Max == 0 ) //This is a gray, no chroma...
{
H = 0 //Hue (0 - 1.0 means 0° - 360°)
S = 0 //Saturation
}
else //Chromatic data...
{
S = del_Max / var_Max
del_R = ( ( ( var_Max - var_R ) / 6 ) + ( del_Max / 2 ) ) / del_Max
del_G = ( ( ( var_Max - var_G ) / 6 ) + ( del_Max / 2 ) ) / del_Max
del_B = ( ( ( var_Max - var_B ) / 6 ) + ( del_Max / 2 ) ) / del_Max
if ( var_R == var_Max ) H = del_B - del_G
else if ( var_G == var_Max ) H = ( 1 / 3 ) + del_R - del_B
else if ( var_B == var_Max ) H = ( 2 / 3 ) + del_G - del_R
if ( H < 0 ) H += 1
if ( H > 1 ) H -= 1
}