HEVC里面的Intra Block Copy (IBC)技术,它是一种基于块的预测技术,与帧间编码的MCP类似,最大的区别是IBC所用的参考像素是来自当前帧的(未滤波)重建部分,所以也被叫做current picture referencing (CPR)技术。下图是对帧间运动补偿和IBC的对比:
IBC或IntraBC首次被视频编码标准所采用是在HEVC SCC extensions中,在后续的AV1,AVS3以及VVC视频编码标准也都采用了这一技术,基本过程和原理并无不同,可能在有些细节实现上存在差异。今天就来看看AV1里的IBC是怎么实现的。
在”Overview of Screen Content Coding in Recently Developed Video Coding Standards“论文中对AV1的IBC有如下表述:
在HEVC SCC的IBC基础上,AV1增加了2个限制条件,之所以加上这些限制,主要还是为了硬件编码器在实现上的角度考虑。
首先是对IBC使用条件的限制,AV1将此技术仅用在帧内编码帧中(而不是像HEVC SCC里面会用于帧间编码帧),同时,如果IBC开启,那么就会强制关闭环路滤波工具。
其次是对搜索区域的限制,AV1里面IBC运动矢量BV的搜索区域不包括当前CTU以及它左侧的两个CTU里的像素,如下图所示,即搜索区域是当前块的左边和上边。
所以在AV1视频编码器里面,IBC技术所处的位置如下图箭头所指:
和HEVC SCC类似,AV1里亮度分量的Block Vector (BV)也是仅支持整像素精度,而色度分量的BV有可能指向半像素位置,则需使用双线性插值滤波器实现亚像素插值,获取预测像素值。
在AV1里面,使用IBC编码的块的参考帧使用的是”INTRA_FRAME”类型。
在SVT-AV1代码里IBC搜索最佳BV时,先进行整像素的钻石和全搜索(也可以不做),然后会进行哈希搜索。
哈希搜索会先以2×2块为单元计算出参考帧里每个像素的哈希值,再将2×2哈希值组成4×4块(如果支持的话),8×8块,16×16块…哈希值(最大hash块可做为快速算法),存储到哈希表里。然后计算出当前块的哈希值并和哈希表里面的哈希值比较,如果找到了相等的哈希值,那么它所对应的参考像素块就可以作为IBC搜索的候选。
下面是使用SVT-AV1开源软件编码的一段屏幕内容视频,可以看到第一个I帧里面许多块都是IBC编码,它们有运动信息。
作者:手撕编解码
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。