本文转自:https://cloud.tencent.com/developer/article/1346167
摘要:
HDR技术的第二个理论基础是色度学。从前面的文章中我们了解到,光学以及人类视觉感知模型为人类提供了解释与分析人类感知亮度的理论基础,但是HDR技术不仅仅关注于提升图像与视频的亮度范围,同时也关注于提供更加丰富的色彩。因此,在本文中,我们将首先介绍人眼与色度学相关的生理特征以及人类对颜色的识别方式,然后介绍颜色空间的概念,最后再回到HDR,介绍与HDR相关的颜色标准。
色度学
由于视觉是人类的主观感受,因此无论是亮度还是颜色的研究,最根本的研基础都在于人眼的生理特征。人眼的最内层是视网膜,它布满了眼球后部的内壁。当眼球聚焦时,外部的光线在视网膜上聚焦。视网膜表面分布许多视觉细胞,人眼靠这些细胞感知外部光线,然后传递给大脑,形成视觉感知。这些视觉细胞分为两大类:视觉锥细胞以及视觉杆细胞。其中,视觉锥细胞对颜色非常敏感,而视觉杆细胞没有颜色感觉,因此人眼靠视觉锥细胞来产生颜色感知。视觉锥细胞又可以三类,它们分别对红色光,绿色光,蓝色光敏感。但是需要额外注意的是,这里提到的对某种色光敏感,不代表这种视觉锥细胞只能够感知到该中色光。也就是说,在可见光范围内的任意波长的色光,都能刺激三种视觉锥细胞,而某些特殊波长的光线能够对视觉锥细胞产生最大的刺激。
色度学研究的内容就在于如何在显示设备上产生与自然界类似的刺激,使人眼能够感受到相同的颜色。显而易见的是,最简单的方法就是对自然界的每一种颜色生产一种对应的发光原件,可以发出对应颜色的光线。但是,人眼可以识别上万中不同的颜色,而在每一个像素点设置上万个不同的发光元件基本是不可能的,而且生产上万种不同的发光元件的代价也过于高昂,因此,我们需要其他简单的,可行的方法来实现对自然世界中颜色的模拟。
可以想到的最直接的,也是人们一直以来使用的解决方式就是:利用人眼中只有三种视觉锥细胞的特性,只使用红色(r),绿色(g)和蓝色(b)三种光线,来模拟所有其他的颜色。因此,这三种颜色也被称为光的三原色。
这里需要思考一个问题:以黄色为例。在自然界中,显然将红色光与绿色光叠加,得到的新的光线的频率并不是黄色光的频率,但是,红色光与绿色光的叠加,给人眼的感受就是黄色。这种现象的原因是什么?
人眼的三种锥细胞,不同波长的光以及这些光的亮度会对三种锥细胞产生不同的刺激。同样以黄色光为例子,当人眼看见黄色光时,红视锥细胞与绿视锥细胞会产生某种程度的刺激,蓝视锥细胞则基本不产生刺激。而大脑接受到这种刺激后,产生了黄色的视觉。而通过改变红色光与绿色光的亮度,也可以使红视锥细胞与绿视锥细胞产生相同程度的刺激,而大脑接收到这样的刺激之后,同样会认为这是黄色,而非绿色与红色的混合色。
也就是说,人眼对颜色的感知,实际上是通过色光及其亮度,对三种视觉锥细胞产生刺激,然后神经系统将不同的刺激,映射为人感知中的不同的颜色。因此,模拟自然界中的颜色,实际上就是模拟它们对三种视觉锥细胞的刺激
为了实现使用三种原色光线生成其他颜色光线的目的,CIE(国际照明委员会)在1931年组织了一项实验,通过一些观测者的观察,来确定生成不同的颜色,所需的三原色光线的强度。他们将三种波长的光:700nm(红色光),546.1nm(绿色光),435.8nm(蓝色光)作为基色。在实验过程中,首先将三种基色的光投影到白色屏幕的一侧,接着,再讲第四束光-待测光投影到白色屏幕的另一侧。调节三种基色光的强度直到观测者感受到两侧的颜色一致时,就能够确定如何使用三种基色光得到各种颜色的光。
实验的最终结果是得到了三个颜色匹配函数
。这三个函数分别表示产生波长为λ的光,所需的红,绿,蓝三原色光的强度。
图1 三种颜色匹配函数曲线
实验结果的图像如上图所示。对上图中的单位做如下规定:当三原色光配比出等能白光时,三原色光各自的量称为一单位的红光[R],一单位的绿光[G]与一单位的蓝光[B]。此时三个原色光的通光量之比为1:4.5907:0.0601。此时,任意波长的光可以通过三原色光的线性组合得到:
这就是1931 CIE-RGB计色系统。对于任意单色光,理论上可以全部使用RGB三色光表示出来。但是由于435.8nm-546.1nm这一段的红色光通量为负值,因此在实际生产中无法实现,所以实际上并非所有单色光(只有一个频率,不会发生色散)都可以由RGB三原色表示出来。这里出现负值的原因是,待配色光为单色光,其饱和度很高,而RGB三色混合后,饱和度会降低。因此,想要配出一些单色光,需要将RGB三色光中的某一个与待配色光混合,才能实现。此时就会出现负值。
而对于非单色光(能产生色散的色光),任意光谱分布
的RGB值都可以由积分得出。
通过这种方法就可以将单色光与非单色光用RGB三原色表示出来。但是,此时出现的另一个问题是,人类对于颜色的感知包括色度与亮度两部分。例如,绿色会因为亮度的不同,带给人亮绿色,绿色,暗绿色等不同的感受,但是从色度角度来说,它们都是绿色,差别仅仅体现在亮度上。因此,想要表示准确的色度信息,就需要消除亮度带来的影响。通过对颜色匹配函数归一化,可以帮助消除亮度带来的影响。
归一化的结果如下:
由上面的三个式子我们可以发现,b(λ)=1-r(λ)-g(λ),因此,使用r(λ)与g(λ)就可以表示整个色域。
图2:使用r,g表示的色域
理论上来说,通过上述的函数,我们已经可以通过三原色光表示所有颜色了,但是从图中我们可以发现,在系数的取值中存在负值。例如上图中r轴在负数部分也有取值。
这会在实际的工业生产中带来不便,因为负值的光强是无法制造出来的。因此,CIE对此进行了修改,提出了1931 CIE-XYZ计色系统。目的是使得系数不再出现负值。
为了实现系数不再出现负值的目的,CIE制定了一系列规则,通过坐标变换的方式,将RGB表示法转变成了XYZ表示法。简单来说,可以将XYZ表示法看做RGB表示法的一种非线性变换,这种非线性变换的结果是系数不再出现负值。此时的XYZ与RGB这种自然界中存在的红光,绿光,蓝光不同,它的人为定义出的具有特殊匹配函数的三种“基色”,它的匹配函数
如下图所示:
图3. CIE-XYZ颜色匹配函数
这里我们不需要尝试将XYZ与自然界中的某种波长的光线对应,这是没有必要的,我们只需要知道它们是具有如上图所示的匹配函数,并且是由RGB通过非线性变换得到的新的“基色”即可。
与RGB色度表示法类似,将
进行归一化:
归一化后,x(λ),y(λ),z(λ)与r(λ),g(λ),b(λ)的关系为:
我们也可以发现z(λ)=1-x(λ)-y(λ)。因此,XYZ表示法也可以只是用X与Y表示整个色域,XYZ表示法下的色域图如下图所示:
图4:CIE-XYZ 1931
XYZ表示法与RGB表示法存在一定的联系并且有一些重要的性质:
点。同时,图2中的直线
对应于XYZ表示法中的y轴,且经过变换后,在图4中的对应长度为1,同理,
对应于x轴,且对应的长度也为1.
线段上的点,在新的XY坐标系中,仍然在这条线段上。
在新的坐标系中也为这个坐标。
XYZ表示法是用来表示色度的,也就是说,使用XYZ表示法可以表示人眼所能看到的全部颜色,但是还不能表示亮度,因为XYZ表示法是归一化以后的结果。因此,通过定义
,就可以解决这个问题,其中V(λ)是可见光的光谱光效率函数,即人眼对等能量的各种色光的敏感程度函数。由此,就可以通过
来表示出
。
这三个刺激值就可以使人眼既感受到颜色,又感受到亮度。它们也被称为“CIE 1931标准观察观察者标准”。
而对于任意一个知道光谱分布的光
,如果想要得到它在“CIE 1931标准观察观察者标准”下的表示方法,可以先求出对应的XYZ值:
这里的Y值就是颜色的亮度。然后进行归一化:
这里的小写x,y就是颜色在色度图中对应的色坐标。有了色坐标x,y以及亮度Y,一个光的颜色就可以被确定下来了。因此,“CIE 1931标准观察观察者标准”也被称为CIE-xyY表示法。
色域
上一节介绍了颜色空间,并且给出了颜色空间的常用表示方法。如图4中所示的舌型图,表示了人眼所能感知到的所有颜色的范围。我们需要注意的是,这些颜色是指自然界中人类所能感知到的所有颜色。在图像与视频处理领域,显示设备所能显示的颜色,远远没有自然界中的丰富多彩,产生这种情形的原因主要是生产力与技术的限制。上一节我们提到,显示设备通过在三种基色混合,来表示其他的颜色,并且我们提到“几何上说,色域中不存在能包含整个色域的三角形,即人类视觉的色域不是三角形的,使用三色表示法无法表示整个人类色域,而只能表示局部。”因此,显示设备的制作原理导致我们无法使用显示设备来显示出自然界中存在的所有颜色,而只能选择其中的一部分颜色进行显示,如何选择则取决于颜色标准。
图像领域中通常使用的色域标准来自ITU-R,使用最广泛的是BT.709 [1]和BT.2020 [2]标准。BT.709是HDTV的标准,也是目前普通显示设备使用的色域标准。BT.2020是UHDTV的颜色标准,也是HDR技术所支持的色域标准。
ITU-R BT.709标准
ITU-R BT.709也称为Rec.709,该标准的第一版于1990年发布。BT.709定义了
和
的两种编码模式,每种模式的各通道都有8或10比特两种类型,在8位编码中,
通道和
通道的标称范围是16~235,Cb和Cr通道的标称范围是16~240,中性值为128。因此,在
中,黑色的值是(16,16,16),白色的值是(235,235,235);在
r中黑色的值是(16,128,128),白色的值是(235,128,128)。标准RGB空间的0和255仍保留作为定时参考,可能不包含颜色数据。
BT.709标准同时支持模拟信号与数字信号,因此在BT.709标准内部,存在两个重要的转换:
编码到
编码的转换,以及模拟信号到数字信号的转换。
编码下的模拟信号到
编码下的模拟信号之间的转换为:
其中
分别表示亮度信号和两种色差信号,
分别表示
三个通道的模拟信号值。
两种编码方式的数字图像的量化方法是:
其中n表示量化信号的比特长度,INT作为将小数化整的四舍五入功能。因此我们可以得出
编码下的数字信号到
编码下的数字信号之间的转换方法:
ITU-R BT. 2020标准
ITU-R BT.2020定义了UHDTV的各个方面,比如显示分辨率、帧速率、色度子采样、比特深度和色彩空间,它是由国际电信联盟在2012年发布的。相比于BT.709,BT.2020提供了更加广泛的颜色范围。BT.2020也是HDR技术的颜色空间。
BT.2020标准的重要性是毋庸置疑的,正如BT. 709对于高清视频传输与高清显示设备制造方面起到的引导性作用,BT. 2020标准同样也深刻地影响着消费领域超高清显示设备的设计与制造,例如目前绝大部分的4K平板电视的物理分辨率都是采用BT. 2020标准的3840×2160,但BT. 2020标准绝不仅仅在分辨率方面有所提升,在色彩和刷新频率和信号格式与分析等方面也进行了相关的规定。
相对于BT.709标准,BT.2020标准大幅度提升了视频信号的性能规范,色彩深度方面提高至10bit或12bit,很大程度上增强了整个影像的色彩层次,色域的广度也大大增强,两种标准的色域对比如图1.13所示;显示分辨率方面,BT.2020标准定义了4K和8K两种分辨率,这些分辨率的宽高比为16:9,支持的刷新率包括120p、60p、59.94p、50p、30p、29.97p、25p、24p、23.976p。不得不提的是,在BT.2020标准中取消了隔行扫描,所有超高清标准下的影像都是基于逐行扫描的,无疑是历史性的突破,进一步提升了超高清影像的细腻度与流畅感。
图5:BT.709与BT.2020对比
与BT.709一致,BT.2020也支持了
和
两种编码模式,以及支持模拟与数字两种信号。同样的,BT.2020标准内部也存在两个重要的转换:两种编码模式之间的转换以及模拟信号到数字信号的转换。
编码下的模拟信号到
编码下的模拟信号之间的转换:
编码下的数字信号到
编码下的数字信号之间的转换:
除了颜色空间和色域的转换,在处理HDR源视频或通过图片合成HDR视频时,通常还要经过采样方式和光电转换函数等步骤的转化,常见的HDR视频符合SMPTE ST 2084规定的转换方程的要求,按照不同要求经过PQ曲线或HLG的处理。具体可以参考本系列前面的内容。
BT. 709到BT. 2020的颜色转换
UHDTV(Ultra-high Definition Television,超高清电视)是未来电视与显示领域的发展趋势,现在,越来越多的电视和节目制作人正开始制作UHDTV节目。由于UHDTV还在刚刚起步的阶段,因此适配于UHDTV的节目内容数量仍然不足,因此,将原有的大量的HDTV的节目,通过一定的转换,转变为UHDTV节目,就是一个解决UHDTV节目数量不足的可行的方案。由于UHDTV支持的色域要宽于HDTV的色域,在转换的过程中,不可避免的需要对节目从ITU-R BT.709标准向ITU-R BT.2020标准进行颜色转换。
BT.709到BT.2020的转换有一个重要的限制,即BT.709标准下的颜色,在BT.2020标准下要是同样的颜色。换句话说,如果这个颜色是两种色域中都存在的,那么这个颜色在转换过程中应当保持不变;而如果这个颜色是BT.2020中独有的,这就需要进行颜色转换。BT.709到BT.2020的转换可以大致分为三个主要步骤:第一个步骤是逆量化,得到BT.709标准下的模拟信号值
。第二个是色域转换,将BT.709下的模拟信号值,转换为BT.2020标准下的模拟信号值。最后一个步骤是量化,得到BT.2020标准下的数字信号。选择在模拟信号域进行色域转换而不是直接在数字信号域进行色域转换的原因是为了保留更多的信息与细节。由于量化过程会存在信息的丢弃,并且BT.709的色域比BT.2020小,如果直接用数字信号进行转换,无疑会使得BT.2020色域下的图像效果变差。因此,通过逆量化过程,恢复图像的相关细节,然后进行模拟信号的色域转换,就可以解决这个问题了。
对于原视频/节目的不同形式,转换方式也略有不同。根据信号源的亮度是否恒定,转换方式可以分为以下两种:
1. 非恒定亮度信号的转换
图6. BT.709到BT.2020在非恒定亮度信号格式下的转换过程
上图是非恒定亮度信号的转换流程图。由于BT.709与BT.2020均支持两种编码方式:
和
,因此逆量化过程的输入与量化过程的输出均有两条路径。根据需求的不同,可以选择不同的输入输出模式。
每一个区块的具体实现过程以及相关函数定义,可以参考BT.2087 [3]。
2. 恒定亮度信号转换
图7. BT.709到BT.2020在恒定亮度信号格式下的转换过程
上图是恒定亮度信号的转换流程图。由于BT.709与BT.2020均支持两种编码方式:
和
,因此逆量化过程的输入与量化过程的输出均有两条路径。根据需求的不同,可以选择不同的输入输出模式。
每一个区块的具体实现过程以及相关函数定义,可以参考BT.2087。
BT. 2020到BT. 709的颜色转换
在现在的实际UHDTV节目的广播过程中,特别是在同时进行UHDTV和HDTV广播的情况下,从UHDTV到HDTV的实时高质量色域转换就至关重要。也就是说,需要一些方法,来使得UHDTV也能够在HDTV设备上成功播放,并且不影响观看。这就需要从ITU-R BT. 2020到ITU-R BT. 709的颜色转换,也就是UHDTV到HDTV的转换。理想情况下转换应该满足以下要求:BT.709色域内的颜色应该保持不变;转换方法适用于于BT.2020和BT.709之间的多次转换;感知的色调变化必须尽可能小;空间细节没有重大损失;不会在颜色上引入可见的不连续性;映射方法在数学上是可定义的。然后没有可以同时满足所有这些要求的通用色域映射方法。在从更广泛的色域转换到更小的色域时,BT.709色域外的颜色修改是不可避免的。此转换必然是不同要求之间的妥协,可能因应用程序而异。色域映射算法通常受艺术创作,人类视觉,技术约束和经验等方面的影响。下面我们介绍一种从BT.2020到BT.709的基于线性矩阵的简单变换。
图8 基于线性矩阵变换从BT.2020到BT.709的颜色转换
图8是从BT.2020到BT.709的基于线性矩阵变换的颜色转换的框图。 除了输出信号被严格限制之外,这是ITU-R BT.2087标准中对从BT.709转换到BT.2020所规定的操作的逆操作。 这种方法在条件限制的情况下是最直接简单的。
这种方法首先使用ITU-R BT.2087中规定的两个非线性到线性的传递函数(一种是用于使用电光转换功能的显示参考方法(EOTF),一种是用于使用反光电转移函数(OETF))之一将归一化的非线性RGB信号转换为归一化的线性RGB信号。接着通过矩阵运算,将BT.2020颜色空间的RGB信号转换到BT.709颜色空间的RGB信号。最后再通过使用ITU-R BT.2087建议书规定的两种线非线性传递函数(一种是使用反向EOTF的显示参考方法,另一种是使用OETF)之一将线性RGB信号转换为非线性RGB信号。从归一化线性RGB信号(EREGEB)到归一化非线性RGB信号(E′RE′GE′B)的转换。
该方法具有非常理想的特性,即使在BT.2020和BT.709之间进行多次转换之后,它也不会改变BT.709色域内的颜色。 然而,BT.709色域之外的色彩是硬限幅的,即小于零或大于1的RGB信号(EREGEB)会被限幅为零或1,这会导致明显的色调偏移和空间细节的损失。 虽然大多数内容看起来都很好,但色调和空间细节方面还是会有所损失。
色域转换的更多内容,可以参考本系列前作《HDR关键技术-色域映射》。