解决方案

三刺激值计算lab的方法

发布日期:2020-11-17 浏览次数:718

三刺激值和Lab都是为了量化颜色的引入的概念,Lab颜色数值是可以通过三刺激值转换的,很多用户对三刺激值计算Lab的方法还不了解,本文就给大家简单介绍一下。

颜色产生原理

RGB与Lab颜色空间互相转换:

同RGB颜色空间相比,Lab是一种不常用的色彩空间。它是在1931年国际照明委员会(CIE)制定的颜色度量国际标准的基础上建立起来的。1976年,经修改后被正式命名为CIELab。它是一种设备无关的颜色系统,也是一种基于生理特征的颜色系统。这也就意味着,它是用数字化的方法来描述人的视觉感应。Lab颜色空间中的L分量用于表示像素的亮度,取值范围是[0,100],表示从纯黑到纯白;a表示从红色到绿色的范围,取值范围是[127,-128];b表示从黄色到蓝色的范围,取值范围是[127,-128]。

RGB颜色空间不能直接转换为Lab颜色空间,需要借助XYZ颜色空间,把RGB颜色空间转换到XYZ颜色空间,之后再把XYZ颜色空间转换到Lab颜色空间。

由XYZ三刺激值,得到Lab值:

function [ Lab ] = XYZ2Lab( XYZ,XYZ0 )

%   XYZ数据转换为Lab数据,可批量处理

%   输入原始XYZ数据, n*3 矩阵

%   输入使用的光源的三刺激值XYZ0,1*3矩阵

X=XYZ(:,1);

Y=XYZ(:,2);

Z=XYZ(:,3);

X0=XYZ0(:,1);

Y0=XYZ0(:,2);

Z0=XYZ0(:,3);

L=116*f(Y./Y0)-16;

a=500*(f(X./X0)-f(Y./Y0));

b=200*(f(Y./Y0)-f(Z./Z0));

Lab(:,1)=L;

Lab(:,2)=a;

Lab(:,3)=b;

function [ ff ] = f( I )

if ( I > 0.008856 )

    ff = I.^(1.0/3);

else

    ff = 7.787*I+16.0/116;

end

LAB转换XYZ的方法:

CIE-L*ab —> XYZ

1.var_Y = ( CIE-L* + 16 ) / 116

2.var_X = CIE-a* / 500 + var_Y

3.var_Z = var_Y - CIE-b* / 200

4.if ( var_Y^3 > 0.008856 ) var_Y = var_Y^3

5.else                      var_Y = ( var_Y - 16 / 116 ) / 7.787

6.if ( var_X^3 > 0.008856 ) var_X = var_X^3

7.else                      var_X = ( var_X - 16 / 116 ) / 7.787

8.if ( var_Z^3 > 0.008856 ) var_Z = var_Z^3

9.else                      var_Z = ( var_Z - 16 / 116 ) / 7.787

10.X = ref_X * var_X     //ref_X =  95.047     Observer= 2°, Illuminant= D65

11.Y = ref_Y * var_Y     //ref_Y = 100.000

12.Z = ref_Z * var_Z     //ref_Z = 108.883

在线咨询
微信咨询
联系电话
+400-888-5135
返回顶部