第7章 颜色空间变换
7.1 该用什么颜色空间
7.1.1 颜色空间的分类问题
7.1.2 颜色空间的变换问题
7.1.3 什么颜色空间适合我
7.2 计算机图形颜色空间
7.2.1 RGB,CMY和CMYK
7.2.2 HSV和RGB
7.2.3 HSL/HSB和RGB
7.2.4 HSI和RGB
7.3 设备无关的颜色空间
7.3.1 CIE XYZ和CIELAB
7.3.2 CIE XYZ和CIELUV
7.3.3 CIE XYZ和RGB,BT.601,BT.709
7.4 电视系统颜色空间
7.4.1 电视系统的颜色空间
7.4.2 European Y'U'V'
7.4.3 American Y'I'Q'
7.4.4 SMPTE-C RGB
7.4.5 ITU-R BT.60Y'CbCr
7.4.6 ITU-R BT.709 Y'CbCr
7.4.7 SMPTE-240M Y'PbPr
7.4.8 Kodak PhotoYCC颜色空间练习与思考题参考文献和站点
最近一百多年以来,为了满足各种不同用途的需求,人们已经开发了许多不同名称的颜色空间,尽管目前几乎所有的颜色空间都是从RGB颜色空间导出的,但随着科学和技术的进步,人们还在继续开发形形色色的颜色空间。可以说表示颜色的颜色空间的数目是无穷的,而且可以说,现有的颜色空间还没有一个完全符合人的视觉感知特性、颜色本身的物理特性或者发光物体和光反射物体的特性。
本章选择了几种使用比较普通且与多媒体技术密切相关的颜色空间,介绍它们之间的转换关系。在所介绍的这些颜色空间中,有些颜色空间彼此之间可直接转换,有些则要通过与设备无关的颜色空间进行转换。各种不同颜色空间之间进行转换的目的各不相同,有的是为了艺术家选择颜色的方便,有的是为了减少图像的数据量,有的是为了满足显示系统的要求。这就要求我们正确地选择颜色空间和颜色空间之间的转换关系,或者自己开发适合特定用途的颜色空间。
需要注意的是,本章介绍的变换算法和其中的系数虽然参照了许多文献之后选择的,笔者也用MATLAB 6.0软件对某些数据进行过核实和校正,但教材中引用的物理数据却没有条件逐一加以验证。因此,由这些物理数据导出的矩阵中的变换系数不一定能保证满足你的需求,有些文献或者应用软件中使用的方法和系数也可能与本章介绍的方法和系数有所不同。可以说,在颜色空间变换中目前也许还没有绝对准确的变换系数。
7.1 该用什么颜色空间
7.1.1 颜色空间的分类问题探讨颜色空间的分类问题,目的是为了借鉴前人开发颜色空间的思路,以便我们更好地利用现有的颜色空间,或者改进现有颜色空间存在的问题,同时也为了我们开发新的颜色空间打下基础。
颜色空间数不胜数,如何对这些颜色空间进行分类,笔者目前还没有看到一个准确的分类原则和方法,但可考虑从颜色的感知角度、技术角度或者从应用角度来进行分类。
从颜色感知的角度来分类,颜色空间可考虑分成如下三类:
(1) 混合(mixture)型颜色空间:按三种基色的比例合成颜色。例如,RGB,CMY(K)和XYZ等颜色空间就属于这种类型。
(2) 非线性亮度/色度(luma/chroma)型颜色空间:用一个分量表示非色彩的感知,用两个独立的分量表示色彩的感知。当需要黑白图像时,这样的系统非常方便。例如,L*a*b,L*u*v,YUV和YIQ就属于这种类型。
(3) 强度/饱和度/色调(intensity/saturation/hue)型颜色空间:用饱和度和色调描述色彩的感知,可使颜色的解释更直观,而且对消除光亮度的影响很有用。例如,HSI,HSL,HSV和LCH等。
从技术上角度区分,颜色空间可考虑分成如下三类:
(1) RGB型颜色空间/计算机图形颜色空间:这类模型主要用于电视机和计算机的颜色显示系统。例如,RGB,HSI,HSL和HSV等颜色空间。在显示技术和印刷技术中,颜色空间经常被称为颜色模型(color mode)。在笔者看来,“颜色空间”似乎侧重于颜色的表示,而“颜色模型”似乎侧重于颜色的生成。
(2) XYZ型颜色空间/CIE颜色空间:这类颜色空间是由国际照明委员会定义的颜色空间,通常作为国际性的颜色空间标准,用作颜色的基本度量方法。国际照明委员会定义的颜色空间是与设备无关的颜色表示法,在科学计算中得到广泛应用。对不能直接相互转换的两个颜色空间,可利用这类颜色空间作为过渡性的颜色空间,例如,CIE 1931 XYZ,L*a*b,L*u*v和LCH等颜色空间就可作为过渡性的转换空间。
(3) YUV型颜色空间/电视系统颜色空间:由广播电视需求的推动而开发的颜色空间,主要目的是通过压缩色度信息以有效地播送彩色电视图像。例如,YUV,YIQ,ITU-R BT.601 Y'CbCr,ITU-R BT.709 Y'CbCr和SMPTE-240M Y'PbPr等颜色空间。
按照上述观点对颜色空间进行的分类综合在表7-01中。这样分类虽然并不很科学,也不是绝对的,但对颜色空间的认识多少会有些帮助。
表7-01 颜色空间的分类
类型
RGB型
XYZ型
YUV型
混合型(mixture)
RGB
XYZ
-
非线性亮度/色度(luma/chroma)
-
L*a*b*,L*u*v*
YUV,YIQ
强度/饱和度/色调
(intensity/saturation/hue)
HSI,HSL,HSV
LCH/CHL
7.1.2 颜色空间的变换问题颜色空间的变换是一个比较复杂的问题。虽然几乎所有的颜色空间都是从RGB颜色空间导出的,数值计算也并不复杂,但因为这种变换涉及到视觉感知特性、光和物体的特性,也因此对计算模型产生了不同程度的怀疑。这种怀疑的主要来源是对视觉感知特性还不十分清楚。尽管如此,人们还是需要在各种不同的颜色空间之间进行转换,以满足不同应用的需求。有些是为了艺术家选择颜色的方便,有些是为了减少图像的数据量,有些是为了满足显示系统的要求。
图7-01描绘了常见颜色空间之间的变换关系。从图中可以看到:
(1) 有些颜色空间之间可以直接变换。例如,RGB和HSL,RGB和HSB,RGB和R'G'B',R'G'B'和Y'CrCb,CIE XYZ和CIE L*a*b*等。
(2) 有些颜色空间之间不能直接变换。例如,RGB和CIE La*b*,CIE XYZ和HSL,HSL和Y'CbCr等,它们之间的变换需要借助其他颜色空间进行过渡。

