资源描述:
《rgb和hsv间的转换》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、H参数表示色彩信息,即所处的光谱颜色的位置。该参数用一角度量来表示,红、绿、蓝分别相隔120度。互补色分别相差180度。纯度S为一比例值,范围从0到1,它表示成所选颜色的纯度和该颜色最大的纯度之间的比率。S=0时,只有灰度。V表示色彩的明亮程度,范围从0到1。有一点要注意:它和光强度之间并没有直接的联系。RGB转化到HSV的算法:max=max(R,G,B)min=min(R,G,B)ifR=max,H=(G-B)/(max-min)ifG=max,H=2+(B-R)/(max-min)ifB=max,H=4+(
2、R-G)/(max-min)H=H*60ifH<0,H=H+360V=max(R,G,B)S=(max-min)/maxHSV转化到RGB的算法ifs=0R=G=B=VelseH/=60;i=INTEGER(H)f=H-ia=V*(1-s)b=V*(1-s*f)c=V*(1-s*(1-f))switch(i)case0:R=V;G=c;B=a;case1:R=b;G=v;B=a;case2:R=a;G=v;B=c;case3:R=a;G=b;B=v;case4:R=c;G=a;B=v;case5:R=v;G=a;
3、B=b;HSV对用户来说是一种直观的颜色模型。我们可以从一种纯色彩开始,即指定色彩角H,并让V=S=1,然后我们可以通过向其中加入黑色和白色来得到我们需要的颜色。增加黑色可以减小V而S不变,同样增加白色可以减小S而V不变。例如,要得到深蓝色,V=0.4S=1H=240度。要得到淡蓝色,V=1S=0.4H=240度。一般说来,人眼最大能区分128种不同的色彩,130种色饱和度,23种明暗度。如果我们用16Bit表示HSV的话,可以用7位存放H,4位存放S,5位存放V,即745或者655就可以满足我们的需要了。由于H
4、SV是一种比较直观的颜色模型,所以在许多图像编辑工具中应用比较广泛,如Photoshop(在Photoshop中叫HSB)等等,但这也决定了它不适合使用在光照模型中,许多光线混合运算、光强运算等都无法直接使用HSV来实现。顺便提一下,另外一种直观颜色模型是HSL模型,该模型中前两个参数和HSV一样,而L表示亮度。它的三维表示为一双棱锥。因为用的不多,这里就不详细讲了。RGB各分量图像的获取:RGB=reshape(ones(64,1)*reshape(jet(64),1,192),[64,64,3]);R=RGB
5、(:,:,1);G=RGB(:,:,2);B=RGB(:,:,3);imshow(R)figure, imshow(G)figure, imshow(B)figure, imshow(RGB)[m,n]=size(x);x是图像,m.n是图像的行和列(长和宽)a=imread('moon.jpg');>>size(a)ans= 494 347 3后边的这个3是说明数据是三维的不同格式的图像,表示成数据,维数有所不同。取出图像的色度分量:I=imread('1.jpg');>>II=rgb2hsv(I);
6、>>H=II(:,:,1);>>figure(1);imshow(H);我用imhist函数得到HSI分量重H分量的直方图,第一个图,H分量应该是以度 °为单位的,我怎么能把它转换成类似于下面的形式(第二个图)它的横坐标表示角度的,谢谢了。那是表示度数的,0°---360°,我的程序如下,你给看看rgb=imread('SAMPLE14.JPEG');rgb=im2double(rgb);r=rgb(:,:,1);g=rgb(:,:,2);b=rgb(:,:,3);%计算I分量I=(r+g+b);%计算S分量t
7、mp1=min(min(r,g),b);tmp2=r+g+b;tmp2(tmp2==0)=eps;S=1-3.*tmp1./tmp2;%计算H分量tmp1=0.5*((r-g)+(r-b));tmp2=sqrt((r-g).^2+(r-b).*(g-b));theta=acos(tmp1./(tmp2+eps));H=theta;H(b>g)=2*pi-H(b>g);H=H/(2*pi);H(S==0)=0;hsi=cat(3,H,S,I);figure;subplot(2,2,1),imshow(rgb);ti
8、tle('原图像');subplot(2,2,2),imshow(H);title('H分量');subplot(2,2,3),imshow(S);title('S分量');subplot(2,2,4),imshow(I);title('i分量');figure,imhist(H);title('色度');另一个程序:HISclc;clearall;closeall;rg