解码压缩运动图象数据 的方法及解码器 本发明涉及解码压缩运动图象的方法,及采用该法的解码器,特别涉及适于压缩数据有错时的方法及解码器。
有许多熟知的压缩运动图象数据的方法。其中一个是可变长编码。如国际电信联盟的电信标准组(ITU-T)的建议H.261规定了将视频数据流分组成图象区并采用一指示每组开始的一开始码的可变长编码方法。每个图象区既可用区内编码也可用区间编码。具体细节将由本发明的描述给出。
使用变长编码时,当编码数据流有一个错误时,解码器会丢失与码字边界的同步。当解码器遇到一非法码字或其它违背编码规则的东西,就识别出同步的丢失。为使图象质量的下降为最小,传统的解码器将丢弃从识别出错误开始至可靠地重新获得同步之间地所有数据;H.261编码法中,这点是下一开始码。被丢弃的数据由运动图象的前一帧的替代解码数据来替代。
一个问题是解码器不能立即识别出错误,当错误使所需的码字变为另一不同长度的合法码字时出现这种情形。有时就这样产生了一串不对但合法的码字。这样解码器将解码一段不正确的数据而不知道它有错,并输出该错误的数据。不正确的解码数据将造成图象质量的严重下降,特别是采用区内码编码图象区时。
当一错误使边界同步丢失时,一些变长编码能快速、自动地重新获得正确的同步,其概率很高且无需等待一特殊码如开始码的出现。然而采用这些自己再同步的码还有另一个问题,即有时在重新获得正确的同步之前获得不正确的同步。这样识别一错误并丢弃一段非解码数据后,解码器将识别一合法码字并假定已再次获得同步,但实际上该被识别的码字包含两相邻码字的片段。此时错误数据也被当成正确数据输出。
上述问题并不限于变长编码。任何压缩运动图象的编码法中,由于一差错使一段数据被变成不可用时,可能会错误地解码该不可用段之前或之后的可用解码数据,且该不正确的解码数据会引起讨厌的图象缺陷。
因此本发明的一目的是防止由在被识别出的错误之前或之后的未被识别出的解码错误引起的运动图象质量的下降。
当表示一运动图象的一段压缩编码数据流由于错误被变成不可用时,本发明的解码法丢弃一段邻近该不可用段的解码数据,并用其它解码数据代替被丢弃的解码数据。该不可用段的一侧或两侧的解码数据可被丢弃。
以不同的方式编码不同图象区的数据时,优选地本发明的方法为每一方式设定一独立的丢弃范围。当每一图象区占编码数据流的一节时,本发明的解码方法优选地丢弃一特定数目的图象区,当每一图象区占编码数据流中非邻近的几节时,本发明的解码方法优选地丢弃在一指定范围内有任一编码数据的所有图象区的解码数据。
本发明的移动图象解码器含一解码数据并识别错误的解码单元,一存贮解码数据的图象存贮器,及一设定应丢弃的解码数据范围的丢弃单元。
附图中:
图1是一标准视频编码器与解码器的框图;
图2是一运动图象数据的标准序列;
图3是一块运动图象数据的变换系数的编码序列;
图4是一编码数据流的一般结构;
图5是一标准视频多编码体系;
图6是变长编码表;
图7是根据本发明实施方式1的运动图象解码器的框图;
图8是实施方式1中对错误的处理;
图9是一无错误的解码图象;
图10是两宏块中有错误时的解码图象;
图11是说明实施方式1的工作的流图;
图12是采用一自再同步码时,有一错之后的再同步;
图13是几段正确与错误解码的数据,及不可解码的数据;
图14是根据本发明实施方式2的运动图象解码器的框图;
图15是实施方式2对一错误的处理;
图16与17是实施方式2的工作流图;
图18是根据本发明实施方式3的运动图象解码器的一部分的框图;
图19是实施方式3对一错误的处理;
图20是根据本发明实施方式4的运动图象解码器的一部分的框图;及
图21是实施方式4对一错误的处理。
将参照所示附图来描述本发明解码方法的实施方式。然而首先将简短描述标准H.261视频编码-解码器(codec),及H.261编码方法。该说明是有关的,因本发明的解码器能用于解码H.261编码数据流。
图1是ITU-T建议H.261中描述的视频codec的框图。该codec含一将数字视频信号转为编码比特流的视频编码器1,和执行相反功能的视频解码器3。视频编码器1含一源编码器5,视频复合编码器7,传输缓冲器9,传输编码器11,及控制器13。视频解码器3含一源解码器15,视频复合解码器17,接收缓冲区19,与接收解码器21。
源编码器5通过众多熟知的方法,含帧间预测,运动补偿,离散余弦变换及量化来压缩数字视频信号。视频复合编码器7还通过zigzag游程编码和变长编码来压缩源编码器5的输出,并加入头信息,开始码,及其它辅助信息。传输缓冲器9在传送前保存视频复合解码器7的输出。传输编码器11将缓冲器9中的数据分为帧以经一通信信道传输,加入纠错码,若需要还可加入冗余数据,输出编码比特流。控制器13监测传输缓冲器9中的数据量并控制源编码器5和视频复合编码器7以阻止缓冲器溢出。源解码器15,视频复合解码器17及接收缓冲器21分别执行与源编码器5,视频复合编码器7及传输编码器11相反的功能。
参考图2,图1视频编码器1接收的视频信号的格式为标准通用中间格式(CIF)或四分之一中间格式(QCIF)。两种格式均采用四级:图象层23,块组层25,宏块层27,块层29。CIF图象有12个块组,而QCIF仅有3个。
每个块组25是标号为1至33的宏块的矩形阵列。每个宏块27含4个亮度块(块1至4)与两个色度块(5与6)。这两色度块覆盖的区域与4个亮度块加起来的图象区域相同。块29是8×8亮度或色度阵,相应于64亮度或色度象元的正方图象区。图2中的数字指块组25,宏块27,块29在编码数据流中的序列。无数据的块29与宏块27可被省略。
图3为经源编码器5中离散余弦变换后的亮度或色度块30的结构,64个值为变换系数,从左至右水平空间频率增加,从上至下垂直空间频率增加。第一个变换系数或dc系数(图中标为1)是块中的平均信号电平。变换系数按图3数字所示顺序进行zigzag编码,以使较低频率的系数可被首先编码。由于预测与量化。大多数系数为零,因此编码器成对每个零的行程长度和随后的非零系数的值。
图4是H.261视频复合编码器7输出数据流的一般结构。固定长度/项的比特长度由整个项的数字来表示。图5为编码体系,方块包含的是固定长度的项,圆角框内为变长项。表1列出图中的缩写词:
表1缩写词CBP 编码块模式EOB 块结束GBSC GOB开始码GHEAD GOB头GOB 块组MB 宏块MBA 宏块地址MQUANT 宏块类型MTYPE 运动矢量数据MVD 图象头PHEAD 图象起始码PSC 变换系数TCOEFF
图象与GOB开始码PSC与GBSC是下列能被视频复合解码器17无误地识别的比特串。词“开始码”其后为这些开始码中一个:
PSC: 0000 0000 0000 0001 0000
GBSC:0000 0000 0000 0001
MTYPE是一变长项,指出源编码器5是以块内还是块间方式对宏块编码的。块内方式中,编码实际的亮度、色度值。块间方式中,估计这些值而对估计误差编码。对块间方式,MTYPE也指出估计过程中是否采用运动补偿和环路滤波器。
省略了对图4与5中其它项的描述;其细节见ITU-T建议H.261。
图6是一部分对MBA,MTYPE,MVD,CBP及TCOEFF项的变长编码表。这些中每一个都将使用不同的变长编码规则。MTYPE编码表中,“+Q”指新量化步尺寸为MQUANT项规定的宏块。
将参考图7至11来描述本发明的实施方式1。其一般编码结构和分级数据结构如图1至图6所示。各层由图2中相同标号标明。
图7为实施方式1的运动图象解码器。该解码器执行图1中源解码器15和视频复保解码器17的功能。该解码器含一解码单元31,用于解码取自图1接收缓冲器19的压缩数据,并输出已解码数据;一参考图象存贮器33,用于在块间模式的解码中,保存已解码的前一帧的数据;当前图象存贮器35,它是保存当前正被解码的帧的工作区;一模式存贮器37,用于保存指明当前帧中每一宏块解码方式(块间或块内)的信息;一丢弃单元39,当出现错时判断应丢弃哪个解码数据。
当块间方式中的参考帧为前一帧时,参考图象存贮器33与当前图象存贮器35可互相对换。在完成了对当前帧的解码后,存贮当前解码数据的当前图象存贮器成为解码下一帧时的参考图象存贮器,存贮了不再需要的数据的参考图象存贮器成为解码下一帧时的当前图象存贮器。
下面描述实施方式1的工作。
解码单元31执行的解码过程从一同步点至下一同步点。同步点是在该点处已检测到开始码(PSC OY GBSC)。一个单元的处理解码一个块组。当解码块组中每一宏块时,被解码数据存于当前图象存贮器35,指出宏块是以块内或块间方式被解码的信息存于方式存贮器37中。
解码单元31根据图5所示体系规则解复用输入的压缩编码数据流,并依据已部分示于图6的编码规则,识别开始码,解码每个图象头(PHEAD)和GDB头(GHEAD)中的定长码,解码宏块层与块层中的变长码。
解码变长码时,解码单元31可能遇到一串不合理因而不能被解码的码字的比特。解码单元31则识别出一错。随后解码单元31停止解码,并在输入编码数据流中寻找下一开始码。直至识别出下一开始码,通常在当前块组末,才恢复解码。
出错后解码单元31识别下一开始码时,丢弃单元39划出两范围的解码宏块数据,它们延伸至识别出错误的点。第一范围是应丢弃的以块内方式解码的宏块(其后称内宏块)。第二范围是应丢弃的以块间方式解码的宏块(其后称间宏块)。
解码单元31通过从当前图象存贮器35中删除这些块来丢弃已解码的第一范围内的内宏块,和第二范围内已解码的间宏块。被丢弃的宏块由参考图象存贮器33中的相应宏块替代。解码单元31也从参考图象存贮器33拷贝宏块以产生解码数据来替代从识别错误处至下一同步点之间的非解码数据。
图8是有一错的编码数据流,以图示第一与第二范围。如一传输通道错误发生在点X,大多数情形下,错误很难被立即发现。错误在较后的点Y被发现,通常在此点错误第一次产生了一非法码字。解码单元31不对点Y与下一开始码(SC)间的数据译码。这样两开始码间的编码数据单元含正确解码段41,错误解码段43与未解码段45。
丢弃单元39划出的第一范围47为从识别出错误的点Y至退后的点Z1之间。第二范围49为从点Y至退后的点Z2之间的较短距离。此例中,点Z1位于出错点X之前,点Z2位于点X之后。因此所有错误解码的内宏块及一些正确解码的内宏块被丢弃,而一些错误解码的间宏块被保留。
图9与10说明了这种丢弃策略的原因。图9是一无错的解码图象。图10是在内宏块51与间宏块53出现了典型错误的相同图象,在错误解码的内宏块51,图象被完全破坏。然而在错误解码的间宏块53,图象的损坏很小,因为间宏块中的编码数据对从前一帧中的参考宏块中估计出的数据作了相对而言较小的改动。损坏的间宏块53看起来象有一小量叠加噪声的正常宏块。
丢弃单元39将第一范围47设成距错误识别点足够远是为了很确定地获取所有错误解码的内宏块,将第二范围49设成足够短是为了仅丢弃最可能出错的间宏块。由于第一范围相对较长,一些正确解码的内宏块被不必要地丢弃了,但由于内宏块出现频率较低,这些不必要的替代引起的图象质量下降较轻微。由于第二范围较短,一些错误解码的间宏块被输出,但这仅引起轻微的图象质量下降。如图10所示,间宏块中大部分解码数据是从参考图象导出,而不是从编码宏块本身。
可通过模拟获得设定第一与第二范围的合适规则。规则可考虑解码数据值。如大数据值的间宏块比小数据值的间宏块更有可能被错误解码。
下面参照流图11描述一块组的解码。
步S101中解码单元31解码一宏块,步S102中判断该宏块是否含一可识别的错误。若没有,步S103中将解码宏块数据存于当前图象存贮器35,步S104中将宏块的解码方式(块内或块间)记入方式存贮器37中。然后步S105中解码单元31判断该解码宏块是否是块组中最后一宏块,若是则结束块组的解码,若不是,解码过程回至步S101以解码下一宏块。
步S102中识别出一错误时,解码单元31停止解码,在步S106中转至在编码数据流中寻找下一开始码。然后步S107中,丢弃单元39如上所述设置第一与第二范围。步S108中,解码单元31丢弃第一范围中已解码的内宏块,丢弃第二范围中已解码的间宏块。
步S109中,解码单元31用参考图象存贮器33中相应宏块代替未解码(步S106)的宏块,或已解码和丢弃的(步S108)宏块。
通过这种处理,实施方式1将错误解码的内宏块引起的严重图象损坏的可能性减至可忽视的层度,避免使用极可能被错误解码的间宏块,而不用过度牺牲正确的编码数据。
下面将描述实施方式2。实施方式2使用了自再同步的变长码。其编码规则不同于图6,4与图5中所示。仍采用图2所示的分层结构,尽管不限于此。
参照图12,在块组中点Y发现一错误时,变长码的性质使在下一开始码之前的点V处重建与变长码字边界的同步。在此点V可再次解码;仅点Y与V之间的阴影部分不可解码。
通常能正确地重建同步,但并不总是如此;有时出现错误的再同步。错误的再同步通常会由于出现一个新错而被迅速识别,但也可能由于巧合错误的再同步能产生一些合法的码字,然后再由于巧合,在识别任何新错之前滑进正确的同步。
此外,同步可能在点Y之前已实际上丢失。这种可能的情形相应地绘于图13,其中错误在点X但直至点Y才被识别,同步在点V被错误地重建,然后在点W正确地重建而没有发现新错,该块组被这些点分成5段:正确解码段55,错误解码段57,未解码段59,另一错误解码段61,另一正确解码段63。
图14是根据实施方式2的运动图象解码器,与图7中相同的标号指等效的部分。参考图象存贮器33,当前图象存储器35,方式存储器37与实施方式1中的相应元件一致。解码单元31与丢弃单元39大体类似于实施方式1中的相应元件,但差别在于随后描述的工作。再同步单元65在识别一错误时监督解码器的工作。
图15是实施方式2的丢弃单元39的工作。点V,W,X,Y将块组分为如图13的5段55,57,59,61与63。如同实施方式1,当已在点Y识别出一错误并发现下一开始码时,丢弃单元39将点Y与退后的点Z1设为第一范围67,点Y至退后的Z2设为第二范围69。此外,丢弃单元39将再同步点V至前面的点Z3与Z4分别设为第三范围71与第四范围73。
所有不可解码段59的数据当然被丢弃。此外,丢弃了第一范围67与第四范围73中的已解码内宏块,丢弃了第二范围69与第三范围73中的已解码间宏块。第三范围71小于第四范围73的原因与第二范围69小于第一范围67的相同。
尽管图15图形上将第一、第四范围67与73示为长度大约相同,第四范围73优选地短于第一范围67,这是因为点V之后的未识别错误的间隔61通常不存在。出于相同原因,第三范围71优选地短于第二范围69。与实施方式1相同,设置范围的规则可通过模拟得到,并可考虑解码数据的值。
下面参照图16、17的流图描述实施方式2的工作。
图16中的步S201至S205与图11中相应的步S101至S105相同。只要未识别出错误,解码单元31依次解码宏块(步S201),将解码数据置于当前图象存储器35(步S203),并将每个宏块的方式记于方式存储器37(步S204)。
步S202中发现一错误时,处理转至图17的分支。在再同步单元65的监督下,解码单元31继续尝试解码数据,逐位处理直至识别出一合法码字并重建同步(步S206)。再同步单元65则将解码单元31导入含步S207至S211的循环—它们大致与图11中的步S101至S105相同。只要未发现新的错误,解码单元31重新逐块解码宏块(步S207),将解码数据放于当前图象存贮器35(步S309),将每个宏块的方式记于方式存贮器37(步S210)。
若步S208中发现一新错误,则在步S215中,再同步单元65引导解码单元丢弃含从重建同步的点至新错误的点之间的数据的所有宏块。采用这步部分是用于防止再错误地同步。另外,根据宏块的编码方式,当同一块组中出现2个错误时,即使一些数据已被正确解码,两错误之间的所有宏块也许均不可用。例如这种情形可能是由于宏块地址的差分编码。
步S215之后,回至步S206,并重复再同步过程。
步S211中识别出块组尾时,丢弃单元39在步S212中设置第一、第二、第三、第四范围。步S1213中,解码单元31丢弃第一、第四范围中已解码的内宏块,丢弃第二、第四范围中已解码的间宏块,步S214中,这些当前图象存储器35的被丢弃宏块由参考图象存贮器33中相应宏块替代。步S215中丢弃的或由于同步丢失不能被解码的其它宏块被类似地代替。
然后解码过程转至图16底并结束。
根据宏块的编码方式,也许需要另外的解码步,如从块组尾往后工作的步以恢复差分解码宏块地址。这些额外步可被省略以避免无关的细节来干扰本发明。
实施方式2扩展了实施方式1的效果,包括了位于块组中被发现的第一个错之前的间隔,和在识别出块组中最后一个错误时在最后的再同步之后的间隔。丢弃第一至第四范围中所有内宏块将使用错误解码内宏块的可能性减至可忽视的程度。丢弃第二至第三范围中所有间宏块避免了使用最可能被错误解码的间宏块,而没有丢弃太多已正确解码的间宏块。
前一实施方式设置第一、第二、第三、第四范围时,丢弃单元39能以不同方式说明点X与点V的距离。第三、第四实施方式将给出示例。实施方式3实用于每个宏块占用一个连续的编码数据流部分,如图5的编码体系所隐含的。实施方式4用于每个宏块占用编码数据流中2个或多个不连接的部分。
图18是根据实施方式3的运动图象解码器的相关部分。解码单元31与丢弃单元39类似于实施方式1或2中的相应元件。码序列存储器75保存说明宏块在编码数据流中出现的序列的信息。如该序列是宏块经一通信信道被传送的顺序。
实施方式1或2中出现的其它元件也出现于实施方式3,但被省略以简化图。
图19是实施方式3中的一编码数据流,以码序列存贮器75中规定的顺序示出了宏块A,B,C,D。每个宏块被编码为一个编码数据部分,解码单元31在宏块D中点Y处识别出一错误,并使该宏块不可解码。
丢弃单元39规定第一范围47为从第一不可解码宏块D回退三个宏块。换句话,内宏块被丢弃的范围为宏块,A,B,C。第二范围49仅从第一不可解码宏块D回退一宏块,因此间宏块被丢弃的范围仅含宏块C。例如丢弃单元39给解码单元31的指令是无条件地丢弃宏块C,若宏块A,B是内宏块则丢弃它们。
采用一自再同步码时,丢弃单元39类似地设置第三、第四范围,例如,命令解码单元31无条件地丢弃再同步点之后的第一数目的宏块,并丢弃再同步点之后的第二数目宏块内的内宏块。第一数目可以是0。
实施方式3按实施方式1或2中描述的流图工作,只是增加了一步将宏块在编码数据流中出现的序列存于码序列存储器75。例如该步可插入图11的步S104之后,或图16的步S204之后与图17的步S210之后。步S107和S212中设置范围时,丢弃单元39参考存于码序列存储器75中的序列信息。
实施方式3的优点是丢弃单元3能给解码单元31一个它能轻易执行的简单指令。解码单元31与丢弃单元无需知道点Z1,Z2,Z3,Z4在编码数据流中确切的位置;它们仅需以码序列存贮器75给出的顺序计数当前图象存贮器35中保存的已解码宏块。
若宏块总是以相同规定的序列出现于编码数据流中,可省略码序列存贮器75。
图20是根据实施方式4的一图象解码器的相关部分。解码单元31和丢弃单元39又类似于实施方式1或2中的相应元件。码位置存储器77保存说明属于每个宏块的各部分编码数据在接收的编码图象信息流中的相对位置。出现于实施方式1或2中的其它元件也出现于实施方式4,但为简化图而被省略了。
图21是实施方式4中的部分编码数据流。每个宏块的编码数据含两个分离的部分,其间插入了属于不同宏块的部分。在宏块C的部分C(1)中的点Y发现一错误。
丢弃单元39将第一范围设为从点Y回退一定数目的码字至点Z1,将第二范围设为从点Y回退较少数目的码字至点Z2。参考存于码位置存贮器77中的信息,丢弃单元39命令解码单元31丢弃含有位于点Z1与点Y间的编码数据的所有内宏块,并丢弃含有位于点Z2与点Y的编码数据的所有宏块。图21中,若宏块A是内宏块则被丢弃,而宏块B被无条件地丢弃。
采用自再同步码时,丢弃单元39以相似的方式决定哪些在再同步点之后的宏块应被无条件地丢弃,哪些宏块应被丢弃若它们是内宏块。
实施方式4按实施方式1或2中的流图工作,增加了暂时地保存各部分宏块数据直至接收了整个宏块的步,和将每个宏块部分的相对位置信息存入码位置存贮器77中的步。这些步可插于图11的步A101之前,如或图16步S201之前与图17步S207之前。步S107与S212中,丢弃单元39参考了存于码位置存贮器77中的信息。等待解码时码位置存贮器77也能用于一宏块数据的暂时保存器。
象实施方式3,实施方式4的优点是丢弃单元39能给解码单元31一它能轻易执行的指令。
尽管前述实施方式是用图2所示的宏块与组块的分层结构来描述的,本发明不限于此特定结构。前述实施方式可采用任何将图象以某种方式分区的编码方式,并基于该区选择块内或块间编码方式。
编码数据流无需嵌入开始码。可以其它方式,包括在低于编码数据层的层次上的方式,建立同步。
错误检测不限于检测非法码字。也能识别体系错误,如采用奇偶位或其它纠错码。
前述实施方式仅用于展示本发明丢弃被错误变成不可用的数据之前或之后的已解码图象数据的概念。该概念的应用与编解码方式的数目与类型无关。如本发明实用于所有图象数据均以块内方式编码。本发明也适用于多于两种方式的情形,仅为每种方式的解码数据的丢弃设置不同范围即可。
本发明可以硬件、软件或混合方式实现。
技术人员能在下述权利要求的范围内作进一步的改进。