对视频序列进行编码的方法、编码装置和存储介质与流程

文档序号:18001411发布日期:2019-06-25 22:53阅读:119来源:国知局
对视频序列进行编码的方法、编码装置和存储介质与流程

本发明涉及用于对视频数据进行编码的方法和装置。本发明更特别地涉及量化参数和处理的优化。



背景技术:

视频数据的预测编码是基于将帧分割成像素块。针对各像素块,在可用数据中搜索预测结果块。预测结果块可以是先前帧中的块,或者是从当前帧中的相邻的先前编码/解码像素生成的。根据确定预测结果块的不同方式来定义不同的编码模式。编码的结果是预测结果块以及涉及要编码的块和预测结果块之间的差的残差块的指示。

残差块的编码是基于三个主要步骤,这三个主要步骤涉及对剩余信息进行变换、量化以及最终的熵编码。

变换涉及:根据hevc词汇表将帧的新分区定义成这里称为“变换单位”的块,然后向变换单位元素应用变换。该变换通常旨在将变换单位中的空间值变换成频率系数,从而得到包括系数的变换单位。

量化涉及:缩放这些系数的量值(magnitude),从而在如此得到的图像的劣化被视为可接受的情况下,理想地将这些系数中的大多数设置为零。基于高频系数定义了图像中的可以被丢弃而不会使如此得到的图像过于严重地劣化的细节这一事实,这些高频系数经常是被设置为零的良好候选。

量化是编码中非常重要的步骤,其对编码效率产生很大影响。量化确定如此得到的图像的质量和编码位流的大小。量化在编码时可能是复杂且耗时的。



技术实现要素:

已经设计了本发明以解决一个或多个前述问题。本发明涉及包括改进的量化方法的编码方法。所提供的方法与诸如率失真优化量化算法等的已知方法相比实现起来不太复杂,并且对于相同质量产生更低的位率。

根据本发明的第一方面,提供一种用于利用编码装置的处理单元对视频序列进行编码的方法,所述方法包括以下步骤:

-将来自所述视频序列的数字图像分割成值的块;

-针对各块,

○将所述块的值变换成变换系数,

○将所述块的所述变换系数组织成多组变换系数,

○将所述变换系数量化成量化系数,

○使用所述量化系数来对所述块进行编码;以及

-基于块的编码来对所述视频序列进行编码,

其中,所述量化步骤包括:针对与一组变换系数相对应的量化系数,

○将表示对量化系数值的量值进行求和的结果的总和值与阈值进行比较,所述阈值依赖于所求和的量化系数的数量,所述量化系数的量值包括在预定义范围内,以及

○在求和结果低于所述阈值的情况下,将所述量化系数设置为零。

在实施例中,所述量化步骤还包括:

-基于所述变换系数来确定缩放系数;以及

-使各缩放系数移位以获得量化系数,

其中,

-将缩放系数的移位分解成用以获得中间量化系数的第一中间移位和所述中间量化系数的用以获得所述量化系数的第二移位,以及

-所述总和值代表对所述中间量化系数的量值进行求和的结果。

在实施例中,所述中间量化系数的量值包括在所述预定义范围内。

在实施例中,在与至少一组变换系数相对应的中间量化系数其中之一大于所述预定义范围的上界的情况下,与该至少一组变换系数相对应的量化系数未被设置为零。

在实施例中,在与一组变换系数相对应的量化系数其中之一的值大于所述预定义范围的情况下,与该组变换系数相对应的量化系数未被设置为零。

在实施例中,所述缩放系数是通过将所述一组变换系数内的变换系数乘以因子参数、然后加上死区参数所获得的,所述死区参数利用该变换系数的索引k被线性地缩放。

在实施例中,针对各变换系数,根据以下等式来计算所述死区参数dzk,j:

dzk,j=dz–c*k;

其中:

j是所述块内的所述一组变换系数的索引;

dz是全局死区参数;以及

c是常数参数。

在实施例中,针对给定块用第一值c1来初始化所述常数参数c,并且在遇到相应量化系数未被全部设置为零的第一组变换系数的情况下,所述常数参数c被改变为第二值c2。

在实施例中,所述方法应用于hevc,所述块是变换单位,并且所述一组变换系数是系数组。

根据本发明的另一方面,提供一种编码装置,用于对视频序列进行编码,所述编码装置包括处理单元,所述处理单元被配置为:

-将来自所述视频序列的数字图像分割成值的块;

-针对各块,

○将所述块的值变换成变换系数,

○将所述变换系数组织成多组变换系数,

○将所述变换系数量化成量化系数,

○使用所述量化系数来对所述块进行编码;以及

-基于块的编码来对所述视频序列进行编码,

其中,所述量化步骤还包括:针对与一组变换系数相对应的量化系数,

