[AV1] Recursive Intra Prediction

返回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。

猜你喜欢

转载自blog.csdn.net/starperfection/article/details/109672259
今日推荐