图像编码和解码的方法、编码和解码设备以及计算机程序与流程

文档序号:11460251阅读:166来源:国知局
图像编码和解码的方法、编码和解码设备以及计算机程序与流程

本申请是申请号为201280031335.9,申请日为2012年6月20日,题为“用于对图像编码和解码的方法、编码和解码设备以及相应的计算机程序”的中国发明专利申请的分案申请。

本发明一般属于图像处理的领域,且更准确地属于数字图像和数字图像序列的编码和解码。

本发明由此可特别应用于在目前的数字视频编码器(mpeg,h.264等)或未来的视频编码器(itu-t/vceg(h.265)或iso/mpeg(hvc))中实现的视频编码。



背景技术:

目前的视频编码器(mpeg、h264等)使用视频序列的逐块表示。图像被分为宏块,每个宏块本身可以被分为块,并且每个块或宏块通过图像内或图像间预测来编码。于是,特定的图像通过空间预测(内预测)来编码,而其他图像在相对于一个或多个被编码-解码的参考图像的时间预测(间预测)、在本领域技术人员已知的运动补偿的帮助下进行编码。此外,针对每个块,可以对与原始块减去预测相对应的残留块进行编码。该块的系数可以在变换之后被量化,然后被熵编码器编码。

内预测和间预测需要之前已经被编码和解码的特定块可用,从而在解码器上或在编码器上被用于预测当前块。图1示出了这样的预测编码的示例性例子,其中,图像in被分为块,该图像的当前块mbi正在关于预订数量的之前被编码和解码的块mbr1、mbr2和mbr3进行预测编码,例如如阴影箭头所示。上述三个块特别包含紧接当前块mbi左侧的块mbr1,以及分别仅紧接当前块mbi上方和右上方的两个块mbr2和mbr3。

熵编码器在这里更为感兴趣。熵编码器以其到达的顺序来编码信息。典型地实现“光栅扫描”类型的块的逐行遍历,如图1所示通过引用prs,从图像左上角的块开始。对于每个块,用来表示块所必须的各个信息项(块的类型、预测模式、残留系数等)被顺序分发到熵编码器。

已知在avc压缩标准(也被称为iso-mpeg4第10部分和itu-th.264)中引入的被称为“cabac”(上下文适应二进制算术编码器)的足够复杂的有效的算术编码器。

熵编码器实现各个概念:

-算术编码:编码器例如初始在文档j.rissanenandg.g.langdonjr,“universalmodelingandcoding,”ieeetrans.inform.theory,vol.it-27,pp.12-23,jan.1981中描述的编码器使用符号出现概率来对该符号进行编码;

-上下文适应:在这里,这包括适应要编码的符号的出现概率。一方面,快速实现学习。另一方面,依赖于之前被编码的信息的状态,特定的上下文被用于编码。对于每个上下文,存在固有的符号出现概率与之对应。例如,上下文对应于根据给定配置来编码的符号的类型(残留系数的表示、编码模式的信号等),或者邻居的状态(例如在邻居中选择的“内”模式的数量等)。

-二进制化:实现要编码的符号的比特序列的成形。随后,这些各个比特被相继分发到二进制熵编码器。

于是,针对使用的每个上下文,该熵编码器实现一种系统,针对所考虑的上下文来快速学习关于之前被编码的符号的概率。该学习基于对这些符号进行编码的顺序。典型地,根据如上所述的“光栅扫描”类型的顺序来遍历图像。

在可以是0或1的给定符号b的编码期间,通过下列方式来更新当前块mbi的该符号的出现概率pi的学习:

其中,α是预定值例如0.95,pi-1是在该符号最后出现时计算的符号出现概率。

图1示出了这样的熵编码的示例性例子,其中,图像in的当前块mbi被熵编码。在块mbi的熵编码开始时,所使用的符号出现概率是之前被编码和解码的块的编码之后获得的概率,根据上述“光栅扫描”类型的块的逐行遍历,该块正好在当前块mbi的前面。仅为了图的清楚,在图1中通过细箭头针对特定的块来表示这样的基于块和块的依赖性的学习。

该类型的熵编码的缺点在于,考虑到块的“光栅扫描”遍历,在对位于一行开始的符号进行编码时,使用的概率主要对应于在前一行结束位置的符号所看到的那些概率。现在,考虑到符号概率的可能的空间变化(例如,对于和运动信息项相关的符号,位于图像右侧部分的运动可以和在左侧部分看到的不同,并且因此对于随后的局部概率来说也是类似的),可以看到概率的局部一致性的缺失,由此可能增加编码期间的效率损失。

为了限制该现象,已经提出了对块的遍历顺序的调整,目标是确保更好的局部一致性,但编码和解码仍保持顺序。

该类型的熵编码器还有另一个缺点。确实,符号的编码和解码依赖于就此学习的概率,符号的解码可以仅以与在编码期间使用的顺序相同的顺序来实现。典型地,于是解码可以只是顺序的,由此阻止若干个符号的并行解码(例如从多核架构中受益)。

文档thomaswiegand,garyj.sullivan,gislebjontegaard,andajayluthra,″overviewoftheh.264/avcvideocodingstandard″,ieeetransactionsoncircuitsandsystemsforvideotechnology,vol.13,no.7,pp.560-576,july2003还指出,cabac熵编码器具有将非整数数量的比特分配给要编码的当前字母表的每个符号的特殊特征,这对于大于0.5的符号出现概率是有利的。特别地,cabac编码器等待直到它已经读取了若干个符号,然后将预定数量的比特分配给读取的该符号集,编码器将该比特写到要发送到解码器的压缩流中。这样的规定由此使其可能使若干个符号上的比特“交互作用”,并对分数数量的比特上的符号进行编码,该数量反映了与通过符号实际发送的信息更接近的信息。与读取的符号关联的其他比特未在压缩流中发送,而是保持等候,等待被分配给cabac编码器读取的一个或多个新的符号,使其可能再次使这些其他比特交互作用。通过已知的方式,熵编码器在给定的时刻“清空”这些未发送的比特。除非另外说明,在所述给定的时刻,编码器提取还未被发送的比特,并将它们写入到去往解码器的压缩流中。该清空例如在已经读取要编码的最后一个符号的时刻进行,以确保压缩流确实包含所有比特,该比特将允许解码器对字母表中的所有符号进行解码。通过更一般的方式,作为专用于给定编码器/解码器的性能和功能的函数来确定进行清空的时刻。