○将表示量化系数值的量值的求和结果的总和值与阈值进行比较,所述阈值依赖于所求和的量化系数的数量,所述量化系数的量值包括在预定义范围内,以及

○在求和结果低于所述阈值的情况下,将所述量化系数设置为零。

根据本发明的另一方面,提供一种计算机程序产品,用于可编程设备,所述计算机程序产品包括指令序列,所述指令序列用于在被加载到所述可编程设备中并且由所述可编程设备执行时实现根据本发明所述的方法。

根据本发明的另一方面,提供一种计算机可读存储介质,其存储用于实现根据本发明所述的方法的计算机程序的指令。

根据本发明的方法的至少一部分可以通过计算机来实现。因此,本发明可以采用以下形式:完全以硬件实现的实施例;完全以(包括固件、常驻软件、微代码等的)软件实现的实施例;或者具有组合这里通常可全部称为“电路”、“模块”或“系统”的软件和硬件方面的实现的实施例。此外,本发明可以采用以介质中嵌入有计算机可用程序代码的表现的任何有形介质中体现的计算机程序产品的形式。

由于本发明可以以软件来实现,因此本发明可以体现为计算机可读代码以提供至可编程设备的任何适当载体介质上。有形的非暂时性载体介质可以包括诸如软盘、cd-rom、硬盘驱动器、磁带装置或固态存储器装置等的存储介质。暂时性载体介质可以包括诸如电气信号、电子信号、光学信号、声学信号、磁信号或者例如微波或rf信号的电磁信号等的信号。

附图说明

现在将仅通过示例的方式并且参考以下附图来说明本发明的实施例,其中:

图1示出从原始序列图像向编码位流的编码处理;

图2示出编码中所使用的用于将数字图像分割成像素块的不同方案;

图3示出系数组和扫描顺序;

图4示出如何发送非空系数组的残差数据;

图5示出根据本发明实施例的切换(zapping)量化处理的步骤;

图6a示出切换处理的替代实施例的步骤;

图6b示出切换处理的另一替代实施例的步骤;

图7示出用以确定死区参数的方法的步骤;

图8是用于实现本发明的一个或多个实施例的计算装置的示意框图。

具体实施方式

本发明的上下文是视频编码的上下文。现在将与图1相关地说明全局编码处理。

图1示出从原始图像序列向编码位流的编码处理。这是一般描述,其详情并非全部与本发明相关,因而这里仅仅是为了例示。执行编码处理100的步骤的编码器接收到原始数字图像序列i0~in101作为输入。各数字图像由这里称为像素的一组样本表示。通过编码处理100输出位流110。

在步骤102期间,将所输入的数字图像i0~in101分割成像素块。这些块对应于图像部分,并且可以具有可变大小(例如,4×4、8×8、16×16、32×32、......个像素)。在步骤106中针对各输入块或编码单位选择编码模式。提供两个编码模式族:基于空间预测(称为帧内(intra)预测)的编码模式(以下称为intra)和基于时间预测(例如,帧间(inter)编码、合并(merge)或跳过(skip))的编码模式(以下称为inter)。评价可能的编码模式。评价可以涉及确定步骤106将使用的得分以选择具有最佳得分的模式。该得分可以是基于失真(例如,sad)或者是在更大程度上细化,诸如经典的率失真优化(通常是在率约束下使失真最小化的拉格朗日优化)等。

步骤103实现intra,其中通过根据要编码的给定块的邻域的已解码像素计算出的预测结果来预测所述要编码的块。对所选择的intra预测结果以及要编码的给定块和其预测结果之间的差(称为残差块)的指示进行编码。

通过模块104中的运动估计并且在运动补偿步骤105中实现时间预测。首先,选择一组参考图像116中的参考图像。在运动估计步骤104期间,选择参考图像的一部分(也称为参考区域或图像部分)。考虑到所选择的块的位流中的信令率,通常通过在参考图像中找到最相似的相应块来进行该选择。然后,运动补偿步骤105使用所选择的区域来预测要编码的块。通过运动补偿步骤105来计算所选择的参考区域和给定块之间的差(称为残差块)。所选择的参考区域由运动矢量(mv)指示。可以通过选择多个参考图像来扩展该方案。

因而,在空间预测和时间预测这两个情况下,通过从原始数据中减去预测来计算残差。在步骤103期间实现的intra预测中,对预测方向进行编码。在时间预测中,对表示运动的至少一个信息项(例如,运动矢量(mv))进行编码。

为了进一步降低位率,通过相对于所选择的运动矢量预测结果的差来对运动矢量进行编码。通过运动矢量预测和编码步骤117从运动矢量字段118获得一组运动信息预测结果。

如上所述,编码处理100包括选择步骤106,该选择步骤106用于通过应用诸如率失真标准等的编码成本标准来选择编码模式。

