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