在2011年4月15号的互联网地址http://research.microsoft.com/en-us/um/people/jinl/paper_2002/msri_jpeg.htm上可用的文档描述了一种对符合jpeg2000压缩标准的静态图像进行编码的方法。该静态图像经过离散小波变换,然后被量化,由此使其可能获得量化的小波系数,量化索引分别与之关联。在熵编码器的帮助下对获取的量化索引进行编码。量化系数之前被分组为称为代码块的矩形块,大小典型为64x64或32x32。每个代码块然后被熵编码独立编码。于是,在对当前的代码块进行编码时,熵编码器不会使用在之前的代码块的编码期间计算的符号出现概率。熵编码器由此在每次开始代码块的编码时处于初始化状态。该方法展示了对代码块的数据进行解码而不用对相邻的代码块进行解码的好处。于是,例如,一个客户端软件可以请求一个服务器软件提供仅客户需要的压缩代码块来对图像中识别的子部分进行解码。该方法还展示了允许代码块的并行编码和/或解码的优势。于是,代码块的大小越小,并行化级别就越高。例如,对于固定为2的并行化级别,两个代码块将被并行编码和/或解码。理论上,并行化级别的值等于图像中要编码的代码块的数量。但是,考虑到该编码没有利用从当前代码块的中间环境出现的概率,该方法获得的压缩性能不是最优的。



技术实现要素:

本发明的一个目标是修复上述现有技术的缺陷。

为此,本发明的主题涉及一种对至少一个图像进行编码的方法,包括下列步骤:

-将图像分割为可以包含属于预定符号集的符号的多个块,

-将所述块分组为预定数量的块子集,

-通过熵编码模块、通过将数字信息与所考虑的子集中的每个块的符号进行关联来对所述块子集中的每个进行编码,该编码步骤包括针对图像的第一块来初始化熵编码模块的状态变量的子步骤,

-生成表示被编码的块子集中的至少一个的至少一个数据子流,

根据本发明的方法值得注意,在于:

-在当前块是所考虑的子集中要被编码的第一块的情形下,确定该第一当前块的符号出现概率,该概率是针对至少一个其他子集的编码和解码的预定块而已经确定的那些概率,

-在当前块是所考虑的子集中最后编码的块的情形下:

●将在所考虑的所述子集中的块的编码期间与所述符号关联的所有数字信息写入到子流中,该子流表示所考虑的子集,

●实现初始化子步骤。

上述写入步骤相当于,一旦块子集中的最后一块已被编码,清空还未被发送的数字信息(比特),如上描述所解释。

上述写入步骤和重新初始化熵编码模块的步骤的耦合使其可能产生包含各个数据子流的被编码的数据流,该数据子流分别对应于该至少一个被编码的块子集,所述流适合根据各种并行化级别来编码,并且这与应用于块子集的编码类型不管是顺序还是并行无关。于是,在编码时可以在并行级别的选择上有很大的自由度,该并行级别作为期望的编码/解码性能的函数。解码的并行级别可变,且甚至可以与编码的并行级别不同,因为在开始块子集的解码时,解码器总是处于初始化状态。

根据第一例子,熵编码模块的状态变量是表示预定符号集的符号中的符号出现概率的区间的两个边界。

根据第二例子,熵编码模块的状态变量是本领域技术人员熟知并且在2011年6月21日在下列互联网地址http://en.wikipedia.org/wiki/lempel%e2%80%93ziv%e2%80%93welch中描述的lzw(lempel-ziv-welch)熵编码器的转换表中包含的符号的串。

使用在所考虑的块子集的第一当前块的熵编码期间使用针对所述其他子集的第一块来确定的符号出现概率的主要好处是,通过在后者中仅存储所述符号出现概率的更新而不用考虑通过所述其他子集中的其他连续块来学习的符号出现概率,来节省编码器的缓冲存储器。

在所考虑的块子集中的第一当前块的熵编码期间使用针对所述子集中除了第一块以外的块例如第二块来确定的符号出现概率的好处是获得更准确且由此更好地学习符号出现概率,由此提升更好的视频压缩性能。

在特定的实施例中,块子集被顺序或者并行编码。

子集块被顺序编码的事实所具有的好处是展示符合h.264/mpeg-4avc标准的根据本发明的编码方法。

子集块被并行编码的事实所具有的好处是加速编码器处理时间且受益于图像编码的多平台架构。

在另一特定实施例中,当至少两个块子集与至少一个其他的块子集并行编码时,该至少两个被编码的块子集被包含在相同的数据子流中。

该规定使其特别可能节省数据子流的信令。确实,为了使解码单元能够尽可能早地对子流进行解码,需要在压缩文件中指示所考虑的子流在何处开始。当若干个块子集被包含在相同的数据子流中时,需要单个指示符,由此降低压缩文件的大小。

在又一特定实施例中,当所述被编码的块子集想要以预定的顺序来并行编码时,在对该块子集中的每个分别编码之后给出的数据子流在为了解码而被发送之前根据该预定顺序来预先排序。

该规定使其可能使被编码的数据子流适应特定类型的解码,而不需要对图像进行解码然后再次编码。

相关地,本发明还涉及一种对至少一个图像进行编码的设备,包括:

-将图像分割为多个块的装置,该多个块可以包含属于预定符号集的符号,

-用于将所述块分组为预定数量的块子集的装置,

-对该块子集中的每个进行编码的装置,该编码装置包括熵编码模块,能够将数字信息与所考虑的子集中的每个块的符号相关联,该编码装置包含针对图像中的第一块来初始化熵编码模块的状态变量的子装置,

