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));