董红
摘要:针对IP网络丢包条件下的H.264高清视频实时解码问题,本文通过对高清视频码流特征的分析,论述了一种实时错误的掩盖算法。此种方法的原理就是利用相应的技术手段收集丢失片的宏块数据,在权值的的选择时根据其垂直距离的平均值得到,然后进行加权矢量计算,实现对错误的覆盖。并以数学的计算方式,详细对算法的流程进行了分析,得出此种分析技术和传统的模型相比,不但节约了计算时间,而且得到的重构图像的质量较高,误差降低,适合在高清实时解码中推广。
关键字:IP网络丢包;H.264高清视频;实时解码
引言
随着视频处理技术以及输出水平的提高,在实时视频高清输出方面,对于720P以及超高清1080P的分辨率需求逐渐增多。想要实现此类高清视频的实时传输,一般需要在IP网络端提供8兆到10兆左右的高清H.264码流,但是这种技术的实现,通常会因为信道拥挤或者电磁扰动等引发IP视频丢包或者误码问题,严重影响图像解码的最终显示效果。如此以来,为了能够得到较高质量的输出视频就要在解码端进行掩盖技术的调整或者重构,尽可能达到人们对视频清晰度的要求。当前比较常见的错误掩盖算法有空域错误掩盖与时域错误掩盖两种。两种错误掩盖算法的主要区别就是空域错误掩盖利用的数学算法主要是双线性插值或者方向插值,时域错误掩盖则重视错误宏块的运动矢量的大小。比如,时域错误掩盖方式要求其运动矢量为零,但是其计算量相对较为有限,计算中也比较容易实现,从恢复效果上看,如果算法的矢量运动波动过大或者运动形式过于复杂,就很可能导致视频测错位输出,最终无法达到提高视频质量的目的。
1.解码问题分析概述
在以上算法的基础上,本文主要对高清视频码流的特征进行解析,并设计出运算量相对减少了的实时错误掩码算法。H.264高清视频的码流承载了高清视频码流之间分割的关键作用,进而把其中的高清序列通过缩放转化为较小的分辨率,这样其对配置的要求就会降低,那么就可以采用与之相对应的编码加以处理,码流中的宏块拥有其独立的运动分割特征,如图1.1所示。
从上图能够得到,分分辨率越大,码流中的16×16块所占的份额也就越多,但是相对应的8×8块所占的份额会越少。而在高清视频中,不但包含了运动形式比较复杂的宏块,还有许多采用8×8块或者相近的分割模块,所以,在对视频作错误掩盖的计算时,为了将实施效率和质量保持一致,需要把最小的错误掩盖单元设置为8×8块。
除此之外,笔者还对P帧码流进行了宏块间隔以及宏块之间的矢量运动差异做了相应分析,得到分析结果如图1.2所示。
从图1.2的分析结果能够得出,随着宏块之间具体的减小,宏块之间矢量运动的相关程度呈增加趋势。可以说,解码器能够根据宏块的间隔大小得出与之相关的宏块间距以及进行运算的掩盖错误数据。若把丢失片之上的非错误解码作为宏块的上边缘,那么其下方正确的解码就会变成对应宏块的下边缘。因为其在高清视频中主要表现为较长的带状,那么在其中丢失的IP片的上下边缘就比较接近,那么左右两边基本上很难得到因为距离的差异而产生的矢量相关度。基于上述分析,笔者认为可以直接把带状体的上、下边缘的距离作为数据估算的错误宏块的矢量,并以此进行错误宏块的重构。
2.高清视频实时解码的掩盖算法
2.1对矢量距离上的加权运动估计
如果出现丢失宏片的上、下两边同时出现的情况,那么根据上文笔者对宏块间隔和宏块矢量相关程度的分析,那么和错误宏块间隔距离较小的宏块数据会对错误掩盖的计算产生较大的辅助作用。本文将充分利用这一点,对矢量的垂直方向进行加权,其中权值通过矢量中数量平均值的方式进行确定,然后根据宏块中矢量的运动补偿功能,用经过计算之后的新宏块取代已被确定的错误宏块,如此以来就实现了对错误掩盖的功能。
如图2.1所示,设其中丢失宏片中正在被算法进行取代计算的错误宏块为X,那么和其相对应的正确解码就是图中的A(顶部宏块)、B(底部宏块)、C(顶部靠左宏块)、D(顶部靠右宏块)、E(底部靠左宏块)、F(底部考右宏块)。其中可以用8×8的子块作为错误掩盖的最小单元,并在各个子块中设置对应的具有矢量运动特征的错误掩盖。
下面笔者将以的子块为例,对各个子块进行矢量运动特征的分析,然后进而得到等。
仍然根据图2.1中的上边缘中的A、C、D进行子块的上边缘预测(为矢量)。设,如果宏块A存在垂直方向上的分割,那么;否则,。以上皆为矢量,然后对其进行均值与方差的计算得到:
我们再通过式(3)就能看出,由于方差的大小能够影响甚至决定到矢量的预测结果。若目前这3个矢量的方差比较小,那么就可以直接根据宏块A内部的第二个运动矢量,不然就要根据的中值来进行的预测。
同理,若使用图2.1中的下边缘B、E、F进行下方预测(矢量),之后在根据错误宏块与顶部宏块之间的间隔设为与底部宏块的间隔设为的权值,加以平均值的权值来得到子块的矢量,则为:
2.2 高清视频实时错误掩盖算法流程
本文所提出的的高清视频实时错误掩盖算法,在进行整帧解码计算停止后,将对其码流丢失与解码结果进行检测,如果错误错误解码,就要对相应的错误片段进行错误掩盖,知道找回全部丢失片段结束。
在进行P帧丢失的错误掩盖计算前,首先要按照丢失片的两个边缘Intra进行现场的对比测试,具体过程如式(5):
如果检验得到的P帧出现了场景变换,那么视频的相邻帧的时域相关程度就会降低,这时一般选择空域掩盖的方式进行计算。在本文采用的空域掩盖是建立在像素点之上,并根据上、下边缘的区域作出线形插值。遇到I帧的片段丢失也采用相同的方式进行解决。
如果检验之后没有得到P帧的场景转换结果,那么就可以采用加权之后的时域掩盖进行计算,一般采用自左向右的顺序进行计算,并对宏块进行自上而下的顺序进行掩盖。具体到单个宏块的处理步骤如下:
(1)从上至下依次检测帧中的有效宏块,计算相应的与。检测上上部的A、C、D三个宏块。如果上部的这三个宏块皆不存在,那么将设置为不能用;相对应的,三个宏块中存在Intra,那么的计算就不存在相应的宏块。同理进行底部宏块B、E、F的计算,得到。
(2)对宏块的子划分。如果顶部的A宏块或者是底部的B宏块,两者之一或者全部符合:拥有Inter快,在竖直方向上存在分割,那么就可以对此宏块进行子块的划分。如果与皆存在并具有相对较大的差异,那么就可以将宏块做从上而下的子块划分。具体判别算法,如式(6):
式中N表示宏块A与B之间相隔的宏块总数,表示阈值。这种处理方式会尽量减少场景转换之下的子块数量,使算法复杂度降低。
(3)子块的矢量估计。如果与皆有效,那么利用式子(4)中加权平均值预测方式就可以直接进行矢量估计,如果与两者之后只有一个有效,那么只能根据其中的信息预测进行相邻宏块的矢量估计。与两者皆无效,那么就要以其左右相邻的矢量进行最终的矢量估计。
(4)在完整矢量估计的结果之上加以运动补偿计算,并掩盖错误宏块。
3.总结
本文只是从理论的角度对IP网络丢包条件下的H.264高清视频实时解码问题进行了分析,为了对本文所分析的算法进行优化,采用相应的案例分析方式,会得到更为合理的结果。
参考文献
[1]张秀丽.基于RS的IP网络视频JSCC策略研究[J].电路与系统学报,2011,(03)
[2]林镜华,雷为民,白松等.支持IPTV高清码流连续平滑播放的多级缓冲区设计与实现[J].小型微型计算机系统,2010, (05)
[3]林李松,陈耀武.基于TMS320DM6467的H.264自适应错误掩盖并行解码算法[J].计算机工程与应用,2012,(08)