音视频编解码-H264和H265 运动估计对比

问题背景:问下大佬们H264的MVP预测和H265的amvp的主要区别是什么?除了amvp支持不同且更多的候选位置,以及amvp支持参考不同参考帧的MV在scale之后也做为MVP,还有其他区别吗?

概念介绍

运动估计:估计视频序列中对象运动的过程。这是通过比较两个或多个连续帧并识别帧之间像素的位移来完成的。运动估计通常在逐块的基础上执行,其中每个块是一个小像素区域。

运动补偿:使用估计的运动矢量来预测视频序列中的下一帧的过程。这是通过根据运动矢量将像素从参考帧复制到当前帧来完成的。运动补偿是视频压缩的关键组成部分,因为它可以消除帧之间的冗余信息。

运动矢量:表示像素块从一帧到下一帧的位移的二维矢量。运动矢量通常被编码并与压缩视频流一起传输,以便解码器可以执行运动补偿以重建原始视频序列。

运动估计、运动补偿和运动矢量之间的关系:运动估计和运动补偿是两种密切相关的技术,用于提高视频压缩效率。运动估计用于估计视频序列中对象的运动,运动补偿用于使用估计的运动矢量预测序列中的下一帧。

运动矢量是运动估计过程的输出和运动补偿过程的输入。 我们简单举例说明:考虑一辆汽车在路上行驶的简单视频序列。汽车向右移动,背景静止。在这种情况下,运动估计过程将估计汽车每帧向右移动一定数量的像素。然后,运动补偿过程将使用此信息来预测序列中的下一帧,方法是将汽车从前一帧复制到当前帧,并向右移动估计的像素数。

运动估计和运动补偿为视频压缩提供了许多好处:通过消除帧之间的冗余信息,运动估计和运动补偿可以显著降低编码视频序列所需的比特率。这对于通过互联网传输视频以及在便携式设备上存储视频非常重要。另一个好处:运动估计和运动补偿还可以提高压缩视频序列的图像质量。这是因为它们可以减少压缩伪影,例如块效应和模糊。

运动估计

连续的视频帧可能包含相同的对象(静止或移动)。运动估计检查图像序列中对象的运动,以尝试获得表示估计运动的矢量。运动补偿利用如此获得的物体运动的知识来实现数据压缩。在帧间编码中,运动估计和补偿已成为消除由于连续帧之间的高相关性而导致的时间冗余的强大技术。

在真实的视频场景中,运动可以是平移和旋转的复杂组合。这种运动难以估计并且可能需要大量处理。然而,平移运动很容易估计并且已成功用于运动补偿编码。

大多数运动估计算法都做出以下假设:

  1. 对象在平行于相机平面的平面内平移,即,不考虑相机变焦的影响,并且不考虑对象旋转。
  2. 照明在空间和时间上是均匀的。
  3. 一个物体被另一物体遮挡以及未覆盖的背景都被忽略。

运动估计有两种主流技术:像素递归算法(PRA)和块匹配算法(BMA)。PRA 是通过梯度方法对各个像素的运动估计进行迭代细化。BMA 假设块内的所有像素都具有相同的运动活动。BMA 基于矩形块估计运动并为每个块产生一个运动矢量。PRA的计算复杂度较高,规律性较差,因此很难在硬件中实现。一般来说,BMA 由于其规律性和简单性,更适合简单的硬件实现。

下图说明了块匹配算法的流程。在典型的 BMA 中,每一帧都分为多个块,每个块由亮度块和色度块组成。通常,为了编码效率,仅对亮度块执行运动估计。当前帧中的每个亮度块与参考帧上的搜索区域中的候选块进行匹配。这些候选块只是原始块的移位版本。找到最佳(失真最低,即最匹配)候选块并记录其位移(运动矢量)。在典型的帧间编码器中,从参考帧的预测中减去输入帧。因此,可以传输运动矢量和由此产生的误差,而不是原始亮度块;从而消除了帧间冗余并实现了数据压缩。在接收端,解码器根据接收到的数据构建帧差异信号,并将其添加到重建的参考帧中。求和给出了当前帧的精确副本。预测越好,误差信号就越小,因此传输比特率也就越小。

音视频编解码-H264和H265 运动估计对比

H264和H265对比

音视频编解码-H264和H265 运动估计对比

H264 MVP介绍

帧间预测根据一个或多个先前编码的视频帧创建预测模型。该模型是通过移动参考帧中的样本而形成的(运动补偿预测)。AVC 编解码器使用基于块的运动补偿,这与自 H.261 以来的每个主要编码标准所采用的原理相同。与早期标准的重要区别包括支持一系列块大小(低至 4×4)和精细子像素运动矢量(亮度分量中的 1/4 像素)。

