Ich versuche programmgesteuert zu erkennen, ob eine Farbe "grau" ist oder nicht.
Das beste Maß für "Grauheit", das ich finden konnte, war die Sättigung. Das Problem, auf das ich stoße, ist, dass verschiedene Farbtöne je nach Farbton und Helligkeit mehr oder weniger grau aussehen. Im Bild unten sieht einer deutlich grau und der andere rot/braun aus, obwohl beide die gleiche Sättigung und Helligkeit haben.
Gibt es einen Farbraum, der die "Grauheit" einer Farbe genauer darstellt?
Gibt es einen offiziellen Begriff für das Konzept „Grauheit“?
Mit voller Anerkennung an @Wolff für diese Bilder. Wie bereits erwähnt, ist Grau zu 100 % relativ zur Beleuchtung, den Umgebungsfarben, der Wahrnehmung und der von Ihnen gemessenen Methode. Nehmen Sie zum Beispiel diese Bilder. Das Hauptbild hat eigentlich überhaupt kein "Rot". Wenn Sie eine Pipette nehmen und einen Bereich messen, der rot aussieht, handelt es sich tatsächlich um Grauschattierungen.
Wenn Sie einen Ausschnitt des Papageienflügels nehmen und ihn aus dem Zusammenhang nehmen, sieht er aus wie Braun und Grau.
Wenn Sie genau denselben Schnitt wieder über den Papagei legen, sieht er im Zusammenhang mit dem Blau/Grün wieder rot aus.
Aber davon abgesehen wäre LCH oder LAB die beste Wahl, um neutrales Grau zu messen.
@Lucianos Empfehlung dieses Artikels: Farbtheorie: Gibt es ein Maß für "Farbigkeit"? Hat einige gute Informationen für das, was Sie versuchen zu tun.
RGB oder eigentlich die Sättigung in ihren Polarkoordinatenäquivalenten ist hochgradig nichtlinear, wenn man versucht, sie als Maß dafür zu verwenden, "wie nahe diese RGB-Farbe grau zu sein scheint, wenn man sie auf dem Bildschirm betrachtet". Es berücksichtigt überhaupt nicht den Menschen Farbsehen, es dient lediglich der Steuerung der Bildschirmelektronik. Sie haben sich darüber den Kopf zerbrochen.
Sie sollten stattdessen Ihre RGB-Werte in das LCH-System konvertieren und C (= Chroma) oder in das CIELAB-System (= Lab in Photoshop) extrahieren und sqrt (a ^ 2 + b ^ 2) berechnen. Diese Systeme wurden entwickelt, um das Gesehene linearer vorherzusagen. Für Grau C=0 und a=b=0. Das ist natürlich gelogen, wenn der Bildschirm nicht farbkalibriert ist.
Füge fällige Kommentare hinzu: Der Fragesteller glaubt sehr wahrscheinlich, dass sein Programm von nichts anderem, was es gesehen hat, getäuscht wird, es kann sich jeweils auf eine einzelne RGB-Kombination konzentrieren. Ich denke, der Fragesteller erwartet etwas, das seinem Programm helfen könnte, die gleiche Entscheidung zu treffen, wie es ein perfektes Kolorimeter tun würde, wenn es die gleiche RGB-Ausgabe von einem fehlerfreien sRGB-Bildschirm ohne störende zusätzliche Lichter liest.
Der bereits erwähnten Farbwahrnehmung stimme ich zu. Es gibt warme Grautöne und kühle Grautöne, aber das grauste von allen wäre ein neutrales Grau.
Wenn alle 3 Zahlen gleich sind, ist dies bei RGB-Werten ein neutrales Grau, z. B. R109 G109 B109 oder R228 G228 B228. Wenn eine Zahl etwas anders ist, wird das Grau entweder kühl oder warm getönt.
Wenn ich mir die HSB-Werte ansehe, scheint es mir egal zu sein, was der HUE ist, solange die Sättigung 0 ist, ist es 100% grau. Wenn Sie die SÄTTIGUNG um einen beliebigen Prozentsatz erhöhen, erhalten Sie einen Ton von dem, was der HUE ist.
Als Grafikdesigner würde ich also argumentieren, dass jeder SÄTTIGUNGS-Wert unter 4 % als grau angesehen würde, aber je nach HUE-Wert (auch wenn er 0 ist) könnte es ein kühles Grau oder ein warmes Grau sein.
Der Programmierer muss immer noch die letzte Entscheidung darüber treffen, was als grau angesehen wird, es sei denn, Sie möchten nur 100 % Grau erkennen, dann ist es einfach.
HSL ist der beste Farbraum zur Darstellung von Grau.
Grau kann als Abstand S (Sättigung) gesehen werden, der 0,0 beträgt, wenn es sich um reines Grau handelt, und 1,0, wenn es am weitesten von Grau entfernt ist.
Maß und Wahrnehmung
In den beiden bereitgestellten Beispielen habe ich gemessen (mit Photoshop-Pipette): 0 10 % 49 % und 216 12 % 51 %, was ein wenig von dem abweicht, was Sie behauptet haben, möglicherweise weil ein Farbprofil im Veröffentlichungsprozess gelöscht wurde.
Bei einem kalibrierten Eizo CG303w (120cd/m2 5000k 2.2) habe ich das Gefühl, dass der linke zum Rot tendiert und der rechte zum Blau. Ich habe die Sättigung verringert, bis ich das Gefühl hatte, dass beide grau sind, ich habe 4% und 5% Sättigung im HSL-Bereich erreicht.
Meine 5000k für den Weißpunkt sind etwas warm, und ich sehe den braunen Fleck farbiger als den blauen. Wahrscheinlich wäre ein Weißpunkt bei 5500k-6500k besser und wir sollten auch darauf achten, dass Umgebungslicht (idealerweise ein kalibriertes Licht wie Just) und Wandfarbe (weiß, schmutziges Weiß?) im Bereich akzeptabler Grauwerte liegen.
Diskussion
In RGB ist eine Farbe grau, wenn R = G = B, aber der Bediener muss mehrere Zahlen auswerten, um auf die Frage "Ist es grau" zu antworten. Es ist schwieriger, sich nur anhand der Zahlen von R=G=B zu distanzieren.
Der HSL-Farbraum ist direkter, da S (Sättigung, im Bereich [0,1]) sofort die Antwort gibt: 0 ist grau oder ein Wert unterhalb einer Schwelle wird als grau gewählt.
R' = R/max // normalization from [0-max] to [0.0-1.0]
G' = G/max // where max is 255 if the colors are 8 bits per channel
B' = B/max
Cmax = max(R', G', B') // find the maximum among R,G,B
Cmin = min(R', G', B') // find the minimum among R,G,B
Δ = Cmax - Cmin // gives the maximum difference
Und doch sind L und S gegeben durch:
L = (Cmax + Cmin) / 2
S = Δ/(1-|2L-1|)
Daher können Sie einen Indikatorfilter erstellen, der beispielsweise in reinem Grün angezeigt wird, wenn Pixel rein grau oder ausreichend grau sind. oder das alle ausreichend grauen Pixel in falschen Farben anzeigt und den Rest entsättigt. Die Implementierung hängt von Ihrer Software und Sprache ab; Sie können beispielsweise einen Matlab-Filter für Photoshop erstellen, der dies tut, oder sogar ein eigenständiges Plugin.
Verweise
Wie Sie anhand der Antworten feststellen, erhalten Sie je nach Ihren Definitionen sehr unterschiedliche Ergebnisse, die sich teilweise widersprechen. Keine der Antworten ist per se falsch. Sie hängen nur von unterschiedlichen Definitionen von Farbe und Grau ab.
Nun, da wir nichts über Ihr zugrunde liegendes Problem wissen, ist es schwer zu sagen. Aus farbwissenschaftlicher Sicht gibt es wirklich keine befriedigende Antwort auf die Frage, wie viel Grau in einem Bild vorhanden ist.
Die Farbwissenschaft sagt sicherlich, dass alle diese Verarbeitungen in einem absoluten Farbraum durchgeführt werden sollten, vorzugsweise in einem Derivat von CIE Lab, möglicherweise polar wie Lch. Obwohl dies zu wünschen übrig lässt, da es keine Garantie dafür gibt, dass ein polarer Lhc auch nur annähernd einheitlich in der erforderlichen Weise ist. Im Allgemeinen vermeidet die Farbwissenschaft diese Art des Nachdenkens, indem sie die Interpolation von Farbe vermeidet.
Auf jeden Fall wäre es wahrscheinlich genauer, ΔE zwischen einer neutralen Farbe mit demselben Helligkeitswert zu berechnen. Dies hätte wahrscheinlich den besten wissenschaftlichen Wert in Bezug darauf, wie die menschlichen Sinne funktionieren, da versucht wird, ein Problem zu lösen, das ähnlich genug ist, damit die Zahl eine verständlichere Bedeutung hat.
Sie können aber auch eine Art Farbmessung von einem Bild aus durchführen, dann wäre der Lch wieder gut, ebenso wie HSL. Es hängt ein wenig davon ab, wie der Kamerasensor Ihrer Meinung nach ist. Wenn Sie also ein Kolorimeter emulieren möchten, hat dies sicherlich einen gewissen Wert.
Aber wenn Sie wirklich wissen möchten, wann etwas grau ist, oder wenn Sie untersuchen müssen, was Menschen als grau betrachten, können Sie einfach versuchen, die Daten an die menschliche Beschreibung anzupassen. Die XKCD-Farbumfrage hat einige gute Datenpunkte, die Sie weiter untersuchen können. Das Gute an dieser Datenbank ist, dass sie nicht farbkorrigiert ist. Das bedeutet, dass Sie bei einer Webanwendung den Fehler eines durchschnittlichen unkalibrierten Monitors aus statistischen Aggregaten ermitteln können. Aber schlecht für die Farbwissenschaft.
Und so weiter .... Sie können so tief graben, wie Sie möchten.
Die Frage ist so wagt, dass wir sie nicht wirklich beantworten können, ohne Dinge für Sie zu definieren.
Luciano
Janus Bahs Jacquet
joojaa
Wolff
Chris H
joojaa