-用于生成数据的至少一个数据子流的装置,该数据子流表示被编码的块子集中的至少一个。

该编码装置值得注意,在于它包括:

-用于确定当前块的符号出现概率的装置,在当前块是所考虑的子集中要被编码的第一块的情形下,该装置确定第一块的符号出现概率为针对至少一个其他子集的编码和解码的预定块所已经确定的那些概率,

-写入装置,在当前块是所考虑的子集中最后编码的块的情形下,其被激活以将在所考虑的子集中的块的编码期间已经与所述符号关联的所有数字信息写入到子流中,该子流至少表示所考虑的子集,

初始化子装置还被激活以重新初始化熵编码模块的状态变量。

通过相应的方式,本发明还涉及一种用于对表示至少一个被编码的图像的流进行解码的方法,包括下列步骤:

-在所述流中识别与要解码的至少一个块子集分别对应的预定数量的数据子流,所述块能够包含属于预定符号集的符号,

-通过熵解码模块,通过在至少一个被识别的子流中读取与对应于该至少一个所述被识别的子流的子集中的每个块的符号相关联的数字信息,来对所述被识别的块子集进行解码,该解码步骤包括针对图像中要被解码的第一块来初始化所述熵解码模块的状态变量的子步骤,

该解码方法值得注意,在于:

-在当前块是所考虑的子集中要被解码的第一块的情形下,确定所考虑的子集中的第一块的符号出现概率,该概率是针对至少一个其他子集的被解码的预定块而已经确定的那些概率,

-在当前块是所考虑的子集中最后解码的块的情形下,实现所述初始化子步骤。

在特定的实施例中,所述块子集被顺序或并行地解码。

在另一特定的实施例中,当至少两个块子集与至少一个其他的块子集并行解码时,被识别的数据子流中的一个表示所述至少两个块子集。

在又一特定的实施例中,当被编码的块子集想要以预定的顺序来并行解码时,与被编码的块子集分别对应的数据子流之前在所述要解码的流中以该预定顺序来排序。

相关地,本发明还涉及一种用于对表示至少一个被编码的图像的流进行解码的设备,包括:

-用于在所述流中识别与要解码的至少一个块子集分别对应的预定数量的数据子流的装置,所述块能够包含属于预定符号集的符号,

-用于对被识别的块子集进行解码的装置,该解码装置包括熵解码模块,其能够在至少一个所述被识别的子流中读取与对应于该至少一个被识别的子流的子集中的每个块的符号相关联的数字信息,该解码装置包括针对图像中要被解码的第一块来初始化熵解码模块的状态变量的子装置,

该解码装置值得注意,在于它包括用于确定当前块的符号出现概率的装置,在当前块是所考虑的子集中要被解码的第一块的情形下,该装置确定该第一块的符号出现概率,作为针对至少一个其他子集的被解码的预定块而已经确定的那些概率,

并且在于,在当前块是所考虑的子集中最后解码的块的情形下,初始化子装置被激活以重新初始化熵解码模块的状态变量。

本发明的目标还在于一种包含指令的计算机程序,当程序被计算机执行时,用于执行上述编码或解码方法的步骤。

该程序可以使用任意编程语言,并且可以采用源代码、目标代码或介于源代码和目标代码之间的中间代码的形式,例如部分编译的形式或任意其他想要的形式。

本发明的又一主题还在于一种记录介质,其可被计算机读取,并且包含如上所述的计算机程序指令。

该记录介质可以是能存储程序的实体或装置。例如,该介质可以包括存储装置例如rom如cdrom或微电子电路rom,或者磁存储装置如磁盘(软盘)或硬盘。

此外,该记录介质可以是可传输介质例如电或光信号,其可以通过电或光缆、通过无线电或其他方式来传递。根据本发明的程序特别地可以从互联网类型的网络上下载。

或者,该记录介质可以是其中包含程序的集成电路,该电路适于执行所考虑的方法或者在后者执行时使用。

上述编码装置、解码方法、解码装置和计算机程序展示了与根据本发明的编码方法所具有的相同的优势。

附图说明

阅读参考附图来描述的两个优选实施例,其他特征和优势将变得明显,在附图中:

-图1表示现有技术的图像编码图,

-图2a表示根据本发明的编码方法的主要步骤,

-图2b详细地表示在图2a的编码方法中实现的编码,

-图3a表示根据本发明的编码装置的第一实施例,

-图3b表示图3a中的编码装置的编码单元,

-图3c表示根据本发明的编码装置的第二实施例,

-图4a表示根据第一优选实施例的图像编码/解码图,

-图4b表示根据第二优选实施例的图像编码/解码图,

-图5a表示根据本发明的解码方法的主要步骤,

-图5b详细地表示在图5a的解码方法中实现的解码,

-图6a表示根据本发明的解码装置的实施例,

-图6b表示图6a中的解码装置的解码单元,

-图7a表示实现顺序类型的编码和并行类型的解码的图像编码/解码图,

-图7b表示以各自不同的并行级别来实现并行类型的编码/解码的图像编码/解码图。

具体实施方式

现在将描述本发明的实施例,其中,根据例如符合h.264/mpeg-4avc标准的编码而获得的二进制流,依据根据本发明的编码方法被用于对图像序列进行编码。在该实施例中,通过对初始符合h.264/mpeg-4avc标准的编码器的调整,根据本发明的编码方法例如以软件或硬件的方式来实现。根据本发明的编码方法以包含步骤c1到c5的算法的形式来表示,如图2a所示。

根据本发明的实施例,根据本发明的编码方法在编码装置co中实现,其两个实施例分别在图3a和3c中表示。

参考图2a,第一编码步骤c1是将要编码的图像序列中的图像ie划分为多个块或宏块mb,如图4a或4b所示。所述宏块可以包含一个或多个符号,所述符号形成预定符号集的一部分。在所示例子中,所述块mb具有正方形并且都具有相同的大小。作为图像大小的函数,该图像不必是块大小的倍数,左侧的最后一块和底部的最后一块可以不是正方形。在替代的实施例中,块例如可以是长方形大小并且/或者互相不对齐。