AVC 支持运动补偿块大小,范围从 16×16 到 4×4 亮度样本,两者之间有许多选项。每个宏块(16×16 样本)的亮度分量可以按 4 种方式分割:16×16、16×8、8×16 或 8×8。每个细分区域是一个宏块分区。如果选择 8×8 模式,则宏块内的四个 8×8 宏块分区中的每一个都可以以另外 4 种方式进行划分:8×8、8×4、4×8 或 4×4(称为宏块子分区)。这些分区和子分区在每个宏块内产生大量可能的组合。这种将宏块分割成不同大小的运动补偿子块的方法被称为树结构运动补偿。

每个分区或子分区需要单独的运动向量。每个运动矢量必须被编码和传输;此外,分区的选择必须编码在压缩比特流中。选择大的分区大小(例如16×16、16×8、8×16)意味着需要少量的比特来用信号通知运动矢量的选择和分区的类型;然而,运动补偿残差可能在具有高细节的帧区域中包含大量能量。选择较小的分区大小(例如8×4、4×4等)可以在运动补偿之后给出较低能量的残差,但是需要更多的比特来用信号通知运动矢量和分区的选择。因此,分区大小的选择对压缩性能有重大影响。一般来说,宏块中每个色度分量(Cr 和 Cb)的分辨率是亮度(luma)分量分辨率的一半。每个色度块的分区方式与亮度分量相同,只是分区大小正好是水平和垂直分辨率的一半(亮度中的 8×16 分区对应于色度中的 4×8 分区;亮度中的 8×4 分区对应于亮度中的 4×2 分区)。色度;等等)。当应用于色度块时,每个运动矢量(每个分区一个)的水平和垂直分量减半。

为了更好地适应运动细节,H.264 采用基于树的分解将宏块 (MB) 划分为指定大小的较小子块。例如,一个大小为 16·16 的 MB 可以保持原样,分解为两个大小为 8·16 或 16·6 的矩形块,或者分解为四个大小为 8·8 的正方形块。如果最后一种情况是 如果选择了多个8·8块(即四个8·8块),则四个8·8块中的每一个都可以进一步分割以产生更多子宏块。再次有四种选择,即8·8、8·4、4·8和4·4。这些划分导致每个MB有大量可能的块分解。 下图显示了具有树分解的 MB 示例。

音视频编解码-H264和H265 运动估计对比

如果MB被划分,MB内的每个子宏块都需要一个单独的运动向量。例如,如果使用Inter-8·8对MB进行编码,并且使用Inter-4·4对每个8·8子宏块进行编码,则将针对该MB传送16个运动向量。所有运动矢量以及分区信息都应该被编码和传输。一般来说,具有较大块大小的分区需要较少的比特来表示相关联的运动矢量和分区类型,但如果编码区域包含高运动细节,则可能需要更多的比特来对运动补偿残差进行编码。相反,较小块大小的分区在运动补偿之后可以给出较小的残差,但需要更多比特来表示运动向量和分区类型。因此,最佳的树结构运动补偿是找到分区块大小的最佳组合,以最小化每个宏块的最终编码比特。

H265 AMVP介绍

HEVC采用两种类型的运动信息编码。一种是 AMVP 模式,将运动矢量差传输到解码器,另一种是合并模式,不将运动矢量差传输到解码器。下面更详细地解释这些模式。

AMVP模式对指定参考列表(L0/L1)的预测方向和指定参考图片的参考图片索引进行编码。然后,在从当前块的相邻编码或解码块导出的MVP候选者列表中选择预测运动矢量候选者。接下来,针对每个参考列表对指定MVP候选的MVP索引和作为预测运动向量与当前运动向量之间的差的残差运动向量进行编码。

MVP candidate列表由两个运动向量和参考索引组成,它们按照以下优先顺序从空间候选、时间候选和零候选导出。

1) INTER空间候选(B0、B1、B2、A0、A1)

2) INTER 时间候补 (TB, TC)

3)零候选

音视频编解码-H264和H265 运动估计对比

(1)空间MVP候选是从块组A(A0,A1)和块组B(B0,B1,B2)一一导出的。 块组扫描顺序为 A0 → A1 和 B0 → B1 → B2。添加到 MVP 列表的唯一候选是来自以帧间预测模式编码的候选块对比。首先导出其参考图片与当前块的参考图片相同的候选,并且如果候选块的参考图片与当前块的参考图片不同,则缩放运动矢量以匹配图片距离。 仅当缩放后的候选者是第一次添加到 MVP 列表时,它才会添加到 MVP 列表。如果在每个块组中导出相同的运动向量,则排除候选者。 

