matlab hsi颜色空间,RGB 颜色空间转 HSI 颜色空间的matlab程序实现

RGB 颜色空间转 HSI 颜色空间的matlab程序实现

2014.10.20之前的内容有误,这里根据wikipedia更新了算法内容. 算法以wiki为准

这里demo出 HSI中 S 空间的图像和暗通道图的对比.

会发现,确实右边到很暗,这是因为HSV转换的时候对RGB值做了归一化处理,如果打印出归一化处理后的R+G+B值会发现输出图像很亮(白茫茫一片~)

0818b9ca8b590ca3270a3433284dd417.png

下图是取自图像第321列的数据分布,可以看见图像的灰度分布是很明晰的

0818b9ca8b590ca3270a3433284dd417.png

下面给出了我写的转换函数,直接调用即可.

%%**************************************************************************

% Function writer : EOF

% code file : RGB2SHI_Color.m

% code date : 2014.10.16

% Translate RGB into HSI-space

%

% Code Description:

%

% If you want to translate a colourful Image which is coded as

% RGB colour space into HSI space, what you need to do is just input your

% colour image.

%

% This function would return HSI as a matrix [H,S,I].

%

%% *************************************************************************

function [H,S,I] = RGB2SHI_Color(Image)

if size(Image,3) ~= 3

fprintf('ERROR Imput-Image must be three channel image\n');

return;

end

Height_Image = size(Image,1);

Width_Image = size(Image,2);

Channel_Image = size(Image,3);

H = zeros(1,Height_Image * Width_Image);

H_temp = zeros(1,Height_Image * Width_Image);

S = zeros(1,Height_Image * Width_Image);

I = zeros(1,Height_Image * Width_Image);

%% Normalization into (0,1)

R_temp = double(Image(:,:,1));

G_temp = double(Image(:,:,2));

B_temp = double(Image(:,:,3));

R = R_temp./(R_temp + G_temp + B_temp);

G = G_temp./(R_temp + G_temp + B_temp);

B = B_temp./(R_temp + G_temp + B_temp);

Max_channel = max(max(R,G),B);

Min_channel = min(min(R,G),B);

Difference = Max_channel - Min_channel;

I = (R + G + B)./3;

for row = 1:Height_Image

for col = 1: Width_Image

% In fact , if Difference(row,col) is zero, the H_temp is

% undefine , it means that H_temp(row,col) close to

% infinite.

if Difference(row,col) == 0

H_temp(row,col) = 0;

end

if Max_channel(row,col) == R(row,col)

H_temp(row,col) = mod((G(row,col) - B(row,col)) ...

./Difference(row,col), 6 );

end

if Max_channel(row,col) == G(row,col)

H_temp(row,col) = (B(row,col) - R(row,col)) ...

./Difference(row,col) + 2;

end

if Max_channel(row,col) == B(row,col)

H_temp(row,col) = (B(row,col) - R(row,col)) ...

./Difference(row,col) + 4;

end

H(row,col) = H_temp(row,col)*60;

if I(row,col) == 0

S(row,col) = 0;

else

S(row,col) = 1 - (Min_channel(row,col)./I(row,col));

end

end

end

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值