H.266:帧内预测之PDPC(VTM4)

以下内容整理自JVET-M1001, JVET-M1002,该PDPC算法在VTM4中已实现。

PDPC(Position dependent intra prediction combination),中文全称为位置决定的帧内预测组合。它将未滤波边界参考像素和类似HEVC中根据滤波后的参考像素得到的帧内预测值组合起来得到最终的帧内预测值。具体实现公式如下所示:
pred(x,y)=(wL×R(-1,y) + wT×R(x,-1) – wTL ×R(-1,-1)+(64 – wL – wT+wTL)×pred(x,y) + 32 )>>6
其中R(x,-1), R(-1,y)分别表示上边和左边的当前像素 ,R(-1,-1)表示当前块左上角的参考像素,pred(x,y)表示帧内预测像素。
根据上述公式可知,已知pred(x,y),PDPC算法的关键在于找出参考像素( R(x,-1), R(-1,y) )和算出权重值(wL,wT,wTL)。下面分模式讨论如何得到参考像素和权重值。
设nScale = ( ( Log2( nTbW ) + Log2( nTbH ) − 2 ) >> 2 ) (后续计算要用)
设相邻像素为p(x’ , y’), 其中 x’ = −1, y’ = −1…refH − 1 或 x’ = 0…refW − 1, y’ = −1,
已知必有R(-1,-1) = p(-1 , -1)

  1. Planar和DC模式

x = x’ ,R(x,-1) = p(x’, -1)
y = y’ ,R(-1,y) = p(-1,y’)
wT[ y’ ] = 32 >> ( ( y’ << 1 ) >> nScale )
wL[ x’ ] = 32 >> ( ( x’ << 1 ) >> nScale )
wTL[ x ][ y ] = ( predModeIntra = = INTRA_DC ) ? ( ( wL[ x ] >> 4 ) + ( wT[ y ] >> 4 ) ) : 0

  1. 模式18和模式50(水平和垂直方向)

x = x’ ,R(x,-1) = p(x’, -1)
y = y’ ,R(-1,y) = p(-1,y’)
模式18:
wT[ y’ ] = 32 >> ( ( y’ << 1 ) >> nScale )
wL[ x’ ] = 0
wTL[x’][ y’ ] = 32 >> ( ( y’ << 1 ) >> nScale )
模式50:
wT[y’ ] = 0
wL[ x’] = 32 >> ( ( x’ << 1 ) >> nScale )
wTL[x’ ][ y’] = 32 >> ( ( x’ << 1 ) >> nScale )

  1. 模式2和模式66(对角线方向)

x = x’ + y’ + 1 ,R(x,-1) = p(x’ + y’ + 1, -1)
y = x’ + y’ + 1 ,R(-1,y) = p(-1, x’ + y’ + 1)
wT[ y’ ] = (32 >> 1) >> ( ( y’ << 1 ) >> nScale )
wL[ x’] = (32 >> 1) >> ( ( x’ << 1 ) >> nScale )
wTL[ x’ ][ y’ ] = 0

  1. 模式值小于等于10

dXPos[ y’] = ( ( y’ + 1 ) * invAngle + 2 ) >> 2
dXFrac[ y’ ] = dXPos[ y’ ] & 63
dXInt[ y’] = dXPos [ y’ ] >> 6
dX[ x’ ][ y’ ] = x’ + dXInt[ y’ ]

R(-1,y) = 0
R(x,-1) = ( dX[ x’ ][ y’ ] < refW − 1 ) ? mainRef[ dX[ x’ ][ y’ ] + ( dXFrac[ y’ ] >> 5 ) ] : 0
wT[ y’ ] = ( dX[ x’ ][ y’ ] < refW − 1 ) ? 32 >> ( ( y’ << 1 ) >> nScale ) : 0
wL[ x’ ] = 0
wTL[ x’ ][ y’ ] = 0

  1. 模式值大于等于58

dYPos[ x’] = ( ( x’ + 1 ) * invAngle + 2 ) >> 2
dYFrac[ x’ ] = dYPos[ x’ ] & 63
dYInt[ x’ ] = dYPos[ x’ ] >> 6
dY[ x’ ][ y’ ] = y’ + dYInt[ x’ ]
R(-1,y) = ( dY[ x’ ][ y’ ] < refH − 1 ) ? sideRef[ dY[ x’ ][ y’ ] + ( dYFrac[ x’ ] >> 5 ) ] : 0
R(x,-1) = 0
wT[ y’ ] = 0
wL[ x’ ] = ( dY[ x’ ][ y’ ] < refH − 1 ) ? 32 >> ( ( x’ << 1 ) >> nScale ) : 0
wTL[ x’ ][ y’ ] = 0

  1. 其他模式
    R(x,-1) =0
    R(-1,y) = 0
    wT[ y’ ] = 0
    wL[ x’] = 0
    wTL[ x’ ][ y’ ] = 0

将上述分类讨论的情况整理成如下表格:

Modes <=10 和 Modes >= 58的权重值的选择要看判断条件是否成立(即参考像素是否超出可取值范围),详情参见上文。

猜你喜欢

转载自blog.csdn.net/allen_sdz/article/details/88295718