我需要执行帧间预测'和'运动补偿'一组30帧用于Matlab中的视频处理。我正在使用母女框架。
到目前为止,我所做的是采取第一帧并将其划分为
我知道第一帧和第二帧之后不需要运动估计,重建的帧1用作第二帧的参考,依此类推。对于运动估计,我需要实现全搜索块匹配算法'
问题1 :重建框架是什么意思?我是上面列出的量化和DCT吗?
问题2 :什么是'全搜索块匹配算法'?
答案 0 :(得分:3)
我将假设您指的是视频压缩算法的MPEG联盟(MPEG-1,MPEG-2,H.264等)。让我们一次回答每个问题:
对于单帧,正向变换基本上包括将帧分解为8×8个非重叠块,对每个块进行8×8 DCT变换,量化块,然后我们执行一些更复杂的东西,如作为之字形排序,行程编码等
基本上,您的帧表示为压缩的位序列。帧的重建以相反的顺序进行,因此您几乎可以正确使用它。这包括重建序列和撤消之字形排序,然后对块进行去量化,然后应用IDCT。他们之所以称之为重建"是因为您将帧表示为不同的格式。您正在将帧转换回压缩帧之前的帧。
您可能已经知道的一件事是帧的量化是这种方法有损的原因。这意味着您无法恢复原始框架,但您可以使其尽可能接近原始框架。但是,优点是使用有损算法,您可以获得高压缩率,这意味着视频的大小将更小,并且可以轻松传输。
实际上,如果对一帧进行正向变换,则进行反向变换。如果你逐个像素地比较帧,你会发现存在一些微妙的差异,但还不足以写回家。压缩工作原理背后的参数和设计已经过调整,以便普通人的人类视觉系统能够在后见之明中注意到原始帧和重建帧之间的大部分差异。
那你为什么要有损?之所以如此,是因为MPEG联盟利用视频应该是高度可压缩的并且可传输以支持视频的实际质量。这是因为质量始终是一种主观测量,即使您有可以测量图像质量的数值测量(例如PSNR)。
所以,这个故事的寓意是重建正在撤消为了使视频帧被压缩而进行的正向变换,但它不会完全与原始帧相同,但是足够近以至于一个正常的人不会抱怨。
运动估计背后的基础是我们不希望将每一帧作为完整视频帧进行传输,以减少传输带宽。如果您了解MPEG联盟的视频压缩算法的基础知识,您的视频中有三类编码帧:
I-Frames - 这就是所谓的内部帧。这些帧具有对它们执行的完全压缩算法(DCT,量化等)。我们没有完全由I-Frame组成的视频,因为这会使视频的大小非常大。相反,所做的是I帧被用作参考点,并且在此点之后发送差异帧,其中对于I帧中的每个块,运动向量强>传播。更多内容。
P帧 - 我们不是发送另一个I帧,而是发送预测帧或P帧。对于来自参考I帧的每个块,P帧基本上告诉我们块最佳移动从一帧到下一帧。这些是所谓的每个块的运动矢量。这背后的基本原理是视频通常以如此高的帧速率捕获,连续的视频帧表现出非常小的差异,因此大多数块应保持相同或移动很少。你将会看到视频中场景发生剧烈变化的点,或者即使在高帧速率下仍然存在很多的高动作,你就无法充分捕获所有只有P帧的运动。当您观看MPEG视频并且有很多高动作时,这种情况很常见 - 您会看到很多"阻塞",并且这种情况解释了这种阻塞。因此,您需要将另一个I-Frame编码为快速复习,然后从这一点继续。因此,大多数视频文件都有编码的帧,你有一个I帧,然后有一堆P帧,然后有另一个I帧,后跟一堆P帧等等。
B帧 - 这些是所谓的双向预测帧。这些帧使用来自前方的帧(或帧)和来自后方的帧(或帧)的信息。这些确切的工作如何超出了这篇文章的范围,但我想简单地讨论一下这是自成一体的。
因此,编码的一个可能的帧序列遵循以下格式:
IPPPBPPPIPPPBPPPI...
但是,这一切都取决于编码器的设置方式,但我们会把它放在一边。
你可能会问这一切有用吗?原因是因为你的全搜索块匹配算法的问题完全与P帧的构造方式有关。对于I帧中的给定块,该块在下一帧中移动到的最佳位置?为此,我们实际看一下下一帧中的块,并找出与I帧中的块最相似的块。你可能会问自己这个问题: Woah ....还有很多块要搜索吗?,答案是肯定的。全搜索块匹配算法基本上搜索整个帧以获得最佳匹配块。这是计算密集型的,因此大多数编码器实际上将搜索限制在块的位置周围的中等大小的有限窗口。全搜索块匹配会给你最好的结果,但需要太长时间,绝对不值得。我们可以利用这样一个事实,即大多数模块都没有真正移动到那么远,因为我们假设视频是以如此高的帧速率捕获的。
我希望这已经回答了你的问题!