1、RGB 图像转 HSI 图像
具体实现步骤:
- 通过 im2double() 函数将输入图像转成 double 类型并作归一化处理;
- 双重循环遍历图像的每一个像素点:分别获取 R,G,B 三个分量,带入转换公式进行计算求解。计算公式如下:
1) 函数接口实现:
function HSI = myRGB2HSI(RGB)
% 从RGB颜色空间向HSI颜色空间的转换
% RGB(uint8):输入的RGB彩色图像
% HSI(double):转换后的HSI彩色图像
img1_double = im2double(RGB); % 转成double并作归一化处理
[r, c, k] = size(img1_double);
H = zeros(r, c);
S = zeros(r, c);
I = zeros(r, c);
for i = 1 : r
for j = 1 : c
% 分别获取R,G,B分量
R = img1_double(i,j,1);
G = img1_double(i,j,2);
B = img1_double(i,j,3);
fenzi = 0.5 * ( (R-G)+(R-B) );
fenmu = sqrt( (R-G)^2 + (R-B)*(G-B) );
% 易错点:分母需加上eps防止为0
xita = acos( fenzi/(fenmu+eps) );
if ( B<=G )
HSI(i,j,1) = xita;
else
HSI(i,j,1) = 2*pi-xita;
end
HSI(i,j,1) = HSI(i,j,1) / (2*pi); % H分量需要除以2*pi进行归一化
min_value = min(min(R,G),B