为了进一步减少冗余,通过变换步骤107向残差块应用变换,然后通过量化步骤108对所获得的变换数据进行量化,并且通过熵编码步骤109对该变换数据进行熵编码。最后,将编码块的编码残差块连同与所使用的预测结果有关的信息(诸如所选择的运动矢量预测结果的索引等)一起插入到位流110中。

对于以“跳过”模式编码的块,仅将向预测结果的索引编码在位流中,而不存在任何残差块或残差运动矢量。同样,合并模式也用信号通知没有发送残差运动矢量,尽管可能发送了残差块。

编码处理100还进行编码图像的解码,以产生后续图像的运动估计所用的参考图像。这使得编码器和解码器能够接收位流以具有相同的参考帧。逆量化步骤111进行量化数据的逆量化,之后进行逆变换步骤112中的逆变换。逆帧内预测步骤113使用预测信息来确定要用于给定块的预测结果,并且逆运动补偿步骤114将通过步骤112所获得的残差添加至从一组参考图像116所获得的参考区域。可选地,应用去块滤波器步骤115以去除结块效应并提高解码图像的视觉质量。在解码器处应用相同的去块滤波器,以确保在不存在传输损失的情况下,编码器和解码器应用相同的处理。

在该编码处理中,本发明涉及残差块的编码。残差块是值具有与输入块(编码单位)相同的大小的块。各值是预测结果块的像素值和编码单位的相应像素值之间的差。因此,残差块中的值是带符号的整数。

预测编码的目的是以指示预测结果块为代价减小要编码的块中的值的量值。本文中的术语量值指定绝对值。容易理解,良好的预测结果块(这意味着该预测结果块的像素值非常接近编码单位的像素值)得到包括可以非常高效地编码的低量值的残差块。

对残差块进行编码包括三个主要步骤,即变换、量化和称为熵编码的实际编码。这些步骤在图1中由步骤107、108和109表示。

变换步骤107背后的基本思想是处理要编码的数字图像中的频率。在数字图像中,最高频率对应于最精细细节层次。可以从数字图像中去除这种最高细节层次,这样使用户的劣化感知变低并且实际节省了要编码的数据量。为了处理这些频率,需要在频域中对编码单位进行变换。可以使用诸如dct(离散余弦变换)或dst(离散正弦变换)等的多个变换。这些变换使得可以在频域中获得空间域中的与残差块相对应的系数块。

量化步骤108涉及进一步减小系数的量值并且甚至使这些系数中的一些系数无效。熵编码步骤109负责对其余的量化系数进行编码。

hevc以及许多其它编码标准不限于步骤107的单个变换。除大小外,如后面所示,还可以选择诸如dct或dst等的空间频率变换、或者选择不变换。无论是否对输出进行变换,在步骤108中都可以对这些输出进行量化,但hevc也允许跳过量化。因此,步骤109可以接收可能是变换系数或像素残差的量化或非量化信息。

编码处理100的所有步骤通常都在编码器装置内的相应模块中实现。这些模块可以以软件或硬件实现。

现在将论述hevc的与步骤102、108和109有关的一些方面。

量化影响编码效率。例如使用大的量化步长大小的积极量化暗示了保持较少的信息,但也暗示了所生成的相应位流数据的量减少。

因而,为了简单,这里呈现在例如hevc的参考软件中找到的经典实现。

对于变换的第i个系数dcti,可以按照如下计算其相应的量化系数qi:

qi=dcti/div;

其中:div与标量量化器关联,该div是不仅控制位率的降低、而且还控制信息的损失并由此控制所获得的数字图像的质量的参数。然而,dcti和qi经常需要是整数,并且除法运算的实现成本高,因此实际使用的公式变为:

qi=(dcti*fct+dz)>>shift;

其中:生成缩放系数(dcti*fct+dz),并且使该缩放系数移位以获得量化系数。

移位运算涉及:在表示整数的位图中使位向右移动。这等同于除以2的移位次幂。可以看出,在fct=2shift/div的情况下,这些表达式相似。

然而,由于这是整数运算,因此需要将结果舍入为整数。值dz(通常称为死区参数)控制“向下舍入”到最靠近整数以下的发生程度。等同于div/2的值2shift-1对应于舍入到最近整数。但该值在编码中极为重要:qi的较大值通常暗示着较大的位流。作为hevc的示例,使用先前的“舍入到最近”(即div/2)而不是实际使用的舍入(对应于dz的约div/3和div/6)导致20%的编码效率损失,即对于相同的质量,这需要多出20%的带宽/存储空间。

现在将详述hevc中与本发明的一些方面相关的细节。

图2示出在编码期间使用的数字图像向像素块的不同分割。

