565 Stimmen

Formel zur Bestimmung der wahrgenommenen Helligkeit der RGB-Farbe

Ich suche nach einer Art Formel oder Algorithmus, um die Helligkeit einer Farbe anhand der RGB-Werte zu bestimmen. Ich weiß, dass es nicht so einfach ist, die RGB-Werte zusammenzuzählen und höhere Summen heller zu machen, aber ich bin irgendwie ratlos, wo ich anfangen soll.

10 Stimmen

Die wahrgenommene Helligkeit ist das, wonach ich suche, danke.

0 Stimmen

Ich habe [diesen Code][1] (geschrieben in C#) gefunden, der hervorragende Arbeit bei der Berechnung der "Helligkeit" einer Farbe leistet. In diesem Szenario versucht der Code festzustellen, ob weißer oder schwarzer Text über der Farbe platziert werden soll. [1]:nbdtech.com/Blog/archive/2008/04/27/…

2 Stimmen

Es gibt einen guten Artikel (Farbmanipulation in .NET - Teil 1) über Farbräume und deren Konvertierungen, einschließlich sowohl Theorie als auch Code (C#). Für die Antwort schauen Sie sich das Thema Konvertierung zwischen Modellen im Artikel an.

1voto

Ronen Rabinovici Punkte 7908

Eine einzelne Zeile:

Helligkeit = 0.2*r + 0.7*g + 0.1*b

Wenn die Werte von r, g, b zwischen 0 und 255 liegen, dann liegt die Helligkeitsskala auch zwischen 0 (schwarz) und 255 (weiß).

Es kann natürlich feinabgestimmt werden, aber ich habe festgestellt, dass es für die meisten Anwendungsfälle ausreicht.

1voto

Dave Collier Punkte 9

Die Inverse-Gamma-Formel von Jive Dadson muss beim Einsatz in Javascript den Half-Adjust entfernt haben, d.h. die Rückgabe von Funktion gam_sRGB muss return int(v*255); sein und nicht return int(v*255+.5); Half-Adjust rundet auf, und dies kann einen Wert zu hoch in einem R=G=B also Graustufen-Farbdreieck verursachen. Die Graustufenkonvertierung an einem R=G=B-Farbdreieck sollte einen Wert ergeben, der gleich R ist; das ist ein Beweis dafür, dass die Formel gültig ist. Siehe Nine Shades of Greyscale für die Formel in Aktion (ohne den Half-Adjust).

0 Stimmen

Ich habe das Experiment gemacht. In C++ benötigt es das +0.5, also habe ich es wieder hinzugefügt. Ich habe einen Kommentar zur Übersetzung in andere Sprachen hinzugefügt.

1voto

RGB Leuchtdichtewert = 0,3 R + 0,59 G + 0,11 B

http://www.scantips.com/lumin.html

Wenn Sie wissen möchten, wie nah die Farbe an Weiß liegt, können Sie den euklidischen Abstand von (255, 255, 255) verwenden

Ich denke, der RGB-Farbraum ist hinsichtlich des L2-euklidischen Abstands nicht einheitlich. Einheitliche Räume sind CIE LAB und LUV.

0voto

Ian Hopkinson Punkte 3404

Der HSV-Farbraum sollte das Problem lösen, siehe den Wikipedia-Artikel je nach Sprache, in der Sie arbeiten, erhalten Sie möglicherweise eine Bibliothekskonvertierung.

H ist der Farbton, der einen numerischen Wert für die Farbe darstellt (z.B. rot, grün...)

S ist die Sättigung der Farbe, d.h. wie 'intensiv' sie ist

V ist die 'Helligkeit' der Farbe.

8 Stimmen

Das Problem mit dem HSV-Farbraum ist, dass Sie die gleiche Sättigung und den gleichen Wert haben können, aber unterschiedliche Farbtöne für Blau und Gelb. Gelb ist viel heller als Blau. Das Gleiche gilt für HSL.

0 Stimmen

Hsv gibt Ihnen die "Helligkeit" einer Farbe im technischen Sinne. In einem wahrgenommenen Helligkeits-HSV versagt wirklich.

0 Stimmen

HSV und HSL sind nicht perceptuell genau (und es ist nicht einmal nah dran). Sie sind nützlich für "Steuerungen" zur Anpassung relativer Farben, aber nicht für genaue Vorhersage der perceptuellen Helligkeit. Verwenden Sie L* von CIELAB für perceptuelle Helligkeit.

0voto

dsignr Punkte 2211

Dieser Link erklärt alles im Detail, einschließlich warum diese Multiplikatorkonstanten vor den R, G und B-Werten existieren.

Bearbeiten: Es hat auch eine Erklärung zu einer der Antworten hier (0,299*R + 0,587*G + 0,114*B).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X