一种视频解码的时域错误隐蔽方法

文档序号:7971199阅读:280来源:国知局
专利名称:一种视频解码的时域错误隐蔽方法
技术领域
本发明属于图像信息处理领域,具体涉及一种视频解码的时域错误隐蔽方法。

背景技术
随着有线宽带网络和无线网络的发展和用户需求的驱动,多媒体技术和相关的应用得到了越来越多的关注,被认为是未来高速网络的主流应用之一。多媒体应用尤其是视频应用,相对于Internet的传统应用如WWW、E-mail等,其对实时性要求更严,对带宽的需求更大。由于视频应用中大多采用了高压缩率的编码技术,其对传输误码的要求尤为苛刻,但是有线或者无线网络不提供传输的QoS(Quality of Serverices)保证,因此提高视频应用对传输误码的抗干扰和恢复能力一直是多媒体通信领域的研究热点。
常用的错误隐蔽方法包括在编码器和信道编码中引入冗余,使编码流对传输错误具有更强的抗干扰能力;通过编码器、传输信道和解码器之间进行交互,编码器根据检测到的错误信息调整自身的操作,在解码器端根据错误检测的结果对错误进行隐蔽。此两种方法在编码器与解码器之间皆存在一定的交互性,这样的编码器得到的视频流缺乏通用性,因此,解码器根据错误检测的结果对错误进行隐蔽的方法得到了广泛的应用。
传统的解码器端根据错误检测结果进行错误隐蔽方法有两类,基于运动补偿的时域错误隐蔽和基于空域或频域上的错误隐蔽。其中基于运动补偿的时域错误隐蔽方法的一个简单的方法来利用视频信号的时域相关特性,即用错误宏块所在帧的前一帧中与错误宏块空间位置相同的宏块,来代替当前帧中的错误宏块。但是当视频中存在较剧烈的运动时,这种方法的视觉效果并不理想。因此,近年来部分研究者通过运动补偿来寻找相应的宏块时,对隐蔽效果有很大提高。例如中国专利申请号为200410018508.0的“一种隐藏错误的视频译码方法”(公开号CN1581972,
公开日2005.02.16),该专利方法通过搜索匹配块的方法对发生错误的宏块进行补偿,其计算复杂度较高,对实时视频的解码不太适用;美国专利号为6,480,546的“Errorconcealment method in a motion video decompression system”,该专利方法利用丢失宏块的上、下宏块的运动矢量对丢失宏块的运动矢量进行估计,当丢失宏块的相邻宏块不存在时,将不能得到满意的错误隐蔽效果。综上所述,现有的基于运动补偿的时域错误隐蔽方法存在着两个缺点1)必须利用丢失宏块的相邻宏块信息,如相邻宏块不能正确解码,则不能有效地进行丢失宏块的运动矢量估计;2)搜索比配块虽然能够得到较好的效果,但是计算复杂度太大,不适合实时应用。


