从HSI到RGB的转换

  • 本文关键字:转换 RGB HSI matlab rgb
  • 更新时间 :
  • 英文 :


我正在将图像HSI转换为RGB。我使用的是这个代码:

X=imread("C:UsersLucaDesktopMLBS_1.tif");
H=inpict(:,:,1);
S=inpict(:,:,2);
I=inpict(:,:,3);
H=H-360*floor(H/360);
a=H<120;
b=H<240 & ~a;
c=~a & ~b;
R=zeros(size(H));
G=zeros(size(H));
B=zeros(size(H));
B(a)=I(a).*(1-S(a));
R(a)=I(a).*(1+S(a).*cos(H(a).*(pi/180))./cos((60-H(a))*(pi/180)));
G(a)=3*I(a)-R(a)-B(a);
H(b)=H(b)-120;
R(b)=I(b).*(1-S(b));
G(b)=I(b).*(1+S(b).*cos(H(b).*(pi/180))./cos((60-H(b))*(pi/180)));
B(b)=3*I(b)-R(b)-G(b);
H(c)=H(c)-240;
G(c)=I(c).*(1-S(c));
B(c)=I(c).*(1+S(c).*cos(H(c).*(pi/180))./cos((60-H(c))*(pi/180)));
R(c)=3*I(c)-G(c)-B(c);
outpict=cat(3,R,G,B);
imshow(uint8(image));

但是,会抛出以下错误:

Undefined function 'cos' for input arguments of type 'int16'
Error in hsi2rgb (line 13)
R(a)=I(a).*(1+S(a).*cos(H(a).*(pi/180))./cos((60-H(a))*(pi/180)));

我如何解决这个问题?

加载的图像是int16,即它不是浮动的。您希望使用浮点。使用X=double(X)将您的图像转换为浮点图像

我怀疑你期望的H、S和I的值在0-360之间。你需要首先确保你的图像在这个范围内,如果不是,则将其归一化。int16.tifS的值可以高达65536,我怀疑这会大大破坏你的转换。

相关内容

  • 没有找到相关文章

最新更新