function z = rgb2hsi(x) % L = 2^ceil(log2(max(max(x)))); % you may replace 255 with L-1 L = 256; x = double(x)/(L-1); r = x(:, :, 1); g = x(:, :, 2); b = x(:, :, 3); % hue nm = ((r-g)+(r-b))/2; denm = sqrt((r-g).^2 + (r-b).*(g-b)); k = denm == 0; nm(k) = ((r(k)-g(k) + eps)+(r(k)-b(k)))/2; denm(k) = sqrt((r(k)-g(k) + eps).^2 + (r(k)-b(k)).*(g(k)-b(k))); theta = acos(nm./denm); h = theta; k = b > g; h(k) = 2*pi-theta(k); h = h/2/pi; % saturation % x = reshape([r g b], size(r), 3) s = 1 - 3 ./ (r + g + b) .* min(x, [], 3); % intensity i = (r + g + b)/3; z(:,:,1) = h; z(:,:,2) = s; z(:,:,3) = i; z = z*255; z = round(100*z)/100;