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

Jacob Punkte 33625

Das 'V' von HSV ist wahrscheinlich das, wonach Sie suchen. MATLAB hat eine rgb2hsv Funktion und der zuvor zitierte Wikipedia-Artikel ist voller Pseudocode. Wenn eine RGB2HSV-Konvertierung nicht machbar ist, wäre ein weniger genaues Modell die Graustufenversion des Bildes.

-1voto

Um die Helligkeit einer Farbe mit R zu bestimmen, konvertiere ich die RGB-Systemfarbe in die HSV-Systemfarbe.

In meinem Skript habe ich zuvor den HEX-Systemcode aus einem anderen Grund verwendet, aber du kannst auch mit dem RGB-Systemcode beginnen mit rgb2hsv {grDevices}. Die Dokumentation findest du hier.

Hier ist dieser Teil meines Codes:

 sample <- c("#010101", "#303030", "#A6A4A4", "#020202", "#010100")
 hsvc <-rgb2hsv(col2rgb(sample)) # konvertiere HEX in HSV
 value <- as.data.frame(hsvc) # erstelle data.frame
 value <- value[3,] # extrahiere die Helligkeitsinformationen
 order(value) # ordne die Farbe nach Helligkeit

-2voto

Dave Collier Punkte 9

Zur Klarstellung müssen die Formeln, die eine Quadratwurzel verwenden, wie folgt sein:

sqrt(Koeffizient * (Farbwert^2))

nicht

sqrt((Koeffizient * Farbwert))^2

Der Beweis dafür liegt in der Umwandlung eines R=G=B-Trios in ein Graustufen-R. Das wird nur stimmen, wenn du den Farbwert quadrierst, nicht den Farbwert mal Koeffizient. Siehe Neun Graustufen

5 Stimmen

Es gibt Klammerfehlanpassungen

0 Stimmen

Außer wenn der verwendete Koeffizient die Quadratwurzel des richtigen Koeffizienten ist.

-4voto

Ben S Punkte 66945

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

4 Stimmen

Nein, du kannst nicht den euklidischen Abstand zwischen sRGB-Werten verwenden, sRGB ist kein wahrnehmungsgerechter kartesischer Vektorraum. Wenn du den euklidischen Abstand als Maß für Farbunterschiede verwenden möchtest, musst du zumindest in CIELAB konvertieren, oder noch besser, eine Kamera wie CIECAM02 verwenden.

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