HEVC中的变换与量化

变换
  • 什么是变换编码
  • HEVC中的变换
  • HEVC中CU、PU、TU之间的关系
量化
  • 什么是量化
  • HEVC中的量化步骤
  • HEVC中使用的率失真优化量化RDOQ
  • HEVC中灵活的QP控制技术
  • 关于量化矩阵
变换

1、什么是变换编码:绝大部分的图形都含有较多的平坦区域内容或者称为内容变化缓慢的区域,变换可以使得图像能量在空间域的分散分布转换为变换域中相对集中的分布。变换的结果为一组变换系数,变换后进行编码的对象也是得到的这样一组变换系数,由于人对图像的高频信息不敏感,因此在对变换系数进行量化的时候,就可以丢弃这些高频分量,达到减小传输码流,压缩视频的效果。但这些高频信息的丢弃并不会对重构的图像产生很大的影响(注意在对变换系数进行量化的时候会用到一个量化表,量化表的作用是进一步减小码流)。

解码端如何根据接收到的变换系数恢复出图像信息?
答:利用正变换用到的变换基(也可以称之为变换核),对接收到的系数进行反变换就可以对传输的图像信息进行重构。

2、HEVC中用到的变换

  • HEVC中使用了两种变换方式,分别离散余弦变换和离散正弦变换。

  • 这里注意变换编码中用到的二维DCT可以分解为两个一维的DCT变换。

  • HEVC中支持的整数DCT的尺寸块大小:4 * 4、 8 * 8 、16 * 16、32 * 32,

提醒:利用DCT的规律可以使用蝶形算法来加快变换计算的过程

有关离散正弦变换(DST)的使用限制:只有帧内4 * 4尺寸的亮度快的预测残差值才使用该方式进行变换,其余方式均使用离散余弦变换(DCT)

4、HEVC中 CU、PU、TU之间的关系

  • PU和TU都是在CU的基础之上进一步划分而来,一个CU内所有的PU拥有同样的帧内帧间预测模式
  • 在PU和TU之间并无明确的关系,只不多是不同编码流程中对于块的称呼不一样而已。例如在进行预测编码的时候对于CU的划分子块就称之为PU;在进行变换、量化、熵编码的时候CU的划分子块就称之为TU。帧间预测中一个PU可以包含多个TU,一个TU也可以同时跨越多个PU。但在帧内预测中,一个PU内包含多个TU,一个TU一定是只存在于一个PU内

量化

1、什么是量化:量化就是幅值连续的信号取值通过量化表映射成有限个离散幅值的过程,基本的原理就是信号幅度取值多对一的一种映射过程。在上面学习的变换过程之后,得到的是一组变换系数,而变化变换系数的取值范围很大,通过量化过程,可以减小信号的取值范围,从而获得更好的压缩效果。同样值得一提的是,在视频或者图像压缩中造成失真的根本原因是由于量化的存在,但只要这种失真对于传输内容的正确理解影响不大,就可以忽略。

以什么样的方式来对压缩过程中的失真进行衡量?
答:一般有三种衡量失真的准则,即均方误差(MSE)、信噪比(SNR)、以及峰值信噪比(PSNR)

2、HEVC中量化的步骤

  • 量化使用到的公式抽象可以表示为如下:

1 = f l o o r ( c Q s t e p + f ) 1=floor\left( \frac{c}{Qstep}+f \right) 1=floor(Qstepc+f)

​其中c表示带量化的系数、Qstep表示量化步长、1表示量化后的结果、floor表示向下取整函数,f控制舍入关系

  • HEVC中有52个量化步长,对应了52个量化参数QP
  • 对于色度分量而言,量化参数有一个限定范围为045。具体的规则是,当亮度分量的QP小于30时,色度分量的QP和亮度分量相同,当亮度分量QP在3051时,两者之间的的QP值存在一种对应关系。
  • 量化过程同时要完成整数DCT的中的比例缩放运算,为了避免浮点运算,HEVC中把分子分母将同时进行放大处理,然后取整,以此保证运算的进度,QP的运算方式也要进行调整,如下所示:

Q P = f l o o r ( Q P 6 ) + Q P % 6 QP=floor\left( \frac{QP}{6} \right) +QP\%6 QP=floor(6QP)+QP%6

  • HEVC中具体的量化公式为:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

注意:一般情况下,对于I帧,f取值为1/3,对于P帧和B帧,f取值为1/6

3、HEVC中量化过程中使用的RDOQ(率失真优化量化)

就是把量化过程和率失真优化过程结合起来,对于给定的多个可选的量化值,利用率失真优化选出最优的量化的值

具体的算法步骤如下:

  • 首先确定当前TU每个系数的可选量化值,利用下面的公式进行预量化:

∣ l ∣ = r o u n d ( ∣ c ∣ Q s t e p ) \left| l \right|=round\left( \frac{\left| c \right|}{Q_{step}} \right) l=round(Qstepc)

  • 利用率失真准则RDO确定当前TU所有系数的最优量化值QP(注意是每个系数的QP)
  • 利用率失真准则确定当前TU每一个系数块组(CG,4*4的块)是否量化成全零组。如果当前的CG是全零CG,那么只需要编码全零标志即可;否则需要编码所有的所有的系数。具体的步骤是:遍历所有的CG,计算其量化为全零CG的代价,与原来的率失真代价进行比较,如果全零CG对应的率失真代价比较小那么令当前CG为全零CG
  • 利用率失真准则确定当前TU最后一个非零系数的位置

4 、HEVC中灵活的QP控制技术

  • 量化组QG:指的是把一帧图像分成固定大小的(N*N)的正方形像素块,其大小由PPS指定,且必须处于CTU和最小CU之间(包括它们)

  • 一个CTU可以包含一个或者多个固定大小的QG,同一个QG内的所有含有非零系数的CU共享一个QP

  • HEVC中使用相邻的QG信息来预测当前QG的QP
    在这里插入图片描述

    • 对于一个slice的第一个QG,A和B都不存在,此时使用当前slice的QP作为该QG的预测QP
    • 如果当前QG位于slice的上边界,那么B不存在,此时把B替换成前一个已经编码的QG
    • 如果当前QG位于一个slice的左边界,那么A不存在,此时把A替换成前一个已经编码的QG
    • 利用相邻QG的QP值预测当前QG的QP值具体方法如下:

P r e d Q P = ( Q P A + Q P B + 1 ) > > 1 PredQP=\left( QP_A+QP_B+1 \right) >>1 PredQP=(QPA+QPB+1)>>1

5、关于量化矩阵

  • 使用量化矩阵的原因是,对于不同位置的系数使用不同的量化步长,这样能提高视频的主观质量
  • HEVC中定义了4* 4和8 * 8两种大小的默认量化矩阵,并规定16 * 16 、32 * 32量化矩阵可以由8 * 8的量化矩阵采样得到
  • HEVC对量化矩阵中的元素使用差分编码

本篇博客参考大神NB_vol_1,谢谢这么多优秀的朋友能够分享出自己的学习经验!!!

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值