最近在做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变换参看我原来的博文: