普通视频编码压缩原理

冰岩作坊 March 29, 2022

一天的简单了解……

视频信号的表示方法:

RGB格式:

255,255,255

YUV颜色空间:

Y表示明亮度,U/V表示色度(色调和饱和度)–解决了彩色/黑白的兼容问题,不用要求三个独立的视频信号同时传输,所以传送占用极少的频宽

YCbCr颜色空间

Cb , Cr 同样都指色彩, 只是在表示方法上不同(Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异,而Cb反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异,此即所谓的色差信号。)。YCbCr 是在计算机系统中应用最多的成员, 其应用领域很广泛,JPEG、MPEG,H264均采用此格式。在视频通信系统中(特别是视频编解码)的“YUV”图像就是YCbCr。在平常的工作交流中,所称的YUV也是YCbCr。以下用YUV指代YCbCr

格式转换

Y’= 0.299R’ + 0.587G’ + 0.114B’ U’= -0.147R’ - 0.289G’ + 0.436B’ = 0.492*(B’- Y’) V’= 0.615R’ - 0.515G’ - 0.100B’ = 0.877(R’- Y’)

R’ = Y’ + 1.140V’ G’ = Y’ - 0.394U’ - 0.581V’ B’ = Y’ + 2.032U’

按ITU-R BT.601标准。(这个公式应用最广泛) Y = ( ( 66 * R + 129 * G + 25 * B + 128) >> 8) + 16 Cb = ( ( -38 * R - 74 * G + 112 * B + 128) >> 8) + 128 Cr = ( ( 112 * R - 94 * G - 18 * B + 128) >> 8) + 128

按ITU-R BT.709标准。

Y = 0.183R + 0.614G + 0.062B + 16 Cb = -0.101R - 0.339G + 0.439B + 128 Cr = 0.439R - 0.399G - 0.040B + 128

按JPEG的全范围取值格式 Y = 0.299R + 0.587G + 0.144B + 0 Cb = -0.169R - 0.331G + 0.500B + 128 Cr = 0.500R - 0.419G - 0.081B + 128

R’ = 1.164*(Y’-16) + 1.596*(Cr’-128) G’ = 1.164*(Y’-16) - 0.813*(Cr’-128) -0.392*(Cb’-128) B’ = 1.164*(Y’-16) + 2.017*(Cb’-128)

YUV的存储格式

YUV格式有三大类:planar,packed,semi-planar。

planar

先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。

#### packed

每个像素点的Y,U,V是连续交叉存储的。

#### semi-planar

先连续存储所有像素点的Y,紧接着连续交叉存储所有像素点的U,V。

## 视频压缩编码

要编码的主要信息有文字、语音、视频和控制信息等

编码的核心技术步骤主要分为预测、变换、量化、熵编码,这几步之后还有个可选步骤是滤波。

空间相关性和时间相关性。这两种相关性使得图像中存在大量的冗余信息。如果我们能将这些冗余信息去除,只保留少量非相关信息进行传输,就可以大大节省传输频带。而接收机利用这些非相关信息,按照一定的解码算法,可以在保证一定的图像质量的前提下恢复原始图像。一个好的压缩编码方案就是能够最大限度地去除图像中的冗余信息。

视频信息之所以存在大量可以被压缩的空间,是因为其中本身就存在大量的数据冗余。其主要类型有:

主要的视频编码标准:

第一个、比较好的重建质量,广泛应用

运动静止图像逐帧压缩技术,广泛应用于非线性编辑领域。可以很容易做到精确到帧的编辑、设备比较成熟。只能对帧之间的空间冗余进行压缩,不能对时间冗余进行压缩,所以效率不高。并不是一个完全统一的压缩标准,在服务器之间的数据传输、非线性制作网络向服务器的数据传输都根本是不可能的。

第一部分说明了如何根据第二部分(视频)以及第三部分(音频)的规定,对音频和视频进行复合编码。第四部分说明了检验解码器或编码器的输出比特流符合前三部分规定的过程。第五部分是一个用完整的C语言实现的编码和解码器。

MPEG-4不只是具体压缩算法,它是针对数字电视、交互式绘图应用(影音合成内容)、交互式多媒体(WWW、资料撷取与分散)等整合及压缩技术的需求而制定的国际标准。MPEG-4标准将众多的多媒体应用集成于一个完整的框架内,旨在为多媒体通信及应用环境提供标准的算法及工具,从而建立起一种能被多媒体传输、存储、检索等应用领域普遍采用的统一数据格式。

