Pourquoi L * = 0 ne correspond-il pas au noir dans l'espace colorimétrique L * a * b *?

8

Selon deux sources que j'ai trouvées, dans l'espace colorimétrique CIELAB LAB, une valeur de L * = 0 correspond au noir. Citant Wikipédia :

Les trois coordonnées de CIELAB représentent la luminosité de la couleur (L * = 0 donne du noir et L * = 100 indique du blanc diffus ...)

et citant Phil Cruse :

L'axe L * représente la légèreté. C'est vertical; à partir de 0, qui n'a aucune légèreté (c'est-à-dire noir absolu) ...

Cependant, cela ne semble pas être le cas. Par exemple, en utilisant L * = 0, a * = 127, b * = 0, on obtient dans Mathematica:

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

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

... qui n'est pas noir.

Cela ne semble pas être un bogue Mathematica, car il est également reproduit (pour quelques figues sig, au moins) dans Julia en utilisant le Color.jlpackage:

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

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

De même, la visualisation du cube de couleur du LAB Colorspace se trouve dans la Neat Examplessection de la page de documentation de Mathematica pour LABColor. La voici, avec la face L * = 0 de la surface pointée vers la caméra:

entrez la description de l'image ici

À l'exception du cube au coin, la majorité des cubes ne sont décidément pas noirs. Ma question est donc:

  • Pourquoi un paramètre L * = 0 ne correspond-il pas nécessairement au noir dans l'espace colorimétrique CIELAB? N'est-il pas censé correspondre à la luminosité perçue? Si oui, alors pourquoi certaines parties du sous-espace L * = 0 apparaissent-elles considérablement plus lumineuses que le noir?
DumpsterDoofus
la source
Pour ce que ça vaut, j'ai vérifié et il y a trois questions CIELAB sur Mathematica.SE et 45 sur StackOverflow.
hardmath
2
Lorsque vous devez obtenir des valeurs RVB linéaires négatives, la formule ne fonctionnera pas correctement, sauf si cette possibilité a été prise en compte explicitement. Si vous vérifiez la conversion en XYZ, vous voyez que Y devient nul pour L égal à zéro et vous pouvez également voir que lorsque RG et B ne sont pas tous nuls, vous ne pouvez obtenir Y égal à zéro que si certaines des valeurs RVB sont négatif.
Count Iblis
@CountIblis: Merci, mais je suis toujours un peu confus; dites-vous que la raison pour laquelle la non-noirceur se produit est que la couleur LAB(0,127,0)n'existe pas dans l'espace RVB, et donc la conversion entraîne des erreurs numériques qui la font apparaître non noire?
DumpsterDoofus
Oui, c'est à cela que cela se résume. Il est préférable de lire la conversion de Lab en XYZ, puis de XYZ en RVB linéaire, la transformation de RVB linéaire en sRGB n'est qu'une transformation gamma modifiée. Vous verrez que de Lab à XYZ il n'y a pas de problème, Y sera nul quand L sera nul. Mais à partir de XYZ lorsque vous définissez Y = 0 alors que X et ou Z sont différents de zéro, les valeurs négatives pour un ou plusieurs composants RVB seront élevées, évidemment si la brigness totale est censée être nulle lorsque tous les composants RVB ne sont pas nuls, certains doivent être négatifs. La plupart de cela est expliqué ici en.wikipedia.org/wiki/Lab_color_space
Count Iblis
Peut-être plus facile à voir:Manipulate[ ArrayPlot@ Table[LABColor[l, a, b], {a, -1, 1, .05}, {b, -1, 1, .05}], {{l, 0}, -1, 2} ]
Szabolcs

Réponses:

5

Quel que soit l'espace colorimétrique "RVB" (sRGB?) Que vous avez entré comme destination dans Mathematica, il a une gamme limitée de couleurs qui sont décrites par les valeurs R, G et B, généralement similaires à ce qu'un moniteur peut produire, l'imprimante peut imprimer etc et bien plus petit que Lab. Puisqu'il n'y a qu'un nombre limité de valeurs (256 par canal de couleur en 8 bits), les espaces colorimétriques RVB essaient de ne pas gaspiller de valeurs sur des couleurs qui ne peuvent pas être reproduites pour éviter des effets secondaires désagréables.

La conversion de Lab en RVB aboutit à des couleurs hors gamme et le programme essaie ensuite de mapper la couleur Lab à la couleur la plus proche qui existe dans l'espace colorimétrique RVB cible, généralement en coupant toutes les valeurs <0 ou> 1 à 0 et 1.

Si vous êtes enclin à jouer avec, voici un excellent outil sur le Web, CIE Color Calculator de Bruce Lindbloom, qui peut être utilisé pour des conversions interactives rapides

MirekE
la source
2

La réponse est assez simple: la couleur que vous avez spécifiée n'est pas valide (elle n'existe pas). Sachez qu'il est possible dans de nombreux modèles de couleurs de spécifier des "couleurs" qui n'existent pas.

Plus précisément, vous spécifiez L * = 0 (pas de lumière), mais vous spécifiez également a * = 1,27. Comment peut-il y avoir une composante de couleur s'il n'y a pas de lumière?

Si vous examinez le tableau suivant (de certains de mes travaux non publiés), vous verrez que pour les valeurs inférieures à L * = 3,14, la saturation maximale est nulle (comme pour L * = 100). Valeurs maximales de chrominance pour LCh (ab)

Le tableau montre la saturation perceptible maximale pour les couleurs h(verticales) à différentes intensités L(horizontales). Les maximums sont imprimés en gras.

La source du tableau est: [Int10] International Color Consortium. Spécification ICC.1: 2010 (Profile version 4.3.0.0), 12 2010. [En ligne: http://www.color.org/ specification / ICC1v43_2010-12.pdf; Stand 15. novembre 2011].

U. Windl
la source