ZigZag Sin
登 陆
前面没有了 下一篇:帧内预测

帧内编码的原理

乔红
2021-2-24 15:00 阅读 62

引言

H.264 大体分为两种编码方式,一种叫做帧内编码,一种叫做帧间编码。

  • 帧内编码很容易理解,针对一帧(或者不满一帧)的数据,进行编码。编码时所参考的数据就是这一帧,换言之,解码也就只需要这一帧数据。这种编码方式也被用于图片的编码中,例如,jpeg 图片的编码方式就和 H.264 的帧内编码方式极度相似。

  • 另外一种编码方式叫做帧间编码,帧间编码主要利用了在视频中,相邻几帧之间其实变化是不大的这一特性,让一帧数据除了参考自己之外,还可以参考相邻的帧。

本小结我们先来介绍帧内编码。

原理

假设我们现在在一幅图像中选取出一个 4 x 4 的像素块(只讨论亮度)。他可能是这个样子。

Block

如何将其存放起来呢?我们可以直接把这里面的数据存起来,当然是可以的,但是这样会不会有些太大了。如果每个像素的位宽是 8bit,那么每个像素就有 0-255 一共 256 种情况。

我们之前在讨论熵编码的时候,我们已经知道了一些压缩数据的技巧。例如,将出现概率高的数据用较短的码字存储,出现概率低的用较大的码字。

可是对于图像来说,我们实际上是无法掌控每个像素数据的分布的。如果你拍的是夜晚,数据就会趋近 0,如果是白天,数据就会趋近 255。我们是无法掌控的。

那么有没有什么办法能让图像的数字尽可能集中在某个范围内呢?H.264 采用了一种叫做预测的方式来对数据进行处理。

通常情况下,在正常的一幅图像中,某一个像素,或者某一个区域的像素,总是和其周围的像素相近,或者是有关联的。

我们把上面提到的 4 x 4 的像素块的上方的 4 个显示出来,假如他是这样的

Block

我们发现,上方的 4 个像素和下面的 4 x 4 的像素块似乎有很大的相似度和关联性。此时,我们可以用上方的 4 个像素来预测一下下方的像素块。其实所谓预测,就是用上面一行分别移动到下面每一行。这种预测方式,就是竖直预测。

Block

这时候,我们用原像素减去预测像素,就得到了一个差值,这个差值,我们就把它叫做残差。

Block

可以看到,残差像素的值都是比较小的数,这些数就更容易压缩一些。当然,残差的压缩也比较复杂,我们后面会介绍。

H.264 的帧内编码,就是通过这种 “预测” + “残差” 的方式,取得了非常好的效果。

前面没有了 下一篇:帧内预测
给我买个键盘吧。。。求打赏。。。
欢迎加群,一起交流~~~

632212519@qq.com

图很清晰,博主加油

2021-03-16 11:55:16