Wie kann ich erkennen, ob eine Farbe grau ist?

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“?

zwei Grautöne

Das können Sie nicht, weil „Grau“ kein quantifizierbares Maß ist. Was ich für grau halte, ist möglicherweise nicht das, was Sie für grau halten, und was ich isoliert für grau halte, ist möglicherweise nicht das, was ich im Kontext für grau halte. Angesichts der beiden Kästchen, die Sie enthalten, würde ich sagen, dass das rechte grau ist und das linke nicht. Nehmen Sie sie einzeln und ich würde wahrscheinlich sagen, dass die linke Seite ein beiges Braun und die rechte ein bräunliches Blaugrün ist – keines von beiden ist grau. Setzen Sie beide in ein hell gesprenkeltes Bild und ich würde sie wahrscheinlich beide grau nennen. Wie würden Sie das programmatisch bestimmen?
Die Antwort auf diese Frage hängt stark davon ab, wie Sie Farbe definieren und wie genau Sie Grau definieren. Vielleicht könnten Sie die Rohdaten der xkcd-Farbumfrage knacken.
Beachten Sie, wie die beiden Farben gleichmäßiger nicht grau erscheinen, wenn Sie ein neutrales Grau dazwischen hinzufügen .
Ich wundere mich auch über einen sprachlichen/kulturellen Effekt: "blue-grey" ist ein gebräuchlicher Begriff im Englischen (der auf das rechte Beispiel angewendet werden könnte). Die am ehesten gebräuchliche Beschreibung für das linke Beispiel wäre "rotes Tellergrau ". "Rötlich" modifiziert "Grau", während "Blaugrau" ein einfarbiges Adjektiv ist. Die kulturelle Linguistik der Farbwahrnehmung ist einer von vielen interessanten Faktoren. H = 120 °, die anderen gleich zu halten, ist für mich grünlich grau oder sogar graugrün; "grün-grau" ist auch ungewöhnlich (obwohl "grau-grün" häufiger vorkommt, wofür wir uns vielleicht bei Kipling bedanken müssen)
@ChrisH, das war Papierverkäufern im Laufe der Jahrhunderte bekannt. Kulturen in höheren Breiten glauben, dass bläuliche Farben neutraler sind. Während Länder in Äquatornähe zwischen Gelb und Rot prädisponiert sind. Dies ist zum Teil auf den Himmel und die Erde zurückzuführen, die unseren Weißabgleich beeinflussen, und zum Teil auf die Kultur

Antworten (5)

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.

Nicht rot, rote Bilder

Wenn Sie einen Ausschnitt des Papageienflügels nehmen und ihn aus dem Zusammenhang nehmen, sieht er aus wie Braun und Grau.

Papagei Wing Snip

Wenn Sie genau denselben Schnitt wieder über den Papagei legen, sieht er im Zusammenhang mit dem Blau/Grün wieder rot aus.

Kombiniert

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.

Ja, es ist faszinierend, wie das menschliche Gehirn Farben verarbeitet. Hier ist ein weiteres Beispiel: Beide Augen haben den gleichen Grauton 7f7f7f
Das berüchtigte Kleid ist auch ein ziemlich auffälliges Beispiel, bei dem verschiedene Personen tatsächlich genau dieselben Pixel als völlig unabhängige Farben sehen, weil sie zweideutige Lichtsignale unterschiedlich interpretieren.
"Hier gibt es kein Rot." Warum oh warum glaube ich dir nicht!?
Das Handyspiel I Love Hue (und vermutlich seine Fortsetzung, obwohl ich die erste Ausgabe noch durcharbeite) macht sich dieses Phänomen zunutze. Die Prämisse ist einfach: Ordnen Sie einen Satz farbiger Kacheln in einem glatten Farbverlauf an, wobei jede Kachel an ihren nächsten Nachbarn angrenzt. Aber ich habe bis jetzt... 72 Stunden damit verbracht, sagt mein Telefon, zum Teil, weil es so wunderbar frustrierend sein kann, wenn eine Kachel quer durchs Brett fällt, die MÖGLICHERWEISE nicht die richtige Passform haben kann, scheint auf magische Weise die Farbe zu ändern, wenn Sie es bewegen.
Ich verspreche es gibt es nicht. Öffnen Sie es in Photoshop und wählen Sie einen beliebigen Pixel aus, es gibt keine "roten" Töne im Bild.
@Alith7, musste die Bilder wegen Lizenzproblemen ändern. Beim ersten war ich schlampig. Verzeihung. 😀
Ups... überhaupt kein Problem! es waren in erster Linie deine Bilder. ;)
@Alith7, das sind nur Bilder aus dem Netz. Jetzt sind sie alle gemeinfrei.

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.

