在开始这篇文章之前,首先得知道,什么是图像子采样,以及为什么要介绍这个话题。
首先图像子采样,其实就是图像采样。这个子的含义并没那么高深,可能有的同学一看标题,以为子采样是种多么高深的技术,这里直接按采样来理解就好。我们曾在电视图像数字化中,讲过采样这一步骤,它实质上就是指,用多少点来描述一幅图像,也即图像的像素点有多少个。不过在讲图像采样的时候,我们不说像素点,相应的,我们称它为采样点,其实是一个意思。
通常,我们对彩色电视图像进行采样时,会使用两种方法。
一种是使用相同的采样频率,对图像的亮度信号和色差信号进行采样。
另一种则是对亮度信号和色差信号,分别采用不同的采样频率进行采样。而如果对色差信号使用的采样频率,比对亮度信号使用的采样频率要低,这时我们就说它是图像子采样。
其实这两种方法很好理解,首先采样频率我们之前讲过,它的公式为:
采样频率 = 帧频 x 每帧的行数 x 每行上的采样数目
它的意思是:每秒采样到的采样点数目,知道了这点就来看一下上面这两种方法的区别。
第一种是使用相同的采样频率,对亮度和色度(不用解释,色差即代表色度)进行采样,说明亮度和色度的采样点数目是相同的,进而说明,在图像的每一个像素上,我们都需要对亮度和色度同时进行采样。这点我们可能觉得很正常,不过却是没必要而且浪费带宽的。
理解了第一种,第二种就很好理解了。当色度的采样数目,比亮度的要低时,这种采样方法就叫图像子采样,这里的子不是指父子的子,而是指高低的低。
这有的人可能就纳闷了,为什么色度的采样数目,可以更低呢?我们之前说过,人眼对亮度的敏感度,要高于色度。虽然这样说,但是我们还是没有直观的感受,所以我找了幅图:
亮度(左) 色度(中) 完整图像(右)
我想这幅图应该很直观,最左边只保留了亮度,而中间提取出了色度,右边则是完整的图像,左边 + 中间 = 右边。当然这里的亮度我们专指黑白灰,而不考虑光强等表示光通量的因素,因为我们已经定义了比较两种颜色的标准光源。
所以这时我们应该比较清楚了,就像我们小时候看黑白电视,也并不会产生错误信息一样。
所以下面我们就来看看,常用的图像子采样格式,比如4:4:4, 4:4:0, 4:2:2, 4:1:1, 4:2:0
首先来看一下这种格式表示方法,理解了这种表示方法,才能理解各个子采样格式。显而易见,这种格式分为了三部分,维基百科上表示为:J:a:b。这时千万不要以为它代表了,Y:Cb:Cr,因为按照第一印象,我们自然而然会这么认为,其实完全不是这样。
这里的J也就是第一个位置,它表示水平采样点数目,通常我们以两行8个采样点为一个单位,每行4个采样点。
第二个位置,也就是a,它表示4个采样点的第一行,色度样本的个数。
第三个位置,也就是b,它表示4个采样点的第二行,色度样本的个数。
当然这是默认规则,对上面那几个子采样格式适用,而4:2:1并不是按照这个规则来的,不过我们也不打算介绍它,因为它极少使用。下面我们就按照这个规则,一一介绍,规则没看懂没关系,看完一个示例就懂了。这里我们需要注意,每个采样点,我们都需要对亮度进行采样,所以规则里并没有哪个数是代表亮度的。那么为了便于分析,我们从后往前介绍
4:2:0 YCbCr格式
对照规则,第一个4代表了水平4个采样点,也即一个单位的水平采样数目。第二个2代表第一行有2个色度样本,第三个0代表第二行没有色度样本。如下图:
4:2:0 YCbCr格式的显示
对照右图,可以看到左图把采样点,按每4个像素作为一个显示单位,它们共用一个色度。而我们通过右图就可以发现,每4个采样点,只有左上角那个采样点,采样了色度。所以这4个采样点显示的时候,它们显示的色度,也是左上角那个值,而亮度则各自显示各自的。这就相当于,每4个像素,用4个Y样本,1个Cr样本,1个Cb样本,共6个样本来显示,平均一个像素1.5个样本。它显示的实际效果,就是下图这样子:
4:2:0 YCbCr格式的显示
4:2:0 YCbCr格式的使用
这种子采样格式的使用非常普遍,H.261、H.263和MPEG-1、MPEG-2(后面介绍)中就使用这种采样格式。不过MPEG-1和MPEG-2在实际使用的过程中,对色度的取样和上面描述的有所不同。这在科学技术的发展上,是很常见的事情。其中MPEG-1在对色度取样时,并不是对4个采样点的坐上角那个进行取样,而是通过这4个采样点的色差,计算得出的Cb和Cr。
MPEG-1等使用的4:2:0子采样格式
这点了解就好,以免在看其他技术文的时候陷入误区。
4:1:1 YCbCr格式
从图中可以看到,这种子采样格式,在水平扫描线上,每4个Y样本就有一个色度样本。而它在显示的时候,对于没有色度样本的像素点来说,它使用前后相邻的Cr和Cb样本,来计算该Y样本的CbCr。这种格式,是数字电视盒式磁带(DVC)使用的格式。
4:2:2 YCbCr格式
这种子采样格式,在水平扫描线上,每2个采样点就有一个色度样本。同样,在显示的时候,对于没有色度样本的像素点来说,它使用前后相邻的Cr和Cb样本,来计算该Y样本的CbCr。而且该格式,也是在ITU-R BT.601中使用的子采样格式。
4:4:0 YCbCr格式
从图中就可以看出,这种子采样格式,采样的是隔行采样色度样本的方式,因为并不常用,知道就好。
4:4:4 YCbCr格式
这种格式显而易见,并不是子采样格式,因为它的色度样本数,和亮度样本数,是一样的,所以它就是普通的采样格式。它代表每条扫描线上,每4个连续的采样点,取4个亮度Y样本,4个红色差Cr样本,4个蓝色差Cb样本。相当于每个像素,用3个样本显示,也就是YCbCr都有值。所以这种格式,在显示一个像素时所使用的样本数,算是最多了。
下图为维基百科上,这几种采样格式的显示对比图: