从HSI转换为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,我怀疑这会大大破坏您的转化。