HEVC-运动约束分块集实现

MCTS
            Tile是HEVC新增的数据单元,它将图像划分为一个个矩形区域,各个区域独立编码。由于Tile编码时虽然在帧内预测时无法用到相邻tile的信息,但在帧间预测、环路滤波等模块会跨越Tile边界,用到已编码图像中任意Tile的编码信息,想要解码一个Tile需解码参考帧整帧图像,因此Tile不能独立解码。
            MCTS(运动约束分块集)编码跨Tile去耦合是通过修改编码器限制MV的搜索范围使得各个Tile能够独立编解码。传统的MCTS只是限制了Tile的预测范围,而对于Slice与Tile的关系没有规定有任何限制,且只是提出这样一个概念,并未实现其功能。下面介绍我们对于MCTS功能的实现:
            在实际应用场景中,由于物体移动的距离不一定总是像素的整数倍,因此在大多数编码器中运动估计的精度已经达到亚像素水平。H.265 / HEVC沿用与上一代标准H.264/AVC所使用的1/4像素精度运动估计,并进一步提出了新的亚像素插值算法。其中亮度采用8抽头滤波器,色度采用4抽头滤波器。亚像素是由其周围的整数像素进行插值得到,因此我们对整数像素MV和亚像素MV具有不同的范围限制。另外,由于亮度分量的MV是对应色度分量MV的2倍而且在亚像素插值中亮度分量中使用的滤波器的抽头数量与色度分量不同,因此本文主要分了以下三种情况对预测MV进行限制:
1、当前MV对于亮度分量和色度分量均为分像素;
2、当前MV对于亮度分量为整像素,对于色度分量为分像素;
3、当前MV对于亮度分量和色度分量均为整像素。

            假设PU的坐标为(x,y),PU的宽度和高度分别为pu_width,pu_height;切片的四个边界分别是Slice_left,Slice_right,Slice_top,Slice_bottom; MV大小是(mv_x,mv_y);然后我们可以根据当前PU的坐标获得像素边界限制,然后根据MV的大小判断其是否溢出边界。考虑到在HM或x265编码器中,MV在MV预测模块中是以1/4像素为单位,因此将边界范围限制的单位设置为1/4像素,如公式(1)所示:

在式1中,NTAPS代表亚像素滤波器抽头系数的个数,我们基于预测MV大小判断当前滤波器抽头的数量以获得不同的范围限制。

由于Merge获得的MV是在没有运动搜索的情况下直接编码的,因此我们需要在获得候选列表后确定候选MV是否超出Slice的边界。根据上述提出的边界建立方法,首先根据MV的大小获得相应的NTAPS,然后利用获得的NATPS确定每个方向的边界。 如果MV超出边界,则将其标记为false。AMVP获得的预测MV(PMV)是运动搜索的起点。同理,我们需要按照同样的方法确定预测MV是否合法。
         
在预测MV模块MCTS的限制几乎已经完成,但仍有一个最重要的问题需要解决。对于每个Slice/Tile的最右侧PU,基于上述Merge和AMVP中选取时域MV的方式,PU就有可能用到其相邻Slice的预测信息,这样Slice就不可能完成独立解码。如图9所示,右下方的块当对Slice进行编码时可以参考临近已编码图像中的同位PU即T,但是当基于MCTS独立地解码片时它肯定不存在。编码器和解码器获得的信息的不一致性将导致解码出错。由于我们在客户端上使用标准解码器,因此我们无法在Merge和AMVP中更改时间候选块的选择方式。为了解决这个问题,本文做了新的限制,即在Merge和AMVP模块,限制Slice最右侧PU的时域候选MV成为最优的候选MV。此外,对于B帧产生的组合MV也应限制这些PU的对应时域MV。

————————————————
版权声明:本文为CSDN博主「毒白菜」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ranghanqiao5058/article/details/87928510

你可能感兴趣的:(HEVC-运动约束分块集实现)