我有一些想要在CIE L * a * b *中做事的图像。假设初始sRGB值在[0,1]范围内,我可以期望值在哪个范围内?
我得到的图像如下:
im_rgb = im2double(imread('/my/file/path/image.jpg'));
% ...do some muddling about with im_rgb, keeping range [0,1]
xform = makecform('srgb2lab');
im_lab = applycform(im_rgb, xform);
首先,我有理由相信L *会是0-100。但是,我找到this thread,其中指出“...... a *和b *不限于[-100,100]范围内。”
修改
Matlab的默认白点由whitepoint('ICC')
评估,返回0.9642, 1, 0.8249
。我正在使用这个值,因为我不确定还有什么可以使用。
由于我总是使用相同的(默认)变换,输入颜色总是真实的颜色(对于R,G和B中的每一个都为[0,1]),它们的等效L * a * b *表示也是真正的颜色。这些L * a * b *值是否也有界限?如果是这样,它们受到什么限制,或者我如何确定边界?
答案 0 :(得分:3)
您基本上是在询问如何在LAB中找到sRGB空间的边界,对吗?
所以从L *开始,是的,它将被绑定在0和100之间。这是定义。如果您查看从XYZ转换为LAB的公式,您将看到L = 116*(Y/Ywhitepoint)-16
。当您处于sRGB白色时,Y比率变为1,这使得等式116-16 = 100.类似的事情发生在后面,公式基本上折叠为4/29 * 116 -16 = 0.
a和b的情况稍微复杂一些。由于XYZ - > LAB转换不是线性的,转换不能形成容易描述的形状。但是sRGB立方体的外表面将成为LAB空间的外边界。这意味着你可以采取蓝色主要sRGB[0, 0, 1]
等极端,转换为LAB并找到b轴上应该最远的范围:大约-108。当您对sRGB多维数据集的所有角落执行此操作时,您将对LAB中sRGB空间的范围有一个很好的了解。
大多数应用程序(尤其是Photoshop)将a和b通道的编码限制在-128和127之间。这在实践中工作得很好,但是像ProPhoto RGB这样的大型RGB空间实际上超出了这个范围。一般来说,这并没有太大的实际意义,因为大多数这些颜色都是虚构的,即它们位于光谱轨迹之外。