[AV1] Paeth Intra Prediction

2021-02-24 11:09:04 浏览数 (1)

返回AV1专栏目录

Paeth Intra Prediction是AV1引入的一种新的预测模式,这个Paeth是一个人的名字(初次看到的时候我傻傻地去查词典),他是一位计算机科学家,名为Alan W. Paeth,此人在开发PNG时候提出了Paeth 预测技术

Paeth 帧内预测

在AV1的标准文档中,并没有出现Paeth prediction 这个词,取而代之的是basic intra prediction,详情见 7.11.2.2,这两个术语其实是指的同一个东西。

在AV1中,其Paeth Prediction mode的序号等于 12

intra_frame_y_mode

Name of intra_frame_y_mode

12

PAETH_PRED

在Paeth帧内预测中,需要比较三个像素值,分别是与当前块纵坐标相同的左边pixel,与当前块横坐标相同的上方pixel,以及左上角的pixel。对这三个pixel进行某种计算,哪个pixel的梯度(gradient)最低,就复制那个pixel的值作为当前pixel的预测值。

如下图所示:

Paeth Prediction 计算方式

paeth prediction的宗旨就是判断当前pixel的参考像素中存在的边界(edge)。从计算层面来说,就是比较从上方和左边(abs(A-C), abs(L-C), abs (A L-2C))寻找edge,把非edge方的值视为当前pixel的预测值。

例如

我们经过计算可用得知abs(L-C)的值比abs(A-C)大,则判断上方是存在边界的,所以把左边的值180作为p(1,1)的预测值更好。

下一个例子:

在这个例子中,我们经过计算可用得知abs(L-C)的值比abs(A-C)小,则判断左边是存在边界的,所以把上方的值180作为p(1,1)的预测值更好。

具体在源码中的实现示意如下

代码语言:javascript复制
base = AboveRow[j]   LeftCol[i] – AboveRow[-1]
pLeft = Abs(base – LeftCol[i])           // abs(A-C)
pTop = Abs(base – AboveRow[j])     // abs(L-C)
pTopLeft = Abs(base – AboveRow[-1])    // abs(A L-2*C)

if (pLeft <= pTop && pLeft <= pTopLeft)
    pred[i][j] = LeftCol[i]                   // 使用左边参考像素值
else if(pTop <= pTopLeft)
    pred[i][j] = AboveRow[j]             // 使用上方参考像素值
else
    pred[i][j] = AboveRow[-1]           // 若上方与左边均判断为不存在边界的情况,则使用左上方的值

0 人点赞