我需要能够将Lab颜色转换为XYZ颜色。根据我在其他人的问题中找到的建议,我遵循了这个页面的解释:http://www.brucelindbloom.com/index.html?Eqn_Lab_to_XYZ.html将实验室转换为XYZ
我已经跟着它,但是我的X和Z值是关闭的,但是Y是正确的(我已经测试了它对一个几个在线转换器(它们不显示它们如何转换它))。我一直盯着那个实验室到XYZ网站一会儿,试图找到我的数学错误。
Lab色彩我测试:Lab[41, 48, -19]
XYZ值我得到:XYZ[5676.0352, 0.1186, 4845.2021]
(该网站说,这个结果应该在范围[0, 1]
的referenceX
,referenceY
和referenceZ
是我参考白。颜色值
这里是我的代码(JAVA):
// https://www.mathworks.com/help/images/ref/whitepoint.html
// a: 1.0985, 1, 0.3556
// c: 0.9807, 1, 1.1822
// e: 1,1, 1
// d50: 0.9642, 1, 0.8251
// d55: 0.9568, 1, 0.9214
// d65: 0.9504, 1, 1.0888
// icc: 0.9642, 1, 0.8249 (what we're using)
double referenceX = 0.9642;
double referenceY = 1;
double referenceZ = 0.8249;
double fy = (this.lightness + 16)/116;
double fx = this.a/500 + fy;
double fz = fy - this.b/200;
//todo make these constants
double kappa = 216/24389.0;
double epsilon = 24389/27.0;
double fx3 = fx * fx * fx;
double fz3 = fz * fz * fz;
double xr = fx3 > epsilon ? fx3 : (116 * fx - 16)/kappa;
double yr = this.lightness > kappa * epsilon ? Math.pow((this.lightness + 16)/116, 3) : this.lightness/kappa;
double zr = fz3 > epsilon ? fz3 : (116 * fz - 16)/kappa;
double X = xr * referenceX;
double Y = yr * referenceY;
double Z = zr * referenceZ;
所以我想我的问题当然是,我的数学有什么问题?或任何人都可以找到另一个网站的方式来做转换(我似乎无法找到任何)?
谢谢。如果您需要任何澄清或有任何问题,请询问。
您交换了'kappa'和'epsilon'的值。 –