购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.1 参考像素的获取和填充

在帧内预测中,当前图像块的预测像素值是根据所选的帧内预测模式,利用重构参考像素进行外插值(Extrapolation)得到的。通过合理地生成参考像素,AV1可以在不考虑相邻参考像素可用性的情况下,使用完整的帧内预测模式集合。

在帧内预测中,当前图像块把它的左侧或上方相邻图像块的重构像素值作为其帧内预测的参考像素。图4-1为8×8帧内预测块的左侧参考像素p[-1][ y ]和上方参考像素p[ x ][-1]的示意图。假设当前变换块的宽度和高度分别是 W H ,那么上方参考像素AboveRow[]和左侧参考像素LeftCol[]最多可包含 W + H +1个参考像素。其中AboveRow[-1]和LeftCol[-1]都表示当前变换块左上角参考像素,AboveRow[0: W -1]表示当前变换块上方区域参考像素,AboveRow[ W : W + H -1]表示位于当前变换块的右上角区域的参考像素,LeftCol[0: H -1]表示当前变换块左侧区域的参考像素,LeftCol[ H : W + H -1]表示位于当前变换块左下角区域的参考像素。假设p[ x ][ y ]表示位置是( x y )的像素值并且当前变换块左上角像素为p[0][0],那么上方参考像素AboveRow[]和左侧参考像素LeftCol[]可按如下方式获取:

❍AboveRow[ i ]=p[ i ][-1], i =0,…, W + H -1

❍LeftCol[ i ]=p[-1][ i ], i =0,…, W + H -1

❍AboveRow[-1]=LeftCol[-1]=p[-1][-1]

图4-1 8×8帧内预测块的左侧参考像素p[-1][ y ]和上方参考像素p[ x ][-1]示意图

4.1.1 判断参考像素是否可用

当前变换块的左侧、上方以及右上角和左下角区域的参考像素并非一直处于可用状态。对于位于图像顶部的变换块,由于这些变换块没有上侧变换块,因此它们的上方参考像素不存在。同理,位于图像左侧的变换块没有左侧参考像素。另外,由于图像中的超级块是按照光栅扫描顺序来编码的,因此位于超级块右侧区域的变换块没有可用的右上角参考像素,位于超级块底部区域的变换块没有可用的左下角参考像素。除此之外,因为超级块内部的编码块是按照深度优先顺序来编码的,在有些情况下,变换块的右上角或左下角区域的参考像素所在的编码块还没有开始编码,所以,超级块内部的变换块可能也没有可用的右上角或左下角参考像素。

图4-2为在帧内预测过程中,不同图像块的可用参考像素状态示意图,其中超级块1中的数字表示对应变换块的深度优先编码顺序,并且变换块12和13是同一个编码块划分得到的两个变换块。在图4-2的示例中,变换块0,1,2和7位于图像顶部,所以没有可用的上方参考像素。变换块F位于图像左侧边界,所以没有可用的左侧参考像素。变换块11的左下角区域参考像素位于下一个还未编码的超级块 N 中,所以变换块11的左下角区域参考像素不可用。同理,对于变换块13,由于变换块14还未编码,所以变换块13的左下角区域参考像素也是不可用的。另外,变换块14的右上角区域像素位于还没编码的超级块2中,因此变换块14的右上角区域参考像素也不可用。对于变换块4,由于它右侧变换块7和下方变换块6还没有编码,所以,变换块4没有可用的右上角和左下角参考像素。

图4-2 不同图像块的可用参考像素状态示意图

4.1.2 参考像素填充

对于不可用的参考像素,AV1会根据可用的参考像素对其进行填充。在AV1中,参考像素的获取和填充流程描述如下:

❍上方参考像素AboveRow[0: W + H -1]的获取和填充:

