% 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);