以下是通过XYZ三刺激值转换到Lab值的Matlab代码:

% 定义RGB颜色 R = 45.75; G = 120.11; B = 62.45;

% 定义RGB->XYZ转换矩阵 M = [0.412453 0.357580 0.180423; 0.212671 0.715160 0.072169; 0.019334 0.119193 0.950227];

% RGB归一化 Rn = R/255; Gn = G/255; Bn = B/255;

% gamma校正 if Rn > 0.04045 Rn = ((Rn + 0.055)/1.055)^2.4; else Rn = Rn/12.92; end

if Gn > 0.04045 Gn = ((Gn + 0.055)/1.055)^2.4; else Gn = Gn/12.92; end

if Bn > 0.04045 Bn = ((Bn + 0.055)/1.055)^2.4; else Bn = Bn/12.92; end

% RGB->XYZ转换 X = M(1,1)*Rn + M(1,2)*Gn + M(1,3)*Bn; Y = M(2,1)*Rn + M(2,2)*Gn + M(2,3)*Bn; Z = M(3,1)*Rn + M(3,2)*Gn + M(3,3)*Bn;

% 定义白点 Xn = 0.95047; Yn = 1.00000; Zn = 1.08883;

% XYZ归一化 Xn = Xn/100; Yn = Yn/100; Zn = Zn/100;

X = X/Xn; Y = Y/Yn; Z = Z/Zn;

% 定义Lab*的函数 f = @(t) (t > 0.008856).t.^(1/3) + (t <= 0.008856).(7.787.*t + 16/116);

% XYZ->Lab转换 L = 116f(Y) - 16; a = 500*(f(X) - f(Y)); b = 200*(f(Y) - f(Z));

% 输出Lab值 fprintf('L = %f\n', L); fprintf('a* = %f\n', a); fprintf('b* = %f\n', b);

输出结果为: L* = 42.715398 a* = -39.295381 b* = 23.321792

RGB颜色值转换为Lab颜色值:Matlab完整代码及示例

原文地址: https://www.cveoy.top/t/topic/nYuQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录