H.264学习笔记4——变换量化

A、变换量化过程总体介绍

  经过帧内(16x16和4x4亮度、8x8色度)和帧间(4x4~16x16亮度、4x4~8x8色度)像素块预测之后,得到预测块的残差,为了压缩残差信息的统计冗余,需要对残差数据进行变换和量化操作。变换和量化的总体操作过程如下图:

        

  对于Intra_16x16的亮度块,通过16(4x4)个4x4的前向DCT变换,然后对得到的16个DC系数再进行4x4的Hadamard变换,然后对于16个DC系数和240个AC系数进行量化(DC和AC的量化公式略有不同,为了控制量化死区大小,详见量化器设计)。

  对于8x8的色度块(帧内、帧间),进行4x4的DCT变换后,得到4个DC和60个AC系数,同样对于DC系数先进行2x2的Hadamard变换后,分别对DC和AC系数进行量化。

  由于变换块越大,编码的效率越高,且图像的细节信息越能得以保留。所以H.264在HD档次中,支持进行8x8的DCT变换(设置标志transform_size_8x8_flag=1),且不需要对DC系数进行Hadamard变换,DCT变换后对DC和AC系数进行统一的量化处理。

  然后对于其他尺寸的变换块(不是Intra_16x16、8x8色度,没有transform_size_8x8_flag=1标志),则简单采用4x4的DCT变换,然后直接对DC和AC系数进行统一量化。

B、量化介绍

  量化是通过多对一的映射,降低比特率。主要有均匀量化、非均匀量化和自适应量化。根据最优量化器设计准则:最佳量化区间的边界值为相邻两个最佳量化值的平均数,最佳量化值为所在量化区间的均值。

  1、简单的定长标量量化器公式如下:

    Z = int(|W|/S) * sng(W)。

  其中W表示输入值,S是量化步长,int(x)表示小于等于x的最大整数,sng(x)表示x的符号,取值-1、0、+1。

  反量化公式:

    W = S * Z;

  量化不长S决定了量化的效果,S越大,量化器的压缩效率越高,但是相应的图像的失真越高。但是对于上述量化器,对于区间[0,S)的残差值,被量化成0,明显不符合最优量化器设计准则,所以引入量化偏移量f。

  2、变形量化器:引入量化偏移量f,公式如下:

    Z = int((|W| + f ) / S) * sng(W);

  反量化公式如下:

    W = S * Z;

  由于区间(f-S, S-f)的残差量化为0,[S-f, 2S-f)的残差量化为S,所以此量化器就可以通过调节f的值,调节量化区间的最佳量化值,使得最佳量化值满足是该区间的均值(W是非均匀分布时也可以调节f达到最佳量化器的要求),因此f可以控制量化区间的偏移量。H.264的参考模型建议对于帧间预测时,f=S/6;对于帧内预测是,f=S/2。

  对于残差值属于(f-S, S-f)时,量化值是0,所以区间(f-S, S-f)被称为量化死区,通过f可以控制量化死区的大小。由于经过DCT变换后,残差值大量处于量化死区,且量化死区的残值值往往对应高频细节信息,在实际应用中,往往需要对量化死区的高频或者大量出现的残差信息特殊处理,所以需要根据实际控制量化死区的大小。但是由于f同时控制着量化偏移量和量化死区,具有耦合性,所以为了解耦合,在JVT-K026中提出一种解耦合的量化器。

  3、变形量化器:引入参数t控制量化死区,公式如下:

    Z = int( (|W| + f + t) / S) * sng(W);

  反量化公式:

    W = (S * |Z| - t )* sng(Z)。

  该量化器通过f控制量化值(即:量化值相对于量化区间断点的偏移量),确定量化偏移量满足最优量化器后,通过t控制量化死区的大小。

时间: 2024-08-28 23:34:29

H.264学习笔记4——变换量化的相关文章

H.264学习笔记——相关概念

此处记录学习AVC过程中的一些基本概念,不定时更新. frame:帧,相当于一幅图像,包含一个亮度矩阵和两个色度矩阵. field:场,一帧图像,通过隔行扫描得到奇偶两场,分别称为顶场和底场或奇场和偶场. macroblock/MB:宏块,H.264中处理(预测.变换.量化)的基本单元,大小16*16个像素. slice group:条带组,每一帧/场图像中,按照光栅扫面的顺序,将MB/MB对分成多个条带(slice). I/P/B 宏块:I宏块只能利用所在slice中已编码的像素进行帧内预测.

H.264学习笔记5——熵编码之CAVLC

