function rgb = hsi2rgb(hsi)
%HSI2RGB converts an HSI image to RGB
% RGB = HSI2RGB(HSI)
% the input image, is of class double in range[ 0 1], where:
% hsi(:,:,1) = hue divided by 2*pi
% hsi(:,:,2) = saturation
% hsi(:,:,3) = intensity
% the output image, is of class double in range[ 0 1], where:
% rgb(:,:,1) = red
% rgb(:,:,2) = green
% rgb(:,:,3) = blue
% extracts the hsi image
H = hsi(:,:,1)*2*pi;
S = hsi(:,:,2);
I = hsi(:,:,3);
%implement the conversion e.q.s
R= zeros(size(hsi,1),size(hsi, 2));
G= zeros(size(hsi,1),size(hsi, 2));
B= zeros(size(hsi,1),size(hsi, 2));
%RG region (0 <= H < 2*pi/3)
idx = find ((0<= H) & ( H < 2*pi/3));
B(idx) = I(idx).*(1-S(idx));
R(idx)=I(idx).*(1+S(idx).*cos(H(idx))./cos(pi/3-H(idx)));
G(idx) = 3*I(idx) -(R(idx)+B(idx));
%BG region (2*pi/3 <= H < 4*pi/3)
idx = find ((2*pi/3<= H) & ( H < 4*pi/3));
R(idx) = I(idx).*(1-S(idx));
G(idx)=I(idx).*(1+S(idx).*cos(H(idx)-2*pi/3)./cos(pi-H(idx)));
B(idx) = 3*I(idx) -(R(idx)+G(idx));
%BR region (4*pi/3 <= H < 2*pi)
idx = find ((4*pi/3<= H) & ( H < 2*pi));
G(idx) = I(idx).*(1-S(idx));
B(idx)=I(idx).*(1+S(idx).*cos(H(idx)-4*pi/3)./cos(5*pi/3-H(idx)));
R(idx) = 3*I(idx) -(G(idx)+B(idx));
% combine all results into a RGB image
rgb = cat (3, R,G,B);
rgb = max(min(rgb,1),0);
数字图像处理 彩色空间转化 代码
4星 · 超过85%的资源 需积分: 9 57 浏览量
2013-04-15
11:02:13
上传
评论
收藏 60KB ZIP 举报
tongxinxiaoya
- 粉丝: 4
- 资源: 4