• 视频编解码 — 帧内预测


    目录

    帧内预测

    块大小

    帧内预测模式

    4x4 亮度块的帧内预测模式(9种)

    16x16亮度块的帧内预测模式

    8x8色度块的帧内预测模式

    帧内预测模式的选择

    率失真优化


    视频编码流程

    帧内预测

    一张图像中相邻像素的亮度和色度信息是比较接近的,并且亮度和色度信息也是逐渐变化的,不会出现突变。

    帧内预测是利用已经编码的像素值来预测待编码的像素值,达到减少空间冗余。已经编码的像素值变成码流,编码的像素会重建成重建像素,用来做之后待编码块的参考像素值。即,已经编码的块会解码成像素用来做参考像素

    块大小

    不同块大小的帧内预测模式

    H264 标准里,块分为宏块和子块,宏块的大小是 16x16(YUV 4:2:0 图像亮度块为 16x16 色度块为 8x8)

    在帧内预测中,亮度宏块可以继续划分成16个 4X4的子块(因为图像中细节很多,需要划分更小的块来做预测会更精细)

            1、宏块大小是 16x16,其中亮度块为 16x16,色度块为8x8

            2、帧内预测中亮度块和色度块是分开独立进行预测

            3、16x16 的亮度块可以继续划分为 16个4x4的子块

    所以需要预测的有 4x4亮度块,16x16亮度块,8x8色度块的预测。

    帧内预测模式

    4x4 亮度块的帧内预测模式(9种)

    1,Vertical模式:当前编码块的每一列的像素值,都是复制上边已经编码块最下面的行对应的值。

            计算公式如下

    pred[x,y] = p[x,-1] 条件x,y = 0..3

            垂直模式预测示意图如下

            以下模式于此类似

    2,Horizontal 模式:

            当前编码块的每一列的像素值,都是复制左边已经编码块最右边的行对应的值。

    3,DC模式:

            当前编码亮度块的每一个像素值,是上边已经编码块的最下面那一行和左边已编码块右边最后一列的所有像素值的平均值。

    4,Diagonal Down-Left 模式

            上边块和右上块的像素通过插值得到

    5、Diagonal Down-Right 模式

            模式需要通过上边块、左边块和左上角对角的像素通过插值得到

    6、Vertical-Right 模式

            模式是需要通过上边块、左边块以及左上角对角的像素插值得到的

    7、Horizontal-Down 模式

            模式需要通过上边块、左边块以及左上角对角的像素插值得到

    8、Vertical-Left模式

            需要通过上边块和右上块最下面一行的像素通过插值得到

    9,Horizontal-Up模式

            通过左边块的像素通过插值得到

    16x16亮度块的帧内预测模式

            四种,Vertical模式,Honrizontal模式,DC模式和Plane模式

    8x8色度块的帧内预测模式

            DC模式,Vertical模式,Horizontal模式,Plane模式

    帧内预测模式的选择

    以亮度块为例。一个16x16的亮度块,直接使用4种16X16的帧内预测模式,也可以使用9种16个4x4的子块

    对于每一个块或者子块,先得到预测块,再用实际待编码的块减去预测块就可以得到残差块。

    三种模式得到最优预测模式

    1、先对每一种预测的残差块的像素值求绝对值再求和,成为cost,然后取其中残差块绝对值之和最小的预测模式成为最优预测模式;

    2、对残差块先进行Hadamard变换,变换到频域后再求绝对值求和,称为cost,然后取cost最小的预测模式为最优预测模式;

    3、对残差块直接进行DCT变换 量化熵编码,计算得到失真大小和编码后的码流大小。然后通过率失真化的方法来选择最优预测模式;

    率失真优化

            预测后经过DCT变换再量化会丢失高频信息。一般来说QP越大,丢失的信息越多,失真就越大,但是码流大小也越小;反之,QP越小,丢失的信息越少,但是码流大小就越大。一般会在失真和码流大小之间平衡,找到在一定码率下,失真最小的模式作为最优的预测模式。

     

  • 相关阅读:
    22. SAP ABAP OData 服务的 $count 和 $inlinecount 两个操作的区别
    盒子阴影(重点)
    中望软件笔试
    Android之Monkey源码分析(第十三篇:触摸事件流程分析)
    asp.net blazor集成ReactiveUI.Blazor
    自动驾驶之高精地图介绍
    力扣83. 删除排序链表中的重复元素(java常规解法 + 建立虚拟头节点)
    讲解IaaS,PaaS,SaaS技术
    细说react源码中的合成事件
    Android Media Framework(一)OpenMAX 框架简介
  • 原文地址:https://blog.csdn.net/WANGYONGZIXUE/article/details/127990537