H.264中,4x4的像素块经过变换和量化之后,低频信号集中在左上角,大量高频信号集中在右下角.左边的低频信号相对数值较大,而右下角的大量高频信号都被量化成0.1和-1:变换量化后的残差信息有一定的统计特性和规律. CAVLC(Context-based Adaptive Variable-Length Code):基于上下文的可变长度编码,是H.264中进行4x4像素块进行熵编码的方法,基本(baseline)档次中只能使用CAVLC,只有主要档次和扩展档次才能使用CABAC(见笔记:熵编码之

H.264学习笔记

1.帧和场的概念 视频的一场或一帧可用来产生一个编码图像.通常,视频帧可以分成两种类型:连续或隔行视频帧.我们平常看的电视是每秒25帧,即每秒更换25个图像,由于视觉暂留效应,所以人眼不会感到闪烁.每帧图像又是分为两场来进行扫描的,这里的扫描是指电子束在显像管内沿水平方向一行一行地从上到下扫描,第一场先扫奇数行,第二场扫偶数行,即我们常说的隔行扫描,扫完两场即完成一帧图像.当场频为50Hz,帧频为25Hz时,奇数场和偶数场扫描的是同一帧图像,除非图像静止不动,否则相邻两帧图像不同.基数行和偶数行

H.264学习笔记3——帧间预测

帧间预测主要包括运动估计(运动搜索方法.运动估计准则.亚像素插值和运动矢量估计)和运动补偿. 对于H.264,是对16x16的亮度块和8x8的色度块进行帧间预测编码. A.树状结构分块 H.264的宏块,对于16x16的亮度宏块,可以分成16x16.16x8.8x16和8x8的子块进行帧间预测.对于8x8的块(亚宏块,亮度和色度),往下又可以分成8x8.8x4.4x8.4x4的子块.在运动估计中,每一种分割都需要尝试,并计算出运动搜索结果的代价,选择最小代价的分割方式进行预测编码. B.运动估计

H.264学习笔记6——指数哥伦布编码

在H.264中,使用CABAC需要进行二值化处理,而指数哥伦布编码就是CABAC的一种二值化处理的方法.k阶指数哥伦布编解码具体过程如下: A.编码过程:假设待编码数字为CodeNum(必须非负整数) 指数哥伦布编码后的形式为[MZeors][1][Info],MZero表示M个0. 1.将CodeNum以二进制形式表示(若不足k位,前面补0),去掉后面k位(若刚好是k位,去掉k位后得0),将结果(数值)加1,得到二进制数T1: 2.M为二进制数T1的二进制位数减一: 3.然后将第一步中舍去的k

H.264学习笔记2——帧内预测

帧内预测:根据经过反量化和反变换(没有进行去块效应)之后的同一条带内的块进行预测. A.4x4亮度块预测: 用到的像素和预测方向如图: a~f是4x4块中要预测的像素值,A~Q是临块中解码后的参考值.0~8是4x4的亮度块的9个预测方向(模式).当E~H不可得时,用D代替. A~Q在下面情况下不可用: >不在当前图像或条带:在该4x4块之前还没有被编码:位于帧间编码宏块,且constrained_intra_pred为1: 对于9个预测模式,简述如下: >模式0:垂直模式,条件:A~D可用.

H.264编码之DCT变换原理

DCT变换是一种与FFT变换紧密相连的数学运算,当函数为偶函数是,其傅立叶展开式只有余弦项,因些称为余弦变换,其离散化的过程称为DCT(离散余弦)变换.下面我们就推导下H.264的4x4整数DCT公式. 首先给出DCT变换的定义,其变换公式可以写成:Y = AXAT    这里A为单位正交距阵,满足:I = AAT,距阵A的公式如下: 这里N为距阵的阶数,在这里为N=4,因此,A可以写成如下形势: 对A做三角变换 设 则A距阵可以变为: 又因为A可以分解为 这里我们先算下d的值: 在H.264中

CSS学习笔记2-2d变换和过渡属性

前言:今天又是一个周末,心情不错,趁着闲暇之余,把剩下来的CSS3学习的内容全部整理出来,练习用的源码也稍微整理了一下. 2D转换 transform:translate||rotate||scale||skew 平移.旋转.缩放.斜切 1. 平移 transform:translate() 参数说明: 只有一个值的情况下,表示水平方向运动,正值向右,负值向左,也可以接受百分比,百分比参照的是自身的宽,高 两个值分别控制水平和垂直 移动不会影响其他的元素,类似于相对定位 我们可以通过盒子的绝对定

016-kruskal算法-贪心-《算法设计技巧与分析》M.H.A学习笔记

最小生成树: 在一给定的连通无向图G = (V, E)中,(u, v) 代表连接顶点u与顶点v的边,而 w(u, v)代表此边的权重,若存在T为G的子集且为无循环图,使得w(T) 最小,则此T为G的最小生成树. 基本思路: kruskal算法总共选择n- 1条边,所使用的贪婪准则是:从剩下的边中选择一条不会产生环路的具有最小耗费的边加入已选择的边的集合中.注意到所选取的边若产生环路则不可能形成一棵生成树.kruskal算法分e 步,其中e 是网络中边的数目.按耗费递增的顺序来考虑这e 条边,每次