这里的第一类型的关注块是称为编码树块(ctb)201的正方形单位,然后根据四叉树将该正方形单位进一步细分为更小的正方形单位(通常称为块,但对于hevc而言更具体地称为编码单位202(cu))。现在考虑图2中的cu202。存在所述cu202的两次进一步分割。预测分区对于intra编码可以是2n×2n或n×n,并且对于inter可以是2n×2n、n×2n、2n×n、以及非对称运动分区(amp)nl×2n、......、2n×nb中的任一个。然后将各分区称为预测单位(pu)。

残差四叉树(rqt)将所述编码单位202分割成被称为变换单位(tu)的更小的正方形“变换”块。四叉树是本领域技术人员公知的树的类型,即,在该四叉树中,将叶分割成四个子叶,直到到达叶节点(即,不进行分割)为止。这使得能够高效地指示cu如何分割成tu。

特别地,rqt包含用于指示四叉树的哪些叶为空(即,无残差的四叉树叶)的标志。如果根据rqt在变换单位中存在数据,则发送与残差有关的信息。注意,hevc使得可以禁用tu中的变换,但同样地对量化残差和量化变换系数这两者进行编码。

应当注意,尽管变换单位表示数字图像的分割,但变换单位中的像素值通常是残差值而不是数字图像的原始像素值。这些残差值表示原始像素值和根据所选择的编码模式所确定的预测结果的像素值之间的差。

图3示出系数组和扫描顺序。

在使用变换系数时,残差经常具有与这些残差如何散布在变换单位中有关的统计偏差。相应地,以特定方式扫描残差允许利用这些偏差来减少所生成的位流数据的量。

首先,按4×4个系数的组(通常称为系数组(cg))来组织系数。在8×8的变换单位301、302和303中,存在四个这样的组,这些组在图3中对于变换单位301被命名为301-1、301-2、301-3和301-4,并且对于tu302和303也是以相同方式命名的。在hevc中的熵编码期间,通过将系数组标志设置为值1来用信号通知在系数组中存在变换系数。注意,在hevc中,发送最后一个系数的位置,因而可以确定最后一个非空系数组。另外,始终发送第一组301-1、302-1和303-1。在块已被变换、并由此包含变换系数的情况下,该第一组保持最低频率作为dct系数。

系数包括在位流中的顺序也很重要。首先,该顺序采用倒序:首先发送最后一个系数。除此之外,对于某些情况(其详情与本发明不相关),对于intra预测模式的4×4和8×8的变换单位存在水平扫描和垂直扫描。在其它情况下(inter预测、intra预测的其它情况),扫描是对角扫描。水平扫描顺序由变换单位302示出,垂直扫描顺序由变换单位303示出,并且对角扫描顺序由变换单位301示出。

图3示出整体设计:从最后一个系数开始(其组隐含地为非空并且不发送相应的标志),其中为了便于解释,整体设计以组301-4、302-4和303-4为例。根据组内的系数的模式来扫描系数。一旦根据所述扫描读取了所述组中的系数的所有信息,则测试下一组。这些下一组是组301-2、302-3和303-2:系数扫描顺序由此也适用于这些系数组。

在任何情况下,对于必须明确地用信号通知的各组(即,除第一组和最后一组以外的所有组),必须发送标志以判断该组是否保持残差数据。在下一部分将详述该残差数据。

图4示出针对非空系数组401如何发送残差数据,而且还用于示出包含明确发送的单个系数组的4×4变换单位。

特别地,存在名为“last_sig_coeff_x”和“last_sig_coeff_y”的句法元素,以针对各变换单位指示最后一个系数的位置。更具体地,这允许导出以下信息。最后一个系数组:由于在最后一个系数组之后不存在系数,因此相应的系数组是空的;并且在该最后一个系数组内,存在多少个系数,其它系数组明确地用信号通知这些系数组的16个系数。

接着,对于根据扫描的该组的各发送系数,称为“sig_coeff_flag”的标志指示系数是否为零:如果系数为零,则不需要其它信息获知该系数的值。这非常重要,因为在量化之后变换残差非常稀疏,并且零是最常用的值。实际上,该标志与目前展示的处理有关。

既然所有非零系数都是已知的,存在四个迭代的所谓的顺序信息映射:各新映射提供与哪些系数需要更多信息有关的信息、即与下一映射有关的信息。

第一个映射指示所发送的各系数是否为非零(“sig_coeff_flag”):解码器在移动到下一等级之前,将对标志的完整映射进行解码。

下一映射指示:对于各非零系数,系数量值是否大于1(“coeff_abs_level_greater1_flag”)。

下一映射指示:对于大于1的系数量值,该系数量值是否大于2(“coeff_abs_level_greater2_flag”)。

