matlab下 hsi转rgb代码

原文:https://blog.csdn.net/u014488388/article/details/50571280

hsi=cat(3,H1,S,I);
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) );
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) );
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) );
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));

%合成
RGB = cat(3,R,G,B);
RGB = max(min(RGB,1),0);

猜你喜欢

转载自blog.csdn.net/huangyixian2/article/details/80161227