每个块或宏块自身可以进一步被分为子块,该子块本身可以再细分。

该划分是通过图3a所示的划分模块pco来执行的,其使用众所周知的划分算法。

参考图2a,第二编码步骤c2是将上述块分组为要被顺序或并行编码的预订数量p的连续块的子集se1,se2,...,sek,...,sep。在图4a和4b所示的例子中,为了图的清楚,仅展示了四个子集se1、se2、se3、se4。这四个块子集每个用虚线表示,并且分别包含图像ie的前四行的块。

该分组是通过图3a中所示的计算模块grco在本身众所周知的算法的辅助下执行的。

参考图2a,第三编码步骤c3包括对所述块子集se1到se6中的每个进行编码,根据例如顺序类型的预定遍历次序ps来对所考虑的子集中的块进行编码。在图4a和4b所示的例子中,当前块sek(1≤k≤p)中的块如箭头ps所示从左到右被依次编码。

根据第一变体,该编码是顺序类型,并且通过如图3a所示的单个编码单元uc来实现。通过本身已知的方式,编码器co包括缓冲存储器mt,其被适配为包含在当前块编码时被逐渐重复更新的符号出现的概率。

如图3b中更详细地展示,编码单元uc包括:

*关于至少一个之前被编码和解码的块对当前块进行预测编码的模块,被表示为mcp;

*使用针对所述之前被编码和解码的块来计算的至少一个符号出现的概率来对所述当前块进行熵编码的模块,被表示为mce。

预测编码模块mcp是软件模块,其能够根据传统的预测技术例如以内和/或间模式对当前块进行预测编码。

熵编码模块mce本身是cabac类型,但根据本发明来调整,在描述中将进一步描述。

作为变体,熵编码模块mce可以是本身已知的霍夫曼编码器。

在图4a和4b所示的例子中,单元uc对第一行se1中的块从左到右进行编码。当它到达第一行se1的最后一块时,它传递到第二行se2的第一块。当它到达第二行se2的最后一块时,它传递到第三行se3的第一块。当它到达第三行se3的最后一块时,它传递到第四行se4的第一块,等等,直到图像ie的最后一块被编码。

与以上刚才描述的不同的其他类型的遍历当然是可能的。于是,可以将图像ie划分为若干个子图像并将该类型的划分独立应用于每个子图像。编码单元还可以不和以上解释的那样相继处理各行,而是相继(处理)各列。还可以以任意方向来遍历行或列。

根据第二变体,该编码是并行类型,并且,仅通过由预订数量r的编码单元uck(1≤k≤r)来实现的事实(在图3c所示的例子中r=2),它与顺序编码的第一变体相区分。已知该并行编码给编码方法带来了明显的加速。

编码单元uck中的每个等价于图3b所示的编码单元uc。通过相应的方式,编码单元uck包括预测编码模块mcpk和熵编码模块mcek。

再次参考图4a和4b,第一单元uc1对奇数排名的行中的块进行编码,而第二单元uc2对偶数排名的行中的块进行编码。更准确地说,第一单元uc1从左到右对第一行se1中的块进行编码。当它达到第一行se1的最后一块时,它传递第(2n+1)行即第三行se3等的第一块。与第一单元uc1执行的处理并行,第二单元uc2从左到右对第二行se2中的块进行编码。当它到达第二行se2的最后一块,它传递到第(2n)行在这里是第四行se4等的第一块。上述两个遍历被重复,直到图像ie的最后一块被编码。

参考图2a,第四编码步骤c4是产生比特的l个子流f1,f2,...,fm,...,fl(1≤m≤l≤p)来表示通过上述编码单元uc或者上述编码单元uck中的每个来压缩的被处理的块以及每个子集sek中被处理的块的解码版本。根据在描述中将进一步细化的同步机制,所考虑的子集中用sed1,sed2,...,sedk,...,sedp表示的被解码的处理的块可以被图3a所示的编码单元uc或图3c所示的编码单元uck中的每个复用。

参考图3b,产生l个子流的步骤是通过流生成软件模块mgsf或msgfk来实现的,其被适配为产生数据流例如比特。

参考图2a,第五编码步骤c5包括基于上述l个子流f1,f2,...,fm,...,fl来构造全局流f。根据一个实施例,子流f1,f2,...,fm,...,fl被简单地并置,用额外的信息项来向解码器指示全局流f中的每个子流fm的位置。后者之后被通信网络(未示出)发送到远程终端。后者包括图5a所示的解码器do。根据另一实施例,这尤其有利,因为不需要对图像解码然后再次编码,在将流f发送到解码器do之前,解码器do之前以预定的顺序来对l个子流f1,f2,...,fm,...,fl进行排序,该顺序对应于do能够对子流进行解码的顺序。

于是,如描述中更详细地描述,根据本发明的解码器能够在全局流f中分离子流f1,f2,...,fm,...,fl,并将它们分配给组成解码器的一个或多个解码单元。需要注意,全局流中的子流的该分解独立于使用单个编码单元或并行操作的若干个编码单元的选择,并且用该方法,可以只有编码器或只有解码器,其包含并行操作的单元。

全局流f的该构造是在例如图3a和图3c所示的流构造模块cf中实现的。

现在将参考图2b来描述本发明的各个特定子步骤,例如在上述编码步骤c3期间在编码单元uc或uck中实现的子步骤。

在步骤c31的过程中,编码单元uc或uck选择图4a或4b所示的当前块sek例如第一行se1中要编码的第一块作为当前块。

在步骤c32的过程中,单元uc或uck测试当前块是否是图像ie的第一块(位于顶部且位于左侧),该图像在上述步骤c1中已被划分为块。

