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

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

程序实现的时候注意把RGB像素值归一化就是了,然后千千万万要根据公式来,不能大意,我之前就有theta为复数的情况,是sqrt对负数进行运算进而得到了复数的结果(BUG)

程序是由matlab实现的,利用了矩阵运算的便捷性,这里如果直接操作单个元素的话。。。会很慢很慢,慢到能把我电脑卡死。。。如果改写成C可能程序的性能还是会有问题

好吧,介绍一下HSI和RGB的转化方法

badac63a6bc39d1ad58ac46f8ca6c49f.gif

5d5e6192367eaef5476ef57f3e9fb795.png

a6165b5dd8c786651d2672358ff55799.png

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

% Code writer : EOF

% Code file : RGB2HSI.m

% Code date : 2014.10.15

%

% Code description:

% This code is a demo for how to transfrom pixel'value in

% RGB-space into HSI-space.

%

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

Img_Original = imread('/home/jasonleaster/Software/opencv-2.4.9/Project_in_XTU/PDF/mountain.png');

Height_Original = size(Img_Original,1);

Width_Original = size(Img_Original,2);

Channel_Orignal = size(Img_Original,3);

Theta = zeros(1,Height_Original * Width_Original);

S = zeros(1,Height_Original * Width_Original);

I = zeros(1,Height_Original * Width_Original);

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

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

B_temp = double(Img_Original(:,:,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);

for row = 1:Height_Original

for col = 1: Width_Original

% initialize min with 255(the max value in RGB space)

min = 255;

for channel = 1:Channel_Orignal

if min > Img_Original(row,col,channel)

min = Img_Original(row,col,channel);

end

end

Dark_channel(row,col) = double(min)/255;

end

end

Theta = acos(0.5*((R - G) + (R - B))./(sqrt((R -G).^2 + (R-B).*(G-B))));

S = 1 - (3./(R + G + B)).* double(Dark_channel);

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

S = 100*S;

for row = 1: Height_Original

for col = 1:Width_Original

if B(row,col) <= G(row,col)

H(row,col) = Theta(row,col);

else

H(row,col) = 2*pi - Theta(row,col);

end

end

end

H = H*180/pi;

原文:http://blog.csdn.net/cinmyheart/article/details/40117265

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值