Halcom 发表于 2016-10-26 21:23:34

RGB和HSI之间的转化

%% HSI --> RGB
clc,clear,close all
warning off
feature jit off
im = imread('hestain.png');
figure('color',)
im1 = rgb2hsi(im);   % RGB转化为HSI
subplot(121),imshow(im1,[]);title('HSI')
im2 = hsi2rgb(im1);    % HSV转化为RGB
subplot(122),imshow(im2,[]);title('RGB')RGB颜色空间转化到HSI颜色空间
function im1=rgb2hsi(im)

im = double(im)/255;
r = im(:, :, 1);
g = im(:, :, 2);
b = im(:, :, 3);
num=0.5*((r-g)+(r-b));
den=sqrt((r-g).*(r-g))+(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;
den(den==0)=eps;
S=1-3.*num./den;
H(S==0)=0;

I=(r+g+b)/3;

im1(:,:,1) = real(H);
im1(:,:,2) = S;
im1(:,:,3) = I;

% im1(:,:,1) = im2uint8(H);
% im1(:,:,2) = im2uint8(S);
% im1(:,:,3) = im2uint8(I);

% im1 =cat(3,H,S,I);

Halcom 发表于 2016-10-26 21:31:13

function im1 = hsi2rgb(im)
% Convert HSI to sRGB
if ~isa(im,'double')
    im = double(im)/255;
end

h = im(:,:,1);
s = im(:,:,2);
i = im(:,:,3);

for k=1:size(h,1)
    for j=1:size(h,2)
      if h(k,j)<2*pi/3
            x(k,j) = i(k,j).*(1-s(k,j));
            y(k,j) = i(k,j).*(1+ s(k,j).*cos(h(k,j))/cos(pi/3-h(k,j)));
            z(k,j) = 3*i(k,j)-(x(k,j)+y(k,j));
            r(k,j)=y(k,j);
            g(k,j)=z(k,j);
            b(k,j)=x(k,j);
      elseif h(k,j)>=2*pi/3 && h(k,j)<4*pi/3
            h(k,j) = h(k,j)-2*pi/3;
            x(k,j) = i(k,j).*(1-s(k,j));
            y(k,j) = i(k,j).*(1+ s(k,j).*cos(h(k,j))/cos(pi/3-h(k,j)));
            z(k,j) = 3*i(k,j)-(x(k,j)+y(k,j));
            r(k,j)=x(k,j);
            g(k,j)=y(k,j);
            b(k,j)=z(k,j);
      elseif h(k,j)>=4*pi/3 && h(k,j)<2*pi
            h(k,j) = h(k,j)-4*pi/3;
            x(k,j) = i(k,j).*(1-s(k,j));
            y(k,j) = i(k,j).*(1+ s(k,j).*cos(h(k,j))/cos(pi/3-h(k,j)));
            z(k,j) = 3*i(k,j)-(x(k,j)+y(k,j));
            r(k,j)=z(k,j);
            g(k,j)=x(k,j);
            b(k,j)=y(k,j);
      end
    end
end
im1(:,:,1) = r;
im1(:,:,2) = g;
im1(:,:,3) = b;

end

Halcom 发表于 2016-11-7 22:00:53

RGB到HSI公式

Halcom 发表于 2016-11-7 22:01:52

    HSI用色调H、饱和度S、亮度I(Iuminance)来描述物体的颜色,其中H定义颜色的波长,称为色调;S表示颜色的深浅程度,称为饱和度;I表示强度或亮度,在处理彩色图像时,可仅对I分量进行处理,结果不改变原图像中的彩色种类。
    HSI颜色空间图像和RGB空间图像很不相同,其中H为色调、S表示颜色的深浅程度,可简单的理解为其能量分布图;I表示强度或亮度,一般用户在处理彩色图像时可仅对I分量进行处理,在树叶的提取和识别中,应用广泛。需要注意的是,HSI、HLS颜色空间可近似等同于HSL颜色空间,因此在很多场合,直接利用HSL取代HSI、HLS颜色空间。



页: [1]
查看完整版本: RGB和HSI之间的转化