图7-01部分颜色空间的转换关系
7.1.3 什么颜色空间适合我为了回答这个问题,在此将常见颜色空间的主要特性作一个简单介绍,以供你选择颜色空间作一个参考。
1,RGB与CMY颜色空间
RGB(red,green and blue)是在三基色理论基础上开发的相加混色颜色空间。使用RGB生成颜色容易实现,因此在使用阴极射线管(CRT)的图像显示系统中得到广泛的应用。RGB颜色空间是与设备相关的,视觉对颜色的感知是非线性的,而且颜色的指定并不直观。
CMY(cyan magenta yellow)也是在三基色理论基础上开发的颜色空间,不过它是相减混色颜色空间。该空间主要用在印刷和打印系统。CMYK(cyan magenta yellow black)中的黑色是为改善打印质量而增加的颜色分量。使用CMY(K)生成颜色容易实现,但把RGB颜色空间表示的颜色正确地转换到CMY(K)空间不容易。CMY(K)颜色空间是与设备相关的,视觉对颜色的感知是非线性的,而且颜色的指定也不直观。
2,计算机图形颜色空间
HSV(hue,saturation and value),HSL/HLS(hue,saturation and lightness),HSI(hue,saturation and intensity),HSB(hue,saturation and brightness),HCI(hue,chroma/colourfulness,intensity)和HVC (hue,value and chroma)等都是类似的颜色空间,它们都是从RGB颜色空间变换而来的,而且都是与设备相关的颜色空间。它们的优点是指定颜色方式非常直观,很容易选择所需要的色调(颜色),稍微调整它的饱和度和亮度就可改变颜色。这些颜色空间都是想把亮度从颜色信息中分离出来,这种假想的分离似乎在应用(如像图像处理)中有些优点,而且每一种颜色空间都声称比其他的好。
HSV,HSL/HLS,HSI,HSB,HCI,HVC等颜色空间是一种以色调为基础的颜色空间。这些颜色空间在计算机应用软件中得到广泛应用。例如,Photoshop采用的颜色空间是HSB,Apple Color Picker中用的颜色空间是HSL。它们之间除了光亮度和明度的取值范围有所差别之外,如HSL中用光亮度(lightness),而HSB中用明度(brightness),其他都基本相同。由于这些颜色空间中的颜色分量值几乎都是直接从RGB导出的,因此它们之间的转换关系都很直观。虽然RGB模型很适合用于计算机的外部设备,例如监视器和扫描仪,但它用于编辑颜色时就显得不直观。此外,这些颜色空间只是把色调、饱和度和亮度/明度的次序进行重新排列或者重新标记,没有实质性的变化。但在使用之前需要对它们的含义和可能的取值范围搞清楚。
许多计算机应用软件采用的颜色空间与Munsell系统紧密相关,HBS就是其中的一例。它的饱和度(saturation)与Munsell中的色度(chroma)相对应,而明度(brightness)与颜色的值(value)相对应。要注意的是,不像Munsell系统在感觉上是均匀的,在HSB系统中颜色之间的距离与视觉感知是非均匀的。虽然HSB和Munsell的HVC都是根据相同的想法开发的,但它们所采用的表示符号不同。在HSB系统中,色调沿颜色圆从,饱和度和明度都用百分比表示,从0%~100%。在Munsell的HVC系统中,色调虽然用角度,但用“2.5R”这样的符号表示从红色开始算起的色调为2.5级(step),Munsell的值和色度(相应于明度和饱和度)都用0~10的数字表示。
3,电视系统颜色空间
YUV,YIQ,Y'CbCr/Y'Cb'Cr',Y'PbPr/Y'Pb'Pr'和YCC等颜色空间是为电视系统开发的。这些颜色空间是亮度和色度(luminance-chrominance)分离的电视播送颜色空间(television transmission color spaces)。
YUV是PAL和SECAM模拟彩色电视制式采用的颜色空间,其中的YUV不是那几个英文单词的组合词,而是符号,Y表示亮度,UV用来表示色差,U、V是构成彩色的两个分量;YIQ是NTSC模拟彩色电视制式采用的颜色空间,其中的Y表示亮度,I、Q是两个彩色分量;Y'CbCr和Y'PbPr是数字电视采用的标准,在ITU-R BT.601和BT.709等推荐标准中有明确的定义。无论是数字的还是模拟的颜色空间,这些颜色空间都把RGB颜色空间分离成亮度和色度,目的是为了更有效地压缩图像的数据量,以便充分利用传输通道的带宽或者节省存储容量。这些颜色空间都是与设备相关的,而且在闭环系统中的使用条件也相当严格。
现以YUV为例。YUV表示法的重要性是它的亮度信号(Y)和色度信号(U,V)是相互独立的,也就是Y信号分量构成的黑白灰度图与用U,V信号构成的两幅单色图是相互独立的。由于Y,U和V是独立的,所以可以对这些单色图分别进行编码。此外,黑白电视能接收彩色电视信号也就是利用了YUV分量之间的独立性。
YUV表示法的另一个优点是可以利用人眼的特性来降低数字彩色图像所需要的存储容量。人眼对彩色细节的分辨能力远比对亮度细节的分辨能力低。若把人眼刚刚能分辨出的黑白相间的条纹换成不同颜色的彩色条纹,那么眼睛就不再能分辨出条纹来。由于这个原因,就可以把彩色分量的分辨率降低而不明显影响图像的质量,因而就可以把几个相邻像素不同的彩色值当作相同的彩色值来处理,从而减少所需的存储容量。例如,要存储RGB 8∶8∶8的彩色图像,即R,G和B分量都用8位二进制数表示,图像的大小为640×480像素,需要的存储容量为921 600字节。如果用YUV来表示同一幅彩色图像,Y分量仍然为640×480,并且Y分量仍然用8位表示,而对每四个相邻像素(2×2)的U,V值分别用相同的一个值表示,那么存储同样的一幅图像所需的存储空间就减少到460 800字节。这实际上也是图像压缩技术的一种方法。
使用YIQ和Y'CrCb等颜色空间的道理与使用YUV的道理相同。
7.2 计算机图形颜色空间
7.2.1 RGB,CMY和CMYK
RGB(red,green and blue)和CMY(cyan,magenta and yellow)是最流行的颜色空间,它们都是与设备相关的颜色空间,前者用在显示器上,后者用在打印设备上。RGB称为相加混色是因为它使用不同数量的红、绿和蓝三种基色相加而产生颜色,而CMY称为相减混色是因为白光中减去不同数量的青、品红和黄三种颜色而产生颜色。
在印刷设备中,黑色分量加到CMY空间,因此,形成另一种颜色空间,叫做CMYK(cyan,magenta,yellow and black)。为把RGB转换成印刷用的CMY时,最简单的方法是把RGB转换到CIE XYZ,然后再从CIE XYZ转换到CMY(K)。
在质量要求不高仅求转换简单的情况下,RGB和CMY(K)这两个颜色空间之间可考虑使用下面所述的转换关系进行转换。
1,RGB和CMY
(1) RGB→CMY
 (7.2.1-1)
