ZigZag Sin
登 陆
上一篇:帧内编码的原理 下一篇:残差的压缩

帧内预测

乔红
2021-3-15 23:55 阅读 33

引言

上一小节,我们介绍了 H.264 帧内编码的大体原理,知道了帧内编码大体分为预测和残差两部分的内容。我们这一小节,来介绍一下预测的部分。

亮度块(Luma)的预测

在 H.264 中,亮度块的预测模式可以分为两种,16 x 16 的预测模式和 4 x 4 的预测模式。(后期又出现了 8 x 8 的预测模式,我们后面加一个附录讲解一下)

我们已经知道,一个宏块的亮度部分,就是一个 16 x 16 的像素块。那么在进行预测的时候,我们可以将整个宏块作为一个整体进行预测,也可以将这个宏块分割成 16 个 4 x 4 的小的子块,对这些子块分别进行预测。H.264 为我们提供了两种不同颗粒度的方式,就是为了在细节多的地方使用较细致的预测方式来保留细节,而在细节不那么多的区域使用较粗略的预测模式,来节省空间。

除了不同的颗粒度,H.264 还提供了很多种不同的预测模式,以适应更多的情况。在上一小节,我们已经介绍过了,对于帧内编码,H.264 会先依据已经解码的一些像素来对当前块进行预测,然后用原像素减去预测的结果,得到残差。因此,预测得越准,残差就越小。为了预测得准,H.264 提供了多种预测模式。

4 x 4 亮度块预测

我们拿一个宏块出来,这个宏块大小是 16 x 16。我们可以将这个宏块分割成 16 个 4 x 4 的子块。如下图。

4x4

4 x 4 亮度块的分割方式

而对于一个宏块来说,他的 16 个子块的解码顺序并不是依次排列的,而是依照以下的划分方式。

先将宏块划分成 4 个 8 x 8 的块,然后再将每个 8 x 8 的块划分成 4 个 4 x 4 的块。

4x4

所以这样划分之后,整个宏块中 16 个 4 x 4 的子块的解码顺序就如下图。

4x4

这种宏块划分方式在后面会用到,我们这里只是先提及一下。

4 x 4 亮度块预测模式

对于 4 x 4 的子块,有 9 种预测模式。

nine

对于 4 x 4 的子块,可以参考的像素是子块上方和左边的共 13 个像素。就是下图中蓝色的色块。

nine

  • 竖直预测模式 vertical pred_vertical

  • 水平预测模式 horizontal pred_horizontal

  • DC 模式

    DC 模式,又被称之为均值模式。均值模式下,4 x 4 子块中 16 个像素都是相同的值,是上方的四个像素 A B C D 和左边四个像素 I J K L 的均值。就是下图中红框框

    pred_dc

    而细分之下,又可以分成 4 中情况:

    • 情况一: 上方 4 个像素和左边 4 个像素都不存在,例如,画面最左上角的那个 4 x 4 的块。这种情况下,所有的像素就等于:

      1 << (8 - 1)
      

      也就是 128

    • 情况二: 上方 4 个像素存在,左边 4 个像素不存在:

      (A + B + C + D + 2) >> 2
      
    • 情况三: 上方 4 个像素不存在,左边 4 个像素存在:

      (I + J + K + L + 2) >> 2
      
    • 情况四: 上方 4 个像素和左边 4 个像素都存在:

      (A + B + C + D + I + J + K + L + 4) >> 3
      
  • diagnal down-left 模式 diagnal down-left

  • diagnal down-right 模式 diagnal down-right

  • vertical-right 模式 vertical-right

  • horizontal-down 模式 horizontal-down

  • vertical-left 模式 vertical-left

  • horizontal-up 模式 horizontal-left

16 x 16 亮度块预测

four

  • 垂直预测
  • 水平预测
  • DC 预测
  • 平面预测

色度块(Chroma)的预测

上一篇:帧内编码的原理 下一篇:残差的压缩
给我买个键盘吧。。。求打赏。。。

632212519@qq.com

DC模式有点没看明白,求解释~

2021-03-19 19:29:20