基于自适应变换的视频压缩的最后系数编码的制作方法

文档序号:32942634发布日期:2023-01-14 09:33阅读:19来源:国知局
基于自适应变换的视频压缩的最后系数编码的制作方法
基于自适应变换的视频压缩的最后系数编码
1.本技术是申请号为201780041911.0、申请日为2017年07月12日、发明名称为“基于自适应变换的视频压缩的最后系数编码”的发明专利申请的分案申请。
技术领域
2.本原理一般涉及视频压缩和解压缩系统,更具体地涉及基于块的变换。


背景技术:

3.变换t将n个像素的块变换为n个变换系数。通过将逆变换t-1
应用于变换系数以获得回像素值,该处理是可逆的。在部分变换p的情况下,n个像素被变换为少于n个变换系数,m,其中m《n。等效地,可以假设丢失的m-n个系数被设置为零。将近似“逆”变换p’应用于变换系数,以获得初始像素值的近似值。p’是近似值而不是精确的数学逆,这是因为部分变换是不可逆的。典型地,系数的部分变换块表示像素块的低频信息。
4.在一些视频编码标准中,将变换系数放入与扫描顺序相关联的二维(2d)块中;典型地,从高频到低频。在系数量化之后,第一,相对于高频到低频扫描顺序,非零量化系数被称为最后编码系数,如图1所示。
5.在与系数相关联的2d块拓扑中,对于大小为n=n
×
n的块,最后编码的系数具有两个坐标(x,y),如图2所示。
6.根据定义,0≤x,y≤n-1。将这两个坐标编码到比特流作为信息,以在解码器侧确定非零编码系数。至少,这些坐标指示坐标(x,y)的系数不为零,并且相对于低到高扫描顺序,在该系数之后的系数都是零。
7.可以添加指示变换系数的显著性的附加信息,以用信号通知剩余系数(图1中的问号标记的)是否为零。
8.传统上,在过去几十年中开发的许多视频和图像编解码器中,固定变换,诸如,离散余弦变换或离散正弦变换,例如被应用于每个块的像素以获得变换系数。然后,通过量化器q量化这些系数,以获得由熵编码器(诸如例如vlc,算术编码器或上下文自适应二进制算术编码(cabac))编码的量化系数。
9.期望尽可能高效地编码最后编码的系数位置。
10.作为固定变换的替代,可以使用内容自适应部分变换。这使得更好的能量压缩,从而降低比特率。然而,必须将自适应变换发送到解码器,这反过来增加比特率。如果没有注意发送这样的变换,尽管有更好的压缩,但全局比特率增加,并且自适应变换没有任何好处。
11.hevc/h.265标准通过使用两个坐标(x,y)引入最后编码系数位置的编码。使用截取的一元码二进制化每个坐标,然后使用具有基于上下文的信道适配的cabac编码hevc术语中的每个比特或“bin”。在hevc中,两个坐标x和y被独立编码和解码。


技术实现要素:

12.通过本原理解决现有技术的这些和其它缺陷和缺点,本原理针对使用部分变换的大小的知识来编码通过使用部分变换获得的最后编码系数的方法和装置。
13.根据本原理的一个方面,提供一种编码一组变换系数的方法,包括以下步骤:变换图像值的块以获得变换系数;熵编码最后编码系数的位置,其中,最后编码系数的位置由两个坐标提供,使得y坐标的熵编码取决于用以获得系数的部分变换的大小的知识。
14.根据本原理的另一方面,提供编码一组变换系数的装置,包括:对图像值的块操作以获得变换系数的变换电路;以及熵编码器,其中,变换系数的最后编码系数的位置由两个坐标提供,使得y坐标的熵编码取决于用于获得系数的部分变换的大小的知识。
15.根据本原理的另一方面,提供解码一组变换系数的方法。该方法包括熵解码变换系数以生成最后编码系数的位置,其中最后编码系数的位置由两个坐标(x,y)提供,其特征在于,y坐标的所述熵解码取决于用于获得系数的部分变换的大小的知识,以及逆变换变换系数以获得图像值的块的步骤。
16.根据本原理的另一方面,提供了解码一组变换系数的装置。该装置包括熵解码器,根据变换系数对表示最后编码系数的位置的代码进行操作,其中最后编码系数的位置由两个坐标(x,y)提供,其特征在于,y坐标的熵编码取决于用于获得系数的部分变换的大小的知识。该装置还包括逆变换电路,对变换系数进行操作以获得图像值的块。
17.根据本原理的另一方面,提供一种非暂时性计算机可读存储介质,具有存储于其上的指令,用于解码一组变换系数,使得最后编码系数的位置由两个坐标(x,y)提供,其特征在于,y坐标的熵编码取决于用于获得系数的部分变换的大小的知识。
18.根据本原理的另一方面,提供一种非暂时性计算机可读存储介质,具有存储于其上的比特流,用于解码一组变换系数,使得最后编码系数的位置由两个坐标(x,y)提供,其特征在于,y坐标的熵编码取决于用于获得系数的部分变换的大小的知识。
19.根据本原理的另一方面,提供一种用于编码的方法,包括:将部分变换应用于图像值的块以获得变换系数块;以及对变换系数块进行熵编码,其中,变换系数块的熵编码包括对表示变换系数块中最后译码的变换系数的位置的坐标的语法元素进行熵编码,语法元素的熵编码取决于部分变换的大小。
20.从以下结合附图阅读的示例性实施例的详细描述,本原理的这些和其他方面,特征和优点将变得明显。
附图说明
21.图1示出变换单元的扫描顺序。
22.图2示出最后编码系数的坐标的示例。
23.图3示出具有12个系数的4
×
4变换单元中的编码的示例。
24.图4示出坐标值的后缀和前缀确定。
25.图5示出即时学习方案。
26.图6示出bd率增益对各种场景的变换矢量的数量。
27.图7示出具有部分变换的8
×
8块的编码。
28.图8示出上下文值的结构。
29.图9示出上下文值的演变。
30.图10示出取决于相邻信道的上下文选择的示例。
31.图11示出使用本原理编码一组变换系数的方法的一个实施例。
32.图12示出使用本原理编码一组变换系数的装置的一个实施例。
33.图13示出使用本原理解码一组变换系数的方法的一个实施例。
34.图14示出使用本原理解码一组变换系数的装置的一个实施例。
具体实施方式
35.通过以下实施例解决的技术问题是降低已经应用编码2d部分变换的像素的变换块中的最后编码系数的位置的成本。
36.这些实施例是对视频编码标准中常用的熵编码方案的改进。一种这样的视频编码标准是hevc/h.265标准,但实施例不限于该标准。
37.本原理的主要构思是,如果对像素值的块使用部分变换,则已知一些变换系数一定为零,因此对最后编码系数的位置和表示最后编码系数的位置的坐标(x,y)施加一些约束。在描述的实施例中,在使用部分变换来将像素块变换为变换系数的情况下,关注在于使用这样的约束来高效地编码两个坐标(x,y)。
38.本构思使用的事实是,在m《n的情况下并非所有坐标对(x,y)都是可接受的,因此(x,y)的编码更高效。这可以使得改进压缩性能。
39.具体地,如果使用部分变换,则隐含地考虑到并非所有坐标对(x,y)都是可接受的事实,使得(x,y)的编码更高效。在具有部分变换的该具体实施例中,使用部分变换已经对修改的hevc标准进行测试,并且已经示出(x,y)的改进编码导致约-0.5%的压缩增益。
40.在此呈现的构思提出了保持hevc算法的主要部分来编码坐标对(x,y),但是增加特征,也就是,一旦得知x就降低编码y的可能范围。
41.例如,如图3所示,考虑具有部分变换p的4
×
4块,导致m=12个变换系数。结果,得知系数0到11可以是非零的,但系数12到15一定是零。
42.最后编码系数的坐标x在0(对于位置0,1,3,6)到3(仅对于位置9)的范围内。一旦得知x,则y的范围实际上取决于x。在上面的示例中,具有:
43.x=0或x=1导致y在[0,3]范围中
[0044]
x=2导致y在[0,2]范围中
[0045]
x=3导致y=0;在该情况下,甚至不需要编码y。
[0046]
很容易理解这个编码的处理在解码x时是可解码的,然后推导出y的范围,假设m已知并在某处编码,然后解码y。
[0047]
在hevc中,坐标x或y被分成前缀和后缀,如图4所示。
[0048]
例如,如果坐标值是14,则前缀是7,后缀以2比特编码。后缀是从坐标值中减去第一个值后的余数,14-12=2。如果坐标值为3,则前缀为3,但没有后缀。
[0049]
使用截取的一元码二进制化前缀。基于得知提供前缀值的上边界的块大小来执行截取。使用cabac和专用上下文来编码二进制化前缀的每个比特。
[0050]
例如,在4
×
4块中,可能的前缀是分别被二进制化为1,01,001和000(截取的)的0,1,2或3。在另一示例中,在8
×
8块中,可能的前缀从0到5并且二进制化为1,01,001,0001,
00001和00000(截取的)。
[0051]
使用固定长度码来二进制化后缀,并且在旁路模式中使用cabac而不使用上下文来编码固定长度后缀。例如,如果坐标值在16x16块中为14,则前缀为7(二进制化为0000000),后缀为2(二进制化为1 0并以2比特编码)。
[0052]
使用仅用于前缀的上下文,如hevc中那样,保留到前缀和后缀的二进制化处理。本原理的主要特征是y的上下文可以取决于x的值而在范围内减小。
[0053]
通常,变换t将n个像素的块变换为m=n个变换系数。通过将逆变换t-1
应用于变换系数以获得回像素值,该处理是可逆的。在部分变换p的情况下,n个像素被转换为较少的m《n个变换系数。等效地,可以假设缺少的m-n个系数被设置为零。“逆”变换p’(当然不是数学逆,因为部分变换不可逆)应用于变换系数,以获得初始像素值的近似值。典型地,部分变换系数表示像素块的低频信息。
[0054]
如果使用部分变换,则已知一些的m-n个变换系数一定为零,因此对最后编码系数的位置和坐标(x,y)施加一些约束。在该情况下,通过隐含地使用这些约束,表明在使用部分变换将tu像素变换为变换系数的情况下,该实施例自动处理两个坐标(x,y)的高效编码。
[0055]
代替诸如dct或dst的系统变换,可以使用一组自适应的正交变换,而不是使用不同的分类和变换优化方案在大训练组上离线学习。将这组变换馈送到编解码器,并且在率失真优化(rdo)循环中选择组中的最佳变换。更为自适应的方法是学习用于序列的特定帧内帧的一组正交变换。这在本说明书的其余部分中被称为基于即时(on-the-fly)块的变换学习方案。该方案如图5所示。
[0056]
图5的框图示出典型即时方案,其中算法被分成两部分,即视频/图像编解码器内的残差块的分类和新的变换组的生成。第一步将残差块分类为k个不同的类(s1...sk)。在第二步中,使用用于特定类的重构误差的最小化获得每个类的新变换。典型地,奇异值分解(svd)和(karhunen-lo
è
ve变换)klt用于生成正交变换组。重复这两个步骤直到达到解的收敛或停止标准为止。如框图中看到,系统的输入是连同一些初始不可分离正交变换组(t 1
...tk)的帧内帧或图像。系统输出一组学习的变换(t
’1,...t’k
)以及需要被编码到要发送到解码器的比特流中的语法信息。典型地,与编码帧要求的比特相比,编码这些变换基矢量要求的开销比特非常大。
[0057]
由于svd的能量压缩特性,观察到通过推导学习变换的不完整表示可以显著降低开销成本,其中只有前