如果是这种情况,在步骤c33的过程中,熵编码模块mce或mcek对其状态变量进行初始化。根据所示例子,其使用如前所述的算术编码,这包含表示预定符号集中包含的符号的出现的概率的间隔的初始化。通过本身已知的方式,用两个边界l和h,分别为下边界和上边界,来初始化该间隔。下边界l的值被固定为0,而上边界的值被固定为1,由此对应于预定符号集的所有符号中的第一符号的出现的概率。该间隔的大小r因此在此刻由r=h-l=1来定义。被初始化的间隔被传统地进一步划分为多个预定的子间隔,其分别表示预定符号集中的符号的出现的概率。

作为变体,如果使用的熵编码是lzw编码,符号的串的转换表被初始化,从而它包含所有可能的符号一次且仅一次。

如果在上述步骤c32之后,当前块不是图像ie的第一块,则在后续描述中之后被描述的步骤c40的过程中确定必要的之前被编码和解码的块的可用性。

在步骤c34的过程中,对图4a或4b中表示的第一行se1中的第一当前块mb1进行编码。该步骤c34包括以下将描述的多个子步骤c341到c348。

在图2b所示的第一子步骤c341的过程中,通过内和/或间预测的已知技术对当前块mb1进行预测编码,在其过程中,关于至少一个之前被编码和解码的块来对块mb1进行预测。

毋庸置疑,例如h.264标准中提出的其他模式的内预测也是可以的。

还可以以内模式对当前块mb1进行预测编码,在其过程中,关于在之前被编码和解码的图像中出现的块来对当前块进行预测。其他类型的预测当然也是可能的。在对当前块的可能的预测中,根据对于本领域技术人员来说众所周知的比特率失真准则来选择最优预测。

上述预测编码步骤使其可能构造预测的块mbp1,这是对当前块mb1的近似。与预测编码相关的信息后续将被写入到流f中,该流f被发送到解码器do。该信息特别包括预测类型(间或内(预测)),并且如果合适,包括内预测的类型、块或宏块(如果后者已经被细分)的划分类型、在间预测模式中使用的参考图像索引和位移矢量。该信息被编码器co压缩。

在之后的子步骤c342的过程中,从当前块mb1中减去预测块mbp1以产生残留块mbr1。

在之后的子步骤c343的过程中,根据传统的直接变换操作例如dct类型的离散余弦变换来对残留块mbr1进行变换,以产生变换后的块mbt1。

在之后的子步骤c344的过程中,根据传统的量化操作例如标量量化来对变换后的块mbt1进行量化。然后得到系数被量化的块mbq1。

在之后的子步骤c345的过程中,对系数被量化的块mbq1进行熵编码。在优选的实施例中,这包括cabac熵编码。该步骤包括:

a)读取与所述当前块关联的符号或预定符号集中的符号,

b)将数字信息例如比特与读取的符号进行关联。

在上述变体中(根据该变体,使用的编码是lzw编码),与当前转换表中的符号的代码相对应的数字信息项与要编码的符号关联,并根据本身已知的过程来更新该转换表。

在之后的子步骤c346的过程中,根据传统的反量化操作即与步骤c344中执行的量化相反的操作来对块mbq1进行反量化。然后得到系数被反量化的块mbdq1。

在之后的子步骤c347的过程中,对系数被反量化的块mbdq1进行逆变换,这是与以上步骤c343中执行的直接变换相反的操作。然后得到被解码的残留块mbdr1。

在之后的子步骤c348的过程中,通过将解码的残留块mbdr1加到预测块mbp1来构造被解码的块mbd1。需要注意,后一块与在描述中将进一步描述的对图像ie进行解码的方法完成之后得到的被解码的块相同。被解码的块mbd1由此被呈现为可用,以被构成预定数量r的编码单元的一部分的编码单元uck或任意其他编码单元使用。

在完成上述编码步骤c34之后,例如如图3b所示的熵编码模块mce或mcek包含在第一块的编码时被逐渐重复更新的所有概率。这些概率对应于可能的语法的各个元素或者各个关联的编码上下文。

在上述编码步骤c34之后,在步骤c35的过程中执行测试以确定当前块是否是同一行的第j块,其中j是编码器co已知的预定值,其至少等于1。

如果是该情况,在图2b所示的步骤c36的过程中,针对第j块来计算的概率集合被存储在例如图3a或3b以及图4a和4b中所示的编码器co的缓冲存储器mt中,所述存储器的大小被适配为存储所计算的概率数量。

在图2b所示的步骤c37的过程中,编码单元uc或uck测试刚才被编码的行sek的当前块是否是图像ie中的最后一块。如果在步骤c35的过程中当前块不是行se1的第j块,该步骤也会被实现。

在当前块是图像ie的最后一块时,在步骤c38的过程中,编码方法结束。

如果不是该情况,在步骤c39的过程中,根据如图4a或4b中的箭头ps所示的遍历顺序来选择要编码的下一块mbi。

在图2b所示的步骤c40的过程中,确定对于当前块mbi的编码来说必须的之前被编码和解码的块的可用性。

如果这是第一行se1,该步骤包括验证位于要编码的mbi的左侧的至少一个块的可用性。但是,针对图4a或4b所示的实施例中选择的遍历顺序ps,在所考虑的行sek中依次对各个块进行编码。结果,左侧被编码和解码的块总是可用的(除了一行的第一块)。在图4a或4b所示的例子中,这是直接位于要编码的当前块的左侧的块。

如果这是与第一行不同的行sek,所述确定步骤还包括验证位于前一行sek-1中的预订数量n’的块例如分别位于当前块的上方和右上方的两个块是否可用于当前块的编码,即,它们是否已经被编码单元uc或uck-1编码且然后被解码。

由于该测试步骤容易降低编码方法的速度,通过根据本发明的替代方式,在行的编码是并行类型的情形下,图3c所示的时钟clk被适配为同步块编码的进展以确保分别位于当前块的上方和右上方的两个块的可用性,而不需要验证这两块的可用性。于是,编码单元uck总是以被用于当前块的编码的前一行sek-1中的预订数量n’(例如n’=2)的被编码和解码的块的偏移来开始第一块的编码。从软件的角度来看,这样的时钟的实现使其可能显著加速编码器co中对图像ie中的块的处理时间。

