function hsi = rgb2hsi(rgb)
%function [H,S,I] = rgb2hsi(r,g,b)
%RGB2HSI Converts RGB image to HSI

%Extract the indidividual component images
rgb = im2double(rgb);
r = rgb(:,:,1);
g = rgb(:,:,2);
b = rgb(:,:,3);

% conversion

num = 0.5 *((r - g) + (r - b));
den = sqrt((r - g).^2 + (r - b).*(g - b));
theta = acos(num./(den + eps));

H = theta;
H(b>g) = 2*pi - H(b>g);
H = H/(2*pi);

num = min(min(r, g), b);
den = r + g + b;
I = den/3;
den(den == 0) = eps;
S = 1 - 3.*num./den;
H(S ==0) = 0;

% combine all three results into an hsi image

hsi = cat(3, H, S, I);
