一天的简单了解……
视频信号的表示方法:
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。
## 视频压缩编码
要编码的主要信息有文字、语音、视频和控制信息等
编码的核心技术步骤主要分为预测、变换、量化、熵编码,这几步之后还有个可选步骤是滤波。
空间相关性和时间相关性。这两种相关性使得图像中存在大量的冗余信息。如果我们能将这些冗余信息去除,只保留少量非相关信息进行传输,就可以大大节省传输频带。而接收机利用这些非相关信息,按照一定的解码算法,可以在保证一定的图像质量的前提下恢复原始图像。一个好的压缩编码方案就是能够最大限度地去除图像中的冗余信息。
视频信息之所以存在大量可以被压缩的空间,是因为其中本身就存在大量的数据冗余。其主要类型有:
- 时间冗余:视频相邻的两帧之间内容相似,存在运动关系
- 空间冗余:视频的某一帧内部的相邻像素存在相似性
- 编码冗余:视频中不同数据出现的概率不同
- 视觉冗余:观众的视觉系统对视频中不同的部分敏感度不同
针对这些不同类型的冗余信息,在各种视频编码的标准算法中都有不同的技术专门应对,以通过不同的角度提高压缩的比率。
主要的视频编码标准:
- JPEG
第一个、比较好的重建质量,广泛应用
- MJPEG
运动静止图像逐帧压缩技术,广泛应用于非线性编辑领域。可以很容易做到精确到帧的编辑、设备比较成熟。只能对帧之间的空间冗余进行压缩,不能对时间冗余进行压缩,所以效率不高。并不是一个完全统一的压缩标准,在服务器之间的数据传输、非线性制作网络向服务器的数据传输都根本是不可能的。
JPEG2000
H.261
帧内编码/帧间编码判定:根据帧与帧之间的相关性判定——相关性高使用帧间编码,相关性低使用帧内编码。
帧内编码:对于帧内编码帧,直接使用DCT编码8×8的像素块。
帧间编码/运动估计:使用以宏块为基础的运动补偿预测编码;当前宏块从参考帧中查找最佳匹配宏块,并计算其相对偏移量(Vx, Vy)作为运动矢量;编码器使用DCT、量化编码当前宏块和预测宏块的残差信号;
环路滤波器:实际上是一个数字低通滤波器,滤除不必要的高频信息,以消除方块效应;
MPEG-1
第一部分说明了如何根据第二部分(视频)以及第三部分(音频)的规定,对音频和视频进行复合编码。第四部分说明了检验解码器或编码器的输出比特流符合前三部分规定的过程。第五部分是一个用完整的C语言实现的编码和解码器。
MPEG-2/H.262
MPEG-2的编码图像被分为三类,分别称为I帧,P帧和B帧。I帧图像采用帧内编码方式,即只利用了单帧图像内的空间相关性,而没有利用时间相关性。P帧和B帧图像采用帧间编码方式,即同时利用了空间和时间上的相关性。P帧图像只采用前向时间预测,可以提高压缩效率和图像质量。P帧图像中可以包含帧内编码的部分,即P帧中的每一个宏块可以是前向预测,也可以是帧内编码。B帧图像采用双向时间预测,可以大大提高压缩倍数。
MPEG-2的编码码流分为六个层次。为更好地表示编码数据,MPEG-2用句法规定了一个层次性结构。它分为六层,自上到下分别是:图像序列层、图像组(GOP)、图像、宏块条、宏块、块。
H.263
(1)H.263的运动补偿使用半象素精度,而H.261则用全象素精度和循环滤波;
(2)数据流层次结构的某些部分在H.263中是可选的,使得编解码可以配置成更低的数据率或更好的纠错能力;
(3)H.263包含四个可协商的选项以改善性能;
(4)H.263采用无限制的运动向量以及基于语法的算术编码;
(5)采用事先预测和与MPEG中的P-B帧一样的帧预测方法;
(6)H.263支持5种分辨率,即除了支持H.261中所支持的QCIF和CIF外,还支持SQCIF、4CIF和16CIF,SQCIF相当于QCIF一半的分辨率,而4CIF和16CIF分别为CIF的4倍和16倍
MPEG-4 (Part2/ASP)
MPEG-4不只是具体压缩算法,它是针对数字电视、交互式绘图应用(影音合成内容)、交互式多媒体(WWW、资料撷取与分散)等整合及压缩技术的需求而制定的国际标准。MPEG-4标准将众多的多媒体应用集成于一个完整的框架内,旨在为多媒体通信及应用环境提供标准的算法及工具,从而建立起一种能被多媒体传输、存储、检索等应用领域普遍采用的统一数据格式。
视频压缩编码的基本技术
记录信号的冗余信息
消除空间冗余
变换编码
量化
量化过程通过对低频区的系数进行细量化,高频区的系数进行粗量化,去除了人眼不敏感的高频信息,从而降低信息传送量。因此,量化是一个有损压缩的过程,而且是视频压缩编码中质量损伤的主要原因。DCT系数经过量化之后大部分经变为0,而只有很少一部分系数为非零值,此时只需将这些非0值进行压缩编码即可。
量化公式:F(u,v)表示量化前的DCT系数;Q(u,v)表示量化加权矩阵;q表示量化步长;round表示归整,即将输出的值取为与之最接近的整数值
量化后进行从左上到右下Z字扫描,更方便地把0 都聚在一起
- 离散余弦变换(DCT)
它可以将LL的图像块从空间域变换为频率域。所以,在基于DCT的图像压缩编码过程中,首先需要将图像分成互不重叠的图像块。假设一帧图像的大小为1280720,首先将其以网格状的形式分成16090个尺寸为88的彼此没有重叠的图像块,接下来才能对每个图像块进行DCT变换。
经过分块以后,每个88点的图像块被送入DCT编码器,将88的图像块从空间域变换为频率域。图像块中各个像素亮度值比较均匀,特别是相邻像素亮度值变化不是很大,说明图像信号具有很强的相关性。经过DCT变化,低频的、幅值高的、重要的信息都被归置在左上部;而人类不敏感的、高频的、却又低振幅的数据都放在了右下侧。
离散正弦变换(DST)
K-L变换
熵编码
主要用于消除视频信息中的统计冗余。熵编码是无损压缩。
第一步行程编码:就是把连续重复的数据的用重复的次数值来表示
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’,该信号将与运动补偿输出的图像块相加得到新的预测图像信号,并将新的预测图像块送至帧存储器。