●如果当前变换块既没有可用的左侧参考像素,也没有可用的上方参考像素,即p[-1][-1]、p[0: W + H -1][-1]和p[-1][0: W + H -1]都不可用,那么AboveRow[ i ]=(1<<BitDepth)-1, i =0: W + H -1。例如,对于BitDepth为8比特的视频,AboveRow[ i ]是127。

●否则,如果当前变换块没有可用的上方参考像素,但是左侧参考像素是可用的,即p[-1][-1]和p[0: W + H -1][-1]不可用,但是p[-1][0: W + H -1]是可用的,那么AboveRow[ i ]=p[-1][0], i =0: W + H -1。

●否则,即当前变换块的上方参考像素可用,此时要继续检查右上方区域的参考像素是否可用:

■如果右上方区域的参考像素不可用,那么AboveRow[ i ]=p[ i ][-1], i =0: W -1;而AboveRow[ W ],AboveRow[ W +1],…,AboveRow[ W + H -1]则用AboveRow[ W -1]来代替。

■否则,即右上方区域的参考像素可用,那么AboveRow[ i ]=p[ i ][-1], i =0:min( W + H -1,2 W -1)。此时,如果 W + H -1大于2 W -1,那么AboveRow[2 W ],…,AboveRow [ W + H -1]则用AboveRow[2 W -1]来替代。图4-3为4×16变换块的上方参考像素生成示意图,假设当前变换块的宽和高分别是4和16,并且其右上角参考像素可用,此时AboveRow[0:7]=p[0:7][-1],而AboveRow[8:19]=AboveRow[7]。

图4-3 4×16变换块的上方参考像素生成示意图

❍左侧参考像素LeftCol[0: W + H -1]的获取和填充:

●如果当前变换块既没有可用的左侧参考像素,又没有可用的上方参考像素,那么LeftCol[ i ]=(1<<BitDepth)+1, i =0: W + H -1。对于BitDepth为8比特的视频,LeftCol[ i ]是129。

●否则,如果当前变换块没有可用的左侧参考像素,但是有可用的上方参考像素,那么LeftCol[ i ]=p[0][-1], i =0: W + H -1。

●否则,此时当前变换块有可用的左侧参考像素,要继续检查左下方参考像素是否可用:

■如果左下方区域参考像素不可用,那么LeftCol[ i ]=p[-1][ i ], i =0: H -1。LeftCol[ H ],LeftCol[ H +1],…,LeftCol[ W + H -1]则用LeftCol[ H -1]来代替。

■否则,左下方区域参考像素可用,那么LeftCol[ i ]=p[-1][ i ], i =0:min( W + H -1,2 H -1)。如果 W + H -1大于2 H -1,那么LeftCol[2 H ],…,LeftCol[ W + H -1]用LeftCol [2 H -1]来代替。图4-4为16×4的变换块的左侧参考像素生成示意图,展示了 W + H -1大于2 H -1时,LeftCol[2 H : W + H -1]的生成。此时LeftCol[0:7]=p[-1][0:7],LeftCol[8:19]=LeftCol[7]。

❍左上角参考像素AboveRow[-1]的获取和填充:

●如果p[-1][-1]可用,那么AboveRow[-1]=p[-1][-1]。

●否则,如果上方参考像素p[0][-1]可用,那么AboveRow[-1]=p[0][-1]。

●否则,如果左侧参考像素p[-1][0]可用,那么AboveRow[-1]=p[-1][0]。

●否则,即p[-1][-1]、p[0][-1]以及p[-1][0]都不可用,那么AboveRow[-1]=(1<<BitDepth)。

由于LeftCol[-1]和AboveRow[-1]均指向左上角参考像素,因此,获取AboveRow[-1]之后,LeftCol[-1]=AboveRow[-1]。

图4-4 16×4变换块的左侧参考像素生成示意图 9OsZlSBihaNGh31M3y1mXcD6kMzw3mu5c7a46byFd/YuRRGEFwxWSDIspwvEaWXU

点击中间区域
呼出菜单
上一章
目录
下一章
×