资源描述:
《RGB与HSI模型转换Matlab程序.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、数字图像处理:RGB与HSI模型转换Matlab程序im1=imread('Fig6.30(01).jpg');im3=im1;im1=im2double(im1);[m,n,q]=size(im1);%获取图像的RGB3个通道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,'screens
2、ize'));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;fori1=1:m fori2=1:n nu
3、merator=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
4、(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; endendI=(R+G+B)/3;figure,subplot(1,3,1),imshow(H,[]),title('色度图H');set(gcf,'outerposition',get(0,'screensize'));
5、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,仅自带hsv2rgbim2=zeros(m,n,3);fori1=1:m fori2=1:n value1=I(i1,i2)*(1+S(i1,i2)*cos(H(i1,i2))/cos(pi/3
6、-H(i1,i2)/180*pi)); value2=I(i1,i2)*(1-S(i1,i2)); switch(floor(H(i1,i2)/120)) case0 im2(i1,i2,1)=value1; im2(i1,i2,2)=3*I(i1,i2)-R(i1,i2)-B(i1,i2); im2(i1,i2,3)=value2; case1
7、H(i1,i2)=H(i1,i2)-120; im2(i1,i2,1)=value2; im2(i1,i2,2)=value1; im2(i1,i2,3)=3*I(i1,i2)-R(i1,i2)-G(i1,i2); case2 H(i1,i2)=H(i1,i2)-240; im2(i1,i2,1)=3*I(i1,i2)-G(i1,i2)-B(i1,i2);
8、 im2(i1,i2,2)=value2; im2(i1,i2,3)=value1; end endend%模型转换完毕,显示图像figure,subplot(1,2,1),imshow(im1),title('原图');set(gcf,'outerpo