第1章 概论
实验证明,人类感知外界的信息有80%是通过视觉得到的。随着信息时代的高速发展,视频已经成为不可或缺的信息载体,在通信、娱乐、安防等各种领域都有着丰富的视频应用。但是,直接存储或传输原始的视频数据是非常不现实的,因为原始视频的数据量是极为庞大的,所以实际应用中必须对视频数据进行压缩。
视频压缩又称为视频编码(video coding),视频数据之所以能够被压缩,其实是因为其具有大量冗余成分。利用先进的视频压缩手段,可以将视频以十倍、百倍乃至千倍的比例进行压缩,使得高分辨率、高帧率的视频能够实时地通过网络进行传输和播放,并存储在普通的家用计算机中。可以说,视频压缩是多媒体时代的一大基石。
本章将对视频编码中的基础概念进行介绍。
1.1 视频的组成
1.帧、像素与分辨率
视频是按照一定时间间隔采集的静止图像序列,一幅图像也被称为一帧(frame)。
在空间维度上,一帧图像可以视为二维空间中的一个采样点阵,而采样点也被称为像素(pixel),它是图像不可分割的*小单位。像素宽高比是单个像素的宽高比例,而像素的行列数则用于表示图像的(空间)分辨率。对于面积相同的图像,分辨率越高,就意味着单位面积中的像素数目越多,能够将图像细节表示得越清晰。图像的宽高比由像素宽高比和分辨率共同决定。
不同的视频格式具有不同的分辨率,表1-1列举了一些典型的数字视频格式。
表1-1 数字视频分辨率格式
2.帧率
在时间维度上,由于人眼的“视觉暂留”,如果相邻两帧的间隔时间足够短,人眼就无法区分图像序列中的单张静态图像,只会看到平滑运动的视频。每秒包含的帧数被称为帧率,即时间分辨率,单位为 fps(frame per second)。帧率更高的视频能够给人更加平滑连贯的视觉体验,能够流畅地显示高速运动的视频。但也不必一味地追求更高的帧率,因为人眼对于帧率的感知是有限的。到达足够高的帧率(如60fps)后,继续增加帧率不会带来明显的体验变化,反而会过多地增加数据量。
目前,国际上*常用的电视标准制式是 NTSC、PAL和 SECAM。其中,北美及许多亚洲国家采用 NTSC制式,中国和许多西欧国家使用 PAL制式,而 SECAM制式主要用于东欧和法国。三种制式具有不同的帧率和分辨率,如表1-2所示。不同的制式之间不兼容,某一制式的电视节目必须经过一定的转换,才能被另一制式的电视播放。
表1-2 国际三大电视制式
3.场
通常,电视显示画面的扫描顺序是从左到右、从上到下。按照扫描方式,视频帧可以分为逐行扫描帧和隔行扫描帧两类。顾名思义,逐行扫描帧是逐行进行扫描的。而为了节约传输带宽,或者提高时间采样率,可以将一帧分为两个场(field)分别扫描。先扫描所有奇数行构成顶场,再扫描所有偶数行构成底场,如图1-1所示。
图1-1 帧、场结构
4.量化深度与动态范围
像素的幅度值如果用 n bit表示,则称量化深度为 n,一共可以表示2n个量化等级。例如,用8bit来表示黑白图像,则一共可以表示256个灰度等级。动态范围是指*大亮度值与*小亮度值的比,自然界中真实存在的动态范围约为108,人眼具有很高的动态范围,大概是在105左右。显然,显示器、照相机等设备仅用256个亮度值难以体现这些细节。要采集或呈现高动态范围的图像,应该采用更大的量化深度(如10bit),并配合一定的高动态范围(high-dynamic range,HDR)技术。
5.码率
码率又称比特率,是指单位时间传送数据的比特(bit)数,单位为 bit/s(bit per second)。数字视频的信息传输量一般较大,所以往往以每秒千比特(kbit/s)或每秒兆比特(Mbit/s)为单位进行计量。由于传输信道的带宽、缓冲区等是有限的,为了节约带宽,或者防止溢出造成数据丢失,视频编码在实际应用时必须要考虑相应的码率控制方案。
1.2 色彩空间
视频压缩领域中,常见的色彩空间有 RGB、YUV等。
1. RGB
根据三基色原理,自然界中的绝大部分色彩都可以由三种基色按一定比例混合得到;反之,任意一种色彩均可被分解为三种基色。其中,人眼对红(R)、绿(G)、蓝(B)三种颜色*为敏感,而采用这三种基色表示色彩的方法,即为 RGB色彩空间。这三个分量采用相同的精度表示,例如,传统图像一般采用8bit来表示单个分量值,则 RGB色彩空间中单个像素需要24bit表示。
颜色是由亮度(luma)和色度(chroma)共同表示的,色度反映的是不包括亮度在内的色彩信息。但是, RGB色彩空间的三个分量值均与亮度相关,换句话说,一旦亮度发生改变,R、G、B的值均会相应改变,因此 RGB色彩空间并非图像处理的*佳选择。
2. YUV(YCbCr)
相较于色度,人类视觉系统(HVS)对亮度的感知更为敏感。 YUV色彩空间就是根据这一特点,使用一个亮度分量(Y)和两个色度分量(U、V)来表示像素。在 YUV家族中, YCbCr是应用*为广泛的,其中 Cb指蓝色色度分量, Cr指红色色度分量。在视频压缩领域,一般不对 YUV和 YCbCr进行区分。
根据 ITU-R BT.601建议书[1],YUV分量与 RGB分量之间可以按照式(1-1)进行转换,其中各分量的取值范围为[0,255]。
(1-1)
如上所述,因为人眼对色度的敏感程度更低,所以可以适当降低色度的采样精度(色度亚采样)来节约比特数。因此,视频分辨率实际上指的是亮度分辨率,色度分辨率可能会等于或小于亮度分辨率。根据不同的采样精度,视频图像可以分为4∶4∶4、4∶2∶2、4∶2∶0等格式,图1-2为各格式的亮度、色度样本的分布位置,可见色度亚采样本质上就是使相邻几个像素共用同一色度值(由于 U、V两个色度分量具有同样的地位,因此统一进行讨论)。
图1-2 三种常见视频采样格式
4∶4∶4格式(YUV444)中,每4个亮度像素,具有相应的4个色度像素,也就是说色度与亮度具有相同的采样精度,或者说色度与亮度具有相同的空间分辨率。
4∶2∶2格式(YUV422)中,每4个亮度像素对应2个色度像素,这是因为色度仅在垂直方向上具有与亮度相同的采样精度,而在水平方向上,色度的采样精度只有亮度的1/2。
4∶2∶0格式(YUV420)中,每4个亮度像素对应1个色度像素,色度在垂直、水平方向上的采样精度,均只有亮度采样精度的1/2。
1.3 数据冗余与视频编码
视频中存在大量的冗余,而视频编码本质上就是要消除这些冗余,从而实现对视频数据的压缩。因此,“视频编码”与“视频压缩”描述的实际上是同一个概念。
而视频中的冗余一般包括空间冗余、时间冗余、编码冗余、视觉冗余、知识冗余、结构冗余等[2]。其中,由于空间冗余、时间冗余和编码冗余取决于图像数据的统计特性,因此也将这三者统称为统计冗余。
空间冗余是静态图像中*为主要的一类数据冗余。例如,一幅图像中若存在较大的平缓区域,则意味着该区域中不同像素的亮度、色度等都是非常接近的,在空间上存在很强的关联性,彼此之间可以认为是平滑过渡的,不会发生剧烈突变。这种关联性即空间冗余。
时间冗余是视频序列中常见的一类数据冗余。视频序列中,相邻帧往往具有类似的场景和物体,其中运动物体具有类似的大小和形状,仅仅是在图像中的位置发生了改变,可以认为后一帧中的物体是前一帧中物体发生了位移。相邻帧在时间上的这种高度相关性即时间冗余。
编码冗余也称为信息熵冗余。1948年,信息论之父香农提出了“信息熵”的概念。简而言之,变量的不确定性越大,熵也就越大,其所携带的信息量也就越大。由于不同事件发生概率不同,其所携带信息也不同,在信息编码过程中如果不进行熵压缩编码,而是对所有事件采用统一字符编码方式,就会存在编码冗余。由信息论可知,为表示图像数据的一个像素点,只要按其信息熵的大小分配相应比特数即可。例如,对出现概率大的事件采用短码字编码,而出现概率小的事件采用长码字编码,会实现更好的压缩效果。
视觉冗余则是在记录原始图像数据时,通常假定视觉系统是均匀的、线性的,而实际上人眼对亮度和色度的敏感度是非均匀、非线性的。同时,人眼更倾向于捕捉物体的整体结构,而对其内部细节较忽略,无法察觉某些细微的变化。因此,对人眼敏感和不敏感的部分同等对待进行编码,会产生比理想编码更多的数据,这部分数据即视觉冗余。
知识冗余是指人们可以根据已有的基础知识和基本常识,按照某种规律性对图像进行推断。例如,某些图像拍摄的是大海,大海中有水,那么可以推断出图像中也有水,拍摄的是汽车,那么可以推断出图像中可能有轮子、玻璃等。这种类似的规律性的图像的冗余为知识冗余。利用知识冗余,可以构建某些物体的基本模型,使得图像存储时仅需保留某些特征参数,从而减少数据量。
结构冗余是指某些图像可能具有规律排列的结构或纹理特征。如果已知像素的分布规律,则可以据此生成相应的图像,而无须对相似的部分进行重复编码,从而实现数据压缩。
各种类型的冗余为图像序列的编码压缩提供了广阔的空间。自 H.261标准以来就一直沿用的混合编码架构,就利用空间冗余、时间冗余、信息熵冗余等提出了许多编码工具,如基于空间冗余的帧内预测、基于时间冗余的帧间预测、基于视觉冗余的量化、基于信息熵冗余的熵编码,以及基于数学的变换等。
1.4 编码单元与编码层次
对于视频编解码而言,编码单元反映了处理的基本单位。通常来说,编码单元越大,每次编码所能获取的信息量就越大,理论上也就可以达到更好的编码效果;但是,过大的编码单元会使得编码本身的资源消耗难以承受,无法应用于实际的编码环境中。鉴于此,相较于像素级编码、层级或内容级编码,块级编码在视频编码算法中使用得*为广泛。块级编码是指预先将一幅图像切割为多个像素块,一次对块内的部分或所有像素进行预测和编码。
对于编码器而言,还需要定义编码层次,以用于组织编解码的架构。编码的过程是逐层深入、依次进行的;而解码过程则是编码的逆过程。通常使用的编码层次如下。
(1)编码单元(coding unit,CU):编码的基本单位,通常取块(block),有时候块内部还可以继续划分为子块(sub-block)。
(2)切片(slice,有时也等同于 tile):由多个编码单元组成的部分图像,通常在空间上是连续的。切片定义了编码单元的可参考位置,从而将错误限制在一整幅图像内的部分范围内。
(3)帧/图像:由多个切片组成的一幅完整的图像,表示一个时间点内的所有视觉信息,是人眼接收视觉信息的基本单位。
(4)图像组(group of pictures,GOP):由多个帧/图像组成的部分视频序列,通常在时间上是连续的。图像组可以将基于时间相关性的编码过程限定在一定范围内,从而限制视频编解码芯片设计原理
错误的影响范围。
(5)序列(sequence):表示整个完整的视频。图1-3是一个编码层次的示例。
图1-3 视频编码中的层次
1.5 视频编码的国际标准
几十年间,新的视频编码算法层出不穷。然而,商业视频编码应用趋向于使用有限的几个标准化方法进行视频压缩。这是因为,标准能够保证软硬件供应商之间的可兼容性,能够使不同出品商的编码器和解码器之间的互操作更加简单,使得建立综合视频平台成为可能。并且标准会严格定义所使用的技术和算法,并涵盖这些技术的专利许可费,降低侵犯专利权的风险。
国际上制定视频编码标准的主要组织为国际电信联盟-电信标准化部门(ITU-T),以及
展开