其中,的取值范围是[0,1]。
procedure CMY_to_RGB(C,M,Y:real; var R,G,B:real);
begin
R:=1-C;
G:=1-M;
B:=1-Y;
end;
(2) CMY→RGB
 (7.2.1-1')
其中,的取值范围是[0,1]。
Procedure RGB_to_CMY(R,G,B:real; var C,M,Y:real);
begin
C:=1-R;
M:=1-G;
Y:=1-B;
end;
2,CMY和CMYK
(1) CMY→CMYK
 (7.2.1-2)
(2) CMYK→CMY
 (7.2.1-2')
在有些应用软件中,上面描述的转换关系有所不同,需要参阅公司的相关文献才能明白其原因。
3,RGB和CMYK
(1) RGB→CMYK
 (7.2.1-3)
(2) CMYK→RGB
 (7.2.1-3')
7.2.2 HSV和RGB
HSV(hue,saturation and value)是根据颜色的直观特性由A,R,Smith在1978年创建的一种颜色空间,也称六角锥体模型(hexcone model),如图7-02所示。在这个颜色空间中,
色调:用角度度量,取值范围为0o~360o。从红色开始按逆时针方向计算,红色为0o,绿色为120o,蓝色为240o。它们的补色是:黄色为60o,青色为180o,品红为300o。
饱和度:取值范围为0.0~1.0。
亮度值:取值范围为0.0(黑色)~1.0(白色)。
纯红色是;表示非彩色,在这种情况下,色调未定义。当的范围都是0.0~1.0时,这些值常用8位表示,它们的值用0~255之间的整数。

图7-02 HSV颜色空间自从HSV颜色空间出现之后,已经出现了几种大同小异的RGB和HSV颜色空间之间的转换算法,它们之间没有转换矩阵,但可对算法进行描述。这两个颜色空间之间的转换算法和程序在因特网上可以找到,本节引用的算法引自:
http://www.realtime.ru/wwwboard/messages/120.html
本节引用的程序引自:
http://www.cis.ksu.edu/~seteam20/
1,RGB到HSV的转换
(1) RGB→HSV (Travis)算法描述
Given RGB values,find the max and min,
V = max
S = (max-min) / max
If S = 0,H is undefined
else
R1 = (max-R) / (max-min)
G1 = (max-G) / (max-min)
B1 = (max-B) / (max-min)
if R = max and G = min, H = 5 + B1
else if R = max and G not= min,H = 1 - G1
else if G = max and B = min,H = R1 + 1
else if G = max and B not=main,H = 3 - B1
else if R = max, H = 3 + G1
else H = 5 - R1
H = H*60 (converts to degrees so S and V lie between 0 and 1,H between 0 and 360)
(2) RGB→HSV(Foley and VanDam)算法描述
max = maximum of RGB
min = minimum of RGB
V = max
S = (max - min) / max
if S = 0,H is undefined,
else delta = max-min
if R = max,H = (G-b)/delta
if G = max,H = 2 + (B-R)/delta
if B = max,H = 4 + (R-G)/delta
H = H*60
if H < 0,H = H + 360
2,HSV到RGB的转换
(1) HSV→RGB (Travis)算法描述
Convert H degrees to a hexagon section
hex = H / 360
main_colour = int(hex)
sub_colour = hex - main_colour
var1 = (1-S)*V
var2 = (1 -(S * sub_colour)) * V
var3 = (1 -(S * (1 - sub_colour))) * V
then
if main_colour = 0,R = V,G = var3,B = var1
if main_colour = 1,R = var2,G = V,B = var1
if main_colour = 2,R = var1,G = V,B = var3
if main_colour = 3,R = var1,G = var2,B = V
if main_colour = 4,R = var3,G = var1,B = V
if main_colour = 5,R = V,G = var1,B = var2
where int(x) converts x to an integer value.
(2) HSV→RGB (Foley and VanDam)算法描述
if S = 0 and H = undefined,R = G = B = V
if H = 360,H = 0
H = H / 60
i = floor(H)
f = H - I
p = V*(1-S)
q = V*(1-(S*f))
t = V*(1 - (S * (1-f)))
if i = 0,R = v,G = t,B = p
if i = 1,R = q,G = v,B = p
if i = 2,R = p,G = v,B = t
if i = 3,R = p,G = q,B = v
if i = 4,R = t,G = p,B = v
if i = 5,R = v,G = p,B = q
where floor is the C floor function,
7.2.3 HSL/HSB和RGB
HSL(hue,saturation and lightness)/HSB(hue,saturation and brightness)颜色空间用于定义台式机图形程序中的颜色,而且它们都是利用三条轴定义颜色。HSL与HSV很相似,都是用六角形锥体表示颜色。与HSV相比,HSL采用光亮度(lightness)作坐标,而HSV采用亮度(luminance)作标准值,而且HSL颜色饱和度最高时的光亮度L定义为0.5,而HSV颜色饱和度最高时的亮度值则为1.0。

图7-03 HSL颜色空间
RGB和HSL之间的转换关系要追溯到Addison-Wesley公司在1982年出版的一本书:Fundamentals of Ineractive Computer Graphics。书的作者Foley和van Dam在17章中对RGB和HSL之间的转换算法作了描述,现摘要如下。
1,RGB→HSL的算法描述步骤1,把RGB值转换成[0,1]中数值例:R=0.83,G=0.07,B=0.07
步骤2,找出R,G和B中的最大值本例中,maxcolor = 0.83,mincolor=0.07
步骤3,L = (maxcolor + mincolor)/2
本例中,L = (0.83+0.07)/2 =0.45
步骤4,如果最大和最小的颜色值相同,即表示灰色,那么S定义为0,而H未定义并在程序中通常写成0。
步骤5,否则,测试L,
If L < 0.5,S=(maxcolor-mincolor)/(maxcolor+mincolor)
If L >=0.5,S=(maxcolor-mincolor)/(2.0-maxcolor-mincolor)
本例中,L=0.45,因此,S=(0.83-0.07)/(0.83+0.07) = 0.84
步骤6,If R=maxcolor,H = (G-B)/(maxcolor-mincolor)
If G=maxcolor,H = 2.0 + (B-R)/(maxcolor-mincolor)
If B=maxcolor,H = 4.0 + (R-G)/(maxcolor-mincolor)
本例中,R=maxcolor,所以H = (0.07-0.07)/(0.83-0.07) = 0
步骤7,从第6步的计算看,H分成0~6区域。RGB颜色空间是一个立方体,而HSL颜色空间是两个六角形锥体,其中的L是RGB立方体的主对角线。因此,RGB立方体的顶点:红、黄、绿、青、蓝和品红就成为HSL六角形的顶点,而数值0~6就告诉我们H在哪个部分。H用[0o,360o]中的数值表示,因此,
H = H*60.0
如果H为负值,则加360o。
(算法引自:http://blas.cis.mcmaster.ca/~monger/hsl-rgb.html )
2,HSL→RGB的算法描述步骤1: If S=0,表示灰色,定义R,G和B都为L
步骤2: 否则,测试L:
If L < 0.5, = L*(1.0+S)
If L >= 0.5, = L+S - L*S
例如,如果H=120,S=0.79,L=0.52,则,
 = (0.52+0.79) - (0.52*0.79) = 0.899
步骤3:  = 2.0*L - 
在本例中, = 2.0*0.52 - 0.899 = 0.141
步骤4: 把H转换到0~1
在本例中,H=120/360 = 0.33
步骤5: 对于R,G,B,计算另外的临时值。方法如下:
for R, = H+1.0/3.0
for G, = H
for B, = H-1.0/3.0
if  < 0, =  + 1.0
if  > 1, =  - 1.0
在本例中,
 = 0.33+0.33 = 0.66, = 0.33,= 0.33-0.33=0
步骤6: 对于R,G,B,做如下测试:
If 6.0* < 1,color = +(-)*6.0*
Else if 2.0* < 1,color = 
Else if 3.0* < 2,
color = +(-)*((2.0/3.0) -3)*6.0
Else color = 
在本例中,
3.0* < 2,因此 R=0.141+(0.899-0.141)*((2.0/3.0-0.66)*6.0=0.141
2.0* < 1,因此 G=0.899
6.0* < 1,因此 B=0.141+(0.899-0.141)*6.0*0=0.141
(算法引自:http://blas.cis.mcmaster.ca/~monger/hsl-rgb.html )
7.2.4 HSI和RGB
HSI(Hue,Saturation and Intensity)颜色空间也是一种直观的颜色模型。色调H用角度表示,例如红橙黄绿青蓝紫等色调,角度从(红)→(绿)→(蓝)→(红);颜色的纯度即饱和度分成低(0%-20%)中(40%-60%)和高(80%-100%),低饱和度产生灰色而不管色调,中饱和度产生柔和的色调(pastel),高饱和度产生鲜艳的颜色(vivid color);强度是颜色的明度,取值范围从0%(黑)~100%(最亮)。强度也指亮度(luminance)或者光亮度(lightness)
1,RGB→HSI (Gonzalez and Woods)算法描述
RGB→HSI(Gonzalez and Woods)的算法如下:
I = 1/3(R+G+B)
S = 1 - (3/(R+G+B))*a //其中的a=min(R,G,B)
H = cos^(-1)((0.5*((R-G)+(R-B))) / ((R-G)^2 + (R-B)*(G-B))^(0.5))
If S = 0,H=0 //表示H无意义
If (B/I) > (G/I) then
H = 360–H //H用角度表示,并用H=H/360进行标称化处理?
2,HSI→RGB算法描述
HSI→RGB(Gonzalez and Woods)的算法如下:
首先用H=360*H把H换算成用角度表示。
If 0 < H <= 120 then?
B = 1/3(1-S)
R = 1/3(1+ ((S cos H) / (cos(60 - H))))
G = 1 - (B+R)
If 120 < H <= 240 then
H = H – 120
R = 1/3(1-S)
G = 1/3(1+ ((S cos H) / (cos(60 - H))))
B = 1 - (R+G)
If 240 < H <= 360 then
H = H – 240
G = 1/3(1-S)
B = 1/3(1+ ((S cos H) / (cos(60 - H))))
R = 1 - (G+B)
7.3 设备无关的颜色空间
7.3.1 CIE XYZ和CIELAB
1,CIE XYZ→CIE L*a*b*
CIE 1976 L*a*b*是直接从CIE XYZ导出的颜色空间,企图对色差的感知进行线性化。颜色信息以白光点作参考,用下标“n”表示。CIE XYZ到CIE L*a*b*的转换关系为,



其中,是参考白光的三色刺激值,而

2,CIE L*a*b*→CIE XYZ
对于Y/Yn > 0.008856,从CIELAB到CIE XYZ空间的变换可用下式计算,

其中,

7.3.2 CIE XYZ和CIELUV
CIE 1976 L*u*v*(CIELUV)是直接从CIE XYZ空间导出的颜色空间,并且是对色差感知进行线性化的另一种努力。
1,CIE XYZ→CIELUV


其中,是与光源有关的值。在观察者和C光源的情况下,,。用代入

2,CIELUV→CIE XYZ
从到的转换关系如下:

从CIELUV到CIE XYZ的变换如下,

7.3.3 CIE XYZ和RGB,BT.601,BT.709
1,RGB和CIE xyY
在RGB颜色空间变换到CIE xyY空间时,CIE xyY色度图中的红、绿和蓝的坐标定义为,
对于红色
对于绿色
对于蓝色
定义白光点坐标时使,于是
 (7.3.3-1)
其中,是比例系数。在CIE xyY色度图中,的坐标已经定义为,于是

因此,式(7.3.3-1)就可变成,
 (7.3.3-2)
由于都是可提供的已知数,因此根据上面的矩阵式就可求得。
2,BT.601和CIE xyY
国际电信联盟(International Telecommunication Union,ITU)定义了几个推荐标准,最流行的是ITU-R BT.601(前称CCIR 601-1)和ITU-R BT.709(前称CCIR 709)。BT.601-1是旧的NTSC制使用的标准,它使用CIE定义的一种标准光源,叫做“光源C(illuminant C)”,用钨丝光源并通过滤波来模拟普通日光,色温是6774°K,波长范围是380~770 nm。白色在CIE xyY色度图中的坐标是,红、绿和蓝的坐标分别是红:
绿:
蓝:
根据这些数据可计算得到




将以上数据代入(7.3.3-2)式可得到

最后,我们可得到BT.601在光源C下由RGB到CIE xyY空间的变换关系

一般情况下精确到小数点后面3位,于是,
 (7.3.3-3)
对上面的变换式进行逆变换,可得到由CIE xyY到RGB空间的变换关系,
 (7.3.3-3')
3,BT.709和CIE xyY
另一个普遍使用的推荐标准是BT.709,它使用的标准光源是D65,下标表示相关的色温,65表示相关色温是6504°K,它的坐标为,红、绿和蓝的色度坐标如表7-02所示。
表7-02 基色和白光坐标





0.640
0.300
0.150
0.3127

0.330
0.600
0.060
0.3290

0.030
0.100
0.790
0.3582
也就是红:
绿:
蓝:
根据上面的数据可得到RGB空间到CIE xyY空间的转换关系,

一般情况下精确到小数点后面3位,于是,
 (7.3.3-4)
对上面的变换式进行逆变换,可得到由CIE xyY到RGB空间的变换关系,
 (7.3.3-4')
最近几年,ITU-R介绍了新的推荐标准,对RGB颜色空间中绿色坐标作了变动,但标准白光电仍然是D65,坐标为,RGB的色度坐标是红:
绿:
蓝:
根据上面的数据可得到RGB空间到CIE xyY空间的转换关系,

一般情况下精确到小数点后面3位,于是,
 (7.3.3-5)
对上面的变换式进行逆变换,可得到由CIE xyY到RGB空间的变换关系,
 (7.3.3-5')
需要注意的是,以上介绍的变换是与具体设备相关的。
7.4 电视系统颜色空间
7.4.1 电视系统的颜色空间自从电视发明以来,为了更有效地压缩图像的数据量以充分利用传输通道的带宽或者节省存储空间,人们开发了许多颜色空间。例如,模拟NTSC彩色电视制式采用的YIQ颜色空间,PAL和SECAM彩色电视制式采用的YUV颜色空间,数字电视系统则采用的YCrCb或者Y'PbPr颜色空间。这些颜色空间都是要把用RGB颜色空间表示的电视图像转换成用其他颜色空间表示的图像。
另一方面,现在所有的彩色显示器都采用RGB值来驱动,这就要求在显示每个像素之前必须把其他颜色模型中的颜色分量值转换成RGB模型中的R,G和B分量。由于显示电视图像用的CRT(cathode-ray tube)的发光强度与它的输入电压之间不是线性关系,因此就需要在信号到达显示器之前对信号进行非线性变换。
图7-04 表示电视系统用的颜色空间。图7-4中的0.5表示摄像机的值,2.5表示普通CRT的理论值。在NTSC制中,CRT的指定为2.2;在PAL制中,指定为2.8。但实际上,CRT的为2.35。
线性的XYZ或者R1G1B1使用3×3变换矩阵M得到一个线性的RGB空间,通过非线性函数对每个颜色分量进行变换(校正),把线性的R,G和B变成了非线性的R',G'和B'信号,再用一个3×3色差编码矩阵M得到非线性的色差分量。例如,Y'CrCb,Y'PbPr或者PhotoYCC颜色空间中的非线性色差分量。如果需要,可使用颜色子采样滤波器得到经过子采样的色差分量。
经过各种变换之后的颜色分量通过通信通道传送对接收方,或者存储到存储器中。显示图像时,按照图中所示的从右到左的方向进行变换。

图7-04 电视系统的颜色空间顺便要指出的是表示颜色空间中分量信号的符号。对同一个分量(例如亮度分量),有些文献和资料使用带“'”(例如Y')记号,有些使用不带“'”(例如Y)的记号。因此读者需要留心作者所指的含义。例如在彩色电视制中,YIQ应该表示没有经过校正的线性颜色信号组成的颜色空间,而Y'I'Q'则应该表示经过校正的非线性信号组成的颜色空间,但在许多文章和教科书中也没有加以区分。本教材使用带“'”表示非线性的信号或者由非线性信号组成的颜色空间,不带“'”表示线性信号或者由线性信号组成的颜色空间。但也有例外,例如Y'CrCb和Y'PbPr的正确符号应该是Y'Cr'Cb'和Y'Pb'Pr',但往往把色差分量的“'”省略了。
7.4.2 European Y'U'V'
Y'U'V'是European Y'U'V'的简称。欧洲彩色电视(PAL和SECAM)制使用这种颜色空间。Y'与感知亮度类似,但U'和V'携带的信号是颜色和部分亮度信号,这两个符号(U'和V')的含义与CIE 1960 YUV不同。
Y'U'V'是欧洲广播联盟(European Broadcasting Union,EBU)制定的规范。在这个规范中,Y'的带宽在欧洲是5 MHz,而在英国是5.5 MHz。在亮度和色差分离的电视系统中,U'和V'信号分量有相同的带宽。它们的带宽可以高达2.5 MHz,但在家用录像系统(video home system,VHS)中也可以低到600 kHz或者更低。CRT的通常假设为2.8,但摄像机的在所有系统中几乎都有相同的值,大约为0.45,现提高到0.5。与ITU-R BT.601不同,Y'U'V'颜色空间采用的光源标准是“光源D”(illuminants D),叫做D65,而不是“光源C”,它的色度坐标是,

红、绿和蓝的坐标分别是红:
绿:
蓝:
1,EBU RGB和CIEXYZ
根据以上数据,可计算得到RGB和CIE XYZ颜色空间之间线性信号的转换关系,
 (7.4.2-1)

 (7.4.2-1')
2,Y'U'V'和R'G'B'
在Y'U'V'颜色空间中,定义两个色差信号分别为

由此导出R'G'B'和Y'U'V'颜色空间之间非线性信号的转换关系,
 (7.4.2-2)

 (7.4.2-2')
请注意,许多文献使用而不用表示经过校正的非线性亮度和色差。
3,BT.709 RGB和EBU RGB之间的关系
ITU-R推荐标准使用的线性BT.709 RGB信号与EBU RGB信号之间的转换关系如下,
 (7.4.2-3)

 (7.4.2-3)
7.4.3 American Y'I'Q'
Y'I'Q'颜色空间用在北美的模拟NTSC彩色电视系统中。其中的Y'与感知亮度类似,I'和Q'分量信号携带颜色信息和部分亮度信息。这个颜色空间中的I'和Q'分量信号与Y'U'V'颜色空间中的U'和V'分量信号有如下关系,


在Y'I'Q'颜色空间中,Y'信号的带宽为4.2 MHz,而I'和Q'信号早期使用的带宽分别为0.5 MHz和1.5 MHz,而现在通常使用相同的带宽,均为1 MHz。在NTSC彩色电视系统中,CRT的通常假设为2.2。在这个颜色空间中,采用的光源是光源C,它的色度坐标是

红、绿和蓝的坐标分别是红:
绿:
蓝:
1,NTSC RGB和CIE XYZ
根据以上数据,可计算得到RGB和CIE XYZ颜色空间之间线性信号的转换关系,
 (7.4.3-1)

 (7.4.3-1')
2,NTSC R'G'B'和NTSC Y'I'Q'
在Y'I'Q'颜色空间中,定义两个色差信号分别为

由此导出了R'G'B'和Y'I'Q'颜色空间之间非线性信号的转换关系,
 (7.4.3-2)

 (7.4.3-2')
3,EBU Y'U'V'和NTSC Y'I'Q'
在过去的年代里,由于NTSC彩色电视制对基色的定义作了多次改动,现在已经与EBU的Y'U'V'颜色空间很类似。因此,在基色定义相同情况下可定义EBU Y'U'V'和NTSC Y'I'Q'之间非线性信号的转换关系,它们之间的关系如下,
 (7.4.3-3)

 (7.4.3-3')
观察这两个转换矩阵可发现,矩阵中对应位置上的数值很接近,因此实际上人们使用相同的变换矩阵,即
 (7.4.3-4)

 (7.4.3-4')
4,NTSC RGB和EBU RGB
在NTSC RGB信号和EBU RGB之间的转换关系可用下式,
 (7.4.3-5)

 (7.4.3-5')
5,NTSC RGB和BT.709
在NTSC RGB信号和BT.709之间的转换关系可用下式,
 (7.4.3-6)

 (7.4.3-6')
7.4.4 SMPTE-C RGB
影视工程师协会(Society of Motion Picture and Television Engineers,SMPTE)是电影和电视工程师的一种专业协会。该协会是一个国际性的研究和标准化组织,在全世界有9 000多个成员。SMPTE-C是美洲当前使用的广播电视颜色标准,旧的NTSC颜色空间的基色标准已经不再广泛使用,因为它的基色标准已经逐步向EBU制定的颜色标准靠拢。但在其他方面,SMPTE-C与NTSC相同。CRT的值假设为2.2,使用的光源标准是D65,它的色度坐标是

红、绿和蓝的坐标分别是红:
绿:
蓝:
1,SMPTE-C RGB和CIE XYZ
根据以上数据,可计算得到SMPTE-C RGB和CIE XYZ颜色空间之间线性信号的转换关系,
 (7.4.4-1)

 (7.4.4-1')
2,SMPTE-C R'G'B'和SMPTE-C Y'I'Q'
SMPTE-C R'G'B'和SMPTE-C Y'I'Q'颜色空间之间非线性信号的转换关系与NTSC R'G'B'和NTSC Y'I'Q'之间的转换关系相同,
 (7.4.4-2)

 (7.4.4-2')
3,SMPTE-C Y'I'Q'和EBU Y'U'V'
EBU Y'U'V'和SMPTE-C Y'I'Q'之间的非线性信号的转换关系与EBU Y'U'V'和NTSC Y'I'Q'之间的非线性信号的转换关系相同,
 (7.4.4-3)

 (7.4.4-3')
4,SMPTE-C RGB和EBU RGB
SMPTE-C RGB和EBU RGB之间的转换关系如下,
 (7.4.4-4)

 (7.4.4-4')
5,SMPTE-C RGB和BT.709 RGB
SMPTE-C RGB和BT.709 RGB之间的转换关系如下,
 (7.4.4-5)

 (7.4.4-5')
7.4.5 ITU-R BT.601 Y'CbCr
ITU-R BT.601是一个国际性的标准清晰度电视(standard definition television,SDTV)图像数字化标准,用于对525条扫描线和625条扫描线的电视图像进行数字编码(参阅第10章的10.3.2)。Y'CbCr颜色空间是ITU-R BT-601的一部分,是YUV颜色空间派生的一种颜色空间。Y'定义为[16,235]范围里的8位二进制数据,Cb和Cr定义为[16,240]范围里的8位二进制数据。ITU-R BT.601 Y'CbCr标准仅处理用Y'CbCr形式表示R'G'B'信号,因此它不涉及色度坐标、CIE XYZ变换矩阵、光源和CRT的值等参数。
在BT.601标准中,对亮度和色差与之间的关系作了如下的定义,
 (7.4.5-1)
在这个转换矩阵中,非线性分量信号的取值均为[0,1]。而在BT.601标准中,用4:2:2的采用格式并且用8位二进制数表示各个分量的数值时,
非线性亮度分量Y',[0,15]作为偏移量,[236,255]保留,信号的取值范围为[16,235]。16表示黑电平信号值,235表示白电平信号值。
非线性色差Cb和Cr:数值范围为[16,240],使用128的偏移量时的取值范围为[-112,112]。
为此对和行分别用(0.5/0.886)和(0.5/0.701)相乘,就把这两个色差的数值范围转换到[-0.5,0.5],而的数值范围仍然是[0,1]。用

表示两个色差,于是可得到Y'PbPr与R'G'B'之间的转换关系,
 (7.4.5-2)
式中,叫做非线性亮度(luma)。
式(7.4.5-2)矩阵中的第一行是非线性亮度的系数,系数之和等于1.0;用来计算非线性亮度的系数0.299,0.587和0.114是在1953年确定的,用于NTSC制彩色电视标准,并且写入到了1982年制定的彩色电视信号数字化标准CCIR 601(现为ITU-R BT.601)中。现在,仍然可用来计算电视信号的非线性亮度(luma),但用这些系数计算当代的监视器的非线性亮度就不精确。
式(7.4.5-2)矩阵中的第二和第三行是非线性色度信号的系数,分量系数之和都为0,而Pb和Pr的最大值均为0.5。
式(7.4.5-2)的逆变换表示由Y'PbPr颜色空间到R'G'B'颜色空间的转换关系,
 (7.4.5-2')
1,BT.601 Y'CbCr和R'G'B'[0,1]
在许多文献中,非线性的Y'CbCr和R'G'B'之间的转换关系用下面的矩阵表示,
 (7.4.5-3)

 (7.4.5-3')
在这个转换关系中,Y'的取值范围为[0,1],而Cb和Cr的取值为[-0.5,0.5]。用219,224和224分别与(7.4.5-3)中的亮度、和两个色差行的系数相乘,并考虑BT.601标准的要求,可得到如下的转换矩阵,
 (7.4.5-4)
在这个转换关系中,Y'的数值范围为[16,235],Cb和Cr的数值范围为[-112,112],R',G'和B'的数值范围为[0,1]。它的逆变换为,
 (7.4.5-4')
在这个转换关系中,Y',Cb和Cr分量是8位二进制数,而变换之后得到的是[0,1]之间的数。
2,BT.601 Y'CbCr和R'G'B'[0,255]
在计算机中,Y'CbCr和R'G'B'空间中的分量通常用8位二进制数表示,它们的数值范围均为[0,255]。在这样的情况下,可用(256/255)乘(7.4.5-4)中的矩阵,从而得到可直接用8位二进制数表示的R'G'B'进行计算,
 (7.4.5-5a)
或者
 (7.4.5-5b)
它的逆变换为,
(7.4.5-5a')
或者
 (7.4.5-5b')
3,Y'CbCr和R'G'B'[0,219]
用8位二进制数表示BT.601 Y'CbCr和8位二进制数R'G'B'的转换关系时,R'G'B'颜色空间使用相同数值范围[0,219]的分量信号,因此用一个比例系数(256/219)乘(7.4.5-4)中的矩阵,得到如下的变换关系,
 (7.4.5-6a)
或者
 (7.4.5-6b)
它的逆变换为,

(7.4.5-6a')
或者
 (7.4.5-6b')
要强调一点是,以上所介绍的Y'CbCr和R'G'B'之间的转换是在数字域而不是在模拟域中的转换。
7.4.6 ITU-R BT.709 Y'CbCr
ITU-R BT.709 Y'CbCr颜色空间是1988年国际无线电咨询委员会(CCIR)制定的一个中间标准,用于高清晰度电视(HDTV)演播室的电视制作。它的基色是EBU的R和B,而G是SMPTE-C和EBU之间的一种基色。CRT的值假设为2.2,使用的光源标准是D65,它的色度坐标是

红、绿和蓝的坐标分别是红:
绿:
蓝:
1,BT.709 RGB和CIE XYZ
根据以上数据,可计算得到BT.709 RGB和CIE XYZ颜色空间之间线性信号的转换关系,
 (7.4.6-1)

 (7.4.6-1')
2,BT.709 Y'CbCr和BT.709 R'G'B'
在BT.709 Y'CbCr和BT.709 R'G'B'之间转换时,由于R'G'B'的取值范围不同,因此转换方程也有差别。
(1) Y'CbCr和R'G'B'[0,1]
Y'CbCr和R'G'B'之间非线性信号的转换关系如下,
 (7.4.6-2)

 (7.4.6-2')
在这个转换关系中,Y'的取值范围为[0,1],而Cb和Cr的取值为[-0.5,0.5]。按照标准的规定,可用219,224和224分别与(7.4.6-2)中的亮度和两个色差行的系数相乘,可得到如下的转换矩阵,
 (7.4.6-3)

 (7.4.6-3')
(2) Y'CbCr和R'G'B'[0,255]
在计算机中,Y'CbCr和R'G'B'空间中的分量通常是用8位二进制数表示的,它们的数值范围均为[0,255]。在这样的情况下,可用(1/255)乘(7.4.6-3)中的矩阵,从而得到直接用8位二进制数表示的Y'CbCr和R'G'B'之间的转换关系,
 (7.4.6-4)

 (7.4.6-4')
(3) Y'CbCr和R'G'B'[0,219]
用8位二进制数表示BT.709 Y'CbCr和8位二进制数R'G'B'的转换关系时,R'G'B'颜色空间使用相同数值范围[0,219]的分量信号,因此用一个比例系数(1/219)乘(7.4.6-3)中的矩阵,得到如下的变换关系,
 (7.4.6-5)

 (7.4.6-5')
3,BT.709 RGB和EBU RGB
Bt.709 RGB与EBU RGB信号之间的转换可用下面的转换关系进行转换,
 (7.4.6-6)

 (7.4.6-6')
4,Y'CbCr彩条为对标准清晰度电视(SDTV)和高清晰度(HDTV)的颜色规范更清楚,表7-03分别列出了两种电视的彩条值,用于测试电视图像。
表7-03 Y'CbCr彩条
名义范围
白
黄
青
绿
品红
红
蓝
黑
SDTV
Y
16 ~ 235
180
162
131
112
84
65
35
16
Cb
16 ~ 240
128
44
156
72
184
100
212
128
Cr
16 ~ 240
128
142
44
58
198
212
114
128
HDTV
Y
16 ~ 235
180
168
145
133
63
51
28
16
Cb
16 ~ 240
128
44
147
63
193
109
212
128
Cr
16 ~ 240
128
136
44
52
204
212
120
128
7.4.7 SMPTE-240M Y'PbPr
SMPTE 240M (1988)是为高清晰度电视进行标准化而开发的一种标准。Y'PbPr是YUV颜色空间的一种形式,这个颜色空间对B基色和白色点的坐标作了修改,而CRT的仍然假设为2.2,光源标准仍然采用D65,色度坐标为,

红、绿和蓝的坐标分别是红:
绿:
蓝:
1,SMPTE-240M RGB和CIE XYZ
根据以上数据,可计算得到SMPTE-240M RGB和CIE XYZ颜色空间之间线性信号的转换关系,
 (7.4.7-1)

 (7.4.7-1')
2,SMPTE-240M Y'PbPr和SMPTE-240M R'G'B'
Y'PbPr和R'G'B'之间非线性信号的转换关系如下,
 (7.4.7-2)

 (7.4.7-2')
3,SMPTE-240M RGB和EBU RGB
SMPTE-240M RGB和EBU RGB之间的转换关系如下,
 (7.4.7-3)

 (7.4.7-3')
4,SMPTE-240M RGB和BT.709 RGB
SMPTE-240M RGB和BT.709 RGB之间的转换关系如下,
 (7.4.7-4)

 (7.4.7-4')
7.4.8 Kodak PhotoYCC颜色空间
Kodak PhotoYCC颜色空间是为PhotoCD图像数据进行编码而开发的一种与显示设备关系不大的颜色空间。这个颜色空间建立在BT.709和BT.601-1的基础上,它的色域与BT.709基色定义的色域基本相同,而颜色的亮度和色度的表示方法如同BT.601的Y'CbCr。这个颜色空间既适合用于RGB相加混色模型又适合用于CMY(K)相减混色模型。与计算机图形系统不同的是,这个颜色空间中的R,G和B分量值可以是负值。由于PhotoYCC使用电视机或者计算机来显示编码图像,因此可以认为这个颜色空间是电视标准和计算机图形标准的混合产物。
1,RGB→PhotoYCC
由于PhotoYCC颜色空间是一个经过校正的颜色空间,因此在对图像数据进行编码之前,要对RGB颜色空间的分量进行校正,它们的变换关系如下,
(1) 对,

(2) 对,

(3) 对,

R'G'B'颜色空间的数据通过下面的矩阵转换到PhotoYCC颜色空间的数据,
 (7.4.8-1)
其中的表示经过校正之后的非线性亮度,表示经过非线性校正之后的色差。
R'G'B'颜色空间的数值通过变换之后得到的是浮点数值,可用下式把浮点数转换成8位二进制数,
 (7.4.8-2)
2,PhotoYCC→RGB
为在显示设备上显示图像数据,需要把Kodak YCC颜色空间的数据转换成用24位表示的RGB数据,这种转换不是一种简单的变换,而要依赖图像的显示系统。
(1) 计算机显示系统在使用计算机显示器显示图像数据时,首先把PhotoYCC中图像数据转换成用24位表示的图像数据,可按下面的步骤进行。
① 对亮度数据和色度数据实施如下的操作,
 (7.4.8-3)
② 如果显示器的基色与BT.709的基色标准比较接近,可用下面的式子计算,得到显示器使用的红、绿和蓝基色的值,
 (7.4.8-3')
计算得到的的数值范围是[0,246],而不是[0,255],通过非线性函数使用查找表(look up table)把这些数值转换[0,255]中的8位二进制数。
如果显示器与BT.709基色的标准差别比较大,就需要通过中间的与设备无关的颜色空间(例如CIE XYZ)进行转换。
(2) 电视显示系统把PhotoYCC图像数据转换成电视系统的RGB信号电压,可按下面的步骤进行。
① 对亮度数据和色度数据实施如下的操作,
 (7.4.8-4)
② 计算RGB显示信号
 (7.4.8-4')
练习与思考题
PAL制彩色电视使用什么颜色模型?NTSC制彩色电视使用什么颜色模型?计算机图像显示使用什么颜色模型?
用YUV或YIQ模型来表示彩色图像的优点是什么?为什么黑白电视机可看彩色电视图像?
在RGB颜色空间中,当R=G=B,且为任意数值,问计算机显示器显示的颜色是什么颜色?
在HSL颜色空间中,当H为任意值,S=L=0时,R,G和B的值是多少?当H=0,S=1,L=0.5,R,G和B的值是多少?
打开Windows 95/98/2000中的“画图”→“颜色编辑”→程序,在RGB和HSL转换栏中,如果R=G=B=255,问H,S和L的值分别为多少?分别改变R,G和B的值,观察H,S和L的值的变化。
用MATLAB编写RGB到HSL和HSL到RGB颜色空间的转换程序:rgb2hsl.m和hsl2rgb.m。
用MATLAB编写Y'CbCr和R'G'B'[0,219]颜色空间的相互转换程序:RGB2YCbCr和YCbCr2RGB.m。
参考文献和站点
Foley,van Dam,Feiner,and Hughes,Computer Graphics,Principles and Practice,Addison Wesley,Second Edition,1990.
http://www.scarse.org/docs/color_faq.html(浏览日期:2001年4月6日)
http://www.colorfocus-group.de/(浏览日期:2001年4月6日)
http://www.cs.rit.edu/~ncs/color/(浏览日期:2001年5月6日)
林福宗,陆达,多媒体与CD-ROM,北京:清华大学出版社,1995.3,p317~328。
Adrian Ford (ajoec1@wmin.ac.uk),and Alan Roberts (Alan.Roberts@rd.bbc.co.uk),Colour Space Conversions,August 11,1998