According to two sources I found, in the CIELAB LAB colorspace a value of L*=0 corresponds to black. Quoting Wikipedia:
The three coordinates of CIELAB represent the lightness of the color (L* = 0 yields black and L* = 100 indicates diffuse white ...)
and quoting Phil Cruse:
The L* axis represents Lightness. This is vertical; from 0, which has no lightness (i.e. absolute black) ...
However, this appears to not be the case. For example, using L*=0,a*=127,b*=0 one obtains in Mathematica:
FullForm[ColorConvert[LABColor[0, 1.27, 0], "RGB"]]
(*RGBColor[0.46364605275068677, 0., 0.052627307663056185]*)
...which is not black.
This does not appear to be a Mathematica bug, as it is also reproduced (to a couple sig figs, at least) in Julia using the Color.jl
package:
convert(RGB, LAB(0,127,0))
# RGB{Float64}(0.46778684693714695,0.0,0.04112312700274846)
Likewise, visualizing the color cube of the LAB Colorspace is in the Neat Examples
section of the Mathematica documentation page for LABColor
. Here it is, with the L*=0 face of the surface pointing towards the camera:
With the exception of the cube at the corner, the majority of the cubes are decidedly not black. So my question is:
- Why does an L*=0 setting not necessarily correspond to black in the CIELAB color space? Isn't L* supposed to correspond to perceived luminosity? If so, then why do some portions of the L*=0 subspace appear considerably brighter than black?
LAB(0,127,0)
does not exist in the RGB space, and so conversion results in numerical errors which cause it to appear non-black?Manipulate[ ArrayPlot@ Table[LABColor[l, a, b], {a, -1, 1, .05}, {b, -1, 1, .05}], {{l, 0}, -1, 2} ]