在图2b所示的步骤c41的过程中,执行测试以确定当前块是否是所考虑的行sek中的第一块。

如果是这种情况,在步骤c42的过程中,在缓冲存储器mt中仅读取在前一行sek-1的第j块的编码期间计算的符号出现的概率。

根据图4a所示的第一变体,第j块是前一行sek-1的第一块(j=1)。该读取包括用缓冲存储器mt中存在的概率来替换cabac编码器的概率。为使其处理第二、第三和第四行se2、se3和se4中的各个第一块,如细线所示的箭头在图4a中示出该读取步骤。

根据图4b所示的上述步骤c43的第二变体,第j块是前一行sek-1的第二块(j=2)。该读取包括用在缓冲存储器mt中存在的概率来替换cabac编码器的概率。为使其处理第二、第三和第四行se2、se3和se4中的各个第一块,如细虚线所示的箭头在图4b中示出该读取步骤。

在步骤c42之后,通过重复上述步骤c34到c38来对当前块进行编码然后进行解码。

如果在上述步骤c41之后,当前块不是所考虑的行sek的第一块,有利地不用读取在位于同一行sek中的之前被编码和解码的块即在所示例子中直接位于当前块的左侧的被编码和解码的块中出现的概率。确实,考虑到如图4a或4b所示的用于读取位于同一行中的块的遍历顺序ps,在开始当前块的编码时在cabac编码器中存在的符号出现的概率正好是在该同一行中的前一块的编码/解码后存在的那些概率。

结果,在图2b所示的步骤c43的过程中,针对所述当前块的熵编码来学习符号出现的概率,这些(概率)仅对应于如图4a或4b中的双实线箭头所示的针对同一行中的所述前一块来计算的那些概率。

在步骤c43之后,重复上述步骤c34到c38来对当前块进行编码然后进行解码。

在步骤c44的过程之后执行测试以确定当前块是否是所考虑的行sek中的最后一块。

如果不是该情况,在步骤c44之后,再次实现对要编码的下一块mbi进行选择的步骤c39。

如果当前块是所考虑的行sek的最后一块,在步骤c45的过程中,图3a或3c的编码装置co执行如上描述中提到的清空。为此,编码单元uck将已经与在所考虑的所述行中的每个块的编码期间读取的符号关联的所有比特发送到相应的子流生成模块mgsfk,通过这样的方式从而模块mgsfk将所有比特写入到子流fm中,该子流包含的二进制串表示所考虑的所述行sek中被编码的块。这样的情况在图4a和4b中用每行sek的末端的三角形来表示。

在图2b所示的步骤c46的过程中,编码单元uc或uck执行与上述步骤c33相同的步骤,即再次初始化表示预定符号集中包含的符号的出现的概率的间隔。该重新初始化在图4a和4b中用每行sek开始的黑点来表示。

在该编码级别上执行步骤c45和c46的好处是,在编码单元uc或编码单元uck处理的下一块的编码期间,编码器co处于初始化状态。于是,如下将在描述中进一步描述,并行工作的解码单元可能从该点开始对压缩过的流f进行直接解码,因为它满足处于初始化状态。

解码部分的实施例的详细描述

现在将描述根据本发明的解码方法的实施例,其中,通过对初始符合h.264/mpeg-4avc标准的编码器的调整,根据本发明的解码方法例如以软件或硬件的方式来实现。

根据本发明的编码方法以包含步骤d1到d4的算法的形式来表示,如图5a所示。

根据本发明的实施例,根据本发明的解码方法在图6a所示的解码装置do中实现。

参考图5a,第一解码步骤是在所述流f中识别l个子流f1,f2,...,fm,...,fl,该子流分别包含如图4a或4b所示之前被编码的块或宏块mb的p个子集se1,se2,...,sek,...,sep。为此,流f中的每个子流与指示符关联,该指示符旨在允许解码器do确定每个子流fm在流f中的位置。作为变体,在完成上述编码步骤c3时,解码器co以解码器do期望的顺序对流f中的子流f1,f2,...,fm,...,fl进行排序,由此避免在流f中插入子流标识符。该规定由此使其可能降低与数据流f的比特率相关的成本。

在图4a或4b所示的例子中,所述块mb具有正方形并且都具有相同的大小。取决于图像大小,该图像不必是块大小的倍数,左侧的最后一块和底部的最后一块可以不是正方形。在替代的实施例中,块例如可以是长方形大小并且/或者互相不对齐。

每个块或宏块自身可以进一步被分为子块,该子块本身可以再细分。

该识别是通过例如图6a所示的流提取模块exdo来执行的。

在图4a或4b所示的例子中,预定数量p等于6,并且为了图的清楚,仅用虚线示出了四个子集se1、se2、se3、se4。

参考图5a,第二解码步骤d2是对所述块子集se1、se2、se3和se4中的每个进行解码,所考虑的子集中的块是根据预定的遍历顺序ps来编码的。在图4a或4b所示的例子中,当前子集sek(1≤k≤p)中的块如箭头ps所示从左到右被依次被解码。在步骤d2完成时,得到被解码的块子集sed1,sed2,sed3,...,sedk,...,sedp。

这样的解码可以是顺序类型的,且因此在单个解码单元的辅助下执行。

但是,为了能够受益于多平台解码架构,块子集的解码是并行类型并且通过数量r的解码单元udk(1≤k≤r)来实现,例如如图6a所示r=4。该规定由此允许解码方法的明显加速。通过本身已知的方式,解码器do包括缓冲存储器mt,其被适配为包含在当前块解码时被逐渐重复更新的符号出现的概率。

如图6b中更详细的表示,每个解码单元udk包括:

●通过学习针对至少一个之前被解码的块来计算的至少一个符号出现的概率来对所述当前块进行熵解码的模块,用mdek来表示,

●关于所述之前被解码的块来对当前块进行预测解码的模块,用mdpk来表示。

预测解码模块sudpk能够根据传统的预测技术例如内和/或间模式来对当前块进行解码。

熵解码模块mdek本身是cabac类型,但根据本发明来调整,如下在描述中将进一步描述。

