欢迎光临小豌豆知识网!
当前位置:首页 > 生活技术 > 其他技术> 一种基于光流法的视频插帧方法及系统独创技术38979字

一种基于光流法的视频插帧方法及系统

2023-02-27 14:12:43

一种基于光流法的视频插帧方法及系统

  技术领域

  本发明涉及视频处理及传输领域,具体涉及一种基于光流法的视频插帧方法及系统。

  背景技术

  随着高清数字电视和高端多媒体信息系统的发展,现有的视频信号节目源已经不能满足人们对于视觉效果的需求,因此需要提高现有视频节目源的帧率以达到更好的视觉效果;与此同时,尽管目前视频传输中的编解码技术已经可以获得很高的压缩比,然而为了适应一些网络带宽有限的应用,通常将视频信号的时空分辨率降低使数据量更少,在时域中可以通过编码端跳帧来实现。这样,在解码端的低帧率视频必然会引起运动不连续、图像质量的退化,尤其是在快速运动和复杂场景中更为明显。为此,可以在解码端采用视频插帧,即帧率上转换(FRUC,FrameRateUp-conversion)技术来恢复原来帧率以提高视频图像的主观视觉效果。此外,该技术也可用于不同帧率视频格式之间的转换。通过在相邻帧之间插入中间帧的方式,将低帧率的视频提升至高帧率,实现不同帧率之间的转换。

  目前主流的帧率上转换通常采用的方法是基于块匹配的运动补偿内插。但是块匹配算法存在一个根本的缺陷,在物体边缘处会将不属于同一个物体的区域划分到同一个块并赋予相同的运动矢量,这样就会导致内插帧存在块效应问题。此外,由“遮挡”和“暴露”引起的“冲突”和“洞点”问题,也是目前主流方法所不能解决的。

  有效降低块效应问题和解决“遮挡”与“暴露”问题的方法一直是本领域的研究重点。

  发明内容

  一种基于光流法的视频插帧方法,包括如下步骤:

  运动矢量计算过程:对输入视频的帧序列,采用光流法计算得到相邻两帧之间的运动矢量;相邻两帧包括前向参考帧和后向参考帧;

  内插帧映射过程:根据相邻两帧之间的运动矢量场,在相邻两帧之间映射得到内插帧。

  基于光流法的视频插帧方法还可以是以下步骤:

  运动矢量计算过程为:对输入视频的帧序列,采用光流法计算得到相邻两帧之间的双向运动矢量;

  运动矢量计算过程之后还包括可靠性判断处理过程:对相邻两帧之间的双向运动矢量进行可靠性判断,根据可靠性判断的结果对相邻两帧中的闭塞区域进行标记,并更新闭塞区域的不可靠运动矢量;

  内插帧映射过程为:根据闭塞区域的标记信息以及更新后所得的运动矢量场,将前向参考帧向内插帧映射得到前向内插帧,将后向参考帧向内插帧映射得到后向内插帧;将前向内插帧和后向内插帧合成成内插帧。

  判断前向运动矢量与后向运动矢量可靠性的方法是相同的,下面仅以判断前向运动矢量可靠性为例来说明运动矢量可靠性的判别方法。取后向参考帧的某一像素为当前像素,当前像素从后向参考帧指向前向参考帧的运动矢量为当前像素的前向运动矢量;当前像素的前向运动矢量指向前向参考帧的像素为前向参考像素,前向参考像素从前向参考帧指向后向参考帧的运动矢量为前向参考像素的后向运动矢量。

  对相邻两帧之间的双向运动矢量进行可靠性判断的具体方式为:计算当前像素在后向参考帧中的灰度值与前向参考像素在前向参考帧中的灰度值的差值,若该灰度值的差值大于等于灰度值差值的阈值,则判断当前像素的前向运动矢量是不可靠的;否则,若该灰度值的差值小于灰度值差值的阈值,则进一步计算当期像素的前向运动矢量和前向参考像素的后向运动矢量间的距离,若当期像素的前向运动矢量和前向参考像素的后向运动矢量间的距离小于运动矢量阈值距离,则判断当前像素的前向运动矢量是可靠的;否则,若当期像素的前向运动矢量和前向参考像素的后向运动矢量间的距离大于等于运动矢量阈值距离,判断当前像素的前向运动矢量是不可靠的。

  更新不可靠运动矢量的方式为:用某像素的双向运动矢量中的可靠运动矢量取反值来替换不可靠的运动矢量。

  将前向参考帧向内插帧映射得到前向内插帧,将后向参考帧向内插帧映射得到后向内插帧包括:

  对于前向参考帧或后向参考帧中的某一像素,判断该像素的运动矢量是否可靠;

  若该像素的运动矢量可靠,则进一步判断该像素是否发生“冲突”;

  若该像素的运动矢量不可靠,则判断该像素是否属于“遮挡”和/或“暴露”区域;若属于,则进一步判断该像素是否发生“冲突”;若不属于,则丢弃该像素;

  若判断该像素是否发生“冲突”的结果为否,则对该像素进行映射;

  若判断该像素是否发生“冲突”的结果为是,则判断该像素的运动矢量是否比与其发生“冲突”的已经被映射的像素更可靠,若是,则对该像素进行映射;若否,则丢弃该像素。

  可靠性判断处理过程还包括对光流法引起的锯齿问题和/或噪声问题进行处理,处理方式为:对相邻帧之间的双向运动矢量进行基于图像分割的平滑滤波处理。

  内插帧映射过程之后还包括内插帧修补过程:对内插帧中的洞点进行修补,得到最终的内插帧。

  可靠性判断处理过程还包括对光流法的锯齿问题和/或噪声问题进行处理,处理方式为:对相邻两帧进行空域上采样;或者,对相邻两帧进行空域上采样,对经过空域上采样后的相邻两帧之间的双向运动矢量进行基于图像分割的平滑滤波处理;或者,对相邻两帧之间的双向运动矢量进行基于图像分割的平滑滤波处理,对经过平滑滤波处理后的相邻两帧进行空域上采样。内插帧修补过程为:对内插帧中的洞点进行修补,对经过洞点修补后的内插帧进行下采样,得到最终的内插帧。

  对相邻两帧进行空域上采样包括:将相邻两帧中的每一帧图像的像素数量按照预定倍数扩大,并将双向运动矢量的值按照预定倍数扩大。对内插帧进行下采样的方式为:将内插帧图像的像素数量按照预定倍数缩减,并将双向运动矢量的值按照预定倍数缩减。

  对内插帧中的洞点进行修补包括:对于内插帧中的某一洞点,分析与该洞点像素相邻的预设范围的非洞点像素的运动矢量,取得这些非洞点像素的运动矢量中最合适的运动矢量,用该最合适的运动矢量来作为映射洞点像素的运动矢量,从而进行空洞区域插值。

  一种基于光流法的视频插帧系统,包括运动矢量计算单元、内插帧映射单元。

  运动矢量计算单元用于对输入视频的帧序列,采用光流法计算得到相邻两帧之间的运动矢量;相邻两帧包括前向参考帧和后向参考帧。内插帧映射单元用于根据相邻两帧之间的运动矢量场,在相邻两帧之间映射得到内插帧。

  运动矢量计算单元用于对输入视频的帧序列,采用光流法计算得到相邻两帧之间的双向运动矢量。系统还包括可靠性判断处理单元,用于对相邻两帧之间的双向运动矢量进行可靠性判断,根据可靠性判断的结果对相邻两帧中的闭塞区域进行标记,对更新闭塞区域的不可靠运动矢量或者更新所有不可靠运动矢量。内插帧映射单元根据闭塞区域的标记信息以及更新后所得的运动矢量场,将前向参考帧向内插帧映射得到前向内插帧,将后向参考帧向内插帧映射得到后向内插帧;将前向内插帧和后向内插帧合成成内插帧。

  取后向参考帧的某一像素为当前像素,当前像素从后向参考帧指向前向参考帧的运动矢量为当前像素的前向运动矢量;当前像素的前向运动矢量指向前向参考帧的像素为前向参考像素,前向参考像素从前向参考帧指向后向参考帧的运动矢量为前向参考像素的后向运动矢量。

  可靠性判断处理单元对相邻两帧之间的双向运动矢量进行可靠性判断的具体方式为:计算当前像素在后向参考帧中的灰度值与前向参考像素在前向参考帧中的灰度值的差值,若该灰度值的差值小于等于灰度值差值的阈值,则判断当前像素的前向运动矢量和前向参考像素的后向运动矢量是可靠的,否则判断当前像素的前向运动矢量和前向参考像素的后向运动矢量是不可靠的;和/或,计算当期像素的前向运动矢量和前向参考像素的后向运动矢量间的距离,若当期像素的前向运动矢量和前向参考像素的后向运动矢量间的距离小于运动矢量阈值距离,则判断当前像素的前向运动矢量和前向参考像素的后向运动矢量是可靠的,否则判断当前像素的前向运动矢量和前向参考像素的后向运动矢量是不可靠的。

  内插帧映射单元将前向参考帧向内插帧映射得到前向内插帧,将后向参考帧向内插帧映射得到后向内插帧的方式为:

  对于前向参考帧或后向参考帧中的某一像素,判断该像素的运动矢量是否可靠;

  若该像素的运动矢量可靠,则进一步判断该像素是否发生“冲突”;

  若该像素的运动矢量不可靠,则判断该像素是否属于“遮挡”和/或“暴露”区域;若属于,则进一步判断该像素是否发生“冲突”;若不属于,则丢弃该像素;

  若判断该像素是否发生“冲突”的结果为否,则对该像素进行映射;

  若判断该像素是否发生“冲突”的结果为是,则判断该像素的运动矢量是否比与其发生“冲突”的已经被映射的像素更可靠,若是,则对该像素进行映射;若否,则丢弃该像素。

  可靠性判断处理单元还用于对光流法的锯齿问题和/或噪声问题进行处理,处理方式为:对相邻两帧之间的双向运动矢量进行基于图像分割的平滑滤波处理;或者,对相邻两帧进行空域上采样;或者,对相邻两帧进行空域上采样,对经过空域上采样后的相邻两帧之间的双向运动矢量进行基于图像分割的平滑滤波处理;或者,对相邻两帧之间的双向运动矢量进行基于图像分割的平滑滤波处理,对经过平滑滤波处理后的相邻两帧进行空域上采样。系统还包括内插帧修补单元,用于对内插帧中的洞点进行修补,对经过洞点修补后的内插帧进行下采样,得到最终的内插帧。

  可靠性判断处理单元对相邻两帧进行空域上采样的方式为:将相邻两帧中的每一帧图像的像素数量按照预定倍数扩大,并将双向运动矢量的值按照预定倍数扩大。内插帧修补单元对内插帧进行下采样的方式为:将内插帧图像的像素数量按照预定倍数缩减,并将双向运动矢量的值按照预定倍数缩减。

  内插帧修补单元对内插帧中的洞点进行修补的方式为:对于内插帧中的某一洞点,分析与该洞点像素相邻的预设范围的非洞点像素的运动矢量,取得这些非洞点像素的运动矢量中最合适的运动矢量,用该最合适的运动矢量来作为映射洞点像素的运动矢量,从而进行空洞区域插值。

  现有的帧率上转换通常采用基于块匹配的运动补偿内插,其基于的是块,因此存在块效应以及不精确等问题;本发明的帧率上转换采用光流法计算得到相邻两帧之间的双向运动矢量,其基于的是像素,因此更加精确,不存在块效应等问题。

  附图说明

  图1为实施例1的基于稠密光流的视频插帧方法的流程示意图;

  图2为空域上采样原理示意图;

  图3为物体的运动矢量是否可靠的一种情况的示意图;

  图4为物体的运动矢量是否可靠的另一种情况的示意图;

  图5为连续三帧中物体的运动矢量是否可靠的一种情况的示意图;

  图6为参考帧向内插帧映射得到前向或后向内插帧的流程示意图。

  具体实施方式

  光流法分为稀疏光流和稠密光流两大类。“稠密”是指一帧中每个像素都有一个运动矢量;而稀疏光流只有部分像素有运动矢量。本发明的实施例进行视频插帧优选地使用稠密光流,以便使每个像素都有运动矢量。使用稠密光流获得基于像素级的运动矢量进行插帧可以解决现有技术存在的块效应问题,且光流法估计出的运动矢量更加精确。

  实施例1:

  结合图1所示,本实施例的基于稠密光流的视频插帧方法包括如下步骤:

  S1、对输入的视频的帧序列,采用光流法估计出相邻两帧之间的双向运动矢量。

  为便于说明,以帧序列中的第t-1帧、第t帧、第t+1帧为例,第t帧为后向参考帧,第t+1帧为前向参考帧,本实施例以第t帧为主视角进行说明,其中,t为大于1的整数。对于第t帧中的某一像素,其方向指向第t-1帧的运动矢量为该像素的后向运动矢量,其指向第t+1帧的运动矢量为该像素的前向运动矢量。这样,众多的像素都具备对应的双向运动矢量,视频帧序列之间的运动矢量即构成运动矢量场,所谓双向运动矢量即指从前向参考帧到后向参考帧的前向运动矢量,以及从后向参考帧到前向参考帧的后向运动矢量。

  S2、判断双向运动矢量是否可靠。

  本实施例使用前后向参考帧(即相邻两帧)对应像素的灰度值的差值(用AD表示)以及运动矢量间的距离(用MVD表示)来判断运动矢量是否可靠。

  具体地,以图2为例,第t帧302的某一像素为当前像素,当前像素从第t帧302指向第t+1帧303的运动矢量为当前像素的前向运动矢量323。当前像素的前向运动矢量323指向第t+1帧303的像素为前向参考像素,前向参考像素从第t+1帧303指向第t帧302的运动矢量为前向参考像素的后向运动矢量332。

  当前像素从第t帧302指向第t-1帧301的运动矢量为当前像素的后向运动矢量321。当前像素的后向运动矢量321指向第t-1帧301的像素为第t-1帧参考像素,第t-1帧参考像素从第t-1帧301指向第t帧302的运动矢量为第t-1帧参考像素的前向运动矢量312。

  对于第t帧302中的当前像素的前向运动矢量323,如果当前像素满足其与前向参考像素的灰度值差值小于灰度值差值阈值Th_AD,且当前像素的前向运动矢量323与前向参考像素的后向运动矢量332间的距离小于运动矢量阈值距离Th_MVD,则当前像素的前向运动矢量323是可靠的,否则不可靠。本实施例的Th_AD设置为20,Th_MVD设置为3。

  当前像素在后向参考帧303中的灰度值与前向参考像素在前向参考帧302中的灰度值的差值计算公式如下,

  ADt(x)=|Ft(x)-Ft+1(x+Vx)|(1.1)

  其中,ADt(x)为当前像素的灰度值与前向参考像素的灰度值的差值,Ft(x)为当前像素在后向参考帧302中的灰度值,Ft+1(x+Vx)为前向参考像素在前向参考帧303中的灰度值,Vx为当前像素从后向参考帧302到前向参考帧303的前向运动矢量323,x为当前像素在后向参考帧302中的位置,x+Vx为前向参考像素在前向参考帧中的位置,t为后向参考帧302的序号,t+1为前向参考帧303的序号。

  当前像素的前向运动矢量和前向参考像素的后向运动矢量之间的距离的计算公式如下,

   MVDt(x)=||Vt,xf-Vt+1,xb||---(1.2)

  其中,MVDt(x)为当前像素的前向运动矢量323和前向参考像素的后向运动矢量332间的距离,为当前像素的前向运动矢量,为前向参考像素的后向运动矢量,x为当前像素在后向参考帧302中的位置,x’为前向参考像素在前向参考帧303中的位置,||·||代表欧几里得距离。

  帧的前后关系是相对的,本实施例以帧在视频序列出现的时间先后顺序来指示帧的前后关系。

  x与x’的关系如下式,

   x+Vt,xf=x---(1.3)

  对于第t帧302中的当前像素的后向运动矢量321,是计算其灰度值与第t-1帧参考像素的灰度值的差值,以及其与第t-1帧参考像素的前向运动矢量312间的距离来判断可靠性,在原理上与上述论述相同,故不作赘述。

  S3、对帧序列中的每一帧进行空域上采样,使得空域上采样后得到的帧的尺寸在水平方向和竖直方向均扩大一倍,使得由S1得到的运动矢量的值扩大一倍。

  如图3所示,对于某一帧001,以其中包含像素11、像素12、像素21、像素22为例,对帧进行空域上采样即将帧中的像素数量扩大一倍,从而帧在水平方向和竖直方向的尺寸扩大一倍,这里的水平及竖直以图3为基准。具体实现上,在该帧中的每一个像素周围增加一圈像素从而得到空域上采样后的帧002,帧001的像素22仍然是帧002中的像素22,而帧002中的像素22在其周围多了一圈及8个像素,对于帧001的像素11、像素12、像素21,像素11下方增加的像素与像素21上方增加的像素是同一个,像素11右方增加的像素和像素12左方增加的像素也是同一个,通过这种方式使得帧001的像素在整体上扩大一倍从而得到帧002。

  对空域上采样之前各帧之间的运动矢量在数值上均扩大一倍,在表现形式上即各运动矢量在长度上变为原来的两倍,运动矢量的方向不改变。

  本领域技术人员还可以采取其他的方式来扩大帧的尺寸或扩大像素的数量,扩大的幅度可以是一倍或几倍。

  之所以要对视频序列以及运动矢量场进行空域上采样的处理,是因为使用光流法计算出的运动矢量都是浮点数。在后续的插值阶段,需要将这些浮点型的运动矢量四舍五入成整数,这样合成的内插帧会存在锯齿问题。为了消除直接使用光流法获得的浮点型运动矢量进行插帧产生的锯齿问题,本实施例使用超采样抗锯齿的方法,即空域上采样处理。具体就是将输入的视频序列以及运动矢量场分别在水平方向和垂直方向进行二倍上采样,并将运动矢量乘以二。这样,后续合成的内插帧的尺寸在水平方向和垂直方向也是原始图片的二倍,在最终输出结果时,需要在水平方向和垂直方向进行二倍下采样来恢复到原始尺寸。

  S4、对经过空域上采样后的相邻帧之间的双向运动矢量进行基于图像分割的平滑滤波处理。

  使用光流法获得的像素的运动矢量可能会比较“离散”,属于同一个物体的像素的运动矢量可能会存在不一致的情况。此外,受光照变化、图像噪声、非刚体运动等因素的影响,运动矢量场会存在一些孤立点,从而破坏运动矢量的连续性。使用这些运动矢量不连续的像素进行插值,会使重构的内插帧中存在噪声点。为了更好的保持空间连续性,本实施例使用基于图像分割的平滑滤波方法进行运动矢量后处理。经过图像分割后,属于同一个区域的像素的运动矢量应当更趋向于一致,因此,对于每个像素的运动矢量,使用一定邻域内与该像素属于同一个区域并且运动矢量是可靠的像素的运动矢量来对该像素运动矢量进行平滑处理。图像分割为现有技术,具体公式如下:

   Vc=1NΣjW(Vjαj)---(1.4)

  其中,W是以当前要更新运动矢量的像素(即中心像素)为中心大小为11*11的邻域中的像素索引,T是邻域中与中心像素属于同一分割区域并且运动矢量是可靠的像素的数量,j是邻域中像素的索引,αj的定义如下:

  

  本实施例使用基于图像分割的平滑滤波来平滑运动矢量,其思想在于属于同一物体的区域运动矢量应保持一致,因此图像分割后,对属于同一物体的区域进行运动矢量平滑处理。使用这样的运动矢量进行插帧,能很好的保持空间连续性,解决块效应问题。

  S5、对相邻两帧中的“遮挡”和“暴露”区域进行标记,对不可靠的运动矢量进行更新处理。

  “遮挡”和“暴露”区域的产生是现有技术中本身存在的问题,对其进行标记也是现有技术已经使用的技术手段,故不作赘述。“遮挡”和“暴露”区域又称闭塞区域,闭塞区域的定义为:当某个像素的前向运动矢量和后向运动矢量中一个是可靠的,一个是不可靠的时,则认为不可靠的那个运动矢量属于闭塞区域。

  本实施例采用基于时域的闭塞区域检测方法并对闭塞区域的运动矢量进行标记与更新,使得可以在内插帧中对应的闭塞区域只用前后帧中对应的闭塞区域进行映射,避免出现重影现象。本实施例提出的基于时域的闭塞区域检测方法是依据运动矢量的可靠性进行的,具体阐述如下。

  闭塞区域检测的前提是假设相邻帧之间物体的运动是连续的,物体在帧与帧之间的运动速度与方向基本一致。当物体在之前帧中存在,但运动到当前帧中突然消失;或者物体在之前帧中不存在,运动到当前帧中突然出现,那么这些区域就属于闭塞区域。而根据前提假设,物体在帧与帧之间的运动是连续的,对于物体运动到当前帧中突然消失的情况,如图2所示,在上一帧302中该物体的前向运动矢量323必然是不可靠的(因为当前帧303中物体不存在),但是上一帧302中该物体的后向运动矢量321是可靠的(因为物体在上上一帧301中是存在的)。图3中只是示例性地给出了部分像素,其中每一个小方格代表一个像素,黑色方格代表所讨论的物体所包含的一个像素,或者代表一个物体。同理,对于运动到当前帧中突然出现的物体,如图4所示,当前帧402该物体的后向运动矢量421是不可靠的(因为在上一帧401中该物体没有出现),但是当前帧402中该物体的前向运动矢量423是可靠的(因为该物体在下一帧403会继续出现)。

  根据上述分析可知,对于属于闭塞区域的物体,总是只有一个方向的运动矢量是可靠的,而另一个方向的运动矢量是不可靠的。因此,本实施例检测闭塞区域的方法是:当一帧中某个像素只有一个方向的运动矢量是可靠的,那么就将另一个方向的运动矢量进行标记,进行标记则表示该物体在不可靠运动矢量的方向属于闭塞区域。同时,根据物体在帧与帧之间的运动速度与方向基本一致的假设,使用可靠方向的运动矢量来更新不可靠方向的运动矢量,即用方向可靠的运动矢量的反向运动矢量来替换方向不可靠的运动矢量。

  例如图5所示是连续的三帧图片,图中的圆圈501与方块502代表两个物体,其在连续三帧内的运动速度与方向基本是一致的。第t-1帧(即Ft-1)中的像素P1运动到第t帧(即Ft)中,则此过程像素P1不属于闭塞区域,故像素P1从第t-1帧到第t帧中的运动矢量512是可靠的;以从第t帧到第t-1的视角来看,像素P1的运动矢量521也是可靠的,且运动矢量512和运动矢量521大小相等、方向相反。而像素P1由第t帧运动到第t+1帧(即Ft+1)中时,由于像素P1被方块遮挡,则此过程像素P1属于闭塞区域,因此可以判定出第t帧与第t+1帧中P1的运动矢量523是不可靠的;图中第t帧的像素P1即错误地指向了第t+1帧中的像素P2。因此,对于第t帧中的像素P1,其后向运动矢量521是可靠的而前向运动矢量523是不可靠的。因而标记出第t帧中像素P1的前向运动矢量523方向为闭塞区域,并使用第t帧中像素P1的后向运动矢量521取反值后来更新P1的前向运动矢量523。

  S6、对于相邻两帧,根据“遮挡”和“暴露”区域的标记信息以及更新处理后所得的双向运动矢量场,将第t帧向内插帧映射得到前向内插帧,将第t+1帧向内插帧映射得到后向内插帧。

  以第t帧、第t+1帧为例,将第t帧向内插帧映射得到前向内插帧,将第t+1帧向内插帧映射得到后向内插帧。

  结合图6所示,将第t帧向内插帧映射得到前向内插帧的详细步骤如下(将第t+1帧向内插帧映射得到后向内插帧也遵循以下步骤):

  S601、输入当前帧及其运动矢量。

  S602、选择需要映射的像素。

  S603、判断该像素的运动矢量是否可靠。

  若该像素的运动矢量可靠,则进入S604判断该像素是否发生“冲突”;

  若该像素的运动矢量不可靠,则判断该像素是否属于“遮挡”和“暴露”区域,即判断该像素是否被标记;若属于,则进入S604判断该像素是否发生“冲突”;若不属于,则丢弃该像素;

  若S604判断该像素是否发生“冲突”的结果为否,则进入S605对该像素进行映射;

  若S604判断该像素是否发生“冲突”的结果为是,则判断该像素的运动矢量是否比与其发生“冲突”的已经被映射的像素更可靠(“冲突”表示:在该像素之前,已经有别的像素在该像素的位置被映射了),若是,则进入S605对该像素进行映射;若否,则丢弃该像素。

  在S605对该像素进行映射后,在S606中判断该像素是否为最后一个需要映射的像素,如果是,则执行S7;如果否,则继续S602选择没有被映射的像素。

  S607、对一帧图像的所有像素都完成上述映射操作后,即可生成第t帧的前向内插帧。当利用上述步骤将第t+1帧向内插帧映射,则得到的为第t+1帧的后向内插帧。将第t帧向内插帧映射得到前向内插帧和将第t+1帧向内插帧映射得到后向内插帧还可以同时用上述步骤完成。

  S7、将第t帧的前向内插帧和第t+1帧的后向内插帧合成成内插帧。这样,原帧序列的帧两两之间就会增加一个内插帧。将两帧合为一帧的方法可以采用现有技术,故不作赘述。

  S8、用差值算法对内插帧中的洞点进行修补。

  分为两个过程,首先使用相邻非洞点的运动矢量来进行空洞区域插值,然后对于最终剩下的洞点使用线性插值的方法处理。

  对于“使用相邻非洞点的运动矢量来进行空洞区域插值”的含义,具体地,内插帧中每个非洞点均对应着一个前向运动矢量,或者一个后向运动矢量,或者双向运动矢量。对于内插帧中的洞点像素P,找到该洞点像素上下左右四个方向最邻近的非洞点像素。从它最邻近的非洞点像素所对应的运动矢量中选择一个最合适的运动矢量,来作为映射该洞点像素的运动矢量。以下详细分析如何选择最合适的非洞点像素以及最合适的运动矢量。

  对于洞点像素P,需要分析其上下左右四个方向最邻近的四个像素,当然,本领域技术人员也可以分析围绕洞点像素P的八个像素,还可以是分析洞点像素P周围的预定范围或预设数量的像素。本实施例为便于说明,只对洞点像素P上下左右四个方向最邻近的四个像素进行分析,如果四个像素也是洞点像素,则可以按照预设的方式继续分析距离洞点像素P预定范围内的像素,既可以是找到合适的非洞点像素为止,也可以是直接放弃对洞点像素P的处理。

  先澄明,第t帧为前向参考帧,第t+1帧为后向参考帧,经过步骤S1至S7的处理后,在第t帧和第t+1帧之间插入了内插帧,则帧序列中帧的数量整体扩大了一倍,为表述的合理,以下以第i帧、第i-1帧、第i+1帧为例进行说明,其中第i帧为内插帧。

  为便于说明,假设第i帧中洞点像素P上方的像素为非洞点像素且其由第i-1帧的某像素的前向运动矢量映射得到,洞点像素P下方的像素为非洞点像素且其由第i+1帧的某像素的后向运动矢量映射得到,洞点像素P左方的像素为非洞点像素且其对应第i-1帧的某像素的前向运动矢量和第i+1帧的某像素的后向运动矢量,即洞点像素P左方的像素由前后向运动矢量共同作用而得到,洞点像素P右方的像素也为洞点像素故不作考虑。这个假设中,洞点像素P上下左右四个方向最邻近的四个像素表达了所有可能出现的情况。

  为了赋予洞点像素P一个最合适的运动矢量,需要对映射洞点像素P上下左右四个方向最邻近的非洞点像素的运动矢量进行分析。对于洞点像素P上方的非洞点像素,由于其由第i-1帧的某像素的前向运动矢量映射得到,故采用公式(1.6)判断对应第i-1帧的某像素的前向运动矢量的灰度值差值Δf(x)。

   Δf(x)=|Fi-1(x-Vi-1f2)-Fi+1(x+Vi-1f2)|---(1.6)

  对于洞点像素P下方的非洞点像素,由于其由第i+1帧的某像素的后向运动矢量映射得到,故采用公式(1.7)判断对应第i+1帧的某像素的后向运动矢量的灰度值差值Δb(x)。

   Δb(x)=|Fi-1(x+Vi+1b2)-Fi+1(x-Vi+1b2)|---(1.7)

  其中,x是洞点像素坐标,是洞点像素P上方的像素所对应的第i-1帧中某像素的前向运动矢量,是洞点像素P下方的像素所对应的第i+1帧中某像素的后向运动矢量。

  对于洞点像素P左方的非洞点像素,由于其由第i-1帧的某像素的前向运动矢量和第i+1帧的某像素的后向运动矢量共同映射得到,故需要同时采用公式(1.6)和(1.7)判断该非洞点像素对应第i-1帧的某像素的前向运动矢量的灰度值差值Δf(x)和对应第i+1帧的某像素的后向运动矢量的灰度值差值Δb(x)。

  洞点像素P右方的洞点像素不作考虑。

  此时比较所得的四个值,即洞点像素P上方的非洞点像素对应第i-1帧的某像素的前向运动矢量的灰度值差值、洞点像素P下方的非洞点像素对应第i+1帧的某像素的后向运动矢量的灰度值差值、洞点像素P左方的非洞点像素对应第i-1帧的某像素的前向运动矢量的灰度值差值、洞点像素P左方的非洞点像素对应第i+1帧的某像素的后向运动矢量的灰度值差值,在这四个值中选择取值最小的值,以对应该取值最小的值的非洞点像素的运动矢量作为映射洞点像素P的运动矢量。

  例如,假设洞点像素P左方的非洞点像素对应第i-1帧的某像素的前向运动矢量的灰度值差值取值最小,则将洞点像素P左方的非洞点像素的对应第i-1帧的某像素的前向运动矢量作为映射洞点像素P的运动矢量。

  如果所有运动矢量的Δ(x)值(即所有求得的Δf(x)和Δb(x))均大于阈值Δ,那么则认为洞点像素P没有合适的运动矢量,不处理洞点像素P。否则,使得Δ(x)值最小的运动矢量即为最合适的运动矢量。

  对于最合适的运动矢量是前向运动矢量的情况,则洞点像素P的灰度值Fi(x)的计算公式为:

   Fi(x)=12[Fi-1(x-Vi-1f2)+Fi+1(x+Vi-1f2)]---(1.8)

  对于最合适的运动矢量是后向运动矢量的情况,则洞点像素P的灰度值Fi(x)的计算公式为:

   Fi(x)=12[Fi-1(x-Vi+1b2)+Fi+1(x+Vi+1b2)]---(1.9)

  本例中假设的是洞点像素P左方的非洞点像素对应第i-1帧的某像素的前向运动矢量为最合适的运动矢量,故洞点像素P的灰度值应按照公式(1.8)来进行计算。

  对于最终剩余的洞点,使用该洞点上下左右四个方向的邻域像素进行线性插值来填补,线性插值算法采用现有技术。

  S9、对经过洞点修补后的内插帧进行下采样,从而得到最终的内插帧。

  由于前述过程中对原始帧进行了上采样从而多出了一倍数量的像素点,在该过程中,进行下采样只需要将多出的像素点都除去即可,从而得到最终的内插帧。

  实施例2:

  直接使用光流法存在锯齿问题和噪声点问题。在实施例1中,S3是解决锯齿问题,S4解决噪声点问题,解决锯齿问题和解决噪声点问题的过程可以有先后顺序,也可以并行进行。本实施例与实施例1的区别在于解决噪声点问题的过程在前,而解决锯齿问题的过程在后。具体步骤如下:

  运动矢量计算过程:

  S1、对输入的视频的帧序列,采用光流法估计出相邻两帧之间的双向运动矢量。

  运动矢量可靠性判断处理过程:

  S2、判断双向运动矢量是否可靠。

  S3、对相邻帧之间的双向运动矢量进行基于图像分割的平滑滤波处理。

  S4、对帧序列中的每一帧进行空域上采样。

  S5、对相邻两帧中的“遮挡”和“暴露”区域进行标记,对不可靠的运动矢量进行更新处理。

  内插帧映射过程:

  S6、对于相邻两帧,根据“遮挡”和“暴露”区域的标记信息以及更新处理后所得的双向运动矢量场,将第t帧和第t+1帧分别向内插帧映射得到前向内插帧和后向内插帧。

  S7、将第t帧的前向内插帧和第t+1帧的后向内插帧合成成内插帧。

  内插帧修补过程:

  S8、用差值算法对内插帧中的洞点进行修补。

  S9、对经过洞点修补后的内插帧进行下采样,从而得到最终的内插帧。

  实施例3:

  在实施例1中,解决锯齿问题和解决噪声点问题与标记“遮挡”、“暴露”区域即对不可靠的运动矢量进行更新处理不存在必然的先后顺序,可以并行处理。本实施例的过程如下。

  S1、对输入的视频的帧序列,采用光流法估计出相邻两帧之间的双向运动矢量。

  S2、判断双向运动矢量是否可靠。

  S3、对相邻两帧中的“遮挡”和“暴露”区域进行标记,对不可靠的运动矢量进行更新处理。

  S4、对相邻帧之间的双向运动矢量进行基于图像分割的平滑滤波处理。

  S5、对帧序列中的每一帧进行空域上采样。

  S6、对于相邻两帧,根据“遮挡”和“暴露”区域的标记信息以及当前的双向运动矢量场,将第t帧和第t+1帧分别向内插帧映射得到前向内插帧和后向内插帧。

  S7、将第t帧的前向内插帧和第t+1帧的后向内插帧合成成内插帧。

  S8、用差值算法对内插帧中的洞点进行修补。

  S9、对经过洞点修补后的内插帧进行下采样,从而得到最终的内插帧。

  实施例4:

  在某些处理环境下,可以不考虑光流法的锯齿问题和/或噪声点问题,因此可以不考虑实施例1中S3和/或S4所对应的过程,如本实施例的下述视频插帧处理过程。

  S1、对输入的视频的帧序列,采用光流法估计出相邻两帧之间的双向运动矢量。S2、判断双向运动矢量是否可靠。

  S3、对相邻两帧中的“遮挡”和“暴露”区域进行标记,对不可靠的运动矢量进行更新处理。

  S4、对于相邻两帧,根据“遮挡”和“暴露”区域的标记信息以及更新处理后所得的双向运动矢量场,将第t帧和第t+1帧分别向内插帧映射得到前向内插帧和后向内插帧。

  S5、将第t帧的前向内插帧和第t+1帧的后向内插帧合成成内插帧。

  S6、用差值算法对内插帧中的洞点进行修补,从而得到最终的内插帧。

  实施例5:

  实施例1中S2判断双向运动矢量是否可靠与S3对帧序列中的每一帧进行空域上采样并不必然存在先后顺序,可以并行处理。本实施例提供的基于光流法的视频插帧系统包括以下单元。

  运动矢量计算单元,用于对输入的视频的帧序列,采用光流法估计出相邻两帧之间的双向运动矢量。

  运动矢量可靠性判断处理单元,用于对帧序列中的每一帧进行空域上采样;

  再判断双向运动矢量是否可靠;

  再对相邻两帧中的“遮挡”和“暴露”区域进行标记,对不可靠的运动矢量进行更新处理。

  内插帧映射单元,用于根据“遮挡”和“暴露”区域的标记信息以及更新处理后所得的双向运动矢量场,将第t帧和第t+1帧分别向内插帧映射得到前向内插帧和后向内插帧。

  再将第t帧的前向内插帧和第t+1帧的后向内插帧合成成内插帧。

  内插帧修补单元,用差值算法对内插帧中的洞点进行修补。

  再对经过洞点修补后的内插帧进行下采样,从而得到最终的内插帧。

  实施例6:

  本实施例的基于光流法的视频插帧方法,包括如下步骤:

  运动矢量计算过程:对输入视频的帧序列,采用光流法计算得到相邻两帧之间的运动矢量;相邻两帧包括前向参考帧和后向参考帧。

  内插帧映射过程:根据相邻两帧之间的运动矢量场,在相邻两帧之间映射得到内插帧,本过程可以采用任意一种现有技术实现。

  以上应用了具体个例对本发明进行阐述,只是用于帮助理解本发明并不用以限制本发明。对于本领域的一般技术人员,依据本发明的思想,可以对上述具体实施方式进行变化。

《一种基于光流法的视频插帧方法及系统.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式(或pdf格式)