Bei der Konvertierung von RGB in Graustufen sollten bestimmte Gewichte für die Kanäle R, G und B angewendet werden. Diese Gewichte sind: 0,2989, 0,5870, 0,1140.
Es wird gesagt, dass der Grund dafür die unterschiedliche menschliche Wahrnehmung / Sensibilität gegenüber diesen drei Farben ist. Manchmal wird auch gesagt, dass dies die Werte sind, die zur Berechnung des NTSC-Signals verwendet werden.
Allerdings habe ich im Web keine gute Referenz dafür gefunden. Woher stammen diese Werte?
Antworten:
Die spezifischen Nummern in der Frage stammen von CCIR 601 (siehe den Wikipedia-Link unten).
Wenn Sie RGB -> Graustufen mit leicht unterschiedlichen Zahlen / Methoden konvertieren, werden Sie auf einem normalen Computerbildschirm unter normalen Lichtbedingungen überhaupt keinen großen Unterschied feststellen - probieren Sie es aus.
Hier sind einige weitere Links zur Farbe im Allgemeinen:
Wikipedia Luma
Bruce Lindblooms herausragende Website
Kapitel 4 über Farbe in dem Buch von Colin Ware, "Information Visualization", isbn 1-55860-819-2; Dieser lange Link zu Ware in books.google.com funktioniert möglicherweise nicht
cambridgeincolor : Hervorragende, gut geschriebene "Tutorials zum Erfassen, Interpretieren und Verarbeiten digitaler Fotos mit einem visuell orientierten Ansatz, bei dem Konzept über Verfahren steht"
Sollten Sie auf "lineares" oder "nichtlineares" RGB stoßen, ist hier ein Teil einer alten Notiz für mich. Wiederholen Sie, in der Praxis werden Sie keinen großen Unterschied sehen.
RGB -> ^ gamma -> Y -> L *
In der Farbwissenschaft werden die üblichen RGB-Werte wie in HTML-RGB (10%, 20%, 30%) als "nichtlinear" oder Gammakorrigiert bezeichnet . "Lineare" Werte sind definiert als
Dabei ist Gamma für viele PCs 2,2. Die üblichen RGB werden manchmal als R 'G' B '(R' = Rlin ^ (1 / Gamma)) geschrieben (puristischer Zungenklick), aber hier werde ich das 'fallen lassen.
Die Helligkeit auf einer CRT-Anzeige ist proportional zu RGBlin = RGB ^ gamma, sodass 50% Grau auf einer CRT ziemlich dunkel sind: 0,5 ^ 2,2 = 22% der maximalen Helligkeit. (LCD-Anzeigen sind komplexer; außerdem kompensieren einige Grafikkarten Gamma.)
Um das
L*
von RGB aufgerufene Maß für die Helligkeit zu erhalten , teilen Sie zuerst RGB durch 255 und berechnen SieDies ist
Y
im XYZ-Farbraum; es ist ein Maß für die Farbleuchtdichte. (Die realen Formeln sind nicht genau x ^ gamma, sondern nahe; bleiben Sie für einen ersten Durchgang bei x ^ gamma.)Schließlich,
quelle
Ich fand heraus, dass diese Veröffentlichung in einer Antwort auf eine frühere ähnliche Frage referenziert wurde. Es ist sehr hilfreich:
http://cadik.posvete.cz/color_to_gray_evaluation/
Es zeigt "Tonnen" verschiedener Methoden, um Graustufenbilder mit unterschiedlichen Ergebnissen zu erzeugen!
quelle
Hier ist ein Code in c, um RGB in Graustufen umzuwandeln. Die tatsächliche Gewichtung, die für die Umwandlung von RGB in Graustufen verwendet wird, beträgt 0,3R + 0,6G + 0,11B. Diese Gewichte sind nicht absolut kritisch, so dass Sie mit ihnen spielen können. Ich habe sie 0,25R + 0,5G + 0,25B gemacht. Es entsteht ein etwas dunkleres Bild.
HINWEIS: Der folgende Code nimmt das xRGB 32-Bit-Pixelformat an
quelle
0.11111111 * ((G + (G<<1) + R) <<1) + B)
. Dies entspricht(2*R+6*G+B) / 9)
oder0.222 R + 0.666 G + 0.111 B
. Vergleichen Sie vor Produktionsbeginn eine genaue Formel für verschiedene Testfälle.Hier ist ein Artikel darüber, wie diese Zahlen (oder ähnliche) abgeleitet wurden:
https://web.archive.org/web/20160303201512/http://www.cis.rit.edu/mcsl/research/broadbent/CIE1931_RGB.pdf
quelle
Weitere Informationen hierzu finden Sie in den Farb-FAQ . Diese Werte stammen aus der Standardisierung von RGB-Werten, die wir in unseren Anzeigen verwenden. Laut den häufig gestellten Fragen zu Farben sind die von Ihnen verwendeten Werte veraltet, da es sich um die Werte handelt, die für den ursprünglichen NTSC-Standard und nicht für moderne Monitore verwendet werden.
quelle
Die "Quelle" der angegebenen Koeffizienten sind die NTSC-Spezifikationen, die in Rec601 und Eigenschaften des Fernsehens zu sehen sind .
Die "ultimative Quelle" sind die CIE-Experimente zur menschlichen Farbwahrnehmung um 1931. Die spektrale Reaktion des menschlichen Sehens ist nicht einheitlich. Experimente führten zur Gewichtung von Tristimuluswerten basierend auf der Wahrnehmung. Unsere L-, M- und S-Kegel 1 sind empfindlich gegenüber den Lichtwellenlängen, die wir als "Rot", "Grün" bzw. "Blau" identifizieren. Hier werden die Tristimulus-Primärfarben abgeleitet. 2
Die spektralen Gewichtungen des linearen Lichts 3 für sRGB (und Rec709) sind:
R lin * 0,2126 + G lin * 0,7152 + B lin * 0,0722 = Y.
Diese sind spezifisch für die sRGB- und Rec709-Farbräume, die Computermonitore (sRGB) oder HDTV-Monitore (Rec709) darstellen sollen, und sind in den ITU-Dokumenten für Rec709 sowie in BT.2380-2 (10/2018) aufgeführt.
Fußnoten (1) Zapfen sind die farbdetektierenden Zellen der Netzhaut des Auges.
(2) Die gewählten Tristimuluswellenlängen befinden sich jedoch NICHT auf dem "Peak" jedes Kegeltyps - stattdessen werden Tristimuluswerte so gewählt, dass sie auf einem bestimmten Kegeltyp wesentlich stärker stimulieren als auf einem anderen, dh eine Trennung des Stimulus.
(3) Sie müssen Ihre sRGB-Werte linearisieren, bevor Sie die Koeffizienten anwenden. Ich diskutiere dies in einer anderen Antwort hier.
quelle
Diese Werte variieren von Person zu Person, insbesondere für Menschen, die farbenblind sind.
quelle
Ist dies alles wirklich notwendig, variieren die menschliche Wahrnehmung und CRT vs LCD, aber die RGB-Intensität nicht. Warum nicht
L = (R + G + B)/3
und setzen Sie das neue RGB auf L, L, L?quelle