背景技术
全景视频广泛应用在体育节目、三维电影、多方视频会议等应用中。一幅全景图像是由一个六面或者八面的鱼眼摄像机绕着固定的轴做旋转或者缩放运动,对摄像机周围的场景同一时域拍摄不同方位的照片,把这些照片用一些“缝合”技术无缝拼接,再根据柱面或者球面映射算法映射成柱面图或者球面图而成。因此,全景图像的分辨率一般来说比较高,运动细节更丰富。而且,由于全景视频为了要让用户有现实场景体验,一般支持虚拟的摄像机运动重现,因此,全局运动和局部运动交错特征更明显。再者,柱面和球面映射算法会引起物体运动变形,使得运动估计的难度加大。但同时,我们从二维平面坐标映射柱面坐标和球面坐标的分析中可以发现,全景图像物体在柱面或者球面上的运动形变主要表现为摄像机旋转、缩放、错切运动的形变,因此,我们可以使用全局运动模型来对全景视频进行全局运动估计补偿。
但是,以往的研究表明,全局运动估计存在着计算量大的问题。全局运动估计关键是对全局运动模型参数的估计。理论上来说,对于一个确定的全局运动参数模型,如仿射六参数运动模型,只需3个背景像素点的运动矢量即可求得六个运动参数的值。但一般的运动矢量方法只能得到精度有限的运动矢量,如果仅用很少几个像素的运动矢量来估计全局运动模型参数,得到的结果精度非常低,因此需要更多像素的运动矢量参与全局运动模型参数估计来提高准确性。这样,参数估计就成了一个解矛盾方程组的问题,可用最小二乘法来求解,如高斯牛顿迭代法。通过数次迭代计算解方程组,直到最后全局运动模型参数值收敛于一个较为稳定的值。但这一迭代过程是全局运动估计中计算复杂度最高的部分,尤其当需处理的全局运动模型较为复杂,迭代次数较多的情况下。
再者,大多数的视频场景都包含有全局运动和局部运动,如果让所有像素的运动矢量都参与全局运动估计,则作局部运动的像素点以及运动矢量估计误差较大的像素点会对全局运动估计产生很大的干扰,使得运动模型参数估计要被迭代很多次才能收敛于一个稳定值。不但降低了全局运动估计的精度,而且使得运算复杂度大大升高。
局部运动区域里的像素点,我们称为外点,全局运动像素点,我们称为内点。我们要研究的快速全局运动估计方法的重点,就是把局部运动区域从整幅图象中有效分割出来,使得全局运动区域包含尽可能多的内点和尽可能少的外点。区分外点和内点的关键和难点在于阈值T的确定。在有些文献中,T设置为一个固定的值(称之为固定阈值法),但是往往很难找到一个合适的固定阈值T胜任于整个迭代过程:如果T太小,迭代过程很可能一开始就收敛于需要局部运动区域的局部,尤其是局部运动区域占整个场景的比例较大的时候;而如果T太大则迭代结束的时候,全局运动像素点将有一部分被错判为局部运动点,从而大大影响参数估计的准确性。有些文献提到用百分比阈值r%代替阈值T(称之为固定百分比阈值法),即令外点集合为残差值较大的r%像素的集合。但是由于不同视频中全局运动区域占整个场景的比例大小都不相同,因此这种方法要么只能得到部分的全局运动区域,要么在内点集合中会包含很多外点。有学者提出了一种改进的方法:令阈值T为所有像素的残差的均值(称之为残差均值阈值法),但是残差均值法并不一定能很好地刻画全局运动区域和局部运动区域的差异,实验结果也表明在有些情况下这种方法可能使内点集合收敛于局部运动区域。
前面提到的这些内区域确定方法很难兼顾参数估计的准确性和鲁棒性,而且针对不同的视频场景往往需要事先选择一个理想的阈值,适应性较差。
发明内容
本发明的目的是提供一种面向全景视频编码的快速分割全局运动区域和局部运动区域的全局运动估计方法。
本发明解决上述技术问题的技术方案是:
一种面向全景视频编码的快速全局运动估计方法,该方法分为两步进行:
1.第一步,使用一个基于统计特性与阈值均值相结合的亮度阈值模型,通过块匹配运动估计、运动补偿、阈值化亮度残差来大致划分局部运动区域与全局运动区域。
2.第二步,由于在步骤1已经取得了全局运动像素点集合的近似解,在这里,我们使用一种基于运动矢量残差的分级阈值法来进一步细化全局运动像素点集合,最终分离出完整的全局运动区域并实现快速全局运动估计。第二步骤是一个结合最小二乘法迭代过程的约束集线性递减的阈值算法,通过运动模型参数估计、全局运动矢量估计、计算运动矢量残差以及阈值化运动矢量残差,有效的分割出前景物体对象,消除局部运动区域对全局运动估计的影响。
本发明所公开的快速全局运动估计具体算法如图1所示。
本发明与现有技术比较的优点是:兼顾了全局运动估计的准确性和鲁棒性,在保证重构图象质量不下降,而且还有略微提升的前提下,大大节省运动估计计算开销。对全景视频序列的全局运动估计具有算法复杂度低,运动参数估计精确的效果。
具体实施方式
下面结合具体实施方式对本发明作进一步描述:
本发明具体实施分两步进行:
1.第一步,执行亮度残差阈值法。
在运用递归最小二乘法估计全局运动时,初始化输入值是图像中各宏块经过块匹配运动估计后得到的运动矢量。处于局部运动区域的宏块的运动矢量不属于全局运动内点的集合,是对全局运动参数估计造成干扰的外点,将会消耗大量的运算时间.因此,如果在使用块匹配算法进行运动估计时就能够对宏块运动估计的属性进行预判,提前发现可能会干扰全局运动估计的宏块并予以剔除,必然会大大降低全局运动估计的计算量。
对视频图像的分析可以发现,全局运动区域的纹理较为丰富;而局部运动一般位于纹理灰度一致或灰度极其平滑的区域。这是因为局部运动区域所包含的运动信息比较少,相对来说,原始帧与参考帧对应块之间的亮度残差也很少。因此,本发明通过宏块运动补偿后的亮度信息来对每个宏块进行预分析,以判断该宏块是否属于局部运动宏块,如果是,则把该宏块在进行全局运动估计之前从全局运动宏块集合中剔除出去,以节省全局运动估计的计算开销,提高全局运动估计的精度。
该算法分为以下四步:
1)把整幅图像分成互不重叠的块,块大小是16×16,用块匹配算法对每一个块做运动估计,得到每一个块的运动矢量(Δx,Δy)。理论上来说,块大小越小,运动估计结果越精确,一个极端的情况,当块大小为一个像素点,则运动估计结果最准确。但这样一来,运动估计的复杂度将大大升高,需要编码传输的运动矢量比特数也更多。本算法采用16×16块,兼顾考虑计算复杂度与运动估计精确性。同时,对于块匹配运动估计,我们采用的是三步搜索快速运动估计,进一步降低运动估计的复杂度。通过块匹配算法得到的每一个块的运动矢量(Δx,Δy)需要保存下来,作为执行第二环节运动矢量残差分级阈值法的初始化输入。
2)使用上一步块匹配算法得到的运动矢量(Δx,Δy)对当前帧每一个块做运动补偿,得到当前帧每一像素点的预测值I
k。因为(Δx,Δy)代表的是由于物体本身运动所引起的帧间局部运动位移MV
1,做帧间运动补偿以后,则可以通过阈值化当前帧像素(i,j)的亮度I
k与下一帧中((i,j)+MV
1)位置处像素的亮度
的差异来判断当前帧像素(i,j)是全局运动区域像素还是局部运动区域像素。
3)计算当前块内所有像素的梯度均值S(i,j),其中,
以及在参考帧中的对应块内所有像素的梯度均值S′(i,j),其中,
比较S(i,j)和S′(i,j)残差绝对值的大小,也即|S(i,j)-S′(i,j)。如下式所示:
在式子里,m×n是块大小。
4)计算阈值Cg。阈值Cg根据以下式子来确定:
式中,N是图像被划分成互不重叠的块的个数,G
i是图像中第i个块的亮度残差(根据公式1计算),
代表当前帧的亮度残差均值。如果当前块的亮度残差G
B小于C
g,则当前块被判定为局部运动区域块,从全局运动宏块集合中剔除出去。考虑到阈值临界点C
g。的取值过大将会导致全局运动参数估计失败,我们确定公式2中k的取值为:当低码率情况下,如编码CIF、QCIF格式的视频序列,k=1.1;当高码率情况下,如编码4CIF、高清、全景视频序列,k=1.2,也即如下式所示:
Cg=1.1Gav,低码率情况下 (3)
Cg=1.2Gav,高码率情况下
2.第二步,执行运动矢量残差分级阈值法。
运动矢量残差法的原理主要是基于全局运动矢量与局部运动矢量的差异,对这一差异的度量是该方法的关键点。本发明采用一种分级阈值方法来实现该度量的准确划分。这个算法的主要思路是:在迭代的初始阶段,先用一个大的百分比阈值去除绝大部分的外点。因为在一开始的时候,与内点差异较大的外点在图像中占的比例是最大的(特别是局部运动区域,往往与全局运动区域有较为明显的运动性质差异),采用一个大的百分比阈值可迅速去除这些差异性大的外点,一旦先排除了差异性较大的外点的干扰,则整个迭代过程收敛得更快;第一次迭代后,已经得到了一个粗略的全局运动估计结果,这个时候图像中剩下的待处理的外点是与内点差异较小的像素点,在图像中占的比例不大,在接下来的几次迭代中,我们可以分级减少百分比阈值的值,逐渐排除这些差异性小的外点,精确细化内点的集合,直到把尽可能多的外点都排除出内点集合。具体算法步骤如下:
1)使用块匹配算法估计当前帧每一块的局部运动位移。该步骤在上一环节-基于亮度残差的阈值法中已经执行。
2)估计运动模型参数。考虑到全局运动区域一般集中在图像背景区域,也就是图像的边缘部分,我们选取图像左上角、右上角、左下角三个48×48图像区域的中心块(块大小为16×16)的运动矢量作为第一次高斯牛顿迭代估计模型参数过程的初始化输入值,通过高斯牛顿迭代计算,可得出初始化的若干个运动模型参数值。
3)计算图像中每一个块的全局运动矢量(Δx′,Δy′)。图像中,背景区域的块运动属于全局运动,而前景区域的块运动属于局部运动,但我们仍然可以通过把上一步骤中得到的运动模型参数值重新代入高斯牛顿迭代中,根据每一个块中心像素点的坐标(x,y)的值,分别计算出每一个块的“全局运动矢量”。对于局部运动块,该运动矢量是伪全局运动矢量。
4)计算运动矢量残差。对于同一个块,把步骤(1)得出的该块的运动矢量(Δx,Δy)与步骤(3)中得出的该块的运动矢量(Δx′,Δy′)作方差,如公式4所示。计算运动矢量残差的目的是为了判断该像素块的实际运动矢量与全局运动矢量的差异,如果运动矢量残差较大,说明该块很有可能是局部运动块,反之,该块很有可能是全局运动块。
5)设置百分比阈值排除局部运动块。我们采用一个分级递减的百分比阈值P来逐步精细全局运动区域,同时设置一个分级递减的运动矢量残差阈值T来判断本次迭代是否可以结束。在第一次迭代过程中,我们设置P的初始值为50。同时设置T为0.04,即:
把满足上式条件的最多不超过图像块数目总和的P百分比的块标记为局部运动块,剩余的标记为全局运动块,作为下一次全局运动估计迭代计算的块集合。如果本次全局运动估计块集合里所有块的运动矢量残差都不满足上式条件,则结束本次迭代,生成最终的运动模型参数,同时可根据每次迭代所标记的局部运动块集合分割出局部运动区域。P和T的递减规则:每次进入新一轮的迭代计算前,将P更新为P的四分之一(P=P/4),即第二次迭代过程中,P设为12.5,第三次迭代过程中,P设为3.125……这是因为随着迭代次数的增加,内点集合越来越趋于稳定,所包含的外点越来越少,所以P值需要线性递减,以免迭代收敛于内点集合的局部。同时将T更新为T=T-0.01,因为每次迭代结束以后,剩下的块的运动矢量残差更小,这其中有一部分是与全局运动属性差异更小的局部运动块,需要用一个更小的T来分辨它们。当迭代结果趋向稳定的时候,用递减的T能同时达到加快迭代收敛,减低计算复杂度和保证全局运动估计结果逐步精细的目的。第一次高斯牛顿迭代结束以后,将得到新的一套运动模型参数值。把这套运动模型参数值作为下一轮高斯牛顿迭代的输入值。
6)重复步骤3)、4)、5),直到所有块的运动矢量残差都小于T或者迭代次数等于4,则结束迭代过程。实验证明,当迭代次数超过4次,模型参数的解的精确性增加极其有限,也就是说,第4、第5、第6次迭代的结果非常近似,甚至无异,模型参数的解已经达到了该分级阈值迭代法精确性的一个极限。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求内。