从 HSI 到 RGB 的转换

Conversion from HSI to RGB

我正在将图像 HSI 转换为 RGB。我正在使用此代码:

X=imread("C:\Users\Luca\Desktop\MLBS_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 .tif 的值最多可以达到 65536,我怀疑这会严重破坏您的转换。