下一映射针对大于2的系数量值,指示具有特定熵代码族(“3阶指数哥伦布代码”,其详情对于本发明而言并不重要)的量值的余数(即,对于量值的系数“等级”,该系数为等级3)。

最后一个映射针对所有非零系数指示系数的符号(“coeff_sign_flag”)。

由于信息的各等级需要先前等级,因此迭代地确定信息的各等级,并且各等级产生所谓的映射。

图4示出残差数据的这种编码。系数组401包含系数。根据通过402所示的扫描顺序来扫描系数组401。这意味着按402的索引顺序从右下角向左上角扫描系数组。在该扫描顺序中,第一系数为空,按该扫描顺序遇到的第一个非空系数是具有值-1的右上系数。这对应于具有坐标(3,0)的所谓的最后有效系数。

因此,表403示出系数的编码。该表的第一行包含与第一非空系数-1的x坐标相对应的值3。该表的第二行包含与第一非空系数-1的y坐标相对应的值0。第三行与有效系数映射相对应,该有效系数映射从第一非空值-1开始,直到按扫描顺序的与左上角的值15相对应的最后一个值为止。对于各其余系数,利用值“1”表示相应系数为非空,并且利用值“0”表示相应值为空。其余系数的序列(-1,0,1,0,0,0,3,0,-5,9)对应于如该表的第三行所示的映射(1,0,1,0,0,0,1,0,1,1)。

对于各非空系数,第四行指示非空系数是否具有大于1的绝对值。因此,利用“1”值指示与系数3、-5和9相对应的值。第五行指示哪个系数的绝对值大于2,在第五行中示出相同的系数。

接着,第六行指示绝对值大于2的各系数的其余值。其余值与系数绝对值减去3相对应。因此,第六行指示与系数(3,-5,9)相对应的其余值(0,2,6)。

第七行针对各非空系数指示该非空系数的值的符号。因此,在该行中系数-1和-5具有“1”值。

表404示出顺次地与表403中的实际值相对应地编码在位流中的如此得到的序列。前三行对应于有效映射,并且之后的行对应于系数等级和符号。

在图1的步骤109中,使用上下文自适应二进制算术编码(cabac)对在404中示出的所产生的值进行熵编码。

缩写为cabac,该编码利用来自位流中的先前符号(例如,标志或句法元素)的值的条件概率来有效地编码相应符号的后续值。这可以用两个示例来例示。用各新符号更新这些概率。

在图3中,如果设想系数组301-1在变换单位中的某个位置处(即,忽略系数组301-1隐含地保持8×8变换单位的残差数据),则用于对该系数组的系数组标志进行编码的上下文部分涉及检查该系数组的(按光栅扫描顺序的)右邻和底邻的所考虑的标志的值,这些值为{0,0}、{1,0}、{0,1}和{1,1}其中之一。这使得能够导出上下文,从而使得求出所述标志的条件概率。一旦读取了该条件概率,使用该条件概率的有效值来更新所述概率。

同样,在图4中,对各有效系数标志进行算术编码,并且条件概率也取决于其邻居的有效系数标志的值。

这里详细说明了hevc的情况,hevc是本发明人所知的第一个基于块的编码标准,以将系数的子集的该概念引入空间频率变换内。目前正在研究的是hevc的继任者,被非正式地称为jvet(联合视频勘探小组),jvet的参考软件实现被称为jem(jointexplorationmodel(联合勘探模型)的首字母缩写)。jvet目前除hevc之外主要包括许多新增内容。结果,与熵编码有关的许多细节(特别是系数的上下文的导出)已改变。然而,系数组仍存在,因此所描述的处理也适用。应当注意,无论系数组大小改变还是不同的子集(包括变换单位和系数组之间的结构、或非正方形等),都可以很简单地变换所描述的处理。

本发明可以应用的编解码器的另一示例是尚未完成的计划作为由开放媒体联盟发布的第一编解码器的av编解码器。其适用的示例例如是将频率以特定方式分割成子带、并且对该等级的特定信息进行编码。

结果,应当理解,诸如编码单位或变换单位等的hevc特定的术语的使用同样可以被编码块或变换块、或者与特定编解码器相关的任何相应术语取代。

图5示出根据本发明实施例的切换量化处理。

该量化处理从获得给定的变换单位(tu)的步骤501开始;该步骤可被视为根据所述tu的处理的初始化,其详情与本发明不相关。考虑到所述变换单位,由此已知各种性质,诸如变换单位大小、其类型(inter或intra预测)或者其条带类型。因此,在步骤502中,编码器根据变换单位性质来选择量化的各种设置以及切换(量化)模型参数。特别地,编码器将选择适合用在量化公式中的死区、以及诸如步骤508中所使用的阈值t等的用于切换决定的模型参数。这些参数可以预先凭经验确定,并且在优选实施例中是恒定的。例如,对于大的变换,可以选择所述模型参数以得到不太频繁的切换;例如,通过降低这些变换的t值。

