HEVC ---HEVC/h.265变换编码

最近在做RDOQ算法优化和硬件系统结构设计,建立其时序模型,估算算法的硬件复杂度。在做这部分工作的同时,博主学习了HEVC算法所有的算法原理,为了便于形成完整的知识体系结构,将相关的知识点框架总结如下:

一、变换编码

  • 绝对大部分图像都含有较多的平坦区域内容变化缓慢的区域,变换可以使图像能量在空间域的分散分布转为在变换域的相对集中分布,就可以达到去除空间冗余的目的
  • HEVC使用了DCT和DST(只用于4x4的小块)两种变换,为了加快速度,还会使用Hadamard算法(HEVC标准中没有使用,但是自己的具体实现可以使用)。二维DCT可以分成两个一维的DCT变换。

二、 HEVC中的整数DCT

  • 序列幅值差异极小,相邻像素相关性较强时,DCT变换结果大不部分能量集中在DC系数上,AC系数幅值较小。因此,在图像和视频信源中,DCT变换可以使信号集中于少数几个系数上,结合z扫描,熵编码等技术达到压缩的目的。
  • HEVC整数DCT支持:4x4、8x8、16x16、32x32,尺寸大的变换矩阵可以抽样得到尺寸小的矩阵。
  • 随着变换尺寸增大,DCT变换去相关性越来越好,但是性能提升幅度变缓。
  • DCT直流分量正比于信号的平均值。
  • 二维DCT可以分解成两个一维DCT,即先对行进行变换,再对列进行变换。
  • 浮点DCT可以转换为整数DCT,方法是使用修正单元,修正单元参与的计算与之后的量化一块进行,这样变换过程仅仅需要加法,移位操作即可,从而提高了计算速度,也避免了精度损失。
  • HEVC中整数化时放大倍数为64乘以根号N
  • 利用DCT的规律可以使用具有统一形式的整数DCT蝶形算法(具体细节不展开讲)
  • 更多的DCT变换参看我原来的博文:https://blog.csdn.net/weixin_42683993/article/details/87866841

三、 HEVC的整数DST

  • 只有帧内4x4模式亮度分量的残差才使用DST。
  • 距离预测像素越远,预测残差越大,DST能够很好适应这一特征。
  • 除此之外,都是用DCT

四、CU、PU、TU的关系

  • PU和TU都是从CU划分而来的
  • TU和PU之间并无确定的关系,在预测的时候把CU划分成PU,在变换、量化、熵编码的时候则把CU划分为TU
  • 一个PU可以包含多个TU、一个TU也可以跨越多个PU。但是,对于帧内来说,一定是一个PU包含若干TU,TU只能存在一个PU内

五、Hadamard变换(H.264使用了,HEVC没有使用)

  • 它是广义傅立叶变换的一种,和DCT相似
  • 它的变换矩阵是一个2^m x 2^m的矩阵
  • 矩阵元素只包含+1和-1,特征值也一样。
  • 矩阵为正交对称矩阵
  • 奇数行偶对称,偶数行奇对称。
  • 变换前后能量守恒。
  • 最重要的一点,和DCT变换相比,Hadamard变换值包含加减运算,而且可以使用递归的形式快速实现;而且他的正向变换和反向变换具有相同的形式,所以算法复杂度低、容易实现
  • 在图像视频领域,经常被用于计算残差信号的SATD,是指残差信号经过Hadamard变换之后求各元素的绝对值之和。残差SATD与经过DCT变换后各系数绝对值之和非常接近,说明SATD在一定程度上反应残差频域上的大小。

版权声明:本文为weixin_42683993原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。