Es gibt auch andere Probleme, die mit dem menschlichen Sehen verbunden sind, wie beispielsweise der Weißabgleich eines menschlichen Auges. Ich habe eine 3D-Druckerspule aus recycelter "grauer" Farbe. Aber ich schwöre, dass es in meiner Werkstatt grün ist, da meine neutralen Farben so prominent neutral sind. Aber wenn ich es in die Holzwerkstatt bringe, ist es viel wärmer, es sieht wirklich grau aus. Selbst in meiner Werkstatt ist es manchmal grau. Was gfray ist, ist also eine Art untereingeschränkte Frage.
@Wolff und einige von uns hatten letzte Woche im Chat ein großartiges Gespräch darüber, wie man ein rotes Bild erstellt, das tatsächlich KEIN Rot enthält.

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.

Das war auch mein erster Gedanke. Aber ist die „Ähnlichkeit der RGB-Werte“ nicht nur ein anderes Wort für „Sättigung“? Das OP zeigt ein Beispiel für zwei Farben mit derselben Sättigung, von denen sie glauben, dass sie nicht ähnlich grau aussehen. Das erhöht die Komplexität der Frage.
Sättigung ist die Intensität einer Farbe (nicht Helligkeit, nicht Farbton). Das OP zeigt zwei Farben mit der gleichen Sättigung von 12%, aber unterschiedlichen Farbtönen, deshalb sehen sie unterschiedlich aus. Je geringer die Sättigung ist, desto ähnlicher sehen sich diese beiden Kästchen an.
Ich denke, Sie haben absolut Recht - eine Sättigung von 12% ist zu viel, aber bei 4% könnten Sie sich viel sicherer sein.
„Der Programmierer muss noch entscheiden, was grau ist“ – ist das nicht nur ein Teil des Problems? Diese Grenze ist nicht nur für jeden Programmierer unterschiedlich , sondern auch für verschiedene Monitore , und im Fall von Displays mit Farbmanagement hängt es auch von der Software ab!

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

  1. RapidTables RGB zu HSL
  2. Photoshop-Matlab
Hallo und willkommen bei GDSE!. Gute Antwort! Wahrscheinlich kommen wir dem am nächsten. Das Interessante an der Frage ist, dass das OP bereits zwei Farben anhand ihrer Sättigung verglichen und festgestellt hat, dass selbst bei gleicher Sättigung (= "Grauheit") eine von ihnen in ihren Augen immer noch grauer aussieht als die andere.
Nun, eigentlich gibt es so etwas wie Grau nicht, also kann es nicht effizient gemessen werden. Es sei denn, Sie machen eine unnatürliche Definition von Grau
@joojaa Grau habe ich im zweiten Satz objektiv definiert.
@Soleil-MathieuPrévot nein hast du nicht. Sie haben etwas definiert, das das OP als nicht funktionierend definiert hat. Ich meine naiv, Sie haben Recht, außer dass die HCL-Definition an anderer Stelle besser ist, weil sie zumindest wissenschaftlich motivierter ist. Aber das große Problem dabei ist, dass es nicht alle Effekte berücksichtigt. ok, das kannst du wahrscheinlich nicht. Wie auch immer, selbst wenn wir die Gerätekoordinaten im Vergleich zu absoluten Koordinaten weglassen, hat die Definition von Helligkeit und Grau immer noch ein Problem zu sagen, wann ein Chip aufhört, grau zu sein ...

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.

Ja, ich wusste nicht wirklich, wie tief dieses Kaninchenloch war, bevor ich die Frage stellte. Mein Anwendungsfall ist etwas spezifisch, ich versuche, "Farbschemata" von Websites zu extrahieren, um mehr über die Effektivität von Designsystemen zu erfahren. Die Art und Weise, wie ich es jetzt gelöst habe, besteht darin, den Kontext jeder anderen auf der Seite verwendeten Farbe zu betrachten, festzustellen, ob es sich um eine "warme oder kalte" Seite handelt, festzustellen, ob mehrere Grauschattierungen verwendet werden, und sie von dort zu extrahieren.