作为变体,熵解码模块mdek可以是本身已知的霍夫曼解码器。

在图4a或4b所示的例子中,第一单元ud1从左到右对第一行se1中的块进行解码。当它到达第一行se1的最后一块,它传递到第(n+1)行在这里是第5行等的第一块。第二单元uc从左到右对第二行se2中的块进行解码。当它到达第二行se2的最后一块,它传递到第(n+2)行这里是第6行等的第一块。该遍历重复直到单元ud4,其从左到右对第四行进行解码。当它到达第一行的最后一块,它传递到第(n+4)行在这里是第8行的第一块,等待,直到最后被识别的子流中的最后一块被解码。

与上述刚才描述的不同的遍历类型当然是可能的。例如,每个解码单元可以不处理如上解释的嵌入的行而是嵌入的列。还可以以任意方向来遍历行或列。

参考图5a,第三解码步骤d3是基于在解码步骤d2中得到的每个被解码的子集sed1,sed2,...,sedk,...,sedp来重构被解码的图像id。更准确地说,每个被解码的子集sed1,sed2,...,sedk,...,sedp中被解码的块被发送到例如如图6a所示的图像重构单元uri。在步骤d3的过程中,当这些变得可用时,单元uri将被解码的块写入到被解码的图像。

在图5a所示的第四解码步骤d4的过程中,图6a所示的单元uri给出被完全解码的图像id。

现在将参考图5b来描述本发明的各个特定子步骤例如在并行解码的上述步骤d2期间在解码单元udk中实现的子步骤。

在步骤d21的过程中,解码单元udk选择图4a或4b所示的当前块sek中要解码的第一块作为当前块。

在步骤d22的过程中,解码单元udk测试当前块是否是被解码的图像在的第一块,在该情形下,是否是子流f1中的第一块。

如果是该情况,在步骤d23的过程中,熵解码模块mde或mdek初始化其状态变量。根据所示例子,这需要对表示预定符号集中包含的符号的出现的概率的间隔进行初始化。

作为变体,如果使用的熵解码是lzw解码,符号的串的转换表被初始化,从而它包含所有可能的符号一次且仅一次。步骤d23等同于上述编码步骤c33,后面不会再被描述。

如果在上述步骤d22之后,当前块不是被解码的图像id中的第一块,在后续描述中之后被描述的步骤d30的过程中确定必要的之前被解码的块的可用性。

在步骤d24的过程中,对图4a或4b所示的第一行se1中的第一当前块mb1进行解码。该步骤d24包括将在下面描述的多个子步骤d241到d246。

在第一子步骤d241的过程中,对与当前块相关的语法元素进行熵解码。该步骤主要包括:

a)读取与所述第一行se1关联的子流中包含的比特,

b)基于读取的比特来重构符号。

在上述变体中(根据该变体,使用的解码是lzw解码),读取与当前转换表中的符号代码相对应的数字信息项,基于读取的代码来重构符号,并根据本身已知的过程来更新转换表。

更准确地说,与当前块相关的符号元素被例如如图6b所示的cabac熵解码模块mde1解码。后者对压缩文件中的比特子流f1进行解码以产生符号元素,并且同时以该方式来重新更新其概率,从而在后者对符号进行解码时,该符号出现的概率等于在上述熵解码步骤c345期间对该相同符号进行编码时得到的那些概率。

在之后的子步骤d242的过程中,通过内和/或间预测的已知技术来对当前块mb1进行预测解码,在其过程中,关于至少一个之前被解码的块来预测块mb1。

毋庸置疑,例如在h.264标准中提出的其他内预测模式也是可以的。

在该步骤的过程中,在前一步骤中解码的语法元素的辅助下执行预测解码,该语法元素特别包括(间或内)预测的类型,并且如果合适,包括内预测的模式、块或宏块(如果后者已经被细分)的划分类型、在间预测模式中使用的参考图像索引和位移矢量。

上述预测解码步骤使其可能重构预测的块mbp1。

在之后的子步骤d243的过程中,在之前被解码的语法元素的辅助下重构量化的残留块mbq1。

在之后的子步骤d244的过程中,根据传统的反量化操作即与上述步骤c344中执行的量化相反的操作来对被量化的残留块mbq1进行反量化,以产生被解码的反量化的块mbdt1。

在之后的子步骤d245的过程中,对被反量化的块mbdt1进行逆变换即与上述步骤c343中执行的直接变换相反的操作。于是得到被解码的残留块mbdr1。

在之后的子步骤d246的过程中,通过将被解码的残留块mbdr1加到预测块mbp1来构造被解码的块mbd1。被解码的块mbd1由此被呈现为可用,以被解码单元ud1或构成预订数量n的解码单元的一部分的任意其他解码单元使用。

在完成上述解码步骤d246时,例如如图6b所示的熵解码模块mde1包含在第一块的解码的同时被逐渐重复更新的所有概率。这些概率对应于可能的语法的各个元素并且对应于各个关联的解码上下文。

在上述解码步骤d24之后,在步骤d25的过程中执行测试来确定当前块是否是同一行的第j块,其中j是解码器do已知的预定值,其至少等于1。

如果是这种情况,在步骤d26的过程中,针对第j块计算的概率集合被存储在例如如图6a所示以及图4a或4b中的解码器do中的缓冲存储器mt,所述存储器的大小被适配为存储所计算的概率数量。

在步骤d27的过程中,单元udk测试刚才被解码的当前块是否是最后的子流中的最后一块。

如果是这种情况,在步骤d28的过程中,解码方法结束。

如果不是该情况,在步骤d29的过程中根据图4a或4b中的箭头ps所示的遍历顺序来选择要解码的下一块mbi。

如果在上述步骤d25的过程中,当前块不是所考虑的行sedk的第j块,则执行以上步骤d27。

