git-svn-id: http://moon:8086/svn/matlab/trunk@153 801c6759-fa7c-4059-a304-17956f83a07c
46 lines
1.3 KiB
Matlab
Executable File
46 lines
1.3 KiB
Matlab
Executable File
% function [xyz] = cielab2xyz(lab, ref_xyz)
|
|
%
|
|
% // C-Code
|
|
% var_Y = ( CIE-L* + 16 ) / 116
|
|
% var_X = CIE-a* / 500 + var_Y
|
|
% var_Z = var_Y - CIE-b* / 200
|
|
%
|
|
% if ( var_Y^3 > 0.008856 ) var_Y = var_Y^3
|
|
% else var_Y = ( var_Y - 16 / 116 ) / 7.787
|
|
% if ( var_X^3 > 0.008856 ) var_X = var_X^3
|
|
% else var_X = ( var_X - 16 / 116 ) / 7.787
|
|
% if ( var_Z^3 > 0.008856 ) var_Z = var_Z^3
|
|
% else var_Z = ( var_Z - 16 / 116 ) / 7.787
|
|
%
|
|
% X = ref_X * var_X //ref_X = 95.047 Observer= 2°, Illuminant= D65
|
|
% Y = ref_Y * var_Y //ref_Y = 100.000
|
|
% Z = ref_Z * var_Z //ref_Z = 108.883
|
|
%
|
|
% Source http://www.easyrgb.com
|
|
|
|
function [xyz] = cielab2xyz(lab, ref_xyz)
|
|
|
|
[m,n] = size(lab);
|
|
if ((m ~= 3) & (n == 3))
|
|
lab = lab'
|
|
end;
|
|
|
|
xyz_k(2,:) = (lab(1,:) + 16)/116;
|
|
xyz_k(1,:) = lab(2,:)/500 + xyz_k(2,:);
|
|
xyz_k(3,:) = xyz_k(2,:) - lab(3,:)/200;
|
|
|
|
xyz = f1(xyz_k);
|
|
|
|
xyz(1,:) = xyz(1,:).*ref_xyz(1,:);
|
|
xyz(2,:) = xyz(2,:).*ref_xyz(2,:);
|
|
xyz(3,:) = xyz(3,:).*ref_xyz(3,:);
|
|
|
|
function xyz = f1(xyz_k)
|
|
thresh_n = 0.008856;
|
|
|
|
[idx_m, idx_n] = find(xyz_k.^3 > thresh_n);
|
|
xyz(idx_m,idx_n) = xyz_k(idx_m,idx_n).^3;
|
|
|
|
[idx_m, idx_n] = find(xyz_k.^3 <= thresh_n);
|
|
xyz(idx_m,idx_n) = (xyz_k(idx_m,idx_n) - 16/116)/7.787;
|