然后,量化处理通过在步骤503中选择第一个系数组来开始对系数组进行操作,即变量j与系数组索引有关。注意,在该等级,独立地处理系数组,因此不需要处理系数组的特定顺序,而该顺序可以是布局位流的(如从图3或4看到的)自然顺序。

然后,在步骤504中,该处理初始化针对当前选择的系数组的处理:选择第一个系数(此外,这里不需要特定顺序),即参考系数组内的系数索引的变量k。在同一步骤中,将切换标准的值(量值的总和)初始化为0。

选择迭代变量j和k,使得这两个变量不会与以上在说明典型的量化处理时使用的变量i混淆。索引i指的是变换单位内的系数(而不是系数组)的索引。索引i与频率有关。在i和对(j,k)之间存在双射关系,即对于i的各现有值存在唯一的一对值j和k,反之亦然。

最后,另一特征涉及第一系数组(j=0):由于隐含地用信号通知该特征,因此可以特别地修改切换处理。实施例涉及:在这种情况下减小步骤508中的t的值。另一实施例涉及:将步骤504中的总和初始化为严格大于0的值(实际上等同于降低t)。

在步骤505中,例如使用已经说明的公式来针对当前系数产生量化值,并且更新总和,其中该公式涉及使缩放系数移位:q=(dct*fct+dz)>>shift,其中死区是通过步骤502提供的。更新总和通常涉及将当前量化系数的量值与总和相加。

在编码器是hevc定制的情况下,在步骤506中检查是否已处理了当前系数组中的nc个系数。在除最后一个系数组之外的所有系数组中,nc为16。对于最后一个系数组,如上所述,可以从last_sig_coeff_x和last_sig_coeff_y的值推导出nc。如果仍存在要处理的系数,则在循环回到步骤505之前,在步骤507选择下一系数。

否则,已处理了当前系数组,并且总和的最终值是已知的。因此,步骤508检查总和是否低于预定义的阈值t。如果总和低于阈值t,则切换当前系数组是有利的,这在步骤509a中发生。结果,在步骤509b中设置为0的相应标志将指示该系数组是空的。切换系数组意味着将该系数组的所有系数都设置为零。

在所有情况下,处理都进入步骤509b,在步骤509b中,根据系数组的内容来设置系数组标志:如果系数组是空的、这意味着所有量化系数都为空,则标志为0,否则标志为1。接着,步骤510检查是否已处理了所有系数组。如果判断为“否”,则步骤511在循环回到步骤504之前选择下一系数组。否则,完全处理了变换单位,并且确定了量化系数的值。然后,可以导出要写入位流中的相应句法元素(包括系数组标志)。

根据所述的处理,在表示系数组的量化系数的量值的求和结果的值低于预定义的阈值的情况下,量化允许将该组中的所有量化系数都设置为零。该技术构成进行针对率/失真标准而优化的量化的非常高效的方式,而不需这种优化经常需要的通常的高复杂度。与非优化量化相比,针对相同的速率,如此得到的视频质量提高,其代价是较小的复杂度增加。

图6a说明如与图5相关地所述的步骤505的替代实施例。在本实施例中,量化计算分成两个步骤,其中量值的求和基于中间量化结果。

在此提醒,图5的量化通常通过使系数dctk,j移位了预定义的移位值“shift”来执行。在第一步骤601中,获得参数k和j。在本实施例中,在步骤602中,根据预定义的参数m,首先使系数dctk,j移位了与shift-m相对应的第一值,这样得到称为p的中间量化结果。接着,在步骤603中,使该中间量化结果p移位了值m,以获得如此得到的量化系数qk,j。因此,本领域技术人员可以将p识别为浮动/有理量化值的定点表示,其中m个最低位与小数部分相关,而qk,j是(舍入之后的)相应整数。在步骤604中测试得出量化系数qk,j不为零的情况下,在步骤605中,代替对qk,j的量值求和,而是对中间结果p的量值求和。在处理结束时,值得注意的是,如此得到的量化系数具有与先前实施例中所获得的值相同的值。唯一的区别是在图5的步骤508中使用的总和值以确定整个系数组的切换。

中间量化结果的量值的总和高于量化系数的总和。结果,如果不修改阈值t,则这将降低整个系数组被切换的概率。同样,这使得能够实现切换决定的更大准确度;在基于量值(以及由此产生的失真)的情况下,该决定将更粗略,这导致系数组在不应被切换时被切换。

图6b示出图5的步骤505的另一替代实施例。

根据本实施例的第一方面,在单个中间量化系数p的量值上引入两个阈值t1和t2。这两个阈值定义范围[t1,t2],其中t1低于t2。