在上述步骤d29之后的步骤d30的过程中,确定对于当前块mbi的解码来说必要的之前被解码的块的可用性。考虑到这需要通过不同解码单元udk来对块进行并行解码的事实,可能出现这些块没有被指定对这些块进行解码的解码单元来解码,且因此它们还不可用。所述确定步骤包括验证位于前一行sek-1中的预订数量n’的块例如分别位于当前块的上方和右上方的两个块是否可用于当前块的解码,即,它们是否已经被指定对其进行解码的解码单元udk-1解码。所述确定步骤还包括确定位于要编码的当前块mbi的左侧的至少一块的可用性。但是,考虑到图4a或4b所示的实施例中选择的遍历顺序ps,所考虑的行sek中的块被依次解码。结果,左侧被解码的块总是可用的(除了一行中的第一块)。在图4a或4b所示的例子中,这需要直接位于当前块的左侧的块被解码。为此,只有分别位于当前块的上方和右上方的两个块的可用性被测试。

由于该测试步骤容易降低解码方法的速度,通过根据本发明的替代方式,图6a所示的时钟clk被适配为同步块解码的进展以确保分别位于当前块的上方和右上方的两个块的可用性,而不需要验证这两块的可用性。于是,如图4a或4b所示,解码单元udk总是以被用于当前块的解码的前一行sek-1中的预订数量n’(这里n’=2)的被解码的块的偏移来开始第一块的解码。从软件的角度来看,这样的时钟的实现使其可能显著加速解码器do中对每个子集sek中的块进行处理的时间。

在步骤d31的过程中,执行测试以确定当前块是否是所考虑的行sek中的第一块。

如果是这种情况,在步骤d32的过程中,在缓冲存储器mt中仅读取在前一行sek-1的第j块的解码期间计算的符号出现的概率。

根据图4a所示的第一变体,第j块是前一行sek-1的第一块(j=1)。该读取包括用缓冲存储器mt中存在的概率来替换cabac解码器的概率。为使其处理第二、第三和第四行se2、se3和se4中的各个第一块,如细线所示的箭头在图4a中示出该读取步骤。

根据图4b所示的上述步骤d32的第二变体,第j块是前一行sek-1的第二块(j=2)。该读取包括用在缓冲存储器mt中存在的概率来替换cabac解码器的概率。为使其处理第二、第三和第四行se2、se3和se4中的各个第一块,如细虚线所示的箭头在图4b中示出该读取步骤。

在步骤d32之后,通过重复上述步骤d24到d28来对当前块进行解码。

如果在上述步骤d31之后,当前块不是所考虑的行sek的第一块,有利地不用读取在位于同一行sek中的之前被解码的块即在所示例子中直接位于当前块的左侧的被解码的块中出现的概率。确实,考虑到如图4a或4b所示的用于读取位于同一行中的块的遍历顺序ps,在开始当前块的解码时在cabac解码器中存在的符号出现的概率正好是在该同一行中的前一块的解码后存在的那些概率。

结果,在步骤d33的过程中,针对所述当前块的熵解码来学习符号出现的概率,所述概率仅对应于如图4a或4b中的双实线箭头所示的针对同一行中的所述前一块来计算的那些概率。

在步骤d33之后,重复上述步骤d24到d28来对当前块进行解码。

在步骤d34的过程之后执行测试以确定当前块是否是所考虑的行sek中的最后一块。

如果不是该情况,在步骤d34之后,再次实现对要解码的下一块mbi进行选择的步骤d29。

如果当前块是所考虑的行sek的最后一块,在步骤d35的过程中,解码装置udk执行与上述步骤d23相同的步骤,即再次初始化表示预定符号集中包含的符号的出现的概率的间隔。该重新初始化在图4a和4b中用每行sek开始的黑点来表示。

于是,解码器do在每行开始时处于初始化状态,由此从选择解码的并行级别以及优化解码的处理时间的角度来看允许更大的灵活性。

在图7a所示的示例性编码/解码图中,编码器co包括单个编码单元uc,如图3a所示,而解码器do包括六个解码单元。

解码单元对行se1、se2、se3、se4、se5和se6顺序进行编码。在所示例子中,行se1到se4被完全编码,行se5正在被编码的过程中且行se6还没有被编码。考虑到编码的顺序性,编码单元uc被适配为给出流f,该流包含依次排序的子流f1、f2、f3、f4,以对行se1、se2、se3和se4进行编码。为此,子流f1、f2、f3和f4用与分别表示被编码的行se1、se2、se3、se4的相同的阴影来表示。通过在所述被编码的行的编码结束时的清空步骤以及在开始对要编码/解码的下一行的编码或解码时重新初始化概率的间隔,当解码器do每次读取子流来解码时,解码器处于初始化状态,并且可以以优化的方式用例如可被安装在四个不同平台上的解码单元ud1、ud2、ud3和ud4对四个子流f1、f2、f3和f4进行并行解码。

在图7b所示的示例性编码/解码图中,编码器co包括如图3c所示的两个编码单元uc1和uc2,而解码器do包括六个解码单元。

编码单元uc1对奇数排名的行se1、se3和se5进行顺序编码,而编码单元uc2对偶数排名的行se2、se4和se6进行顺序编码。为此,行se1、se3和se5表现为白色背景,而行se2、se4和se6表现为带点的背景。在所示例子中,行se1到se4被完全编码,行se5正在被编码的过程中而行se6还没有被编码。考虑到所执行的编码的级别为2的并行类型的事实,编码单元uc1被适配为给出子流f2n,该子流可被分解为在对行se2和se4分别解码之后得到的两个部分f2和f4。解码器co因此被适配为向解码器do发送流f,该流包含两个子流f2n+1和f2n的并置,以及因此与图7a所示不同的子流排序f1、f3、f2、f4。为此,子流f1、f2、f3和f4用与分别表示被编码的行se1、se2、se3、se4的相同的阴影来表示,子流f1和f3表现为白色背景(奇数排序的行的编码),且子流f2和f4表现为带点的背景(偶数排序的行的编码)。

关于结合图7a所述的优势,该编码/解码图还展示了能够清空解码器的优势,该解码器的解码并行级别完全独立于编码的并行级别,由此使其可能进一步优化编码器/解码器的操作。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1