- refactored
This commit is contained in:
Executable
+45
@@ -0,0 +1,45 @@
|
||||
% 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;
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
function out = color_conv(in, type_in, type_out)
|
||||
[ny,nx,nc] = size(in)
|
||||
|
||||
% Get LAB-Data
|
||||
color_write('color_in.dat',reshape(in,nc,ny*nx));
|
||||
commandStr = sprintf('color_conv.exe %s %s %s %s','color_in.dat', 'color_out.dat',type_in, type_out);
|
||||
dos(commandStr);
|
||||
out = reshape(color_read('color_out.dat'), ny,nx,nc);
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
function out = color_conv(in, type_in, type_out)
|
||||
[ny,nx] = size(in)
|
||||
|
||||
% Get LAB-Data
|
||||
color_write('color_in.dat',in);
|
||||
commandStr = sprintf('color_conv.exe %s %s %s %s','color_in.dat', 'color_out.dat',type_in, type_out);
|
||||
dos(commandStr);
|
||||
out = color_read('color_out.dat');
|
||||
Executable
+20
@@ -0,0 +1,20 @@
|
||||
function data = color_read(name)
|
||||
item_size = 8;
|
||||
|
||||
fid = fopen(name,'r');
|
||||
if(fid < 0)
|
||||
data = fid;
|
||||
return;
|
||||
end;
|
||||
|
||||
version = fread(fid,1,'uint');
|
||||
prec_type = fscanf(fid,'%s',1);
|
||||
fread(fid,1,'uint8');
|
||||
n_rows = fread(fid,1,'uint');
|
||||
n_cols = fread(fid,1,'uint');
|
||||
data_size = fread(fid,1,'uint');
|
||||
data = reshape(fread(fid,n_rows*n_cols,prec_type),n_rows,n_cols);
|
||||
[n_rows,n_cols] = size(data)
|
||||
|
||||
fclose(fid);
|
||||
|
||||
Executable
+16
@@ -0,0 +1,16 @@
|
||||
function color_write(name, data)
|
||||
[n_rows,n_cols] = size(data)
|
||||
|
||||
item_size = 8;
|
||||
prec_type = 'float64';
|
||||
|
||||
fid = fopen(name,'w');
|
||||
fwrite(fid,1,'uint');
|
||||
fprintf(fid,'%s',prec_type);
|
||||
fwrite(fid,13,'uint8');
|
||||
fwrite(fid,n_rows,'uint');
|
||||
fwrite(fid,n_cols,'uint');
|
||||
fwrite(fid,n_rows*n_cols*item_size,'uint');
|
||||
fwrite(fid,data(:),prec_type);
|
||||
fclose(fid);
|
||||
|
||||
Executable
+44
@@ -0,0 +1,44 @@
|
||||
% function [xyz] = rgb2xyz(rgb)
|
||||
%
|
||||
% // C-Code
|
||||
% if ( var_R > 0.04045 ) var_R = ( ( var_R + 0.055 ) / 1.055 ) ^ 2.4
|
||||
% else var_R = var_R / 12.92
|
||||
% if ( var_G > 0.04045 ) var_G = ( ( var_G + 0.055 ) / 1.055 ) ^ 2.4
|
||||
% else var_G = var_G / 12.92
|
||||
% if ( var_B > 0.04045 ) var_B = ( ( var_B + 0.055 ) / 1.055 ) ^ 2.4
|
||||
% else var_B = var_B / 12.92
|
||||
%
|
||||
% var_R = var_R * 100
|
||||
% var_G = var_G * 100
|
||||
% var_B = var_B * 100
|
||||
%
|
||||
% // Observer. = 2°, Illuminant = D65
|
||||
% X = var_R * 0.4124 + var_G * 0.3576 + var_B * 0.1805
|
||||
% Y = var_R * 0.2126 + var_G * 0.7152 + var_B * 0.0722
|
||||
% Z = var_R * 0.0193 + var_G * 0.1192 + var_B * 0.9505
|
||||
%
|
||||
% Source http://www.easyrgb.com
|
||||
|
||||
function [xyz] = rgb2xyz(rgb)
|
||||
[m,n] = size(rgb);
|
||||
|
||||
if ((m ~= 3) & (n == 3))
|
||||
rgb = rgb';
|
||||
end;
|
||||
|
||||
% Observer = 2°, Illuminant = D65
|
||||
t_mat = [[ 0.412453 0.357580 0.180423 ]
|
||||
[ 0.212671 0.715160 0.072169 ]
|
||||
[ 0.019334 0.119193 0.950227 ]];
|
||||
|
||||
rgb_k = f1(rgb);
|
||||
xyz = t_mat * rgb_k;
|
||||
|
||||
function rgb_k = f1(rgb)
|
||||
thresh_n = 0.04045 ;
|
||||
|
||||
[idx_m, idx_n] = find(rgb > thresh_n);
|
||||
rgb_k(idx_m,idx_n) = ((rgb(idx_m,idx_n) + 0.055)/1.055).^(2.4);
|
||||
|
||||
[idx_m, idx_n] = find(rgb <= thresh_n);
|
||||
rgb_k(idx_m,idx_n) = rgb(idx_m,idx_n)/12.92;
|
||||
Executable
+47
@@ -0,0 +1,47 @@
|
||||
% 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;
|
||||
Executable
+47
@@ -0,0 +1,47 @@
|
||||
% function [rgb] = xyz2rgb(xyz)
|
||||
%
|
||||
% // C-Code
|
||||
% ref_X = 95.047 //Observer = 2°, Illuminant = D65
|
||||
% ref_Y = 100.000
|
||||
% ref_Z = 108.883
|
||||
%
|
||||
% var_X = X / 100 //X = From 0 to ref_X
|
||||
% var_Y = Y / 100 //Y = From 0 to ref_Y
|
||||
% var_Z = Z / 100 //Z = From 0 to ref_Y
|
||||
%
|
||||
% var_R = var_X * 3.2406 + var_Y * -1.5372 + var_Z * -0.4986
|
||||
% var_G = var_X * -0.9689 + var_Y * 1.8758 + var_Z * 0.0415
|
||||
% var_B = var_X * 0.0557 + var_Y * -0.2040 + var_Z * 1.0570
|
||||
%
|
||||
% if ( var_R > 0.0031308 ) var_R = 1.055 * ( var_R ^ ( 1 / 2.4 ) ) - 0.055
|
||||
% else var_R = 12.92 * var_R
|
||||
% if ( var_G > 0.0031308 ) var_G = 1.055 * ( var_G ^ ( 1 / 2.4 ) ) - 0.055
|
||||
% else var_G = 12.92 * var_G
|
||||
% if ( var_B > 0.0031308 ) var_B = 1.055 * ( var_B ^ ( 1 / 2.4 ) ) - 0.055
|
||||
% else var_B = 12.92 * var_B
|
||||
%
|
||||
% Source http://www.easyrgb.com
|
||||
|
||||
function [rgb] = xyz2rgb(xyz)
|
||||
[m,n] = size(xyz);
|
||||
|
||||
if ((m ~= 3) & (n == 3))
|
||||
xyz = xyz';
|
||||
end;
|
||||
|
||||
% Observer = 2°, Illuminant = D65
|
||||
t_mat = [[ 3.240479 -1.537150 -0.498535 ]
|
||||
[ -0.969256 1.875992 0.041556 ]
|
||||
[ 0.055648 -0.204043 1.057311 ]];
|
||||
|
||||
rgb_k = t_mat * xyz;
|
||||
rgb = f1(rgb_k);
|
||||
|
||||
function rgb = f1(rgb_k)
|
||||
thresh_n = 0.0031308;
|
||||
|
||||
[idx_m,idx_n] = find(rgb_k > thresh_n);
|
||||
rgb(idx_m,idx_n) = 1.055*(rgb_k(idx_m,idx_n).^(1/2.4)) - 0.055;
|
||||
|
||||
[idx_m,idx_n] = find(rgb_k <= thresh_n);
|
||||
rgb(idx_m,idx_n) = 12.92*rgb_k(idx_m,idx_n);
|
||||
Reference in New Issue
Block a user