发明内容
本发明的目的是:针对现有技术的不足,提供一种结构简单合理、无需外接运动传感器、且可降低成本的视频电子防抖的装置。
为了解决上述技术问题,本发明所采取的技术方案是:一种视频电子防抖的装置,包括运动估计计算模块、全局相对运动矢量计算模块、全局相对运动矢量存储模块、补偿抖动的运动矢量计算模块和抖动补偿模块,其中,
所述运动估计计算模块输入当前帧以及参考帧的图像,并根据运动估计算法计算出当前帧内搜索块的相对参考帧的相对运动矢量;
所述全局相对运动矢量计算模块输入来自所述运动估计计算模块的当前帧的搜索块的相对运动矢量,从而根据各搜索块的相对运动矢量获得当前帧的全局相对运动矢量;
所述全局相对运动矢量存储模块用于存储各帧图像的全局相对运动矢量;
所述补偿抖动的运动矢量计算模块根据来自全局相对运动矢量存储模块中存储的当前帧之前若干帧的全局相对运动矢量预测当前帧的全局相对运动矢量,并计算全局相对运动矢量计算模块输出的全局相当运动矢量与预测得到的当前帧的全局相对运动矢量的差值,从而根据该差值判断是否存在抖动,当存在抖动时,以所述差值作为补偿抖动的运动矢量,当不存在抖动时,使补偿抖动的运动矢量为0;并且还判断所述补偿抖动的运动矢量是否在预先设定的最大补偿运动矢量值所确定的最大补偿范围内,如果超出该范围,则以所述最大补偿运动矢量值作为所述补偿抖动的运动矢量;最后再输出补偿抖动的运动矢量至所述抖动补偿模块;
所述抖动补偿模块输入当前帧的总像素图像,并根据所述补偿抖动的运动矢量以及预先设定的有效像素图像大小,从当前帧的总像素图像上裁剪获得当前帧的防抖补偿后的有效图像。
进一步的,还可以包括预裁剪模块,用于输入当前帧的总像素图像以及当前帧之前各帧的全局相对运动矢量,从而根据各帧的全局相对运动矢量获得当前帧的前一帧图像相对于总像素图像中心位置的绝对位移值;并以该绝对位移值在当前帧的总像素图像上确定裁剪区域中心位置,再根据预先设定的有效像素的图像大小,以裁剪区域中心位置确定裁剪区域,最后对当前帧的总像素图像进行裁剪,从而输出大小为所述有效像素图像大小的当前帧视频图像。
进一步的,还可以包括全局相对运动矢量修正模块,用于输入当前帧的补偿抖动的运动矢量以及运动估计所得的当前帧的全局相对运动矢量,从而以所述全局相对运动矢量与补偿抖动的运动矢量作为修正后的当前帧的全局相对运动矢量,并输出至所述全局相对运动矢量存储模块进行存储。
进一步的,还可包括参考帧存储模块,用于输入抖动补偿后的当前帧的有效图像,以作为下一帧运动估计计算时参考帧。
优选的,所述全局相对运动矢量计算模块输入各个搜索块的相对运动矢量后,统计所述各搜索块的相对运动矢量幅度的频度从而获得其中频度最高的相对运动矢量值,并计算所述相对运动矢量的方差;然后判断所述频度最高的相对运动矢量值是否超过了图像中搜索块的相对运动矢量的方差与给定阈值的乘积,如果没有超过,则表明当前帧图像的全局相对运动矢量不明显,置当前帧的全局相对运动矢量为0;否则,以所述频度最高的相对运动矢量值作为当前帧的全局相对运动矢量。
优选的,所述补偿抖动的运动矢量计算模块可以采用曲线拟合的方法预测当前帧的全局相对运动矢量,具体可以为:
首先,根据当前帧的前若干帧的全局相对运动矢量,确定一个p次的多项式:
P(x)=wpxp+wp-1xp-1+...+w0
其中,x为相对帧号,P(x)是相对帧号为x的图像帧的全局相对运动矢量,p为可描述全局相对运动矢量轨迹的阶数,由全局运动模式确定;
然后,采用所述多项式计算获得当前帧的全局相对运动矢量,即为预测所得的全局相对运动矢量。
优选的,所述补偿抖动的运动矢量计算模块根据运动估计和预测两种方法所得的全局相对运动矢量的差值判断是否存在抖动的方法具体可为:首先,计算当前帧的前若干帧的全局相对运动矢量的方差;如果:|预测得到的当前帧的全局相对运动矢量—运动估计得到的当前帧的全局相对运动矢量|>K*当前帧的前若干帧的全局相对运动矢量的方差,则表示当前帧存在抖动,否则认为不存在抖动,其中1≤K≤2。
优选的,所述抖动补偿模块在当前帧的总像素图像上,根据补偿抖动的运动矢量以及预先设定的有效像素图像大小,裁剪获得当前帧的防抖补偿后的有效图像的步骤具体可以包括:
首先,以当前帧的总像素图像的中心位置为中心点,根据补偿抖动的运动矢量获得补偿中心点;
然后,以所述补偿中心点为中心,根据所述有效像素图像大小,在当前帧的总像素图像上确定裁剪区域;
最后,输出所述裁剪区域内的图像像素为防抖补偿后的有效图像。
优选的,所述各个模块中对全局相对运动矢量的处理均可以是分别从水平方向和垂直方向进行的,从而最终获得的当前帧的全局相对运动矢量是由全局相对运动矢量的水平分量和垂直分量构成的,所获得的抖动补偿的运动矢量也由其水平分量和垂直分量构成,进而对抖动的判断以及裁剪获得有效图像也是分别从水平方向和垂直方向进行。
优选的,所述搜索块可以为一帧图像中的所有宏块或块。
优选的,所述搜索块可以为一帧图像中的预定大小的数据块,并且所述数据块相互之间间隔一定距离。
在上述技术方案中,本发明所提出的一种视频电子防抖装置,是通过对图像序列进行运动估计,分析拍摄景物的运动情况,从而进行运动补偿消除抖动。本发明相对现有技术,无需外接运动传感器,完全通过数字图像处理方法实现运动的估计、抖动图像的补偿,并具有实现简单、有效、低成本等的特点,可以应用于数码摄像机、摄像头等视频采集装置中。
具体实施方式
下面将结合说明书附图及具体实施例对本发明作进一步详细说明。
本实施例提出的电子防抖方法无需外加运动补偿传感器获得运动状态,而是引入了视频编码技术的运动估计方法,通过运动估计方法计算每帧的全局相对运动矢量,从而获得当前帧的全局相对运动矢量MVN的估计值,并通过先前若干帧的全局相对运动矢量MV1,MV2,...,MVN-1预测当前帧的全局相对运动矢量
MVN。如果
MVN和MVN之间存在的差异大于某一给定阈值T,则认为发生了抖动,需要进行运动补偿;否则保持原图像而不进行补偿。其原理如图1所示。
本实施例为了实现电子防抖,不能够利用全部视频采集装置的CCD的采集像素值,因此有效的像素数小于CCD的总像素数,这是实现电子防抖必然出现的情况。而有效像素数相对总像素数的比例是由防抖所支持的抖动幅度有关系的。假定本实施例所支持的最大抖动通过相对移动范围作为指标,给定CCD的有效像素区域为CCD总像素区域的中心,则最大的抖动的补偿范围不能超出CCD总像素的区域,因此本实施例中预先设定在水平方向上的最大补偿运动矢量值为XMAX,垂直方向上的最大补偿运动矢量值为YMAX,则在水平方向的最大补偿范围为[-XMAX,XMAX],在垂直方向上的最大补偿范围为[-YMAX,YMAX]。如果抖动总范围位于这个范围内,则可以进行补偿实现电子防抖;如果超过这个范围,则不进行电子防抖。CCD总像素,有效像素以及防抖补偿后的有效像素的关系如图2所示。
参考图3,本实施例进行视频电子防抖的具体流程为:
步骤1、采用运动估计方法计算当前帧以及当前帧之前若干帧视频图像的全局相对运动矢量;
步骤2、根据当前帧之前若干帧的全局相对运动矢量预测当前帧的全局相对运动矢量;
步骤3、计算步骤1和步骤2中获得的当前帧的全局相对运动矢量的差值,并根据该差值判断是否存在抖动,当存在抖动时,以所述差值作为补偿抖动的运动矢量,当不存在抖动时,使补偿抖动的运动矢量为0;
步骤4、判断所述补偿抖动的运动矢量是否在预先设定的最大补偿运动矢量值所确定的最大补偿范围内,如果超出该范围,则以所述最大补偿运动矢量值作为所述补偿抖动的运动矢量;
步骤5、在当前帧的总像素图像上,根据所述补偿抖动的运动矢量以及预先设定的有效像素图像大小,裁剪获得当前帧的防抖补偿后的有效图像。
在上述步骤中,步骤1和步骤2的顺序可以调换。为了使当前帧的全局相对运动矢量估计和预测准确但又计算量相对较小,本实施例中采用当前帧之前的F帧图像。
在上述步骤中,用于进行运动估计的视频图像可以为总像素图像,也可以为补偿抖动后的有效像素大小的有效图像。本实施例中采用有效图像。
基于上述流程,本实施例提供一种视频电子防抖的装置,包括运动估计计算模块、全局相对运动矢量计算模块、全局相对运动矢量存储模块、补偿抖动的运动矢量计算模块和抖动补偿模块,另外还包括预裁剪模块、全局相对运动矢量修正模块和参考帧存储模块。
下面将结合附图4所示本实施例的装置,详细说明本实施例装置的原理。
(1)预裁剪模块
该模块输入为视频采集和输出装置的视频采集模块(如CCD)采集的当前帧的总像素图像以及所选定的当前帧之前各帧的全局相对运动矢量,输出为实际显示的图像大小(即有效像素大小)的图像。
假定CCD采集的总像素图像大小为M×N,有效像素的图像大小为M′×N′。我们用MVX(i)和MVY(i)表示第i帧图像相对于第i-1帧图像的相对运动矢量。当i=1时,有效像素图像位于总像素图像的中心位置,表示视频序列中的第一帧图像,这时初始值分别为MVX(1)=0,MVY(1)=0。我们还需要第i帧相对于总像素中心位置的绝对位移(也就是第1帧的相对运动矢量),分别用SMVX(i)和SMVY(i)表示。该值由下式得到:
绝对位移在每帧图像防抖运算中有着重要的作用,绝对位移不能超越总像素与有效像素图像之间的约束关系,可以表示为:
-XMAX≤SMVX(i)≤XMAX
-YMAX≤SMVY(i)≤YMAX
当输入第i帧M×N大小图像,根据i-1的SMVX(i)和SMVY(i)在当前帧的总像素图像上确定裁剪区域中心位置,然后根据预先设定的有效像素的图像大小对当前的第i帧图像进行裁剪,形成M′×N′的图像。对于第一帧数据由于SMVX(1)=0和SMVY(1)=0,因此实际裁剪的区域为图像的中心位置的M′×N′的图像。图5所示为裁剪后的三帧图像相对于总象素图像的位置关系示意图。其中,图像A为CCD采集的总象素图像大小,其中心位置为o点;图像B为裁剪后的第1帧图像,其中心位置与图像A的中心位置重合;图像C为裁剪后的第(i-1)帧图像,其中心位置为o′,其相对图像B的绝对(也就是相对于第1帧的相对位移)位移为SMVx(i-1)和SMVy(i-1);图像D为裁剪后的第i帧(即当前帧)图像,其中心位置为o″,其相对图像B的绝对位移为SMVxi和SMVyi,其相对图像C的相对运动矢量为MVX(i)和MVY(i)。
(2)运动估计计算模块
运动估计计算模块输入为裁剪后的M′×N′的第i帧图像和第i-1帧图像作为参考帧图像。输出为第i帧图像相对于第i-1帧图像的相对运动矢量。
运动估计方法可以采用基于视频压缩方法中的运动估计方法,以块和宏块为搜索块而进行运动估计。这时通过运动估计可以获取图像中每个宏块或块的相对运动矢量,作为全局相对运动矢量计算模块的输入。
本实施例推荐采用MPEG和H.26X等视频编码标准中的运动估计模块直接应用到本实施例的运动估计模块。这些方法已经可以很容易实现,直接应用,缺点是通常视频编码器中的运动估计方法运算量较大。
本实施例中采用一种简化的运动估计方法,这种方法无需对所有的图像的数据块进行运动估计可以大大减少运算量,提高实际应用价值。
参考附图6所示,该运动估计方法中,搜索块不采用视频编码器中描述的宏块和块的方式,本方法中的搜索块是可以自定义的,通常选择8×8,16×16大小的数据块,而且搜索块的选择并不是整个图像,而是以某间隔的部分数据块。搜索这些数据块的在给定的区域内的最佳匹配位置。与参考位置的相对位置即为运动矢量。运动匹配方法仍可以采用视频编码器中常用的搜索算法和匹配准则,为公知技术这里不作详述。
(3)全局相对运动矢量计算模块
本模块输入的是运动估计模块获得的多个搜索块的相对运动矢量,输出为通过运动估计方法得到的当前帧的全局相对运动矢量。
假定运动估计模块搜索的结果是L个相对运动矢量。分别统计水平和垂直运动矢量幅度的频度,假定频度最高的相对运动矢量值分别为mvxF,mvyF。对相对运动矢量进行统计分析,计算方差分别为Dx和Dy。
本实施例中通过运动估计方法获得全局相对运动矢量的原则是:判断当前的全局相对运动是否超过了图像中块的相对运动矢量的方差与给定阈值的乘积,如果方差比较大,说明图像内的运动状态较为复杂,而全局的相对一致的运动不明显,反之,则说明全局相对一致的运动明显,存在全局相对运动矢量。
具体实施为:
如果mvxF<Dx·Tx,表明当前图像的水平方向全局相对运动矢量不明显,有全局相对运动矢量的水平分量MVX(i)=0;否则表明存在全局相对运动矢量的水平分量MVX(i)=mvxF。
如果mvyF<Dy·Ty,表明当前图像的垂直方向全局相对运动矢量不明显,有全局相对运动矢量的垂直分量MVY(i)=0;否则表明存在全局相对运动矢量的垂直分量MVY(i)=mvyF。
对于给定的阈值Tx和Ty分别根据具体应用而定,这里推荐1≤Tx,Ty≤2。
(4)补偿抖动的运动矢量计算模块
该模块输入的是前F-1帧的全局相对运动矢量MVX(i)和MVY(i),其中1≤i≤F-1。输出是当前帧的补偿抖动的图像运动矢量CMVX(F)和CMVY(F)。
一种常用的方法采用曲线拟合,假定有前F-1帧的数据可以确定一个P次的多项式
P(x)=wPxP+wP-1xP-1+...+w0
这里x是相对帧号,我们可以选择F-1帧的第一帧为1,第二帧为2,第F-1帧为F-1,当前帧为F。输出P(x)是水平或者垂直方向的全局相对运动矢量。这里的p根据实际情况设定,为可描述全局运动矢量轨迹的阶数。对于多种正常的全局运动模式,如匀速航拍,从速度0变为匀速航拍等都可以通过一个P次的多项式来描述。如当全局运动模式为匀速航拍时,p取1,当匀加速时,p取2。通常在计算时,p值根据实际支持的运动要求选取,p越高描述的运动也就越复杂,一般p≤5就能够满足通常的运动要求了。
通过对前F-1帧图像的拟合,分别对水平方向和垂直方向的当前帧的全局相对运动矢量进行预测,可以得到预测的当前帧全局相对运动矢量为
MVX(F)和MVY(F)。
同时计算前F帧全局相对运动矢量的方差分别为:DMVX(F)和DMVY(F),并且对于预先给定的系数K,可以通过下式决定补偿抖动的运动矢量:
如果|
MVX(F)-MVX(F)|>K·DMVX(F),则表示当前水平方向可能存在抖动,则需要进行补偿,则有CMVX(F)=
MVX(F)-MVX(F),否则认为不存在抖动,属于正常移动范围,则有CMVX(F)=0。
如果|
MVY(F)-MVY(F)|>K·DMVY(F),则表示当前垂直方向可能存在抖动,则需要进行补偿,则有CMVY(F)=
MVY(F)-MVY(F),否则认为不存在抖动,属于正常移动范围,则有CMVY(F)=0。
这里的系数K推荐为1≤K≤2。
如前所述,由于本实施例只有在抖动补偿范围内才进行有效的抖动补偿,因此,判断式
-XMAX≤CMVX(F)≤XMAX
-YMAX≤CMVY(F)≤YMAX是否成立,如果成立,表明抖动总范围位于最大补偿范围内,直接输出补偿抖动的运动矢量的水平分量CMVX(F),和垂直分量CMVY(F)。如果其中之一不成立或二者均不成立,即在水平方向和/或垂直方向超出了最大补偿范围,则以所述最大补偿运动矢量值XMAX和/或YMAX作为所述补偿抖动的运动矢量的水平分量和/或垂直分量输出。
(5)抖动补偿模块
该模块输入的是补偿抖动的运动矢量CMVX(F)和CMVY(F)和当前帧大小为M×N总像素图像,根据运动矢量裁剪相应位置的M′×N′大小的有效像素区域,从而输出为防抖补偿后的有效像素区域。具体为:
首先,以当前帧的总像素图像的中心位置为中心点(如图5中的o点),根据补偿抖动的运动矢量获得补偿中心点(如图5中的o″点);
然后,以所述补偿中心点(如图5中的o″点)为中心,根据所述有效像素图像大小M′×N′,在当前帧的总像素图像上确定裁剪区域;
最后,输出所述裁剪区域内的图像像素为防抖补偿后的有效图像。
(6)全局相对运动矢量修正模块
由于进行了防抖的补偿,所以第F帧相对于第F-1帧的相对运动位置发生了变化,因此需要对第F帧的全局相对运动矢量进行修正。
本模块输入当前帧的补偿抖动的运动矢量CMVX(F)和CMVY(F)以及运动估计所得的当前帧的全局相对运动矢量MVX(F)和MXY(F),从而根据下式修正,
MVX(F)=MVX(F)-CMVX(F)
MVY(F)=MVY(F)-CMVY(F),
并输出至所述全局相对运动矢量存储模块进行存储
(7)全局相对运动矢量存储模块
由于在防抖补偿运动矢量的计算需要前面F帧的全局相对运动矢量。因此通过Global Vector Memory保存前F帧的全局相对运动矢量。
(8)参考帧存储模块
由于采用了运动估计的方法,因此需要前一帧的图像作为参考帧,则将前一帧图像保存在参考帧存储模块中,用于当前帧图像的运动估计。
一个实际的防抖实例如图7所示。数码摄像机拍摄的帧序为Frame 1,Frame2,Frame 3,Frame 4。随着抖动的发生,不断的进行补偿,但是补偿的区域限制在总像素区域的范围内。
本实施例的优势在于基于运动估计的防抖方法无需外加运动传感器设备,而单纯从数字图像处理角度进行运动矢量的预测,实现防抖。本实施例消除了由于摄像机移动拍摄情况下图像由于防抖而造成的跳动现象。
本实施例的防抖技术是基于动态图像防抖的,可以应用于摄像头、数码摄像机等设备。