一种编码、解码方法、装置及其设备转让专利

申请号 : CN202111150952.8

文献号 : CN114007080B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 曹小强

申请人 : 杭州海康威视数字技术股份有限公司

摘要 :

本申请提供一种编码、解码方法、装置及其设备,该编码方法包括:获取当前块对应的残差系数矩阵;对所述残差系数矩阵进行初始变换,得到初始变换系数矩阵;若所述当前块支持二次变换,且所述当前块满足第一预设条件,确定对当前块不进行二次变换,并将所述初始变换系数矩阵确定为当前块的目标变换系数矩阵;其中,所述第一预设条件包括:所述当前块采用变换核对(DCT2,DCT2)对所述残差系数矩阵进行初始变换,当前块的预测模式为帧内预测模式,且帧内预测的第一模式号区间包含当前块的帧内预测模式的模式号。通过本申请提高编码性能。

权利要求 :

1.一种解码方法,其特征在于,应用于解码端,所述方法包括:获取当前块的编码比特流;

若当前块支持二次变换,当前块启用可选择的二次变换AST技术,且当前块满足指定条件,从所述编码比特流中解析出指示信息,根据所述指示信息确定是否对所述当前块进行反二次变换;其中,所述指定条件包括:所述当前块为亮度块,所述当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数;

从所述编码比特流中解析目标变换系数矩阵;

如果对所述当前块进行反二次变换,则对所述目标变换系数矩阵进行反二次变换,得到初始变换系数矩阵;如果对所述当前块不进行反二次变换,则将所述目标变换系数矩阵确定为初始变换系数矩阵;

对所述初始变换系数矩阵进行初始反变换,得到所述当前块对应的残差系数矩阵;

根据所述残差系数矩阵确定所述当前块的重建值。

2.根据权利要求1所述的方法,其特征在于,所述指定条件还包括以下条件:所述当前块不支持DT划分模式;

所述当前块采用变换核对(离散余弦变换DCT2,DCT2)进行初始反变换;

所述当前块的宽度和高度满足预设尺寸条件;其中,所述当前块的宽度和高度满足预设尺寸条件包括:当前块的宽度小于等于32,当前块的高度小于等于32。

3.根据权利要求2所述的方法,其特征在于,

所述当前块采用变换核对(DCT2,DCT2)进行初始反变换,包括:若目标变换系数矩阵满足:sr_x或sr_y大于等于16,则所述当前块采用变换核对(DCT2,DCT2)进行初始反变换;

其中,sr_x表示目标变换系数矩阵中最右面的非零变换系数的横坐标,sr_y表示目标变换系数矩阵中最下面的非零变换系数的纵坐标。

4.根据权利要求1所述的方法,其特征在于,

所述根据所述指示信息确定是否对所述当前块进行反二次变换,包括:若所述指示信息为第一指示信息,则确定对所述当前块进行反二次变换;其中,所述第一指示信息用于指示对所述当前块进行二次变换;

若所述指示信息为第二指示信息,则确定对所述当前块不进行反二次变换;其中,所述第二指示信息用于指示对所述当前块不进行二次变换。

5.根据权利要求1所述的方法,其特征在于,

所述对所述目标变换系数矩阵进行反二次变换,包括:若所述目标变换系数矩阵为4*4的目标变换系数矩阵,则对所述目标变换系数矩阵进行反二次变换;或者,若所述目标变换系数矩阵为非4*4的目标变换系数矩阵,则对所述目标变换系数矩阵的左上角的4*4的变换系数矩阵进行反二次变换。

6.一种编码方法,其特征在于,应用于编码端,所述方法包括:获取当前块对应的残差系数矩阵;

对所述残差系数矩阵进行初始变换,得到初始变换系数矩阵;

若当前块支持二次变换,当前块启用可选择的二次变换AST技术,且当前块满足指定条件,根据当前块对应的率失真代价值,确定是否对所述当前块进行二次变换;其中,所述指定条件包括:所述当前块为亮度块,所述当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数;

如果是,则对所述初始变换系数矩阵进行二次变换,得到目标变换系数矩阵;如果否,则将所述初始变换系数矩阵确定为目标变换系数矩阵;

根据所述目标变换系数矩阵进行编码,得到所述当前块的编码比特流。

7.根据权利要求6所述的方法,其特征在于,所述指定条件还包括以下条件:所述当前块不支持DT划分模式;

所述当前块采用变换核对(离散余弦变换DCT2,DCT2)进行初始变换;

所述当前块的宽度和高度满足预设尺寸条件;其中,所述当前块的宽度和高度满足预设尺寸条件包括:当前块的宽度小于等于32,当前块的高度小于等于32。

8.根据权利要求7所述的方法,其特征在于,

所述当前块采用变换核对(DCT2,DCT2)进行初始变换,包括:若目标变换系数矩阵满足:sr_x或sr_y大于等于16,则所述当前块采用变换核对(DCT2,DCT2)进行初始变换;

其中,sr_x表示目标变换系数矩阵中最右面的非零变换系数的横坐标,sr_y表示目标变换系数矩阵中最下面的非零变换系数的纵坐标。

9.根据权利要求6所述的方法,其特征在于,

所述根据当前块对应的率失真代价值,确定是否对所述当前块进行二次变换,包括:确定对所述当前块只进行初始变换时的第一率失真代价值;

确定对所述当前块先进行初始变换再进行二次变换时的第二率失真代价值;

若第二率失真代价值小于第一率失真代价值,确定对所述当前块进行二次变换;

若第二率失真代价值大于第一率失真代价值,确定对所述当前块不进行二次变换。

10.根据权利要求9所述的方法,其特征在于,

所述根据所述目标变换系数矩阵进行编码,得到所述当前块的编码比特流,包括:若确定对所述当前块进行二次变换,则在所述编码比特流中添加第一指示信息;其中,所述第一指示信息用于指示对所述当前块进行二次变换;

若确定对所述当前块不进行二次变换,则在所述编码比特流中添加第二指示信息;其中,所述第二指示信息用于指示对所述当前块不进行二次变换。

11.根据权利要求6所述的方法,其特征在于,

所述对所述初始变换系数矩阵进行二次变换,包括:

若所述初始变换系数矩阵为4*4的初始变换系数矩阵,则对所述初始变换系数矩阵进行二次变换;或者,若所述初始变换系数矩阵为非4*4的初始变换系数矩阵,则对所述初始变换系数矩阵的左上角的4*4的变换系数矩阵进行二次变换。

12.一种解码装置,其特征在于,应用于解码端,所述解码装置包括:获取模块,用于获取当前块的编码比特流;

确定模块,用于若当前块支持二次变换,当前块启用可选择的二次变换AST技术,且当前块满足指定条件,从所述编码比特流中解析出指示信息,根据所述指示信息确定是否对所述当前块进行反二次变换;其中,所述指定条件包括:所述当前块为亮度块,所述当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数;

处理模块,用于从所述编码比特流中解析目标变换系数矩阵;如果对所述当前块进行反二次变换,则对所述目标变换系数矩阵进行反二次变换,得到初始变换系数矩阵;如果对所述当前块不进行反二次变换,则将所述目标变换系数矩阵确定为初始变换系数矩阵;

所述处理模块,还用于对所述初始变换系数矩阵进行初始反变换,得到所述当前块对应的残差系数矩阵;根据所述残差系数矩阵确定所述当前块的重建值。

13.根据权利要求12所述的装置,其特征在于,所述指定条件还包括以下条件:所述当前块不支持DT划分模式;

所述当前块采用变换核对(离散余弦变换DCT2,DCT2)进行初始反变换;

所述当前块的宽度和高度满足预设尺寸条件;其中,所述当前块的宽度和高度满足预设尺寸条件包括:当前块的宽度小于等于32,当前块的高度小于等于32。

14.根据权利要求13所述的装置,其特征在于,

所述当前块采用变换核对(DCT2,DCT2)进行初始反变换,包括:若目标变换系数矩阵满足:sr_x或sr_y大于等于16,则所述当前块采用变换核对(DCT2,DCT2)进行初始反变换;其中,sr_x表示目标变换系数矩阵中最右面的非零变换系数的横坐标,sr_y表示目标变换系数矩阵中最下面的非零变换系数的纵坐标。

15.根据权利要求12所述的装置,其特征在于,

所述确定模块根据所述指示信息确定是否对所述当前块进行反二次变换时具体用于:若所述指示信息为第一指示信息,则确定对所述当前块进行反二次变换;其中,所述第一指示信息用于指示对所述当前块进行二次变换;

若所述指示信息为第二指示信息,则确定对所述当前块不进行反二次变换;其中,所述第二指示信息用于指示对所述当前块不进行二次变换。

16.根据权利要求12所述的装置,其特征在于,

所述处理模块对所述目标变换系数矩阵进行反二次变换时具体用于:若所述目标变换系数矩阵为4*4的目标变换系数矩阵,则对所述目标变换系数矩阵进行反二次变换;或者,若所述目标变换系数矩阵为非4*4的目标变换系数矩阵,则对所述目标变换系数矩阵的左上角的4*4的变换系数矩阵进行反二次变换。

17.一种编码装置,其特征在于,应用于编码端,所述编码装置包括:获取模块,用于获取当前块对应的残差系数矩阵;

处理模块,用于对所述残差系数矩阵进行初始变换,得到初始变换系数矩阵;

确定模块,用于若当前块支持二次变换,当前块启用可选择的二次变换AST技术,且当前块满足指定条件,根据当前块对应的率失真代价值,确定是否对所述当前块进行二次变换;其中,所述指定条件包括:所述当前块为亮度块,所述当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数;

所述处理模块还用于:如果对所述当前块进行二次变换,则对所述初始变换系数矩阵进行二次变换,得到目标变换系数矩阵;如果对所述当前块不进行二次变换,则将所述初始变换系数矩阵确定为目标变换系数矩阵;

根据所述目标变换系数矩阵进行编码,得到所述当前块的编码比特流。

18.根据权利要求17所述的装置,其特征在于,所述指定条件还包括以下条件:所述当前块不支持DT划分模式;

所述当前块采用变换核对(离散余弦变换DCT2,DCT2)进行初始变换;

所述当前块的宽度和高度满足预设尺寸条件;其中,所述当前块的宽度和高度满足预设尺寸条件包括:当前块的宽度小于等于32,当前块的高度小于等于32。

19.根据权利要求18所述的装置,其特征在于,

所述当前块采用变换核对(DCT2,DCT2)进行初始变换,包括:若目标变换系数矩阵满足:sr_x或sr_y大于等于16,则所述当前块采用变换核对(DCT2,DCT2)进行初始变换;其中,sr_x表示目标变换系数矩阵中最右面的非零变换系数的横坐标,sr_y表示目标变换系数矩阵中最下面的非零变换系数的纵坐标。

20.根据权利要求17所述的装置,其特征在于,所述确定模块根据当前块对应的率失真代价值,确定是否对所述当前块进行二次变换时具体用于:确定对所述当前块只进行初始变换时的第一率失真代价值;

确定对所述当前块先进行初始变换再进行二次变换时的第二率失真代价值;

若第二率失真代价值小于第一率失真代价值,确定对所述当前块进行二次变换;

若第二率失真代价值大于第一率失真代价值,确定对所述当前块不进行二次变换。

21.根据权利要求20所述的装置,其特征在于,所述处理模块根据所述目标变换系数矩阵进行编码,得到所述当前块的编码比特流时具体用于:若确定对所述当前块进行二次变换,则在所述编码比特流中添加第一指示信息;其中,所述第一指示信息用于指示对所述当前块进行二次变换;

若确定对所述当前块不进行二次变换,则在所述编码比特流中添加第二指示信息;其中,所述第二指示信息用于指示对所述当前块不进行二次变换。

22.根据权利要求17所述的装置,其特征在于,

所述处理模块对所述初始变换系数矩阵进行二次变换时具体用于:若所述初始变换系数矩阵为4*4的初始变换系数矩阵,则对所述初始变换系数矩阵进行二次变换;或者,若所述初始变换系数矩阵为非4*4的初始变换系数矩阵,则对所述初始变换系数矩阵的左上角的4*4的变换系数矩阵进行二次变换。

23.一种解码设备,其特征在于,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;其中,所述处理器用于执行所述机器可执行指令,以实现权利要求1‑5中任一项所述的方法。

24.一种编码设备,其特征在于,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;其中,所述处理器用于执行所述机器可执行指令,以实现权利要求6‑11中任一项所述的方法。

25.一种机器可读存储介质,其特征在于,所述机器可读存储介质存储有能够被处理器执行的机器可执行指令;其中,所述处理器用于执行所述机器可执行指令,以实现权利要求

1‑5中任一项所述的方法,或者,实现权利要求6‑11中任一项所述的方法。

说明书 :

一种编码、解码方法、装置及其设备

技术领域

[0001] 本申请涉及编解码技术领域,尤其是涉及一种编码、解码方法、装置及其设备。

背景技术

[0002] 为了达到节约空间的目的,视频图像是经过编码后才传输的,完整的视频编码方法可以包括预测、变换、量化、熵编码、滤波等过程。预测编码可以包括帧内编码和帧间编码。帧间编码是利用视频时间域的相关性,使用邻近已编码图像的像素预测当前图像的像素,达到去除视频时域冗余的目的。帧内编码是考虑到相邻块之间存在很强的空域相关性,利用周围已经重建的像素作为参考像素,对当前未编码块进行预测,只需要对残差值进行后续编码处理,而不是对原始值进行编码,有效去除空域上的冗余,大大提高了压缩效率。
[0003] 在视频编码过程中,变换是指将以空间域中像素形式描述的图像转换至变换域的图像,并以变换系数的形式来表示。由于绝大多数图像都含有较多平坦区域和缓慢变化的区域,因此,适当的变换过程,可以使图像能量在空间域的分散分布,转换为在变换域的相对集中分布,从而能够去除信号之间的频域相关性,配合量化过程,可以有效压缩码流。
[0004] 针对变换过程,相关技术中提出了二次变换技术。二次变换技术是指:首先进行初始变换,得到初始变换后的变换系数。然后,对初始变换后的变换系数进行二次变换,得到新的变换系数。然后,对新的变换系数进行量化和熵编码等过程。但是,在实际应用中,进行初始变换后,如果初始变换后的变换系数的能量已经足够集中,那么,再对初始变换后的变换系数进行二次变换时,可能会出现过拟合现象,从而导致编码性能比较差等问题。

发明内容