在决定切换整个系数组时,将不考虑量值低于最低阈值t1的中间量化系数p。即,这些中间量化系数p的量值将不会被用来针对用以切换系数组的阈值t而更新用作标准的量值总和。在t1将为空的意义上,t1是依赖于实现的,其代价是总和变大。降低t1的值也可以强制使用带符号的算术运算。t1还可以表示不需要立即量化为0的系数的最小量值。

如果系数组中的至少一个中间量化系数p的量值高于最高阈值t2,则不切换整个系数组。这可以通过以下来实现:用大的数值更新总和以确保在发生步骤508的测试的情况下总和将大于阈值t,或者降低阈值t以实现相同的效果。根据视频编码标准、编码器算法、噪声等级和视觉检查,t2可以是凭经验确定的值。t2通常表示系数的量值的阈值,其中在大于该阈值的情况下,系数表示要切换这些系数的过多信息。

值得注意的是,在本文所述的所有实施例中,可以有利地引入如在本实施例中所进行的将阈值定义为取决于量值包括在预定义范围内的系数组中的量化系数或中间量化系数的数量。

本实施例的特定实现(即图6b所述的实现)定义了两个附加参数a和b,以将阈值t表示为:

t=a*n+b;

其中:n是量值在范围[t1,t2]内的中间量化系数的数量,这些中间量化系数被称为可切换系数。

值得注意的是:

∑n|p|<t;其中t=a*n+b;

等同于:

∑n(|p|-a)<b。

该实现在图6b中示出,其中在步骤508中阈值t被阈值b取代。

在与图6a的相似步骤601相对应的第一步骤601中,获得系数的坐标k和j。

在与图6a的相似步骤602相对应的下一步骤602中,计算中间量化系数p。

在步骤606中,如果中间量化系数p的量值的值低于阈值t1的值,则在与图6a的相似步骤603相对应的步骤603中完成量化。没有更新总和。

在步骤607中,如果中间量化系数p的量值的值高于阈值t2的值,则将该总和强制为值b,以确保步骤508中进行的测试将永远不会触发整个系数组的切换。在此提醒,在本实现中,代替t,将值b用作阈值。

如果中间量化系数p的量值在[t1,t2]的范围内,则在步骤608中,用量值减去参数a来更新总和。

在任何情况下,在处理结束之前,在步骤603中完成系数的量化。

根据本实施例,测试可以使用与a*n+b相对应的值t发生,而不需要计算n。

应当注意,考虑阈值t1和t2的值,模型参数a和精度m使得可以确保sum的值的范围。这样做提供了实现的权衡,例如减少变量的位深度,并由此降低切换方法所使用的操作的实现成本(电路尺寸、能量消耗等)。在特定实施例中,m=0,即p=dctk,j*fctk,j+dz。本领域技术人员应当显而易见,考虑到这一点可以相应地缩放前面所述的所有参数(dz、a、b、t1和t2),直到p=dctk,j+dz的点为止。

在所有这些实施例中,因子fct和死区dz可以取决于坐标k和j。即,等式qk,j=dctk,j*fct+dz变为qk,j=dctk,j*fctk,j+dzk,j。因此,可以使一些系数的重要性更大。通常,可以强调低频系数。

图7示出用以基于k和j以及新参数c来确定死区dzk,j的方法。

所提出的用于确定死区参数dzk,j的方法是基于利用系数组内的系数的索引k线性地缩放的全局死区参数dz。定义常数c,以控制所应用的缩放量。即,根据以下等式针对具有坐标k和j的各系数来确定死区参数dzk,j:

dzk,j=dz-c·k。

实际上,众所周知,本领域技术人员特别是通过使用称为“块结束”的传统信令来尝试强制使变换单位中的更多的更高频率(即,i的更大值)变为0。这通常通过使用对fctk,j项产生影响(通常为减小)的量化矩阵来进行。目的是避免对视觉上不太重要的信息(诸如高频等)进行编码,并且优化与last_sig_coeff_x/y相似的句法元素(例如,jpeg或其它基于变换的编解码器的块结束信令)。但这里,意图不同并且依赖于系数组内的各系数的sig_coeff_flag的上下文编码。实际上,该标志的cabac上下文(意味着概率)取决于紧挨当前系数的右方和下方的系数的各个标志的值。系数组的第一系数(k的较低值)与末尾的系数(k的较高值)相比更加重要,并且更有可能为非空(值1的sig_coeff_flag)。如果先前编码的标志为0,则系数组的末尾处的具有值0的编码标志更有可能生成较少的数据。相反,如果具有较大k值的这些标志具有值1,则在其开始处具有值1的标志更可能生成较少的数据。此外,为了增加切换系数组的概率,较高频率应被更多地量化并且在决定是否切换系数组所使用的总和中所占比例较小。因此,仅基于索引k的加权是用以考虑该方面并且实现切换不太重要的系数组的预期结果的方式。

