hsi和rgb的转换,以及hsi和rgb的补色变换 matlab代码

版权声明:<–本博客所有内容均为自己在学习工作中的总结、摘录等-- --转载请注明出处-- --如有侵权请联系删除–>https://blog.csdn.net/ai359005521/article/details/90246016

如果有用的话帮忙点个赞就好
rgb转为hsi的代码

function hsi = RGB2HSI(rgb) 
rgb = im2double(rgb); 
r = rgb(:, :, 1); 
g = rgb(:, :, 2); 
b = rgb(:, :, 3); 

num = 0.5*((r - g) + (r - b)); 
den = sqrt((r - g).^2 + (r - b).*(g - b)); 
theta = acos(num./(den + eps)); 

H = theta; 
H(b > g) = 2*pi - H(b > g); 
H = H/(2*pi); 

num = min(min(r, g), b); 
den = r + g + b; 
den(den == 0) = eps; 
S = 1 - 3.* num./den; 

H(S == 0) = 0; 

I = (r + g + b)/3; 

hsi = cat(3, H, S, I); 

hsi转为rgb的代码

function rgb = HSI2RGB(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)); 

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)); 

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)); 

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); 

rgb补色和hsi补色的代码

x = imread('d:/12.tif');
hsi = RGB2HSI(x);
rgb_buse = 255 - x;
x_h = hsi(:,:,1);           %提取红色分量的矩阵
x_s = hsi(:,:,2);           %提取绿色分量的矩阵
x_i = hsi(:,:,3);           %提取蓝色分量的矩阵
% zero = zeros(x);  %初始化与图像大小相同的通道为一的零矩阵
x_h_1 = x_h;
x_s_1 = x_s;
x_i_1 = 1-x_i;
[M,N]=size(x_h_1);
for i = 1:M
    for j =1:N
        if(x_h_1(i,j)<=0.5)
            x_h_1(i,j)=0.5+x_h_1(i,j);
        else
            x_h_1(i,j)=-0.5+x_h_1(i,j);
        end
        
%         I2(i,j) = I(i,j);  %对图像进行填充
    end
end

hsi_buse = cat(3,x_h_1,x_s_1,x_i_1); %蓝色分量图

hsi_buse_rgb = HSI2RGB(hsi_buse);
subplot(1,2,1),imshow(rgb_buse),title('Red component');
subplot(1,2,2),imshow(hsi_buse_rgb),title('Green component')

  • 13
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值