zoukankan      html  css  js  c++  java
  • 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;

        

      如图:在量化区间[n*S, n*S+S)中,残差量化值为n*S。量化不长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-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)。

        

      如图:在量化区间(t+f-S, S-t-f)中,量化值是-t;在区间[S-t-f,2S-t-f)中,量化值是S-t。该量化器通过f控制量化值(即:量化值相对于量化区间断点的偏移量),确定量化偏移量满足最优量化器后,通过t控制量化死区的大小。

  • 相关阅读:
    javaWeb服务详解【客户端调用】(含源代码,测试通过,注释) ——Emp实体类
    javaWeb服务详解【客户端调用】(含源代码,测试通过,注释) ——Dept实体类
    javaWeb服务详解【客户端调用】(含源代码,测试通过,注释) ——Dept实体类
    javaWeb服务详解(含源代码,测试通过,注释) ——web.xml
    hdu2044:一只小蜜蜂
    最大连续子序列和
    牛客练习赛20 F-填数字
    Attack City and Capture Territory & 取石子(博弈)
    畅通工程1
    和最大子序列
  • 原文地址:https://www.cnblogs.com/DwyaneTalk/p/4026506.html
Copyright © 2011-2022 走看看