VVC代码 BMS 帧内预测学习之五 边界值的滤波(待完善)

帧内预测中,对一些涉及边界的模式下得到的帧内预测块,会进行进一步调整,保持边界的连续性。
BMS中(目前BMS1.1中边界值滤波操作默认关闭),对采用边界滤波且宽/高均>2的亮度块进行:
1、对模式2,调用函数xIntraPredFilteringMode02()进行滤波。

  • 若高大于2,对左四列像素进行滤波,从左到右系数为[8, 8],[12, 4],[14, 2],[15, 1]:
    p D s t . a t ( x , 0 ) = ( 8 p D s t . a t ( x , 0 ) + 8 p S r c . a t ( x + 2 , 0 ) + 8 ) > > 4 pDst.at( x, 0 ) = ( 8 * pDst.at( x, 0 ) + 8 * pSrc.at( x+2, 0 ) + 8) >> 4
    p D s t . a t ( x , 1 ) = ( 12 p D s t . a t ( x , 1 ) + 4 p S r c . a t ( x + 3 , 0 ) + 8 ) > > 4 pDst.at( x, 1 ) = ( 12 * pDst.at( x, 1 ) + 4 * pSrc.at( x+3, 0 ) + 8) >> 4
    p D s t . a t ( x , 2 ) = ( 14 p D s t . a t ( x , 2 ) + 2 p S r c . a t ( x + 4 , 0 ) + 8 ) > > 4 pDst.at( x, 2 ) = ( 14 * pDst.at( x, 2 ) + 2 * pSrc.at( x+4, 0 ) + 8) >> 4
    p D s t . a t ( x , 3 ) = ( 15 p D s t . a t ( x , 3 ) + p S r c . a t ( x + 5 , 0 ) + 8 ) > > 4 pDst.at( x, 3 ) = ( 15 * pDst.at( x, 3 ) + pSrc.at( x+5, 0 ) + 8) >> 4

  • 若高小于等于2,对左两列进行滤波,系数为[8, 8],[12, 4]。

注:pSrc指向经过滤波的参考样本的首地址,pDst指向预测块首地址。

2、对模式66,调用函数xIntraPredFilteringMode34()进行滤波;

  • 若宽大于2,对左四列像素进行滤波,从左到右系数为[8, 8],[12, 4],[14, 2],[15, 1]:
    p D s t . a t ( 0 , y ) = ( 8 p D s t . a t ( 0 , y ) + 8 p S r c . a t ( 0 , y + 2 ) + 8 ) > > 4 pDst.at( 0, y ) = ( 8 * pDst.at( 0, y ) + 8 * pSrc.at( 0, y+2 ) + 8) >> 4
    p D s t . a t ( 1 , y ) = ( 12 p D s t . a t ( 1 , y ) + 4 p S r c . a t ( 0 , y + 3 ) + 8 ) > > 4 pDst.at( 1, y ) = ( 12 * pDst.at( 1, y ) + 4 * pSrc.at( 0, y+3 ) + 8) >> 4
    p D s t . a t ( 2 , y ) = ( 14 p D s t . a t ( 2 , y ) + 2 p S r c . a t ( 0 , y + 4 ) + 8 ) > > 4 pDst.at( 2, y ) = ( 14 * pDst.at( 2, y ) + 2 * pSrc.at( 0, y+4 ) + 8) >> 4
    p D s t . a t ( 3 , y ) = ( 15 p D s t . a t ( 3 , y ) + p S r c . a t ( 0 , y + 5 ) + 8 ) > > 4 pDst.at( 3, y ) = ( 15 * pDst.at( 3, y ) + pSrc.at( 0, y+5) + 8) >> 4

  • 若宽小于等于2,对左四列像素进行滤波,从左到右系数为[8, 8],[12, 4]:

3、对水平类模式>2,<=10 || 垂直类模式>=58,<66,每一类模式下有8个,所以有8组 滤波系数,调用函数xIntraPredFilteringModeDGL()进行滤波。

猜你喜欢

转载自blog.csdn.net/yolo_life/article/details/82801857
今日推荐