《RGB与HLS模型转换.docx》由会员分享,可在线阅读,更多相关《RGB与HLS模型转换.docx(11页珍藏版)》请在第一文库网上搜索。
1、一、实验名称编写程序实现从RGB到HI5彩色模型的转变二、实验要求1理解理B、H1S模型2.实现RGB到I11S彩色模型的转换三、实验内容1 .原理及其应用领域为了能够正确地选择颜色。首先要懂得颜色模型,创建颜色模型是用来提供一种将颜色翻译成数字数据的方法。将两种不同的颜色按一定比例混合可以生成另一种颜色。通过混合三种不同的颜色就可以得到我们想耍的颜色。这就是三基色颜色模型的基本原理。T.Young在1802年提出了色度学的基础理论:任何彩色都可以用三种不同的基本颜色按不同的比例混合而得到,即:C=a*C1+b*C2+c*C3其中ChC2、C3为三原色(又称为三基色),a、b、C为三种原色的权
2、值(三原色的比例和浓度),C为所合成的颜色,可为任意颜色。(1) RGB颜色模型理论表明在实际的基色组中,没有一种组合能生成所有的颜色。我们的眼睛通过三种可见光对视网膜的椎状细胞的刺激来感受颜色。这些光在波长为630nm(红)53Onn1(绿)和450(蓝)时的刺激达到高峰。通过对各刺激强度的比较,我们感受到光的颜色。这种视觉理论就是使用红、绿、蓝三种基色来显示彩色的基碗B,称之为RGB颜色模型。一个能发光的物体成为有源物体。它的颜色由它发出的光波决定,使用RGB相加混色模型表示。计算机显示器使用的阴极射线管(CathOderaytube,CRT)是一个有源物体,因而计算机图像通常用RGB相加
3、混色模型来描述颜色,位图也是采用RGB颜色模型。彩色图像中的每个点成为象素(PiXe1),它的值称为象素值,它表示特定颜色的强度。一个象素值通常用R、G、B三个分量表示,即:像素值(颜色)=R(红色的百分比)+G(绿色的百分比)+B(蓝色的百分比)在ViSUa1C+中,用函数RGB(r,g,b)的值来表示象素值,其中r,g,b分别表示红色、绿色、蓝色的值(取值范围为0255)。由于RGB模型与直观的概念如饱和度、色调和亮度没有直接的联系,所以RGBF吧之间的转换是十分必要的。(2)视觉颜色模型H1S视觉颜色模型以人眼的视觉特征为基础,用颜色的色调、饱和度和亮度表示颜色。HIS和H1S是常用的两
4、种视觉颜色模型。H1S色彩模型模Ue色彩,1ightness亮度,Saturation饱和度):/IH1S(Hue,1ightness,Saturation)色彩、亮度、饱和度颜色模型。色彩是使一种颜色区别于另一种颜色的要素。饱和度则是指颜色的纯度。而亮度即光的强度。定义在圆柱型坐标系的双圆锥子集上,如上图。在川6模型中,H参数表示色彩信息,即所处的光谱颜色的位置。该参数用角度量来表示,红、绿、蓝分别相隔120度。色彩为绕圆中心轴的角度,一种色彩与它的补色也是相差180度;浓度是点与中心轴的距离;轴上各点,浓度为0;在锥面上各点,浓度为1;亮度从下锥顶点的0逐渐变到上锥顶点的1。饱和度S为一比
5、例值,范围从0到1,它表示所选颜色的饱和度和该颜色最大的饱和度之问的比率。S=O时,只有灰度。最饱和的色彩发生在S=1,1=0.5o1=O.5平面上的颜色的亮度看起来并不一样亮,而看起来一样亮的两种不同颜色,其1值不一定相等。(3)应用领域等随着计算机应用技术的不断发展.利用计算机进行辅助设计越来越普及。比如在印前制版技术领域中引入计算机技术。把自然景观与任何照片组合成新的图像。再通过激光打印机印出后,便可以转印T恤或其它器皿上,制作出周文并茂、彩色靓丽的作品。并可实现直接输出制版一次完成。要用计算机创作、编辑具有高度真实感的图形图像。就必须对颜色进行深入地探讨。因为颜色能够激发人的感情,它产
6、生对比效果,使得图像显得更加美丽。表现颜色的方法有很多种,根据用途划分可分为不同的颜色模型。不同颜色的划分会使图像表现出不同的色彩效果。只有掌握了一定的颜色原理,通过不断的实践,才能对图像的创作、编辑等操作自如,才能创作出完美的作品。RGB模型面向硬件,与直观的颜色没有直接联系。所以,RGR与H1V之类的视觉模型之间的转换显得尤为重要。RGB模型之中数值的改变不能直观的表现图像属性的改变。而H1V等一些视觉模型,根据图片的色彩、饱和度、亮度等属性设定,改变数值即可相应改变所需改变的图像属性。例如当要改变一幅图片的亮度,却不希望改变它的色调和饱和度时,我们就必须借助于RGB和川,S之间的转换,通
7、过改变1值来实现,而不能通过改变RGB中任何一值改变这一重要属性。2.RGB与H1S模型转换方法(1) RGB至IJH1S1:亮度随着R、G、B的改变,且变化是不均匀的。亮度只依赖于R、G、B的最大值和最小值。若令M、N分别是R、G、B的最大值和最小值。则有:亮度1为1=(M+N)/2S:对于饱和度S同样有这样的性质:当M或N改变时S随着改变;否则,S不变。即S只与M、N有关,所以也可以说S与1有关。当M=N时,即R,G,B三值相等时,S=O;当(M+N)=1时,S=(M-N)/(M+N)否则,饱和度为:S=(M-N)/(2-MN)H:同样,H也只与最大值和最小值有关。当RGB的最大最小值相等
8、,即M=N时,H无定义。当最大值为红色时,即R=M时,H有H=60*(g-b)/(M-N);当最大值为绿色时,即G=M时,H有H=60*(2+(b-r)/(M-N);当最大值为蓝色时,即B=M时,H有11=60*(4+(r-g)/(M-N);此公式应注意,最后判断H是否为正数,否则需加360.(2) H1S到RGBS=O,H无定义时,R,G,B相等,且按1值取相应不同值;10.5时,处于模型下半锥,设m2=1*(1+s);否则,上半锥时m2=1+sT*s;再设m1=2*1-m2;其余情况,由于色差为180度,所以:r=va1ue(m1,m2,h+120);g=va1ue(m1,m2,h);b=
9、va1ue(m1,m2,h-120);其中va1ue(a,b,C)定义为:若C大于360或小于0,便减或加360,使其处于0,360,则:c60,v=n1+(n2-n1)*hue60;c180,v=n2;c240,v=n1+(n2-n1)*(240-hue)/60;否则,v=n1;(3)更严谨的算法(摘自:图像处理中RGB与H1S之间的转换杨朝霞遢峰)若M=O,即R、G、B均为零时,1-0;否则,亮度1为1=(F(M)+F(N)/2(1)其中F(X)=X(X+8)17(当XWO时)。它表示的是当R、G、B三者之中只有一个不为零而其余的为零时,所具有的亮度。由公式(1)知,1的取值在0到240之
10、间。对于饱和度S同样有这样的性质:当M或N改变时S随着改变;否则,S不变。即S只与M、N有关,所以也可以说S与1有关,因此,仍将S定义在0到240之间。实验发现,当颜色为纯黑或纯白,即M=O或N=255时,S没定义。否则,当M=255或者N=O时,S为最大,即240;而当M=N时,S为最小,即0。因此,我们有当M=O或N:255时,S没定义。否则,当(M+N)256时,饱和度为S=240(M-N)/(M+N)(2)当(M+N)256时,饱和度为S=240(M-N)/(510M-N)(3)同样,H也只与最大值和最小值有关,其定义域也在0到240之间。当RGB的最大最小值相等,即M=N时,H无定义
11、。当最大值为红色,最小值为蓝色,即B=N且R=M时,H介于0到40之间,于是有H=40(G-N)/(M-N)(4)当最大值为绿色,最小值为蓝色,即B=N且G=M时,H介于40到80之间,有H=40+40(MR)/(MN)(5)当最大值为绿色,最小值为红色,即R=N且G=M时,H介于80到120之间,有H=80+40(B-N)/(M-N)(6)当最大值为蓝色,最小值为红色,即R=N且B=M时,H介于120至J160之间,有H=I20+40(M-G)/(M-N)(7)当最大值为蓝色,最小值为绿色,即G=N且B3时,H介于160到200之间,有H=160+40(R-N)/(M-N)(8)当最大值为红
12、色,最小值为绿色,即G=N且R=M时,H介于200到240之间,有H=20+40(M-B)/(MN)(9)上面介绍了RGB到H1S的推算过程,现在来介绍若知道了H1s,如何反算出RGB。由上一部分的公式,我们可以很容易知道要想求R、G、B的值,须先求最大值、最小值之和。但要注意的是,由上可知当H无定义时,表示R、G、B三者相等,因此,它们的值可以直接由公式(1)求出,即当1=O时,R=G=B=O,否则,R=G=B=(171,-8)/16而当H有定义时,令SUM为M与N之和,由(1)知,若1=O时,则SUM=0,否则SUM=f34I-16)/16又由公式知,若SUMB=N、R=G+(G-B)(H
13、-40)/40若1=2,则G=M、R=N、B=R+(G-R)(H80)/40若1=3,则B=M、R=NG=B+(B-R)(H-120)/40若1=4,则G=N、B=M、R=G+(B-G)(H160)/40若1=5,则R=M,G=N、B=R+(R一G)(H-200)/403.源代码根据书上算法伪代码编写,完善了一些操作,修改了一些地方。算法代码:(1)RGBTOH1S:voidRGi1TOJ1S()*knornr,g,ba11in0,1find:hin0,360,1andsin0,1,exceptifs=0,thenh=undefined*/(f1oatm,n,de1ta;charx;f1oat
14、r,g,b,h,1,s;c1rscr();menu2(1);*输入RGB值*/PrintfCR=);scanf(%f,&r);x=getchar();printf(*%c*,x);PrintfCG=);scanf(%f,&g);x=getchar();printf(*%c*,x);printf(,B=);scanf(%f,&b);x=getchar();printf(%c,x);m=max3(r,g,b);n=min3(r,g,b);1=(m+n)/2;*r,g,b相等时,色调、饱和度不变,仅亮度不同,颜色由白到黑*/if(m=n)(s=0;h=undefined;)/*否则,计算H1S相应数值*/e1se(if(1=0.5)s=(m-n)/(m+n);e1ses=(m-n)(2-m-n);de1ta=m-n;if(r=m)h=(g-b)/de1ta;e1seif(g=m)h=2+(b-r)/de1ta;e1seif(b=m)h=4+(r-g)/de1ta;h=h*60;if(hO.0)h=h+360;)Printf(*nTheH5n);printf(H=%.3f,1=%.3f,S=%.3fn”,h,1,s);*转换成0-240范围,以便验证*/Printf(n*AfterChange*n);pr