MPEG-4视频码流的错误恢复方法和装置
技术领域
本发明涉及一种对由于信道误码严重需要进行错误恢复的方法和装置,尤其涉及针对MPEG-4视频码流出现误码时进行错误恢复的方法和装置。
背景技术
在目前的视频业务中,由于后续解码的容错性能不是很好,当信道误码比较严重时,在解码器解码失败的情况下会有很多花屏现象,严重影响视频质量。
目前对于视频错误恢复的技术主要集中在对压缩视频码流解码到像素域,然后在像素域通过各种算法来恢复。主要通过解码后像素域的图像错误块的左右上下宏块的空间相关性来恢复错误宏块的图像,通过解码后像素域的图像错误块对应位置的前一帧相邻宏块的信息来恢复当前宏块的运动矢量等信息。
这种方法的好处在于由于最后是在像素域进行错误恢复,所以错误恢复效果比较好。但是解码到像素域的错误恢复的方法有比较大的局限性,主要表现在其需要在解码器内部实现,对于第三方提供的解码器如果没有内部实现错误恢复,则后续错误恢复算法基本没有可能实现。同时,即使在像素域进行错误恢复,其计算复杂度也相当大。
发明内容
本发明的目的在于解决上述问题,提供了一种MPEG-4视频码流的错误恢复方法,能大大减少由于解码器不能正确解码而造成的主观质量下降的问题,并且与通常的像素域错误恢复相比计算复杂度低。
本发明的另一目的在于提供了一种MPEG-4视频码流的错误恢复装置。
本发明的技术方案为:本发明公开了一种MPEG-4视频码流的错误恢复方法,在像素域解码之前的压缩域进行错误恢复,该方法包括:
语法层纠错步骤:对当前的MPEG-4视频码流进行仅语法头的解码,对解码得到的语法头各个语法变量与MPEG-4标准比较,在当前语法变量不符合MPEG-4标准规定或者前后矛盾的情况下,按照MPEG-4标准生成更新的语法变量并进行编码重构,以提供符合后续解码器规范的视频码流;
宏块层纠错步骤:根据错误宏块所在的位置分别进行相应的处理,进行宏块层的错误恢复。
根据本发明的MPEG-4视频码流的错误恢复方法的一实施例,在语法层纠错步骤中,进一步包括:
依次对MPEG-4视频码流的VisualObjectSequence、VisualObject、VideoObjectLayer、VideoObjectPlane四个语法结构进行分析并纠错,按照MPEG-4标准的语义规范对该四个语法结构按照比特位逐次纠正,使MPEG-4视频码流符合后续解码器规范的要求。
根据本发明的MPEG-4视频码流的错误恢复方法的一实施例,宏块层纠错步骤进一步包括:
对于当前错误宏块在I帧内且前一帧为P帧的情况,通过相邻两帧之间的空间相关性进行错误恢复;
对于当前错误宏块在I帧之后的一个P帧内的情况,用下一个P帧替代当前错误宏块所在的P帧;
对于当前错误宏块在P帧之后的一个P帧内的情况,通过当前错误宏块所在帧的运动趋势的计算方法来预测当前错误宏块以及后续宏块的运动矢量,且不对当前错误宏块的残差像素值进行编码,而是用当前错误宏块所在帧的前一帧对应位置宏块的像素值进行错误恢复。
根据本发明的MPEG-4视频码流的错误恢复方法的一实施例,对于当前错误宏块在I帧内且前一帧为P帧的情况,细化的处理包括:
将当前帧的编码类型变为P帧,同时将从当前错误宏块开始到帧结束的宏块的编码类型改成SKIP模式,沿用前一个P帧的信息,使当前错误宏块之前的宏块的编码类型维持INTRA模式。
根据本发明的MPEG-4视频码流的错误恢复方法的一实施例,对于当前错误宏块在P帧之后的一个P帧内的情况,细化的处理包括:
以当前错误宏块所在帧的存在误码的行的上一行宏块与上一个帧与之对应的一行之间的运动矢量的差值的平均值作为运动趋势,计算公式为:
MV(trend)=(Pre_MV[0][n]-MV[0][n])/n 公式(1)
其中MV[0][n]为当前错误宏块所在帧的存在误码的行的上一行宏块的运动矢量,Pre_MV[0][n]为当前错误宏块所在帧的上一个帧与之对应的一行宏块的运动矢量,n为图像中一行宏块的数量值,MV(trend)为当前错误宏块的运动趋势;
计算当前错误宏块的残差运动矢量,计算公式为:
MV(det al)=MV(previous)-MV(media)+MV(trend) 公式(2)
其中MV(previous)为当前错误宏块前一帧对应位置宏块的运动矢量,MV(media)为预测运动矢量,MV(detal)为当前错误宏块的残差运动矢量;
将当前错误宏块的残差运动矢量进行编码,以生成更新后的MPEG-4视频码流。
本发明还公开了一种MPEG-4视频码流的错误恢复装置,位于MPEG-4解码器之前,对需要解码的MPEG-4视频码流进行预处理,该装置进一步包括:
码流读取模块,接收需要解码的MPEG-4视频码流;
语法层纠错模块,连接码流读取模块,对当前的MPEG-4视频码流进行仅语法头的解码,对解码得到的语法头各个语法变量与MPEG-4标准比较,在当前语法变量不符合MPEG-4标准规定或者前后矛盾的情况下,按照MPEG-4标准生成更新的语法变量并进行编码重构,以提供符合后续MPEG-4解码器规范的MPEG-4视频码流;
宏块层处理模块,根据错误宏块所在的位置分别进行相应的处理,获得错误宏块的残差运动矢量以及编码模式信息;
码流纠错模块,根据错误宏块的残差运动矢量以及编码模式信息通过修改比特值的方式完成对MPEG-4视频码流的纠错。
根据本发明的MPEG-4视频码流的错误恢复装置的一实施例,在语法层纠错模块中,依次对MPEG-4视频码流的VisualObjectSequence、VisualObject、VideoObjectLayer、VideoObjectPlane四个语法结构进行分析并纠错,按照MPEG-4标准的语义规范对该四个语法结构按照比特位逐次纠正,使MPEG-4视频码流符合后续解码器规范的要求。
根据本发明的MPEG-4视频码流的错误恢复装置的一实施例,宏块层处理模块进一步包括:
第一类错误宏块处理单元,对于当前错误宏块在I帧内且前一帧为P帧的情况,通过相邻两帧之间的空间相关性进行错误恢复;
第二类错误宏块处理单元,对于当前错误宏块在I帧之后的一个P帧内的情况,用下一个P帧替代当前错误宏块所在的P帧;
第三类错误宏块处理单元,对于当前错误宏块在P帧之后的一个P帧内的情况,通过当前错误宏块所在帧的运动趋势的计算方法来预测当前错误宏块以及后续宏块的运动矢量,且不对当前错误宏块的残差像素值进行编码,而是用当前错误宏块所在帧的前一帧对应位置宏块的像素值进行错误恢复。
根据本发明的MPEG-4视频码流的错误恢复装置的一实施例,该第一类错误宏块处理单元的具体处理是将当前帧的编码类型变为P帧,同时将从当前错误宏块开始到帧结束的宏块的编码类型改成SKIP模式,沿用前一个P帧的信息,使当前错误宏块之前的宏块的编码类型维持INTRA模式。
根据本发明的MPEG-4视频码流的错误恢复装置的一实施例,该第三类错误宏块处理单元进一步包括:
错误宏块运动趋势计算单元,以当前错误宏块所在帧的存在误码的行的上一个行宏块与上一个帧与之对应的一行之间的运动矢量的差值的平均值作为运动趋势,计算公式为:
MV(trend)=(Pre_MV[0][n]-MV[0][n])/n 公式(1)
其中MV[0][n]为当前错误宏块所在帧的存在误码的行的上一行宏块的运动矢量,Pre_MV[0][n]为当前错误宏块所在帧的上一个帧与之对应的一行宏块的运动矢量,n为图像中一行宏块的数量值,MV(trend)为当前错误宏块的运动趋势;
残差运动矢量计算单元,计算当前错误宏块的残差运动矢量,计算公式为:
MV(det al)=MV(previous)-MV(media)+MV(trend) 公式(2)
其中MV(previous)为当前错误宏块前一帧对应位置宏块的运动矢量,MV(media)为预测运动矢量,MV(detal)为当前错误宏块的残差运动矢量。
本发明对比现有技术有如下的有益效果:本发明主要是在压缩域进行错误恢复,而并未进行像素域的解码,与传统的像素域错误恢复相比复杂度低。而本方案的实现是在解码器之前添加一个预解码模块,将MPEG-4视频码流恢复成符合相应标准的规范码流,以便后续解码器能够正确解码,从而保证后续解码不会出现花屏等严重的问题。由于其通用性好独立性高,添加在MPEG-4解码器前面,所以不会对后续的解码器产生依赖。
附图说明
图1是本发明的MPEG-4视频码流的错误恢复方法的一个较佳实施例的流程图。
图2是本发明的MPEG-4视频码流的错误恢复装置的一个较佳实施例的原理图。
图3是本发明的宏块层处理模块的细化原理图。
具体实施方式
下面结合附图和实施例对本发明作进一步的描述。
MPEG-4视频码流的错误恢复方法的实施例
图1示出了本发明的MPEG-4视频码流的错误恢复方法的实施例的详细流程。请参见图1,下面是对本方法流程中各个步骤的说明。
本实施例的方法是在像素域解码之前的压缩域进行的错误恢复。主要是分为两个阶段的纠错,第一个阶段是语法层纠错步骤,第二个阶段是宏块层纠错步骤。在第一阶段,主要是对当前的MPEG-4视频码流进行仅语法头的解码,对解码得到的语法头各个语法变量与MPEG-4标准比较,在当前语法变量不符合MPEG-4标准规定或者前后矛盾的情况下,按照MPEG-4标准生成更新的语法变量并进行编码重构,以提供符合后续编码器规范的视频码流。在第二阶段,是根据错误宏块所在的位置分别进行相应的处理,进行宏块层的错误恢复。
步骤S100:进行语法层纠错。
语法层的纠错是对当前的MPEG-4视频码流进行仅语法头的解码,对解码得到的语法头各个语法变量与MPEG-4标准进行比较,在当前语法变量不符合MPEG-4标准规定或者前后有矛盾的情况下,按照MPEG-4准备生成更新后的语法变量并进行编码重构,以提供符合后续解码器规范的视频码流。
进一步的,依次对MPEG-4视频码流的VisualObjectSequence、VisualObject、VideoObjectLayer、VideoObjectPlane四个语法结构进行分析并纠错,按照MPEG-4标准的语义规范对这四个语法结构按照比特位逐次纠正,使MPEG-4视频码流符合后续解码器规范的要求。
步骤S102:对当前帧中的每一个宏块进行处理。
由于MPEG-4是压缩编码码流,所以一旦一帧中某一个宏块出现了无法,其之后的当前帧的所有信息都不能利用,因此需要一个预解码错误恢复的处理。
步骤S104:判断当前误码宏块所在的帧是否为I帧且前一帧是否为P帧。如果成立,进入步骤S106,如果不成立,进入步骤S108。
步骤S106:将当前帧的编码类型变为P帧,同时将当前错误宏块开始到帧结束的宏块的编码类型改为SKIP(跳过编码模式)模式,并沿用前一个P帧的信息,使当前错误宏块之前的宏块的编码类型维持INTRA(帧内编码模式)模式。
步骤S108:判断当前错误宏块是否在工帧之后的一个P帧内。如果成立则进入步骤S110,如果不成立则进入步骤S112。
步骤S110:用下一个P帧替代当前错误宏块所在的P帧。
步骤S112:判断当前错误宏块是否在P帧之后的一个P帧中。如果成立则进入步骤S114,否则返回步骤S102中进入下一个宏块的处理。
步骤S114:获得当前错误宏块的运动趋势。
在本实施例中是使用通过当前帧的运动趋势的计算方法来预测当前错误宏块及后续宏块的运动矢量,而宏块的残差像素值并不编码仍用前一帧对应位置宏块的像素值的方法来做错误恢复。
步骤S116:通过前一帧同位置宏块的运动矢量、当前宏块预测运动矢量、运动趋势计算当前错误宏块的残差值。
首先,以当前错误宏块所在帧的存在误码的上一行宏块与上一个帧与之对应的一行宏块之间的运动矢量的差值的平均值作为运动趋势,计算公式为:
MV(trend)=(Pre_MV[0][n]-MV[0][n])/n 公式(1)
其中MV[0][n]为当前错误宏块所在帧的存在误码的行的上一行宏块的运动矢量,Pre_MV[0][n]为当前错误宏块所在帧的上一个帧与之对应的一行宏块的运动矢量,n为图像中一行宏块的数量值,MV(trend)为当前错误宏块的运动趋势。
其次,计算当前错误宏块的残差运动矢量,计算公式为:
MV(det al)=MV(previous)-MV(media)+MV(trend) 公式(2)
其中MV(previous)为当前错误宏块前一帧对应位置宏块的运动矢量,MV(media)为预测运动矢量,MV(detal)为当前错误宏块的残差运动矢量。
步骤S118:判断当前错误宏块是否为最后一个宏块。如果是则进入步骤S120,否则返回步骤S102进行下一个宏块的处理。
步骤S120:重新生成新的MPEG-4码流。
将当前错误宏块的残差运动矢量进行编码,以生成更新后的MPEG-4视频码流。
MPEG-4视频码流的错误恢复装置的实施例
图2示出了本发明的MPEG-4视频码流的错误恢复装置的实施例。错误恢复装置位于MPEG-4解码器之前,对需要解码的MPEG-4视频码流进行预处理。请参见图2,本实施例的MPEG-4视频码流的错误恢复装置包括依次连接的四个模块:码流读取模块10、语法层纠错模块12、宏块层处理模块14以及码流纠错模块16。
码流读取模块10接收需要解码的MPEG-4视频码流,将接收到的MPEG-4视频码流传递给下一个的语法层纠错模块12。
语法层纠错模块12对MPEG-4视频码流进行仅语法头的解码,对解码得到的语法头各个语法变量与MPEG-4标准比较,在当前语法变量不符合MPEG-4标准规定或者前后矛盾的情况下,按照MPEG-4标准生成更新的语法变量并进行编码重构,以提供符合后续MPEG-4解码器规范的MPEG-4视频码流,然后将处理后的码流交给下一个的宏块层处理模块14。
在语法层纠错模块12中,依次对MPEG-4视频码流的VisualObjectSequence、VisualObject、VideoObjectLayer、VideoObjectPlane四个语法结构进行分析纠错,按照MPEG-4标准的语义规范对这四个语法结构按照比特位逐次纠正,使MPEG-4视频码流符合后续解码器规范的要求。在经过语法层纠错模块12的处理后将已经重新生成的语法层纠正好的MPEG-4码流传递给下一个的宏块层处理模块14。
宏块层处理模块14根据错误宏块所在的位置分别进行相应的处理,获得错误宏块的残差运动矢量以及编码模式信息。请同时参照图3,宏块层处理模块14进一步包括第一类错误宏块处理单元140、第二类错误宏块处理单元142以及第三类错误宏块处理单元144。
第一类错误宏块处理单元140是对当前错误宏块在I帧内且前一帧为P帧的情况进行处理,主要是通过相邻两帧之间的空间相关性进行错误恢复。具体的处理过程是将当前帧的编码类型变为P帧,同时将从当前错误宏块开始到帧结束的宏块的编码类型改为SKIP模式,并沿用前一个P帧的信息,使当前错误宏块之前的编码类型维持INTRA模式。
第二类错误宏块处理单元142是对当前错误宏块在I帧之后的一个P帧内的情况进行处理,用下一个P帧替代当前错误宏块所在的P帧。
第三类错误宏块处理单元144是对当前错误宏块在P帧之后的一个P帧内的情况进行处理,通过当前错误宏块所在帧的运动趋势的计算方法来预测当前错误宏块以及后续宏块的运动矢量,且不对当前错误宏块的残差像素值进行编码,而是用当前错误宏块所在帧的前一帧对应位置宏块的像素值进行错误恢复。
对于这个第三类错误宏块处理单元144,是由错误宏块运动趋势计算单元1440和残差运动矢量计算单元1442共同构成。
对于错误宏块运动趋势计算单元1440,以当前错误宏块所在帧的存在误码的行的上一个行宏块与上一个帧与之对应的一行宏块之间的运动矢量的差值的平均值作为运动趋势,计算公式为:
MV(trend)=(Pre_MV[0][n]-MV[0][n])/n 公式(1)
其中MV[0][n]为当前错误宏块所在帧的存在误码的行的上一行宏块的运动矢量,Pre_MV[0][n]为当前错误宏块所在帧的上一个帧与之对应的一行宏块的运动矢量,n为图像中一行宏块的数量值,MV(trend)为当前错误宏块的运动趋势。
对于残差运动矢量计算单元1442,计算当前错误宏块的残差运动矢量,计算公式为:
MV(det al)=MV(previous)-MV(media)+MV(trend) 公式(2)
其中MV(previous)为当前错误宏块前一帧对应位置宏块的运动矢量,MV(media)为预测运动矢量,MV(detal)为当前错误宏块的残差运动矢量。
最后,宏块层处理模块14将新的残差运动矢量以及编码模式信息传输给下一个的码流纠错模块16。码流纠错模块16根据错误宏块的残差运动矢量以及编码模式信息通过修改比特值的方法完成对MPEG-4视频码流的纠错。
本发明的主要改进点在于,一是在压缩域进行错误恢复而并未进行像素域解码,一是通过计算当前帧的整体运动趋势进行错误恢复。与传统的像素域错误恢复相比复杂度低、通用性好、独立性高,由于处理是在MPEG-4解码器之前进行的,因而不会对后续的解码器产生依赖。
上述实施例是提供给本领域普通技术人员来实现或使用本发明的,本领域普通技术人员可在不脱离本发明的发明思想的情况下,对上述实施例做出种种修改或变化,因而本发明的保护范围并不被上述实施例所限,而应该是符合权利要求书提到的创新性特征的最大范围。