先说一句,在传统的混合编码框架中,预测和变换是不会产生失真的,只有量化才会导致失真。
貌似264没有把变换和量化分的很清楚,没有特别明显的界限感,下面实际看看。
264的basic transform或者说是core transform是4x4或者8x8的整数变换,是DCT的近似。
首先聊聊亮度的变换量化
除了(a)使用16x16Intra Prediction进行编码的宏块和(b)在High profile打开用于宏块的8x8整数变换两种情况,都是使用下图的流程进行亮度分量的变换量化的:
图中每一个小块尺寸为4x4,使用4x4的变换核进行变换,在缩放和量化之后,按照z顺序扫描。
如果出现前面说的(a)情况,那么流程会有一些变化,如下所示:
在4x4的小块使用4x4的变换核进行变化之后,每个4x4小块的DC系数拼起来,得到一个4x4的DC系数组成的块,再进行一次哈达玛变换。这是因为这些直流系数是高度相关的,使用两次变换可以更彻底的去除频域冗余,提高编码性能。反变换过程如下所示:
如果出现前面说的(b)情况,就是使用8x8的变换核,对于那些使用8x8Intra Prediction或者是任一Inter Prediction的宏块,变换流程如下所示:
再聊聊色度的变换量化
现在假设是YUV420格式,对应16x16大小的亮度宏块,有两个8x8大小的色度宏块。色度的变换量化过程和亮度的(a)情况相似,流程如下所示:
反流程如下所示:
先建立一个对264的变换量化的整体认识,具体细节比如量化步长、变换核什么的等实际用到了再看。。。