IST(Implicit Selected Transform)是AVS3中新增的针对intra块的变换工具,IST对intra块提供了两种可分离的变换核,编码器根据RDO选择最优的变换核,但是对于选中的变换核不在码流中传输其索引,而是将其索引隐藏在非零变换系数的奇偶性中(Parity of the Number of Non-zero Cofficients,PNNC)。解码端根据PNNC得到对应的变换核。
IST
由于DCT-II对于intra块的变换不是最优的,对于角度预测DCT-II不能很好的完成能量集中。而DST-VII能很好地解决这种情况,因此DST-VII被引入了intra块的变换。
为了节省传输所选变换核索引的比特,使用PNNC来表示变换核。解码端统计非零变换系数数量然后按下表得到对应的变换核,如果是偶数就使用DCT-II,如果是奇数则使用DST-VII。
但是量化后PNCC不总是能和选定的变换核一致,为了解决这个问题需要对量化后非零变换系数数量的奇偶性进行调整,也就是将一个非零系数置零或将0设成一个非零值。选哪个系数来调整奇偶性呢?理论上遍历所有系数的所有可能情况就能得到最优结果,但是复杂度太高,一个简化的方法如下:
-
检查PNNC是否和所选变换对应,如果是则结束,否则进入2。
-
如果非零系数数量大于1,则将最后一个非零系数置零。
-
如果非零系数等于1,则将第一个0系数设为1或-1(由量化前系数的符号决定)。
实验结果
在HPM5.0上测试IST,all-intra和RA配置下分别取得0.64%和0.35%的gain如表4表5,对于纹理和运动丰富的序列(如Tango2,MarketPlace和City序列)gain相等更高。
ISTS
ISTS(Implicted Selected Transform Skip)和ISP类似,也是针对intra块,当开启ISTS时如果CU使用了transform skip模式则不直接传输标志位,而是将其隐含在PNCC中。
当时PNNC奇偶性只有两种情况,无法区分出DST-VII、DCT-II和TS这三种情况,为了解决这个问题在帧级区分DST-VII和TS。具体来说,在预处理时对帧内每个块计算hash值,通过hash值可以判断该帧内容是自然场景还是屏幕内容场景,如果该帧是自然场景则PNNC奇数表示DST-VII,如果是屏幕场景PNNC奇数表示TS。
对于自然场景,变换后系数采用反向zig-zag扫描,这是因为变换后能量主要集中在左上角,这种扫描方式会使非零系数集中。而屏幕内容变换后能量分布有所不同,因此采用风车扫描(Windmill-shaped Reordering,WR)。
WR扫描如上图所示,具体为,
C(x,y)=C'(W-1-x,H-1-y)
其中C'表示扫描前的像素,W和H分别表示块的宽和高。WR扫描中并不是所有像素位置都会改变,例如(W/2-1,H/2)和(W/2,H/2-1)位置处的像素不变。
实验结果
实验平台为HPM8.0,测试序列分为4类,TGM(Test and Graphics with Motion),MC(Mixed Content),G(Gaming content)和CC(Camers Captured),LD和RA配置下结果如下,