在特定实施例中,常数c取两个不同的值c1和c2,其中c1大于c2。常数c用c1初始化,并且在遇到未被切换的第一个系数组时改变为c2。该思想是使最后一个系数按编码顺序靠后将导致位率降低。因此,在找到非零系数组之前,应当稍多量化系数。

图7示出与关于图5呈现的切换方法相组合的该特定实施例。相同的步骤具有相同的附图标记,并且这里不进行说明。

步骤702对应于步骤502,其中添加了确定参数c1和c2。这些确定参数的值高度依赖于m,并且可以进一步适应于变换类型和大小以及条带类型。在最简单的情况下并且为了例示,c1分别地对于帧内条带为0.2并且对于其它条带为0.1,而c2为1/2或甚至为0。

步骤703对应于步骤503,其中添加了用值c1来初始化常数c。

在步骤710中,对于各系数,根据所提出的等式来计算死区参数。

在步骤711中,在步骤508的测试为否定、从而指示没有切换整个系数组的情况下,常数c取值c2。可以注意到,用值c1初始化的常数c保持该值,同时变换单位内的系数组被切换并且在第一非切换系数组的编码之后切换为值c2。

图8是用于实现本发明的一个或多个实施例的计算装置800的示意框图。计算装置800可以是诸如微计算机、工作站或轻型便携式装置等的装置。计算装置的其它示例包括集成电路、asic(“专用集成电路”)、片上系统(soc)、fpga(“现场可编程门阵列”)或包括离散组件的逻辑电路中实现的定制处理装置。计算装置例如可以形成照相机、监视照相机、门口机或编码装置的一部分。计算装置800包括通信总线,其中该通信总线连接有以下组件:

-处理单元801,其可以是任何种类的处理器,例如诸如微处理器等的中央处理单元(cpu)和图形处理单元(gpu);

-表示为ram的随机存取存储器802,用于存储本发明实施例的方法的可执行代码以及寄存器,其中这些寄存器被配置为记录实现根据本发明实施例的用于对图像的至少一部分进行编码或解码的方法所需的变量和参数。ram802的存储器容量例如可以利用连接至扩展端口的可选ram来扩展;

-表示为rom的只读存储器803,用于存储实现本发明实施例所用的计算机程序;

-网络接口804,其通常连接至发送或接收要处理的数字数据所经由的通信网络。网络接口804可以是单个网络接口、或者包括不同的网络接口的集合(例如,有线接口和无线接口或者不同种类的有线接口或无线接口)。在处理单元801中运行的软件应用程序的控制下,将数据包写入网络接口以供发送或者从网络接口读取数据包以供接收;

-用户接口(ui)805,其可用于从用户接收输入或向用户显示信息;

-表示为hd的硬盘806,其可被设置为大容量存储装置;

-i/o模块807,其可用于相对于诸如视频源或显示器等的外部装置进行数据的接收/发送。

可执行代码可以存储在只读存储器803中、硬盘806上或者例如盘等的可移除数字介质上。根据变形例,程序的可执行代码可以在执行之前利用通信网络经由网络接口804来接收,从而存储在通信装置800的诸如硬盘806等的存储部件其中之一内。

处理单元801被配置为控制和引导根据本发明实施例的程序的指令或软件代码的一部分的执行,其中这些指令存储在上述存储部件其中之一内。在通电之后,处理单元801例如能够在从程序rom803或硬盘(hd)806加载了来自主ram存储器802的与软件应用程序有关的指令之后,执行这些指令。这种软件应用程序在由cpu801执行的情况下,使得进行根据本发明的方法的各步骤。

图5~7所示的算法的任何步骤可以通过利用可编程计算机器(诸如pc(“个人计算机”)、dsp(“数字信号处理器”)或微控制器等)执行一组指令或程序来以软件实现;或者通过机器或者专用组件(诸如fpga或asic等)以硬件实现。

尽管以上已经参考具体实施例说明了本发明,但本发明不限于这些具体实施例,并且本领域技术人员将明白存在于本发明的范围内的变形。

在参考仅以示例方式给出且并不意图限制本发明范围的前述例示实施例的情况下,许多其它修改和改变对本领域普通技术人员是不言自明的,其中所述范围仅由所附权利要求书来确定。特别地,在适当情况下,可以互换来自不同实施例的不同特征。

在权利要求书中,词语“包括”没有排除其它元件或步骤,并且不定冠词“a”或“an”没有排除多个。在相互不同的从属权利要求中陈述不同的特征的仅有事实并不表明不能有利地使用这些特征的组合。

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