[0005] 本申请提供一种编码方法,应用于编码端,所述方法包括:
[0006] 获取当前块对应的残差系数矩阵;
[0007] 对所述残差系数矩阵进行初始变换,得到初始变换系数矩阵;
[0008] 若所述当前块支持二次变换,且所述当前块满足第一预设条件,确定对当前块不进行二次变换,并将所述初始变换系数矩阵确定为当前块的目标变换系数矩阵;
[0009] 其中,所述第一预设条件包括:所述当前块采用变换核对(离散余弦变换DCT2,DCT2)对所述残差系数矩阵进行初始变换,当前块的预测模式为帧内预测模式,且帧内预测的第一模式号区间包含当前块的帧内预测模式的模式号。
[0010] 本申请提供一种编码方法,应用于编码端,所述方法包括:
[0011] 获取当前块对应的残差系数矩阵;
[0012] 对所述残差系数矩阵进行初始变换,得到初始变换系数矩阵;
[0013] 若当前块支持二次变换,当前块启用可选择的二次变换AST技术,且当前块满足第二预设条件,根据当前块对应的率失真代价值,确定是否对所述当前块进行二次变换;
[0014] 其中,所述第二预设条件包括:所述当前块为亮度块,所述当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数。
[0015] 本申请提供一种解码方法,应用于解码端,所述方法包括:
[0016] 获取当前块的编码比特流,从所述编码比特流中解析目标变换系数矩阵;
[0017] 若所述当前块支持二次变换,且所述当前块满足第三预设条件,确定对所述当前块不进行反二次变换,并将所述目标变换系数矩阵确定为当前块的初始变换系数矩阵;若对所述当前块进行反二次变换,则对所述目标变换系数矩阵进行反二次变换,得到初始变换系数矩阵;
[0018] 对所述初始变换系数矩阵进行初始反变换,得到所述当前块对应的残差系数矩阵;
[0019] 根据所述残差系数矩阵确定所述当前块的重建值;
[0020] 其中,所述第三预设条件包括:所述当前块采用变换核对(离散余弦变换DCT2,DCT2)进行初始反变换,当前块的预测模式为帧内预测模式,且帧内预测的第一模式号区间包含当前块的帧内预测模式的模式号。
[0021] 本申请提供一种解码方法,应用于解码端,所述方法包括:
[0022] 获取当前块的编码比特流;
[0023] 若当前块支持二次变换,当前块启用可选择的二次变换AST技术,且当前块满足第四预设条件,从所述编码比特流中解析出指示信息,根据所述指示信息确定是否对所述当前块进行反二次变换;其中,所述第四预设条件包括:所述当前块为亮度块,所述当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数。
[0024] 本申请提供一种解码方法,应用于解码端,所述方法包括:
[0025] 获取当前块的编码比特流,从所述编码比特流中解析目标变换系数矩阵;
[0026] 若当前块支持二次变换,所述当前块启用可选择的二次变换AST技术,且所述当前块满足第四预设条件,则根据所述目标变换系数矩阵中的变换系数,确定所述目标变换系数矩阵的目标特征;根据所述目标特征确定所述当前块的预设标志位的目标取值;其中,所述预设标志位的目标取值为第一取值时,用于指示对所述当前块进行反二次变换,所述预设标志位的目标取值为第二取值时,用于指示对所述当前块不进行反二次变换;
[0027] 根据所述预设标志位的目标取值确定是否对所述当前块进行反二次变换;
[0028] 其中,所述第四预设条件包括:所述当前块为亮度块,所述当前块的预测模式为帧内预测模式,且所述当前块的初始变换系数矩阵中含有非零变换系数。
[0029] 本申请提供一种编码装置,应用于编码端,所述装置包括:
[0030] 获取模块,用于获取当前块对应的残差系数矩阵;
[0031] 处理模块,用于对所述残差系数矩阵进行初始变换,得到初始变换系数矩阵;
[0032] 确定模块,用于若所述当前块支持二次变换,且所述当前块满足第一预设条件,确定对当前块不进行二次变换,并将所述初始变换系数矩阵确定为当前块的目标变换系数矩阵;
[0033] 其中,所述第一预设条件包括:所述当前块采用变换核对(离散余弦变换DCT2,DCT2)对所述残差系数矩阵进行初始变换,当前块的预测模式为帧内预测模式,且帧内预测的第一模式号区间包含当前块的帧内预测模式的模式号。
[0034] 本申请提供一种编码装置,应用于编码端,所述装置包括:
[0035] 获取模块,用于获取当前块对应的残差系数矩阵;
[0036] 处理模块,用于对所述残差系数矩阵进行初始变换,得到初始变换系数矩阵;
[0037] 确定模块,用于若当前块支持二次变换,当前块启用可选择的二次变换AST技术,且当前块满足第二预设条件,根据当前块对应的率失真代价值,确定是否对所述当前块进行二次变换;其中,所述第二预设条件包括:所述当前块为亮度块,所述当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数。
[0038] 本申请提供一种解码装置,应用于解码端,所述装置包括:
[0039] 获取模块,用于获取当前块的编码比特流,从所述编码比特流中解析目标变换系数矩阵;
[0040] 确定模块,用于若所述当前块支持二次变换,且所述当前块满足第三预设条件,确定对所述当前块不进行反二次变换,并将所述目标变换系数矩阵确定为当前块的初始变换系数矩阵;若对所述当前块进行反二次变换,则对所述目标变换系数矩阵进行反二次变换,得到初始变换系数矩阵;
[0041] 处理模块,用于对所述初始变换系数矩阵进行初始反变换,得到所述当前块对应的残差系数矩阵;根据所述残差系数矩阵确定所述当前块的重建值;
[0042] 其中,所述第三预设条件包括:所述当前块采用变换核对(离散余弦变换DCT2,DCT2)进行初始反变换,当前块的预测模式为帧内预测模式,且帧内预测的第一模式号区间包含当前块的帧内预测模式的模式号。
[0043] 本申请提供一种解码装置,应用于解码端,所述装置包括:
[0044] 获取模块,用于获取当前块的编码比特流;
[0045] 确定模块,用于若当前块支持二次变换,当前块启用可选择的二次变换AST技术,且当前块满足第四预设条件,从所述编码比特流中解析出指示信息,根据所述指示信息确定是否对所述当前块进行反二次变换;其中,所述第四预设条件包括:所述当前块为亮度块,所述当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数。
[0046] 本申请提供一种解码装置,应用于解码端,所述装置包括:
[0047] 获取模块,用于获取当前块的编码比特流,从所述编码比特流中解析目标变换系数矩阵;
[0048] 确定模块,用于若当前块支持二次变换,所述当前块启用可选择的二次变换AST技术,且所述当前块满足第四预设条件,则根据所述目标变换系数矩阵中的变换系数,确定所述目标变换系数矩阵的目标特征;根据所述目标特征确定所述当前块的预设标志位的目标取值;其中,所述预设标志位的目标取值为第一取值时,用于指示对所述当前块进行反二次变换,所述预设标志位的目标取值为第二取值时,用于指示对所述当前块不进行反二次变换;以及,根据所述预设标志位的目标取值确定是否对所述当前块进行反二次变换;
[0049] 其中,所述第四预设条件包括:所述当前块为亮度块,所述当前块的预测模式为帧内预测模式,且所述当前块的初始变换系数矩阵中含有非零变换系数。
[0050] 本申请提供一种编码端设备,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;
[0051] 所述处理器用于执行机器可执行指令,以实现如下步骤:
[0052] 获取当前块对应的残差系数矩阵;
[0053] 对所述残差系数矩阵进行初始变换,得到初始变换系数矩阵;
[0054] 若所述当前块支持二次变换,且所述当前块满足第一预设条件,确定对当前块不进行二次变换,并将所述初始变换系数矩阵确定为当前块的目标变换系数矩阵;其中,所述第一预设条件包括:所述当前块采用变换核对(离散余弦变换DCT2,DCT2)对所述残差系数矩阵进行初始变换,当前块的预测模式为帧内预测模式,且帧内预测的第一模式号区间包含当前块的帧内预测模式的模式号;
[0055] 或者,
[0056] 获取当前块对应的残差系数矩阵;
[0057] 对所述残差系数矩阵进行初始变换,得到初始变换系数矩阵;
[0058] 若当前块支持二次变换,当前块启用可选择的二次变换AST技术,且当前块满足第二预设条件,根据当前块对应的率失真代价值,确定是否对所述当前块进行二次变换;
[0059] 其中,所述第二预设条件包括:所述当前块为亮度块,所述当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数。
[0060] 本申请提供一种解码端设备,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;
[0061] 所述处理器用于执行机器可执行指令,以实现如下步骤:
[0062] 获取当前块的编码比特流,从所述编码比特流中解析目标变换系数矩阵;
[0063] 若所述当前块支持二次变换,且所述当前块满足第三预设条件,确定对所述当前块不进行反二次变换,并将所述目标变换系数矩阵确定为当前块的初始变换系数矩阵;若对所述当前块进行反二次变换,则对所述目标变换系数矩阵进行反二次变换,得到初始变换系数矩阵;
[0064] 对所述初始变换系数矩阵进行初始反变换,得到所述当前块对应的残差系数矩阵;
[0065] 根据所述残差系数矩阵确定所述当前块的重建值;
[0066] 其中,所述第三预设条件包括:所述当前块采用变换核对(离散余弦变换DCT2,DCT2)进行初始反变换,当前块的预测模式为帧内预测模式,且帧内预测的第一模式号区间包含当前块的帧内预测模式的模式号;
[0067] 或者,
[0068] 获取当前块的编码比特流;
[0069] 若当前块支持二次变换,当前块启用可选择的二次变换AST技术,且当前块满足第四预设条件,从所述编码比特流中解析出指示信息,根据所述指示信息确定是否对所述当前块进行反二次变换;其中,所述第四预设条件包括:所述当前块为亮度块,所述当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数;
[0070] 或者,
[0071] 获取当前块的编码比特流,从所述编码比特流中解析目标变换系数矩阵;
[0072] 若当前块支持二次变换,所述当前块启用可选择的二次变换AST技术,且所述当前块满足第四预设条件,则根据所述目标变换系数矩阵中的变换系数,确定所述目标变换系数矩阵的目标特征;根据所述目标特征确定所述当前块的预设标志位的目标取值;其中,所述预设标志位的目标取值为第一取值时,用于指示对所述当前块进行反二次变换,所述预设标志位的目标取值为第二取值时,用于指示对所述当前块不进行反二次变换;
[0073] 根据所述预设标志位的目标取值确定是否对所述当前块进行反二次变换;
[0074] 其中,所述第四预设条件包括:所述当前块为亮度块,所述当前块的预测模式为帧内预测模式,且所述当前块的初始变换系数矩阵中含有非零变换系数。
[0075] 由以上技术方案可见,本申请实施例中,在对当前块进行初始变换,得到初始变换系数矩阵后,可以确定是否对当前块进行二次变换,如果否,对初始变换系数矩阵不进行二次变换,如果是,对初始变换系数矩阵进行二次变换。基于上述处理,可以对初始变换系数矩阵进行二次变换,或不对初始变换系数矩阵进行二次变换,从而提高编码性能。

附图说明

[0076] 图1A‑图1C是本申请一种实施方式中的DT划分模式的示意图;
[0077] 图2是本申请一种实施方式中的帧内预测模式的示意图;
[0078] 图3是本申请一种实施方式中的视频编码框架的示意图;
[0079] 图4A‑图4D是本申请一种实施方式中的编码、解码方法的流程图;
[0080] 图5A‑图5G是本申请一种实施方式中的编码、解码方法的流程图;
[0081] 图6A‑图6E是本申请一种实施方式中的编码、解码装置的结构图;
[0082] 图7A是本申请一种实施方式中的编码端设备的硬件结构图;
[0083] 图7B是本申请一种实施方式中的解码端设备的硬件结构图。

具体实施方式

