266中帧内预测完整过程的总结

        做了一段时间帧内,感觉对帧内预测的理解有加深了一些,今天来给帧内预测做个总结,也相当于巩固记忆啦。

       相比起来,帧内预测真的是属于视频编码中最简单的模块了,内容也超级少,感觉最近帧内有点难做,性能提升都很少,第十次会议大部分的提案的性能都不高,而且大部分提案都集中于滤波,双向预测和多参考行预测这一块。

      帧内预测的基本思想就是利用相邻像素的相关性去除空间冗余。在视频编码中相邻像素指的就是当前块周围的已编码块的重建像素。

    帧内预测的过程可以分为4个部分,分别是:

1.参考像素的获取;

2.参考像素的平滑滤波;

3.利用参考像素计算当前块的预测值;

4.对上一步得到的预测块的边界做边界滤波;下面来详细介绍。

一.参考像素的获取:


   如上图所示,当前CU的参考像素由5个部分组成,分别是当前块的左下一列的重建值,个数为W,当前块的左边一列的重建值,个数是H,当前块的左上角重建值,个数为1,当前块的上边一行,个数为W,当前块的右上一行,个数为H。总个数为2(W+H)+1。当然,有时候这5个部分的重建值不是都可用,比如在图像,Tile和slice的边缘时,某一部分的重建值或者全部的重建值都不可用,或者参考像素所属的编码块不是帧内预测模式且被限制不能作为帧内预测的参考块时,这时的处理如下:

         1.如果5个部分的重建值都不可用时,则用1<<(bitDepth-1)来填充;

        2.如果这5个部分中有部分可用部分不可用时,则先查看最左下角的重建像素值是否可用,如果可用,则从下往上遍历,不可用的重建值用其下方最相邻的像素值填充,到达左上角后,从左到右遍历,若有某点的重建值不可用,则用其左边最相邻的像素填充;

        如果最左下角的重建像素值不可用,则先从下往上,从左往右一次遍历知道找到可用的重建值吗,将该重建值填充到最左下角的位置,然后重新开始从下往上,从左往右遍历,填充像素值,规则和上述相同。

二. 参考像素的平滑滤波

      为了提高帧内的预测效率,减少噪声对预测的影响,提高预测的精度,对参考像素进行平滑滤波。平滑滤波器其实是一个低通滤波器。

    进行平滑滤波是分很多情况的,并不是所有情况下都进行平滑滤波的,266中进行平滑滤波的条件是:

1.亮度分量;

2.大小在4*4到128*128之间;

3.不是DC模式

4.如果是2*2的块,则不进行平滑滤波;

  如果是4*4的块,则不进行平滑滤波;

 如果是8*8的块,则模式1,2,3,33,34,35,65,66进行滤波,其他模式不滤波;

 如果是16*16的块,则模式1,2-15,21-47,53-66进行滤波,其他模式不滤波;

 如果是32*32的块,则模式1,2-17,19-49,51-66都进行滤波,其他模式不滤波;

 如果是64*64的块,则不进行滤波(想不通);

 如果是128*128的块,则滤波模式和32*32的块相同;


    平滑滤波又分为两种,一种是常规滤波,一种是强滤波,如下图所示,左边是常规滤波,即将当前参考像素和左右两边的参考像素进行【1 2 1】的三抽头滤波,右边是强滤波,即当前像素用左上方和最右(最下)的参考像素加权平均得到,其中权重与当前像素距离最两角的距离成反比;

                

     其中,强滤波的使用是需要满足一定条件的:

    1.亮度分量

   2.(abs(A+C-2B)<threshold)

     (abs(C+E-2D)<threshold)

其中,threshold=1<<(bitDepth-5),A为左下部分的最下角的参考像素,B为左方的最下角的参考像素,C为左上角的参考像素,D为上方的最右边的参考像素,E是右上方的最右的参考像素。

  3.块的大小大于等于32*32

   可以看出,强平滑滤波用在低纹理区域,通过用沿着每个方向的线性内插值取代真是参考值,取消了小的局部变化,这样的变化尽管很小,但是在32*32的大样点区域上进行帧内预测,还是可以产生可见的结构性失真的。

三.预测值的计算

   预测值的计算分成三种,分别是DC模式,PLANAR模式和角度模式

   DC模式的计算:适用于平坦区域,即将当前块的上方和左方的参考像素计算一个均值,该均值作为当前块中每个点的预测值。


PLANAR模式的计算:适用于缓慢变化的区域,即根据a,b,c,d求加权平均,权重与距离有关;


角度模式计算:适合纹理比较复杂的区域,先以简单的对角模式66为例,计算当前块中点的预测值的过程起始是投影的过程,将的那个块中的点按照模式66的预测方向45度往参考像素上投影,投影到哪个参考像素,则该参考像素值就是该点的预测值,因为预测角度是45度,所以模式66种当前块的所有点分投影在参考像素是都是整像素位置。


       再举个比较复杂的例子--模式21,为了减少的复杂度,先将参考像素统一到一维上,即对于垂直类预测模式35--49,将左方的参考采样投影到上方,对于水平类预测模式19--34,将上方的参考采样投影到左列,得到一维的参考像素后,即可进行预测值的计算。与模式66相似,计算预测值的过程其实也是反投影的过程,但是在模式21里,预测角度并不是45度,所以投影到参考像素上有两种情况,一种是投影到参考像素的整像素位置,一种是投影到参考像素的分像素位置。投影到整像素位置,也是直接将参考像素值作为预测值,如果是分像素位置,则要通过左右两边两个像素插值得到预测值,其中插值系数w1,w2与投影位置与两边像素的距离有关。


 四.预测块的边界滤波

       为了块边界的连续性,对预测得到的预测块的边界进行边界滤波,分为3种

DC模式:

                                左上角:  P[0]=(P[-1]+P[-stride]+2*P[0]+2)>>2;

                                 第一行:P[x]=(3*P[x]+P[x-stride]+2)>>2;

                                 第一列:P[y]=(3*P[y]+P[y-1]+1)>>2


近)水平/垂直模式:即将参考采样中存在的增大或者变小的趋势也添加到边界中,下图以垂直模式为例。

    (近)水平模式(10,9,11):对第一行的预测值进行滤波

    (近)垂直模式(26,24,26):对第一列的预测值进行滤波


近)对角模式:越接近对角模式,第一行或者第一列与其相邻的参考像素之间的差距越大,所以需要与参考像素进行滤波以减少边界的不连续性,下图以模式66为例。
模式 2 及其相邻的 8 个模式( 3,4,5,6,7,8,9,10 ):  对第一行进行边界滤波
模式 34 及其相邻的 4 个模式( 58,59,60,61,62,63,64,65 ): 对第一列进行边界滤波
                           

猜你喜欢

转载自blog.csdn.net/cxy19931018/article/details/80635898