三大编码法宝:预测,变换量化,熵编码

1.为什么要变换?

变换可以去除图像像素之间的空间相关性。变换是一种线性运算,可以将图像从空间域转换到变换域或者频率域。

空间域图像的能量往往分布相对比较均匀 ,经过变换后,变换域中图像的变换系数间近似是统计独立 的, 基本去除了相关’性,并且能量集中在直流和低频率 的变换系数, 高频率变换系数的能量很小, 甚至大部分高拟系数能量接近于零。所以,在变换域进行滤波、进行与视觉特性相匹配的量化及熵编码,可以实现图像数据的有效压缩。

变换的核心点是找到一个完美的正交矩阵,那什么样的正交变换矩阵才算是完美的呢?

最佳的变换矩阵应该是,变换矩阵中每行或每列的基矢量和图像的统计特性相匹配,即应和图像本身的特征矢量相匹配。K-L 变换是在均方误差最小准则下,失真最小的一种变换。 但 K-L 变换的变换矩阵是由图像协方差矩碎的特征矢量组成的,不 同图像的变换矩阵是不同的,每次都要进行计算 ,计算繁琐 ,很难满足实时处理要求。而在各种正交变换中,以自然图像为编码对象时,与K-L变换性能最接近的是离散余弦变焕 DCT 。理论与实验表明:对于标准清晰度自然图像,像素块尺寸选 8 x 8 或 I6 x l6 是最适宜的。

2.为什么要量化?

通常变换离不开量化,因为图像从空间域矩阵变换到变换域的变换系数矩阵,其系数个数并未减少,数据量也不会减少 ,因此并不能直接压缩数据。为了压缩码率,还应当根据图像信号在变换域中的统
计特性进行量化和熵编码。

按照量化的维数,量化可分为标量量化和矢量量化 。标量量化是一维量化, 一个幅度对应一个量化结果 。而矢量量化是二维甚至多维量化,两个或两个以上的幅度决定一个量化结果。在图像和视频编码中 , 普遍采用标量量化 。量化过程存在量化误差,这种误差称为量化噪声。

量化器设计时将信号幅度划分为若干个量化级, 一般为 2 的整数次幕。 把落入同一级的样本值归为 一类 , 并给定一个量化值。量化级数越多 , 量化误差就越小,质量就越好。 量化级数取决于量化步长和信号强度。理想的标量量化器应该采用非线性量化,也就是每个量化区间间距应该不相等 , 每个量化区间的划分取决于信号的概率密度函数分布

在视频编码中,残差图像块的变换系数 ,近似认为服从广义高斯分布或拉普拉斯分布,可以根据这个概率分布函数 ,确 定非线性标量量化。残差图像的变换系数通常主要分布在零频率分量附近,偏离零频率分量 ,出现概率呈指数下降。

在不影响人眼观看的条件下,量化器的作用是降低系数的精度来消除可以忽略的系数

人眼视觉系统对不同频率分量信号 的 失真感知能力是不一样的,人眼对高频系数相对不敏感,对色度相对也不敏感 。为了得到好的编码效果,应该根据系数块中的不同位置设计量化器,对图像进行 DCT变换后直接对DCT 系数进行符合人眼视觉特性的非均匀量化 。 通常通过一个归一化加权量化矩阵来实现 。而目前 JPEG 和 MPEG 标准中均采用了加权量化矩阵实现基于人眼视觉特性的自适应量化控制 。

3.为什么熵编码?

经 DCT 变换后,能量主要集中在直流和较低频率系数上,而大部分变换系数为 0或接近 0。再加上视觉加权处理和量化, 有更多的0产 生,这些 0 往往连在 一起成串出现 。
连续0的个数叫做零游程 ,于是在编码时,不对单个的0编码,而对零游程编码,就会提高编码效 率。
为了制造更长的零游程,在编码之前,对变换系数矩阵采用 Z 字形扫描读取数时进行重新排列,很多像块经变换后,变换系数经过 ZigZag 排列,排在队尾的很长一串系数全是0.

游程编码通常采用一种称为Run- Level的编码技术,这里Run是两个非零系数之间连续 0 的个数,而 Level是非 0系数的绝对值。那么经过ZigZag 扫描后的系数序列可以转化为若干个 Run-Level数据对。

由于统计编码是信息保持编码,那么信息量是怎样度量 的?在信息论中,信息量是用不确定性的量度来定义的 。一个消息出现的概率越小,则信息量越大:若出现的概率越大,则信息量越小。

从信息论看,熵是对一个消息进行编码时最小平均比特率 的理论值。这个结果虽然没有说明如何设计码字的方法,但却很有用 。假如设计的码字平均比特率和熵一样 ,那么这个码字就是最佳的 。 由此得出结论,熵提供了 一种可以测试编码性能的参考基准。

利用信息熵原理的编码方法有若干种,如霍夫曼编码方法(利用概率分布特性)、 算术编码(利用概率分布的编码方法)和游程编码( 利用相关性)等。

你可能感兴趣的:(H264,算法,音频编码解码)