function J=vl_rgb2xyz(I,ws) % VL_RGB2XYZ Convert RGB color space to XYZ % J=VL_RGB2XYZ(I) converts the CIE RGB image I to the image J in % CIE XYZ format. CIE RGB has a white point of R=G=B=1.0 % % VL_RGB2XYZ(I,WS) uses the specified RGB working space WS. The % function supports the following RGB working spaces: % % * `CIE' E illuminant, gamma=2.2 % * `Adobe' D65 illuminant, gamma=2.2 % % The default workspace is CIE. % % See also: VL_XYZ2RGB(), VL_HELP(). % Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson. % All rights reserved. % % This file is part of the VLFeat library and is made available under % the terms of the BSD license (see the COPYING file). [M,N,K] = size(I) ; if K~=3 error('I must be a MxNx3 array.') ; end I=im2double(I) ; if(nargin < 2) workspace = 'CIE' ; else workspace = ws ; end switch workspace case 'CIE' % CIE: E illuminant and 2.2 gamma A = [ 0.488718 0.176204 0.000000 0.310680 0.812985 0.0102048 0.200602 0.0108109 0.989795 ]' ; gamma = 2.2 ; case 'Adobe' % Adobe 1998: D65 illuminant and 2.2 gamma A = [ 0.576700 0.297361 0.0270328 0.185556 0.627355 0.0706879 0.188212 0.0752847 0.99124 ]' ; gamma = 2.2 ; end [M,N,K] = size(I) ; I = reshape(I.^gamma, M*N, K) ; J = A*I' ; J = reshape(J', M, N, K) ;