m’个矢量被传送到解码器而剩余的(n-m)个变换矢量使用类似于gram-schmidt方法的完整算法生成或被强制为零,由此产生部分变换。
[0058]
为了说明丢弃变换的最后几个矢量对bjontegaard失真率(bd率)的影响,在4k序列

peopleonstreet’和

traffic’上学习四个大小64x64的不可分离的优化变换。对这些序列执行编码测试,其中保留前

m’个矢量,然后使用完整算法完成其余的基矢量。图6示出性能增益相对于编码基矢量的数量的变化。垂直轴是相对于锚的增益百分比(hevc测试软件hm15.0)并且没有考虑变换成本。
[0059]
在图2中观察到,通过仅保留变换矢量的前一半,即m=32,在bd率方面存在可忽略的性能下降。对于m=16的情况,即当仅编码前16个基矢量时,与通过编码所有

n’个基矢量获得的总比特率相比,性能下降1%,但是变换矢量的开销成本减少到总开销的四分之一。对于m=8,在bd率性能方面存在相当大的性能损失,但也进一步降低开销。一般地,这表明
在性能损失和开销成本之间存在折衷。
[0060]
因为当仅编码前'm'个变换矢量时bd率方面的性能下降取决于视频内容,所以内容自适应方法有必要来估计

