一种基于h.264的快速插帧实现方法

文档序号:7929790阅读:272来源:国知局
专利名称:一种基于h.264的快速插帧实现方法
技术领域
本发明涉及一种基于H.264的快速插帧实现方法,具体地说是一种用于 网络视频传输系统中视频数据压縮后的处理方法。
背景技术
在网络视频传输系统中,视频都是先经过压縮,通过网络传输到接收方, 再由接收方解码显示。如何在低带宽下仍能保持视频清晰流畅的显示是人们 关注的一个焦点。现在最新的视频编解码算法H.264可以将视频数据压縮100 倍以上仍能很好的保证视频质量。但是在很多实际应用的场合,由于受网络 带宽的限制,现有的视频编解码算法仍然满足不了人们对视频流畅显示的需 求。于是后来又提出了插帧实现方法,在不改变原有码流的情况下,在解码 出来的每两帧之间插出一帧。这样显示的视频帧数比原来提高了将近1倍。
插帧算法是基于物体的运动是平滑连续的,这个假设对于大多数视频序 列都是适用的。插帧算法的总体思路如图1所示。设当前帧的运动向量为 (mvlx,mvly),插出帧的运动向量为(mvx=mvlx/2, mvy = mvly/2)。
插出帧每个象素值的计算公式为F(x,y"[Fn-!(x+mVx , y+mvy) + Fn(x-mvx, y-mvy)]/2。
其中F^(x, y)表示前一帧(x, y)位置的象素值,Fn(x, y)表示当前帧(x, y)位置的象素值。
在实际应用中,根据上述方法生成的插帧效果并不理想。这主要是由于 以下几个因素的影响
(1) 视频编解码算法中有I帧和I宏块,I帧和I宏块的运动向量为0, 这些运动向量对插帧没有参考意义。
(2) —帧图像中虽然大部分物体运动是连续的,可能有小部分是不连续 的,这样插帧的局部效果会比较差。
(3) 实际情况中由于光线变化和摄像机采集的影响,编码信息中的一些 运动向量并不是物体的真实运动,这些运动向量不能用来作为插帧的参考运 动向量。
(4) 在场景变换和前后两帧物体运动变化很大的情况下,插帧的马赛克 现象比较严重。
4现有的插帧实现方法大部分都是针对特定的编解码算法,而且复杂度高, 插帧效果也是针对测试序列而言,在实际应用中效果并不理想。

发明内容
本发明的目的在于克服上述不足之处,提供一种快速实用的插帧实现方 法,特别适用于源视频质量一般的场合。
按照本发明提供的技术方案, 一种插帧实现方法,包括如下歩骤,
(1) 当前帧为I帧时,取前一帧的运动向量作为插出帧的参考运动向量; 当前宏块为I宏块时,取所述I宏块周围8个宏块中不为I宏块的运动向量 的平均值作为插出帧的参考运动向量。
(2) 对所述运动向量进行分类-
取SAD二 E biockslze abs[Fnd(x+mVx, y+mvy) - Fn(x-mvx, y-mvy)], 其中EbkK^ze表示对一个8X8的象素矩阵求和,F^(a, b)表示前一帧(a,
b)位置的象素值,Fn(a, b)表示当前帧(a, b)位置的象素值,abs ()表示取括
号中数字的绝对值。
当SAD〈阈值T时,运动向量(mvx, mvy)作为插出帧的参考运动向量;
当SAD〉阈值T时,取插出帧当前Block上方,左方,左上方3个Block的
运动向量分别计算SAD值,取其中SAD值最小的运动向量作为当前Block
的运动向量。
(3) 用OBMC方法生成插出帧的每个象素每个补偿块要覆盖周围4 个Block,设相邻四个宏块的交点为中心的2X2像素区域为区域A,区域A 右方6X2像素区域和区域A下方2X6像素区域为区域B,与区域A和区域 B构成正方形的6X6像素区域为区域C。
区域A中象素值的计算公式为
丄E
F(x,y)"" F^,(x+mvlx, y+mvly) + Fn(x-mvlx, y-mvly);
区域B中象素值的计算公式为
丄i
F(x,y)="3 Fn-"x+mvlx, y+mvly) + Fn(x-mvlx, y-mvly);
区域C中象素值的计算公式为
F(x,y) = 2 [Fn-,(x+mvx, y+mvy) + Fn(x-mvx, y-mvy)]。
(mvlx, mvly)为当前帧的运动向量,( mvx, mvy)为插出帧的运动向量,mvx = mvlx/2, mvy = mvly./2。
(4)根据当前帧中I宏块的数量Numjn SAD值大于阈值T的宏块数
量Numsad来判断当前帧与前一帧的运动变化大小,当NumjB Num^大于一
个定值时,不进行插帧,直接重复显示当前帧。
所述定值根据实验的图像效果得到。所述阈值T取值5X(8X8^320。 根据视频的前后帧之间的关系可以插值出新的一幅视频图像出来,而且
对于有些不适合与插帧的视频图像,可以不进行插帧。
本发明的优点是本发明所述的插帧方法不局限于一种编解码算法,实
现复杂度低,并且根据普通摄像机采集到的实际视频做了进一步改善,适合
普通摄像机场合,得到视频效果较好,是一种实用有效的插帧实现方法。


图1为插帧实现方法示意图。
图2为OBMC图示。
图3为宏块中的小块示意图
具体实施例方式
下面结合附图和实施例对本实用新型作进一步说明。
如图l所示,帧F是通过相邻两帧图像根据运动的惯性计算得到的。
如图2所示,插帧宏块的运动量估计是通过OBMC (重叠宏块运动补偿
的方法)来计算得到的,该方法可以有效的防止某一块运动量过大引起的估
计不准确。
在H.264编码的过程中,部分视频帧序列压縮成I帧;部分压縮成P帧; 还有部分压縮成B帧。I帧法是帧内压縮法,也称为"关键帧"压縮法。I 帧法是基于类离散余弦变换DCT (Discrete Cosine Transform)的压縮技术, 这种算法与JPEG压縮算法类似。采用I帧压縮可达到1/6的压縮比而无明显 的压缩痕迹。
如图3所示, 一个宏块由4个Block组成。 一个宏块为16X 16象素矩阵, 一个Block为8X8象素矩阵。数据编码以宏块为单位,运动预测以Block为 单位。I宏块直接以象素值编码,不进行运动预测。补偿块是通过前后帧图 像的运动关系计算出中间插帧图像的 一 块。
当前帧为I帧时,取前一帧的运动向量作为插出帧的参考运动向量;当 前宏块为I宏块时,取所述I宏块周围8个宏块中不为I宏块的运动向量的 平均值作为插出帧的参考运动向量。然后,对所述运动向量进行分类
取SAD二 Zblocksize abs[Fn—"x+mVx, y+mvy)画Fn(x-mvx, y-mvy)],
其中Eb,。eks,ze表示对一个8X8的象素矩阵求和,Fn.,(a, b)表示前一帧(a, b)位置的象素值,Fn(a, b)表示当前帧(a, b)位置的象素值,abs ()表示取括 号中数字的绝对值。
当SAD〈阈值T时,运动向量(mvx, mvy)作为插出帧的参考运动向量; 当SAD〉阈值T (这里取值5X(8X8))时,取插出帧当前Block上方,左方, 左上方3个Block的运动向量分别计算SAD值,取其中SAD值最小的运动 向量作为当前Block的运动向量。
用OBMC方法生成插出帧的每个象素每个补偿块要覆盖周围4个 Block,设相邻四个宏块的交点为中心的2X2像素区域为区域A,区域A右 方6X2像素区域和区域A下方2X6像素区域为区域B,与区域A和区域B 构成正方形的6X6像素区域为区域C。
区域A中象素值的计算公式为
丄Z
F(x,y)=8'=' Fn-"x+mvlx, y+mvly) + Fn(x-mvlx, y-mvly);
区域B中象素值的计算公式为
丄i
F(x,y)=4,=3 Fn—(x+mvlx, y+mvly) + Fn(x-mvlx, y-mvly);
区域C中象素值的计算公式为
F(x,y) = 2 [Fn-"x+mvx, y+mvy) + Fn(x-mvx, y-mvy)];
其中,(mvlx, mvly)为当前帧的运动向量,( mvx , mvv)为插出帧的运 动向量,mvx==mvlx/2, mvy = mvly/2。
根据当前帧中I宏块的数量Nrn^和SAD值大于阈值T的宏块数量 Num^来判断当前帧与前一帧的运动变化大小,当Numjn Num^大于一个 定值时,不进行插帧,直接重复显示当前帧。
本发明尤其适合普通摄像机场合,实现复杂度低,是一种实用有效的插 帧实现方法。本发明的特点是
1、 对I帧和I宏块的运动向量做特殊处理。
2、 对运动分量进行分类,将不代表真实运动或不连续的运动分量区分出 来做特殊处理。3、 用OBMC方法来补偿生成插出帧。
4、 根据I宏块的数量和SAD值大于阈值T的宏块数量来判断两帧之间 的运动变化大小,对运动量大的两帧之间不进行插帧。
本发明可以应用于视频聊天软件和视频监控系统中,取得了很好的效果。
权利要求
1、一种插帧实现方法,其特征是所述方法包括如下步骤,(1)当前帧为I帧时,取前一帧的运动向量作为插出帧的参考运动向量;当前宏块为I宏块时,取所述I宏块周围8个宏块中不为I宏块的运动向量的平均值作为插出帧的参考运动向量;(2)对所述运动向量进行分类取SAD=∑blocksize abs[Fn-1(x+mvx,y+mvy)-Fn(x-mvx,y-mvy)],其中∑blocksize表示对一个8×8的象素矩阵求和,Fn-1(a,b)表示前一帧(a,b)位置的象素值,Fn(a,b)表示当前帧(a,b)位置的象素值,abs()表示取括号中数字的绝对值;当SAD<阈值T时,运动向量(mvx,mvy)作为插出帧的参考运动向量;当SAD>阈值T时,取插出帧当前Block上方,左方,左上方3个Block的运动向量分别计算SAD值,取其中SAD值最小的运动向量作为当前Block的运动向量;(3)用OBMC方法生成插出帧的每个象素每个补偿块要覆盖周围4个Block,设相邻四个宏块的交点为中心的2×2像素区域为区域A,区域A右方6×2像素区域和区域A下方2×6像素区域为区域B,与区域A和区域B构成正方形的6×6像素区域为区域C;区域A中象素值的计算公式为<maths id="math0001" num="0001" ><math><![CDATA[ <mrow><mi>F</mi><mrow> <mo>(</mo> <mi>x</mi> <mo>,</mo> <mi>y</mi> <mo>)</mo></mrow><mo>=</mo><mfrac> <mn>1</mn> <mn>8</mn></mfrac><munderover> <mi>&Sigma;</mi> <mrow><mi>i</mi><mo>=</mo><mn>1</mn> </mrow> <mn>4</mn></munderover><msub> <mi>F</mi> <mrow><mi>n</mi><mo>-</mo><mn>1</mn> </mrow></msub><mrow> <mo>(</mo> <mi>x</mi> <mo>+</mo> <mi>mv</mi> <msub><mn>1</mn><mi>x</mi> </msub> <mo>,</mo> <mi>y</mi> <mo>+</mo> <mi>mv</mi> <msub><mn>1</mn><mi>y</mi> </msub> <mo>)</mo></mrow><mo>+</mo><msub> <mi>F</mi> <mi>n</mi></msub><mrow> <mo>(</mo> <mi>x</mi> <mo>-</mo> <mi>mv</mi> <msub><mn>1</mn><mi>x</mi> </msub> <mo>,</mo> <mi>y</mi> <mo>-</mo> <mi>mv</mi> <msub><mn>1</mn><mi>y</mi> </msub> <mo>)</mo></mrow><mo>;</mo> </mrow>]]></math></maths>区域B中象素值的计算公式为<maths id="math0002" num="0002" ><math><![CDATA[ <mrow><mi>F</mi><mrow> <mo>(</mo> <mi>x</mi> <mo>,</mo> <mi>y</mi> <mo>)</mo></mrow><mo>=</mo><mfrac> <mn>1</mn> <mn>4</mn></mfrac><munderover> <mi>&Sigma;</mi> <mrow><mi>i</mi><mo>=</mo><mn>3</mn> </mrow> <mn>4</mn></munderover><msub> <mi>F</mi> <mrow><mi>n</mi><mo>-</mo><mn>1</mn> </mrow></msub><mrow> <mo>(</mo> <mi>x</mi> <mo>+</mo> <mi>mv</mi> <msub><mn>1</mn><mi>x</mi> </msub> <mo>,</mo> <mi>y</mi> <mo>+</mo> <mi>mv</mi> <msub><mn>1</mn><mi>y</mi> </msub> <mo>)</mo></mrow><mo>+</mo><msub> <mi>F</mi> <mi>n</mi></msub><mrow> <mo>(</mo> <mi>x</mi> <mo>-</mo> <mi>mv</mi> <msub><mn>1</mn><mi>x</mi> </msub> <mo>,</mo> <mi>y</mi> <mo>-</mo> <mi>mv</mi> <msub><mn>1</mn><mi>y</mi> </msub> <mo>)</mo></mrow><mo>;</mo> </mrow>]]></math></maths>区域C中象素值的计算公式为<maths id="math0003" num="0003" ><math><![CDATA[ <mrow><mi>F</mi><mrow> <mo>(</mo> <mi>x</mi> <mo>,</mo> <mi>y</mi> <mo>)</mo></mrow><mo>=</mo><mfrac> <mn>1</mn> <mn>2</mn></mfrac><mi></mi><msub> <mrow><mo>[</mo><mi>F</mi> </mrow> <mrow><mi>n</mi><mo>-</mo><mn>1</mn> </mrow></msub><mrow> <mo>(</mo> <mi>x</mi> <mo>+</mo> <mi>m</mi> <msub><mi>v</mi><mi>x</mi> </msub> <mo>,</mo> <mi>y</mi> <mo>+</mo> <mi>m</mi> <msub><mi>v</mi><mi>y</mi> </msub> <mo>)</mo></mrow><mo>+</mo><msub> <mi>F</mi> <mi>n</mi></msub><mrow> <mo>(</mo> <mi>x</mi> <mo>-</mo> <mi>m</mi> <msub><mi>v</mi><mi>x</mi> </msub> <mo>,</mo> <mi>y</mi> <mo>-</mo> <mi>m</mi> <msub><mi>v</mi><mi>y</mi> </msub> <mo>)</mo></mrow><mo>]</mo><mo>;</mo> </mrow>]]></math></maths>(mv1x,mv1y)为当前帧的运动向量,(mvx,mvy)为插出帧的运动向量,mvx=my1x/2,mvy=mv1y/2;(4)根据当前帧中I宏块的数量NumI和SAD值大于阈值T的宏块数量Numsad来判断当前帧与前一帧的运动变化大小,当NumI和Numsad大于一个定值时,不进行插帧,直接重复显示当前帧。
2、根据权利要求1所述的插帧实现方法,其特征在于,所述阈值T取 值5X(8X8)=320。
全文摘要
本发明涉及一种基于H.264的快速插帧实现方法,具体地说是一种用于网络视频传输系统中视频数据压缩后的处理方法,该方法对I帧和I宏块的运动向量做特殊处理;对运动分量进行分类,将不代表真实运动或不连续的运动分量区分出来做特殊处理;用OBMC方法来补偿生成插出帧;根据I宏块的数量和SAD值大于阈值T的宏块数量来判断两帧之间的运动变化大小,对运动量大的两帧之间不进行插帧。其优点是该插帧方法不局限于一种编解码算法,实现复杂度低,并且根据普通摄像机采集到的实际视频做了进一步改善,适合普通摄像机场合,得到视频效果较好,是一种实用有效的插帧实现方法。
文档编号H04N7/26GK101494786SQ200810244058
公开日2009年7月29日 申请日期2008年12月19日 优先权日2008年12月19日
发明者夏卫平, 李恒中 申请人:无锡亿普得科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1