版权声明:<–本博客所有内容均为自己在学习工作中的总结、摘录等-- --转载请注明出处-- --如有侵权请联系删除–>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')