- refactored

This commit is contained in:
2022-06-30 13:32:40 +02:00
parent 77cd5261b1
commit 776932e5d1
144 changed files with 0 additions and 38 deletions
+45
View File
@@ -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;
+8
View File
@@ -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);
+8
View File
@@ -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');
+20
View File
@@ -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);
+16
View File
@@ -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);
+44
View File
@@ -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;
+47
View File
@@ -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;
+47
View File
@@ -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);