帧内、帧间预测编码效率比较

来源:互联网 发布:js获取数组长度 编辑:程序博客网 时间:2024/06/12 02:16

在之前的各种文献中都看到过这样的结论:帧间预测的编码效率要高于帧内预测。可是从来没看过详细解释,今天来总结一下。注意这里谈论的编码效率是整体而言的

从理论入手

首先来看原理:
帧内预测——基于同一帧内已编码块预测,构造预测块,计算与当前块的残差,对残差、预测模式等信息进行编码。其主要去除的是空域冗余
帧间预测——基于一个或多个已编码帧预测,构造预测块,计算与当前块的残差,对残差、预测模式、运动矢量残差、参考图像索引等信息进行编码。其主要去除的是时域冗余

简单的来说,帧内预测可以看做空域预测,而帧间预测可以看做时域预测。比较帧内帧间的编码效率应该从空域和时域的冗余来考虑。

在《H.265/HEVC——视频编码新标准及其扩展》一书中看到了比较详细的解释。

一般而言,帧间预测编码效率比帧内预测更高,其原因在于视频的帧间相关性很强,信息的冗余度很高。例如,有统计结果表明,对内容变化不快的256级灰度视频序列,相邻帧之间的帧间差绝对值超过3的像素平均不到一帧像素的4%;对内容变化剧烈的256%级灰度视频序列,帧间差绝对值平均不到一帧像素的7.5%。

可见,视频的时域冗余相当大,帧间预测可以获得相当高的编码效率。

再来想象一下空域冗余的情况。对于平坦视频,空域相关性是十分强的,帧内预测可以获得很不错的编码效率。但并不是所有视频都会有很大的平坦区域,更多情况下视频纹理会比较复杂,平坦区域只是一部分,此时帧内预测效果就不是很理想了。

因此整体而言,帧间预测的编码效率要高于帧内预测。

我之前还产生过这样的疑惑:
帧间预测还要编码运动矢量残差,在运动较多的视频中,运动矢量残差将占整体码流的很大一部分。那这时,是不是帧间预测编码效率就比帧内预测低呢?当然不是。

运动矢量编码虽然增加了编码数据量,但是毕竟一个块才只有一个运动矢量残差,整体而言,还是块残差数据量更大一些。因此不能直接从这个方面考虑。

从码流入手

上面说的都是理论,其实最直观的还是从码流入手。
下面是一个视频RA模式下的最终码流数据:

SUMMARY --------------------------------------------------------    Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR             97    a    9503.7328   43.5410   51.8656   51.3843   44.9325  I Slices--------------------------------------------------------    Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR              4    i  150206.7600   46.2157   52.3800   52.0057   47.4596  P Slices--------------------------------------------------------    Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR             0    p      -1.#IND   -1.#IND   -1.#IND   -1.#IND   -1.#INDB Slices--------------------------------------------------------    Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR             93    b    3451.9897   43.4259   51.8435   51.3575   44.8509  RVM: 0.000Bytes written to file: 3841524 (9504.802 kbps) Total Time:     8340.854 sec.

可以看到,I帧仅有4帧,但数据量相当大,而B帧有97帧,总数据量要小很多。I帧只是用帧内预测,而B帧既有帧内预测又有帧间预测,帧间预测的编码效率是显而易见的。

原创粉丝点击