RGB到HSI彩色空间转换详解:以'redflower.jpg'为例
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);
运行结果如下图所示:

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