m’的最佳值。直观地,在低比特率下,大多数系数被量化为零,而在高比特率下,即使在高频率下系数的能量也是显著的。因此,

m’的值取决于内容以及量化参数qp。
[0061]
平均的残差信号能量更集中在前几个系数中,其中dc系数具有平均最大能量,并且随着我们朝向更高频率系数而减小。因此,大多数高频系数被量化为零。可以应用基于简单阈值的方法以计算“m”的最佳值,其要求作为开销与帧一起被编码。
[0062]
设e是dct系数的能量之和。阈值t由参数p与e相乘来定义以获得,
[0063]
t=p
·e[0064]

m’的值可以简单地根据平均能量大于该阈值的系数的数量来计算。

p’的值可以实验地找到。表1示出对于选择的

p’值,在编码的矢量的总数量的百分比方面,高于该阈值的矢量的数量

m’的变化。从表1中观察到,在高qp下,与低qp下要求的相比,所要求的矢量的平均数量要少得多。此外,矢量的数量

m’也取决于内容变化。
[0065]
表1:要编码的矢量的数量与不同序列的阈值
[0066][0067]
当使用部分变换应用本原理时,y的范围取决于x。
[0068]
再次考虑图3的示例,使用m=12的部分变换,使得最后的16-12=4个总是为零。应该如何编码与系数位置12相关联的坐标(2,2)最高效?一种可能性是首先编码x=2。其二进制化是001,如在hevc中。然后,得知y的可能范围是0到2,因此可以使用直到2的截取的一元码,而不是像hevc中那样直到3的截取的一元码。这导致用于y的二进制化00,而不是001。并且,在二进制化处理中获得一个比特,从而导致更好的压缩性能。
[0069]
在图3的示例中使用该实施例的二进制化的一些附加示例:
[0070]
(3,0)二进制化为(000,无)而不是(000,0)
[0071]
如在hevc中,(0,0)二进制化为(0,0)
[0072]
(3,3)是不可能的坐标。
[0073]
具有部分变换的实施例容易地扩展到使用后缀的坐标y,如图7中的8x8 tu中的示例,使用m=57的部分变换。前57个变换系数可以是非零,但最后64-57=7个系数一定为零。让我们假设最后编码系数位置是55。这给出坐标(x,y)=(5,6)。y的前缀为5,其后缀为0。在hevc中,后缀应编码为1比特,但在我们的情况下,我们得知后缀不能为1,这是因为系数58
(恰好低于系数55)在这种情况下已知一定是零,所以不编码后缀并获得一比特编码。
[0074]
在hevc/h.265标准中,在算术编码器中已经提出用于编码二进制数据的新工具,即上下文自适应二进制算术编码(或cabac)。取值0或1的二进制符号s按照概率p为1和1-p为0而被编码。该概率从上下文推导出并在每个符号编码之后进行适配。
[0075]
上下文值是8比特值,见图8。前面的比特表示最可能符号(或mps),并且接下来的7比特表示从其推导概率p的概率p’(或状态)。
[0076]
取决于编码符号是否等于mps,按照图9中描述的处理来更新上下文值。
[0077]
通过两个表进行演进(在编码符号是mps的情况下transidxmps,在编码符号不是mps的情况下transidxlps,即,是最小可能符号(lps))。这些表在表2中被提供用于其名称为pstateidx的入口p’。
[0078]
表2:用于上下文状态演变的表
[0079]
表9-41-状态转换表
[0080]
pstateidx0123456789101112131415transidxlps0012244567899111112transidxmps12345678910111213141516pstateidx16171819202122232425262728293031transidxlps13131515161618181919212122222324transidxmps17181920212223242526272829303132pstateidx32333435363738394041424344454647transidxlps24252626272728292930303031323233transidxmps33343536373839404142434445464748pstateidx48495051525354555657585960616263transidxlps33333434353535363636373737383863transidxmps49505152535455565758596061626263
[0081]
符号s作为mps的概率p
mps
在8比特上从0到127线性量化。其根据上下文值从以下推导出来:
[0082]
p
mps
=(p’+64)/127=(pstateldx+64)/127
[0083]
并且取决于mps的值,从p
mps
明显推导出符号s的概率p为1。
[0084]
如果mps=1 p=p
mps

