基于无线网络的H.264误码掩盖算法的改进
2011-08-09侯艳艳
侯艳艳
(枣庄学院 计算机科学系,山东 枣庄 277160)
责任编辑:闫雯雯
0 引言
H.264视频编码标准具有更高的编码效率和更好的网络适应性,在相同构建质量下比H.263+和MPEG-4 ASP标准节约50%码流;视频编码层(Video Coding Lay⁃er,VCL)和网络提取层(Net Abstraction Layer,NAL)的定义进一步提高了网络的“亲和性”,适合于无线网络视频传输。由于无线信道易错、时变和带限的特点,视频数据在无线环境传输的突发性错误会导致连续包丢失现象,因此进行错误隐藏是十分必要的[1]。
H.264时域误码掩盖算法利用前后帧的冗余信息来恢复出当前丢失的信息,其关键是要对丢失宏块的参考运动矢量集进行估计并通过匹配算法选择最佳的运动矢量对丢失宏块进行掩盖。在这方面已经提出了很多方法,最简单的办法是时域代替法(Temporal Replacement,TR)[2],用零矢量来恢复丢失宏块;JM算法采用边界匹配算法(Boundary Matching Algorithm,BMA)[3]从候选运动矢量中选出最匹配的运动矢量。这些算法利用相邻宏块运动矢量的相关性可以获得比较满意的恢复效果,但并没有考虑丢失宏块分割模式与相邻宏块运动矢量的相关性及对象运动的多向性。
1 改进的时域误码掩盖算法
改进的时域误码掩盖算法首先对视频流进行错误检测,确定受损宏块的位置。等到所有有效宏块都被解码并保存在帧缓存中,估计出受损宏块的最优运动矢量。改进的算法分三阶段实现:第一阶段,由相邻宏块的运动矢量相关性来估计丢失宏块的分割模式;第二阶段,根据丢失宏块采用的分割模式,选择各子块的候选运动矢量集;第三阶段,根据改进的边界匹配函数选择最优的运动矢量mv。选择的最优mv,不仅在当前帧中取得较好的错误隐藏效果,而且在相关的后续帧中保持较好的错误隐藏效果。
1.1 宏块分割模式的确定
H.264支持多种分割模式的运动补偿,16×16宏块可以按16×16,16×8,8×16或8×8四种模式进行分割。8×8模式的子宏块还可以进一步亚分割为8×8,8×4,4×8或4×4。考虑到无线传输过程中带宽的局限性及解码的复杂度,本算法只考虑16×16,16×8,8×16和8×8这4种分割模式,不再考虑亚分割模式[4]。
改进的算法的宏块分割充分利用丢失宏块分割模式与相邻宏块运动矢量的相关性。如果水平相邻的宏块运动矢量具有极大的相似性,则对丢失宏块不再进行水平方向的分割;垂直相邻的宏块运动矢量具有极大的相似性,则对丢失宏块不再进行垂直方向的分割。丢失宏块相邻块的运动矢量为mv1(x1,y1)~mv12(x12,y12),如图1a所示。定义运动矢量之间的相关度为L,则mv1与mv2的相关度为
B0宏块的水平相关度LH为水平方向相邻子块的相关度均值。B0的垂直相关度LV为垂直方向相邻子块的相关度均值。
M为运动矢量相关度阈值,丢失宏块的模式推导如下:
1)LH〈M,LV〈M,丢失宏块采用 16×16 分割模式,如图1(a)所示。
2)LH〈M,LV〉M,丢失宏块采用16×8分割模式,如图1(b)所示。
3)LH〉M,LV〈M,丢失宏块也采用8×16分割模式,如图1(c)所示。
4)LH〉M,LV〉M,丢失宏块都采用8×8分割模式,如图1(d)所示。
1.2 参考运动矢量集的确定
参考运动矢量集由丢失宏块空间相邻矢量与参考帧中的对应位置矢量构成[5],包括:零运动矢量mv0;相邻运动矢量 mv1~mv12;平均/中值运动矢量 mvave;参考帧与丢失宏块对应位置的运动矢量mvne。对于不同宏块分割模式确定各子块所采用的运动矢量[6]。
第一步,为减小运动矢量预测的计算复杂度,不管宏块采用何种分割模式,快速确定丢失宏块的运动矢量:
1)计算片中所有运动矢量的绝对均值,小于阈值0.25,则用参考帧中对应宏块直接替换,预测运动矢量为mv0。
2)计算丢失宏块与参考宏块的像素均方差,小于阈值0.8,则预测运动矢量为mvave。
3)计算丢失宏块空间相邻宏块与参考帧对应宏块的像素均方差,小于阈值1,预测运动矢量采用mvne。
第二步,根据丢失宏块的不同分割模式选取子块的候选矢量集。
模式1的分割方式,B0候选运动矢量集为:{mv1,mv2,mv3,mv4,mv5,mv6,mv7,mv8}。
模式2的分割方式,则B0,B1候选运动矢量集依次为:{mv1,mv2,mv5,mv7,mv9,mv10},{mvB0,mv3,mv4,mv6,mv8,mv11,mv12}。
模式3的分割方式,则B0,B1候选运动矢量集依次为:{mv1,mv3,mv5,mv6,mv9,mv11},{ mvB0,mv2,mv4,mv7,mv8,mv10,mv12}。
模式4 的分割方式,B0,B1,B2,B3候选运动矢量集依 次为:{mv1,mv2,mv5,mv9},{ mvB0,mv1,mv2,mv7,mv10},{mvB0,mv1,mv3,mv5,mv6},{mvB1,mvB2,mv4,mv7,mv8}。
1.3 改进的边界匹配函数
BMA采用丢失宏块最外层像素与周围宏块相邻层像素的绝对差之和(SAD)作为评价标准,选择使SAD最小的运动矢量作为丢失宏块运动矢量[6],如图2所示。BMA算法中边界匹配按水平和垂直两个方向进行,主要考虑像素的水平和垂直相关性。视频序列中对象的运动具有多向性,对象的运动不仅有水平和垂直方向,还有正反对角线方向,改进的算法根据相邻宏块BT和BL计算B0正对角线,副对角线,水平/垂直方向像素匹配系数c1,c2,c3,式中f(x,y)为丢失宏块左上角的像素。
根据 c1,c2,c3大小关系,选择边界匹配函数。c1最小,丢失宏块具有正对角线方向性,边界匹配函数为SAD1;c2最小,丢失宏块具有反对角线方向性,边界匹配函数为SAD2;c3最小则丢失宏块具有水平/垂直方向性,边界匹配函数为SAD3。从参考运动矢量集中选择使边界匹配函数最小的运动矢量作为丢失宏块运动矢量。H.264采用多种宏块分割模式,对于m×n子块的SAD1,SAD2,SAD3,有
k1,k2,k3,k4分别为上下左右相邻子块的可靠度,ki为1表示相邻子块未丢失或已隐藏;ki为0表示相邻块已丢失且未隐藏。
2 实验结果
本文采用H.264参考模型JM8.6编码100帧,帧率30 f/s(帧/秒),序列结构IPPPP,编码模式采用FMO棋盘模式,测试序列为QCIF格式的foreman序列、carphone序列。实验采用H.264中推荐的3G移动包交换网络的仿真环境,利用比特错误模式文件进行仿真。解码端采用本文算法与几种传统算法进行误码掩盖,信道近似误码率为3%,5%,10%,15%。表1给出各序列0~100帧的平均PSNR值。图3给出了在误码率为10%情况下,Car⁃phone序列第12帧图像客观质量比较。
表1 Carphone和Forman序列的PSNR值
3 结论
笔者在时域误码掩盖算法的基础上针对无线网络环境,对JM误码掩盖算法的分割模式选择及边界匹配误差函数进行了一定的改进。仿真实验证明了改进算法在略微增加计算复杂度的基础上,图像质量比原算法提高了0.08~1.13 dB,同时对帧间的误码积累有一定的抑制作用。实验结果表明,该算法较以往的时域误码掩盖算法在相同的RTP包丢失率情况下均有更高的峰值信噪比及更好的重建图像效果。
[1]马宏兴,张伶.H.264/AVC率失真优化技术综述[J].电视技术,2010,34(6):19-22.
[2]AIGN S,FAZEL K.Temporal and spatial error concealment technique forhierarchicalMPEG-2 video codec[C]//IEEE InternationalConference on Communications.[S.l.]:IEEE Press,1995,3:1778-1783.
[3]TSEKERIDOU S,PITAS I.MPEG-2 errorconcealmentbased on block-matching principles[J].IEEE Transactions on Circuits and Systems for Video Technology,2000,10(4):646-658.
[4]ZHENG Jinghong,CHAU Lap-Pui.A temporal error concealment algorithm for H.264 using Lagrange Interpolation[J].IEEE International Symposium on Circuits and Systems,2004,2:133-136.
[5]YAN B,NG K W.A novelselective motion vector matching algorithm for error concealment in MPEG-4 video transmission over error-prone channels[J].IEEE Trans.Consum.Electron.,2003,49(4):1416-1423.
[6]AGRAFIOTIS D,BULL D R,CANAGARAJAH C N.Enhanced error concealment with mode selection[J].IEEE Trans.Circuits Syst.Video Technol.,2006,16(8):960-973.