Hintergrund
Meine digitalen Bilder können in ein Computerprogramm wie Matlab oder R als amxnx 3-Matrix eingelesen werden, wobei mxn die Anzahl der von jedem der drei Sensoren (rot, grün und blau) beobachteten Pixel ist und jede Zelle in der Matrix eine Nummer hat von 1-255, die die vom Sensor beobachtete Helligkeit widerspiegelt.
Ich möchte diese Informationen verwenden, um ein objektives Maß für den Grünanteil in einem Foto zu erhalten, da ich versuchen möchte, den Grünanteil mit dem Pflanzenwachstum in Beziehung zu setzen (stellen Sie sich ein Bild pro Tag eines Maisfeldes vor).
Frühere Arbeiten in dieser Richtung hatten einige Erfolge bei der Berechnung eines Index von Grün entweder als
- grün% = grün / (blau + rot) oder
- grüne Abweichung = 2 * grün - rot - blau
von Webcam-Bildern für jedes der mxn Pixel, aber es gab keine Kontrolle über die Blende oder einfallende Strahlung (Sonnenwinkel).
Beachten Sie, dass ich kein 'absolutes' Maß für die Grünheit suche. Die Größe und Verteilung der Zahl spielt keine Rolle - es muss nur ein konsistentes relatives Maß für die Grünheit angegeben werden.
Frage
Kann ich meine Spiegelreflexkamera verwenden, um ein aussagekräftiges Maß für Grün zu erhalten, das mit einem oder allen der folgenden Faktoren nicht übereinstimmt:
- Wolkendecke?
- Uhrzeit?
- Tag des Jahres? (Dies ist die einzige Voraussetzung)
- Anteil Himmel / Boden im Hintergrund?
Aktueller Status
Ich habe die folgenden Ideen entwickelt, bin mir aber nicht sicher, welche notwendig wären oder welche sich nicht auf das Verhältnis von Grün / (Rot + Blau) auswirken würden.
- Machen Sie ein Bild von einem weißen Plastikstück und verwenden Sie dieses Bild, um die anderen Werte zu normalisieren
- Blende fixieren
- Verschlusszeit festlegen
- Stellen Sie den Weißabgleich mit einem weißen Blatt Papier ein
- Nehmen Sie alle Fotos aus demselben Winkel auf
- Machen Sie alle Fotos um die Mittagszeit
quelle
Antworten:
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:
Der Wert für
pureGreen
sollte 1,0 sein . Eine Berechnungsformelgreenness
könnte dann wie folgt lauten:Dies
hue
ist der Grad der Farbe aus Ihrem HSV-Farbwert. Diesradius
ist die Hälfte,period
in der Grün zu einem gewissen Grad vorhanden ist. Dasscale
passt die Sinuskurve an unsere Periode an, so dasssin(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 vongreenness
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 Sie40 > 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 Punktpure 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:
quelle
GLOBE-Projekt ?
Verwenden Sie kein weißes Blatt Papier. Diese enthalten optische Aufheller, die UV-Strahlung in blaues Licht umwandeln und eine falsche Belichtung verursachen. Aus diesem Grund gibt es kommerzielle Graycards (wie von jrista vorgeschlagen).
Das Aufnehmen aller Fotos von genau demselben Ort ist mit Sicherheit die richtige Vorgehensweise. In Bezug auf Verschlusszeit und Blende sollte dies keine Rolle spielen. Die Verschlusszeit ändert die Farbe überhaupt nicht, die Blende verwischt das Bild, aber ich denke, dieser Effekt verschwindet trotzdem, wenn Sie alle Pixelwerte zusammenfassen. Ich würde lieber versuchen, eine konstante Belichtung zu erhalten.
In Bezug auf den Unterschied zwischen bewölkt und nicht bewölkt möchten Sie möglicherweise nur einige Tests durchführen. Wenn sich der wahre Grünanteil nicht schnell ändert (dh von heute bis morgen), sollte dies auch bei der Betrachtung der Bilder nicht der Fall sein. Vielleicht kann ein empirischer Ansatz hier Abhilfe schaffen (z. B. wenn Sie feststellen, dass der Grünanteil bei Bewölkung immer um 10% höher ist, können Sie dies ausgleichen).
quelle
Ich würde vorschlagen, 'RAW' aufzunehmen und unter Verwendung des automatischen Weißabgleichs der Kamera, aber ohne Gammakorrektur (dh Farbausgleich, aber lineare Ausgabe) in 16-Bit-TIFF umzuwandeln. 16-Bit ermöglicht eine bessere Berechnung von Verhältnissen und Indizes in tiefen Schatten und Lichtern (dh ohne Übersteuerung). DCRAW kann dies, aber Ihre Kamera wird mit einer eigenen Software geliefert, die wahrscheinlich einfacher zu bedienen ist.
Wenn Sie Indizes möchten, ist RGB der einzig nützliche Farbraum. Sie haben bereits den "Green Divergence" -Index (auch als "Excess Green Index" bezeichnet) erwähnt - dieser und der eng damit verbundene Green Leaf-Algorithmus funktionieren ziemlich gut. Wenn Sie eine farbbasierte Pixelklassifizierung durchführen möchten (dh Gemüse im Vergleich zu Nicht-Gemüse), würde ich eher den L a b * -Farbraum als HSV / HSI betrachten. Es gibt tatsächlich eine ziemlich gute Demo auf der Mathworks-Website, die L a veranschaulichtb * Analyse. Eine Klassifizierung könnte möglicherweise mit einer Spektralanalyse kombiniert werden, um die Fragen zu beantworten: a) wie viele grüne Pixel gibt es und b) wie grün sind sie? Dies ist möglicherweise nützlicher als nur ein Grünindex, der auch von der spektralen Hintergrundqualität (Boden, Abfall usw.) beeinflusst wird, die sich ebenfalls mit der Zeit ändern kann. Sie haben eine Maisernte erwähnt, also nehme ich an, dass Sie die Kamera nach unten und nicht nach oben richten?
Wenn Sie zwei Kameras hätten, könnten Sie nach unten gerichtete Bilder (Messung des Grüns) mit nach oben gerichteten Bildern kombinieren, die die Vegetationsbedeckung messen. Aufwärtsbilder wären für die Spektralanalyse nicht geeignet, und die Pixelklassifizierung würde auf dem Kontrast zwischen Himmel und Nichthimmel basieren, wobei wahrscheinlich nur der blaue Kanal des RGB-Bildes verwendet wird.
Wenn Sie eine (tägliche?) Zeitreihe sammeln, können Sie die Bilder nach unten in Bilder mit bewölktem Tag und Bilder mit sonnigem Tag unterteilen und auf Abweichungen prüfen. Sie können während der Rohverarbeitung mit der Farbbalance spielen, um etwaige Abweichungen zu korrigieren, oder einfach eine Serie neu skalieren, um sie an die andere anzupassen (halten Sie es einfach), vorausgesetzt, sonnige und bewölkte Tage liegen dazwischen.
Habe Spaß.
quelle