在matlab中将XYZ转换为LAB,

时间:2015-02-04 13:01:07

标签: matlab

我正在将XYZ值转换为Cie LAB, 以下是我的代码

 clc
 clear all
 close all


 X=19.4100;
 Y=28.4100;
 Z=11.5766;

 Xn = 94.811;   % refrence white
 Yn = 100;
 Zn = 107.304;

  if X/Xn >(6/29)^3
     fx = (X/Xn)^1/3;
  else
     fx = (841/108)* (X/Xn) +4/29;
  end

  if Y/Yn >(6/29)^3
     fy = (Y/Yn)^1/3;
  else
     fy = (841/108)* (Y/Yn) +4/29;
  end   
  if Z/Zn >(6/29)^3
     fz = (Z/Zn)^1/3;
  else
     fz = (841/108)* (Z/Zn) +4/29;
  end
%% converting XYZ to Cielab

  L = 116 * fy-16;
  a = 500 *(fx-fy);
  b = 200 *(fy-fz);

我一次又一次地看到它但却找不到错误,正确的答案是L = 60.2574,a = -34.0099和b = 36.2677 我使用上面的代码得到的是L = -5.0148 a = -13.2295 b = 11.7476

如果有人能找到错误,我会很高兴

2 个答案:

答案 0 :(得分:2)

您的错误是在exponetials中!

执行^(1/3)而非^1/3

使用最新版本,您只需将X/Xn除以3

答案 1 :(得分:0)

如果您喜欢在MATLAB img_Lab = cat(3,L,a,b);

中处理图像,也不要忘记汇总这些值。