本文来自VCIP 2020论文《IBC-Mirror Mode for Screen Content Coding for the Next Generation Video Coding Standards》
在传统的SCC IBC(Intra Block Copy)中只考虑了平移运动模式,本文在IBC中引入“垂直翻转”和“水平翻转”模式来进一步提高编码效率。实验结果显示在VTM5.0(VVC)上本算法BD-Rate增益1~2%,在HPM5.0(AVS3) 上本算法BD-Rate增益4~7%。
传统的IBC主要适用于平移运动模式,无法适应更复杂的运动模式(例如,旋转、缩放、镜像翻转)。针对旋转和缩放,SCC引入Intra-Affine模式,Intra-Affine在AVS3上可以达到2%的BD-Rate增益。但是Intra-Affine是基于块的仿射模型,不能解决镜像翻转问题。
SCC中的镜像特征不同于传统的摄像机视频特征,例如在SCC场景中经常出现的26个字母,大部分都是严格镜像对称的,如‘A’, ‘B’, ‘C’, ‘D’,‘E’, ‘H’, ‘I’, ‘K’, ‘M’, ‘O’, ‘T’, ‘U’, ‘V’, ‘W’, ‘X’, ‘Y’。如下图Fig.1中有大量镜像对称内容。
IBC-Mirror模式的动机
IBC是基于块匹配的技术,它在当前图像已重建部分寻找参考块作为预测。首先使用基于hash的算法搜索块向量(Block vector,BV)。如果没有找到有效的BV则在局部区域使用块匹配算法。不同于HEVC SCC中整帧搜索,VVC和AVS3限制了搜索范围来降低复杂度。如Fig.3所示,搜索范围被限制在当前CTU和左侧CTU的一些区域,其中每个块表示一个64x64的亮度块,’X’表示不能用作参考。
限制BV的搜索范围,当参考对象过远时会降低效率。如Fig.4中由于左上角的‘A’超出了搜索范围所以没办法被参考。
但是使用镜像翻转可以很好的解决上面的问题。如Fig.5所示,当预测右半部分时可以将左半部分重建块水平翻转后作为参考能大大提高预测准确度,如果不做镜像翻转则右半部分只能使用帧内预测码率大大增加。
IBC-Mirror模式操作过程
本文提出水平镜像翻转模式和垂直镜像翻转模式,如Fig.6所示。
使用IBC-Mirror模式需要在CU层增加两个标志位,mirrorFlag和mirrorType。mirrorFlag表示是否使用IBC-Mirror模式,mirrorType表示使用哪种镜像翻转模式。两个标志位在码流中使用CABAC编码。在编码端,当基于hash的BV搜索失效时才使用局部块匹配算法和IBC-Mirror模式。
IBC-Mirror模式的操作过程如下:
1. 对当前块(WxH)使用局部搜索算法计算BV。
2. 使用OrgBuf 和PredBuf(两个WxH的矩阵)存储当前块和参考块像素值。
3. 计算OrgBuf 和PredBuf之间的SAD,记为SAD_org。
4. 对PredBuf 使用水平镜像翻转,并将结果存入PredBuf_hor。
5. 计算OrgBuf 和PredBuf_hor之间的SAD,记为SAD_hor。
6. 对PredBuf 使用水平镜像翻转,并将结果存入PredBuf_ver。
7. 计算OrgBuf 和PredBuf_ver之间的SAD,记为SAD_ver。
8. 从为SAD_org、SAD_hor、SAD_ver中选择最小值,如果最小值为SAD_org,则mirrorFlag和mirrorType都设为false。如果最小值为SAD_hor,则mirrorFlag和mirrorType都设为true。如果最小值为SAD_ver,则mirrorFlag设为true而mirrorType设为false。
解码端的操作如Fig.7所示。
实验结果
在VTM5.0(VVC)和HPM5.0(AVS3)上实现IBC-Mirror算法,以原始IBC算法作为anchor。实验结果如下所示。实验结果显示在VTM5.0(VVC)上本算法BD-Rate增益1~2%,在HPM5.0(AVS3) 上本算法BD-Rate增益4~7%。
感兴趣的请关注微信公众号Video Coding