H.264或一般的视频编码器如何计算两帧之间的残差图像?

6
我一直在尝试理解现代编码器(特别是H264)如何工作,特别是视频编码的过程。文档中经常提到,残差帧是从当前p帧和上一个i帧之间的差异中创建的(假设以下帧不用于预测)。我知道使用了YUV颜色空间(可能是YV12),并且一幅图像被“减去”另一幅图像,然后形成残差。但我不明白这种减法是如何进行的。我认为它不是差异的绝对值,因为那会有歧义。请问每个像素的公式是什么?
1个回答

6
减法只是视频编码中的一小步骤;大多数现代视频编码背后的核心原理是运动估计,然后是运动补偿。基本上,运动估计的过程会生成向量,显示连续帧之间宏块之间的偏移量。然而,这些向量总是存在一定误差。
因此,编码器将同时输出向量偏移和“残差”。残差并不是简单地两个帧之间的差异;它是考虑了运动估计之后两个帧之间的差异。在补偿方面,可以参考维基百科文章中的“运动补偿差”图像,清楚地说明了这一点--请注意,运动补偿差远远小于“愚蠢”的残差。 这里有一份不错的PDF文件,介绍了一些基础知识。 还有几点需要注意:
  • 是的,YUV总是被使用,并且通常大多数编码器都使用YV12或其他色度抽样格式。
  • 减法运算必须分别在Y、U和V帧上进行(将它们视为三个独立的通道,所有这些通道都需要被编码--然后就很清楚减法运算应该如何进行了)。运动估计可能会在Y、U和V平面上发生;有时编码器只对Y(亮度)值进行运动估计,以节省一些CPU而牺牲一些质量。

是的,我知道运动补偿会发生,但我不知道如何从i帧中减去运动补偿帧。如果我理解正确,这意味着它是通过以下方式完成的:Y残差= Yi-Yi-1,Cb残差= Cbi-Cbi-1,Cr残差= Cri-Cri-1。是这样吗? - cloudraven
4
PDF文件已经丢失,出现了404错误。 - Stan James
PDF的新链接:PDF链接 - rxjsisfine
新链接:http://web.engr.oregonstate.edu/~benl/Teaching/ece477.sp21/Lectures/4.Video_Compression.pdf - wuhy08
父文件夹已更改。有人有这份pdf的副本吗? - murage kibicho
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接