[0084] 在本申请实施例中所使用的术语仅仅是出于描述特定实施例的目的,而非用于限制本申请。本申请实施例和权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在……时”,或“当……时”,或“响应于确定”。
[0085] 为了使本领域技术人员更好地理解本申请的技术方案,下面对技术术语进行简单说明。
[0086] 预测像素(Prediction Signal):是指从已经编解码的像素中导出的像素值,通过原始像素与预测像素之差获得残差,进而进行残差变换,量化以及系数编码等过程。
[0087] 帧内预测(Intra Prediction):是指通过周边已解码区域的重建像素值来预测当前块的预测值的预测模式。常见的方式包括按照角度方向进行像素拷贝,以及按照一定的渐变原则进行预测值导出的方式。示例性的,帧内预测去除的是视频/图像的空域相关性。
[0088] 变换核(transform kernel):在视频编码中,变换是实现数据压缩必不可少的阶段,变换能够使信号的能量更加集中,而基于离散余弦变换(DCT,Discrete Cosine Transform)/离散正弦变换(DST,Discrete Sine Transform)的变换技术一直是视频编码主流的变换技术。DCT和DST根据基函数的不同又具体分为多种变换核,参见表1所示,示出了三种变换核。
[0089] 表1
[0090]
[0091]
[0092] 正变换(forward transform)和逆变换(inverse transform):在视频编码过程中,包含了正变换和逆变换过程,正变换又称为前向变换,逆变换又称为反向变换。示例性的,正变换是将一个二维残差系数(也可以称为残差信号)转换成能量更加集中的二维变换系数(也可以称为频谱信号),该变换系数再经过量化等过程,就可以有效去除高频成分,保留中低频成分,起到了压缩的作用。例如,可以通过公式(1)的矩阵形式表示正变换过程。
[0093] F=B·f·AT  公式(1)
[0094] 示例性的,M表示残差块(即残差系数组成的块)的宽度,N表示残差块的高度,f表示N*M维的原始残差信号,F表示N*M维的频域信号(即转换后频域信号),A和B表示M*M和N*N维的变换矩阵,A和B均满足正交性,如表1所示的变换核。
[0095] 逆变换是正变换的逆过程,即通过变换矩阵A和变换矩阵B,可以将频域信号F转换成时域残差信号f。例如,可以通过公式(2)的矩阵形式表示逆变换过程。
[0096] f=BT·F·A  公式(2)
[0097] 水平变换(Horizental transform)和垂直变换(Vertical transform):在编码变T T换阶段,输入的是二维残差信号,设X=A·f ,则F=B·X ,例如,通过公式(3)的矩阵形式进行表示。
[0098] F=B·f·AT=B·(A·fT)T  公式(3)
[0099] 综上可以看出,二维信号的正变换可以通过两次一维的正变换方式实现,第一次正变换后得到一个M*N的信号X,去除二维残差信号的水平方向像素之间的相关性,因此,第一次正变换称为水平变换,称A为水平变换矩阵。第二次正变换后得到信号F,去除二维残差信号的垂直方向像素之间的相关性,因此,第二次正变换称为垂直变换,称B为垂直变换矩阵。
[0100] 变换对(Transform pair):也称为变换核对,为了支持矩阵块,M不一定等于N,A和B的维度不一定相等,还可以支持A和B不是同一种变换核生产的变换矩阵,因此,在变换中存在A和B对应的变换核组成的变换对{H,V},H称为水平变换核,V称为垂直变换核。
[0101] 率失真原则(RDO,Rate‑Distortion Optimized):评价编码效率的有两大指标:码率和PSNR(Peak Signal to Noise Ratio,峰值信噪比)。比特流越小,则压缩率越大;PSNR越大,则重建图像质量越好。在模式选择时,判别公式实质上也就是对二者的综合评价。
[0102] 模式对应的代价值:J(mode)=D+λ*R。示例性的,D表示Distortion,通常使用SSE指标来衡量,SSE是指重建块与源图像的差值均方和;λ是拉格朗日乘子;R就是该模式下图像块编码所需的实际比特数,包括编码模式信息、运动信息、残差等所需的比特总和。在模式选择时,若使用RDO原则去对编码模式做比较决策,通常可以保证编码性能最佳。
[0103] 隐式变换核选择(IST,Implicit Selection of Transform):对于帧内预测残差块,通常使用传统的DCT2变换方法,然而,对于大部分帧内预测残差块,DST7表现出更好的能量集中性,因此基于编码单元(Code Unit,简称CU)‑等级(level)的多变换核选择,会进一步带来编码性能的提升。在相关技术中,提出了基于隐式表达的变换核选择方式,即隐藏变换核的标志位(可以称为IST标志位),从而隐式指示对当前块进行变换使用的变换核对。
[0104] 示例性的,编码端需要通过RDO来选择变换核对是采用(DCT2,DCT2)还是采用(DST7,DST7),为了隐藏IST标志位,认为当编码端选择变换核对为(DCT2,DCT2)时,当前块的非零变换系数的个数为偶数,若实际非零个数为奇数,则编码端可以通过将最后一位非零变换系数置零的方法,使得当前块的非零变换系数的个数一定为偶数。同理,当编码端选择变换核对为(DST7,DST7)时,当前块的非零变换系数的个数为奇数,若实际非零个数为偶数,则编码端可以通过将最后一位非零变换系数置零的方法,使得当前块的非零变换系数的个数一定为奇数。
[0105] 出于硬件实现的角度出发,DST7变换核的硬件实现所需要的乘法次数较多,硬件实现代价比较大。因此,为了降低硬件实现的复杂度,对于变换系数超过一定范围的变换块,可以不使用DST7变换核,具体方法如下:sr_x表示当前变换系数矩阵中最右面的非零变换系数的横坐标,sr_y表示当前变换系数矩阵中最下面的非零变换系数的纵坐标,由sr_x和sr_y可确定当前变换系数矩阵中所有非零变换系数对应的区域,超出该范围的区域变换系数都为0。
[0106] 由于sr_x和sr_y需要传输到解码端,解码端可以直接得到sr_x和sr_y,当sr_x大于等于16或sr_y大于等于16时,解码端可以直接判定IST使用的变换核为(DCT2,DCT2),不需要再统计非零变换系数的个数的奇偶性;否则,需要确定当前块非零变换系数的个数的奇偶性,若该奇偶性为奇数,则IST使用的变换核为(DST7,DST7),若为该奇偶性为偶数,则IST使用的变换核为(DCT2,DCT2),上述过程可以通过如下公式进行表示:
[0107] IstTuFlag=(sr_x>=16||sr_y>=16)?0:(num_nz%2?1:0)
[0108] 基于上述分析可以得出,最终,IST变换核的选择方法可以参见表2所示:
[0109] 表2
[0110]
[0111] 示例性的,IST可以作用于满足以下条件的当前块:当前块为帧内预测模式;当前子块的划分模式为非DT模式;当前块的宽度小于64;当前块的高度小于64。
[0112] 衍生树(Derive Tree,简称DT)划分模式:DT划分模式是一种新的划分模式,产生新的划分形状,能够进一步获得性能增益。示例性的,DT划分模式可以包括水平衍生模式和竖直衍生模式,其示意图可以如图1A所示。示例性的,DT划分模式可以生长在四叉树或者二叉树的叶子节点上,如图1B所示,对于I帧或非I帧,DT划分模式可以通过对CU合并划分边界,得到衍生模式的不同PU划分(2N*hN、2N*nU、2N*nD、hN*2N、nL*2N或nR×2N)。
[0113] 示例性的,对于帧内预测模式来说,使用衍生模式进行预测的当前块,可以使用4个非方块进行变换量化,并不需要引入新的变换核,其示意图可以如图1C所示。
[0114] 示例性的,使用水平衍生模式的当前块需要满足下面2个条件:高度大于等于16,且小于等于64;宽度与高度的比例小于4。示例性的,使用竖直衍生模式的当前块需要满足下面2个条件:宽度大于等于16,且小于等于64;高度与宽度的比例小于4。
[0115] AVS3的帧内预测模式:AVS2共有33种帧内预测模式,33种帧内预测模式包括30个角度模式和3个特殊帧内模式。为支持更精细的角度预测,AVS3提出将角度预测模式扩展为62个,加上3个特殊帧内模式,一共65种模式。参见图2所示,为帧内预测模式的示意图,原有的角度预测模式的模式号不变,新增的角度预测模式,模式号从34往后增加至65。
[0116] 视频编码框架:参见图3所示,可以使用视频编码框架实现本申请实施例的编码端处理流程,视频解码框架的示意图与图3类似,在此不再重复赘述,可以使用视频解码框架实现本申请实施例的解码端处理流程。在视频编码框架和视频解码框架中,可以包括但不限于:帧内预测、运动估计/运动补偿、参考图像缓冲器、环内滤波、重建、变换、量化、反变换、反量化、熵编码器等模块。在编码端,通过这些模块之间的配合,可以实现编码端的处理流程,在解码端,通过这些模块之间的配合,可以实现解码端的处理流程。
[0117] 示例性的,在视频编码过程中,变换是指将以空间域中像素形式描述的图像转换至变换域的图像,并以变换系数的形式来表示。由于绝大多数图像都含有较多平坦区域和缓慢变化的区域,因此,适当的变换过程,可以使图像能量在空间域的分散分布,转换为在变换域的相对集中分布,从而能够去除信号之间的频域相关性,配合量化过程,可以有效压缩码流。
[0118] 示例性的,熵编码是指按照信息熵的原理进行无损编码的方式,处于视频压缩的最后一个处理模块,将一系列用来表示视频序列的元素符号,转变为一个用来传输或存储的二进制码流,输入的符号可能包括量化后的变换系数,运动矢量信息,预测模式信息,变换量化相关语法等,熵编码模块的输出数据即原始视频压缩后的最终码流。熵编码可以有效地去除这些视频元素符号的统计冗余,是保证视频编码压缩效率的重要工具之一。
[0119] 二次变换:在相关技术中,针对4*4块和非4*4块使用不同的二次变换矩阵。从编码端来说,就是经过(DCT2,DCT2)变换后得到变换系数,然后对左上角的4*4的变换系数,再与二次变换矩阵相乘得到新的变换系数,然后再进行量化和熵编码。从解码端来说,对于从码流熵解码得到的变换系数经过反量化后,对于左上角的4*4区域先进行二次逆变换,得到新的变换系数,然后对整个变换块使用(DCT2,DCT2)进行逆变换,得到残差系数。二次变换具体解码端反变换过程如下:
[0120] 情况一、如果当前变换块是亮度帧内预测残差块,宽度或者高度的值大于4,且二次变换启用标志(SecondaryTransformEnableFlag)的值等于1(二次变换启用标志的值等于1,表示序列级或者帧级允许启用二次变换),则对系数矩阵执行以下操作:
[0121] 首先,由变换系数矩阵得到左上角4*4的系数矩阵C:cij=coeffij,i=0~3,j=0~3,在上述公式中,cij是矩阵C的元素,coeffij是变换系数矩阵的元素。
[0122] 示例性的,如果帧内预测模式的值为0~2,或13~32,或44~65,且当前块外部左6
边的参考样本“可用”,则:cij=Clip3(‑32768,32767,(pij+2)>>7),i=0~3,j=0~3。pij是4*4的矩阵P的元素,矩阵P的计算方式如下:P=C×S4,S4是4*4反变换矩阵,Clip3(‑
6 6
32768,32767,(pij+2)>>7)表示,若cij的值位于‑32768与32767之间,则cij的值为(pij+2)>>7,若cij的值小于‑32768,则cij的值为‑32768,若cij的值大于32767,则cij的值为32767。
[0123] 示例性的,如果帧内预测模式的值为0~23,或34~57,且当前块外部上边的参考6
样本“可用”,则:cij=Clip3(‑32768,32767,(qij+2)>>7),i=0~3,j=0~3。qij是4×4矩T T
阵Q的元素,矩阵Q的计算方式如下:Q=S4×C,S4是S4的转置矩阵,S4是4*4反变换矩阵。
[0124] 然后,根据矩阵C修改变换系数矩阵的元素的值:coeffij=cij,i=0~3,j=0~3。
[0125] 然后,对矩阵coeff进行初始反变换。
[0126] 情况二、如果当前变换块是亮度帧内预测残差块,宽度和高度的值均等于4,且二次变换启用标志(SecondaryTransformEnableFlag)的值等于1(二次变换启用标志的值等于1,表示序列级或者帧级允许启用二次变换),则对系数矩阵执行以下操作:
[0127] 首先,对变换系数矩阵进行如下垂直反变换,得到矩阵K:kij=Clip3(‑32768,4
32767,(vij+2)>>5),i=0~M1‑1,j=0~M2‑1,vij是矩阵V的元素,kij是矩阵K的元素。矩阵VT T
的计算如下:V=D4×CoeffMatrix,D4是反变换矩阵D4的转置矩阵,CoeffMatrix为变换系数。
[0128] 然后,对矩阵K进行如下水平反变换,得到矩阵H:hij=Clip3(‑MaxValue‑1,shift1‑1MaxValue,(wij+2 )>>shift1),i=0~M1‑1,j=0~M2‑1,wi,j是矩阵W的元素,hij是矩阵H的元素。MaxValue的值为(1<
[0129] 示例性的,对于4*4的块,进行完二次变换的逆变换后不需要再进行初始逆变换。
[0130] 参见上述实施例,二次变换技术是指:首先进行初始变换,得到初始变换后的变换系数。然后,对初始变换后的变换系数进行二次变换,得到新的变换系数。然后,对新的变换系数进行量化和熵编码等过程。在相关技术中,默认所有亮度帧内预测残差块均需要进行二次变换。但是,进行初始变换后,如果初始变换后的变换系数的能量已经足够集中,那么,再对初始变换后的变换系数进行二次变换时,可能会出现过拟合现象,从而导致编码性能比较差等问题,即,进行二次变换的编码效果并不理想。
[0131] 针对上述发现,本申请实施例中,在对当前块进行初始变换,得到初始变换系数矩阵之后,可以确定是否对当前块进行二次变换,如果否,则不再对初始变换系数矩阵进行二次变换,如果是,则对初始变换系数矩阵进行二次变换,通过剔除一些不需要进行二次变换的数据块,起到去冗余的作用,从而能够提高编码性能。
[0132] 在一种可能的实施方式中,针对编码端来说,可以基于当前块的帧内预测模式,确定是否对当前块进行二次变换。例如,若当前块的帧内预测模式的模式号位于第一模式号区间(如模式号34~模式号65),则确定对当前块不进行二次变换。针对解码端来说,可以基于当前块的帧内预测模式,确定是否对当前块进行二次变换。例如,若当前块的帧内预测模式的模式号位于第一模式号区间(如模式号34~模式号65),则确定对当前块不进行二次变换。
[0133] 在另一种可能的实施方式中,针对编码端来说,可以通过RDO来确定是否对当前块进行二次变换,并显式编码指示信息(如secTuflag)来表示是否对当前块进行二次变换,例如,secTuflag的取值为第一取值时,表示对当前块进行二次变换,secTuflag的取值为第二取值时,表示对当前块不进行二次变换。针对解码端来说,在获取到编码比特流后,可以从编码比特流中解析出当前块的secTuflag,若secTuflag的取值为第一取值,则确定对当前块进行反二次变换,若secTuflag的取值为第二取值,则确定对当前块不进行反二次变换。
[0134] 在另一种可能的实施方式中,针对编码端来说,可以通过RDO来确定是否对当前块进行二次变换,并通过目标变换系数矩阵的目标特征(如奇偶性等)来隐式表示是否对当前块进行二次变换,而不是通过指示信息来显式表示是否对当前块进行二次变换。针对解码端来说,获取到编码比特流后,从编码比特流中解析出目标变换系数矩阵,并根据目标变换系数矩阵的目标特征确定当前块的预设标志位的目标取值,即推导出当前块的预设标志位的目标取值。若预设标志位的目标取值为第一取值,则确定对当前块进行反二次变换。若预设标志位的目标取值为第二取值,则确定对当前块不进行反二次变换。
[0135] 当然,上述方式只是确定是否对当前块进行二次变换的几个示例,对此不做限制。
[0136] 以下结合几个具体实施例,对本申请实施例的编码方法、解码方法进行详细说明。
[0137] 实施例1:在一种可能的实施方式中,参见图4A所示,为本申请实施例中提出的编码方法的一个流程示意图,该编码方法可以应用于编码端,该编码方法可以包括以下步骤:
[0138] 步骤411,获取当前块对应的残差系数矩阵。
[0139] 步骤412,对该残差系数矩阵进行初始变换,得到初始变换系数矩阵。
[0140] 步骤413,若当前块支持二次变换,且当前块满足第一预设条件,确定对当前块不进行二次变换。示例性的,当前块支持二次变换可以表示:二次变换启用标志(如SecondaryTransformEnableFlag)的值等于预设数值(如1),二次变换启用标志的值等于预设数值,表示序列级或者帧级允许启用二次变换,即允许当前块启用二次变换。
[0141] 步骤414,若对当前块不进行二次变换,则将初始变换系数矩阵确定为当前块的目标变换系数矩阵,并根据目标变换系数矩阵进行编码,得到当前块的编码比特流。
[0142] 在一种可能的实施方式中,该第一预设条件可以包括但不限于:当前块采用变换核对(DCT2,DCT2)对残差系数矩阵进行初始变换,且当前块的预测模式为帧内预测模式,且帧内预测的第一模式号区间包含当前块的帧内预测模式的模式号。
[0143] 示例性的,第一预设条件,除了包括当前块采用变换核对(DCT2,DCT2)对残差系数矩阵进行初始变换,且当前块的预测模式为帧内预测模式,且帧内预测的第一模式号区间包含当前块的帧内预测模式的模式号,还可以包括:当前块为亮度块。
[0144] 示例性的,第一模式号区间可以包括但不限于:模式号34~模式号65。
[0145] 示例性的,若当前块采用变换核对(DST7,DST7)对残差系数矩阵进行初始变换,则确定对当前块不进行二次变换。
[0146] 由以上技术方案可见,本申请实施例中,在对当前块进行初始变换,得到初始变换系数矩阵后,可以确定是否对当前块进行二次变换,如果否,对初始变换系数矩阵不进行二次变换,如果是,对初始变换系数矩阵进行二次变换。基于上述处理,可以对初始变换系数矩阵进行二次变换,或不对初始变换系数矩阵进行二次变换,从而提高编码性能。
[0147] 实施例2:参见图4B所示,为本申请实施例中提出的解码方法的流程示意图,该解码方法与实施例1的编码方法对应,该解码方法可以应用于解码端,该方法可以包括:
[0148] 步骤421,获取当前块的编码比特流,从编码比特流中解析目标变换系数矩阵。
[0149] 步骤422,若当前块支持二次变换,且当前块满足第三预设条件,则确定对当前块不进行反二次变换。
[0150] 步骤423,若对当前块不进行反二次变换,则将目标变换系数矩阵确定为当前块的初始变换系数矩阵;若对当前块进行反二次变换,则对目标变换系数矩阵进行反二次变换,得到初始变换系数矩阵。
[0151] 步骤424,对初始变换系数矩阵进行初始反变换,得到当前块对应的残差系数矩阵;根据残差系数矩阵确定当前块的重建值。
[0152] 在一种可能的实施方式中,该第三预设条件可以包括但不限于:当前块采用变换核对(DCT2,DCT2)进行初始反变换,且当前块的预测模式为帧内预测模式,且帧内预测的第一模式号区间包含当前块的帧内预测模式的模式号。
[0153] 示例性的,第三预设条件,除了包括当前块采用变换核对(DCT2,DCT2)进行初始反变换,且当前块的预测模式为帧内预测模式,且帧内预测的第一模式号区间包含当前块的帧内预测模式的模式号,还可以包括:当前块为亮度块。
[0154] 示例性的,第一模式号区间可以包括但不限于:模式号34~模式号65。
[0155] 示例性的,若当前块采用变换核对(DST7,DST7)进行初始反变换,则可以确定对当前块不进行反二次变换。
[0156] 由以上技术方案可见,本申请实施例中,在对当前块进行初始变换,得到初始变换系数矩阵后,可以确定是否对当前块进行二次变换,如果否,对初始变换系数矩阵不进行二次变换,如果是,对初始变换系数矩阵进行二次变换。基于上述处理,可以对初始变换系数矩阵进行二次变换,或不对初始变换系数矩阵进行二次变换,从而提高编码性能。
[0157] 实施例3:基于与上述实施例1同样的申请构思,参见图4C所示,为本申请实施例中提出的另一种编码方法的流程示意图,该方法可以应用于编码端,该方法可以包括以下步骤:
[0158] 步骤431,获取当前块对应的残差系数矩阵。
[0159] 示例性的,可以确定当前块对应的参考块,针对当前块的每个像素点,从参考块中确定与该像素点对应的参考点。该像素点的像素值与该参考点的像素值之间的差值,就是该像素点对应的残差系数,当前块的所有像素点对应的残差系数就组成当前块对应的残差系数矩阵。
[0160] 步骤432,对该残差系数矩阵进行初始变换,得到初始变换系数矩阵。
[0161] 示例性的,可以采用变换核对(DCT2,DCT2)对残差系数矩阵进行初始变换,得到初始变换系数矩阵,也可以采用变换核对(DST7,DST7)对残差系数矩阵进行初始变换,得到初始变换系数矩阵。在采用变换核对(DCT2,DCT2)对残差系数矩阵进行初始变换时,初始变换过程可以参见公式(3)所示,矩阵A是DCT2(参见表1所示),矩阵B也是DCT2。在采用变换核对(DST7,DST7)对残差系数矩阵进行初始变换时,初始变换过程可以参见公式(3)所示,矩阵A是DST7(参见表1所示),矩阵B也是DST7。
[0162] 关于采用变换核对(DCT2,DCT2)对残差系数矩阵进行初始变换,还是采用变换核对(DST7,DST7)对残差系数矩阵进行初始变换,可以采用如下方式:sr_x表示残差系数矩阵中最右面的非零变换系数的横坐标,sr_y表示残差系数矩阵中最下面的非零变换系数的纵坐标,sr_x和sr_y可以确定残差系数矩阵中所有非零变换系数对应的区域,超出该范围的区域都为0。若sr_x大于等于16或sr_y大于等于16时,编码端采用变换核对(DCT2,DCT2)对残差系数矩阵进行初始变换。否则,编码端通过RDO来选择采用变换核对(DCT2,DCT2)还是变换核对(DST7,DST7)。例如,若变换核对(DCT2,DCT2)的率失真代价值小于变换核对(DST7,DST7)的率失真代价值,则采用变换核对(DCT2,DCT2)对残差系数矩阵进行初始变换;若变换核对(DCT2,DCT2)的率失真代价值大于变换核对(DST7,DST7)的率失真代价值,则采用变换核对(DST7,DST7)对残差系数矩阵进行初始变换。
[0163] 步骤433,若当前块支持二次变换,且当前块满足第一预设条件,确定对当前块不进行二次变换。第一预设条件可以包括但不限于:当前块采用变换核对(DCT2,DCT2)对残差系数矩阵进行初始变换,且当前块的预测模式为帧内预测模式,且帧内预测的第一模式号区间包含当前块的帧内预测模式的模式号。
[0164] 示例性的,第一预设条件,除了包括当前块采用变换核对(DCT2,DCT2)对残差系数矩阵进行初始变换,且当前块的预测模式为帧内预测模式,且帧内预测的第一模式号区间包含当前块的帧内预测模式的模式号,还可以包括:当前块为亮度块。
[0165] 示例性的,第一模式号区间可以包括但不限于:模式号34~模式号65。
[0166] 示例性的,若当前块采用变换核对(DST7,DST7)对残差系数矩阵进行初始变换,则确定对当前块不进行二次变换。
[0167] 综上所述,若当前块不支持二次变换,则不采用本申请实施例的变换技术,对此过程的实现方式不做限制。若当前块支持二次变换,则可以执行如下步骤:判断当前块采用变换核对(DCT2,DCT2)对残差系数矩阵进行初始变换,还是采用变换核对(DST7,DST7)对残差系数矩阵进行初始变换。若当前块采用变换核对(DST7,DST7)对残差系数矩阵进行初始变换,则确定对当前块不进行二次变换。若当前块采用变换核对(DCT2,DCT2)对残差系数矩阵进行初始变换,则在当前块的预测模式不为帧内预测模式,和/或,当前块不为亮度块时,则可以不采用本申请实施例的变换技术,对此情况下的实现方式不做限制。
[0168] 若当前块的预测模式为帧内预测模式,且当前块为亮度块,则确定当前块的帧内预测模式的模式号是否位于第一模式号区间。如果是,则确定对当前块不进行二次变换;如果否,则确定允许对当前块进行二次变换。示例性的,第一模式号区间可以包括但不限于:模式号34~模式号65。例如,若当前块的帧内预测模式的模式号为模式号39,则说明当前块的帧内预测模式的模式号位于第一模式号区间,因此,可以对当前块不进行二次变换。若当前块的帧内预测模式的模式号为模式号7,则说明当前块的帧内预测模式的模式号不位于第一模式号区间,允许对当前块进行二次变换,但是是否进行二次变换,还可以采用其它方式进行判断,对此不做限制,本实施例中,以对当前块进行二次变换为例进行说明。
[0169] 步骤434,如果对当前块不进行二次变换,则将初始变换系数矩阵确定为当前块的目标变换系数矩阵。如果对当前块进行二次变换,则对初始变换系数矩阵进行二次变换,得到当前块的目标变换系数矩阵。至此,可以得到当前块的目标变换系数矩阵。
[0170] 示例性的,在二次变换过程中,若初始变换系数矩阵的宽度或者高度的值大于4,则对左上角4*4的系数矩阵进行二次变换。若初始变换系数矩阵的宽度和高度的值均为4,则对初始变换系数矩阵进行二次变换。具体的二次变换方式可以参见公式(3)所示,矩阵A和矩阵B是预先配置的二次变换矩阵,对此不做限制。
[0171] 当然,上述只是对初始变换系数矩阵进行二次变换的示例,对此不做限制。
[0172] 步骤435,根据目标变换系数矩阵进行编码,得到当前块的编码比特流。
[0173] 综上所述,若当前块使用(DCT2,DCT2)变换核进行初始变换,则在进行初始变换后,还可以根据当前块的帧内预测模式判断是否对当前块进行二次变换,若是,则对初始变换系数矩阵的左上角4*4的系数矩阵进行二次变换。若当前块使用(DST7,DST7)变换核进行初始变换,在进行初始变换后,确定对当前块不进行二次变换。经过上述处理,可得到经过变换的目标变换系数矩阵,目标变换系数矩阵经过熵编码过程变成编码比特流传到解码端。
[0174] 在一种可能的实施方式中,经过变换量化后的目标变换系数矩阵需要满足:sr_x和sr_y小于16,并且目标变换系数矩阵中所有非零变换系数的个数为奇数,用于表示当前块使用(DST7,DST7)变换核进行初始变换。或者,在另一种可能的实施方式中,经过变换量化后的目标变换系数矩阵需要满足:sr_x或sr_y大于等于16,或者,标变换系数矩阵中所有非零变换系数的个数为偶数,用于表示当前块使用(DCT2,DCT2)变换核进行初始变换。
[0175] 实施例4:基于与上述实施例2同样的申请构思,参见图4D所示,为本申请实施例中提出的另一种解码方法的流程示意图,该方法可以应用于解码端,该方法可以包括以下步骤:
[0176] 步骤441,获取当前块的编码比特流,从编码比特流中解析目标变换系数矩阵。
[0177] 步骤442,若当前块支持二次变换,且当前块满足第三预设条件,则确定对当前块不进行反二次变换。示例性的,该第三预设条件可以包括但不限于:当前块采用变换核对(DCT2,DCT2)进行初始反变换,且当前块的预测模式为帧内预测模式,且帧内预测的第一模式号区间包含当前块的帧内预测模式的模式号。
[0178] 示例性的,第三预设条件,除了包括当前块采用变换核对(DCT2,DCT2)进行初始反变换,且当前块的预测模式为帧内预测模式,且帧内预测的第一模式号区间包含当前块的帧内预测模式的模式号,还可以包括:当前块为亮度块。
[0179] 示例性的,第一模式号区间可以包括但不限于:模式号34~模式号65。
[0180] 示例性的,若当前块采用变换核对(DST7,DST7)进行初始反变换,即不是采用变换核对(DCT2,DCT2),则确定对当前块不进行反二次变换。
[0181] 综上所述,若当前块不支持二次变换,则不采用本申请实施例的变换技术,对此过程的实现方式不做限制。若当前块支持二次变换,则还可以执行如下步骤:判断当前块采用变换核对(DCT2,DCT2)进行初始反变换,还是采用变换核对(DST7,DST7)进行初始反变换。若当前块采用变换核对(DST7,DST7)进行初始反变换,则可以确定对当前块不进行反二次变换。若当前块采用变换核对(DCT2,DCT2)进行初始反变换,则在当前块的预测模式不为帧内预测模式,和/或,当前块不为亮度块时,则可以不采用本申请实施例的变换技术,对此情况下的实现方式不做限制。
[0182] 若当前块的预测模式为帧内预测模式,且当前块为亮度块,则解码端确定当前块的帧内预测模式的模式号是否位于第一模式号区间。如果是,则解码端确定对当前块不进行反二次变换;如果否,则解码端确定对当前块进行反二次变换。示例性的,第一模式号区间可以包括但不限于:模式号34~模式号65。例如,若当前块的帧内预测模式的模式号为模式号39,则说明当前块的帧内预测模式的模式号位于第一模式号区间,因此,解码端可以确定对当前块不进行反二次变换。若当前块的帧内预测模式的模式号为模式号7,则说明当前块的帧内预测模式的模式号不位于第一模式号区间,因此,解码端可以确定对当前块进行反二次变换。
[0183] 示例性的,解码端确定当前块采用变换核对(DCT2,DCT2)进行初始反变换,还是采用变换核对(DST7,DST7)进行初始反变换,可以采用如下方式:解码端可以从编码比特流中解析得到sr_x和sr_y,当sr_x大于等于16或sr_y大于等于16时,解码端可以直接判定当前块采用变换核对(DCT2,DCT2)进行初始反变换。当sr_x小于16且sr_y小于16时,则解码端还可以确定目标变换系数矩阵中所有非零变换系数的个数的奇偶性。若该奇偶性为奇数,则确定当前块采用变换核对(DST7,DST7)进行初始反变换,若该奇偶性为偶数,则确定当前块采用变换核对(DCT2,DCT2)进行初始反变换。
[0184] 步骤443,若对当前块不进行反二次变换,则将目标变换系数矩阵确定为初始变换系数矩阵。若对当前块进行反二次变换,则对目标变换系数矩阵进行反二次变换,得到初始变换系数矩阵。
[0185] 示例性的,在进行反二次变换的过程中,若目标变换系数矩阵的宽度或者高度的值大于4,则对左上角4*4的系数矩阵进行反二次变换,若目标变换系数矩阵的宽度和高度的值均为4,则对目标变换系数矩阵进行反二次变换,对此反二次变换方式不做限制,可以参见后续实施例12,在此不再赘述。
[0186] 示例性的,对目标变换系数矩阵进行反二次变换,是上述二次变换的逆过程。
[0187] 步骤444,对初始变换系数矩阵进行初始反变换,得到当前块对应的残差系数矩阵。
[0188] 示例性的,在初始反变换过程中,在采用变换核对(DCT2,DCT2)对残差系数矩阵进行初始变换,得到初始变换系数矩阵时,可以采用变换核对(DCT2,DCT2)对初始变换系数矩阵进行初始反变换,得到当前块对应的残差系数矩阵。在采用变换核对(DST7,DST7)对残差系数矩阵进行初始变换,得到初始变换系数矩阵时,采用变换核对(DST7,DST7)对初始变换系数矩阵进行初始反变换,得到当前块对应的残差系数矩阵。
[0189] 示例性的,对初始变换系数矩阵进行初始反变换,是上述初始变换的逆过程。
[0190] 步骤445,根据残差系数矩阵确定当前块的重建值。
[0191] 例如,可以确定当前块对应的参考块,针对当前块的每个像素点,从参考块中确定与该像素点对应的参考点,并从残差系数矩阵中确定该像素点对应的残差系数值。根据该参考点的像素值与该残差系数值,就可以得到该像素点的重建值。当前块的所有像素点对应的重建值,就可以组成当前块的重建值。当然,上述方式只是示例,对此不做限制。
[0192] 综上所述,解码端可以根据目标变换系数矩阵中所有非零变换系数的个数的奇偶性,及sr_x和sr_y得到istTuflag。若istTuflag等于0,表示当前块使用变换核对(DCT2,DCT2)进行初始反变换,若istTuflag等于1,表示当前块使用变换核对(DST7,DST7)进行初始反变换。当istTuflag等于0,且当前块的预测模式为帧内预测模式,当前块为亮度块,帧内预测模式的模式号位于第一模式号区间,则确定对当前块不进行反二次变换。当istTuflag等于0,且当前块的预测模式为帧内预测模式,当前块为亮度块,帧内预测模式的模式号不位于第一模式号区间,则确定对当前块进行反二次变换。若对当前块进行反二次变换,在进行逆变换时,先对目标变换系数矩阵左上角4*4区域进行反二次变换,并更新左上角4*4的变换系数,得到初始变换系数矩阵,然后再对初始变换系数矩阵进行初始反变换。若对当前块不进行反二次变换,则直接对目标变换系数矩阵(即目标变换系数矩阵作为初始变换系数矩阵)进行初始反变换。然后,经过反变换后得到残差块,残差块与预测块相加可以得到重建块。
[0193] 实施例5:在另一种可能的实施方式中,参见图5A所示,为本申请实施例中提出的编码方法的流程示意图,该编码方法可以应用于编码端,该编码方法可以包括以下步骤:
[0194] 步骤511,获取当前块对应的残差系数矩阵。
[0195] 步骤512,对该残差系数矩阵进行初始变换,得到初始变换系数矩阵。
[0196] 步骤513,若当前块支持二次变换,当前块启用AST(Alternative Secondary Transform,可选择的二次变换)技术,且当前块满足第二预设条件,则根据当前块对应的率失真代价值,确定是否对当前块进行二次变换。
[0197] 示例性的,若可选择的二次变换启用标志(如AstEnableFlag)的值等于预设取值(如1),则表示序列级或者帧级允许启用可选择的二次变换技术,即当前块启用AST技术。
[0198] 示例性的,第二预设条件可以包括但不限于:当前块为亮度块,当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数。
[0199] 示例性的,第二预设条件,除了包括当前块为亮度块,当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数,还可以包括但不限于以下条件中的其中一个或多个的组合:当前块不支持DT划分模式。当前块采用的帧内预测模式的模式号位于第二模式号区间且当前块外部左边的参考样本可用。当前块的宽度尺寸和高度尺寸满足预设尺寸条件。
[0200] 示例性的,第二预设条件,除了包括当前块为亮度块,当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数,还可以包括但不限于以下条件中的其中一个或多个的组合:当前块不支持DT划分模式。当前块采用的帧内预测模式的模式号位于第三模式号区间且当前块外部上边的参考样本可用。当前块的宽度尺寸和高度尺寸满足预设尺寸条件。
[0201] 示例性的,第二预设条件,除了包括当前块为亮度块,当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数,还可以包括但不限于以下条件中的其中一个或多个的组合:当前块支持DT划分模式。当前块采用的帧内预测模式的模式号位于第二模式号区间,且当前块外部左边的参考样本可用。当前块的宽度尺寸和高度尺寸满足预设尺寸条件。
[0202] 示例性的,第二预设条件,除了包括当前块为亮度块,当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数,还可以包括但不限于以下条件中的其中一个或多个的组合:当前块支持DT划分模式。当前块采用的帧内预测模式的模式号位于第三模式号区间,且当前块外部上边的参考样本可用。当前块的宽度尺寸和高度尺寸满足预设尺寸条件。
[0203] 在上述实施例中,当前块的宽度尺寸可以小于等于n1,当前块的高度尺寸可以小于等于n2。例如,n1=n2=32;或者,n1=n2=64。当然,上述只是示例,对此不做限制。
[0204] 在上述实施例中,第二模式号区间可以包括但不限于:模式号0~模式号2,模式号13~模式号32,模式号44~模式号65。第三模式号区间可以包括但不限于:模式号0~模式号23,模式号34~模式号57。当然,上述只是第二模式号区间和第三模式号区间的示例。
[0205] 在一种可能的实施方式中,根据当前块对应的率失真代价值,确定是否对当前块进行二次变换,可以包括但不限于如下方式:确定对当前块只进行初始变换时的第一率失真代价值;确定对当前块先进行初始变换再进行二次变换时的第二率失真代价值;若第二率失真代价值小于第一率失真代价值,则编码端可以确定对当前块进行二次变换;若第二率失真代价值大于第一率失真代价值,则编码端可以确定对当前块不进行二次变换。
[0206] 示例性的,确定是否对当前块进行二次变换之后,如果是,则可以对初始变换系数矩阵进行二次变换,得到目标变换系数矩阵;如果否,则可以将初始变换系数矩阵确定为目标变换系数矩阵。然后,根据目标变换系数矩阵进行编码,得到当前块的编码比特流。
[0207] 在一种可能的实施方式中,根据目标变换系数矩阵进行编码,得到当前块的编码比特流,可以包括但不限于:若确定对当前块进行二次变换,则可以在编码比特流中添加第一指示信息;示例性的,第一指示信息可以用于指示对当前块进行二次变换。或者,若确定对当前块不进行二次变换,则可以在编码比特流中添加第二指示信息;示例性的,第二指示信息可以用于指示对当前块不进行二次变换。
[0208] 在另一种可能的实施方式中,根据目标变换系数矩阵进行编码,得到当前块的编码比特流,可以包括但不限于:根据目标变换系数矩阵中的变换系数,确定目标变换系数矩阵的目标特征;根据目标特征和当前块的预设标志位的目标取值,确定是否对目标变换系数矩阵进行调整;预设标志位的目标取值为第一取值时,用于指示对当前块进行二次变换,预设标志位的目标取值为第二取值时,用于指示对当前块不进行二次变换。如果不对目标变换系数矩阵进行调整,则对目标变换系数矩阵进行编码,得到当前块的编码比特流;如果对目标变换系数矩阵进行调整,则对目标变换系数矩阵中的变换系数进行调整,以使调整后的目标变换系数矩阵的目标特征与预设标志位的目标取值相匹配,并对调整后的目标变换系数矩阵进行编码,得到当前块的编码比特流。
[0209] 示例性的,目标特征包括目标奇偶性,根据目标特征和当前块的预设标志位的目标取值,确定是否对目标变换系数矩阵进行调整,可以包括但不限于:若目标奇偶性为奇数,且当前块的预设标志位的目标取值为第一取值,则确定对目标变换系数矩阵不进行调整;或者,若目标奇偶性为奇数,且当前块的预设标志位的目标取值为第二取值,则确定对目标变换系数矩阵进行调整;或者,若目标奇偶性为偶数,且当前块的预设标志位的目标取值为第一取值,则确定对目标变换系数矩阵进行调整;或者,若目标奇偶性为偶数,且当前块的预设标志位的目标取值为第二取值,则确定对目标变换系数矩阵不进行调整。目标奇偶性为奇数时,用于指示对当前块进行二次变换;目标奇偶性为偶数时,用于指示对当前块不进行二次变换。
[0210] 示例性的,目标特征包括目标奇偶性,根据目标特征和当前块的预设标志位的目标取值,确定是否对目标变换系数矩阵进行调整,可以包括但不限于:若目标奇偶性为偶数,且当前块的预设标志位的目标取值为第一取值,则确定对目标变换系数矩阵不进行调整;或者,若目标奇偶性为偶数,且当前块的预设标志位的目标取值为第二取值,则确定对目标变换系数矩阵进行调整;或者,若目标奇偶性为奇数,且当前块的预设标志位的目标取值为第一取值,则确定对目标变换系数矩阵进行调整;或者,若目标奇偶性为奇数,且当前块的预设标志位的目标取值为第二取值,则确定对目标变换系数矩阵不进行调整。目标奇偶性为偶数时,用于指示对当前块进行二次变换;目标奇偶性为奇数时,用于指示对当前块不进行二次变换。
[0211] 在上述实施例中,目标奇偶性可以包括但不限于:目标变换系数矩阵中的所有奇数变换系数的个数的奇偶性;或者,目标变换系数矩阵中的所有偶数变换系数的个数的奇偶性;或者,目标变换系数矩阵中的所有变换系数的绝对值之和的奇偶性。
[0212] 示例性的,第二预设条件,除了包括当前块为亮度块,当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数,还可以包括:当前块采用变换核对(DCT2,DCT2)进行初始变换。
[0213] 由以上技术方案可见,本申请实施例中,在对当前块进行初始变换,得到初始变换系数矩阵后,可以确定是否对当前块进行二次变换,如果否,对初始变换系数矩阵不进行二次变换,如果是,对初始变换系数矩阵进行二次变换。基于上述处理,可以对初始变换系数矩阵进行二次变换,或不对初始变换系数矩阵进行二次变换,从而提高编码性能。
[0214] 实施例6:参见图5B所示,为本申请实施例中提出的解码方法的流程示意图,该解码方法与实施例5的编码方法对应,该解码方法可以应用于解码端,该方法可以包括:
[0215] 步骤521,获取当前块的编码比特流。
[0216] 步骤522,若当前块支持二次变换,当前块启用AST技术,且当前块满足第四预设条件,则从编码比特流中解析出指示信息,根据该指示信息确定是否对当前块进行反二次变换。
[0217] 示例性的,第四预设条件可以包括但不限于:当前块为亮度块,当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数。
[0218] 示例性的,第四预设条件,除了包括当前块为亮度块,当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数,还可以包括但不限于以下条件中的其中一个或多个的组合:当前块不支持DT划分模式。当前块采用的帧内预测模式的模式号位于第二模式号区间且当前块外部左边的参考样本可用。当前块的宽度尺寸和高度尺寸满足预设尺寸条件。
[0219] 或者,当前块不支持DT划分模式。当前块采用的帧内预测模式的模式号位于第三模式号区间且当前块外部上边的参考样本可用。当前块的宽度尺寸和高度尺寸满足预设尺寸条件。
[0220] 或者,当前块支持DT划分模式。当前块采用的帧内预测模式的模式号位于第二模式号区间,且当前块外部左边的参考样本可用。当前块的宽度尺寸和高度尺寸满足预设尺寸条件。
[0221] 或者,当前块支持DT划分模式。当前块采用的帧内预测模式的模式号位于第三模式号区间,且当前块外部上边的参考样本可用。当前块的宽度尺寸和高度尺寸满足预设尺寸条件。
[0222] 示例性的,第四预设条件,除了包括当前块为亮度块,当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数,还可以包括:当前块采用变换核对(DCT2,DCT2)进行初始反变换。
[0223] 示例性的,若指示信息为第一指示信息,则确定对当前块进行反二次变换;第一指示信息用于指示对当前块进行二次变换。或者,若指示信息为第二指示信息,则确定对当前块不进行反二次变换;第二指示信息用于指示对当前块不进行二次变换。
[0224] 示例性的,根据指示信息确定是否对当前块进行反二次变换之后,还可以从编码比特流中解析目标变换系数矩阵;如果对当前块进行反二次变换,则可以对该目标变换系数矩阵进行反二次变换,得到初始变换系数矩阵;如果对当前块不进行反二次变换,则可以将该目标变换系数矩阵确定为初始变换系数矩阵。然后,对该初始变换系数矩阵进行初始反变换,得到当前块对应的残差系数矩阵。然后,根据该残差系数矩阵确定当前块的重建值。
[0225] 由以上技术方案可见,本申请实施例中,在对当前块进行初始变换,得到初始变换系数矩阵后,可以确定是否对当前块进行二次变换,如果否,对初始变换系数矩阵不进行二次变换,如果是,对初始变换系数矩阵进行二次变换。基于上述处理,可以对初始变换系数矩阵进行二次变换,或不对初始变换系数矩阵进行二次变换,从而提高编码性能。
[0226] 实施例7:参见图5C所示,为本申请实施例中提出的解码方法的流程示意图,该解码方法与实施例5的编码方法对应,该解码方法可以应用于解码端,该方法可以包括:
[0227] 步骤531,获取当前块的编码比特流,并从编码比特流中解析目标变换系数矩阵。
[0228] 步骤532,若当前块支持二次变换,当前块启用AST技术,且当前块满足第四预设条件,则根据目标变换系数矩阵中的变换系数,确定目标变换系数矩阵的目标特征。
[0229] 示例性的,第四预设条件可以参见上述实施例6,在此不再重复赘述。
[0230] 步骤533,根据该目标特征确定当前块的预设标志位的目标取值;示例性的,预设标志位的目标取值为第一取值时,用于指示对当前块进行反二次变换,预设标志位的目标取值为第二取值时,用于指示对当前块不进行反二次变换。
[0231] 步骤534,根据预设标志位的目标取值确定是否对当前块进行反二次变换。
[0232] 在一种可能的实施方式中,目标特征可以包括目标奇偶性,根据该目标特征确定当前块的预设标志位的目标取值,可以包括但不限于:若目标奇偶性为奇数,则确定预设标志位的目标取值为第一取值;若目标奇偶性为偶数,则确定预设标志位的目标取值为第二取值。
[0233] 示例性的,根据预设标志位的目标取值确定是否对当前块进行反二次变换,可以包括但不限于:若预设标志位的目标取值为第一取值,则可以确定对当前块进行反二次变换;若预设标志位的目标取值为第二取值,则可以确定对当前块不进行反二次变换。
[0234] 在另一种可能的实施方式中,目标特征可以包括目标奇偶性,根据该目标特征确定当前块的预设标志位的目标取值,可以包括但不限于:若目标奇偶性为偶数,则确定预设标志位的目标取值为第一取值;若目标奇偶性为奇数,则确定预设标志位的目标取值为第二取值。
[0235] 示例性的,根据预设标志位的目标取值确定是否对当前块进行反二次变换,可以包括但不限于:若预设标志位的目标取值为第一取值,则可以确定对当前块进行反二次变换;若预设标志位的目标取值为第二取值,则可以确定对当前块不进行反二次变换。
[0236] 在上述实施例中,目标奇偶性可以包括但不限于:目标变换系数矩阵中的所有奇数变换系数的个数的奇偶性;或者,目标变换系数矩阵中的所有偶数变换系数的个数的奇偶性;或者,目标变换系数矩阵中的所有变换系数的绝对值之和的奇偶性。
[0237] 示例性的,根据预设标志位的目标取值确定是否对当前块进行反二次变换之后,如果是,则可以对目标变换系数矩阵进行反二次变换,得到初始变换系数矩阵;如果否,则可以将目标变换系数矩阵确定为初始变换系数矩阵。然后,对该初始变换系数矩阵进行初始反变换,得到当前块对应的残差系数矩阵。然后,根据该残差系数矩阵确定当前块的重建值。
[0238] 由以上技术方案可见,本申请实施例中,在对当前块进行初始变换,得到初始变换系数矩阵后,可以确定是否对当前块进行二次变换,如果否,对初始变换系数矩阵不进行二次变换,如果是,对初始变换系数矩阵进行二次变换。基于上述处理,可以对初始变换系数矩阵进行二次变换,或不对初始变换系数矩阵进行二次变换,从而提高编码性能。
[0239] 实施例8:基于与上述实施例5同样的申请构思,参见图5D所示,为本申请实施例中提出的另一种编码方法的流程示意图,该方法可以应用于编码端,该方法可以包括以下步骤:
[0240] 步骤541,获取当前块对应的残差系数矩阵。
[0241] 步骤542,对该残差系数矩阵进行初始变换,得到初始变换系数矩阵。
[0242] 示例性的,步骤541‑步骤542可以参见步骤431‑步骤432,在此不再赘述。
[0243] 步骤543,若当前块支持二次变换,当前块启用AST技术,且当前块满足第二预设条件,则根据当前块对应的率失真代价值,确定是否对当前块进行二次变换。
[0244] 示例性的,第二预设条件可以包括但不限于:当前块为亮度块,当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数。例如,当前块的初始变换系数矩阵中含有非零变换系数是指:在对该残差系数矩阵进行初始变换,得到初始变换系数矩阵后,若初始变换系数矩阵中的所有变换系数均为零,则说明初始变换系数矩阵中不含有非零变换系数,在此情况下,当前块的cbf标志位可以置为第一数值(如数值0),不需要编码当前块的变换系数。若初始变换系数矩阵中的所有变换系数不均为零(即任意一个或多个变换系数不为零),则说明初始变换系数矩阵中含有非零变换系数,在此情况下,当前块的cbf标志位可以置为第二数值(如数值1),需要编码当前块的变换系数。
[0245] 示例性的,第二预设条件,除了包括当前块为亮度块,当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数,还可以包括:当前块采用变换核对(DCT2,DCT2)进行初始变换。例如,若当前块采用变换核对(DCT2,DCT2)对残差系数矩阵进行初始变换,表示变换核对(DCT2,DCT2)满足第二预设条件;若当前块采用变换核对(DST7,DST7)对残差系数矩阵进行初始变换,表示变换核对(DST7,DST7)不满足第二预设条件。
[0246] 示例性的,第二预设条件除了包括当前块为亮度块,当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数,当前块采用变换核对(DCT2,DCT2)进行初始变换,还可以包括以下之一或者任意组合:条件1、当前块不支持DT划分模式;或者,当前块支持DT划分模式。条件2、当前块采用的帧内预测模式的模式号位于第二模式号区间(如模式号0~模式号2,模式号13~模式号32,模式号44~模式号65),且当前块外部左边的参考样本可用;或者,当前块采用的帧内预测模式的模式号位于第三模式号区间(如模式号0~模式号23,模式号34~模式号57),且当前块外部上边的参考样本可用,即,条件2中的两个条件,只要有其中一个条件满足即可。条件3、当前块的宽度尺寸和高度尺寸满足预设尺寸条件,例如,宽度尺寸可以小于等于n1,高度尺寸可以小于等于n2。例如,n1=n2=32;或者,n1=n2=64。为了方便描述,以第二预设条件包括上述3个条件为例,当然,针对其它条件组合情况,实现方式类似。
[0247] 综上所述,若当前块不支持二次变换,和/或,当前块不启用AST技术,则不采用本申请实施例的变换技术,对此过程的实现方式不做限制。若当前块支持二次变换,且当前块启用AST技术,则可以执行如下步骤:判断当前块采用变换核对(DCT2,DCT2)对残差系数矩阵进行初始变换,还是采用变换核对(DST7,DST7)对残差系数矩阵进行初始变换。
[0248] 若当前块采用变换核对(DST7,DST7)对残差系数矩阵进行初始变换,则可以确定对当前块不进行二次变换。若当前块采用变换核对(DCT2,DCT2)对残差系数矩阵进行初始变换,且当前块满足剩余第二预设条件的所有条件(如当前块为亮度块,当前块的预测模式为帧内预测模式,当前块的初始变换系数矩阵中含有非零变换系数,上述条件1,条件2和条件3等),还可以根据当前块对应的率失真代价值,确定是否对当前块进行二次变换。若当前块采用变换核对(DCT2,DCT2)对残差系数矩阵进行初始变换,且当前块不满足剩余第二预设条件的任意一个条件,则不采用本申请实施例的变换技术,可以对当前块进行二次变换,或对当前块不进行二次变换,对此过程的实现方式不做限制。
[0249] 综上所述,若当前块支持二次变换,且当前块启用AST技术,且当前块采用变换核对(DCT2,DCT2)对残差系数矩阵进行初始变换,且当前块为亮度块,且当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数,且当前块不支持DT划分模式(或当前块支持DT划分模式),且当前块采用的帧内预测模式的模式号位于第二模式号区间,当前块外部左边的参考样本可用(或当前块采用的帧内预测模式的模式号位于第三模式号区间,当前块外部上边的参考样本可用),且当前块的宽度尺寸和高度尺寸满足预设尺寸条件,则可以根据当前块对应的率失真代价值,确定是否对当前块进行二次变换。
[0250] 在一种可能的实施方式中,根据当前块对应的率失真代价值,确定是否对当前块进行二次变换,可以包括但不限于如下方式:确定对当前块只进行初始变换时的第一率失真代价值,对此确定方式不做限制,可以采用RDO确定第一率失真代价值;例如,对残差系数矩阵进行初始变换,得到初始变换系数矩阵后,基于初始变换系数矩阵确定当前块对应的第一率失真代价值。确定对当前块先进行初始变换再进行二次变换时的第二率失真代价值,对此确定方式不做限制,可以采用RDO确定第二率失真代价值;例如,,对残差系数矩阵进行初始变换,得到初始变换系数矩阵,并对初始变换系数矩阵进行二次变换,得到目标变换系数矩阵,基于目标变换系数矩阵确定当前块对应的第二率失真代价值。然后,若该第二率失真代价值小于该第一率失真代价值,则编码端确定对当前块进行二次变换;若该第二率失真代价值大于该第一率失真代价值,则编码端确定对当前块不进行二次变换。若该第二率失真代价值等于该第一率失真代价值,则编码端确定对当前块进行二次变换或对当前块不进行二次变换。
[0251] 步骤544,如果对当前块进行二次变换,则对初始变换系数矩阵进行二次变换,得到当前块的目标变换系数矩阵。如果对当前块不进行二次变换,则将初始变换系数矩阵确定为当前块的目标变换系数矩阵。至此,可以得到当前块的目标变换系数矩阵。
[0252] 步骤545,根据目标变换系数矩阵进行编码,得到当前块的编码比特流。
[0253] 示例性的,步骤544‑步骤545可以参见步骤434‑步骤435,在此不再赘述。
[0254] 示例性的,在根据目标变换系数矩阵进行编码,得到当前块的编码比特流的过程中,还可以在编码比特流中添加指示信息。例如,若编码端对当前块进行二次变换,则编码端可以在编码比特流中添加第一指示信息,第一指示信息可以用于指示对当前块进行二次变换。或者,若编码端对当前块不进行二次变换,则编码端可以在编码比特流中添加第二指示信息,第二指示信息可以用于指示对当前块不进行二次变换。
[0255] 综上所述,若当前块使用(DCT2,DCT2)变换核进行初始变换,则在进行初始变换之后,还可以采用上述方式判断是否对当前块进行二次变换,若是,则对初始变换系数矩阵的左上角4*4的系数矩阵进行二次变换。若当前块使用(DST7,DST7)变换核进行初始变换,在进行初始变换后,确定对当前块不进行二次变换。经过上述处理,可得到经过变换的目标变换系数矩阵,目标变换系数矩阵经过熵编码过程变成编码比特流传到解码端。
[0256] 在一种可能的实施方式中,经过变换量化后的目标变换系数矩阵需要满足:sr_x和sr_y小于16,并且目标变换系数矩阵中所有非零变换系数的个数为奇数,用于表示当前块使用(DST7,DST7)变换核进行初始变换。或者,在另一种可能的实施方式中,经过变换量化后的目标变换系数矩阵需要满足:sr_x或sr_y大于等于16,或者,标变换系数矩阵中所有非零变换系数的个数为偶数,用于表示当前块使用(DCT2,DCT2)变换核进行初始变换。
[0257] 实施例9:基于与上述实施例5同样的申请构思,参见图5E所示,为本申请实施例中提出的另一种编码方法的流程示意图,该方法可以应用于编码端,该方法可以包括以下步骤:
[0258] 步骤551,获取当前块对应的残差系数矩阵。
[0259] 步骤552,对该残差系数矩阵进行初始变换,得到初始变换系数矩阵。
[0260] 步骤553,若当前块支持二次变换,当前块启用AST技术,且当前块满足第二预设条件,则根据当前块对应的率失真代价值,确定是否对当前块进行二次变换。
[0261] 步骤554,如果对当前块进行二次变换,则对初始变换系数矩阵进行二次变换,得到当前块的目标变换系数矩阵。如果对当前块不进行二次变换,则将初始变换系数矩阵确定为当前块的目标变换系数矩阵。至此,可以得到当前块的目标变换系数矩阵。
[0262] 示例性的,步骤551‑步骤554可以参见步骤541‑步骤544,在此不再赘述。
[0263] 步骤555,根据目标变换系数矩阵中的变换系数,确定目标变换系数矩阵的目标特征。
[0264] 示例性的,目标特征可以为目标奇偶性,目标奇偶性可以包括但不限于:目标变换系数矩阵中的所有奇数变换系数的个数的奇偶性;例如,若目标变换系数矩阵中存在30个奇数变换系数,则所有奇数变换系数的个数的奇偶性为偶数,即目标奇偶性为偶数。或者,目标变换系数矩阵中的所有偶数变换系数的个数的奇偶性;例如,若目标变换系数矩阵中存在25个偶数变换系数,则所有偶数变换系数的个数的奇偶性为奇数,即目标奇偶性为奇数。或者,目标变换系数矩阵中的所有变换系数的绝对值之和的奇偶性;例如,对目标变换系数矩阵中的所有变换系数的绝对值求和,若求和结果为奇数,则目标奇偶性为奇数,若求和结果为偶数,则目标奇偶性为偶数。当然,上述目标奇偶性只是几个示例,对此不做限制,如目标奇偶性还可以为绝对值为1的系数的个数的奇偶性,最后一个非零变换系数的奇偶性等。
[0265] 示例性的,目标特征可以为目标正负性,目标正负性可以包括但不限于:目标变换系数矩阵中的最后一个非零变换系数的正负性;或者,目标变换系数矩阵中的第一个非零变换系数的正负性;或者,目标变换系数矩阵中的第N个非零变换系数的正负性,N的取值可以根据实际需要任意配置,对此不做限制。当然,上述目标正负性只是几个示例,对此目标正负性不做限制,如目标正负性可以为目标变换系数矩阵中的所有变换系数的绝对值之和的正负性等。
[0266] 示例性的,目标奇偶性和目标正负性是目标特征的示例,对此目标特征不做限制。为了方便描述,后续以目标奇偶性为例进行说明,其它目标特征的处理方式类似。
[0267] 步骤556,根据目标特征和当前块的预设标志位的目标取值,确定是否对目标变换系数矩阵进行调整。示例性的,预设标志位的目标取值为第一取值时,用于指示对当前块进行二次变换,预设标志位的目标取值为第二取值时,用于指示对当前块不进行二次变换。
[0268] 示例性的,根据当前块对应的率失真代价值,确定是否对当前块进行二次变换值之后,若确定对当前块进行二次变换,则将预设标志位的目标取值设置为第一取值,以指示对当前块进行二次变换。若确定对当前块不进行二次变换,则将预设标志位的目标取值设置为第二取值,以指示对当前块不进行二次变换。
[0269] 例如,第一取值可以为1,第二取值可以为0;或者,第一取值可以为0,第二取值可以为1;当然,上述只是示例,对此第一取值和第二取值不做限制。
[0270] 在一种可能的实施方式中,编码端和解码端可以约定目标奇偶性与二次变换的关系,例如,目标奇偶性为奇数时,表示对当前块进行二次变换,目标奇偶性为偶数时,表示对当前块不进行二次变换,即约定“奇数”与进行二次变换,“偶数”与不进行二次变换的关系。
[0271] 在上述情况下,若目标奇偶性为奇数,且当前块的预设标志位的目标取值为第一取值,则确定对目标变换系数矩阵不进行调整,示例性的,若目标奇偶性为奇数,则表示对当前块进行二次变换,预设标志位的目标取值为第一取值,也表示对当前块进行二次变换,因此,对目标变换系数矩阵不进行调整。或者,若目标奇偶性为奇数,且当前块的预设标志位的目标取值为第二取值,则确定对目标变换系数矩阵进行调整,示例性的,若目标奇偶性为奇数,则表示对当前块进行二次变换,预设标志位的目标取值为第二取值,表示对当前块不进行二次变换,因此,对目标变换系数矩阵进行调整。或者,若目标奇偶性为偶数,且当前块的预设标志位的目标取值为第一取值,则确定对目标变换系数矩阵进行调整,示例性的,若目标奇偶性为偶数,则表示对当前块不进行二次变换,预设标志位的目标取值为第一取值,表示对当前块进行二次变换,因此,对目标变换系数矩阵进行调整。或者,若目标奇偶性为偶数,且当前块的预设标志位的目标取值为第二取值,则确定对目标变换系数矩阵不进行调整,示例性的,若目标奇偶性为偶数,则表示对当前块不进行二次变换,预设标志位的目标取值为第二取值,表示对当前块不进行二次变换,因此,对目标变换系数矩阵不进行调整。
[0272] 在另一种可能的实施方式中,编码端和解码端可以约定目标奇偶性与二次变换的关系,例如,目标奇偶性为偶数时,表示对当前块进行二次变换,目标奇偶性为奇数时,表示对当前块不进行二次变换,即约定“偶数”与进行二次变换,“奇数”与不进行二次变换的关系。
[0273] 在上述情况下,若目标奇偶性为偶数,且当前块的预设标志位的目标取值为第一取值,则确定对目标变换系数矩阵不进行调整,示例性的,若目标奇偶性为偶数,则表示对当前块进行二次变换,预设标志位的目标取值为第一取值,也表示对当前块进行二次变换,因此,对目标变换系数矩阵不进行调整。或者,若目标奇偶性为偶数,且当前块的预设标志位的目标取值为第二取值,则确定对目标变换系数矩阵进行调整,示例性的,若目标奇偶性为偶数,则表示对当前块进行二次变换,预设标志位的目标取值为第二取值,表示对当前块不进行二次变换,因此,对目标变换系数矩阵进行调整。或者,若目标奇偶性为奇数,且当前块的预设标志位的目标取值为第一取值,则确定对目标变换系数矩阵进行调整,示例性的,若目标奇偶性为奇数,则表示对当前块不进行二次变换,预设标志位的目标取值为第一取值,表示对当前块进行二次变换,因此,对目标变换系数矩阵进行调整。或者,若目标奇偶性为奇数,且当前块的预设标志位的目标取值为第二取值,则确定对目标变换系数矩阵不进行调整,示例性的,若目标奇偶性为奇数,则表示对当前块不进行二次变换,预设标志位的目标取值为第二取值,表示对当前块不进行二次变换,因此,对目标变换系数矩阵不进行调整。
[0274] 示例性的,若不对目标变换系数矩阵进行调整,则执行步骤557。
[0275] 示例性的,若对目标变换系数矩阵进行调整,则执行步骤558。
[0276] 步骤557,对目标变换系数矩阵进行编码,得到当前块的编码比特流。
[0277] 步骤558,对目标变换系数矩阵中的变换系数进行调整,以使调整后的目标变换系数矩阵的目标特征与预设标志位的目标取值相匹配。在对目标变换系数矩阵中的变换系数进行调整后,对调整后的目标变换系数矩阵进行编码,得到当前块的编码比特流。
[0278] 例如,若编码端和解码端约定“奇数”与进行二次变换,“偶数”与不进行二次变换的关系,且目标奇偶性为奇数,当前块的预设标志位的目标取值为第二取值,可以对目标变换系数矩阵中的某个奇数变换系数进行调整,使得该奇数变换系数变更为偶数,如对该奇数变换系数进行加1处理,或减1处理,变更后的变换系数为偶数,不是0。或者,对目标变换系数矩阵中的某个偶数变换系数进行调整,使得该偶数变换系数变更为奇数,如对该偶数变换系数进行加1处理,或减1处理,变更后的变换系数为奇数,不是0。
[0279] 经过上述处理,调整后的目标变换系数矩阵的目标奇偶性为偶数,“偶数”表示对当前块不进行二次变换,预设标志位的目标取值为第二取值,表示对当前块不进行二次变换,即调整后的目标变换系数矩阵的目标奇偶性与预设标志位的目标取值相匹配。
[0280] 又例如,若目标奇偶性为偶数,当前块的预设标志位的目标取值为第一取值,可以对目标变换系数矩阵中的某个奇数变换系数进行调整,使得该奇数变换系数变更为偶数,如对该奇数变换系数进行加1处理,或减1处理。或者,对目标变换系数矩阵中的某个偶数变换系数进行调整,使得该偶数变换系数变更为奇数,如对该偶数变换系数进行加1处理,或减1处理。经过上述处理,调整后的目标变换系数矩阵的目标奇偶性为奇数,“奇数”表示对当前块进行二次变换,预设标志位的目标取值为第一取值,表示对当前块进行二次变换,即调整后的目标变换系数矩阵的目标奇偶性与预设标志位的目标取值相匹配。
[0281] 又例如,若编码端和解码端约定“偶数”与进行二次变换,“奇数”与不进行二次变换的关系,则调整过程与上述调整方式类似,在此不再重复赘述。
[0282] 综上所述,若当前块使用(DCT2,DCT2)变换核进行初始变换,则在进行初始变换之后,还可以采用上述方式判断是否对当前块进行二次变换,若是,则对初始变换系数矩阵的左上角4*4的系数矩阵进行二次变换。若当前块使用(DST7,DST7)变换核进行初始变换,在进行初始变换后,确定对当前块不进行二次变换。经过上述处理,可得到经过变换的目标变换系数矩阵,目标变换系数矩阵经过熵编码过程变成编码比特流传到解码端。
[0283] 在一种可能的实施方式中,经过变换量化后的目标变换系数矩阵需要满足:sr_x和sr_y小于16,并且目标变换系数矩阵中所有非零变换系数的个数为奇数,用于表示当前块使用(DST7,DST7)变换核进行初始变换。或者,在另一种可能的实施方式中,经过变换量化后的目标变换系数矩阵需要满足:sr_x或sr_y大于等于16,或者,标变换系数矩阵中所有非零变换系数的个数为偶数,用于表示当前块使用(DCT2,DCT2)变换核进行初始变换。
[0284] 实施例10:基于与上述实施例8同样的申请构思,参见图5F所示,为本申请实施例中提出的另一种解码方法的流程示意图,该方法可以应用于解码端,该方法可以包括:
[0285] 步骤561,获取当前块的编码比特流,并从编码比特流中解析目标变换系数矩阵。
[0286] 步骤562,若当前块支持二次变换,当前块启用AST技术,且当前块满足第四预设条件,则从编码比特流中解析出指示信息,并根据该指示信息确定是否对当前块进行反二次变换。
[0287] 示例性的,第四预设条件的示例可以参见实施例6,在此不再重复赘述。
[0288] 示例性的,若当前块不支持二次变换,和/或,当前块不启用AST技术,则不采用本申请实施例的变换技术,对此过程的实现方式不做限制。若当前块支持二次变换,且当前块启用AST技术,则还可以执行如下步骤:判断当前块采用变换核对(DCT2,DCT2)进行初始反变换,还是采用变换核对(DST7,DST7)进行初始反变换。若当前块采用变换核对(DST7,DST7)进行初始反变换,则可以确定对当前块不进行反二次变换。若当前块采用变换核对(DCT2,DCT2)进行初始反变换,且当前块满足剩余第四预设条件的所有条件,还可以根据指示信息确定是否对当前块进行反二次变换。若当前块采用变换核对(DCT2,DCT2)进行初始反变换,且当前块不满足剩余第四预设条件的任意一个条件,则可以不采用本申请实施例的变换技术,对此情况的实现方式不做限制。
[0289] 示例性的,解码端确定当前块采用变换核对(DCT2,DCT2)或变换核对(DST7,DST7)进行初始反变换,可以采用如下方式:从编码比特流中解析sr_x和sr_y,当sr_x大于等于16或sr_y大于等于16时,确定当前块采用变换核对(DCT2,DCT2)进行初始反变换。当sr_x小于16且sr_y小于16时,确定目标变换系数矩阵中所有非零变换系数的个数的奇偶性。若该奇偶性为奇数,确定当前块采用变换核对(DST7,DST7)进行初始反变换,若该奇偶性为偶数,确定当前块采用变换核对(DCT2,DCT2)进行初始反变换。
[0290] 示例性的,在当前块支持二次变换,当前块启用AST技术,且当前块满足第四预设条件时,从编码比特流中解析出指示信息,若指示信息为第一指示信息,则确定对当前块进行反二次变换;第一指示信息用于指示对当前块进行二次变换。或者,若指示信息为第二指示信息,则确定对当前块不进行反二次变换;第二指示信息用于指示对当前块不进行二次变换。
[0291] 步骤563,如果对当前块进行反二次变换,则对目标变换系数矩阵进行反二次变换,得到当前块的初始变换系数矩阵。如果对当前块不进行反二次变换,则将目标变换系数矩阵确定为当前块的初始变换系数矩阵。至此,得到当前块的初始变换系数矩阵。
[0292] 步骤564,对该初始变换系数矩阵进行初始反变换,得到当前块对应的残差系数矩阵。
[0293] 步骤565,根据该残差系数矩阵确定当前块的重建值。
[0294] 示例性的,步骤563‑步骤565可以参见步骤443‑步骤445,在此不再重复赘述。
[0295] 实施例11:基于与上述实施例9同样的申请构思,参见图5G所示,为本申请实施例中提出的另一种解码方法的流程示意图,该方法可以应用于解码端,该方法可以包括以下步骤:
[0296] 步骤571,获取当前块的编码比特流,并从编码比特流中解析目标变换系数矩阵。
[0297] 步骤572,若当前块支持二次变换,当前块启用AST技术,且当前块满足第四预设条件,则根据目标变换系数矩阵中的变换系数,确定目标变换系数矩阵的目标特征。
[0298] 示例性的,第四预设条件可以参见上述实施例6,在此不再重复赘述。
[0299] 在一种可能的实施方式中,可以根据目标变换系数矩阵中的变换系数,确定目标变换系数矩阵的目标特征,该目标特征可以包括但不限于目标奇偶性或者目标正负性。当然,目标奇偶性和目标正负性是目标特征的两个示例,对此目标特征不做限制。目标奇偶性可以包括但不限于:目标变换系数矩阵中的所有奇数变换系数的个数的奇偶性;或者,目标变换系数矩阵中的所有偶数变换系数的个数的奇偶性;或者,目标变换系数矩阵中的所有变换系数的绝对值之和的奇偶性。当然,上述只是几个示例,对此不做限制,如目标奇偶性还可以为绝对值为1的系数的个数的奇偶性,最后一个非零变换系数的奇偶性等。目标正负性可以包括但不限于:目标变换系数矩阵中的最后一个非零变换系数的正负性;或者,目标变换系数矩阵中的第一个非零变换系数的正负性;或者,目标变换系数矩阵中的第N个非零变换系数的正负性,N的取值任意配置。当然,上述目标正负性只是几个示例,对此不做限制,如目标正负性可以为目标变换系数矩阵中的所有变换系数的绝对值之和的正负性等。
[0300] 为了方便描述,后续以目标奇偶性为例进行说明,其它目标特征的处理方式类似。
[0301] 步骤573,根据该目标特征确定当前块的预设标志位的目标取值。
[0302] 示例性的,该预设标志位的目标取值为第一取值时,用于指示对当前块进行反二次变换,该预设标志位的目标取值为第二取值时,用于指示对当前块不进行反二次变换。
[0303] 在一种可能的实施方式中,解码端和编码端可以约定目标奇偶性与反二次变换的关系,例如,目标奇偶性为奇数时,表示对当前块进行反二次变换,目标奇偶性为偶数时,表示对当前块不进行反二次变换,即约定“奇数”与进行反二次变换,“偶数”与不进行反二次变换的关系。若目标变换系数矩阵的目标奇偶性为奇数,则确定当前块的预设标志位的目标取值为第一取值。示例性的,若目标奇偶性为奇数,则表示对当前块进行反二次变换,预设标志位的目标取值为第一取值,也表示对当前块进行反二次变换,即目标奇偶性与目标取值匹配。若目标变换系数矩阵的目标奇偶性为偶数,则确定当前块的预设标志位的目标取值为第二取值。示例性的,若目标奇偶性为偶数,则表示对当前块不进行反二次变换,预设标志位的目标取值为第二取值,也表示对当前块不进行反二次变换,即目标奇偶性与目标取值匹配。
[0304] 在另一种可能的实施方式中,解码端和编码端可以约定目标奇偶性与反二次变换的关系,例如,目标奇偶性为偶数时,表示对当前块进行反二次变换,目标奇偶性为奇数时,表示对当前块不进行反二次变换,即约定“偶数”与进行反二次变换,“奇数”与不进行反二次变换的关系。若目标变换系数矩阵的目标奇偶性为偶数,则确定当前块的预设标志位的目标取值为第一取值。示例性的,若目标奇偶性为偶数,则表示对当前块进行反二次变换,预设标志位的目标取值为第一取值,也表示对当前块进行反二次变换,即目标奇偶性与目标取值匹配。若目标变换系数矩阵的目标奇偶性为奇数,则确定当前块的预设标志位的目标取值为第二取值。示例性的,若目标奇偶性为奇数,则表示对当前块不进行反二次变换,预设标志位的目标取值为第二取值,也表示对当前块不进行反二次变换,即目标奇偶性与目标取值匹配。
[0305] 步骤574,根据预设标志位的目标取值确定是否对当前块进行反二次变换。
[0306] 示例性的,若预设标志位的目标取值为第一取值,则可以确定对当前块进行反二次变换;若预设标志位的目标取值为第二取值,则可以确定对当前块不进行反二次变换。
[0307] 步骤575,如果对当前块进行反二次变换,则对目标变换系数矩阵进行反二次变换,得到当前块的初始变换系数矩阵。如果对当前块不进行反二次变换,则将目标变换系数矩阵确定为当前块的初始变换系数矩阵。至此,得到当前块的初始变换系数矩阵。
[0308] 步骤576,对该初始变换系数矩阵进行初始反变换,得到当前块对应的残差系数矩阵。
[0309] 步骤577,根据该残差系数矩阵确定当前块的重建值。
[0310] 示例性的,步骤575‑步骤577可以参见步骤443‑步骤445,在此不再重复赘述。
[0311] 综上所述,解码端可以根据目标变换系数矩阵中所有非零变换系数的个数的奇偶性,及sr_x和sr_y得到istTuflag。若istTuflag等于0,表示当前块使用变换核对(DCT2,DCT2)进行初始反变换,若istTuflag等于1,表示当前块使用变换核对(DST7,DST7)进行初始反变换。当istTuflag等于0,且当前块支持二次变换,当前块启用AST技术,且当前块满足第四预设条件,则根据目标变换系数矩阵的目标奇偶性确定是否对当前块进行反二次变换。
[0312] 若对当前块进行反二次变换,则在进行逆变换时,可以先对目标变换系数矩阵左上角4*4区域进行反二次变换,并更新左上角4*4的变换系数,得到初始变换系数矩阵,然后,可以再对初始变换系数矩阵进行初始反变换。若对当前块不进行反二次变换,则可以直接对目标变换系数矩阵(即目标变换系数矩阵作为初始变换系数矩阵)进行初始反变换。
[0313] 当istTuflag等于1时,则直接对目标变换系数矩阵进行初始反变换。
[0314] 然后,经过反变换后可以得到残差块,残差块与预测块相加可以得到重建块。
[0315] 在上述实施例中,在实施例1‑实施例4中,针对编码端来说,可以基于当前块的帧内预测模式,确定是否对当前块进行二次变换。针对解码端来说,可以基于当前块的帧内预测模式,确定是否对当前块进行反二次变换。在实施例5,实施例6,实施例8和实施例10中,针对编码端来说,可以通过RDO来确定是否对当前块进行二次变换,并显式编码指示信息(如secTuflag)来表示是否对当前块进行二次变换,例如,secTuflag的取值为第一取值时,表示对当前块进行二次变换,secTuflag的取值为第二取值时,表示对当前块不进行二次变换。针对解码端来说,在获取到编码比特流后,可以从编码比特流中解析出当前块的指示信息(如secTuflag),若secTuflag的取值为第一取值,则确定对当前块进行反二次变换,若secTuflag的取值为第二取值,则确定对当前块不进行反二次变换。在实施例5,实施例7,实施例9和实施例11中,针对编码端来说,可以通过RDO来确定是否对当前块进行二次变换,并通过目标变换系数矩阵的目标特征(如奇偶性等)来隐式表示是否对当前块进行二次变换,而不是通过指示信息来显式表示是否对当前块进行二次变换。针对解码端来说,获取到编码比特流后,从编码比特流中解析出目标变换系数矩阵,并根据目标变换系数矩阵的目标特征确定当前块的预设标志位的目标取值(如secTuflag),即推导出当前块的预设标志位的目标取值。若预设标志位的目标取值为第一取值,则确定对当前块进行反二次变换。若预设标志位的目标取值为第二取值,则确定对当前块不进行反二次变换。
[0316] 实施例12:针对上述实施例1‑实施例11中的任意实施例,二次变换过程可以为:针对4*4块和非4*4块使用不同的二次变换矩阵。从编码端来说,就是经过(DCT2,DCT2)变换后得到变换系数,然后对左上角的4*4的变换系数,再与二次变换矩阵相乘得到新的变换系数,然后再进行量化和熵编码。从解码端来说,对于从码流熵解码得到的变换系数经过反量化后,对于左上角的4*4区域先进行二次逆变换,得到新的变换系数,然后对整个变换块使用(DCT2,DCT2)进行逆变换,得到残差系数。二次变换具体解码端反变换过程如下:
[0317] 情况一、如果当前块的宽度或者高度的值大于4,且二次变换启用标志的值等于1(二次变换启用标志的值等于1,表示序列级或者帧级允许启用二次变换),则对系数矩阵执行以下操作:首先,由变换系数矩阵得到左上角4*4的系数矩阵C:cij=coeffij,i=0~3,j=0~3,在上述公式中,cij是矩阵C的元素,coeffij是变换系数矩阵的元素。
[0318] 示例性的,如果帧内预测模式的值为0~2,或13~32,或44~65,且当前块外部左6
边的参考样本“可用”,则:cij=Clip3(‑32768,32767,(pij+2)>>7),i=0~3,j=0~3。pij是4*4的矩阵P的元素,矩阵P的计算方式如下:P=C×S4,S4是4*4反变换矩阵,Clip3(‑
6 6
32768,32767,(pij+2)>>7)表示,若cij的值位于‑32768与32767之间,则cij的值为(pij+2)>>7,若cij的值小于‑32768,则cij的值为‑32768,若cij的值大于32767,则cij的值为32767。
[0319] 示例性的,如果帧内预测模式的值为0~23,或34~57,且当前块外部上边的参考6
样本“可用”,则:cij=Clip3(‑32768,32767,(qij+2)>>7),i=0~3,j=0~3。qij是4×4矩T T
阵Q的元素,矩阵Q的计算方式如下:Q=S4×C,S4是S4的转置矩阵,S4是4*4反变换矩阵。
[0320] 然后,根据矩阵C修改变换系数矩阵的元素的值:coeffij=cij,i=0~3,j=0~3。
[0321] 然后,对矩阵coeff进行初始反变换。
[0322] 情况二、如果当前块的宽度和高度的值均等于4,且二次变换启用标志的值等于1(二次变换启用标志的值等于1,表示序列级或者帧级允许启用二次变换),则对系数矩阵执行以下操作:首先,对变换系数矩阵进行如下垂直反变换,得到矩阵K:kij=Clip3(‑32768,4
32767,(vij+2)>>5),i=0~M1‑1,j=0~M2‑1,vij是矩阵V的元素,kij是矩阵K的元素。矩阵VT T
的计算如下:V=D4×CoeffMatrix,D4是反变换矩阵D4的转置矩阵,CoeffMatrix为变换系数。
[0323] 然后,对矩阵K进行如下水平反变换,得到矩阵H:hij=Clip3(‑MaxValue‑1,shift1‑1MaxValue,(wij+2 )>>shift1),i=0~M1‑1,j=0~M2‑1,wi,j是矩阵W的元素,hij是矩阵H的元素。MaxValue的值为(1<
[0324] 示例性的,对于4*4的块,进行完二次变换的逆变换后不需要再进行初始逆变换。
[0325] 实施例13:基于当前块的帧内预测模式,确定是否对当前块进行二次变换的过程,编码端的编码方法可以为:若当前块使用变换核对(DCT2,DCT2)进行初始变换,则经过变换量化后的变换系数需要满足:sr_x大于等于16或sr_y大于等于16,或者,目标变换系数矩阵中所有非零变换系数的个数的奇偶性为偶数,用于表示当前块使用(DCT2,DCT2)变换核进行初始变换。若当前块使用变换核对(DST7,DST7)进行初始变换,经过变换量化后的变换系数需要满足:sr_x和sr_y小于16,并且目标变换系数矩阵中所有非零变换系数的个数为奇数,用于表示当前块使用(DST7,DST7)变换核进行初始变换。
[0326] 在一种可能的实施方式中,若当前块使用变换核对(DCT2,DCT2)进行初始变换,在进行初始变换之后,且进行量化之前,还可以基于当前块的帧内预测模式,确定是否对当前块进行二次变换,具体过程参见实施例1和实施例3,在此不再赘述。若对当前块进行二次变换,则对初始变换系数矩阵(即初始变换后得到的变换系数矩阵)左上角4*4的变换系数矩阵进行二次变换,得到目标变换系数矩阵。若对当前块不进行二次变换,则将初始变换系数矩阵确定为目标变换系数矩阵。然后,根据目标变换系数矩阵进行编码,得到当前块的编码比特流。示例性的,基于当前块的帧内预测模式,确定是否对当前块进行二次变换时,若当前块支持二次变换,且当前块满足第一预设条件,确定对当前块不进行二次变换。
[0327] 解码端的解码方法可以为:解码端根据目标变换系数矩阵中所有非零变换系数的个数的奇偶性,及sr_x和sr_y得到istTuflag。若istTuflag等于0,表示当前块使用变换核对(DCT2,DCT2)进行初始反变换,若istTuflag等于1,表示当前块使用变换核对(DST7,DST7)进行初始反变换。当istTuflag等于1时,则直接对目标变换系数矩阵进行初始反变换。
[0328] 若istTuflag等于0,则解码端可以基于当前块的帧内预测模式,确定是否对当前块进行反二次变换,具体过程参见实施例2和实施例4,在此不再赘述。若对当前块进行反二次变换,则对目标变换系数矩阵左上角4*4的变换系数矩阵进行反二次变换,得到初始变换系数矩阵。若对当前块不进行反二次变换,则将目标变换系数矩阵确定为初始变换系数矩阵。然后,根据初始变换系数矩阵可以得到残差块,而残差块与预测块相加可以得到重建块。示例性的,解码端基于当前块的帧内预测模式,确定是否对当前块进行反二次变换,可以包括:若当前块支持二次变换,且当前块满足第三预设条件,确定对当前块不进行反二次变换。
[0329] 实施例14:通过RDO来确定是否对当前块进行二次变换,并显式编码指示信息(如secTuflag)来表示是否对当前块进行二次变换的过程,编码端的编码方法可以为:
[0330] 若当前块使用变换核对(DCT2,DCT2)进行初始变换,则经过变换量化后的变换系数需要满足:sr_x大于等于16或sr_y大于等于16,或者,目标变换系数矩阵中所有非零变换系数的个数的奇偶性为偶数,用于表示当前块使用(DCT2,DCT2)变换核进行初始变换。或者,若当前块使用变换核对(DST7,DST7)进行初始变换,经过变换量化后的变换系数需要满足:sr_x和sr_y小于16,并且目标变换系数矩阵中所有非零变换系数的个数为奇数,用于表示当前块使用(DST7,DST7)变换核进行初始变换。
[0331] 在一种可能的实施方式中,若当前块使用变换核对(DCT2,DCT2)进行初始变换,在进行初始变换之后,且进行量化之前,还可以执行以下操作:若当前块支持二次变换,当前块启用AST技术,且当前块满足第二预设条件,则根据当前块对应的率失真代价值,确定是否对当前块进行二次变换,即需要判断是否需要进行二次变换。
[0332] 示例性的,若对当前块进行二次变换,则对初始变换系数矩阵左上角4*4的变换系数矩阵进行二次变换,得到目标变换系数矩阵。若对当前块不进行二次变换,则将初始变换系数矩阵确定为目标变换系数矩阵。然后,可以根据目标变换系数矩阵进行编码,得到当前块的编码比特流。在当前块的编码比特流中,还可以携带指示信息(如secTuflag)。若对当前块进行二次变换,则secTuflag的取值为第一取值时,表示对当前块进行二次变换,若对当前块不进行二次变换,则secTuflag的取值为第二取值时,表示对当前块不进行二次变换。
[0333] 解码端的解码方法可以为:解码端根据目标变换系数矩阵中所有非零变换系数的个数的奇偶性,及sr_x和sr_y得到istTuflag。若istTuflag等于0,表示当前块使用变换核对(DCT2,DCT2)进行初始反变换,若istTuflag等于1,表示当前块使用变换核对(DST7,DST7)进行初始反变换。当istTuflag等于1时,则直接对目标变换系数矩阵进行初始反变换。
[0334] 若istTuflag等于0,在当前块支持二次变换,当前块启用AST技术,且当前块满足第四预设条件时,则解码端可以基于编码比特流中的指示信息(如secTuflag),确定是否对当前块进行反二次变换,例如,若secTuflag的取值为第一取值时,确定对当前块进行反二次变换,secTuflag的取值为第二取值时,确定对当前块不进行反二次变换。
[0335] 若对当前块进行反二次变换,则对目标变换系数矩阵进行反二次变换,得到初始变换系数矩阵。若对当前块不进行反二次变换,则将目标变换系数矩阵确定为初始变换系数矩阵。然后,根据初始变换系数矩阵可以得到残差块,而残差块与预测块相加可以得到重建块。
[0336] 实施例15:通过RDO来确定是否对当前块进行二次变换,并通过目标变换系数矩阵的目标特征(如目标奇偶性等)来隐式表示是否对当前块进行二次变换,而不是通过指示信息来显式表示是否对当前块进行二次变换的过程,编码端的编码方法可以为:
[0337] 若当前块使用变换核对(DCT2,DCT2)进行初始变换,则经过变换量化后的变换系数需要满足:sr_x大于等于16或sr_y大于等于16,或者,目标变换系数矩阵中所有非零变换系数的个数的奇偶性为偶数,用于表示当前块使用(DCT2,DCT2)变换核进行初始变换。或者,若当前块使用变换核对(DST7,DST7)进行初始变换,经过变换量化后的变换系数需要满足:sr_x和sr_y小于16,并且目标变换系数矩阵中所有非零变换系数的个数为奇数,用于表示当前块使用(DST7,DST7)变换核进行初始变换。
[0338] 在一种可能的实施方式中,若当前块使用变换核对(DCT2,DCT2)进行初始变换,在进行初始变换之后,且进行量化之前,还可以执行以下操作:若当前块支持二次变换,当前块启用AST技术,且当前块满足第二预设条件,则根据当前块对应的率失真代价值,确定是否对当前块进行二次变换。若对当前块进行二次变换,则对初始变换系数矩阵进行二次变换,得到目标变换系数矩阵。若对当前块不进行二次变换,则将初始变换系数矩阵确定为目标变换系数矩阵。然后,根据目标变换系数矩阵进行编码,得到当前块的编码比特流。
[0339] 在根据目标变换系数矩阵进行编码,得到当前块的编码比特流时,根据目标变换系数矩阵中的变换系数,确定目标变换系数矩阵的目标奇偶性。根据目标奇偶性和当前块的预设标志位的目标取值,确定是否对目标变换系数矩阵进行调整。若否,则对目标变换系数矩阵进行编码,得到当前块的编码比特流。若是,则对目标变换系数矩阵中的变换系数进行调整,以使调整后的目标变换系数矩阵的目标奇偶性与预设标志位的目标取值相匹配,并对调整后的目标变换系数矩阵进行编码,得到当前块的编码比特流。
[0340] 在本例子中,编码端不需要编码secTuflag,而是通过调整目标变换系数矩阵中的变换系数,从而根据目标变换系数矩阵的目标奇偶性来隐式表示是否对当前块进行二次变换。
[0341] 解码端的解码方法可以为:解码端根据目标变换系数矩阵中所有非零变换系数的个数的奇偶性,及sr_x和sr_y得到istTuflag。若istTuflag等于0,表示当前块使用变换核对(DCT2,DCT2)进行初始反变换,若istTuflag等于1,表示当前块使用变换核对(DST7,DST7)进行初始反变换。当istTuflag等于1时,则直接对目标变换系数矩阵进行初始反变换。
[0342] 若istTuflag等于0,在当前块支持二次变换,当前块启用AST技术,且当前块满足第四预设条件,则解码端可以基于目标变换系数矩阵的目标奇偶性,确定是否对当前块进行反二次变换,例如,基于目标变换系数矩阵的目标奇偶性确定预设标志位的目标取值,若预设标志位的目标取值(如secTuflag)为第一取值时,确定对当前块进行反二次变换,若预设标志位的目标取值为第二取值时,确定对当前块不进行反二次变换。
[0343] 若对当前块进行反二次变换,则对目标变换系数矩阵进行反二次变换,得到初始变换系数矩阵。若对当前块不进行反二次变换,则将目标变换系数矩阵确定为初始变换系数矩阵。然后,根据初始变换系数矩阵可以得到残差块,而残差块与预测块相加可以得到重建块。
[0344] 在一种可能的实施方式中,目标奇偶性可以为目标变换系数矩阵中的所有奇数变换系数的个数(如num_odd)的奇偶性。解码端根据目标变换系数矩阵中的所有奇数变换系数的个数的奇偶性来导出预设标志位的目标取值(secTuflag)。例如,当num_odd为奇数时,secTuflag=1(即第二取值),当num_odd为偶数时,secTuflag=0(即第一取值)。secTuflag等于0,表示对当前块进行反二次变换,secTuflag等于1,表示对当前块不进行反二次变换。
[0345] 在另一种可能的实施方式中,目标奇偶性可以为目标变换系数矩阵中的所有变换系数的绝对值之和(如sum_abs)的奇偶性,即基于目标变换系数矩阵中的所有变换系数的绝对值之和的奇偶性来隐式表达是否对当前块进行反二次变换。解码端根据目标变换系数矩阵中的所有变换系数的绝对值之和(如所有非零变换系数的绝对值之和)的奇偶性来导出预设标志位的目标取值(secTuflag)。例如,sum_abs为奇数时,secTuflag=1(即第二取值),sum_abs为偶数时,secTuflag=0(即第一取值)。secTuflag等于0,表示对当前块进行反二次变换,secTuflag等于1,表示对当前块不进行反二次变换。
[0346] 当然,上述两个方式只是示例,还可以采用其它类型的目标奇偶性,对此不做限制。
[0347] 当然,上述实施例1‑实施例15可以单独实现,也可以组合实现。例如,实施例1和实施例2可以组合实现,实施例3和实施例4可以组合实现,实施例5和实施例6可以组合实现,实施例5和实施例7可以组合实现,实施例8和实施例10可以组合实现,实施例9和实施例11可以组合实现。当然,上述只是几个示例,对此实施例之间的组合方式不做限制。
[0348] 基于与上述方法同样的申请构思,本申请实施例还提出一种编码装置,应用于编码端,如图6A所示,为所述装置的结构图,所述装置包括:
[0349] 获取模块611,用于获取当前块对应的残差系数矩阵;
[0350] 处理模块612,用于对所述残差系数矩阵进行初始变换,得到初始变换系数矩阵;
[0351] 确定模块613,用于若所述当前块支持二次变换,且所述当前块满足第一预设条件,确定对当前块不进行二次变换,并将所述初始变换系数矩阵确定为当前块的目标变换系数矩阵;
[0352] 其中,所述第一预设条件包括:所述当前块采用变换核对(离散余弦变换DCT2,DCT2)对所述残差系数矩阵进行初始变换,当前块的预测模式为帧内预测模式,且帧内预测的第一模式号区间包含当前块的帧内预测模式的模式号。
[0353] 示例性的,所述第一预设条件还包括:所述当前块为亮度块。
[0354] 示例性的,所述第一模式号区间包括:模式号34~模式号65。
[0355] 示例性的,所述确定模块613还用于:若所述当前块采用变换核对(DST7,DST7)对所述残差系数矩阵进行初始变换,则确定对所述当前块不进行二次变换。
[0356] 基于与上述方法同样的申请构思,本申请实施例还提出一种编码装置,应用于编码端,如图6B所示,为所述装置的结构图,所述装置包括:
[0357] 获取模块621,用于获取当前块对应的残差系数矩阵;
[0358] 处理模块622,用于对所述残差系数矩阵进行初始变换,得到初始变换系数矩阵;
[0359] 确定模块623,用于若当前块支持二次变换,当前块启用可选择的二次变换AST技术,且当前块满足第二预设条件,根据当前块对应的率失真代价值,确定是否对所述当前块进行二次变换;其中,所述第二预设条件包括:所述当前块为亮度块,所述当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数。
[0360] 示例性的,所述第二预设条件还包括以下条件中的其中一个或多个的组合:
[0361] 所述当前块不支持DT划分模式;
[0362] 当前块采用的帧内预测模式的模式号位于第二模式号区间,且当前块外部左边的参考样本可用;以及,当前块采用的帧内预测模式的模式号位于第三模式号区间,且当前块外部上边的参考样本可用中的一个;
[0363] 当前块的宽度尺寸和高度尺寸满足预设尺寸条件。
[0364] 示例性的,所述第二预设条件还包括以下条件中的其中一个或多个的组合:
[0365] 所述当前块支持DT划分模式;
[0366] 当前块采用的帧内预测模式的模式号位于第二模式号区间,且当前块外部左边的参考样本可用;以及,当前块采用的帧内预测模式的模式号位于第三模式号区间,且当前块外部上边的参考样本可用中的一个;
[0367] 当前块的宽度尺寸和高度尺寸满足预设尺寸条件。
[0368] 示例性的,当前块的宽度尺寸小于等于n1,当前块的高度尺寸小于等于n2。
[0369] 示例性的,n1=n2=32或者n1=n2=64。
[0370] 示例性的,所述第二模式号区间包括:模式号0~模式号2,模式号13~模式号32,模式号44~模式号65;所述第三模式号区间包括:模式号0~模式号23,模式号34~模式号57。
[0371] 所述确定模块623根据当前块对应的率失真代价值,确定是否对所述当前块进行二次变换时具体用于:确定对所述当前块只进行初始变换时的第一率失真代价值;
[0372] 确定对所述当前块先进行初始变换再进行二次变换时的第二率失真代价值;
[0373] 若第二率失真代价值小于第一率失真代价值,确定对所述当前块进行二次变换;
[0374] 若第二率失真代价值大于第一率失真代价值,确定对所述当前块不进行二次变换。
[0375] 所述处理模块622还用于:在确定是否对所述当前块进行二次变换之后,如果是,则对所述初始变换系数矩阵进行二次变换,得到目标变换系数矩阵;如果否,则将所述初始变换系数矩阵确定为目标变换系数矩阵;根据所述目标变换系数矩阵进行编码,得到所述当前块的编码比特流。
[0376] 所述处理模块622根据所述目标变换系数矩阵进行编码,得到所述当前块的编码比特流时具体用于:若确定对所述当前块进行二次变换,则在所述编码比特流中添加第一指示信息;其中,所述第一指示信息用于指示对所述当前块进行二次变换;
[0377] 若确定对所述当前块不进行二次变换,则在所述编码比特流中添加第二指示信息;其中,所述第二指示信息用于指示对所述当前块不进行二次变换。
[0378] 所述处理模块622根据所述目标变换系数矩阵进行编码,得到所述当前块的编码比特流时具体用于:根据所述目标变换系数矩阵中的变换系数,确定所述目标变换系数矩阵的目标特征;根据所述目标特征和所述当前块的预设标志位的目标取值,确定是否对所述目标变换系数矩阵进行调整;所述预设标志位的目标取值为第一取值时,用于指示对当前块进行二次变换,所述预设标志位的目标取值为第二取值时,用于指示对当前块不进行二次变换;如果不对所述目标变换系数矩阵进行调整,则对所述目标变换系数矩阵进行编码,得到所述当前块的编码比特流;如果对所述目标变换系数矩阵进行调整,则对所述目标变换系数矩阵中的变换系数进行调整,以使调整后的目标变换系数矩阵的目标特征与所述预设标志位的目标取值相匹配,并对调整后的目标变换系数矩阵进行编码,得到所述当前块的编码比特流。
[0379] 所述目标特征包括目标奇偶性,所述处理模块622根据所述目标特征和所述当前块的预设标志位的目标取值,确定是否对所述目标变换系数矩阵进行调整时具体用于:若所述目标奇偶性为奇数,且所述当前块的预设标志位的目标取值为第一取值,则确定对所述目标变换系数矩阵不进行调整;或者,若所述目标奇偶性为奇数,且所述当前块的预设标志位的目标取值为第二取值,则确定对所述目标变换系数矩阵进行调整;或者,若所述目标奇偶性为偶数,且所述当前块的预设标志位的目标取值为第一取值,则确定对所述目标变换系数矩阵进行调整;或者,若所述目标奇偶性为偶数,且所述当前块的预设标志位的目标取值为第二取值,则确定对所述目标变换系数矩阵不进行调整;其中,所述目标奇偶性为奇数时,用于指示对当前块进行二次变换;所述目标奇偶性为偶数时,用于指示对当前块不进行二次变换。
[0380] 所述目标特征包括目标奇偶性,所述处理模块622根据所述目标特征和所述当前块的预设标志位的目标取值,确定是否对所述目标变换系数矩阵进行调整时具体用于:若所述目标奇偶性为偶数,且所述当前块的预设标志位的目标取值为第一取值,则确定对所述目标变换系数矩阵不进行调整;或者,若所述目标奇偶性为偶数,且所述当前块的预设标志位的目标取值为第二取值,则确定对所述目标变换系数矩阵进行调整;或者,若所述目标奇偶性为奇数,且所述当前块的预设标志位的目标取值为第一取值,则确定对所述目标变换系数矩阵进行调整;或者,若所述目标奇偶性为奇数,且所述当前块的预设标志位的目标取值为第二取值,则确定对所述目标变换系数矩阵不进行调整;其中,所述目标奇偶性为偶数时,用于指示对当前块进行二次变换;所述目标奇偶性为奇数时,用于指示对当前块不进行二次变换。
[0381] 所述目标奇偶性,包括:所述目标变换系数矩阵中的所有奇数变换系数的个数的奇偶性;或者,所述目标变换系数矩阵中的所有偶数变换系数的个数的奇偶性;或者,所述目标变换系数矩阵中的所有变换系数的绝对值之和的奇偶性。
[0382] 所述第二预设条件还包括:所述当前块采用变换核对(DCT2,DCT2)进行初始变换。
[0383] 基于与上述方法同样的申请构思,本申请实施例还提出一种解码装置,应用于解码端,如图6C所示,为所述装置的结构图,所述装置包括:获取模块631,用于获取当前块的编码比特流,从所述编码比特流中解析目标变换系数矩阵;确定模块632,用于若所述当前块支持二次变换,且所述当前块满足第三预设条件,确定对所述当前块不进行反二次变换,并将所述目标变换系数矩阵确定为当前块的初始变换系数矩阵;若对所述当前块进行反二次变换,则对所述目标变换系数矩阵进行反二次变换,得到初始变换系数矩阵;处理模块633,用于对所述初始变换系数矩阵进行初始反变换,得到所述当前块对应的残差系数矩阵;根据所述残差系数矩阵确定所述当前块的重建值;其中,所述第三预设条件包括:所述当前块采用变换核对(离散余弦变换DCT2,DCT2)进行初始反变换,当前块的预测模式为帧内预测模式,且帧内预测的第一模式号区间包含当前块的帧内预测模式的模式号。
[0384] 示例性的,所述第三预设条件还包括:所述当前块为亮度块。
[0385] 示例性的,所述第一模式号区间包括:模式号34~模式号65。
[0386] 示例性的,所述确定模块632还用于:若所述当前块采用变换核对(离散正弦变换DST7,DST7)进行初始反变换,则确定对所述当前块不进行反二次变换。
[0387] 基于与上述方法同样的申请构思,本申请实施例还提出一种解码装置,应用于解码端,如图6D所示,为所述装置的结构图,所述装置包括:
[0388] 获取模块641,用于获取当前块的编码比特流;
[0389] 确定模块642,用于若当前块支持二次变换,当前块启用可选择的二次变换AST技术,且当前块满足第四预设条件,从所述编码比特流中解析出指示信息,根据所述指示信息确定是否对所述当前块进行反二次变换;其中,所述第四预设条件包括:所述当前块为亮度块,所述当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数。
[0390] 所述确定模块642根据所述指示信息确定是否对所述当前块进行反二次变换时具体用于:若所述指示信息为第一指示信息,则确定对所述当前块进行反二次变换;所述第一指示信息用于指示对所述当前块进行二次变换;若所述指示信息为第二指示信息,则确定对所述当前块不进行反二次变换;所述第二指示信息用于指示对所述当前块不进行二次变换。
[0391] 示例性的,所述装置还包括(在图中未示出):处理模块,用于在根据所述指示信息确定是否对所述当前块进行反二次变换之后,从所述编码比特流中解析目标变换系数矩阵;如果对所述当前块进行反二次变换,则对所述目标变换系数矩阵进行反二次变换,得到初始变换系数矩阵;如果对所述当前块不进行反二次变换,则将所述目标变换系数矩阵确定为初始变换系数矩阵;对所述初始变换系数矩阵进行初始反变换,得到所述当前块对应的残差系数矩阵;根据所述残差系数矩阵确定所述当前块的重建值。
[0392] 所述第四预设条件还包括:所述当前块采用变换核对(DCT2,DCT2)进行初始反变换。
[0393] 基于与上述方法同样的申请构思,本申请实施例还提出一种解码装置,应用于解码端,如图6E所示,为所述装置的结构图,所述装置包括:获取模块651,用于获取当前块的编码比特流,从所述编码比特流中解析目标变换系数矩阵;
[0394] 确定模块652,用于若当前块支持二次变换,所述当前块启用可选择的二次变换AST技术,且所述当前块满足第四预设条件,则根据所述目标变换系数矩阵中的变换系数,确定所述目标变换系数矩阵的目标特征;根据所述目标特征确定所述当前块的预设标志位的目标取值;其中,所述预设标志位的目标取值为第一取值时,用于指示对所述当前块进行反二次变换,所述预设标志位的目标取值为第二取值时,用于指示对所述当前块不进行反二次变换;以及,根据所述预设标志位的目标取值确定是否对所述当前块进行反二次变换;
[0395] 其中,所述第四预设条件包括:所述当前块为亮度块,所述当前块的预测模式为帧内预测模式,且所述当前块的初始变换系数矩阵中含有非零变换系数。
[0396] 所述第四预设条件还包括以下条件中的其中一个或多个的组合:
[0397] 所述当前块不支持DT划分模式;
[0398] 当前块采用的帧内预测模式的模式号位于第二模式号区间,且当前块外部左边的参考样本可用;以及,当前块采用的帧内预测模式的模式号位于第三模式号区间,且当前块外部上边的参考样本可用中的一个;
[0399] 当前块的宽度尺寸和高度尺寸满足预设尺寸条件。
[0400] 所述第四预设条件还包括以下条件中的其中一个或多个的组合:
[0401] 所述当前块支持DT划分模式;
[0402] 当前块采用的帧内预测模式的模式号位于第二模式号区间,且当前块外部左边的参考样本可用;以及,当前块采用的帧内预测模式的模式号位于第三模式号区间,且当前块外部上边的参考样本可用中的一个;
[0403] 当前块的宽度尺寸和高度尺寸满足预设尺寸条件。
[0404] 示例性的,当前块的宽度尺寸小于等于n1,当前块的高度尺寸小于等于n2。
[0405] 示例性的,n1=n2=32或者n1=n2=64。
[0406] 示例性的,所述第二模式号区间包括:模式号0~模式号2,模式号13~模式号32,模式号44~模式号65;所述第三模式号区间包括:模式号0~模式号23,模式号34~模式号57。
[0407] 所述目标特征包括目标奇偶性,所述确定模块652根据所述目标特征确定所述当前块的预设标志位的目标取值时具体用于:若所述目标奇偶性为奇数,确定所述预设标志位的目标取值为第一取值;若所述目标奇偶性为偶数,确定所述预设标志位的目标取值为第二取值;
[0408] 所述确定模块652根据所述预设标志位的目标取值确定是否对所述当前块进行反二次变换时具体用于:若所述预设标志位的目标取值为第一取值,则确定对所述当前块进行反二次变换;若所述预设标志位的目标取值为第二取值,则确定对所述当前块不进行反二次变换。
[0409] 所述目标特征包括目标奇偶性,所述确定模块652根据所述目标特征确定所述当前块的预设标志位的目标取值时具体用于:若所述目标奇偶性为偶数,确定所述预设标志位的目标取值为第一取值;若所述目标奇偶性为奇数,确定所述预设标志位的目标取值为第二取值;
[0410] 所述确定模块652根据所述预设标志位的目标取值确定是否对所述当前块进行反二次变换时具体用于:若所述预设标志位的目标取值为第一取值,则确定对所述当前块进行反二次变换;若所述预设标志位的目标取值为第二取值,则确定对所述当前块不进行反二次变换。
[0411] 所述目标奇偶性,包括:所述目标变换系数矩阵中的所有奇数变换系数的个数的奇偶性;或者,所述目标变换系数矩阵中的所有偶数变换系数的个数的奇偶性;或者,所述目标变换系数矩阵中的所有变换系数的绝对值之和的奇偶性。
[0412] 示例性的,所述装置还包括(在图中未示出):处理模块,用于在根据所述预设标志位的目标取值确定是否对所述当前块进行反二次变换之后,如果是,则对所述目标变换系数矩阵进行反二次变换,得到初始变换系数矩阵;如果否,则将所述目标变换系数矩阵确定为初始变换系数矩阵;对所述初始变换系数矩阵进行初始反变换,得到所述当前块对应的残差系数矩阵;根据所述残差系数矩阵确定所述当前块的重建值。
[0413] 所述第四预设条件还包括:所述当前块采用变换核对(DCT2,DCT2)进行初始反变换。
[0414] 本申请实施例提供的编码端设备(示例性的,编码端设备可以是视频编码器),从硬件层面而言,其硬件架构示意图具体可以参见图7A所示。包括:处理器711和机器可读存储介质712,所述机器可读存储介质712存储有能够被所述处理器711执行的机器可执行指令;所述处理器711用于执行机器可执行指令,以实现本申请上述示例公开的方法。例如,处理器用于执行机器可执行指令,以实现如下步骤:
[0415] 获取当前块对应的残差系数矩阵;
[0416] 对所述残差系数矩阵进行初始变换,得到初始变换系数矩阵;
[0417] 若所述当前块支持二次变换,且所述当前块满足第一预设条件,确定对当前块不进行二次变换,并将所述初始变换系数矩阵确定为当前块的目标变换系数矩阵;其中,所述第一预设条件包括:所述当前块采用变换核对(离散余弦变换DCT2,DCT2)对所述残差系数矩阵进行初始变换,当前块的预测模式为帧内预测模式,且帧内预测的第一模式号区间包含当前块的帧内预测模式的模式号;
[0418] 或者,
[0419] 获取当前块对应的残差系数矩阵;
[0420] 对所述残差系数矩阵进行初始变换,得到初始变换系数矩阵;
[0421] 若当前块支持二次变换,当前块启用可选择的二次变换AST技术,且当前块满足第二预设条件,根据当前块对应的率失真代价值,确定是否对所述当前块进行二次变换;
[0422] 其中,所述第二预设条件包括:所述当前块为亮度块,所述当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数。
[0423] 本申请实施例提供的解码端设备(示例性的,解码端设备可以是视频解码器),从硬件层面而言,其硬件架构示意图具体可以参见图7B所示。包括:处理器721和机器可读存储介质722,所述机器可读存储介质722存储有能够被所述处理器721执行的机器可执行指令;所述处理器721用于执行机器可执行指令,以实现本申请上述示例公开的方法。例如,处理器用于执行机器可执行指令,以实现如下步骤:
[0424] 获取当前块的编码比特流,从所述编码比特流中解析目标变换系数矩阵;
[0425] 若所述当前块支持二次变换,且所述当前块满足第三预设条件,确定对所述当前块不进行反二次变换,并将所述目标变换系数矩阵确定为当前块的初始变换系数矩阵;若对所述当前块进行反二次变换,则对所述目标变换系数矩阵进行反二次变换,得到初始变换系数矩阵;
[0426] 对所述初始变换系数矩阵进行初始反变换,得到所述当前块对应的残差系数矩阵;
[0427] 根据所述残差系数矩阵确定所述当前块的重建值;
[0428] 其中,所述第三预设条件包括:所述当前块采用变换核对(离散余弦变换DCT2,DCT2)进行初始反变换,当前块的预测模式为帧内预测模式,且帧内预测的第一模式号区间包含当前块的帧内预测模式的模式号;
[0429] 或者,
[0430] 获取当前块的编码比特流;
[0431] 若当前块支持二次变换,当前块启用可选择的二次变换AST技术,且当前块满足第四预设条件,从所述编码比特流中解析出指示信息,根据所述指示信息确定是否对所述当前块进行反二次变换;其中,所述第四预设条件包括:所述当前块为亮度块,所述当前块的预测模式为帧内预测模式,且当前块的初始变换系数矩阵中含有非零变换系数;
[0432] 或者,
[0433] 获取当前块的编码比特流,从所述编码比特流中解析目标变换系数矩阵;
[0434] 若当前块支持二次变换,所述当前块启用可选择的二次变换AST技术,且所述当前块满足第四预设条件,则根据所述目标变换系数矩阵中的变换系数,确定所述目标变换系数矩阵的目标特征;根据所述目标特征确定所述当前块的预设标志位的目标取值;其中,所述预设标志位的目标取值为第一取值时,用于指示对所述当前块进行反二次变换,所述预设标志位的目标取值为第二取值时,用于指示对所述当前块不进行反二次变换;
[0435] 根据所述预设标志位的目标取值确定是否对所述当前块进行反二次变换;
[0436] 其中,所述第四预设条件包括:所述当前块为亮度块,所述当前块的预测模式为帧内预测模式,且所述当前块的初始变换系数矩阵中含有非零变换系数。
[0437] 基于与上述方法同样的申请构思,本申请实施例中还提供一种摄像机设备,该摄像机设备可以包括上述任一实施例中的编码装置和/或解码装置。
[0438] 基于与上述方法同样的申请构思,本申请实施例还提供一种机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述计算机指令被处理器执行时,能够实现本申请上述示例公开的编解码方法。其中,上述机器可读存储介质可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:RAM(Radom Access Memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
[0439] 上述实施例阐明的系统、装置、模块或单元,可以由计算机芯片或实体实现,或由具有某种功能的产品来实现。一种典型的实现为计算机,计算机的形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
[0440] 为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
[0441] 本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD‑ROM、光学存储器等)上实施的计算机程序产品形式。
[0442] 本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。而且,这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。
[0443] 这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。