HSI彩色空间是一种基于人类视觉系统的颜色模型,它由色相 (Hue)、饱和度 (Saturation) 和亮度 (Intensity) 三个分量组成。其中,色相表示颜色的种类,饱和度表示颜色的纯度,亮度表示颜色的明暗程度。

转换公式如下:

H = arccos((0.5 * ((R - G) + (R - B))) / sqrt((R - G)^2 + (R - B) * (G - B))),其中,0 ≤ H ≤ 2π

S = 1 - 3 * min(R, G, B) / (R + G + B),其中,0 ≤ S ≤ 1

I = (R + G + B) / 3,其中,0 ≤ I ≤ 1

转换后的代码如下:

function [H, S, I] = rgb2hsi(image)
    R = double(image(:, :, 1));
    G = double(image(:, :, 2));
    B = double(image(:, :, 3));
    
    % 计算色相分量
    numerator = 0.5 * ((R - G) + (R - B));
    denominator = sqrt((R - G).^2 + (R - B) .* (G - B));
    H = acos(numerator ./ denominator);
    H(B > G) = 2 * pi - H(B > G);
    
    % 计算饱和度分量
    S = 1 - 3 * min([R(:), G(:), B(:)], [], 2) ./ sum([R(:), G(:), B(:)], 2);
    
    % 计算亮度分量
    I = (R + G + B) / 3;
    
    % 显示HSI分量
    figure;
    subplot(1, 3, 1), imshow(H / (2 * pi)), title('Hue');
    subplot(1, 3, 2), imshow(S), title('Saturation');
    subplot(1, 3, 3), imshow(I), title('Intensity');
end

使用如下代码调用:

image = imread('redflower.jpg');
[H, S, I] = rgb2hsi(image);

运行结果如下图所示:

HSI分量显示结果

RGB到HSI彩色空间转换详解:以'redflower.jpg'为例

原文地址: http://www.cveoy.top/t/topic/ojGI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录