Warum entspricht L * = 0 nicht Schwarz im L * a * b * -Farbraum?

8

Nach zwei Quellen, die ich gefunden habe, entspricht im CIELAB LAB-Farbraum ein Wert von L * = 0 Schwarz. Wikipedia zitieren :

Die drei Koordinaten von CIELAB repräsentieren die Helligkeit der Farbe (L * = 0 ergibt Schwarz und L * = 100 zeigt diffuses Weiß an ...)

und zitiert Phil Cruse :

Die L * -Achse repräsentiert die Helligkeit. Das ist vertikal; von 0, die keine Helligkeit hat (dh absolutes Schwarz) ...

Dies scheint jedoch nicht der Fall zu sein. Wenn man beispielsweise L * = 0, a * = 127, b * = 0 verwendet, erhält man in Mathematica:

FullForm[ColorConvert[LABColor[0, 1.27, 0], "RGB"]]

(*RGBColor[0.46364605275068677, 0., 0.052627307663056185]*)

... was nicht schwarz ist.

Dies scheint kein Mathematica-Fehler zu sein, da er auch in Julia (zumindest für ein paar Sig Feigen) mit dem Color.jlPaket reproduziert wird :

convert(RGB, LAB(0,127,0))

# RGB{Float64}(0.46778684693714695,0.0,0.04112312700274846)

Die Visualisierung des Farbwürfels des LAB-Farbraums finden Sie ebenfalls im Neat ExamplesAbschnitt der Mathematica-Dokumentationsseite für LABColor. Hier ist es, wobei die L * = 0-Fläche der Oberfläche zur Kamera zeigt:

Geben Sie hier die Bildbeschreibung ein

Mit Ausnahme des Würfels an der Ecke ist der Großteil der Würfel entschieden nicht schwarz. Meine Frage lautet also:

  • Warum entspricht eine Einstellung L * = 0 nicht unbedingt Schwarz im CIELAB-Farbraum? Soll L * nicht der wahrgenommenen Leuchtkraft entsprechen? Wenn ja, warum erscheinen dann einige Teile des Unterraums L * = 0 erheblich heller als schwarz?
MüllcontainerDoofus
quelle
Was es wert ist, habe ich überprüft und es gibt drei CIELAB-Fragen zu Mathematica.SE und 45 zu StackOverflow.
Hardmath
2
Wenn Sie negative lineare RGB-Werte erhalten sollten, funktioniert die Formel nur dann ordnungsgemäß, wenn diese Möglichkeit explizit berücksichtigt wurde. Wenn Sie die Konvertierung in XYZ überprüfen, sehen Sie, dass Y für L gleich Null Null wird, und Sie können auch sehen, dass Sie, wenn RG und B nicht alle Null sind, Y nur dann gleich Null erhalten können, wenn einige der RGB-Werte sind Negativ.
Graf Iblis
@CountIblis: Danke, aber ich bin immer noch ein wenig verwirrt; Wollen Sie damit sagen, dass die Nichtschwärzung darin besteht, dass die Farbe LAB(0,127,0)im RGB-Raum nicht vorhanden ist und die Konvertierung zu numerischen Fehlern führt, die dazu führen, dass sie nicht schwarz erscheint?
DumpsterDoofus
Ja, darauf kommt es an. Lesen Sie am besten über die Konvertierung von Lab zu XYZ und dann von XYZ zu linearem RGB. Die Transformation von linearem RGB zu sRGB ist nur eine modifizierte Gamma-Transformation. Sie werden sehen, dass es von Lab zu XYZ keine Probleme gibt. Y ist Null, wenn L Null ist. Wenn Sie jedoch von XYZ aus Y = 0 setzen, während X und / oder Z ungleich Null sind, werden negative Werte für eine oder mehrere RGB-Komponenten angezeigt. Wenn die Gesamtbrignität Null sein soll, wenn nicht alle RGB-Komponenten Null sind, müssen einige negativ sein. Das meiste davon wird hier erklärt. En.wikipedia.org/wiki/Lab_color_space
Count Iblis
Vielleicht leichter zu sehen:Manipulate[ ArrayPlot@ Table[LABColor[l, a, b], {a, -1, 1, .05}, {b, -1, 1, .05}], {{l, 0}, -1, 2} ]
Szabolcs

Antworten:

5

Was auch immer der "RGB" -Farbraum (sRGB?) Ist, den Sie in Mathematica als Ziel eingegeben haben, er hat einen begrenzten Farbbereich, der durch die R-, G- und B-Werte beschrieben wird, normalerweise ähnlich dem, was ein Monitor erzeugen kann und der Drucker drucken kann usw. und viel kleiner als Lab. Da es nur eine begrenzte Anzahl von Werten gibt (256 pro Farbkanal in 8-Bit), versuchen die RGB-Farbräume, keine Werte für Farben zu verschwenden, die nicht reproduziert werden können, um unangenehme Nebenwirkungen zu vermeiden.

Die Konvertierung von Lab zu RGB führt zu Farben außerhalb des Farbumfangs, und das Programm versucht dann, die Lab-Farbe der nächstgelegenen Farbe im RGB-Zielfarbraum zuzuordnen, normalerweise durch Trimmen von Werten <0 oder> 1 auf 0 und 1.

Wenn Sie gerne damit spielen, finden Sie hier ein großartiges Tool im Internet, den CIE Color Calculator von Bruce Lindbloom, das für schnelle interaktive Konvertierungen verwendet werden kann

MirekE
quelle
2

Die Antwort ist ganz einfach: Die von Ihnen angegebene Farbe ist ungültig (existiert nicht). Beachten Sie, dass es in vielen Farbmodellen möglich ist, "Farben" anzugeben, die nicht vorhanden sind.

Insbesondere geben Sie L * = 0 (kein Licht) an, aber Sie geben auch a * = 1,27 an. Wie kann es eine Farbkomponente geben, wenn kein Licht vorhanden ist?

Wenn Sie die folgende Tabelle untersuchen (aus einer unveröffentlichten Arbeit von mir), werden Sie feststellen, dass für Werte unter L * = 3,14 die maximale Sättigung Null ist (wie für L * = 100). Maximale Chroma-Werte für LCh (ab)

Die Tabelle zeigt die maximal wahrnehmbare Sättigung für Farben h(vertikal) bei unterschiedlicher Intensität L(horizontal). Die Höchstwerte sind fett gedruckt.

Quelle der Tabelle ist: [Int10] International Color Consortium. Spezifikation ICC.1: 2010 (Profilversion 4.3.0.0), 12. 2010. [Online: http://www.color.org/ specification / ICC1v43_2010-12.pdf; Stand 15. November 2011].

U. Windl
quelle