HM 代码解读:
以最大CU为64x64为例,4x4块为最小单元,一共有256(16x16)个边界,根据一定的算法逻辑计算出每个边界的边界强度,然后以步进为2(8x8网格)遍历所有PU,在每个PU中再去根据边界强度执行相应的滤波处理。
理论基础:
在基于块的视频编码框架中,由于整个视频帧被划分为不同大小的块进行预测、变换和量化,重建图像的块边界处可能会出现不连续性,这就是块效应。
块效应可以通过去块滤波来消除。
HEVC滤波时考虑的最小块是8x8,对于每个8x8的网格边界,首先判断其是否属于TU或PU的边界,如果否,则无需滤波。如果是,则根据下面的判据决定“边界强度”:
? 强度2:有至少一个块是帧内块。
? 强度1:符合以下三种情形之一:
1. 至少一个块含有非零的残差系数,并且该边界是一个变换边界(也就是TU的边界)。
2. 两个块的运动矢量的绝对差值大于1个整像素。
3. 两个块的参考帧不同或者运动矢量(MV)数目不同。
? 强度0:不符合上述条件的情况
对于亮度(Luma)分量,强度为0的边界不会被滤波;对于色度(Chroma)分量,强度小于2的边界不会被滤波。
对于强度为1或2的亮度边界,以及强度为2的色度边界,再看一个与QP有关的条件是否满足:如果满足则滤波,不满足则不滤。
对于进行滤波的亮度边界,分为普通滤波和强滤波。
普通滤波又分为两种情况:
1. 只有距边界最近的一个像素被修改
2. 距边界最近的两个像素被修改。
强滤波则对距边界最近的三个像素进行修改。
对于进行滤波的色度边界,只采用上述普通滤波的第一种情况。
究竟采取哪一种情况,都是根据与QP有关的条件来决定的。