[0085]
如果mps=0 p=1-p
mps
.
[0086]
上下文自适应编码是强大的工具,其允许编码动态地跟随符号所属的信道的统计。此外,每个信道都应该有其自己的上下文,以避免混合统计并损失处理的好处。这使得广泛使用hevc/h.265(其使用数百个上下文)中的很多上下文,以为很多信道建模。例如,在使用上下文的所有信道中,存在
[0087]
·
运动矢量残差,
[0088]
·
tu编码标志,
[0089]
·
最后显著系数位置,
[0090]
·
编码组编码标志,
[0091]
·
变换系数显著标志,
[0092]
·
变换系数幅度(大于1且大于2)标志,
[0093]
·
sao数据,
[0094]
·
其他数据
[0095]
所有这些上下文/信道也很大程度上取决于颜色信道,即信道是亮度还是色度,变换单元大小,变换系数的位置,相邻符号值和其他因素。
[0096]
作为示例,取决于当前cg下方和右侧的cg编码标志是否为1来选择编码组(cg)编码标志,如图10所示。
[0097]
总而言之,上下文选择取决于很多事情,因此取决于大量的上下文。当然,解码器必须更新上下文值以与在编码器侧执行的相对应,以确保与编码器的同步和对流的解析。
[0098]
在此描述的实施例提出了通过考虑用于从图像块值获得系数的部分变换的大小来减小潜在y坐标候选的范围。
[0099]
实现描述的原理需要的相关联的语法应该是对部分变换的大小m的值的编码。可以在帧或条带级别编码该值,使得改进的二进制化和截取的一元码也可在解码器处确定。
[0100]
关于解码处理,在此描述的原理必须相应地影响解码器以使其能够解码最后编码系数位置。
[0101]
在使用部分变换的这样的实施例中,y后缀的改进的二进制化和截取的一元码也受到影响。
[0102]
除了本原理的上述特征之外,描述的实施例提供了对m的编码或从其可以确定系数的子集的信息被呈现在比特流中。另外,最后编码系数由两个坐标(x,y)提供,并且子集和x的值用于确定y的范围。此外,基于确定的范围,使用截取的编码用于y前缀和后缀。
[0103]
提出的构思在其呈现在视频流的语法中并且暗示要应用的解码方法的意义上是规范性的。因此,本构思可以在视频标准(诸如hevc的后继者)中实现。
[0104]
用于编码一组变换系数的方法1100的一个实施例在图11中示出。该方法在开始块1101处开始,并且控制前进到块1110,用于变换图像值的块以产生变换系数值。控制从块1110前进到块1120,以使用变换的大小的知识来熵编码最后编码系数以编码y坐标。
[0105]
图12中示出用于编码一组变换系数的装置1200的一个实施例。该装置包括变换电路1210,在其输入端口上接收图像值的块并在其输出端口上产生变换系数。变换电路1210的该输出端口与熵编码器1220的输入在信号上连接。熵编码器1220使用用于编码y坐标的变换的大小的知识来编码最后编码系数位置的y坐标,从而产生最后编码系数值。
[0106]
图13中示出用于解码一组变换系数的方法1300的实施例。该方法在开始块1301处开始,并且控制前进到块1310,用于使用用于解码y坐标的变换的大小的知识来熵解码最后编码系数。控制从块1310前进到块1320,用于逆变换系数以产生图像值。
[0107]
图14中示出用于解码一组变换系数的装置1400的实施例。该装置包括熵解码器1410,接收包括最后编码系数的代码的变换系数,并使用变换的大小的知识解码y坐标来解码最后编码系数的y坐标。熵解码器1410的输出与逆变换电路1420的输入在信号上连接。逆变换电路1420在其输入端口上接收变换系数并逆变换它们以在其输出端口上产生图像值的块。
[0108]
前述实施例可以在机顶盒(stb),调制解调器,网关或执行视频编码或解码的其他设备中实现。
[0109]
可以通过使用专用硬件以及能够与适当软件相关联地执行软件的硬件来提供图中所示的各种元件的功能。当由处理器提供时,功能可以由单个专用处理器,单个共享处理器或多个单独的处理器提供,其中一些处理器可以被共享。此外,术语“处理器”或“控制器”的明确使用不应被解释为专指能够执行软件的硬件,并且可以隐含地包括但不限于数字信号处理器(“dsp”)硬件,用于存储软件的只读存储器(“rom”),随机存取存储器(“ram”)和非易失性存储器。
[0110]
还可以包括其他硬件,传统的和/或定制的。类似地,图中所示的任何开关仅是概念性的。它们的功能可以通过程序逻辑的操作,通过专用逻辑,通过程序控制和专用逻辑的交互,或甚至手动地执行,具体技术可由实现者从上下文中更具体地理解来选择。
[0111]
本说明书例示本原理。因此,要理解,本领域技术人员将能够设计出各种布置,这些布置虽然未在在此中明确描述或示出,但体现本原理并且包括在其精神和范围内。
[0112]
在此记载的所有示例和条件语言旨在用于教学目的以帮助读者理解(多个)本发明人贡献的概念以促进本领域,并且应被解释为不限于这样的具体记载的示例和条件。
[0113]
此外,在此记载本原理的原理,方面和实施例的所有陈述以及其特定示例旨在包含其结构和功能等效物二者。另外,这样的等效物旨在包括当前已知的等效物以及将来开发的等效物,即,执行相同功能而不管结构如何的开发的任何元件。
[0114]
因此,例如,本领域技术人员将理解,在此呈现的框图表示体现本原理的例示性电路的概念图。类似地,要理解,任何流程图表,流程图,状态转换图,伪代码等表示可以基本上在计算机可读介质中表示并且由计算机或处理器执行的各种过程,无论这样的计算机或处理器是否被明确示出。
[0115]
在其权利要求中,表达为用于执行规定功能的部件的任何元件旨在包含执行该功能的任何方式,包括例如a)执行该功能的电路元件的组合或b)任何形式的软件,因此包括与用于执行该软件以执行该功能的适当电路结合的固件,微代码等。由这样的权利要求定义的本原理在于这样的事实:由各种记载的部件提供的功能以权利要求所要求的方式组合并被带在一起。因此认为可以提供那些功能的任何部件等效于在此示出的那些。
[0116]
说明书中对本原理的“一个实施例”或“实施例”及其其他变型的引用意味着本原理的至少一个实施例包括结合该实施例描述的具体特征,结构,特性等。因此,在出现在整个说明书中各个地方的短语“在一个实施例中”或“在实施例中”以及任何其他变型的出现不一定都指代相同的实施例。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1