发明内容
本发明所要解决的技术问题是提供一种视频解码的时域错误隐蔽方法,克服现有技术中的缺点,错误隐蔽效果好、计算复杂度低,在满足实时性要求的同时具有较强的鲁棒性。
为了解决上述技术问题,本发明提供了一种视频解码的时域错误隐蔽方法,包括以下步骤 (a)读取、解析码流,并检测码流中图像帧是否有错误发生,标记受损宏块; (b)如果判断当前帧中存在受损宏块,则继续解析下一帧获取其宏块信息,转到步骤(c),否则进行正常解码流程,执行步骤(d); (c)对于当前帧中的受损宏块,利用本帧或前后帧相应宏块估算其运动矢量,根据估算结果在前一帧中寻找对应位置的块,用该对应宏块来替换受损宏块; (d)将经过正常解码及错误隐蔽的图像数据送入显示缓存。
进一步地,上述方法还可具有以下特点在所述步骤(a)中,所述检测码流中图像帧是否有错误发生,标记受损宏块,包括以下步骤(a-1)预先为每一帧中的每一宏块设置一正确解码标志;(a-2)根据码流语法,顺序解析帧的显示序号,判断连续解码的两帧之间序号不连续且不存在B类型帧时,此两帧之间存在丢失帧,执行步骤(b),否则执行下一步;(a-3)读取、解析宏块,判断宏块是否被正确解码,如果是,则标记该宏块的正确解码标志,否则,继续本步骤,直到本帧解码结束。
进一步地,上述方法还可具有以下特点在所述步骤(b)中,采用步骤(a-1)-(a-3)的方法解析下一帧码流,标记受损宏块。
进一步地,上述方法还可具有以下特点在所述步骤(c)中,所述利用本帧或前后帧相应宏块估算其运动矢量,采用以下步骤(i)搜索本帧中受损宏块,判断该受损宏块邻近宏块解码是否均正确,如果是,利用邻近宏块的运动矢量估算该受损宏块的运动矢量,否则,执行下一步;(ii)判断该受损宏块的空间相邻宏块中是否存在部分以INTER模式编码的正确宏块,如果是,则利用这部分宏块的运动矢量估算该受损宏块的运动矢量,否则,执行下一步;(iii)利用该受损宏块在其前、后帧对应宏块的运动矢量估算该受损宏块的运动矢量; 进一步地,上述方法还可具有以下特点在所述步骤(i)中,所述利用邻近宏块的运动矢量估算该受损宏块的运动矢量,采用以下公式计算MV=Mean(MVa,MVb,MVc),其中,MV为该受损宏块的运动矢量,MVa~MVc为邻近宏块中相应块的运动矢量。
进一步地,上述方法还可具有以下特点在所述步骤(ii)中,所述利用部分宏块的运动矢量估算该受损宏块的运动矢量,采用如下公式如果左边宏块、上边宏块均为以INTER模式编码的正确宏块,则受损宏块的运动矢量MV=Mean(MVa,MVb,MVc);如果左边宏块为以INTER模式编码的正确宏块,则受损宏块的运动矢量MV=MVa;如果上边宏块为以INTER模式编码的正确宏块,则受损宏块的运动矢量MV=Mean(MVb,MVc);其中,MVa~MVc为邻近宏块中相应块的运动矢量。
进一步地,上述方法还可具有以下特点在所述步骤(iii)中,进一步包括以下步骤采用前、后两帧对应宏块的运动矢量的均值作为该受损宏块的运动矢量;如果该受损宏块后帧的对应宏块以INTRA模式进行编码或者同样为受损宏块,则采用前帧对应宏块的运动矢量作为该受损宏块的运动矢量;如果该受损宏块前帧的对应宏块以INTRA模式进行编码,则采用后帧对应宏块的运动矢量作为该受损宏块的运动矢量。
进一步地,上述方法还可具有以下特点在所述步骤(c)中,估算出所述受损宏块的运动矢量后,若该运动矢量值小于预先给定的阈值,则对该受损宏块的运动矢量值进行修正,采用以下步骤 (A)计算前帧宏块在t时刻的投射运动矢量其中i表示第i个子块的位置,表示新的子块位置,当匀速运动时,k=1,s=0; (B)根据与受损子块叠加的投射运动矢量计算受损子块的运动矢量,采用如下公式 其中,MVjt表示受损宏块的运动矢量,MP1,MP2,...,MPN为N个投射运动矢量,W1,...,WN为权值,正比于各个投射于受损子块的前帧子块在受损宏块中所占的比例,WN+1为当前子块中没有被投射运动矢量覆盖的像素区域在受损子块中所占的比例,且W1+W2+...WN+WN+1=1。
本发明克服了现有技术中复杂度较高的缺点,尽可能掩盖由于数据丢失而引起的图像损伤,本发明方法可以应用于ATM、无线环境,而且也可用于Internet视频通信,在给定传输速率和一定丢包率、误码情况下,可使图像主观评价达到较优,并且满足实时性的需求,具有较强的实用价值。



图1是本发明所述的基于运动补偿的通用的时域错误隐蔽方法流程图; 图2-1是本发明所述的受损宏块运动矢量预测示意图1; 图2-2是本发明所述的受损宏块运动矢量预测示意图2; 图3是本发明所述的基于运动补偿的增强的时域错误隐蔽方法流程图; 图4是本发明所述的投射运动矢量加权计算示意图。

