视频编解码理论基础
参考博客
本文部分结合H.265/HEVC的编码技术进行介绍编解码的基础知识.
混合编码框架
• (1)代表的是预测模块,包括帧内预测和帧间预测,帧内预测用于消除空间冗余;帧间预测则主要用于消除时间上的冗余。
帧内预测所使用的帧我们称为I帧;帧间预测所使用的帧分为P帧和B帧,P帧指的是向前预测帧,而B帧指的是双向预测帧。
预测是为当前编码块构造尽可能准确的预测块,从而得到能量较小的残差块。目的是能量较小的残差块可以减少传输比特。
• (2)代表的是变换和量化,在(2)模块的左边有一个特殊的数据处理符号,这个符号下面还有一个减号,此处代表的是求残差,就是说,我们从(1)模块中得到的预测后的图片和原始图片的差值,称为残差。可以看到,变换和量化的输入就是刚刚得到的残差。
• (3)这个一个完整的解码器,包括反量化、反变换、滤波。之所以编码器中要有一个完整的解码器,是因为编码器中最重要的是模块(1)预测模块,而做预测是要有参考帧的,基于已有的参考帧才可以对当前帧做帧内或者帧间预测。为了实现编码器和解码器的一致性(为了预测的准确性,编码器和解码器做预测的时候所参考的图片必须是一样的,所以在编码器中寸在了一个完整的解码器,这个解码器的作用是为实现参考帧的一致性)。
• (4)这个模块是从码流的视角进一步对视频流压缩,主要是消除编码冗余。
帧内预测
• 消除空间冗余
• 帧内预测,利用当前图像内已经编码的像素生成预测值
• 生成预测值之后,和原始的值相减,得到残差,后续的变换量化等操作就是基于残差进行处理的
帧间预测
- 消除时间冗余
- 帧间预测,利用相邻图像中已经编码的像素(编码器中解码部分获得)生成预测值
- 生成预测值之后,和原始的值相减,得到残差,后续的变换量化等操作就是基于残差进行处理的
- 主要原理:
- 运动估计(motion estimation,ME)——提取当前图像运动信息的过程。为当前编码块在已编码块中寻找最佳估计块,使得预测块与当前块残差尽可能的小,并计算当前块的偏移MV(motion vector).
- 运动补偿(motion compensate,MC)——根据运动矢量MV和帧间预测方法,求得当前帧的估计值.运动补偿即进行插值,进行1/2、1/4像素精度的运动估计,最后得到最优的匹配块.
相关概念
- ME是运动估计
- MC是运动补偿
- MV是预测块到当前块的位移向量
- MVD是MV的残差. MVD=MVc-MVp,其中MVc是实际的MV, MVp是预测得到的MV.
- 加权预测:加权预测表示预测像素来自多个参考帧而不是单一参考帧,通过某一个权值分配公式计算加权像素值,然后在这些加权像素值块上进行运动估计.
运动估计
包含搜索算法和亚图像精度的运动估计
-
搜索算法
- 全局搜索
- 二维对数搜索算法 / 三步搜索算法 / TZSearch , 都是快速算法
- 性能上:略低于全局搜索,但时间上:缩短很多
亚图像精度运动估计 : 由于物体运动的距离不一定为像素的整数倍,1/2,1/4精度
MV预测技术(帧间预测技术)
空域上 / 时域上 MV都具有较强的相关性. 所以MV预测包含空域上&时域上
- Merge技术 & AMVP技术
- 候选MV列表
- Merge可以看作一种编码模式.不存在MVD.遍历候选MV列表,计算率失真代价.
- AMVP看作一种MV预测技术,编码器只需对实际MV和预测MV的差MVD进行编码.
Merge模式 (相当于一种编码模式)
- 为当前PU建立一个候选MV列表:5个候选MV(及其对应的参考图像)
- 遍历这5个MV,进行率失真代价的计算.
- 若解码端依照相同的方式建立该候选列表,则编码器只需要传输最优MV在候选列表中的索引即可.
建立MV列表包含空域和时域两种情况:
空域:
空域最多4个候选MV.A1→B1→B0→A0→B2(B2为替补),如下图:
时域:
时域最多1个候选MV
利用了当前PU在 邻近已编码图像 对应位置PU的运动信息
AMVP技术(高级运动向量预测)
AMVP候选MV列表也包含空域和时域两个情形.列表长度仅为2.
变换
- 绝对大部分图像都含有较多的平坦区域内容变化缓慢的区域,变换可以使图像能量在空间域的分散分布转为在变换域的相对集中分布,就可以达到去除空间冗余的目的
- 几种变换
- DCT变换/DST变换
- hadmard变换
量化
- 消除视觉冗余
- 量化就是把信号的连续取值映射成多个离散的幅值的过程,实现了信号取值多对一的映射。
- 残差数据进过变换之后,变换系数具有较大的取值范围,量化可以有效减小信号的取值范围,进而获得更好的压缩效果
- 量化是造成失真的根本原因
衡量失真的准则
- 均方差MSE
- 信噪比SNR
- 峰值信噪比PSNR
熵编码
- 消除编码冗余
- VLC变长度编码
- huffman编码
- 算术编码
率失真
率失真优化
- 率失真函数RD 是在假定信源在给定的情况下,在用户可以容忍的失真度内再现数据消息所必需获得的最小平均互信信息
- 编码器的率失真优化的工作主要是按照某种策略选取最优的编码参数,以实现最优的编码性能