第2章颜色空间变换 (征求意见稿) 清华大学计算机科学与技术系 智能技术与系统国家重点实验室 林福宗 2001年10月20日 最近一百多年以来,为了满足各种不同用途的需求,人们已经开发了许多不同名称的颜 色空间,尽管目前几乎所有的颜色空间都是从RGB颜色空间导出的,但随着科学和技术的 进步,人们还在继续开发形形色色的颜色空间。可以说表示颜色的颜色空间的数目是无穷的 而且可以说,现有的颜色空间还没有一个完全符合人的视觉感知特性、颜色本身的物理特性 或者发光物体和光反射物体的特性 本章选择了几种使用比较普通且与多媒体技术密切相关的颜色空间,介绍它们之间的转 换关系。在所介绍的这些颜色空间中,有些颜色空间彼此之间可直接转换,有些则要通过与 设备无关的颜色空间进行转换。各种不同颜色空间之间进行转换的目的各不相同,有的是为 了艺术家选择颜色的方便,有的是为了减少图像的数据量,有的是为了满足显示系统的要求 这就要求我们正确地选择颜色空间和颜色空间之间的转换关系,或者自己开发适合特定用途 的颜色空间 需要注意的是,①本章介绍的变换算法和其中的系数虽然参照了许多文献之后选择的 笔者也用 MATLAB60软件对某些数据进行过核实和校正,但教材中引用的物理数据却没 有条件逐一加以验证。因此,由这些物理数据导出的矩阵中的变换系数不一定能保证满足你 的需求,有些文献或者应用软件中使用的方法和系数也可能与本章介绍的方法和系数有所不 同。可以说,在颜色空间变换中目前也许还没有绝对准确的变换系数。②笔者近年来发现, 需要使用颜色空间转换的人越来越多,为了对颜色空间的变换算法有比较深入的了解,为此 从大量的颜色科学研究和技术开发项目中选择了一些用不同语言编写的核心子程序供参考, 列在附录中。此外,这些程序不一定能够直接使用,需要补充和重新编写。对这部分的内容, 读者可根据自己的能力和兴趣决定是否要阅读 2.1该用什么颜色空间 211颜色空间的分类问题 探讨颜色空间的分类问题,目的是为了借鉴前人开发颜色空间的思路,以便我们更好地 利用现有的颜色空间,或者改进现有颜色空间存在的问题,同时也为了我们开发新的颜色空 间打下基础 在无数的颜色空间中,已经在各行各业应用的颜色空间包括本教材介绍的 American YIQ, BT601, Bt 709, CIE 1931 RGB, CIE 1931 xyY, CIE 1931 XYZ, CIE 1976 LAB, CIE 1976 LUV, CIE Lab/CIE L*a*b*, CIE LSH, CIE uvY, CIEL*u*v*, CIELAB LCh, CIELUV LCh, CMY, CMYK, European YUV, HIS, HLS/HSL, HSL/HSB, HSV, ITU-R BT601 Y'CbCr ITU-R BT709 Y'CbCr. Kodak Photo CD yCC. Kodak PhotoYCC. Munsell Hvc. photoYcc SMPTE240 MYPbPr和 SMPTE-C RGB等,以及本教材没有介绍的许多颜色空间,例如, Xerox Corporation YES颜色空间,其中的Y代表亮度,E代表红绿轴的色度S代表黄蓝轴
1 第 2 章 颜色空间变换 (征求意见稿) 清华大学计算机科学与技术系 智能技术与系统国家重点实验室 林福宗 2001 年 10 月 20 日 最近一百多年以来,为了满足各种不同用途的需求,人们已经开发了许多不同名称的颜 色空间,尽管目前几乎所有的颜色空间都是从 RGB 颜色空间导出的,但随着科学和技术的 进步,人们还在继续开发形形色色的颜色空间。可以说表示颜色的颜色空间的数目是无穷的, 而且可以说,现有的颜色空间还没有一个完全符合人的视觉感知特性、颜色本身的物理特性 或者发光物体和光反射物体的特性。 本章选择了几种使用比较普通且与多媒体技术密切相关的颜色空间,介绍它们之间的转 换关系。在所介绍的这些颜色空间中,有些颜色空间彼此之间可直接转换,有些则要通过与 设备无关的颜色空间进行转换。各种不同颜色空间之间进行转换的目的各不相同,有的是为 了艺术家选择颜色的方便,有的是为了减少图像的数据量,有的是为了满足显示系统的要求。 这就要求我们正确地选择颜色空间和颜色空间之间的转换关系,或者自己开发适合特定用途 的颜色空间。 需要注意的是,①本章介绍的变换算法和其中的系数虽然参照了许多文献之后选择的, 笔者也用 MATLAB 6.0 软件对某些数据进行过核实和校正,但教材中引用的物理数据却没 有条件逐一加以验证。因此,由这些物理数据导出的矩阵中的变换系数不一定能保证满足你 的需求,有些文献或者应用软件中使用的方法和系数也可能与本章介绍的方法和系数有所不 同。可以说,在颜色空间变换中目前也许还没有绝对准确的变换系数。②笔者近年来发现, 需要使用颜色空间转换的人越来越多,为了对颜色空间的变换算法有比较深入的了解,为此 从大量的颜色科学研究和技术开发项目中选择了一些用不同语言编写的核心子程序供参考, 列在附录中。此外,这些程序不一定能够直接使用,需要补充和重新编写。对这部分的内容, 读者可根据自己的能力和兴趣决定是否要阅读。 2.1 该用什么颜色空间 2.1.1 颜色空间的分类问题 探讨颜色空间的分类问题,目的是为了借鉴前人开发颜色空间的思路,以便我们更好地 利用现有的颜色空间,或者改进现有颜色空间存在的问题,同时也为了我们开发新的颜色空 间打下基础。 在无数的颜色空间中,已经在各行各业应用的颜色空间包括本教材介绍的 American Y'I'Q', BT.601, Bt.709, CIE 1931 RGB, CIE 1931 xyY, CIE 1931 XYZ, CIE 1976 LAB, CIE 1976 LUV, CIE Lab/CIE L*a*b*, CIE LSH , CIE uvY, CIEL*u*v*, CIELAB LCh, CIELUV LCh, CMY, CMYK, European Y'U'V', HIS, HLS/HSL, HSL/HSB, HSV, ITU-R BT.601 Y'CbCr, ITU-R BT.709 Y'CbCr, Kodak Photo CD YCC , Kodak PhotoYCC, Munsell HVC, PhotoYCC, SMPTE-240M Y'PbPr 和 SMPTE-C RGB 等,以及本教材没有介绍的许多颜色空间,例如, Xerox Corporation YES 颜色空间,其中的 Y 代表亮度, E 代表红-绿轴的色度,S 代表黄-蓝轴
的色度。如何对这些颜色空间进行分类,笔者目前还没有看到一个准确的分类原则和方法 但可考虑从颜色的感知角度、技术角度或者从应用角度来进行分类。 从颜色感知的角度来分类,颜色空间可考虑分成如下三类: 混合( mixture)型颜色空间:按三种基色的比例合成颜色。例如,RGB,CMY(K 和XYZ等颜色空间就属于这种类型。 非线性亮度危度(luma/ chroma)型颜色空间:用一个分量表示非色彩的感知,用两 个独立的分量表示色彩的感知。当需要黑白图像时,这样的系统非常方便。例如 L*a+b,L*uv,YUV和YIQ就属于这种类型 强度/饱和度色调( intensity/saturation/hue座型颜色空间:用饱和度和色度描述色彩 的感知,可使颜色的解释更直观,而且对消除光亮度的影响很有用。例如,HSI,HSL HSV和LCH等 从技术上角度区分,颜色空间可考虑分成如下三类: ≯RGB型颜色空间算机图形颜色空间:这类模型主要用于电视机和计算机的颜色 显示系统。例如,RGB,HSI,HSL和HsⅤ等颜色空间。在显示技术和印刷技术中 颜色空间经常被称为颜色模型( color mode)。在笔者看来,“颜色空间”似乎侧重 于颜色的表示,而“颜色模型”似乎侧重于颜色的生成 XYZ型颜色空间CIE颜色空间:这类颜色空间是由国际照明委员会定义的颜色空 间,通常作为国际性的颜色空间标准,用作颜色的基本度量方法。国际照明委员会 定义的颜色空间是与设备无关的颜色表示法,在科学计算中得到广泛应用。对不能 直接相互转换的两个颜色空间,可利用这类颜色空间作为过渡性的颜色空间,例如, CIE1931XYZ,L*a+b,L*u*v和LCH等颜色空间就可作为过渡性的转换空间 YUV型颜色空间/视系统颜色空间:由广播电视需求的推动而开发的颜色空间 主要目的是通过压缩色度信息以有效地播送彩色电视图像。例如,YUV,Y1Q ITUR BT60 I Y'CbCr, ITU-R BT709 Y'CbCr和 SMPTE240 YPBpR等颜色空间 按照上述观点对颜色空间进行的分类综合在表2-1中。这样分类虽然并不很科学,也不 是绝对的,但对颜色空间的认识多少会有些帮助 表2-1颜色空间的分类 RGB型XYZ型|YUV型 合行( Mixture) RGB 非线性亮度色度( Luma/Chroma L'a'b',L'u'vlYUV, YIQI 强度/饱和度色调 HIS, HSL LCHCHL /Saturation/H HSV 212颜色空间的变换问题 颜色空间的变换是一个比较复杂的问题。虽然几乎所有的颜色空间都是从RGB颜色空 间导出的,数值计算也并不复杂,但因为这种变换涉及到视觉感知特性、光和物体的特性, 也因此对计算模型产生了不同程度的怀疑。这种怀疑的主要来源是对视觉感知特性还不十分 清楚。尽管如此,人们还是需要在各种不同的颜色空间之间进行转换,以满足不同应用的需 求。有些是为了艺术家选择颜色的方便,有些是为了减少图像的数据量,有些是为了满足显 示系统的要求 图2-01描绘了常见颜色空间之间的变换关系。从图中可以看到 >有些颜色空间之间可以直接变换。例如,RGB和HSL,RGB和 HSB, RGB和RGB, RGB和 YCrCb, CIE XYZ和CEL*a*b*等。 2
2 的色度。如何对这些颜色空间进行分类,笔者目前还没有看到一个准确的分类原则和方法, 但可考虑从颜色的感知角度、技术角度或者从应用角度来进行分类。 从颜色感知的角度来分类,颜色空间可考虑分成如下三类: ÿ 混合(mixture)型颜色空间:按三种基色的比例合成颜色。例如,RGB,CMY(K) 和 XYZ 等颜色空间就属于这种类型。 ÿ 非线性亮度/色度(luma/chroma)型颜色空间:用一个分量表示非色彩的感知,用两 个独立的分量表示色彩的感知。当需要黑白图像时,这样的系统非常方便。例如, L*a*b, L*u*v,YUV 和 YIQ 就属于这种类型。 ÿ 强度/饱和度/色调(intensity/saturation/hue)型颜色空间:用饱和度和色度描述色彩 的感知,可使颜色的解释更直观,而且对消除光亮度的影响很有用。例如,HSI, HSL, HSV 和 LCH 等。 从技术上角度区分,颜色空间可考虑分成如下三类: ÿ RGB 型颜色空间/计算机图形颜色空间:这类模型主要用于电视机和计算机的颜色 显示系统。例如,RGB,HSI, HSL 和 HSV 等颜色空间。在显示技术和印刷技术中, 颜色空间经常被称为颜色模型(color mode)。在笔者看来,“颜色空间”似乎侧重 于颜色的表示,而“颜色模型”似乎侧重于颜色的生成。 ÿ XYZ 型颜色空间/CIE颜色空间:这类颜色空间是由国际照明委员会定义的颜色空 间,通常作为国际性的颜色空间标准,用作颜色的基本度量方法。国际照明委员会 定义的颜色空间是与设备无关的颜色表示法,在科学计算中得到广泛应用。对不能 直接相互转换的两个颜色空间,可利用这类颜色空间作为过渡性的颜色空间,例如, CIE 1931 XYZ,L*a*b,L*u*v 和 LCH 等颜色空间就可作为过渡性的转换空间。 ÿ YUV 型颜色空间/电视系统颜色空间:由广播电视需求的推动而开发的颜色空间, 主要目的是通过压缩色度信息以有效地播送彩色电视图像。例如,YUV,YIQ, ITU-R BT.601 Y'CbCr, ITU-R BT.709 Y'CbCr 和 SMPTE-240M Y'PbPr 等颜色空间。 按照上述观点对颜色空间进行的分类综合在表 2-1 中。这样分类虽然并不很科学,也不 是绝对的,但对颜色空间的认识多少会有些帮助。 表 2-1 颜色空间的分类 类型 RGB 型 XYZ 型 YUV 型 混合行(Mixture) RGB XYZ - 非线性亮度/色度(Luma/Chroma) - L * a * b * , L * u * v * YUV, YIQ 强度/饱和度/色调 (Intensity/Saturation/Hue) HIS, HSL, HSV LCH/CHL 2.1.2 颜色空间的变换问题 颜色空间的变换是一个比较复杂的问题。虽然几乎所有的颜色空间都是从 RGB 颜色空 间导出的,数值计算也并不复杂,但因为这种变换涉及到视觉感知特性、光和物体的特性, 也因此对计算模型产生了不同程度的怀疑。这种怀疑的主要来源是对视觉感知特性还不十分 清楚。尽管如此,人们还是需要在各种不同的颜色空间之间进行转换,以满足不同应用的需 求。有些是为了艺术家选择颜色的方便,有些是为了减少图像的数据量,有些是为了满足显 示系统的要求。 图 2-01 描绘了常见颜色空间之间的变换关系。从图中可以看到: ÿ 有些颜色空间之间可以直接变换。例如,RGB 和 HSL,RGB 和 HSB,RGB 和 R'G'B', R'G'B'和 Y'CrCb,CIE XYZ 和 CIE L*a*b*等
有些颜色空间之间不能直接变换。例如,RGB和 CIE La+b*, CIE XYZ和HSL,HSL 和 Y'CbCr等,它们之间的变换需要借助其他颜色空间进行过渡 线性光 感知均匀 CIEL·uy CIE Lh C CIE XYZ 极坐标 CIEL*a·b 非线性变换 ClEL·h由C 3×3 非线性变换 线性RGB 变换函数 RGB非线性变换 非线性 图像编码系统 YCbCr 图2-01部分颜色空间的转换关系 21.3什么颜色空间适合我 为了回答这个问题,在此将常见颜色空间的主要特性作一个简单介绍,以供你选择颜色 空间作一个参考。 1.RGB与CMY颜色空间 RGB(red, green and blue)是在三基色理论基础上开发的相加混色颜色空间。使用RGB 生成颜色容易实现,因此在使用阴极射线管(CRT)的图像显示系统中得到广泛的应用。RGB 颜色空间是与设备相关的,视觉对颜色的感知是非线性的,而且颜色的指定并不直观 CMY( cyan magenta yellow)地是在三基色理论基础上开发的颜色空间,不过它是相减混 色颜色空间。该空间主要用在印刷和打印系统。 CMYK(cyan magenta yellow black)中的黑色 是为改善打印质量而增加的颜色分量。使用CMYK)生成颜色容易实现,但把RGB颜色空 间表示的颜色正确地转换到CMY(K)空间不容易。CMY(K)颜色空间是与设备相关的,视觉 对颜色的感知是非线性的,而且颜色的指定也不直观。 2.计算机图形颜色空间 HSV(hue, saturation and value), HLS/HSI(hue, saturation and lightness), HSI(hue, saturation and intensity ) HSBhue, saturation and brightness), HCI(hue, saturation and chroma/colourfulness)和Hvc(hue, value and chroma)等都是类似的颜色空间,它们都是从 RGB颜色空间变换而来的,而且都是与设备相关的颜色空间。它们的优点是指定颜色方式 非常直观,很容易选择所需要的色调(颜色),稍微调整它的饱和度和亮度就可改变颜色。这 些颜色空间都是想把亮度从颜色信息中分离出来,这种假想的分离似乎在应用(如像图像处 理)中有些优点,而且每一种颜色空间都声称比其他的好。 HSV,HLS/HSL,HSL,HSB,HCI,HVC等颜色空间是一种以色调为基础的颜色空间。这 些颜色空间在计算机应用软件中得到广泛应用,例如 Photoshop.用的颜色空间是HSB, Apple Color Picker中用的颜色空间是HS。它们之间除了光亮度和明度的取值范围有所差 别之外,例如HS中用光亮度( Lightness),而HSB中用明度( Brightness),其他都基本相同 由于这些颜色空间中的颜色分量值几乎都是直接从RGB导出的,因此它们之间的转换关系 都很直观。虽然RGB模型很适合用于计算机的外部设备,例如监视器和扫描仪,但它用于
3 ÿ 有些颜色空间之间不能直接变换。例如,RGB 和 CIE La*b*, CIE XYZ 和 HSL,HSL 和 Y'CbCr 等,它们之间的变换需要借助其他颜色空间进行过渡。 线性 RGB CIE xyY 线性 光 刺激 (x,y)色 度 CIE XYZ 感知均 匀 CIE L*u*v* CIE L*a*b* 非线性 R'G'B' 非线性 Y'CbCr HSL, HSB CIE L*huvCuv 面 向色调 CIE L*habCab 3×3 投影 变 换 投影 变 换 非线性 变换 非线性 变换 极 坐标 极 坐标 非线性 变换 3×3 变 换 函数 图 像编 码 系统 图 2-01 部分颜色空间的转换关系 2.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), HLS/HSL(hue, saturation and lightness), HSI(hue, saturation and intensity), HSB(hue,saturation and brightness), HCI(hue, saturation and chroma/colourfulness)和 HVC (hue, value and chroma)等都是类似的颜色空间,它们都是从 RGB 颜色空间变换而来的,而且都是与设备相关的颜色空间。它们的优点是指定颜色方式 非常直观,很容易选择所需要的色调(颜色),稍微调整它的饱和度和亮度就可改变颜色。这 些颜色空间都是想把亮度从颜色信息中分离出来,这种假想的分离似乎在应用(如像图像处 理)中有些优点,而且每一种颜色空间都声称比其他的好。 HSV, HLS/HSL, HSI, HSB, HCI, HVC 等颜色空间是一种以色调为基础的颜色空间。这 些颜色空间在计算机应用软件中得到广泛应用,例如 Photoshop 采用的颜色空间是 HSB, Apple Color Picker 中用的颜色空间是 HLS。它们之间除了光亮度和明度的取值范围有所差 别之外,例如 HLS 中用光亮度(Lightness),而 HSB中用明度(Brightness),其他都基本相同。 由于这些颜色空间中的颜色分量值几乎都是直接从 RGB 导出的,因此它们之间的转换关系 都很直观。虽然 RGB 模型很适合用于计算机的外部设备,例如监视器和扫描仪,但它用于
编辑颜色时就显得不直观。此外,这些颜色空间只是把色调、饱和度和亮度/明度的次序进 行重新排列或者重新标记,没有实质性的变化。但在使用之前需要对它们的含义和可能的取 值范围搞清楚 许多计算机应用软件采用的颜色空间与 Munsell系统紧密相关,HBS就是其中的一例 它的饱和度 Saturation)与Mune中的色度( Chroma)相对应,而明度( Brightnes与颜色的值 (vaue)相对应。要注意的是,不像 Munsel系统在感觉上是均匀的,在HSB系统中颜色之 间的距离与视觉感知是非均匀的。虽然HSB和 Munsell F的HVC都是根据相同的想法开发的, 但它们所采用的表示符号不同。在HSB系统中,色调沿颜色圆从0°~359°,饱和度和明度 都用百分比表示,从0%~100%。在 Munsell的HVC系统中,色调虽然用角度,但用“2.5R” 这样的符号表示从红色开始算起的色调为2.5级step), Munsel值和色度(相应于明度和饱 和度)都用0到10的数字表示。 3.电视系统颜色空间 YUV,YIQ, YCbCr/ YCb' Cr,Y" BpR/y'PbPr和YCC等颜色空间是为电视系统开发的。 这些颜色空间是亮度和色度( uminance-chrominance)分离的电视播送颜色空间 ( television transmission color spaces),有时也叫做播送基色( transmission primary) YUV是PAL和 SECAM模拟彩色电视制式采用的颜色空间,其中的YUV不是那几个 英文单词的组合词,而是符号,Y表示亮度,UV用来表示色差,U、V是构成彩色的两个 分量:YQ是NTSC模拟彩色电视制式采用的颜色空间,其中的Y表示亮度,I、Q是两个 彩色分量: YCbCr和Y"PbPr是数字电视采用的标准,在 ITULR BT601和BT709等推荐标 准中有明确的定义。无论是数字的还是模拟的颜色空间,这些颜色空间都把RGB颜色空间 分离成亮度和色度,目的是为了更有效地压缩图像的数据量,以便充分利用传输通道的带宽 或者节省存储容量。这些颜色空间都是与设备相关的,而且在闭环系统中的使用条件也相当 严格。 现以YV为例。YUV表示法的重要性是它的亮度信号(Y)和色度信号(U,V)是相互独 立的,也就是Y信号分量构成的黑白灰度图与用U,V信号构成的两幅单色图是相互独立 的。由于Y,U和Ⅴ是独立的,所以可以对这些单色图分别进行编码。此外,黑白电视能 接收彩色电视信号也就是利用了YUV分量之间的独立性。 YUV表示法的另一个优点是可以利用人眼的特性来降低数字彩色图像所需要的存储容 量。人眼对彩色细节的分辨能力远比对亮度细节的分辨能力低。若把人眼刚刚能分辨出的黑 白相间的条纹换成不同颜色的彩色条纹,那末眼睛就不再能分辨出条纹来。由于这个原因 就可以把彩色分量的分辨率降低而不明显影响图像的质量,因而就可以把几个相邻像素不同 的彩色值当作相同的彩色值来处理,从而减少所需的存储容量。例如,要存储RGB8:8 8的彩色图像,即R,G和B分量都用8位二进制数表示,图像的大小为640×480像素, 需要的存储容量为921600字节。如果用YUV来表示同一幅彩色图像,Y分量仍然为640 ×480,并且Y分量仍然用8位表示,而对每四个相邻像素(2×2)的U,V值分别用相同的 一个值表示,那末存储同样的一幅图像所需的存储空间就减少到460800字节。这实际上也 是图像压缩技术的一种方法 使用YQ和 YCrcb等颜色空间的道理与使用YUV的道理相同
4 编辑颜色时就显得不直观。此外,这些颜色空间只是把色调、饱和度和亮度/明度的次序进 行重新排列或者重新标记,没有实质性的变化。但在使用之前需要对它们的含义和可能的取 值范围搞清楚。 许多计算机应用软件采用的颜色空间与 Munsell 系统紧密相关,HBS 就是其中的一例。 它的饱和度(Saturation)与 Munsell 中的色度(Chroma)相对应,而明度(Brightness)与颜色的值 (Value)相对应。要注意的是,不像 Munsell 系统在感觉上是均匀的,在 HSB系统中颜色之 间的距离与视觉感知是非均匀的。虽然 HSB和 Munsell的 HVC 都是根据相同的想法开发的, 但它们所采用的表示符号不同。在 HSB系统中,色调沿颜色圆从 0 ~ 359 o o ,饱和度和明度 都用百分比表示,从 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),有时也叫做播送基色(transmission primary)。 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 的道理相同
22计算机图形颜色空间 221RGB,CMY和CMYK RGB(red, green and blue)和 CMY(cyan, magenta and yellow是最流行的颜色空间,它们 都是与设备相关的颜色空间,前者用在显示器上,后者用在打印设备上。RGB称为相加混 色是因为它使用不同数量的红、绿和蓝三种基色相加而产生颜色,而CMY称为相减混色是 因为白光中减去不同数量的青、品红和黄三种颜色而产生颜色。在打印设备中,黑色分量加 到CMY空间,因此,形成另一种颜色空间,叫做CMYK(cyan, magenta, yellow and black) 这两个颜色空间之间的数学转换关系如下 1.RGB和CMY 1)RGB→CMY Y 1|B 其中,R,G和B的取值范围是[0,1l procedure CMY to RGB(C, M, Y real; var R,G, B: real) R:=1-C G=1-M, B:=1-Y (2)CMY→RGB G (22.1-1) 其中,C,M和Y的取值范围是[01 Procedure rGb to CMY(R, G, B real; var C M,Y: real) C=1-R; end
5 2.2 计算机图形颜色空间 2.2.1 RGB, CMY和 CMYK RGB(red,green and blue)和 CMY(cyan, magenta and yellow)是最流行的颜色空间,它们 都是与设备相关的颜色空间,前者用在显示器上,后者用在打印设备上。RGB 称为相加混 色是因为它使用不同数量的红、绿和蓝三种基色相加而产生颜色,而 CMY 称为相减混色是 因为白光中减去不同数量的青、品红和黄三种颜色而产生颜色。在打印设备中,黑色分量加 到 CMY 空间,因此,形成另一种颜色空间,叫做 CMYK(cyan, magenta,yellow and black)。 这两个颜色空间之间的数学转换关系如下。 1. RGB 和 CMY (1) RGB→CMY 1 1 1 C R M G Y B é ù é ùéù ê ú ê úêú = - ê ú ê úêú ê ú ê úêú ë û ë ûëû (2.2.1-1) 其中, R,G B 和 的取值范围是[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 1 1 1 R C G M B Y é ù é ùéù ê ú ê úêú = - ê ú ê úêú ê ú ê úêú ë û ë ûëû (2.2.1-1') 其中,C, M Y 和 的取值范围是[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 B=min(C,M n C=(C-B)/(1-B M=(M-B)/(1-B (2.2.1-2) Y=(-B)/(1 (2)CMYk→CMY C=min(1, C=(1-B)+B M=min(1,M*(1-B)+B) 2.21-2) Y=min(1,Y*(1-B)+B) 在有些应用软件中,上面描述的转换关系有所不同,例如, Adobe Postscript。这需要参 阅公司的相关文献才能比较快地明白其原因 3.RGB和CMYK (1)RGB→CMYK B=min(1-R,1-G,1-B) C=(1-R-B)(1-B) (22.1-3 M=(1-G-B)/(1-B) Y=(1-B-B)(1-B (2)CMYK→RGB R=1-min(1,C*(1-B)+B) G=1-min(1,M*(1-B)+B) 2.21-3) B=1-min(1,y*(1-B)+B 222HSV和RGB HS Hue, saturation and value)是根据颜色的直观特性由AR. Smith在1978年创建的 种颜色空间,也称六角锥体模型 hexcone model,如图2-02所示。在这个颜色空间中 色调H:用角度度量,取值范围为0°~360°。从红色开始按逆时针方向计算,红色为 0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300 饱和度S:取值范围为0.0~1.0。 亮度值V:取值范围为0.0黑色)~10(白色) 纯红色是H=0,S=1,V=1:S=0表示非彩色,在这种情况下,色调未定义。当 R,G,B和H,V的范围都是0.0~1.0时,这些值常用8位表示,它们的值用0~255之间的 整数。 6
6 2. CMY 和 CMYK (1) CMY→CMYK min( ,,) ( - )/(1- ) ( - )/(1- ) ( - )/(1- ) B CMY C C B B M M B B Y Y B B = = = = (2.2.1-2) (2) CMYK→CMY min(1, *(1- ) ) min(1, *(1- ) ) min(1, *(1- ) ) C C B B M M B B Y Y B B = + = + = + (2.2.1-2') 在有些应用软件中,上面描述的转换关系有所不同,例如,Adobe Postscript。这需要参 阅公司的相关文献才能比较快地明白其原因。 3. RGB 和 CMYK (1) RGB→CMYK min(1- ,1- ,1- ) (1- - )/(1- ) (1- - )/(1- ) (1- - )/(1- ) B RGB C R B B M G B B Y B B B = = = = (2.2.1-3) (2) CMYK→RGB R 1-min(1, *(1- ) ) 1-min(1, *(1- ) ) 1-min(1, *(1- ) ) C B B G M B B B Y B B = + = + = + (2.2.1-3') 2.2.2 HSV 和 RGB HSV(hue, saturation and value)是根据颜色的直观特性由 A. R. Smith 在 1978 年创建的一 种颜色空间, 也称六角锥体模型(hexcone model),如图 2-02 所示。在这个颜色空间中, 色调 H :用角度度量,取值范围为 0 o~360o。从红色开始按逆时针方向计算,红色为 0 o,绿色为 120o ,蓝色为 240o。它们的补色是:黄色为 60o,青色为 180o ,品红为 300o。 饱和度 S :取值范围为 0.0~1.0。 亮度值V :取值范围为 0.0(黑色)~1.0(白色)。 纯红色是 H = 0, S V = = 1, 1; S = 0 表示非彩色,在这种情况下,色调未定义。当 R G, , , B和H V 的范围都是 0.0~1.0 时,这些值常用 8 位表示,它们的值用 0~255 之间的 整数
图2-02HSV颜色空间 自从HSV颜色空间出现之后,已经出现了几种大同小异的RGB和HSV颜色空间之间 的转换算法,它们之间没有转换矩阵,但可对算法进行描述。这两个颜色空间之间的转换算 法和程序在因特网上可以找到,本节引用的算法引自: http://www.realtime.ru/wwwboard/messages/120.html 本节引用的程序引自 http:/www.cisksu.edu/-seteam20/ 1.RGB到HSV的转换 (1)RGB→HSV( Travis)算法描述 Given RGB values. find the max and min in)/ nax Ifs=0.h is undefined RI=(max-R)/(max-min) Bl=(max-B)/(max-min ifr= max and g= min. h=5+B1 else ifR= max and g not= min, H=l-Gl else ifG= max and B= min, H=RI+1 else ifG= max and B notman, h=3-BI else ifR= max H=3+GI else=5-RI H=H 60 (converts to degrees so S and V lie between 0 and 1, H between 0 and 360) (2)RGB→HSⅤ Foley and vanDam)算法描述 of rgB min= minimum of rgb S=(max-min)/max if s =o.h is undefined else delta max-min 7
7 图 2-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
ifr H=(G-b)/delta ifG= max, H=2+(B-R)delta H=H*60 ifH<0.H=H+360 2.HSV到RGB的转换 (1)HSV→RGB( Travis)算法描述 Convert h degrees to a hexagon section (1-S)* )*V var3=(1-(S*(I-sub colour)))*V the OR=VG=var 3. B main colour =1.R=var2G=VB=varl main colour =2, R= varl, G=V, B= var3 main colour 4R= var3 G= varl.B= V main colour=5.R=V G= varl. B= var 2 where int(x)converts x to an integer value (2)HSⅤ→RGB( Foley and Van Dam)算法描述 d r=g=b=v ifH=360,H=0 H=H/ floor(h) t, B=p ifi=1,R=9,G=V, B=p if i=2, R=p, G=v,B=t ifi=3.R=p, g=g B if i=4, R=t,G=p, B ifi=5.R B where floor is the C floor function
8 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 main_colour = 1, R = var2, G = V, B = var1 main_colour = 2, R = var1, G = V, B = var3 main_colour = 3, R = var1, G = var2, B = V main_colour = 4, R = var3, G = var1, B = V 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
223HLS/HSB和RGB HSL(hue, saturation and lightness hSB(hue, saturation and brightness )颜色空间用于定义 台式机图形程序中的颜色,而且它们都是利用三条轴定义颜色。HSL与HSV很相似,都是 用六角形锥体表示颜色。与HSV相比,最大的差别HSL采用光亮度( lightnes)作坐标,而 HSV采用亮度( luminance)作标准值,而且HSL颜色饱和度最高时的光亮度L定义为0.5, 而HSV颜色饱和度最高时的亮度值则为1.0。 0~1 图2-03HSL颜色空间 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.87,G=0.07,B=007 步骤2:找出RG和B中的最大值 本例中, macolor=0.83, mincolor=0.07 步骤3:L=( macolor+ mincolor)2 本例中,L=(0.83+007)2=045 步骤4:如果最大和最小的颜色值相同,即表示灰色,那么S定义为0,而H未定义并 在程序中通常写成0。 步骤5:否则,测试L: If L =0.5, s=(maxcolor-mincolor ) /(2.0-maxcolor-mincolor) 本例中,L=045,因此,S=(0.83-0.07)0.83+007)=0.84 A J4 6: If R=macolor, H=(G-B)(maxcolor-mincolor If G=macolor, H=2.0+(B-R)(maxcolor-mincolor) If B=macolor, H=4.0+(R-G(maxcolor-mincolor) 本例中,R= macolor,所以H=(0.07-0.07)/(0.83-0.07)=0 步骤7:从第6步的计算看,H分成0~6区域。RGB颜色空间是一个立方体,而HSL 颜色空间是两个六角形锥体,其中的L是RGB立方体的主对角线。因此,RGB立
9 2.2.3 HLS/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。 图 2-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.87, 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)/(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用0°,360°中的数值表示,因此 H=H*60.0 如果H为负值,则加360°。 (算法引自:htp/ Blas cis mcmaster ca/- monger/hs- rgb html 2.HSL→RGB的算法描述 步骤1:IfS=0,表示灰色,定义R,G和B都为L 步骤2:否则,测试 IfL=0.5, temp2 =L+S-L*S 转换例如,如果H=120,S=0.79,L=0.52,则, temp2=(0.52+0.79)-0.52*0.79)=0.899 步骤3: templ=20*L-temp2 在本例中, templ=2.0*0.52-0.899=0.141 步骤4:把H转换到0~1 在本例中,H=120/360=0.33 步骤5:对于RG,B,计算另外的临时值temp3。方法如下 for R, 3=H+1.0/3.0 3=H for B, temp3 =H-1.0/3.0 mp3= temp3+1.0 if temp3> 1, temp3= temp3-10 在本例中, yp3=033+033=0.66, Temp3=0.33, Temp3=0.33-0.33= 步骤6:对于R,G,B,做如下测试 If 6.0*temp3 1, color= templ+(temp2-templ)*6.0*temp3 Else if 2.0*temp3< 1, color= temp2 Else if 3.04
10 方体的顶点:红、黄、绿、青、蓝和品红就成为 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, temp2 = L+S - L*S 转换 例如,如果 H=120, S=0.79, L=0.52, 则, temp2 = (0.52+0.79) - (0.52*0.79) = 0.899 步骤 3: temp1 = 2.0*L - temp2 在本例中, temp1 = 2.0*0.52 - 0.899 = 0.141 步骤 4: 把 H 转换到 0~1 在本例中,H=120/360 = 0.33 步骤 5: 对于 R, G, B, 计算另外的临时值temp3。方法如下: for R, temp3 = H+1.0/3.0 for G, temp3 = H for B, temp3 = H-1.0/3.0 if temp3 1, temp3 = temp3 - 1.0 在本例中, Rtemp3 = 0.33+0.33 = 0.66, Gtemp3 = 0.33, Btemp3= 0.33-0.33=0 步骤 6: 对于 R, G, B, 做如下测试: If 6.0* temp3 < 1, color = temp1+(temp2 - temp1)*6.0* temp3 Else if 2.0* temp3 < 1, color = temp2 Else if 3.0* temp3 < 2