针对原算法,这里就不做介绍了,这里重点介绍改进后的运动估计和补偿算法。
所谓帧率提升(Frame Rate Conversion),就是指帧速率的上变换,或者时域速率变换(temporal rate conversion),目的是为了提高输入视频信号的时间分辨率而在帧/场间重构出新的帧/场,进行不同视频标准扫描率之间的相互转换。比如我们想利用帧率为50Hz或者60HZ的电视设备来播放电影节目,就必须把时间分辨率为24HZ的电影节目源提高到电视播放设备的时间分辨率下,所以需要增加一些新帧满足播放设备需求。帧率提升算法的核心是如何插值成新帧,并且插值后的帧率均匀,即每帧图像之间间隔必须相等。
下面将讨论几种常用的帧率提升算法。
图帧率提升算法原理
如图所示,Ft-1,Ft+1,为原始输入帧序列,Ft-为插入帧。设输入视频帧率为F1,输出视频帧率为F2,帧率提升因子为K,则F2=KF1。设前一帧Ft-1中一点A,经过了时间T后运动到后一帧Ft+1的B点,mv是其在时间T内的运动矢量,则P点就是插补帧中的插补点。采用不同的帧率提升算法得到插入帧中P点不同的像素值。
两帧信息不同的结合方式,把时域内插分为静态和运动自适应,运动矢量补偿二类。其中,静态算法与视频内容无关,具有确定的结构和参数,两帧信息之间以固定的方式联系,比如简单的帧复制算法,时空中值算法,时空线性滤波算法等;运动自适应算法是根据待处理得区域是否活动,活动的幅度如何而动态的调整算法结构与其参数,常见的比如系数自适应线性滤波算法,模板自适应中值滤波算法等;根据运动矢量值运动补偿算法将两帧的对应区域精准的联系起来,在时域内合成相应的内插帧。
这里,算法创新点主要在于将单向运动估计和双向运动估计进行有效的结合,从而结合了两种算法的优点,提高了运动算法的性能。
具体的系统结构如下所示:
首先通过单向运动估计的方法快速得到运动向量作为双向运动估计的初始值,然后进行块分解,获得较高精度的估计结果,然后对得到的运动向量计算SDA值,如果SDA值大于预定的门限,那么继续进行块分解,知道SDA值小于门限,然后进行运动补偿,最后输出插帧后的视频。
在看了你提供的所有资料之后,提出上面的算法,即“单向运动估计+多级双向运动估计“结合“自适应双向运动估计”的方法进行运动估计。
四、系统的FPGA设计实现简要说明
对于上述结构的MATLAB仿真,这里就不做介绍了,这里主要简要说明如何在FPGA中进行设计。
由于本系统需要处理的视频帧数据较大,无法直接在FPGA中进行存储,所以需要使用外部存储器进行帧存储,通常使用SDRAM,在FPGA进行地址操作,来读取所要的像素值。
整个FPGA内部的模块划分和上面的结构基本相似,这里主要说明一下如何在FPGA内部实现矩阵数据的高效处理。
通常,一帧图像数据可以用矩阵表示,如下式所示:
那么在FPGA中,一般使用如下的时序进行:
采用这种方式来表示实际中的矩阵数据。
在FPGA中,使用了这种方法之后,其余只要按照现有的理论公式进行设计即可。此外,在FPGA中,对于延迟功能,小规模存储功能,均可利用芯片内部的BRAM资料,从而有效降低SLICE和LUT的占用,加快系统的综合布局布线的速度,提高设计效率。