Files
matlab/common/xyz2cielab.m
T
jens b31f3e7435 - added
git-svn-id: http://moon:8086/svn/matlab/trunk@153 801c6759-fa7c-4059-a304-17956f83a07c
2021-03-22 20:28:22 +00:00

48 lines
1.3 KiB
Matlab
Executable File

% function [lab] = xyz2cielab(xyz, ref_xyz)
%
% // C-Code
% var_X = X / 95.047 //Observer = 2°, Illuminant = D65
% var_Y = Y / 100.000
% var_Z = Z / 108.883
%
% if ( var_X > 0.008856 ) var_X = var_X ^ ( 1/3 )
% else var_X = ( 7.787 * var_X ) + ( 16 / 116 )
% if ( var_Y > 0.008856 ) var_Y = var_Y ^ ( 1/3 )
% else var_Y = ( 7.787 * var_Y ) + ( 16 / 116 )
% if ( var_Z > 0.008856 ) var_Z = var_Z ^ ( 1/3 )
% else var_Z = ( 7.787 * var_Z ) + ( 16 / 116 )
%
% CIE-L* = ( 116 * var_Y ) - 16
% CIE-a* = 500 * ( var_X - var_Y )
% CIE-b* = 200 * ( var_Y - var_Z )
%
% Source http://www.easyrgb.com
function [lab] = xyz2cielab(xyz, ref_xyz)
[m,n] = size(xyz);
if ((m ~= 3) & (n == 3))
xyz = xyz'
end;
xyz(1,:) = xyz(1,:)./ref_xyz(1,:);
xyz(2,:) = xyz(2,:)./ref_xyz(2,:);
xyz(3,:) = xyz(3,:)./ref_xyz(3,:);
xyz_k = f1(xyz);
% L
lab(1,:) = 116*xyz_k(2,:) - 16;
% a
lab(2,:) = 500*(xyz_k(1,:) - xyz_k(2,:));
% b
lab(3,:) = 200*(xyz_k(2,:) - xyz_k(3,:));
function xyz_k = f1(xyz)
thresh_n = 0.008856;
[idx_m, idx_n] = find(xyz > thresh_n);
xyz_k(idx_m,idx_n) = xyz(idx_m,idx_n).^(1/3);
[idx_m, idx_n] = find(xyz <= thresh_n);
xyz_k(idx_m,idx_n) = 7.787 * xyz(idx_m,idx_n) + 16/116;