视频压缩编码的基本技术

记录信号的冗余信息

消除空间冗余

量化过程通过对低频区的系数进行细量化,高频区的系数进行粗量化,去除了人眼不敏感的高频信息,从而降低信息传送量。因此,量化是一个有损压缩的过程,而且是视频压缩编码中质量损伤的主要原因。DCT系数经过量化之后大部分经变为0,而只有很少一部分系数为非零值,此时只需将这些非0值进行压缩编码即可。

量化公式:F(u,v)表示量化前的DCT系数;Q(u,v)表示量化加权矩阵;q表示量化步长;round表示归整,即将输出的值取为与之最接近的整数值

量化后进行从左上到右下Z字扫描,更方便地把0 都聚在一起

它可以将LL的图像块从空间域变换为频率域。所以,在基于DCT的图像压缩编码过程中,首先需要将图像分成互不重叠的图像块。假设一帧图像的大小为1280720,首先将其以网格状的形式分成16090个尺寸为88的彼此没有重叠的图像块,接下来才能对每个图像块进行DCT变换。

经过分块以后,每个88点的图像块被送入DCT编码器,将88的图像块从空间域变换为频率域。图像块中各个像素亮度值比较均匀,特别是相邻像素亮度值变化不是很大,说明图像信号具有很强的相关性。经过DCT变化,低频的、幅值高的、重要的信息都被归置在左上部;而人类不敏感的、高频的、却又低振幅的数据都放在了右下侧。

主要用于消除视频信息中的统计冗余。熵编码是无损压缩。

第一步行程编码:就是把连续重复的数据的用重复的次数值来表示

aaaaaaabbbbccccdddeeddaa -> 7a4b4c3d2e2d2a

第二步就是要对行程编码后的数据进行变长编码,如Huffman编码

Huffman编码主要思路是将出现频率最高的字符串用最短的码来替换,从整体上减少了原始数据的长度。

消除时间冗余

将当前的输入图像分割成若干彼此不相重叠的小图像子块,然后在前一图像或者后一个图像某个搜索窗口的范围内为每一个图像块寻找一个与之最为相似的图像块。

通过计算最相似的图像块与该图像块之间的位置信息,可以得到一个运动矢量。这样在编码过程中就可以将当前图像中的块与参考图像运动矢量所指向的最相似的图像块相减,得到一个残差图像块,由于残差图像块中的每个像素值很小,所以在压缩编码中可以获得更高的压缩比。

In video compression “prediction” of a block means finding the most“similar” block to the current one among the surrounding blocks.

预测编码可以用于处理视频中的时间和空间域的冗余。视频处理中的预测编码主要分为两大类:帧内预测(图内)和帧间(一组图)预测。拿来做基准参考的帧,叫I帧,是关键帧,它的信息量最大,只能做帧内压缩,通常压缩率很低;而那些后续通过参考I帧的信息做预测获取差值的图像,存储的根本不是原像素值,而是些原始图像的残差,叫预测帧。预测帧有时候会混合使用帧内预测和帧间预测,取决于该区块对那种算法更适应。根据前一幅图像来预测得到本帧图像叫P帧;结合前面的图像和后面的图像进行双向预测计算得到的本帧图像叫B帧。基于一幅关键I帧图像加上一系列相应的预测图像如B帧、P帧构成的一组图像叫GOP。

混合编码

上面介绍了视频压缩编码过程中的几个重要的方法。在实际应用中这几个方法不是分离的,通常将它们结合起来使用以达到最好的压缩效果。下图给出了混合编码(即变换编码+ 运动估计和运动补偿+ 熵编码)的模型。该模型普遍应用于MPEG1,MPEG2,H.264等标准中。

preview当前输入的图像首先要经过分块,分块得到的图像块要与经过运动补偿的预测图像相减得到差值图像X,然后对该差值图像块进行DCT变换和量化,量化输出的数据有两个不同的去处:一个是送给熵编码器进行编码,编码后的码流输出到一个缓存器中保存,等待传送出去。另一个应用是进行反量化和反变化后的到信号X’,该信号将与运动补偿输出的图像块相加得到新的预测图像信号,并将新的预测图像块送至帧存储器。