Colors 无损sRGB<-&燃气轮机;实验室转换?

Colors 无损sRGB<-&燃气轮机;实验室转换?,colors,color-space,lossless,Colors,Color Space,Lossless,当我来回使用黑色(rgb(0,0,0))时,它显示为19,0,10 是否有一个经过修改的公式,用于扩展实验室颜色空间以进行1:1转换?如果没有,是否还有其他颜色空间保持“这些值中相同数量的数字变化对应于大致相同数量的视觉感知变化”的属性 我想在一些图像上运行k-means聚类,它在实验室中工作得更好。简单的回答是您使用的代码库有bug。 而且它似乎没有得到积极的维护 FWIW,当您查看值时,请记住: #000 sRGB 0,0,0=linearRGB 0.0,0.0,0.0=XYZ 0,0,0=

当我来回使用黑色(
rgb(0,0,0)
)时,它显示为
19,0,10

是否有一个经过修改的公式,用于扩展实验室颜色空间以进行1:1转换?如果没有,是否还有其他颜色空间保持“这些值中相同数量的数字变化对应于大致相同数量的视觉感知变化”的属性

我想在一些图像上运行k-means聚类,它在实验室中工作得更好。

简单的回答是您使用的代码库有bug。 而且它似乎没有得到积极的维护

FWIW,当您查看值时,请记住:

#000 sRGB 0,0,0=linearRGB 0.0,0.0,0.0=XYZ 0,0,0=Lab 0,0,0
(所有空格0,0,0)

#FFF sRGB 255255255=linearRGB 1.0,1.0,1.0=XYZ 0.9505,1.0,1.0888=Lab 100,0,0
(sRGB为D65,假设为D65 2°)

#777 sRGB 119119119=linearRGB 0.1845,0.1845,0.1845=XYZ 0.1753,0.1845,0.2009=Lab 50.03,0,0
(使用BruceLindbloom矩阵)

伪码 更多正确的代码可在此处找到:

但是,此代码不是javascript-此站点上的代码是伪代码,因此需要修改(即,您需要使用Math.pow而不是^)

python 这里有一个很好的基于Python的库,并积极维护:

数学 实际的数学和讨论可以在Bruce Lindbloom的网站上找到:

他还有一些JS颜色计算器,可能对你有帮助


很高兴回答其他问题,让我知道…

如果您添加代码,我们可以检查。一般情况下:使用浮点(它们会丢失精度,但小于整数。您可能希望使用YCC(与lo CIELAB没有太大区别)(通过巧合/人类视觉机制),但三元组是为字节而设计的。@GiacomoCatenazzi我认为问题不在于浮点精度;AFAIK LAB和sRGB颜色空间根本没有完全重叠。如果您想查看代码,我认为这个库首先会,然后会。YCC看起来有点太过。CIELAB具有sRGB的所有颜色,并且如果您删除关于sR范围的限制GB(因此允许负数和溢出),您可以描述所有颜色。CIEXYZ只是RGB的线性变换,但总是正数[在1931年进行手动计算…]@GiacomoCatenazzi为什么我的sRGB会变成负片?我的源图像是RGB。这是一个不需要被钳制的实验室。确实被钳制了,但这并不能解释为什么我会得到19,0,10,因为这些数字显然在范围内(好吧,可能不是0,但这没有意义)。在不了解您的代码的情况下,我们无法告诉您。CIELAB到CIEXYZ是可逆的。CIEXYZ到sRGB只是一个矩阵乘法,因此是可逆的。gamma可能很棘手:RGB使用“自己的”解释(易于计算),而一些gamma是不可逆的(根据实际原因,并且仅针对黑色/非常暗的颜色).检查公式:。数学看起来很简单。我会在有时间的时候尝试在JS中重新实现它。谢谢!@mpen没问题…你可能也会喜欢这个存储库:明白了!@mpen nice…缺少一些东西,我想你可能需要注意你的sRGB 128128的实验室值。实验室应该是53.59,0.0,0.0-缺少的是illuminant.sRGB是D65。第43行和第45行需要是X/=95.047;Z/=108.883;第67行需要是:return[X*95.047,Y*100,Z*108.883];如果我知道你想在实验室空间进行操作,那么我想你会想修改这些行,如图所示。固定。现在显示为
128128->53.6,-0.00001000,0.00000400->128128
。谢谢你检查我的代码!