这篇我们开始讲YUV颜色空间,我们把这几篇文章,前面都带上这几个字,就显示出来了它的重要性,它是理解电视发展史,图像数字化,图像/视频编码的核心,至少我是这么认为的。所以前面分四篇去讲了电视机的来龙去脉,相信看了前四篇,对它也有个初步了解,下面我们就开始正式介绍YUV颜色空间。
YUV主要应用在彩色图像和视频编码层面,为什么这么说呢?前面我们就知道,模拟图像数字化为数字图像时,需经历采样、量化和编码压缩阶段,而YUV就主要应用在编码压缩这个阶段。
那为什么是YUV这种颜色空间,而不是RGB或者其他颜色空间呢?因为YUV颜色空间,更好的将人类感知考虑进去了。比如,人眼对亮度更敏感,黑白亮度单纯依靠亮度,就可以录制播出节目,并且人眼不会对黑白图像产生信息误读。而彩色电视,只是顺势而为的,在黑白图像的基础上,加入了人们心里预估的颜色。所以 “人眼对亮度更敏感” 这点非常重要,在图像和视频编码中,就更深入的应用了这点,而不影响人眼对图像的判断。
YUV能够在除电视系统以外的,其他彩色图像或视频上,大展身手,也源于了它最初就是应用在电视上。后来数字电视诞生,人们利用YUV对图像进行编码,产生了一系列的编码标准,然后这些标准被用在商业上。由摄像器材产生的图像信息,不再只能产生模拟图像,和广播电视,它们被编码为通用的图片格式或视频格式,存储在手机、电脑、存储卡等磁盘上。
虽然我们通常在说YUV,但是和它相关的颜色空间有多个,比如Y’UV、YUV、YCbCr、YPbPr。下面我们分开来说。
1、YUV
这个颜色空间我们应该很熟悉,最初知道它的时候,是在讲彩色模拟电视的时候,它是PAL彩色电视制使用的颜色空间。其中的Y是黑白电视系统使用的Y,而后彩色电视产生,于是在Y的基础上,加上了色差信息U和V,保证了黑白电视的兼容。这里的 UV为什么称为色差,是因为它们分别是蓝和红与Y的差值
。也即
U = B - Y V = R - Y
注意这里的B和R不是RGB里的B和R,只是代表了蓝和红信息,就像CIE XYZ一样,如果你还记得的话。
2、Y’UV
它其实和YUV是同一个概念,只不过Y带了撇,代表了非线性的YUV。我们之前提到过伽玛矫正,这里的非线性就是伽玛校正的结果。
3、YPbPr
这个也是模拟电视中使用的,只需要知道就好,和YUV类似。
4、YCbCr
YCbCr颜色空间是在ITU-R BT.601和ITU-R BT.709中定义的,它们定义了YCbCr为数字电视的颜色空间,并且定义了RGB和YCbCr的具体转换关系。说到这里你可能明白了,我们前面说的图像或视频编码,使用的颜色空间就是它,因为它是使用在数字电视中的颜色空间,并且定义在ITU-R BT.601和ITU-R BT.709中,说明是在图像数字化过程中使用的。而前面几个颜色空间,比如YUV、YPbPr,是模拟电视中使用的,跟数字视频或图像的编码不沾边。
那么现在就有一个问题了,为啥我们文章开头在讲编码时,还使用YUV这一词呢?那是因为,现在我们通常说的YUV,不只是模拟电视里那个YUV了,它在计算机行业,被用来描述使用YCbCr编码的文件格式。所以我们说YUV时,也是在说YCbCr。
哈哈,是不是很魔性,那么接下来,我们就来分析分析YCbCr,主要是来看看,在文档里定义的它和RGB的转换关系,这也是做视频编码的人比较熟悉的数字。
ITU-R BT.601中定义的YCbCr与RGB的转换
这张图是从维基百科上截的,式中的Y’UV也即YCbCr。一式具体的计算如下:
式中的系数,就是ITU-R BT.601定义的,因为SDTV较早流行,所以目前在做编码时,通常使用的也就是这个转换关系。在YUV向RGB转换式中,当我们假设U和V同时为0时,也就是色差信号为0,我们可以看到,R、G、B三个值同时等于Y,也就是RGB三值相等。了解RGB相加混色我们知道,这个时候产生的是黑白灰,也即之前的黑白电视。
而式中的U和V,则分别是B和R与亮度之差,再乘以系数得来,但是我们还是称之为色差,YCbCr中的b和r,就分别代表了是B和R与Y的色差。而Cb和Cr,也就相当于U和V。
那么接下来,我们就来看看YCbCr在电视系统中的应用。
电视系统中颜色空间的转换
这张图,就是电视系统中使用的颜色空间的转换。图中的转换分为两部分,上面从RGB到YCbCr的转换,下面是YCbCr再转换到RGB。之所以需要这两个过程,是因为RGB颜色空间产生的图像信息太过庞大,转换到YCbCr利于编码,而之后又再转回RGB,是因为YCbCr图像信息,从通信通道传输到接收端,也即电视机之后,显示器显示图像信息需要RGB值来驱动。
在图中可以看到,摄像设备拿到三色刺激,也即线性的XYZ或R1G1B1,经过一个3x3的矩阵M得到一个线性的RGB空间。这个过程可以理解为类似下图的转换
然后使用非线性函数对每个颜色分量进行变换,也即r矫正(伽玛校正)。图中的0.5代表摄像机的r值,2.5代表普通CRT的r值。这个值每个设备通常不一样,比如NTSC里的r指定为2.2,PAL里的r指定为2.8,虽然CRT的r值实际上是2.35。
经过伽玛校正后,线性的RGB也就变成了非线性的R’G’B’信号,同样带撇表示非线性。然后再用一个3x3的色差编码矩阵M得到非线性的色差分量,产生Y’CbCr,可以理解为是进行了如下变换
然后就在这个基础上,把Y‘CbCr经过子采样滤波器进行采样,得到经过子采样的色差分量,也即我们通常说的4:2:2、4:2:0子采样格式。关于子采样,我们下篇会详细讲。
这样一来,我们就完成了颜色空间的转换,不考虑编码压缩的情况下,就可以把变换后的颜色分量,通过通信通道传输到接收端,或者是存储起来。那么在接收端,或者是要显示图像的时候,按照从右到左的方向进行变换,拿到RGB三色刺激值,交给显示器就可以了。
联系我们之前讲的CIE XYZ、CIE xyY,下图为部分颜色空间的转换关系
部分颜色空间的转换关系
可以看到图像编码,只应用了颜色空间中少有的几个颜色空间。而大部分的颜色空间,他们应用的场合都不一样,通常如下表所示
颜色空间的类型
这张表,就相当于对颜色空间的一个总结了吧。
参考资料:
https://en.wikipedia.org/wiki/YUV
https://en.wikipedia.org/wiki/YCbCr