具体实施例方式 下面结合附图和具体实施方式
对本发明做进一步详细的描述。
本发明所述的时域错误隐蔽方法可具体分为受损宏块定位、对受损宏块根据其特性进行错误隐蔽两部分,包括以下步骤(如图1所示) 步骤110,读取、解析码流,并检测码流中图像帧是否有错误发生,标记受损宏块; 若当前帧处理完成,则进入下一帧图像的处理。
码流的错误可以包括整帧丢失、包丢失、码流错误等情况。具体的码流错误检测方法不在本发明讨论范围之内,一种可行的错误检测方法如下所述 (1)预先为每一帧中的每一宏块设置一正确解码标志,在对一帧进行解码之前,将各宏块的正确解码标志清零; 如,对帧中的任意宏块,令MBEncFlag[i]=0,i=1 to N,其中N为一帧的最大宏块数; (2)根据码流的语法,顺序解析帧的显示序号,判断连续解码的两帧之间序号是否连续,如果不连续,并且不存在B类型帧时,则判定这两帧之间存在丢失帧,转到步骤120,如果连续,执行下一步; 例如图像序列帧为P3、B4、P5,由于B4需要在P3和P5正确接收到后才能解码,因此实际传输过程接收顺序是P3、P5、B4,必须先传送P3和P5,再传送B4,因此在不存在B帧时,才能根据接收的帧序号判断是否存在丢失帧。
此时该丢失帧的所有宏块的正确解码标志均为零,即满足MBEncFlag[i]=0。
步骤(1)-(2)用于判断是否发生帧丢失,若判定有丢失帧后,立即转到步骤120对其进行处理。
(3)读取、解析宏块; (4)判断宏块是否被正确解码,如果是,执行下一步,否则,执行步骤(6); (5)置位该宏块的正确解码标志,即令MBEncFlag[i]=1; 步骤(3)-(5)用于判断是否存在宏块错误,在步骤(3)-(5)中,当一个宏块被正确解码,就更改正确解码标记。若一帧图像解码完成,发现还有宏块的解码标记没有更改,则表示对应的宏块有错,需要进行错误隐蔽算法处理。一般来说,一个数据包含有多个宏块,因此包丢失会产生多个宏块丢失。
(6)若本帧解码未结束,则返回步骤(3); 当一帧解码结束时,该帧中满足MBEncFlag[i]=0的宏块即为受损宏块。
步骤120,判断本帧中是否存在受损宏块,即判断本帧中是否存在正确解码标志为零的宏块,如果是,执行步骤130,否则,执行步骤140; 步骤130,当一帧中存在受损宏块时,继续进行下一帧的码流的读取、解析以获取该帧各宏块的运动矢量、宏块编码类型等信息,并采用与步骤110类似的方法检测、标记受损宏块,转到步骤150; 步骤140,如果该帧不存在受损宏块,则进行正常解码流程,执行步骤160; 步骤150,对于当前帧中未进行正确解码标志的受损宏块,利用估算的运动矢量MV在前一帧中寻找对应位置的块,用该对应的块来替换受损块; 估算运动矢量MV的具体步骤如下 (1)搜索本帧中的受损宏块,即正确解码标志为零的宏块; (2)判断该宏块的邻近宏块解码是否均正确,即邻近宏块的正确解码标志是否均为1,如果是,执行步骤(3),否则,执行步骤(4); (3)如果该受损宏块空间邻域存在8个以INTER模式编码的正确宏块,则充分利用所有正确解码宏块的运动矢量的信息对该宏块中各块的运动矢量信息进行估算,具体方法多重多样,一种简单的方法如下所示 MV1=Mean(MVa1,MVb1,MVc1); MV2=Mean(MVa2,MVb2,MVc2); MV3=Mean(MVa3,MVb3,MVc3); MV4=Mean(MVa4,MVb4,MVc4); 其中MV1~MV4为该宏块中4个子块的运动矢量,例如子块可以取8×8象素大小;MVa1~MVc4为邻近宏块中相应块的运动矢量,其块的划分如图2-1所示。
当相邻的块不编码时,其运动矢量被设置为0,如在边界位置的图像,没有编码块,其运动矢量设置为0。
(4)判断该宏块的空间相邻宏块中是否存在部分宏块为以INTER模式编码的正确宏块,如果是,执行步骤(5)否则,执行步骤(6); (5)如果该宏块的空间相邻宏块中的部分为以INTER模式编码的正确宏块时,采用这些宏块中相应块的运动矢量对该宏块的运动矢量进行估算; 对于邻近宏块及邻近宏块相应块的选择、运动矢量的估算方法由实验确定,可根据实验效果进行调整,实用中并不局限于此。
例如可以采用以下的简单估算方法 当左边宏块、上边宏块中存在正确的以INTER模式编码的宏块时, 如果左边宏块、上边宏块均为以INTER模式编码的正确宏块, 令MV=Mean(MVa,MVb,MVc); 否则,如果左边宏块为以INTER模式编码的正确宏块, 令MV=MVa; 否则,如果上边宏块为以INTER模式编码的正确宏块, 令MV=(MVb+MVc)/2,即Mean(MVb,MVc) 其中MV为当前宏块中各块的运动矢量,MVa~MVc为邻近宏块中相应块的运动矢量,其块的划分如图2-2所示;也可以采用步骤(3)中的方法,以8×8块为单位对受损宏块的运动矢量进行估算。
(6)当步骤(2)、(4)的条件皆不满足时,利用该受损宏块中各块在其前、后帧对应块的运动矢量对该宏块的运动矢量进行估算,具体实施如下 采用前、后帧对应宏块(空间对应位置的宏块)中各子块的运动矢量的均值作为该受损宏块各对应子块的运动矢量; 如果其后帧的对应宏块以INTRA模式(运动矢量为零)进行编码、或者同样为受损宏块,则采用前帧对应宏块中各子块的运动矢量(或经过错误隐蔽补偿后的运动矢量)作为该受损宏块各对应子块的运动矢量; 如果其前帧的对应宏块以INTRA模式进行编码,则采用后帧对应宏块中各子块的运动矢量作为该受损宏块各对应子块的运动矢量; (7)根据估算结果采用前一帧中的对应该运动矢量的宏块的像素值来代替该受损宏块的像素值; (8)判断正确解码标志为零的宏块是否处理完毕,如果否,返回步骤(1)继续处理; 步骤160,将经过正常解码及错误隐蔽的图像数据送入显示缓存,本帧解码操作结束。
仅对受损宏块进行处理也可达到错误屏蔽的效果,但若将受损宏块分为若干子块,则错误屏蔽效果更佳。
采用本实施例的方法完全解决了相邻宏块不能正确解码的问题,由于前一帧图像的所有宏块都是能够正确解码,或者是进行了错误隐蔽(可以当作正确解码对待),因此用相邻帧对应宏块的运动矢量估算是可行的。
以上介绍的基于运动补偿的时域错误隐蔽方法是一种适合普遍意义的方法(以下简称通用的时域错误隐蔽方法),利用运动信息在空间相邻和时间相邻的相关性,估算出丢失位置的运动矢量。无论空间相邻的宏块是否全部或者部分正确解码,该错误隐蔽方法都能尽可能的对丢失宏块位置的运动矢量进行估算。但是该方法估算的运动矢量与实际的真实运动矢量可能仍然存在较大的误差,由此方法解码生成的恢复图像可能与真实图像相差较大。因此本发明还提出了一种增强的时域错误隐蔽方法。
增强的时域错误隐蔽方法如图3所示,基本步骤与通用的时域错误隐蔽方法相同,只是在原有通用的时域错误隐蔽方法的基础上,在步骤150估算出受损宏块的运动矢量后,增加了一个运动矢量修正过程,其余步骤均与通用的时域错误隐蔽方法的步骤相同。下面对运动矢量的修正过程进行详细介绍 对受损宏块的每个子块的运动矢量进行修正,例如子块大小可以取4×4象素(也可以是8×8,子块大小根据需要调整)。按照特定的运动模型假设,将前帧(t-1)对应位置的运动矢量投射到当前丢失帧(t)的每个像素位置,然后对每个子块内的投射运动矢量进行加权均值运算,得到估算的子块运动矢量,所述投射运动矢量不是前帧对应空间位置的运动矢量,而是指按照特定运动模型(如匀速或非匀速)投射过来的运动矢量,先将所有前帧宏块在t时刻的投射运动矢量计算出来,然后再根据叠加的投射运动矢量计算受损宏块的运动矢量。以匀速运动假设来详细说明 对受损宏块的每个子块的运动矢量进行修正,首先对步骤150估算出的MV进行判断,若MV<THMV(其中,THMV为预先给定的阈值),不进行运动矢量修正,否则进行如下操作 (1)计算前帧宏块在t时刻的投射运动矢量; 记前帧的运动矢量为MVit-1,其中i表示第i个子块的位置,t-1表示时刻,按照匀速运动假设条件,对t时刻的运动矢量进行插值,将t-1时刻的运动矢量扩展到t时刻,即根据t-1时刻的每个子块(如图4中MP1、MP2、MPN),都可以预测一个t时刻的投射运动矢量(如图4中各实线框围绕的阴影部分),其中,表示一个新的子块位置; (2)根据与受损子块叠加的投射运动矢量计算受损子块的运动矢量; t时刻的一个受损的子块的运动矢量是由多个投射运动矢量的叠加得到,如图4所示,其中实线框区域MVjt表示受损的子块j,虚线框标示出可能的N个叠加块,每个叠加块的投射运动矢量记为MP1,MP2,...,MPN,第j块的t-1时刻运动矢量MVjt-1,为图中受损子块j的实线框区域去掉所有叠加块后得到的区域,则 其中,W1,...,WN表示权值,正比于各个投射于受损子块的前帧子块在第j块中所占的比例,WN+1是当前子块中没有被投射运动矢量覆盖的像素区域在受损子块中所占的比例,而且W1+W2+...WN+WN+1=1。如图4中所示的第2个子块在第j块所占的区域用Area(MP2)表示,第j块的实际大小用Area(MVjt)表示,则 如果是非匀速运动,运动矢量的修正过程与上述步骤(1)和(2)相同,只是在步骤(1)中的公式改为其中k和s是非匀速运动模型参数,根据用户经验确定。
错误隐蔽控制方法是视频压缩中的一个重要技术,会直接影响图像的主观质量。本发明提出了一种新的应用于视频解码端的时域错误隐蔽方法,第一,对空间邻近宏块中包含正确解码宏块的错误宏块,按照邻近宏块的运动矢量特性进行自适应运动矢量恢复;第二,对于邻近宏块中不包含正确解码宏块的错误宏块,则利用其在前后帧对应宏块的运动矢量或前帧图像的运动趋势估算出该错误宏块的运动矢量;第三,在增强的时域错误隐蔽方法中,按照特定的运动模型对估算的运动矢量进行修正,提高对运动矢量的估算精度。本发明的处理方法可广泛应用于无Qos保证的IP网上的视频通信,方法计算复杂度较低,并且在一定的丢包率和传输速率下可以获得实时高质的图像效果,具有较高的实用价值。
权利要求
1.一种视频解码的时域错误隐蔽方法,包括以下步骤
(a)读取、解析码流,并检测码流中图像帧是否有错误发生,标记受损宏块;
(b)如果判断当前帧中存在受损宏块,则继续解析下一帧获取其宏块信息,转到步骤(c),否则进行正常解码流程,执行步骤(d);
(c)对于当前帧中的受损宏块,利用本帧或前后帧相应宏块估算其运动矢量,根据估算结果在前一帧中寻找对应位置的块,用该对应宏块来替换受损宏块;
(d)将经过正常解码及错误隐蔽的图像数据送入显示缓存。
2.如权利要求1所述的方法,在所述步骤(a)中,所述检测码流中图像帧是否有错误发生,标记受损宏块,包括以下步骤
(a-1)预先为每一帧中的每一宏块设置一正确解码标志;
(a-2)根据码流语法,顺序解析帧的显示序号,判断连续解码的两帧之间序号不连续且不存在B类型帧时,此两帧之间存在丢失帧,执行步骤(b),否则执行下一步;
(a-3)读取、解析宏块,判断宏块是否被正确解码,如果是,则标记该宏块的正确解码标志,否则,继续本步骤,直到本帧解码结束。
3.如权利要求2所述的方法,在所述步骤(b)中,采用步骤(a-1)-(a-3)的方法解析下一帧码流,标记受损宏块。
4.如权利要求1所述的方法,在所述步骤(c)中,所述利用本帧或前后帧相应宏块估算其运动矢量,采用以下步骤
(i)搜索本帧中受损宏块,判断该受损宏块邻近宏块解码是否均正确,如果是,利用邻近宏块的运动矢量估算该受损宏块的运动矢量,否则,执行下一步;
(ii)判断该受损宏块的空间相邻宏块中是否存在部分以INTER模式编码的正确宏块,如果是,则利用这部分宏块的运动矢量估算该受损宏块的运动矢量,否则,执行下一步;
(iii)利用该受损宏块在其前、后帧对应宏块的运动矢量估算该受损宏块的运动矢量。
5.如权利要求4所述的方法,在所述步骤(i)中,所述利用邻近宏块的运动矢量估算该受损宏块的运动矢量,采用以下公式计算
MV=Mean(MVa,MVb,MVc)
其中,MV为该受损宏块的运动矢量,MVa~MVc为邻近宏块中相应块的运动矢量。
6.如权利要求4所述的方法,在所述步骤(ii)中,所述利用部分宏块的运动矢量估算该受损宏块的运动矢量,采用如下公式
如果左边宏块、上边宏块均为以INTER模式编码的正确宏块,则受损宏块的运动矢量MV=Mean(MVa,MVb,MVc);
如果左边宏块为以INTER模式编码的正确宏块,则受损宏块的运动矢量MV=MVa;
如果上边宏块为以INTER模式编码的正确宏块,则受损宏块的运动矢量MV=Mean(MVb,MVc);
其中,MVa~MVc为邻近宏块中相应块的运动矢量。
7.如权利要求4所述的方法,在所述步骤(iii)中,进一步包括以下步骤
采用前、后两帧对应宏块的运动矢量的均值作为该受损宏块的运动矢量;
如果该受损宏块后帧的对应宏块以INTRA模式进行编码或者同样为受损宏块,则采用前帧对应宏块的运动矢量作为该受损宏块的运动矢量;
如果该受损宏块前帧的对应宏块以INTRA模式进行编码,则采用后帧对应宏块的运动矢量作为该受损宏块的运动矢量。
8.如权利要求1所述的方法,在所述步骤(c)中,估算出所述受损宏块的运动矢量后,若该运动矢量值小于预先给定的阈值,则对该受损宏块的运动矢量值进行修正,采用以下步骤
(A)计算前帧宏块在t时刻的投射运动矢量其中i表示第i个子块的位置,表示新的于块位置,当匀速运动时,k=1,s=0;
(B)根据与受损子块叠加的投射运动矢量计算受损子块的运动矢量,采用如下公式
其中,MVjt表示受损宏块的运动矢量,MP1,MP2,....,MPN为N个投射运动矢量,W1,...,WN为权值,正比于各个投射于受损子块的前帧子块在受损宏块中所占的比例,WN+1为当前子块中没有被投射运动矢量覆盖的像素区域在受损子块中所占的比例,且W1+W2+...WN+WN+1=1。
全文摘要
本发明公开了一种视频解码的时域错误隐蔽方法,错误隐蔽效果好、计算复杂度低,包括以下步骤(a)读取、解析码流,并检测码流中图像帧是否有错误发生,标记受损宏块;(b)如果判断当前帧中存在受损宏块,则继续解析下一帧获取其宏块信息,转到步骤(c),否则进行正常解码流程,执行步骤(d);(c)对于当前帧中的受损宏块,利用本帧或前后帧相应宏块估算其运动矢量,根据估算结果在前一帧中寻找对应位置的块,用该对应宏块来替换受损宏块;(d)将经过正常解码及错误隐蔽的图像数据送入显示缓存。本发明克服了现有技术中复杂度较高的缺点,尽可能掩盖由于数据丢失而引起的图像损伤。
文档编号H04N7/68GK101188772SQ20061014582
公开日2008年5月28日 申请日期2006年11月17日 优先权日2006年11月17日
发明者睿 陈, 黄晓红, 宁 王 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1