彩色图像转灰度图像时用到的亮度方程是如何确定的?
概述
在数字图像处理中,常常需要将彩色图像转换为灰度图像,此时需要使用亮度方程 Y = r R + g G + b B。只要将彩色图像每个像素的 R,G,B 值代入方程,即可计算出对应的 Y 值。然而,常用的亮度方程有若干个版本,区别在于 r,g,b 三个系数稍有差异,许多小伙伴常常被如下问题困扰:
● 亮度方程是哪里来的?
● 亮度方程(的系数)是如何确定的?
● 我应该使用哪个版本的亮度方程?
实际上,这是一个色度学的基本问题,下面就让我们从源头开始一起探索一下。
亮度方程是哪里来的?
全球第一个广泛使用的彩色电视标准是美国 NTSC(国家电视标准委员会)于 1953 年提出的,故也称作 NTSC 制式。可以说,彩色电视是 CIE 1931$\bar{x}(\lambda),\bar{y}(\lambda),\bar{z}(\lambda)$标准色度观察者与 XYZ 色空间最早的商业应用之一。
图1 CIE 1931 xy 色品图(图像来源:https://en.wikipedia.org/wiki/CIE_1931_color_space#/media/File:CIE1931xy_blank.svg)
由 CIE 1931 xy 色品图不难看出,选择红、绿、蓝三种色光叠加,容易混合出更多种类的颜色,因此,电子图像显示设备都不约而同地选择了这三种基色,这就是亮度方程中出现 R,G,B 的原因。然而,在彩色电视诞生前,黑白电视广播就已开始商用,所谓“黑白”实际上是指灰度图像,因此黑白电视只需要一路表征图像亮度的信号,即亮度方程中的 Y。而亮度方程正是在这种背景下诞生的,它在 Y 与 R,G,B 之间搭建了一座桥梁,使得彩色电视信号可以兼容黑白电视接收机。当然,彩色电视接收机还需要除 Y 之外的另外两路信号,方能还原出彩色图像。
电视是为广播而生的,而广播是一对多的,因此,接收机的成本要尽可能低。因此,彩色电视信号以上述显示三基色为基础,便于接收机进行图像信号处理与显示。与数字图像的 R,G,B 像素值的意义相同,彩色电视信号携带的信息是这三个基色的“数量”。如此一来,就产生两个问题: 1. 这三个基色究竟是哪三种颜色? 2. 每一份基色的数量为何?
以上两个问题的答案,就“隐藏”在彩色图像相关的信源标准中。
电视是为广播而生的,而广播是一对多的,因此,接收机的成本要尽可能低。因此,彩色电视信号以上述显示三基色为基础,便于接收机进行图像信号处理与显示。与数字图像的 R,G,B 像素值的意义相同,彩色电视信号携带的信息是这三个基色的“数量”。如此一来,就产生两个问题: 1. 这三个基色究竟是哪三种颜色? 2. 每一份基色的数量为何?
以上两个问题的答案,就“隐藏”在彩色图像相关的信源标准中。
亮度方程(的系数)是如何确定的?
以 1953 年的 NTSC 彩色电视标准为例,标准定义了三个基色以及基准白色的 xy 色品坐标。
| 色品坐标 x | 色品坐标 y | |
| 红基色,[R] | 0.67 | 0.33 |
| 绿基色,[G] | 0.21 | 0.71 |
| 蓝基色,[B] | 0.14 | 0.08 |
| 基准白, [W](CIE C) | 0.3101 | 0.3162 |
由以上色品坐标以及色品坐标之和为 1(即 x+y+z = 1)的定义,我们可计算出三基色的色品坐标 z,并将其列于矩阵 C 中
$\rm{C}= \begin{bmatrix} x_{[R]} & x_{[G]} & x_{[B]} \\ y_{[R]} & y_{[G]} & y_{[B]} \\ z_{[R]} & z_{[G]} & z_{[B]} \end{bmatrix} = \begin{bmatrix} 0.67 & 0.21 & 0.14 \\ 0.33 & 0.71 & 0.08 \\ 0.00 & 0.08 & 0.78 \end{bmatrix} \tag{1}$
如果将颜色看作是色空间中的向量,那么,以上色品坐标就定义了 NTSC [R][G][B] 这三个基向量在 CIE 1931 XYZ 色空间中的方向,也就是回答了“这三个基色究竟是哪三种颜色”的问题。然而,向量的长度(也就是每一份基色的数量)待定。我们知道,对于色光来说,“数量”是通过亮度来体现的。那么,每一份基色的亮度又如何确定呢?
在定义一个新的色空间或显示系统时,为了方便,我们一般遵循一个习惯:1 [W] = 1 [R] + 1 [G] + 1 [B],即 1 份基色 [R]、1 份基色 [G]、1 份基色 [B] 相加混合可以匹配 1 份(即亮度为 1 的)基准白色 [W],即
$\begin{bmatrix} X_{[W]} \\ Y_{[W]} \\ Z_{[W]} \end{bmatrix} = \begin{bmatrix} X_{[R]} & X_{[G]} & X_{[B]} \\ Y_{[R]} & Y_{[G]} & Y_{[B]} \\ Z_{[R]} & Z_{[G]} & Z_{[B]} \end{bmatrix}\tag{2}$
$\frac{1}{y_{[W]}} \cdot \begin{bmatrix} x_{[W]} \\ y_{[W]} \\ z_{[W]} \end{bmatrix}= C \cdot\begin{bmatrix} k_{[R]} \\ k_{[W]} \\ k_{[W]} \end{bmatrix} = \rm{C\cdot k}\tag{3}$
$\frac{1}{0.3162} \cdot \begin{bmatrix} 0.3101 \\ 0.3162 \\ 0.3737 \end{bmatrix} = \begin{bmatrix} 0.67 & 0.21 & 0.14 \\ 0.33 & 0.71 & 0.08 \\ 0.00 & 0.08 & 0.78 \end{bmatrix} \cdot \rm{k}\tag{4}$
我们解出式 (4) 中的 k 并将其右乘到矩阵 C 后,可得$Y_{[R]} = 0.2989, Y_{[G]} = 0.5866, Y_{[B]} = 0.1144$。这便是每一份三基色的亮度,如此,我们便得到了三个基向量的长度(即每一份基色的“数量”)。根据定义,亮度方程计算的是三基色以一定比例相加混合时产生的总亮度,也就是$\rm{Y= Y_{[R]} R + Y_{[G]} G + Y_{[B]} B}$。我们再对比一下 NTSC 1953 标准中的给出的亮度方程,$\rm{Y = 0.299 R + 0.587 G + 0.114 B}$,与我们计算出的结果一致。
我应该使用哪一个版本的亮度方程?
由以上分析可知,当三基色的色品坐标确定后,使用基准白色的色品坐标可计算出三基色的亮度,亮度方程也就随之确定了。因此,从色度学角度看,亮度方程的选择,取决于相应的三基色与基准白色的色品坐标,而这些坐标均有标准可参考。不过,以下两个问题值得注意。第一,由于 NTSC 1953 的颜色标准过于“理想化”,并未得到大规模普及,实际使用的模拟彩色电视广播的三基色及基准白的色坐标与 NTSC 1953 有差异,但 NTSC 1953 标准的亮度方程却被这些标准沿用。显然,从色度学视角出发,这是不正确的。第二,大部分彩色电视系统中的 R,G,B 分量均是经过非线性的伽马校正(OETF)之后的产物,因此,电视工程中将非线性的 R',G',B' 值带入使用色度学方法计算出的亮度方程。显然,这亦是不正确的。
| NTSC 1953 | EBU Tech. 3213(欧洲事实标准) | SMPTE 170M(美国事实标准) | |
| 红基色,[R] | x = 0.67, y = 0.33 | x = 0.640, y = 0.330 | x = 0.630, y = 0.340 |
| 绿基色,[G] | x = 0.21, y = 0.71 | x = 0.290, y = 0.600 | x = 0.310, y = 0.595 |
| 蓝基色,[B] | x = 0.14, y = 0.08 | x = 0.150, y = 0.060 | x = 0.155, y = 0.070 |
| 基准白,[W] | CIE C | CIE D65 | CIE D65 |
显然,以上两个问题均会导致亮度方程计算出的 Y 不能准确地表征亮度。然而,如果从“对标”的角度,也只好参考标准,将错就错。毕竟,随着电子影像的使用从电视广播拓展到各行各业,这种错误早已“深入人心”、“遍地开花”。
