hsi2rgb源程序

%hsi2rgb源程序
function rgb=hsi2rgb(hsi)
%rgb=hsi2rgb(hsi)把一幅HSI图像转换为RGB图像
%其中HSI是double型
%hsi(:,:,1)是色度分量,它的范围是除以2*pi后在[0,1]内
%hsi(:,:,2)是饱和度分量,它的范围是在[0,1]内
%hsi(:,:,3)是亮度分量,它的范围是在[0,1]内

%输出图像的分量是
%rgb(:,:,1)为红
%rgb(:,:,2)为绿
%rgb(:,:,3)为蓝

%提取HSI的各个分量
hsi=im2double(hsi);%把hsi转化为双精度浮点类型
H=hsi(:,:,1)*2*pi;
S=hsi(:,:,2);
I=hsi(:,:,3);

%执行变换方程
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区(0<=H<2*pi/3)
idx=find((0<=H) & (H<2*pi/3));%寻找0<=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区(2*pi/3<=H<4*pi/3)
idx=find((2*pi/3<=H) & (H<4*pi/3));%寻找2*pi/3<=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区(4*pi/3<=H<=2*pi)
idx=find((4*pi/3<=H) & (H<=2*pi));%寻找4*pi/3<=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));

%将3个分量联合成为一个RGB图像
rgb=cat(3,R,G,B);
rgb=max(min(rgb,1),0);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值