matlabrgb和波长的换算_RGB与HSI转换Matlab程序

im1=imread('duck.jpg');

im3=im1;

im1=im2double(im1);

[m,n,q]=size(im1);

%

获取图像的

RGB 3

个通道

R=im1(:,:,1);

G=im1(:,:,2);

B=im1(:,:,3);

%

改变通道来观察图像

figure,subplot(1,3,1),imshow(cat(3,R*0.5,G,B)),title('R

通道减半

');

set(gcf,'outerposition',get(0,'screensize'));

set(gcf,'NumberTitle','off','Name','

改变通道来观察图像

');

subplot(1,3,2),imshow(cat(3,R,G*2,B)),title('G

通道翻倍

');

subplot(1,3,3),imshow(cat(3,R,G

,zeros(m,n))),title('B

通道为

0');

%

观察

HSI

通道图像

%

因系统没有

rgb2hsi

函数

,

只有

rgb2hsv

函数

,

所以自己编写程序实现

H=zeros(m,n);

S=H;

for i1=1:m

for i2=1:n

numerator=0.5*(R(i1,i2)-G(i1,i2)+R(i1,i2)-B(i1,i2));

denominator=sqrt((R(i1,i2)-G(i1,i2))^2+(R(i1,i2)-B(i1,i2))*(G(i1,i2)-B(i1,i2)));

theta=acos(numerator/denominator)*180/pi;

if(B(i1,i2)<=G(i1,i2))

H(i1,i2)=theta;

else

H(i1,i2)=360-theta;

end

min1=min(R(i1,i2),G(i1,i2));

min1=min(B(i1,i2),min1);

S(i1,i2)=1-3/(R(i1,i2)+G(i1,i2)+B(i1,i2))*min1;

end

end

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

figure,subplot(1,3,1),imshow(H,[]),title('

色度图

H');

set(gcf,'outerposition',get(0,'screensize'));

set(gcf,'NumberTitle','off','Name','HSI

通道图像

');

subplot(1,3,2),imshow(S),title('

饱和度图

S');

subplot(1,3,3),imshow(I),title('

强度图

I');

%

HSI

转换回

RGB

模型并观察图像

,

系统也不自带

hsi2rgb,

仅自带

hsv2rgb

im2=zeros(m,n,3);

for i1=1:m

for i2=1:n

value1=I(i1,i2)*(1+S(i1,i2)*cos(H(i1,i2))/cos(pi/3-H(i1,i2)/180*pi));


版权声明:本文为weixin_39542936原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。