返回AV1专栏目录
Recursive Intra Prediction是AV1新引入的预测技术。
下面的图展示了这种预测模式的一个块的划分的情况。
如上图我们可以看到,一个8x4的块,会划分为了4个部分,每个部分分别为4x2的大小,预测的方式是这样的,先利用左上的带有序号的reference pixels去预测蓝色块,当蓝色块的predictor生成后,然后预测绿色块,而绿色块使用的左边的reference是蓝色块的生成预测值,所以有这么曾层级依赖关系的存在,recursive prediction 因此而得名。
在实际的使用中,该模式受到的一定的限制,首先仅针对luma 块使用,且 YMode必须为DC_PRED,还需块的syntax:use_filter_intra 值为1时才开启recursive 模式。开启了recursive 模式后,针对周边的第0到第6号像素,需要赋予不同的权重值来体现预测的多方向性。所以recursive 模式根据周边像素的权重值的不同又细分了以下五种模式:
filter_intra_mode | Name of filter_intra_mode |
---|---|
0 | FILTER_DC_PRED |
1 | FILTER_V_PRED |
2 | FILTER_H_PRED |
3 | FILTER_D157_PRED |
4 | FILTER_PAETH_PRED |
权重值在标准中以名为Intra_Filter_Taps
的 5x8x7的三维数组存储(其中第一维的5为INTRA_FILTER_MODES
),参见标准419页。
Intra_Filter_Taps[ INTRA_FILTER_MODES ][ 8 ][ 7 ] = { { { -6, 10, 0, 0, 0, 12, 0 },
{ -5, 2, 10, 0, 0, 9, 0 },
{ -3, 1, 1, 10, 0, 7, 0 },
{ -3, 1, 1, 2, 10, 5, 0 },
{ -4, 6, 0, 0, 0, 2, 12 },
{ -3, 2, 6, 0, 0, 2, 9 },
{ -3, 2, 2, 6, 0, 2, 7 },
{ -3, 1, 2, 2, 6, 3, 5 },
},
{ { -10, 16, 0, 0, 0, 10, 0 },
{ -6, 0, 16, 0, 0, 6, 0 },
{ -4, 0, 0, 16, 0, 4, 0 },
{ -2, 0, 0, 0, 16, 2, 0 },
{ -10, 16, 0, 0, 0, 0, 10 },
{ -6, 0, 16, 0, 0, 0, 6 },
{ -4, 0, 0, 16, 0, 0, 4 },
{ -2, 0, 0, 0, 16, 0, 2 },
},
{ { -8, 8, 0, 0, 0, 16, 0 },
{ -8, 0, 8, 0, 0, 16, 0 },
{ -8, 0, 0, 8, 0, 16, 0 },
{ -8, 0, 0, 0, 8, 16, 0 },
{ -4, 4, 0, 0, 0, 0, 16 },
{ -4, 0, 4, 0, 0, 0, 16 },
{ -4, 0, 0, 4, 0, 0, 16 },
{ -4, 0, 0, 0, 4, 0, 16 },
},
{ { -2, 8, 0, 0, 0, 10, 0 },
{ -1, 3, 8, 0, 0, 6, 0 },
{ -1, 2, 3, 8, 0, 4, 0 },
{ 0, 1, 2, 3, 8, 2, 0 },
{ -1, 4, 0, 0, 0, 3, 10 },
{ -1, 3, 4, 0, 0, 4, 6 },
{ -1, 2, 3, 4, 0, 4, 4 },
{ -1, 2, 2, 3, 4, 3, 3 },
},
{ { -12, 14, 0, 0, 0, 14, 0 },
{ -10, 0, 14, 0, 0, 12, 0 },
{ -9, 0, 0, 14, 0, 11, 0 },
{ -8, 0, 0, 0, 14, 10, 0 },
{ -10, 12, 0, 0, 0, 0, 14 },
{ -9, 1, 12, 0, 0, 0, 12 },
{ -8, 0, 0, 12, 0, 1, 11 },
{ -7, 0, 0, 1, 12, 1, 9 },
}
}
具体软件的实现上可能根据优化情况会略有不同,比如Libaom AV1中,其定义为5x8x8维,其中最后第三维的最后一列全为0。