实验截图:
- RGB到HSI空间转换后的图:
实验代码:
function hsi = rgb2hsi(rgb)
rgb = im2double(rgb);
R = rgb(:,:,1);%分离出R通道
G = rgb(:,:,2);%分离出G通道
B = rgb(:,:,3);%分离出B通道
%要计算出H的话,根据公式我们需要先算出θ角度
num = ((R - G) + (R - B))/2.0;%计算公式的上半部分
den = sqrt((R - G).^2 + (R - B).*(G - B));%计算公式的下半部分
theta = acos(num./(den + eps));%将上下两部分相除同时取一个反三角函数 这里加入的eps是防止除数为零
H = theta;%先令H为θ
H(B > G) = 2*pi - H(B > G);%如果B分量大于G分量 则取2π-θ
H = H/(2*pi);%得到H通道最终值
num = min(min(R,G),B);%取得RGB三通道中最小的
den = R + G + B;%取得RGB通道之和
S = 1 - 3.*num./(den + eps);%进行S通道的计算 这里的eps同样是防止除数为零
H(S == 0) = 0;
I = (R + G + B)/3;%进行I通道的计算
hsi = cat(3,H,S,I);%将HSI三通道联合成为一个HSI图像
end
结果分析:
-
RGB 向HSI 模型的转换是由一个基于笛卡尔直角坐标系的单位立方体向基于圆柱极坐标的双锥体的转换。基本要求是将RGB 中的亮度因素分离,将色度分解为色调和饱和度,并用角向量表示色调
-
相比原始的RGB图像,HSI图像对颜色信息的利用率更高,更适合于目标分析和目标分割等场景。
-
色调(Hue):是指一种纯色的颜色属性,(色调与波长有关,是人对不同颜色的感受);
-
饱和度(Saturation):是指纯色被白光稀释的程度的度量,(饱和度越大越鲜艳);
-
亮度(Intensity):是一个主观因子,实际上是不可度量的,(亮度和图像灰度是颜色的明亮程度)。
-
通俗地讲,H=色相;决定是什么颜色,S=饱和度(纯度);决定颜色浓淡,B=明度(亮度);决定照射在颜色上的白光有多亮。
-
两个颜色模式的关系如下(RGB转HSI):
- 通过公式计算我们就可以不借助matlab的函数将RGB转化为HSI。