音视频编解码-H264和H265 运动估计对比

(2)如果 MVP 列表仍然包含少于两个候选者,则导出时间 MVP 候选者。时间 MVP 从Slice头指定的同位帧中扫描;它的扫描顺序是TB→TC,其中位于图片或帧内预测模式之外的候选被排除。运动矢量也被缩放以匹配图像距离。 

(3)最后,如果 MVP 列表还有空间,则添加零向量 (0, 0)。

关于AMVP的一篇介绍,可以参考如下链接,https://blog.csdn.net/BigDream123/article/details/119742552

MVP和AMVP对比

H.264 的 MVP 预测和 H.265 的 AMVP 预测之间的主要区别在于 AMVP 使用更复杂的运动估计算法。AMVP还支持多个参考图片,而MVP仅支持单个参考图片。

MVP 代表运动矢量预测,是 H.264 中使用的一种运动估计算法,用于预测前一帧中像素块的运动。MVP 使用一种基于周围块运动矢量平均值的简单算法。MVP(运动矢量预测)是根据已经编码和解码的相邻块的MV(运动矢量)来预测当前块的MV。它提供了两个MV候选列表,其中一个基于当前块左边的MV,另一个基于当前块上边的MV。选择最佳的MV作为预测结果。

AMVP 代表自适应运动矢量预测,是 H.265 中使用的运动估计算法。AMVP 使用更复杂的算法,该算法考虑了运动矢量的空间和时间依赖性。AMVP(先进的运动矢量预测)使用了更多的MV候选预测值,包括基于当前块左边的MV的预测、基于当前块上边的MV的预测、基于相邻块的MV的预测以及基于运动矢量场(MV Field)的预测。通过使用更多的预测候选值,AMVP可以提供更准确的运动估计,从而减少预测残差,提高编码效率。

下表总结了 MVP 和 AMVP 之间的主要区别:

特性MVPAMVP
运动估计算法简单复杂
参考帧数量1多帧
性能更好
复杂度

至此相关内容完成对比,当前仅仅做了简单描述,更多信息仍然需要仔细研读标准,以及相关论文,甚至需要看看X264和X265,或者HM,VTM的核心代码,完成相关部分的深度理解。

参考文献:

https://www.cmlab.csie.ntu.edu.tw/cml/dsp/training/coding/motion/me1.html
https://blog.csdn.net/zhoutaopower/article/details/127342600
https://www.cnblogs.com/TaigaCon/p/3773747.html
https://regenttsui.github.io/%E5%B8%A7%E9%97%B4%E9%A2%84%E6%B5%8B.html
https://zhuanlan.zhihu.com/p/568330537

作者信息:我是一枚爱跑步的程序猿,维护公众号和知乎专栏《MediaStack》,有兴趣可以关注,一起学习音视频知识,时不时分享实战经验。

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

  • RTP之H264封包和解包

    1. RTP数据包格式 RTP报文头格式(见RFC3550 Page12): 1) V:RTP协议的版本号,占2位,当前协议版本号为2 2) P:填充标志,占1位,如果P=1,则在…

    2023年2月2日
  • H264码率控制模式(CBR、VBR和AVBR控制模式)

    什么是码率控制?码率控制是指通过调节图像的压缩比例,从而决定输出编码码率的过程。在音视频领域,码率控制模式有着举足轻重的地位。 H264码率控制模式 H264码率控制模式分别有:C…

    2023年2月17日
  • 实现一个h264编码器前期准备

    前言: H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称,在编码方面,我理解的他的理论依据是:参照一段时间内图像的统计结果表明,在相邻几幅图像画面中,一般有…

    2023年10月22日
  • H264 over RTP 的打包!

    一、打包流程: 从H264编码器读出一帧数据(一个完整的H264帧) 然后遍历H264的所有NALU:如果NALU长度小于MTU,则将该NALU打包为一个RTP包;否则,将NALU…

    2023年4月1日
  • x264 如何提升 1‰ 的转码性能

    在8K视频编解码特别是解码部分,我做了一些优化工作,转码速度提升了50%以上。专家们评价曰:“主要围绕算法并行度的优化,属于算法性能优化的常规手段,在创新性和技术难度方面的体现较为…

    2024年3月22日
  • H.264 码流结构和编解码过程

    了解 H.264 的码流结构,以及这样设计的原因,编解码的过程就有了具体的依托。实际上 H.264 规范也是先规定了码流结构,再规定解码器的结构(对于编码器的结构和实现模式没有具体…

    2023年4月10日

发表回复

登录后才能评论