掌桥专利:专业的专利平台
掌桥专利
首页

使用二次变换的视频信号处理方法及装置

文献发布时间:2023-06-19 19:28:50


使用二次变换的视频信号处理方法及装置

本申请是2020年11月4日提交进入中国专利局的国际申请日为2020年6月25日的申请号为202080002631.0(PCT/KR2020/008301)的,发明名称为“使用二次变换的视频信号处理方法及装置”的专利申请的分案申请。

技术领域

本发明涉及视频信号处理方法和装置,并且更具体地,涉及用于对视频信号进行编码或解码的视频信号处理方法和装置。

背景技术

压缩编译指代用于通过通信线路发送数字化信息或以适合于存储介质的形式存储信息的一系列信号处理技术。压缩编码的对象包括诸如语音、视频和文本的对象,并且特别地,用于对图像执行压缩编码的技术被称为视频压缩。考虑到空间相关性、时间相关性和随机相关性,通过去除过多的信息来执行对视频信号的压缩编译。然而,随着各种媒体和数据传输媒体的最新发展,需要更有效的视频信号处理方法和装置。

发明内容

技术问题

本发明的目的是为了提高视频信号的编译效率。

本发明具有通过二次变换来增加编译效率的目的。

技术方案

本说明书提供了使用二次变换的视频信号处理方法。

具体地,一种视频信号解码装置,包括处理器,其中,该处理器被配置成:当满足一个或多个预设条件时,从视频信号的比特流中解析与编译单元的二次变换有关的语法元素;基于解析的语法元素,检查是否二次变换被应用于编译单元中包括的变换块;当二次变换被应用于变换块时,通过基于作为构成变换块的一个或多个子块之一的第一子块的一个或多个系数执行逆二次变换来获得用于第一子块的一个或多个逆变换系数;以及通过基于一个或多个逆变换系数执行逆初次变换来获得用于变换块的残差样本。二次变换是低频不可分离变换(LFNST),变换块是对其应用可分离成垂直变换和水平变换的初次变换的块,并且一个或多个预设条件的第一条件是指示第一子块的一个或多个系数当中的第一系数的位置的索引值大于预设阈值。

此外,根据本说明书,语法元素包括指示是否二次变换被应用于编译单元的信息和指示用于二次变换的变换核的信息。

此外,根据本说明书,第一系数是根据预设扫描顺序的最后有效系数,并且有效系数是非零系数。

此外,根据本说明书,第一子块是根据预设扫描顺序的第一个子块。

此外,根据本说明书,一个或多个预设条件的第二条件是变换块的宽度和高度是4个像素或更多。

此外,根据本说明书,预设阈值是0。

此外,根据本说明书,预设扫描顺序是右上对角扫描顺序。

此外,根据本说明书,一个或多个预设条件中的第三条件是比特流中包括的变换跳过标记的值不是特定值,并且变换跳过标记指示当变换跳过标记的值具有特定值时初次变换和二次变换未被应用于变换块。

此外,根据本说明书,一个或多个预设条件的第四条件是第一子块的一个或多个系数中的至少一个系数不为0,并且至少一个系数存在于除了根据预设的扫描顺序的第一位置以外的地方。

此外,根据本说明书,编译单元由多个编译块组成,并且当对应于多个编译块中的每一个的变换块的至少一个变换块满足一个或多个预设条件时,解析与二次变换有关的语法元素。

此外,根据本说明书,一种视频信号编码装置,包括处理器,其中,处理器被配置成:通过对包括在编译单元的块的残差样本执行初次变换来获得用于块的多个初次变换系数;通过基于多个初次变换系数中的一个或多个执行二次变换,获得用于作为构成该块的子块之一的第一子块的一个或多个二次变换系数;并且通过对用于一个或多个二次变换系数的信息和与编译单元的二次变换有关的语法元素进行编码,获得比特流。二次变换是低频不可分离变换(LFNST),初次变换可分离成垂直变换和水平变换,当满足一个或多个预设条件时,与编译单元的二次变换有关的语法元素被编码,并且一个或多个预设条件的第一条件是指示一个或多个二次变换系数中的第一系数的位置的索引值大于预设阈值。

此外,根据本说明书,语法元素包括指示是否二次变换被应用于编译单元的信息和指示用于二次变换的变换核的信息。

此外,根据本说明书,第一系数是根据预设扫描顺序的最后有效系数,并且有效系数是非零系数。

此外,根据本说明书,第一子块是根据预设扫描顺序的第一个子块。

此外,根据本说明书,一个或多个预设条件的第二条件是初次变换块的宽度和高度为4个像素或更多。

此外,根据本说明书,预设阈值是0。

此外,根据本说明书,预设扫描顺序是右上对角扫描顺序。

此外,根据本说明书,一个或多个预设条件的第三条件是比特流中包括的变换跳过标记的值不是特定值,并且变换跳过标记指示当变换跳过标记值具有特定值时,初次变换和二次变换不被应用于块。

此外,根据本说明书,一个或多个预设条件的第四条件是一个或多个二次变换系数中的至少一个系数不为0,并且至少一个系数存在于除了根据预设的扫描顺序的第一位置之外的地方。

此外,根据本说明书,非暂时性计算机可读介质存储比特流。通过一种编码方法对该比特流进行编码,该编码方法包括:通过对包括在编译单元中的块的残差样本执行初次变换来获得用于块的多个初次变换系数;通过基于多个初次变换系数中的一个或多个执行二次变换,获得用于作为构成该块的子块之一的第一子块的一个或多个二次变换系数;以及对用于一个或多个二次变换系数的信息以及与编译单元的二次变换有关的语法元素进行编码。二次变换是低频不可分离变换(LFNST),初次变换可分离成垂直变换和水平变换,当满足一个或多个预设条件时,与二次变换有关的语法元素被编码,并且一个或多个预设条件的第一条件是指示一个或多个二次变换系数中的第一系数的位置的索引值大于预设阈值。

有益效果

本发明的实施例提供一种使用二次变换的视频信号处理方法及其装置。

附图说明

图1是根据本发明的实施例的视频信号编码装置的示意性框图。

图2是根据本发明的实施例的视频信号解码装置的示意性框图。

图3示出其中在图片中编译树单元被划分为编译单元的实施例。

图4示出用于用信号发送四叉树和多类型树的划分的方法的实施例。

图5和图6更具体地图示根据本发明的实施例的帧内预测方法。

图7是具体地图示用于通过编码器变换残差信号的方法的图。

图8是具体地图示用于通过编码器和解码器对变换系数进行逆变换来获取残差信号的方法的图。

图9是图示可以在初次变换中使用的多个变换核的基函数的图。

图10是图示根据本发明的实施例的在执行二次变换的解码单元中重构残差信号的过程的框图。

图11是以块级别图示根据本发明的实施例的在执行二次变换的解码单元中重构残差信号的过程的图。

图12是图示根据本发明的实施例的用于使用减少数量的样本来应用二次变换的方法的图。

图13是图示根据本发明的实施例的用于确定右上对角扫描顺序的方法的图。

图14是根据块大小图示根据本发明实施例的右上对角扫描顺序的图。

图15是图示用于在编译单元级别处指示二次变换的方法的图。

图16是图示根据本发明的实施例的residual_coding语法结构的图。

图17是图示根据本发明的实施例的用于在编译单元级别处指示二次变换的方法的图。

图18是图示根据本发明的实施例的用于在编译单元级别处指示二次变换的方法的图。

图19是图示根据本发明的实施例的residual_coding语法结构的图。

图20是图示根据本发明的另一实施例的residual_coding语法结构的图。

图21是图示根据本发明的另一实施例的用于在编译单元级别处指示二次变换的方法的图。

图22是图示根据本发明的另一实施例的residual_coding语法结构的图。

图23是图示根据本发明的实施例的用于在变换单元级别处指示二次变换的方法的图。

图24是图示根据本发明的另一实施例的用于在变换单元级别处指示二次变换的方法的图。

图25是图示根据本发明的实施例的编译单元语法的图。

图26是图示根据本发明的另一实施例的用于在变换单元级别处指示二次变换的方法的图。

图27图示根据本发明的实施例的与扫描顺序中的最后有效系数的位置有关的语法结构。

图28是图示根据本发明的另一实施例的residual_coding语法结构的图。

图29是示出根据本发明的实施例的视频信号处理方法的流程图。

具体实施方式

考虑到本发明中的功能,本说明书中使用的术语可以是当前广泛使用的通用术语,但是可以根据本领域的技术人员的意图、习俗或新技术的出现而改变。另外,在某些情况下,可能存在申请人任意选择的术语,并且在这种情况下,其含义在本发明的相应描述部分中进行了描述。因此,应基于整个说明书中的术语和内容的实质含义来解释本说明书中使用的术语。

在本说明书中,一些术语可以解释如下。在一些情况下,编译可以解释为编码或解码。在本说明书中,通过执行视频信号的编码(编译)来生成视频信号比特流的装置被称为编码装置或编码器,并且执行视频信号比特流的解码(解码)以重构视频信号的装置被称为解码装置或解码器。另外,在本说明书中,视频信号处理装置被用作包括编码器和解码器两者的概念的术语。信息是包括所有值、参数、系数、元素等的术语。在一些情况下,含义被不同地解释,因此本发明不限于此。“单元”被用作指代图像处理的基本单位或图片的特定位置的含义,并且指代包括亮度分量和色度分量中的至少一个的图像区域。另外,“块”指代包括亮度分量和色度分量(即,Cb和Cr)当中的特定分量的图像区域。然而,取决于实施例,诸如“单元”、“块”、“分区(partition)”和“区域”的术语可以互换使用。另外,在本说明书中,单元可以用作包括编译单元、预测单元和变换单元的全部的概念。图片指示场或帧,并且根据实施例,这些术语可以互换使用。

图1是根据本发明的实施例的视频信号编码装置100的示意性框图。参考图1,本发明的编码装置100包括变换单元110、量化单元115、逆量化单元120、逆变换单元125、滤波单元130、预测单元150和熵编译单元160。

变换单元110通过对残差信号进行变换来获得变换系数的值,该残差信号是输入的视频信号与由预测单元150生成的预测信号之间的差。例如,可以使用离散余弦变换(DCT)、离散正弦变换(DST)或小波变换。DCT和DST通过将输入图片信号分割成多个块来执行变换。在变换中,编译效率可以根据变换区域中的值的分布和特性而变化。量化单元115对从变换单元110输出的变换系数值的值进行量化。

为了改进编译效率,代替照原样对图片信号进行编译的方法,使用一种方法,其使用通过预测单元150已经编译的区域来预测图片,并通过将在原始图片和预测的图片之间的残差值添加到预测的图片来获得重构图片。为了防止编码器和解码器中的不匹配,当在编码器中执行预测时,应该使用可以在解码器中使用的信息。为此,编码器再次执行重构编码的当前块的处理。逆量化单元120对变换系数的值进行逆量化,并且逆变换单元125使用逆量化的变换系数值来重构残差值。同时,滤波单元130执行滤波操作以改善重构图片的质量并改善编译效率。例如,可以包括去块滤波器、样本自适应偏移(SAO)和自适应环路滤波器。滤波后的图片被输出或存储在解码图片缓冲器(DPB)156中,以用作参考图片。

为了增加编译效率,代替照原样对图片信号进行编译,使用用于获取重构图片的方法,其中,使用已经通过预测单元150被编译的区域来预测图片,并且将原始图片和预测图片之间的残差值添加到预测图片。帧内预测单元152在当前图片内执行帧内预测,并且帧间预测单元154通过使用存储在解码图片缓冲器156中的参考图片来预测当前图片。帧内预测单元152从当前图片中的重构区域执行帧内预测,并将帧内编码信息发送到熵编译单元160。再次,帧间预测单元154可以包括运动估计单元154a和运动补偿单元154b。运动估计单元154a通过参考重构的特定区域来获得当前区域的运动矢量值。运动估计单元154a可以将参考区域的位置信息(参考帧、运动矢量等)发送到熵编译单元160以被包括在比特流中。运动补偿单元154b使用从运动估计单元154a发送的运动矢量值执行帧间运动补偿。

预测单元150包括帧内预测单元152和帧间预测单元154。帧内预测单元152在当前图片中执行帧内预测,并且帧间预测单元154执行帧间预测以通过使用存储在DPB 156中的参考图片来预测当前图片。帧内预测单元152根据当前图片中的重构样本执行帧内预测,并将帧内编译信息发送到熵编译单元160。帧内编码信息可以包括帧内预测模式、最可能模式(MPM)标记和MPM索引中的至少一种。帧内编码信息可以包括关于参考样本的信息。帧间预测单元154可以包括运动估计单元154a和运动补偿单元154b。运动估计单元154a参考重构的参考图片的特定区域以获得当前区域的运动矢量值。运动估计单元154a将关于参考区域的运动信息集(参考图片索引、运动矢量信息等)发送到熵编译单元160。运动补偿单元154b使用从运动估计单元154a发送的运动矢量值来执行运动补偿。帧间预测单元154将包括关于参考区域的运动信息集的帧间编码信息发送到熵编译单元160。

根据另一实施例,预测单元150可以包括帧内块复制(BC)预测单元(未图示)。帧内BC预测单元从当前图片中的重构样本执行帧内BC预测,并将帧内BC编码信息发送到熵编译单元160。帧内BC预测单元参考当前图片中的特定区域并获得块矢量值,其指示将被用于当前区域的预测的参考区域。帧内BC预测单元可以使用所获得的块矢量值来执行帧内BC预测。帧内BC预测单元将帧内BC编码信息发送到熵编译单元160。帧内BC编码信息可以包括块矢量信息。

当执行上述图片预测时,变换单元110变换在原始图片和预测图片之间的残差值以获得变换系数值。在这种情况下,可以以图片内的特定块为单位执行变换,并且可以在预设范围内改变特定块的大小。量化单元115对在变换单元110中生成的变换系数值进行量化,并将其发送到熵编译单元160。

熵编译单元160对量化的变换系数信息、帧内编译信息和帧间编译信息进行熵编译以生成视频信号比特流。在熵编译单元160中,可以使用可变长度编译(VLC)方法、算术编译方法等。VLC方法将输入的符号变换成连续的码字,并且码字的长度可以是可变的。例如,频繁出现的符号被表达为短码字,而不太频繁出现的符号被表达为长码字。作为VLC方法,可以使用基于上下文的自适应可变长度编译(CAVLC)方法。算术编译将连续的数据符号变换成单个小数,并且算术编译可以获得表示每个符号所需的最佳小数位数。作为算术编译,可以使用基于上下文的自适应算术编译(CABAC)。例如,熵编译单元160可以对表示量化的变换系数的信息进行二值化。另外,熵编译单元160可以通过对二进制信息进行算术编译来生成比特流。

使用网络抽象层(NAL)单元作为基本单位来封装所生成的比特流。NAL单元包括整数个编译的编译树单元。为了在视频解码器中对比特流进行解码,首先,必须将比特流分离成NAL单元,并且然后必须对每个分离的NAL单元进行解码。同时,可以通过诸如图片参数集(PPS)、序列参数集(SPS)、视频参数集(VPS)等等的高层集合的原始字节序列有效载荷(RBSP)来发送对视频信号比特流进行解码所需的信息。

同时,图1的框图示出根据本发明的实施例的编码装置100,并且分开显示的块在逻辑上区分并示出编码装置100的元件。因此,取决于设备的设计上述编码装置100的元件可以被安装为一个芯片或多个芯片。根据实施例,上述编码装置100的每个元件的操作可以由处理器(未示出)执行。

图2是根据本发明的实施例的视频信号解码装置200的示意性框图。参考图2,本发明的解码装置200包括熵解码单元210、逆量化单元220、逆变换单元225、滤波单元230和预测单元250。

熵解码单元210对视频信号比特流进行熵解码,并提取每个区域的变换系数信息、帧内编码信息和帧间编码信息。例如,熵解码单元210可以从视频信号比特流获得用于特定区域的变换系数信息的二进制代码。另外,熵解码单元210通过对二值化的代码进行逆二值化来获得量化的变换系数。逆量化单元220对量化的变换系数进行逆量化,并且逆变换单元225通过使用逆量化的变换系数来重构残差值。视频信号处理装置200通过将在逆变换单元225中获得的残差值与在预测单元250中获得的预测值相加来重构原始像素值。

同时,滤波单元230对图片执行滤波以改善图像质量。这可以包括用于减少块失真的去块滤波器和/或用于去除整个图片的失真的自适应环路滤波器。滤波后的图片被输出或存储在DPB 256中,以用作下一个图片的参考图片。

预测单元250包括帧内预测单元252和帧间预测单元254。预测单元250通过使用通过上述熵解码单元210解码的编码类型、每个区域的变换系数和帧内/帧间编码信息来生成预测图片。为了重构其中执行解码的当前块,可以使用当前图片或包括当前块的其他图片的解码区域。仅将当前图片用于重构(即,执行帧内预测或帧内BC预测)的图片(或图块/切片)称为帧内图片或I图片(或图块/切片),并且执行所有帧内预测、帧间预测以及帧内BC预测的图片(或图块/切片)被称为帧间图片(或图块/切片)。为了预测帧间图片(或图块/切片)当中的每个块的样本值,使用最多一个运动矢量和参考图片索引的图片(或者图块/切片)被称为预测图片或P图片(或图块/切片),并且使用最多两个运动矢量和参考图片索引的图片(或图块/切片)称为双向预测图片或B图片(或图块/切片)。换句话说,P图片(或图块/切片)使用最多一个运动信息集来预测每个块,并且B图片(或图块/切片)使用最多两个运动信息集来预测每个块。这里,运动信息集包括一个或多个运动矢量和一个参考图片索引。

帧内预测单元252使用帧内编码信息和当前图片中的恢复的样本来生成预测块。如上所述,帧内编码信息可以包括帧内预测模式、最可能模式(MPM)标记和MPM索引中的至少一种。帧内预测单元252通过使用位于当前块的左侧和/或上侧的恢复的样本作为参考样本来预测当前块的样本值。在本公开中,恢复的样本、参考样本和当前块的样本可以表示像素。而且,样本值可以表示像素值。

根据实施例,参考样本可以是当前块的邻近块中包括的样本。例如,参考样本可以是与当前块的左边界相邻的样本和/或与上边界相邻的样本。另外,参考样本可以是在当前块的邻近块的样本当中的在距当前块的左边界预定距离内的线上的样本和/或位于距当前块的上边界预定距离内的线上的样本。在这种情况下,当前块的邻近块可以包括左(L)块、上(A)块、左下(BL)块、右上(AR)块或左上(AL)块。

帧间预测单元254使用参考图片和存储在DPB 256中的帧间编码信息来生成预测块。帧间编译信息可以包括用于参考块的当前块的运动信息集(参考图片索引、运动矢量信息等)。帧间预测可以包括L0预测、L1预测和双向预测。L0预测意指使用L0图片列表中包括的一个参考图片进行预测,并且L1预测意指使用L1图片列表中包括的一个参考图片进行预测。为此,可能需要一个集合的运动信息(例如,运动矢量和参考图片索引)。在双向预测方法中,可以使用多达两个参考区域,并且两个参考区域可以存在于同一参考图片中或可以存在于不同图片中。即,在双向预测方法中,可以使用多达两个集合的运动信息(例如,运动矢量和参考图片索引),并且两个运动矢量可以对应于相同的参考图片索引或不同的参考图片索引。在这种情况下,参考图片可以在时间方面在当前图片之前和之后显示(或输出)。根据实施例,在双向预测方案中使用的两个参考区域可以是从L0图片列表和L1图片列表中的每一个中选择的区域。

帧间预测单元254可以使用运动矢量和参考图片索引来获得当前块的参考块。参考块在与参考图片索引相对应的参考图片中。而且,由运动矢量指定的块的样本值或其内插值可以用作当前块的预测器。对于具有子像素(sub-pel)单位像素精度的运动预测,例如,可以使用用于亮度信号的8抽头内插滤波器和用于色度信号的4抽头内插滤波器。然而,以子像素为单位的用于运动预测的内插滤波器不限于此。以这种方式,帧间预测单元254执行运动补偿以根据先前使用运动信息重构的运动图片来预测当前单元的纹理。在这种情况下,帧间预测单元可以使用运动信息集。

根据另一实施例,预测单元250可以包括帧内BC预测单元(未被图示)。帧内BC预测单元可以通过参考包括当前图片中的重构样本的特定区域来重构当前区域。帧内BC预测单元从熵解码单元210获得关于当前区域的帧内BC编码信息。帧内BC预测单元获得指示当前图片中的特定区域的当前区域的块矢量值。帧内BC预测单元可以使用所获得的块矢量值来执行帧内BC预测。帧内BC编码信息可以包括块矢量信息。

通过将从帧内预测单元252或帧间预测单元254输出的预测值与从逆变换单元225输出的残差值相加生成重构的视频图片。即,视频信号解码装置200使用由预测单元250生成的预测块和从逆变换单元225获得的残差来重构当前块。

同时,图2的框图示出根据本发明的实施例的解码装置200,并且分开显示的块在逻辑上区分并示出解码装置200的元件。因此,取决于设备的设计上述解码装置200的元件可以被安装为一个芯片或多个芯片。根据实施例,上述解码装置200的每个元件的操作可以由处理器(未示出)执行。

图3图示其中在图片中编译树单元(CTU)被分割成编译单元(CU)的实施例。在视频信号的编译过程中,可以将图片分割成一系列编译树单元(CTU)。编译树单元由亮度样本的NXN块和与其相对应的色度样本的两个块组成。编译树单元可以被分割成多个编译单元。编译树单元可以不被分割,并且可以是叶节点。在这种情况下,编译树单元本身可以是编译单元。编译单元指代在上述视频信号的处理过程中,即,帧内/帧间预测、变换、量化和/或熵编译中用于处理图片的基本单元。一个图片中编译单元的大小和形状可能不恒定。编译单元可以具有正方形或矩形形状。矩形编译单元(或矩形块)包括垂直编译单元(或垂直块)和水平编译单元(或水平块)。在本说明书中,垂直块是其高度大于宽度的块,并且水平块是其宽度大于高度的块。此外,在本说明书中,非正方形块可以指代矩形块,但是本发明不限于此。

参考图3,首先将编译树单元分割成四叉树(QT)结构。即,在四叉树结构中具有2NX2N大小的一个节点可以被分割成具有NXN大小的四个节点。在本说明书中,四叉树也可以称为四元树。可以递归地执行四叉树分割,并非所有节点都需要以相同的深度分割。

同时,上述四叉树的叶节点可以进一步被分割成多类型树(MTT)结构。根据本发明的实施例,在多类型树结构中,一个节点可以被分割成水平或垂直划分的二叉或三叉树结构。即,在多类型树结构中,存在四个分割结构,诸如垂直二元分割、水平二元分割、垂直三元分割和水平三元分割。根据本发明的实施例,在每个树结构中,节点的宽度和高度都可以具有2的幂。例如,在二叉树(BT)结构中,2NX2N大小的节点可以通过垂直二元分割被分割成两个NX2N节点,并通过水平二元分割将其分割成两个2NXN节点。另外,在三叉树(TT)结构中,将2NX2N大小的节点通过垂直三元分割被分割成(N/2)X2N、NX2N和(N/2)X2N节点,并通过水平三元分割被分割成2NX(N/2)、2NXN和2NX(N/2)节点。可以递归地执行此多类型树分割。

多类型树的叶节点可以是编译单元。当编译单元不大于最大变换长度时,在无需进一步分割的情况下可以将编译单元用作预测和/或变换的单元。作为实施例,如果当前编译单元的宽度或高度大于最大变换长度,则可以将当前编译单元分隔成为多个变换单元,而无需关于分隔的显式信令。另一方面,可以通过诸如PPS、SPS、VPS等的高层集合的RBSP来预定义或发送上述四叉树和多类型树中的以下参数中的至少一个。1)CTU大小:四叉树的根节点大小,2)最小QT大小MinQtSize:允许的最小QT叶节点大小,3)最大BT大小MaxBtSize:允许的最大BT根节点大小,4)最大TT大小MaxTtSize:允许的最大TT根节点大小,5)最大MTT深度MaxMttDepth:从QT的叶节点分割而来的MTT的最大允许深度,6)最小BT大小MinBtSize:允许的最小BT叶节点大小,7)最小TT大小MinTtSize:允许的最小TT叶节点大小。

图4图示用于用信号发送四叉树和多类型树分割的方法的实施例。可以使用预设标记来用信号发送上述四叉树和多类型树分割。参考图4,指示节点是否被分割的标记“split_cu_flag”、指示四叉树节点是否被分割的标记“split_qt_flag”、指示多类型树节点的分割方向的标记“mtt_split_cu_vertical_flag”或者指示多类型树节点的分割形状的标记“mtt_split_cu_binary_flag”中的至少一个可以被使用。

根据本发明的实施例,可以首先用信号发送“split_cu_flag”,其是指示当前节点是否被分割的标记。当“split_cu_flag”的值为0时,其指示当前节点未被分割,并且当前节点成为编译单元。当当前节点是编译树单元时,编译树单元包括一个非分割编译单元。当当前节点是四叉树节点“QT节点”时,当前节点是四叉树的叶节点“QT叶节点”,并成为编译单元。当当前节点是多类型树节点“MTT节点”时,当前节点是多类型树的叶节点“MTT叶节点”,并且成为编译单元。

当“split_cu_flag”的值是1时,可以根据“split_qt_flag”的值将当前节点分割成四叉树或多型树的节点。编译树单元是四叉树的根节点,并且可以首先被分割成四叉树结构。在四叉树结构中,为每个节点“QT节点”用信号发送“split_qt_flag”。当“split_qt_flag”的值为1时,该节点被分割成4个正方形节点,而当“qt_split_flag”的值为0时,该节点成为四叉树“QT leaf node”的叶节点,并且该节点被分割成多类型节点。根据本发明的实施例,可以根据当前节点的类型来限制四叉树分割。当当前节点是编译树单元(四叉树的根节点)或四叉树节点时,可以允许进行四叉树分割,而当当前节点是多类型树节点时,可能不允许四叉树分割。每个四叉树叶节点“QT叶节点”可以进一步被分割成多类型树结构。如上所述,当“split_qt_flag”为0时,当前节点可以被分割成多类型节点。为了指示分割方向和分割形状,可以用信号发送“mtt_split_cu_vertical_flag”和“mtt_split_cu_binary_flag”。当“mtt_split_cu_vertical_flag”的值是1时,指示节点“MTT节点”的垂直分割,并且当“mtt_split_cu_vertical_flag”的值是0时,指示节点“MTT节点”的水平分割。另外,当“mtt_split_cu_binary_flag”的值是1时,节点“MTT节点”被分割成两个矩形节点,并且当“mtt_split_cu_binary_flag”的值是0时,节点“MTT节点”被分割成三个矩形节点。

对不再分割的编译单元(即,编码单元树的叶节点)执行用于编译的图片预测(运动补偿)。在下文中将执行这种预测的基本单元称为预测单元或预测块。

在下文中,在本说明书中使用的术语单元可以用作代替预测单元的术语,该预测单元是用于执行预测的基本单元。然而,本发明不限于此,并且可以更广泛地理解为包括编译单元的概念。

图5和图6更加具体地图示根据本发明的实施例的帧内预测方法。如上所述,帧内预测单元通过使用位于当前块的左侧和/或上侧的恢复的样本作为参考样本来预测当前块的样本值。

首先,图5示出在帧内预测模式中用于当前块的预测的参考样本的实施例。根据实施例,参考样本可以是与当前块的左边界相邻的样本和/或与上边界相邻的样本。如图5中所示,当当前块的大小是WXH并且与当前块相邻的单个参考线的样本被用于帧内预测时,可以使用位于当前块的左侧和上侧的最大2W+2H+1个邻近样本来配置参考样本。

另外,如果尚未恢复要被用作参考样本的样本中的至少一些,则帧内预测单元可以通过执行参考样本填充过程来获得参考样本。另外,帧内预测单元可以执行参考样本滤波处理以减少帧内预测中的误差。即,可以对通过参考样本填充过程获得的周围样本和/或参考样本执行滤波,以获得滤波后的参考样本。帧内预测单元使用由此获得的参考样本来预测当前块的样本。帧内预测单元通过使用尚未被滤波的参考样本或已被滤波的参考样本来预测当前块的样本。在本公开中,周围样本可以包括至少一条参考线上的样本。例如,周围样本可以包括在与当前块的边界相邻的线上的相邻样本。

接下来,图6示出用于帧内预测的预测模式的实施例。对于帧内预测,可以用信号发送指示帧内预测方向的帧内预测模式信息。帧内预测模式信息指示被包括在帧内预测模式集中的多个帧内预测模式中的一个。当当前块是帧内预测块时,解码器从比特流接收当前块的帧内预测模式信息。解码器的帧内预测单元基于提取的帧内预测模式信息对当前块执行帧内预测。

根据本发明的实施例,帧内预测模式集可以包括在帧内预测中使用的所有帧内预测模式(例如,总共67个帧内预测模式)。更具体地,帧内预测模式集可以包括平面模式、DC模式以及多个(例如,65个)角度模式(即,方向模式)。可以通过预设索引(即,帧内预测模式索引)来指示每个帧内预测模式。例如,如图6中所示,帧内预测模式索引0指示平面模式,并且帧内预测模式索引1指示DC模式。此外,帧内预测模式索引2至66可以分别指示不同的角度模式。角度模式分别指示在预设角度范围内彼此不同的角度。例如,角度模式可以指示以顺时针方向在45度和-135度之间的角度范围(即,第一角度范围)内的角度。可以基于12点钟方向定义角度模式。在这种情况下,帧内预测模式索引2指示水平对角线(HDIA)模式,帧内预测模式索引18指示水平(水平,HOR)模式,帧内预测模式索引34指示对角线(DIA)模式,帧内预测模式索引50指示垂直(VER)模式,并且帧内预测模式索引66指示垂直对角线(VDIA)模式。

同时,可以根据当前块的形状来不同地设置预设角度范围。例如,当当前块是矩形块时,可以另外使用指示在顺时针方向上大于45度或小于-135度的角度的广角模式。当当前块是水平块时,角度模式可以指示以顺时针方向在(45+偏移1)度和(-135+偏移1)度之间的角度范围(即,第二角度范围)内的角度。在这种情况下,可以另外使用第一角度范围之外的角度模式67至76。另外,当当前块是垂直块时,角度模式可以指示以顺时针方向在(45-偏移2)度和(-135-偏移2)度之间的角度范围(即,第三角度范围)内的角度。在这种情况下,可以另外使用在第一角度范围之外的角度模式-10至-1。根据本发明的实施例,可以根据矩形块的宽度和高度之间的比率来不同地确定偏移1和偏移2的值。此外,偏移1和偏移2可以为正数。

根据本发明的又一实施例,帧内预测模式集中包括的多个角度模式可以包括基本角度模式和扩展角度模式。在这种情况下,可以基于基本角度模式来确定扩展角度模式。

根据实施例,基本角度模式是与在现有的高效视频编译(HEVC)标准的帧内预测中使用的角度相对应的模式,并且扩展角度模式可以是与在下一代视频编解码器标准的帧内预测中新添加的角度相对应的模式。更具体地,基本角度模式是与帧内预测模式{2,4,6,…,66}中的任何一种相对应的角度模式,而扩展角度模式是与帧内预测模式{3,5,7,…,65}中的任何一种相对应的角度模式。即,扩展角度模式可以是第一角度范围内的基本角度模式之间的角度模式。因此,可以基于由基本角度模式指示的角度来确定由扩展角度模式指示的角度。

根据另一实施例,基本角度模式可以是与预设的第一角度范围内的角度相对应的模式,而扩展角度模式可以是在第一角度范围之外的广角模式。即,基本角度模式是与帧内预测模式{2,3,4,…,66}中的任一种相对应的角度模式,并且扩展角度模式是与{-10,-9,…,-1}和{67,68,…,76}当中的帧内预测模式中的任意一种相对应的角度模式。由扩展角度模式指示的角度可以被确定为与由相应的基本角度模式指示的角度相反的角度。因此,可以基于由基本角度模式指示的角度来确定由扩展角度模式指示的角度。同时,扩展角度模式的数量不限于此,并且可以根据当前块的大小和/或形状来定义附加的扩展角度。例如,扩展角度模式可以被定义为与帧内预测模式{-14,-13,…,-1}和{67,68,…,80}中的任何一个相对应的角度模式。同时,帧内预测模式集中包括的帧内预测模式的总数可以取决于上述基本角度模式和扩展角度模式的配置而变化。

在以上实施例中,可以基于对应的基本角度模式之间的间隔来设置扩展角度模式之间的间隔。例如,可以基于对应的基本角度模式{2,4,6,…,66}之间的间隔来确定扩展角度模式{3,5,7,…,65}之间的间隔。例如,可以基于对应的相对侧基本角度模式{56,57,…,65}之间的间隔来确定扩展角度模式{-10,-9,…,-1}之间的间隔,并且可以基于对应的相对侧基本角度模式{3,4,…,12}之间的间隔来确定扩展角度模式{67,68,…,76}之间的间隔。扩展角度模式之间的角度间隔可以配置成与对应的基本角度模式之间的角度间隔相同。此外,帧内预测模式集中的扩展角度模式的数量可以被配置成小于或等于基本角度模式的数量。

根据本发明的实施例,可以基于基本角度模式来用信号发送扩展角度模式。例如,广角模式(即,扩展角度模式)可以替换第一角度范围内的至少一个角度模式(即,基本角度模式)。要被替换的基本角度模式可以是与广角模式的相对侧相对应的角度模式。即,要被替换的基本角度模式是与由广角模式指示的角度的相反方向上的角度或者与该相反方向上的角度相差预设偏移索引的角度相对应的角度模式。根据本发明的实施例,预设偏移索引为1。与被替换的基本角度模式相对应的帧内预测模式索引可以被映射回到广角模式以用信号发送广角模式。例如,可以通过帧内预测模式索引{57,58,…,66}来用信号发送广角模式{-10,-9,…,-1},并且通过帧内预测模式索引{2,3,…,11}来用信号发送广角模式{67,68,…,76}。这样,因为用于基本角度模式的帧内预测模式索引用信号发送扩展角度模式,即使用于每个块的帧内预测的角度模式的配置不同,也可以将相同的帧内预测模式索引的集合用于帧内预测模式的信令。因此,可以最小化由于帧内预测模式配置的改变引起的信令开销。

同时,可以基于当前块的形状和大小中的至少一个来确定是否使用扩展角度模式。根据实施例,当当前块的大小大于预设大小时,扩展角度模式可以被用于当前块的帧内预测,否则,仅基本角度模式可以被用于当前块的帧内预测。根据另一实施例,当当前块是除正方形之外的块时,扩展角度模式可以被用于当前块的帧内预测,并且当当前块是正方形块时,仅基本角度模式可以被用于当前块的帧内预测。

另一方面,为了增加编译效率,代替照原样对上述残差信号进行编译,可以使用对通过对残差信号进行变换而获得的变换系数值进行量化并对量化后的变换系数进行编译的方法。如上所述,变换单元可以通过对残差信号进行变换来获得变换系数值。在这种情况下,特定块的残差信号可以分布在当前块的整个区域上。因此,能够通过对残差信号进行频域变换将能量集中在低频域中,来改进编译效率。在下文中,将详细描述用于对残差信号进行变换或逆变换的方法。

图7是具体地图示用于通过编码器变换残差信号的方法的图。如上所述,空间域中的残差信号可以被变换到频域。编码器可以通过对所获得的残差信号进行变换来获得变换系数。首先,编码器可以获取包括当前块的残差信号的至少一个残差块。残差块可以是当前块或当前块被划分成的块中的任何一个。在本公开中,残差块可以被称为包括当前块的残差样本的残差阵列或残差矩阵。另外,在本公开中,残差块可以表示变换单元或具有与变换块的大小相同的大小的块。

接下来,编码器可以使用变换核来变换残差块。用于对残差块进行变换的变换核可以是具有可分离为垂直变换和水平变换的特性的变换核。在这种情况下,对残差块的变换可以被分离成垂直变换和水平变换。例如,编码器可以通过在残差块的垂直方向上应用变换核来执行垂直变换。另外,编码器可以通过在残差块的水平方向上应用变换核来执行水平变换。在本公开中,变换核可以用作术语来指代用于变换残差信号的参数集,诸如变换矩阵、变换阵列和变换函数。根据实施例,变换核可以是多个可用核中的任何一个。此外,基于不同变换类型的变换核可以用于垂直变换和水平变换中的每一个。

编码器可以将从残差块变换的变换块发送到量化单元以对其进行量化。在这种情况下,变换块可以包括多个变换系数。具体地,变换块可以由以二维布置的多个变换系数组成。类似于残差块,变换块的大小可以与当前块或当前块被划分为的块中的任何一个的大小相同。传送到量化单元的变换系数可以被表达为量化值。

另外,编码器可以在对变换系数进行量化之前执行附加的变换。如图7中所图示,上述变换方法可以被称为初次变换,并且附加变换可以被称为二次变换。二次变换对于每个残差块可以是选择性的。根据实施例,编码器可以通过对仅通过初次变换难以将能量集中在低频域中的区域执行二次变换来改善编译效率。例如,可以将二次变换附加到其中残差值在除残差块的水平或垂直方向以外的方向上相对较大地显现的块中。与帧间预测的块的残差值相比,帧内预测的块的残差值可以具有在除水平或垂直方向之外的方向上变化的相对较高的概率。因此,编码器可以附加地对帧内预测的块的残差信号执行二次变换。另外,编码器可以省略对帧间预测的块的残差信号的二次变换。

对于另一示例,可以根据当前块或残差块的大小来确定是否执行二次变换。另外,可以根据当前块或残差块的大小来使用具有不同大小的变换核。例如,可以将8×8二次变换应用于其中宽度或高度中的较短边等于或大于第一预设长度的块。另外,可以将4×4二次变换应用于其中宽度或高度中的较短边等于或大于第二预设长度并且小于第一预设长度的块。在这种情况下,第一预设长度可以是大于第二预设长度的值;然而,本公开不限于此。此外,与初次变换不同,二次变换可能不能分离成垂直变换和水平变换。该二次变换可以被称为低频不可分离变换(LFNST)。

另外,在特定区域中的视频信号的情况下,由于亮度的突然改变,即使执行频率变换,也不会减少高频带中的能量。因此,因量化的压缩性能的性能可能劣化。另外,当对残差值很少存在的区域执行变换时,编码时间和解码时间可能不必要地增加。因此,可以省略对特定区域的残差信号的变换。可以通过与特定区域的变换有关的语法元素来确定是否对特定区域的残差信号执行变换。例如,语法元素可以包括变换跳过信息。变换跳过信息可以是变换跳过标记。当关于残差块的变换跳过信息指示变换跳过时,不执行对残差块的变换。在这种情况下,编码器可以立即量化尚未对其进行区域变换的残差信号。参考图7描述的编码器的操作可以通过图1的变换单元来执行。

与变换有关的上述语法元素可以是从视频信号比特流解析的信息。解码器可以对视频信号比特流进行熵解码以获得与变换有关的语法元素。另外,编码器可以通过对与变换有关的语法元素进行熵编码来生成视频信号比特流。

图8是具体地图示用于通过编码器和解码器对变换系数进行逆变换来获取残差信号的方法的图。在下文中,为了便于描述,将描述通过编码器和解码器中的每一个的逆变换单元执行逆变换操作。逆变换单元可以通过对逆量化的变换系数进行逆变换来获得残差信号。首先,逆变换单元可以从特定区域的与变换有关的语法元素中检测是否执行了特定区域的逆变换。根据实施例,当特定变换块上的与变换有关的语法元素指示变换跳过时,可以省略对变换块的变换。在这种情况下,对于变换块,逆初次变换和逆二次变换两者都可以被省略。另外,逆量化变换系数可以用作残差信号。例如,解码器可以通过使用逆量化的变换系数作为残差信号来重构当前块。上述逆初次变换表示用于初次变换的逆变换,并且可以被称为初次逆变换。逆二次变换表示用于二次变换的逆变换,并且可以被称为二次逆变换或逆LFNST。在本发明中,(逆)初次变换可以被称为一阶(逆)变换,并且(逆)二次变换可以被称为二阶(逆)变换。

根据另一实施例,用于特定变换块的与变换有关的语法元素可以不指示变换跳过。在这种情况下,逆变换单元可以确定是否对二次变换执行逆二次变换。例如,当变换块是帧内预测的块的变换块时,可以对变换块执行逆二次变换。另外,可以基于与变换块相对应的帧内预测模式来确定用于变换块的二次变换核。对于另一个示例,可以基于变换块的大小来确定是否执行逆二次变换。逆二次变换可以在逆量化过程之后并且在逆初次变换被执行之前执行。

逆变换单元可以对逆量化的变换系数或逆二次变换的系数执行逆初次变换。像初次变换一样,逆初次变换可以分离成垂直变换和水平变换。例如,逆变换单元可以对变换块执行垂直逆变换和水平逆变换以获得残差块。逆变换单元可以基于用于对变换块进行变换的变换核来对变换块进行逆变换。例如,编码器可以显式地或隐式地用信号发送指示多个可用变换核中的应用于当前变换块的变换核的信息。解码器可以通过使用指示用信号发送的变换核的信息,在多个可用变换核中选择要用于变换块的逆变换的变换核。逆变换单元可以通过使用通过对变换系数进行逆变换而获得的残差信号来重构当前块。

另一方面,图片的残差信号的分布对于每个区域可以是不同的。例如,特定区域中的残差信号的值的分布可以根据预测方法而变化。当使用相同的变换核对多个不同的变换区域进行变换时,对每个变换区域,编译效率可以根据变换区域中的值的分布和特性而变化。因此,当从多个可用的变换核中自适应地选择用于变换特定变换块的变换核时,可以进一步改善编译效率。即,编码器和解码器可以被配置成在变换视频信号时另外使用除了基本变换核之外的变换核。用于自适应选择变换核的方法可以被称为自适应多核变换(AMT)或多变换选择(MTS)。在本公开中,为了便于描述,将变换和逆变换统称为变换。另外,将变换核和逆变换核统称为变换核。

作为原始信号与通过帧间预测或帧内预测生成的预测信号之间的差信号的残差信号,具有分布在整个像素域上的能量,并且因此当残差信号本身的像素值被编码时,压缩效率可能差。因此,需要一种用于通过对像素域中的残差信号进行代码转换来将能量集中在频域的低频区域上的过程。

在高效视频编译(HEVC)标准中,当信号均匀分布在像素域中时(当邻近像素值相似时)主要通过使用有效的离散余弦变换类型II(DCT-II),并通过限制离散正弦变换类型VII(DST-VII)以仅在帧内预测4×4块中使用,将像素域中的残差信号变换到频域中。DCT-II变换可能适用于通过帧间预测生成的残差信号(当能量均匀分布在像素域中时)。然而,对于通过帧内预测生成的残差信号,由于通过使用当前编译单元周围的重构参考样本来预测的帧内预测的特性,随着与参考样本的距离增加,残差信号的能量可能趋于增加。因此,当仅使用DCT-II变换将残差信号变换到频域时,不能够实现高编译效率。

AMT是一种变换技术,其根据预测方法从数个预设的变换核中自适应地选择变换核。因为残差信号的像素域中的模式(水平方向的信号特性,垂直方向的信号特性)取决于使用哪种预测方法而不同,与当仅DCT-II被用于残差信号的变换时相比,可以期待更高的编译效率。在本发明中,名称AMT不受本文所述的限制,并且可以被称为多变换选择(MTS)。

图9是图示可以在初次变换中使用的多个变换核的基函数的图。

具体来说,图9是图示在AMT中使用的变换核的基函数的图,并且示出应用于AMT的DCT-II(离散余弦变换类型II)、DCT-V(离散余弦变换类型V)、DCT-VIII(离散余弦变换类型VIII)、DST-I(离散正弦变换类型I)和DST-VII(离散正弦变换类型VII)核等式。

DCT和DST可以分别表达为余弦和正弦的函数,并且当对于样本数N的变换核的基函数表示为Ti(j)时,索引i表示频域中的索引,并且索引j表示基函数中的索引。即,i越小表示低频基函数,并且i越大表示高频基函数。当被表达为二维矩阵时,基函数Ti(j)可以表示第i行的第j个元素,并且因为在图9中图示的所有变换核都具有可分离的特性,所以可以分别在水平方向和垂直方向上对残差信号X执行变换。即,当残差信号块由X表示并且变换核矩阵由T表示时,对残差信号X的变换可以由TXT'表示。在这种情况下,T'表示变换核矩阵T的转置矩阵。

由图9中所图示的基函数定义的变换矩阵的值可以是小数形式,而不是整数形式。小数形式的值可能难以在视频编码设备和解码设备的硬件中实现。因此,从包括小数形式的值的原始变换核的近似于整数的变换核可以用于视频信号的编码和解码。可以通过缩放和舍入原始变换核来生成包括整数值的近似变换核。近似变换核中包括的整数值可以是在可由预设比特数表示的范围内的值。预设比特数可以是8比特或10比特。通过这种近似,可能无法维持DCT和DST的正交特性。但是,因为所产生的编译效率损失不大,所以在硬件实现方面使变换核近似于整数形式可能是有利的。

对于图7和图8中描述的初次变换和逆初次变换,因为可分离的变换核被表示为二维矩阵并且在垂直方向和水平方向上执行变换,所以可以看出二维矩阵乘法运算被执行两次。因为这涉及大量的运算,所以从实现的角度来看可能是个问题。因此,从实现的角度来看,是否可以通过使用像DCT-II这样的蝶形结构或半蝶形结构和半矩阵乘法器的组合结构来减少运算量,或者是否有可能将变换核分解为实现复杂度较低的变换核(是否可以由复杂度较低的矩阵的乘积来表达核)是一个重要的问题。另外,因为不得不将变换核的元素(变换核的矩阵元素)存储在存储器中用于运算,所以在实施方式中还不得不考虑用于存储核矩阵的存储器容量。从这个角度来看,因为DST-VII和DCT-VIII的实现复杂度相对高,所以具有与DST-VII和DCT-VIII相似的特性以及低实现复杂度的变换可以替代DST-VII和DCT-VIII。

DST-IV(离散正弦变换类型IV)和DCT-IV(离散余弦变换类型IV)可以是分别替代DST-VII和DCT-VIII的候选。用于样本数2N的DCT-II核可以包含用于样本数N的DCT-IV核,并且通过执行符号转换并以相反的顺序对基函数进行排序(其是简单的运算)从用于样本数N的DCT-IV核实现用于样本数N的DST-IV核,并且因此可以简单地从用于样本数2N的DCT-II中导出用于样本数N的DST-IV和DCT-IV。

因为作为原始信号和预测信号之间的差的残差信号示出信号的能量分布根据预测方法而变化的特性,所以当根据诸如AMT或MTS的预测方法自适应地选择变换核时能够改善编译效率。另外,如图7和图8所描述的,通过执行作为除了初次变换和逆初次变换(对应于初次变换的逆变换)之外的附加变换的二次变换和逆二次变换(对应于二次变换的逆变换),能够改善编译效率。特别地,二次变换可以改善其中在残差信号块的水平或垂直方向以外的方向上很可能存在强能量的帧内预测残差信号块的能量压缩。如上所述,二次变换可以被称为低频不可分离变换(LFNST)。另外,初次变换可以被称为核心变换。

图10是图示根据本发明的实施例的在执行二次变换的解码单元中重构残差信号的过程的框图。首先,熵编码器可以解析与来自比特流的残差信号有关的语法元素,并且可以通过解二值化获得量化系数。解码器可以对重构的量化系数执行逆量化以获得变换系数,并且可以对变换系数执行逆变换以重构残差信号块。可以将逆变换应用于未应用变换跳过(TS)的块。可以在解码单元中以逆二次变换和逆初次变换的顺序执行逆变换。在这种情况下,可以省略逆二次变换。可以对帧间预测块执行逆二次变换,并且可以被省略。可替选地,取决于块大小条件,可以省略逆二次变换。重构的残差信号包括量化误差,并且与仅执行初次变换时相比,二次变换可以通过改变残差信号的能量分布来减小量化误差。

图11是以块级别图示根据本发明的实施例的在执行二次变换的解码单元中重构残差信号的过程的图。可以以变换单元(TU)或TU内的子块为单位执行残差信号的重构。图11图示重构对其应用了二次变换的残差信号块的过程,并且可以首先对逆量化的变换系数块执行逆二次变换。解码器可以对TU中W×H(W:宽度,水平样本的数量,H:高度,垂直样本的数量)的所有样本执行逆二次变换;然而,考虑到复杂度,可以仅对左上角具有W'×H'大小的子块执行逆二次变换,其是具有最大影响的低频区域。在这种情况下,W'小于或等于W。H'小于或等于H。左上子块的大小W'×H'可以根据TU大小被不同地设置。例如,当min(W,H)=4时,W'和H'两者都可以设置为4。当min(W,H)>=8时,W'和H'两者都可以设置为8。min(x,y)表示当x小于或等于y时返回x,而当x大于y时返回y的运算。在执行逆二次变换之后,解码器可以获取TU中的左上的大小为W'×H'的子块变换系数,并且可以对整个大小为W×H的变换系数块执行逆初次变换以重构残差信号块。

通过以1比特标记的形式被包括在诸如序列参数集(SPS)、图片参数集(PPS)、图片报头、切片报头或图块组报头的高级语法(HLS)RBSP中的至少一个中,可以指示是否可以启用或应用二次变换。另外,当二次变换适用时,可以在至少一个HLS RBSP中以1比特标记的形式指示在二次变换中考虑的左上的子块的大小。例如,可以由在HLS RBSP中的至少一个的1比特标记指示是否可以将8×8大小的子块用于考虑4×4或8×8大小的子块的二次变换。

当在较高级别(例如,HLS)处指示二次变换的启用或适用性时,可以在编译单元(CU)级别处通过1比特标记指示是否应用二次变换。另外,当将二次变换应用于当前块时,可以在编译单元级别处指示指示用于二次变换的变换核的索引。解码器可以根据预测模式通过使用由预设变换核集内的索引指示的变换核对应用了二次变换的块执行逆二次变换。表示变换核的索引可以通过使用截断的一元或固定长度二值化方法进行二值化。可以通过使用一个语法元素来指示指示是否在CU级别处应用二次变换的1比特标记和指示用于二次变换的变换核的索引,并且在本说明书中,将其称为lfnst_idx[x0][y0]或lfnst_idx,但是本发明不限于名称。作为实施例,lfnst_idx[x0][y0]的第一比特可以指示是否在CU级别处应用二次变换。另外,其余比特可以表示指示用于二次变换的变换核的索引。即,lfnst_idx[x0][y0]可以表示是否应用二次变换(LFNST),以及指示当应用二次变换时使用的变换核的索引。可以通过诸如基于上下文执行自适应编码的基于上下文的自适应二进制算术编译(CABAC)和基于上下文的自适应可变长度编译(CAVLC)的熵编码器来编码这样的lfnst_idx[x0][y0]。当当前CU被分为小于CU大小的多个TU时,可以不应用二次变换,并且可以将与二次变换有关的语法元素lfnst_idx[x0][y0]设置为0而无需信令。例如,当lfnst_idx[x0][y0]为0时,它可能指示不应用二次变换。另一方面,当lfnst_idx[x0][y0]大于0时,可以指示应用二次变换,并且可以基于lfnst_idx[x0][y0]来选择用于二次变换的变换核。

如上所述,编译树单元、四叉树的叶节点和多类型树的叶节点可以是编译单元。当编译单元不大于最大变换长度时,在没有进一步的分段的情况下可以将编译单元用作预测和/或变换的单元。作为实施例,当当前编译单元的宽度或高度大于最大变换长度时,在没有关于分段的显式信令的情况下可以将当前编译单元分为多个变换单元。当编译单元的大小大于最大变换大小时,可以在没有信令的情况下将编译单元分为多个变换块。在这种情况下,当应用二次变换时,性能退化和复杂性可能增加,并且因此,可以限制应用二次变换的最大编译块(或编译块的最大大小)。最大编译块的大小可以与最大变换大小相同。可替选地,最大编译块的大小可以被定义为预设编译块的大小。作为一个实施例,预设值可以是64、32或16;然而,本发明不限于此。在这种情况下,可以将要与预设值进行比较的值(或最大变换大小)定义为长边的长度或样本总数。

另一方面,在初次变换中使用的基于DCT-II、DST-VII和DCT-VIII基函数的变换核具有可分离的特性。因此,可以对大小为N×N的残差块中的样本执行垂直/水平方向上的两个变换,并且变换核的大小可以为N×N。另一方面,对于二次变换,该变换核具有不可分离的特性。因此,当在二次变换中要考虑的样本数是n×n时,可以执行一个变换。在这种情况下,变换核的大小可以是(n^2)×(n^2)。例如,当对左上的4×4系数块执行二次变换时,可以应用16×16大小的变换核。另外,当对左上的8×8系数块执行二次变换时,可以应用64×64大小的变换核。64×64大小的变换核涉及大量乘法运算,这可能会给编码器和解码器带来沉重负担。因此,当在二次变换中要考虑的样本数减少时,可以减少用于存储变换核的运算量和所需的内存。

图12是图示根据本发明的实施例的应用使用数量减少的样本的二次变换的方法的图。根据本发明的实施例,可以通过将二次变换核矩阵与初次变换系数矢量相乘来表达二次变换,并且可以将其解释为将初次变换系数映射到另一空间。在这种情况下,当要进行二次变换的系数的数量减少时,即,当构成二次变换核的基矢量的数量减少时,二次变换所需的运算量和存储变换核所需的内存容量可能会减少。例如,当对左上的8×8系数块执行二次变换时,当要被二次变换的系数的数量减少到16时,可以应用大小为16(行)×64(列)(或大小为16(行)×48(列)的二次变换核。编码器的变换单元可以通过构成变换核矩阵的行矢量中的每一个与初次变换系数矢量的的内积来获得二次变换系数矢量。编码器和解码器的逆变换单元可以通过构成变换核矩阵的列矢量中的每一个和二次变换系数矢量的内积来获得初次变换系数矢量。

参考图12,编码器可以首先对残差信号块执行初次变换(前向初次变换)以获得初次变换系数块。当初次变换系数块的大小为M×N时,对于min(M,N)值为4的帧内预测块,可以对初次变换系数块的左上的4×4个样本执行4×4二次变换(前向二次变换)。对于具有等于或大于8的min(M,N)的值的帧内预测块,可以对左上的初次变换系数块的8×8个样本执行8×8二次变换。因为8×8二次变换涉及大量的运算和内存,所以只能利用8×8样本中的一些样本。在一个实施例中,为了改善编译效率,对于其中min(M,N)的值为4并且M或N大于8的矩形块(例如,大小为4×16或16×4的矩形块),可以对初次变换系数块中的左上的两个4×4子块中的每个子块执行4×4二次变换。

因为可以通过将二次变换核矩阵和输入矢量相乘来计算二次变换,所以编码器可以首先以矢量形式构造在初次变换系数块的左上的子块中的系数。用于以矢量构造系数的方法可以取决于帧内预测模式。例如,当帧内预测模式小于或等于图6中所示的帧内预测模式中的第34角度模式时,编码器可以通过在水平方向上扫描初次变换的系数块中左上的子块来以矢量构造系数。当在初次变换系数块中的左上的n×n块的第i行和第j列的元素被表达为x(I,j)时,矢量化的系数可以被表达为[x(0,0),x(0,1),...,x(0,n-1),x(1,0),x(1,1),…,x(1,n-1),...,x(n-1,0),x(n-1,1),...,x(n-1,n-1)]。另一方面,如果帧内预测模式大于第34角度模式,则可以通过在垂直方向上扫描初次变换系数块中的左上的子块来以矢量构造系数。矢量化的系数可以表达为[x(0,0),x(1,0),...,x(n-1,0),x(0,1),x(1,1),...,x(n-1,1),...,x(0,n-1),x(1,n-1),...,x(n-1,n-1)]。当为了减少运算量而在8×8二次变换中仅利用8×8样本中的一些样本时,在用于以矢量构造系数的上述方法中可能不包括其中i>3且j>3的系数x_ij。在这种情况下,在4×4二次变换中,16个初次变换系数可以是二次变换的输入。在8×8二次变换中,48个初次变换系数可以是二次变换的输入。

编码器可以通过将矢量化的初次变换系数块中的左上的子块样本与二次变换核矩阵相乘来获取二次变换系数。可以通过变换单元或变换块的大小、帧内模式以及指示变换核的语法元素来确定应用于二次变换的二次变换核。如上所述,当要被二次变换的系数的数量减少时,可以减少存储变换核所需的运算和内存的量。因此,可以通过当前变换块的大小来确定要被二次变换的系数的数量。例如,对于4×4块,编码器可以通过将长度为16的矢量与8(行)×16(列)的变换核矩阵相乘来获取长度为8的系数矢量。可以基于构成16(行)×16(列)变换核矩阵的第一至第八基矢量来获得8(行)×16(列)变换核矩阵。对于4×N块或M×4(N和M为8或更大),编码器可以通过将长度为16的矢量与16(行)×16(列)变换核矩阵相乘来获得长度为16的系数矢量。对于8×8的块,编码器可以通过将长度为48的矢量与8(行)×48(列)的变换核矩阵相乘来获得长度为8的系数矢量。可以基于构成16(行)×48(列)变换核矩阵的第一到第八基矢量来获得8(行)×48(列)变换核矩阵。对于除了8×8之外的M×N块(M和N为8或更大),编码器可以通过将长度为48的矢量与16(行)×48(列)变换核矩阵相乘来获得长度为16的系数矢量。

根据本发明的实施例,因为二次变换系数是矢量形式的,所以它们可以被表达为二维形式的数据。已经根据预设的扫描顺序进行二次变换的系数可以在左上形成系数子块。在实施例中,预设扫描顺序可以是右上对角扫描顺序。本发明不限于此,并且可以基于稍后将描述的图13和图14中描述的方法来确定右上对角扫描顺序。

另外,根据本发明的实施例,包括二次变换系数的总变换单元大小的变换系数可以被包括在比特流中并且在量化之后被发送。比特流可以包括与二次变换有关的语法元素。具体地,比特流可以包括关于是否二次变换被应用于当前块的信息和指示应用于当前块的变换核的信息。

解码器可以首先从比特流解析量化的变换系数,并且可以通过去量化获得变换系数。去量化可以被称为缩放。解码器可以基于与二次变换有关的语法元素来确定是否对当前块执行逆二次变换。当将逆二次变换应用于当前变换单元或变换块时,取决于变换单元或变换块的大小,8或16个变换系数可以是逆二次变换的输入。要作为逆二次变换的输入的系数的数量可以与从编码器的二次变换输出的系数的数量匹配。例如,当变换单元或变换块的大小是4×4或8×8时,8个变换系数可以是逆二次变换的输入,并且否则,16个变换系数可以是逆二次变换的输入。当变换单元的大小为M×N时,对于min(M,N)值为4的帧内预测块,可以对变换系数块中的左上的4×4子块的16或8个系数执行4×4逆二次变换。对于min(M,N)为8或更大的帧内预测块,可以对变换系数块中的左上的4×4子块的16或8个系数执行8×8逆二次变换。在实施例中,为了改善编译效率,如果min(M,N)为4并且M或N大于8(例如,大小为4×16或16×4的矩形块),则可以对变换系数块中的左上的两个4×4子块中的每个子块执行4×4逆二次变换。

根据本发明的实施例,因为可以通过逆二次变换核矩阵和输入矢量的乘积来计算逆二次变换,所以解码器可以以矢量形式构造根据预设的扫描顺序已经首先被输入的去量化的变换系数。在实施例中,预设扫描顺序可以是右上对角扫描顺序,并且本发明不限于此,并且可以基于稍后要描述的图13和图14中描述的方法来确定右上对角扫描顺序。

另外,根据本发明的实施例,解码器可以通过将矢量化的变换系数与逆二次变换核矩阵相乘来获得初次变换系数。在这种情况下,可以通过变换单元或变换块的大小、帧内模式以及指示变换核的语法元素来确定逆二次变换核。逆二次变换核矩阵可以是二次变换核矩阵的转置矩阵。考虑到实现的复杂性,核矩阵的元素可以是以10比特或8比特精度表达的整数。可以基于当前变换块的大小来确定作为逆二次变换的输出的矢量的长度。例如,对于4×4块,通过将长度为8的矢量与8(行)×16(列)的变换核矩阵相乘,可以获得长度为16的系数矢量。可以基于构成16(行)×16(列)变换核矩阵的第一至第八基矢量来获得8(行)×16(列)变换核矩阵。对于4×N块或M×N(N和M为8或更大),可以通过将长度为16的矢量与16(行)×16(列)变换核矩阵相乘来获得长度为16的系数矢量。对于8×8的块,可以通过将长度为8的矢量与8(行)×48(列)变换核矩阵相乘来获得长度为48的系数矢量。可以基于构成16(行)×48(列)变换核矩阵的第一到第八基矢量来获得8(行)×48(列)变换核矩阵。对于除了8×8之外的M×N块(M和N为8或更大),可以通过将长度为16的矢量与16(行)×48(列)变换核矩阵相乘来获得长度为48的系数矢量。

在实施例中,因为通过逆二次变换获得的初次变换系数是矢量形式,所以解码器可以再次将其表达为二维形式的数据,这可以取决于帧内模式。在这种情况下,可以相等地应用基于由编码器应用的帧内模式的映射关系。如上所述,当帧内预测模式小于或等于第34角度模式时,解码器可以通过在水平方向上扫描逆二次变换系数矢量来获得二维变换系数阵列。当帧内预测模式大于第34角模式时,解码器可以通过在垂直方向上扫描逆二次变换系数矢量来获得二维变换系数阵列。解码器可以通过对整个变换单元执行逆初次变换来获得残差信号,该整个变换单元包括通过执行逆二次变换而获得的变换系数或变换块大小的变换系数块。

尽管未在图12中图示,为了校正由于在变换或逆变换之后的变换核而增加的缩放,在应用变换或逆变换中可以包括使用移位运算的缩放过程。

图13是图示根据本发明的实施例的用于确定右上对角扫描顺序的方法的图。根据本发明的实施例,可以执行在编码或解码期间初始化扫描顺序的过程。可以根据块大小来初始化包括扫描顺序信息的阵列。具体地,图13中所图示的右上对角扫描顺序布置的初始化过程被调用(或执行),其中对于log2BlockWidth和log2BlockHeight的组合输入1<

通过图13中所图示的右上对角扫描顺序布置的初始化过程,编码器/解码器可以输出针对作为块的宽度的blkWidth和作为块的高度的blkHeight(所有这些都是被接收的)的阵列diagScan[sPos][sComp]。阵列索引sPos可以表示扫描位置(扫描索引),并且可以是在[0,blkWidth*blkHeight-1]范围内的值。当作为阵列索引的sComp为0时,sPos可以表示水平分量(x),而当sComp为1时,sPos可以表示垂直分量(y)。在图13中所图示的算法中,在扫描位置sPos处的二维坐标上的x坐标和y坐标值可以分别被解释为以右上对角扫描顺序被分配给diagScan[sPos][0]和diagScan[sPos][1]。也就是说,在DiagScanOrder[log2BlockWidth][log2BlockHeight][sPos][sComp]排列(阵列)中存储的值可以指代与在块的右上对角扫描顺序中的sPos扫描位置(扫描索引)处的sComp相对应的坐标值,其宽度和高度分别为1<

图14是根据块大小图示根据本发明实施例的右上对角扫描顺序的图。参考图14(a),当log2BlockWidth和log2BlockHeight都为2时,可以意指4×4大小的块。参考图14(b),当log2BlockWidth和log2BlockHeight都为3时,可以意指8×8大小的块。在图14中,灰色阴影区域中显示的数字指示扫描位置(扫描索引)sPos。可以将sPos位置处的x和y坐标值分别分配给DiagScanOrder[log2BlockWidth][log2BlockHeight][sPos][0]和DiagScanOrder[log2BlockWidth][log2BlockHeight][sPos][1]。

编码器/解码器可以基于上述扫描顺序对变换系数信息进行编译。在本发明中,主要描述基于使用右上扫描方法的情况的实施例;然而,本发明不限于此,并且还可以应用其他已知的扫描方法。

在下文中,将详细描述与二次变换有关的解码过程。为了便于描述,与二次变换有关的过程主要以解码器来描述,但是稍后将描述的实施例可以以基本上相同的方式应用于编码器。

图15是图示用于在编译单位级别处指示二次变换的方法的图。可以在编译单元级别处指示二次变换,并且与二次变换有关的语法元素可以被包括在coding_unit语法结构中。coding_unit语法结构可以包括与编译单元有关的语法元素。在这种情况下,基于图片的左上亮度样本(x0,y0)(其是当前块的左上亮度样本的坐标)、作为块的宽度的cbWidth、作为块的高度的cbHeight、以及作为表示编译树的类型的变量的treeType,是coding_unit语法结构的输入。因为亮度和色度之间存在相关性,所以如果将亮度和色度编码为相同的编译结构,则可以进行有效的图像压缩。可替选地,为了改善编译效率,可以以不同的编译结构对亮度和色度进行编码。当变量treeType为SINGLE_TREE时,可以意指亮度和色度以相同的编译树结构编码,并且编译单元可以包括亮度编译块和根据颜色格式包括色度编译块。当treeType为DUAL_TREE_LUMA时,这意味着亮度和色度以不同的编译树被编码,并且当前处理的树可能指示用于亮度的树。在这种情况下,编译单元可以仅包括亮度编译块。当treeType为DUAL_TREE_CHROMA时,这意味着亮度和色度以不同的编译树被编码,并且当前处理的树可能指示用于色度的树。在这种情况下,编译单元可以根据颜色格式包括色度编译块。

在coding_unit语法结构中,可以指示用于当前编译单元的预测方法,并且变量CuPredMode[x0][y0]可以指示用于当前块的预测方法。当CuPredMode[x0][y0]是MODE_INTRA时,它可以指示帧内预测方法被应用于当前块,并且当CuPredMode[x0][y0]是MODE_INTER时,它可以指示帧间预测方法被应用于当前块。另外,当CuPredMode[x0][y0]是MODE_IBC时,它可以指示通过从完成当前图片的重构的区域生成参考块来执行预测的帧内块复制(IBC)预测被应用于当前块。取决于变量CuPredMode[x0][y0]的值,可以处理与预测方法有关的语法元素。例如,当变量CuPredMode[x0][y0]指示帧内预测时,解码器可以解析包括与帧内预测模式、参考线索引和帧内子分区(ISP)预测有关的信息的语法元素,或者可以根据预设方法设置与帧内预测模式有关的变量。

在处理与预测方法有关的语法元素之后,可以处理与残差信号有关的语法元素。transform_tree()语法结构是用于变换树的语法结构,并且通过将与编译单元大小相同的大小的节点设置为根节点,可以将变换树分割成其大小小于根结点的大小的节点并且变换树的叶节点可以是变换单元。transform_tree语法结构可以包括与变换树的分割有关的信息。

帧内预测方法之一可以是脉冲编译调制(PCM)预测。当将PCM预测用于当前编译单元的预测时,因为不执行变换和量化,所以可能不存在transform_tree语法结构。即,因为不存在transform_tree语法结构,所以解码器可以不对transform_tree语法结构执行操作。当在当前编译单元中指示帧内预测时,PCM预测可以由pcm_flag[x0][y0]指示。即,当pcm_flag[x0][y0]为1时,可以不执行解码器对transform_tree语法结构的操作。同时,对于当前编译单元是否存在transform_tree语法结构可以由1比特标记指示,该标记在本说明书中被称为cu_cbf,但是不限于此。当解析cu_cbf时,或当不解析cu_cbf时,解码器可以根据预设方法设置cu_cbf。当cu_cbf为1时,解码器可以对transform_tree语法结构执行操作。当帧间预测或IBC预测用于当前编译单元的预测时,合并预测也可以用于当前编译单元的预测。可以通过merge_flag[x0][y0]来指示是否使用合并预测。当指示在当前块中使用合并预测时(merge_flag[x0][y0]==1),可能不解析cu_cbf,并且可以根据预设方法确定cu_cbf的值。预设方法可以是基于指示跳过模式的cu_skip_flag[x0][y0]的方法。例如,当cu_skip_flag[x0][y0]为1时,将cu_cbf推断为0,否则,可以将cu_cbf推断为1。当cu_cbf为1时,可以处理transform_tree语法结构,并且用于测量非零量化系数(有效系数)的数量的计数器值可以被初始化为0。

numSigCoeff变量可以指代表示当前编译单元的变换单元中存在的非零量化系数(有效系数)的数量的变量,并且可以取决于numSigCoeff的值不同地处理与二次变换有关的语法元素。

numZeroOutSigCoeff变量可以指代表示存在于当前编译单元中包括的变换单元中的特定位置处的非零量化系数(有效系数)的数量的变量,并且与二次变换有关的语法元素可以根据numZeroOutSigCoeff的值被不同地处理。

在transform_tree中,可以分割变换树,并且变换树的叶节点可以是变换单元。transform_tree可以包括transform_unit语法结构,该transform_unit语法结构是与作为叶节点的变换单元有关的语法结构。transform_unit可以处理与变换单元有关的语法元素,并且当变换单元包括一个或多个非零变换系数时可以包括residual_coding语法结构。该residual_coding语法结构可以包括与量化变换系数有关的语法结构以及与其相关的处理。构成变换单元的变换块可以取决于当前正在被处理的树的类型而变化。当treeType为SINGLE_TREE时,当前变换单元可以包括亮度变换块和根据颜色格式包括色度变换块。当treeType为DUAL_TREE_LUMA时,当前变换单元可以包括亮度变换块。当treeType为DUAL_TREE_CHROMA时,当前变换单元可以包括色度变换块。transform_unit语法结构可以包括编译块标记(CBF)信息,其针对当前变换单元中包括的变换块,根据treeType指示变换块是否包括一个或多个非零系数。CBF信息可以是针对每个颜色分量指示的信息。例如,如果用于当前变换单元的亮度变换块的CBF的值指示亮度变换块不包括一个或多个非零系数,则亮度变换块的系数全为0,并且因此,用于亮度变换块的residual_coding语法结构可能不被处理。对于另一示例,如果用于当前变换单元的色度Cb变换块的CBF的值指示色度Cb变换块包括一个或多个非零系数,则用于当前变换单元的Cb变换块的residual_coding语法结构可能存在。

可以在CU级别处指示是否二次变换被应用于当前块。当二次变换被应用时,可以附加地指示指示用于二次变换的变换核的索引。如参考图11所描述的,可以通过使用lfnst_idx[x0][y0]语法元素来指示是否二次变换被应用于当前块。lfnst_idx[x0][y0]的第一比特可以指示是否二次变换被应用于当前编译单元。当lfnst_idx[x0][y0]的第一比特是0时,即,当lfnst_idx[x0][y0]是0时,它可以指示二次变换没有应用于当前块。另一方面,当lfnst_idx[x0][y0]的第一比特为1时,即,当lfnst_idx[x0][y0]大于0(lfnst_idx[x0][y0]>0)时,指示二次变换被应用于当前块。在这种情况下,可以使用附加比特来指示用于二次变换的变换核,并且可以通过附加比特来用信号发送指示二次变换核的索引。

当满足稍后描述的条件时,可以解析lfnst_idx[x0][y0]语法元素。另一方面,如果不满足稍后描述的条件,则在当前编译单元中不存在lfnst_idx[x0][y0],并且lfnst_idx[x0][y0]可以被设置为0。

换句话说,如果满足包括稍后将描述的lfnst_idx[x0][y0]语法元素解析条件的第一至第四实施例中描述的条件,则编码器可以生成包括用于当前编译单元的lfnst_idx[x0][y0]语法元素的比特流。另一方面,如果不满足稍后描述的条件,则用于当前编译单元的lfnst_idx[x0][y0]语法元素不包括在编码器生成的比特流中,并且lfnst_idx[x0][y0]可以被设置为0。接收到这样的比特流的解码器可以基于稍后描述的条件来解析lfnst_idx[x0][y0]语法元素。

lfnst_idx[x0][y0]语法元素解析条件

i)Min(lfnstWidth,lfnstHeight)>=4

首先,第一条件与块大小有关。当块的宽度和高度为4个像素或更多时,解码器可以解析lfnst_idx[x0][y0]语法元素。

具体地,解码器可以检查可以对其应用二次变换的块大小条件。变量SubWidthC和SubHeightC是根据颜色格式设置的,并且可以分别表示图片中的色度分量的宽度与亮度分量的宽度之比,以及色度分量的高度与亮度分量的高度之比。例如,因为4:2:0颜色格式图像具有每四个亮度样本包括一个色度样本的结构,所以SubWidthC和SubHeightC两者都可以设置为2。对于另一个示例,因为4:4:4颜色格式图像具有每一个亮度样本包括一个色度样本的结构,所以SubWidthC和SubHeightC两者都可以设置为1。作为当前块的水平方向上的样本数的lfnstWidth和作为垂直方向上的样本数的lfnstHeight可以基于SubWidthC和SubHeightC被设置。当treeType为DUAL_TREE_CHROMA时,因为编译单元仅包括色度分量,所以色度编译块的水平方向上的样本数等于通过将作为亮度编译块的宽度的cbWidth除以SubWidthC而获得的值。类似地,色度编译块的垂直方向上的样本数等于通过将作为亮度编译块的高度的cbHeight除以SubHeightC而获得的值。当treeType为SINGLE_TREE或DUAL_TREE_LUMA时,因为编译单元包括亮度分量,所以lnfnstWidth和lfnstHeight可以分别设置为cbWidth和cbHeight。因为可以对其应用二次变换的块的最小条件是4×4,如果满足Min(lfnstWidth,lfnstHeight)>=4,则可以解析lfnst_idx[x0][y0]。

ii)sps_lfnst_enabled_flag==1

第二条件涉及指示是否可以启用或应用二次变换的标记值,并且当指示是否可以启用或应用二次变换的标记值(sps_lfnst_enabled_flag)被设置为1时,解码器可以解析lfnst_idx[x0][y0]语法元素。

具体地说,可以以高级语法RBSP指示二次变换。可以在SPS、PPS、VPS、图块组报头和切片报头中的至少一个中包括具有1比特大小的标记,其指示是否可以启用和应用二次变换。当sps_lfnst_enabled_flag为1时,其指示在编译单元语法中存在lfnst_idx[x0][y0]语法元素。当sps_lfnst_enabled_flag为0时,其指示lfnst_idx[x0][y0]语法元素不存在于编译单元语法中。

iii)CuPredMode[x0][y0]==MODE_INTRA

第三条件涉及预测模式,并且二次变换可以仅应用于帧内预测块。因此,当当前块是帧内预测块时,解码器可以解析lfnst_idx[x0][y0]语法元素。

iv)IntraSubPartitionsSplitType==ISP_NO_SPLIT

第四条件涉及是否应用ISP预测方法。当没有将ISP应用于当前块时,解码器可以解析lfnst_idx[x0][y0]语法元素。

具体地,如参考图11所述,当当前CU被分区成小于CU的大小的多个变换单元时,二次变换可以不被应用于分区的变换单元。在这种情况下,作为与二次变换有关的语法元素的lfnst_idx[x0][y0]可以被设置为0同时不被解析。当用于当前CU的变换树被分割成小于CU的大小的多个变换单元时,可以包括ISP预测被应用于当前编译单元的情况。当帧内预测被应用于当前编译单元时,ISP预测方法可以是用于根据预设的分割方法将变换树分割为小于CU的大小的多个变换单元的预测方法。可以在编译单元级别处指示ISP预测模式,并且可以基于其设置变量IntraSubPartitionsSplitType。在这种情况下,当IntraSubPartitionsSplitType为ISP_NO_SPLIT时,其指示ISP未应用于当前块。在编译单元级别处指示二次变换,但是可以在变换单元级别处应用实际的二次变换。因此,当将变换树分割为多个变换单元时,将相同的二次变换核应用于所有分割的变换单元可能是没有效率的。另外,由于其中在变换单元级别处生成预测样本的帧内预测的特性,当将变换树分割为多个变换单元时,与不将变换树分割时相比,预测的精度可能更高。因此,如果将变换树分割为多个变换单元,则即使不将二次变换应用于分割的多个变换单元,也很有可能有效地压缩残差信号的能量。另外,当当前CU的大小大于亮度最大变换块大小(MaxTbSizeY)(即,cbWidth>MaxTbSizeY||cbHeight>MaxTbSizeY)时,变换树可被分割为小于CU的大小的多个变换单元。尽管在图15中未图示,即使当前CU的大小大于亮度最大变换块大小(MaxTbSizeY),也可以不应用二次变换。因此,第四条件可以被表达为IntraSubPartitionsSplitType==ISP_NO_SPLIT&&cbWidth<=MaxTbSizeY&&cbHeight<=MaxTbSizeY。在这种情况下,MaxTbSizeY可以是以2的指数形式表达的自然数。MaxTbSizeY可以通过被包括在高级语法RBSP(诸如SPS、PPS、切片报头和图块组报头)中来指示,或者编码器和解码器可以使用相同的预设值。例如,预设值可以是64(2^6)。

v)!intra_mip_flag[x0][y0]

第五条件涉及帧内预测方法。当基于矩阵的帧内预测(MIP)未应用于当前编译单元预测时,解码器可以解析lfnst_idx[x0][y0]语法元素。

具体地,可以将MIP用作帧内预测的方法,并且可以在编译单位级别处通过intra_mip_flag[x0][y0]来指示是否应用MIP。当Intra_mip_flag[x0][y0]为1时,可以指示MIP被应用于当前编译单元的预测,并且可以通过将当前块周围的重构样本与预设矩阵相乘来执行预测。因为当应用MIP时显出与执行定向或非定向预测的一般帧内预测不同的残差信号属性,所以当应用MIP时可能不会将二次变换应用于变换块。

vi)numSigCoeff>((treeType==SINGLE_TREE)?2:1)

第六条件与treeType和系数有关。

具体地,当treeType为SINGLE_TREE时,当变量numSigCoeff的值大于2时,二次变换可以被应用于当前块,并且解码器可以解析lfnst_idx[x0][y0]语法元素。

当treeType为DUAL_TREE_LUMA或DUAL_TREE_CHROMA时,当变量numSigCoeff的值大于1时,二次变换可以被应用于当前块,并且可以解析lfnst_idx[x0][y0]。在这种情况下,numSigCoeff指代表示当前编译单元中存在的有效系数数量的变量。当numSigCoeff小于阈值时,即使二次变换被应用于当前块,也可能无法执行有效编码。当有效系数的数量小时,与系数编译所需的比特相比,用信号发送lfnst_idx[x0][y0]的开销可能相对较大。在这种情况下,有效系数可以指代非零系数。在下文中,本说明书中描述的有效系数可以意指如上所述的非零系数。

vii)numZeroOutSigCoeff==0

第七条件涉及存在于特定位置处的有效系数。

具体地,当二次变换被应用于当前块时,在解码器中量化的变换系数在特定位置处可以总为0。因此,因为当在特定位置处存在非零(量化)系数时二次变换不被应用于当前块,所以可以取决于特定位置处的有效系数的数量确定是否要解析lfnst_idx[x0][y0]。例如,当numZeroOutSigCoeff不为0时,这意味着在特定位置处存在有效系数,并且因此lfnst_idx[x0][y0]可以被设置为0同时无需解析。另一方面,当numZeroOutSigCoeff为0时,这意味着在特定位置处不存在有效系数,并且因此可以解析lfnst_idx[x0][y0]。

图16是图示根据本发明的实施例的residual_coding语法结构的图。

residual_coding语法结构可以是与量化系数有关的语法结构,并且可以接收x0、y0、log2TbWidth和log2TbHeight作为输入。在这种情况下,x0和y0可以指代(x0,y0),其是变换块的左上坐标,log2TbWidth可以是通过取以2为底的与变换块的宽度的对数而获得的值,并且log2TbHeight可以是通过取以2为底的与变换块的高度的对数而获得的值。可以以子块为单位对变换块中的系数进行编译,并且可以基于包括sig_coeff_flag的几个语法元素来确定每个子块中的系数值。在这种情况下,子块的单位的系数可以被表达为系数组(CG)。sig_coeff_flag[xC][yC]可以指示当前变换块中的位置(xC,yC)的系数值是否为0。如果sig_coeff_flag[xC][yC]为1,则可以指示位置的系数值不为0,并且如果sig_coeff_flag[xC][yC]为0,则可以指示该位置的系数值为0。在residual_coding中,扫描顺序中的最后有效系数的x坐标值和y坐标值可以被指示。可以基于扫描顺序中的最后有效系数的x坐标值和y坐标值来确定包括扫描顺序中的最后有效系数的子块的索引lastSubBlock。子块的索引也可以基于扫描顺序被进行索引。扫描顺序可以是参考图13描述的右上对角扫描顺序。在子块单位系数编译中,可以基于子块的左上坐标(xS<

当sig_coeff_flag[xC][yC]的值为1(即,位置(xC,yC)的系数不为0)并且变换跳过不被应用于当前块时(即,!transform_skip_flag[x0][y0]),可以计数numSigCoeff。当变换跳过被应用时,因为二次变换可能不被应用,所以用于解析lfnst_idx[x0][y0]的numSigCoeff可以对没有对其应用变换跳过的块的有效系数的数量进行计数。

另外,如参考图15所述,当二次变换被应用于变换块时,在变换块内的特定区域中可能不存在有效系数。因此,numZeroOutSigCoeff计数器对特定区域中存在的有效系数(numZeroOutSigCoeff)的数量进行计数,并且当numZeroOutSigCoeff不为0时,可能不会解析lfnst_idx[x0][y0]。具体地,当二次变换被应用于变换块时,可以根据变换块的大小来确定其中不可能存在有效系数的区域。

例如,为了应用二次变换,当变换块的大小为4×4(即,log2TbWidth==2&&log2TbHeight==2)时,可以在变换块内以扫描顺序划分索引[0,7]区域和索引[8,15]区域,使得有效系数可以在[0,7]区域中存在并且不可以在[8,15]区域中存在。4×4变换块可以包括一个子块。因此,当变换块的大小是4×4时,当扫描位置是8或更大并且子块的索引是0时(即,n>=8&&i==0),可以计算有效系数的数量。在这种情况下,扫描顺序可以是右上对角扫描顺序。

对于另一示例,为了应用二次变换,当变换块的大小为8×8(即,log2TbWidth==3&&log2TbHeight==3)时有效系数可以仅存在于变换块中的第一子块中,而可能不会存在于其余子块中(例如,第二和第三子块)。即使在第一子块内,有效系数也可以以扫描顺序出现在索引[0,7]区域中,但是有效系数可能不存在于索引[8,15]区域中。因此,当变换块的大小为8×8时,当第一子块中的扫描位置为8或更大(即,n>=8&&i==0)或扫描位置存在于除了第一子块之外的其余子块中(例如,存在于第二和第三子块中,i==1||i==2)时,可以计数有效系数的数量。

最后,当变换的大小大于8×8时,有效系数可以仅存在于变换块的第一子块中,而可能不会存在于其余子块(例如,第二和第三子块)中。因此,当子块是第二或第三块时(即,i==1||i==2),可以计数有效系数的数量。与numSigCoeff计数器类似,仅当sig_coeff_flag[xC][yC]为1且transform_skip_flag[x0][y0]为0时,numZeroOutSigCoeff计数器才可以对有效系数的数量进行计数。在这种情况下,可以根据参考图13描述的右上对角扫描顺序对子块进行索引。

换句话说,因为在可能不存在有效系数的区域(特定区域)中存在非零系数的事实指示不执行二次变换,所以对有效系数进行计数以便于检查特定区域中是否存在非零系数。

图17是图示根据本发明的实施例的用于在编译单元级别处指示二次变换的方法的图。

如图15和图16中所述,可以在编译单元级别处通过lfnst_idx[x0][y0]语法元素来指示是否二次变换被应用,并且为了解析lfnst_idx[x0][y0],可能需要两个有效系数计数器(即,numSigCoeff计数器和numZeroOutSigCoeff计数器)。特别地,在numSigCoeff的情况下,因为numSigCoeff计数器不得不对在整个编译单元区域中存在的有效系数的数量进行计数,所以可能减少系数编译的吞吐量。因此,需要一种用于减少计数器数量或不使用计数器的方法。

图17中所图示的二次变换指示方法是一种不管numSigCoeff如何都能够解析lfnst_idx[x0][y0]的方法。换句话说,如果在图15中描述的条件i)、ii)、iii)、iv)、v)和vii)都被满足(如果全部为真),则解码器可以解析lfnst_idx[x0][y0]。此外,因为不参考numSigCoeff的值,所以可以不执行图16中描述的numSigCoeff计数器的操作。

在下面的本说明书中,将描述用于基于扫描顺序中的最后有效系数的位置信息来指示二次变换的方法。与有效系数的数量小时相似,当在扫描顺序中的最后有效系数的位置(扫描索引)小时,由于二次变换而导致的编译效率可能较低。因此,需要在不使用计数器的情况下基于扫描顺序中的最后有效系数的位置信息有效地指示二次变换。

(第一实施例)

图18是图示根据本发明的实施例的用于在编译单元级别处指示二次变换的方法的图。

图18是图示用于通过使用根据从residual_coding获得的扫描顺序中的最后有效系数的位置信息而不是numSigCoeff计数器来解析lfnst_idx[x0][y0]的方法的图。

参考图18,因为不使用numSigCoeff计数器,所以不必初始化numSigCoeff值,并且可以将与扫描顺序中的最后有效系数的位置有关的变量lfnstLastScanPos初始化为1。当lfnstLastScanPos值为1时,它指示扫描顺序中的最后有效系数的位置(扫描索引)小于阈值,或者该块中所有变换系数都为0。另一方面,当lfnstLastScanPos值为0时,其指示块中存在至少一个有效系数,并且扫描顺序中的最后有效系数的位置(扫描索引)等于或大于阈值。因此,如果lfnstLastScanPos值为1,则可能不解析lfnst_idx[x0][y0],并且如果lfnstLastScanPos值为0,则可以解析lfnst_idx[x0][y0]。另外,如果lfnstLastScanPos值是0,并且在图15中描述的条件i)、ii)、iii)、iv)、v)和vii)都满足(如果都为真),则可以解析lfnst_idx[x0][y0]。

换句话说,当当前块中存在至少一个有效系数并且在扫描顺序中的最后有效系数的位置(扫描索引)等于或大于阈值时,lfnst_idx[x0][y0]可以被解析。在这种情况下,如稍后所述,阈值可以是等于或大于0的整数。例如,假设阈值为1,则扫描顺序中的最后有效系数的位置(扫描索引)等于或大于阈值的事实可能意味着有效系数存在于块的左上以外的位置。即,除了在有效系数不存在于当前块中或仅存在于当前块的左上的情况下,即,仅当有效系数存在于当前块的左上以外的位置处时,可以解析lfnst_idx[x0][y0]。在当前块的左上以外的位置处存在有效系数的含义可以被表达为“LfnstDConly==0”。在本说明书中描述的块的左上可以意味着水平和垂直坐标的值是(0,0),可以指代以预设的扫描顺序(例如,右上对角顺序)的第一位置,或可以被称为DC。

图19是图示根据本发明的实施例的residual_coding语法结构的图。

图19图示参考上述图18描述的residual_coding语法结构,并且在residual_coding中,可以解析与扫描顺序中的最后有效系数的x坐标和y坐标有关的语法元素,使得可以设置LastSignificantCoeffX和LastSignificantCoeffY变量。LastSignificantCoeffX表示扫描顺序中最后有效系数的x坐标,并且LastSignificantCoeffY表示扫描顺序中最后有效系数的y坐标。基于LastSignificantCoeffX和LastSignificantCoeffY,可以确定作为扫描顺序中的最后有效系数的扫描索引的lastScanPos变量以及包括最后有效系数的子块的索引lastSubBlock。在这种情况下,如参考图16所描述的,当二次变换被应用于当前块时,仅第一子块可以具有有效系数。换句话说,当有效系数仅存在于第一子块中时,二次变换可以被应用。

例如,当在图14(a)的4×4大小的块中LastSignificantCoeffX为2且LastSignificantCoeffY为3时,可以确定lastScanPos是13。因为4×4大小的块可以由一个子块组成,所以可以确定包括最后有效系数的子块的索引lastSubBlock是0。又例如,图14(b)的8×8大小的块可以被划分成4×4大小的子块。具体地,在图14(b)中,可以将与x坐标0至3和y坐标0至3相对应的4×4块设置为第一子块,并且将与x坐标0至3和y坐标4相对应的4×4块设置为第二子块,可以将与x坐标4到7和y坐标0至3相对应的4×4块设置为第三子块,并且将与x坐标4至7和y坐标4至7相对应的4×4块设置为第四子块。在这种情况下,可以将第一子块进行索引为索引0,可以将第二子块进行索引为索引1,可以将第三子块进行索引为索引2,并且可以将第四子块进行索引为索引3。可以根据参考图13描述的右上对角扫描顺序来对子块进行索引。在这种情况下,当LastSignificantCoeffX是2并且LastSignificantCoeffY是3时,确定lastScanPos是13。因为lastScanPos是13,所以包括lastScanPos 13的子块是第一子块(即,子块索引0),并且因此可以将包括最后有效系数的子块的索引(lastSubBlock)确定为0。

基于上述的lastScanPos,可以确定lfnstLastScanPos。具体地,当变换块的宽度和高度为4或更大并且变换跳过不被应用于变换块时,可以如下面的等式1中那样设置lfnstLastScanPos。换句话说,当log2TbWidth>=2、log2TbHeight>=2,并且transform_skip_flag[x0][y0]为0时,可以如下面的等式1那样设置lfnstLastScanPos。在这种情况下,当transform_skip_flag[x0][y0]为0时,可能意味着该变换跳过不被应用于当前的变换块。具体地,本说明书中描述的标记transform_skip_flag[x0][y0]可以指示初次变换和二次变换是否被应用于变换块。例如,当transform_skip_flag[x0][y0]的值为1时,它可以指示初次变换和二次变换不被应用于变换块(即,变换跳过被应用),并且当transform_skip_flag[x0][y0]的值是0时,其可以指示初次变换和二次变换可以被应用于变换块(即,不应用变换跳过)。

[等式1]

lfnstLastScanPos=lfnstLastScanPos&&(lastScanPos<lfnstLastScanPosTh[cldx])

如上所述,可以将lfnstLastScanPos的初始值设置为1。

在等式1中,cIdx可以表示指示当前变换块的颜色分量的变量。例如,当cIdx为0时,其可以指示要在residual_coding中处理的变换块是亮度Y分量。当cIdx是1时,其可以指示要在residual_coding中处理的变换块是色度Cb分量,而当cIdx是2时,可以指示要被处理的变换块是色度Cr分量。可以取决于颜色分量将lastScanPos的阈值lfnstLastScanPosTh[cIdx]设置为不同值。

根据等式1,当紧邻的前一个lfnstLastScanPos为1且lastScanPos小于lfnstLastScanPosTh[cIdx]时,lfnstLastScanPos可以更新为1。另一方面,当紧邻的前一个lfnstLastScanPos为0或lastScanPos等于或大于lfnstScanPosTh[cIdx],则可以将lfnstLastScanPos更新为0。换句话说,如果编译单元中包括的所有变换块的lastScanPos小于阈值或所有变换块的系数都为0,则可以确定lfnstLastScanPos是1,并且lfnst_idx[x0][y0]可以被设置为0同时无需根据图18的lfnst_idx[x0][y0]的解析条件进行解析。lfnst_idx[x0][y0]不被解析且设置为0的事实指示二次变换不被应用于当前块。另一方面,如果编译单元中包括的任何一个变换块具有等于或大于阈值的lastScanPos,则可以确定lfnstLastScanPos为0,并且如果在图15中描述的条件i)、ii)、iii)、iv)、v)和vii)被全部满足(如果全部为真),则解码器可以解析lfnst_idx[x0][y0]。解码器可以解析lfnst_idx[x0][y0],以检查是否二次变换被应用于当前块,并且如果二次变换被应用,则可以检查/确定用于二次变换的变换核。

等式1中的lfnstLastScanPosTh[cIdx]是等于或大于0的预设整数值,并且编码器和解码器两者可以使用相同的值。另外,相同的阈值可以用于所有颜色分量。在这种情况下,可以如下面的等式2那样设置lfnstLastScanPos。本说明书中描述的编译单元可以包括多个编译块,并且可以存在与每个编译块相对应的变换块。变换块可以是具有亮度和色差分量的变换块。具体地,变换块可以是Y变换块、Cb变换块或Cr变换块。在这种情况下,可以针对与每个编译块相对应的每个变换块来确定是否解析在本说明书中描述的lfnst_idx[x0][y0]。即,当Y变换块、Cb变换块和Cr变换块中的任何一个满足本说明书中描述的条件时,lfnst_idx[x0][y0]可以被解析。

[等式2]

lfnstLastScanPos=lfnstLastScanPos&&(lastScanPos<lfnstLastScanPosTh)

lfnstLastScanPosTh是等于或大于0的预设整数值,并且编码器和解码器两者都可以使用相同的值。例如,lfnstLastScanPosTh可以为1。即,当lastScanPos为1或更大时,可以将lfnstLastScanPos更新为0,并可以解析lfnst_idx[x0][y0]。在这种情况下,因为阈值lfnstLastScanPosTh是整数值,所以lastScanPos为1或更大的情况可以具有与其中lastScanPos大于0的情况相同的含义。作为本发明的示例,其中阈值为1的情况已经被描述,然而,本发明不限于此。

换句话说,可以基于lastScanPos确定是否解析lfnst_idx[x0][y0]。具体地,如上所述,当二次变换被应用时,扫描顺序中的最后有效系数可以仅存在于变换块的第一子块中。因此,当包括扫描顺序中最后有效系数的子块的索引lastSubBlock(由lastScanPos指示的索引所位于的位置)为0,变换块的宽度为4或更大(log2TbWidth>=2),变换块的高度为4或更大(log2TbHeight>=2),transform_skip_flag[x0][y0]为0(不应用转换跳过),并且lastScanPos大于0(lastScanPos为1或更大)时,lfnst_idx[x0][y0]可以被解析。可以如下面的等式3所示进行表达。

[等式3]

lastSubBlock==0&&log2TbWidth>=2&&log2TbHeight>=2&&!transform_skip_flag[x0][y0][cldx]&&lastScanPos>0

同时,在上述第一实施例中,因为numSigCoeff计数器不被用于解析lfnst_idx[x0][y0],所以可以不计算有效系数的数量numSigCoeff。

(第二实施例)

图20是图示根据本发明的另一实施例的residual_coding语法结构的图。

图20是图示对于residual_coding除了图19之外还接收treeType变量并根据treeType设置lastScanPos的阈值的方法的图。

当变换块的宽度和高度为4或更大并且变换跳过不被应用于变换块时,可以如下面的等式4那样设置lfnstLastScanPos。换句话说,当log2TbWidth>=2,log2TbHeight>=2,并且transform_skip_flag[x0][y0]为0时,可以如下面的等式4那样设置lfnstLastScanPos。在这种情况下,当transform_skip_flag[x0][y0]为0时,可能意味着该变换跳过没有被应用于当前的变换块。

[等式4]

lfnstLastScanPosTh=(treeType==SINGLE_TREE)?val1:((treeType==DUAL_TREE_LUMA)?val2:val3)

lfnstLastScanPos=lfnstLastScanPos&&(lastScanPos<lfnstLastScanPosTh)

在等式4中,lfnstLastScanPosTh意指lastScanPos的阈值,并且可以根据treeType设置该值。当treeType为SINGLE_TREE,DUAL_TREE_LUMA和DUAL_TREE_CHROMA时,lfnstLastScanPosTh可以分别被设置为val1、val2和val3。当紧邻的前一个lfnstLastScanPos为1并且lastScanPos小于lfnstLastScanPosTh时,lfnstLastScanPos可以被更新为1。另一方面,当紧邻的在前的lfnstLastScanPos为0或lastScanPos等于或大于lfnstScanPosTh时,lfnstLastScanPos可以被更新为0。

结果,在等式4中,当编译单元中包括的所有变换块的lastScanPos小于阈值或者所有变换块的系数都为0时,可以确定lfnstLastScanPos为1,并且lfnst_idx[x0][y0]可以被设置为0同时不根据图18的lfnst_idx[x0][y0]的解析条件被解析。这指示二次变换未被应用于当前块。另一方面,如果编译单元中包括的变换块的任何一个的lastScanPos等于或大于阈值,则可以确定lfnstLastScanPos为0,并且如果在图15中描述的i)、ii)、iii)、iv)、v)和vii)全部满足(如果全部为真),则解码器可以解析lfnst_idx[x0][y0]。解码器可以解析lfnst_idx[x0][y0],以检查是否二次变换被应用于当前块,并且如果应用二次变换,则可以检查/确定用于二次变换的变换核。

val1、val2和val3是等于或大于0的预设整数值,并且编码器和解码器都可以使用相同的值。当treeType为SINGLE_TREE时,亮度和色度分量两者都被包括,并且因此lfnstLastScanPosTh的值val1可以被表达为val2和val3之和。

在上述第二实施例中,因为不将numSigCoeff计数器用于解析lfnst_idx[x0][y0],所以可以不计数有效系数的数量numSigCoeff。

(第三实施例)

图21是图示根据本发明的另一实施例的用于在编译单元级别处指示二次变换的方法的图。

参考图21,可以通过使用从residual_coding获得的扫描顺序中的最后有效系数的位置信息而不是numSigCoeff计数器来解析lfnst_idx[x0][y0]。

因为不使用numSigCoeff计数器,所以不必初始化numSigCoeff,并且可以将与扫描顺序中的最后有效系数的位置有关的变量lfnstLastScanPos初始化为0。图21的lfnstLastScanPos变量可以是通过将包括在编译单元中的变换块的lastScanPos相加而获得的值。在这种情况下,如果lfnstLastScanPos大于阈值并且图15中描述的条件i)、ii)、iii)、iv)、v)和vii)全部满足(如果全部为真),则解码器可以解析lfnst_idx[x0][y0]。解码器可以解析lfnst_idx[x0][y0],以检查是否二次变换被应用于当前块,并且如果应用二次变换,则可以检查/确定用于二次变换的变换核。另一方面,当lfnstLastScanPos小于或等于阈值时,可以将lfnst_idx[x0][y0]设置为0同时不被解析。这指示未应用二次变换。

可以根据treeType设置阈值。当treeType为SINGLE_TREE、DUAL_TREE_LUMA、DUAL_TREE_CHROMA时,阈值可以分别设置为Th1、Th2和Th3。Th1、Th2和Th3是等于或大于0的预设整数值,并且编码器和解码器两者都可以使用相同的值。当treeType为SINGLE_TREE时,亮度和色度分量两者都被包括,并且因此作为阈值的Th1可以被表达为作为阈值的Th2和Th3之和。

图22是图示根据本发明的另一实施例的residual_coding语法结构的图。

图22图示参考图21描述的residual_coding语法结构,并且当变换块的宽度和高度为4或更大并且变换跳过不被应用于变换块时,可以如下面的等式5中那样设置lfnstLastScanPos。换句话说,当log2TbWidth>=2、log2TbHeight>=2,并且transform_skip_flag[x0][y0]为0时,可以如下面的等式5那样设置lfnstLastScanPos。在这种情况下,当transform_skip_flag[x0][y0]为0时,可能意味着该变换跳过未应用于当前的变换块。

[等式5]

lfnstLastScanPos=lfnstLastScanPos+lastScanPos

在上面的等式5中,lfnstLastScanPos是通过将包括在编译单元中的变换块的所有lastScanPos相加而获得的值。如图21中所描述的,可以通过将lfnstLastScanPos与阈值进行比较来确定是否解析lfnst_idx[x0][y0]。

在上述第三实施例中,因为不将numSigCoeff计数器用于解析lfnst_idx[x0][y0],所以可以不计数有效系数的数量numSigCoeff。

另一方面,编译单元可以包括将与编译块相同的大小作为根节点,通过变换树分割的变换单元。在这种情况下,变换单元可以包括用于每个颜色分量的变换块。当在编译单元级别处指示二次变换时,在对包括在编译单元中的所有变换块执行残差编译之后,可以基于系数信息来解析lfnst_idx[x0][y0]。在另一个实施例中,可以在变换单元级别处指示二次变换。当在变换单元级别处指示二次变换时,编译单元中包括的每个变换单元可以使用不同的lfnst_idx[x0][y0]。因此,编码器可以找到针对每个变换单元优化的lfnst_idx[x0][y0],并且可以进一步改善编码效率。另外,当在编译单元级别处指示二次变换并且编译单元包括四个变换单元时,针对包括在四个变换单元中的所有变换块的残差编译要被处理以便于lfnst_idx[x0][y0]被解析。即,即使解码器通过用于第一变换单元的残差编译获得变换系数,因为解码器没有获得lfnst_idx[x0][y0]值,所以解码器不能对第一变换单元执行逆变换。这不仅可能增加解码器的缓冲器大小,而且可能导致解码器中过多的延迟时间。

图18至图22中描述的第一至第三实施例即使在变换单元级别处指示二次变换时也可以被应用。当在编译单元级别处指示二次变换时,根据第一至第三实施例,可以基于编译单元中包括的变换块的扫描顺序中的最后有效系数的位置来确定是否解析lfnst_idx[x0][y0]。另外,当在变换单元级别处指示二次变换时,根据第一至第三实施例,可以基于变换单元中包括的变换块的扫描顺序中的最后有效系数的位置来确定是否解析lfnst_idx[x0][y0]。

在下文中,将描述在变换单元级别处指示二次变换的具体方法。

图23是图示根据本发明的实施例的用于在变换单元级别处指示二次变换的方法的图。

参考图23,可以通过使用从residual_coding获得的扫描顺序中的最后有效系数的位置信息而不是numSigCoeff计数器来解析lfnst_idx[x0][y0]。

首先,在执行residual_coding之前,可以将与扫描顺序中的最后有效系数的位置有关的变量lfnstLastScanPos初始化为1。当lfnstLastScanPos变量为1时,可以指示变换单元中包括的所有变换块的扫描顺序中的最后有效系数的位置(扫描索引)小于阈值或该块中的所有变换系数都为0。当lfnstLastScanPos变量为0时,可以指示针对包括在变换单元中的一个或多个变换块,在块中存在一个或者多个有效系数,并且扫描顺序中的最后有效系数的位置(扫描索引)等于或大于阈值。根据上述第一实施例,如果基于变换块的扫描顺序中的最后有效系数的位置来设置的lfnstLastScanPos为0,并且稍后要描述的条件i)、ii)、iii)、iv)、v)和vi)都满足(如果都为真),则解码器可以解析lfnst_idx[x0][y0]。

lfnst_idx[x0][y0]语法元素解析条件

i)Min(lfnstWidth,lfnstHeight)>=4

首先,第一条件与块大小有关。当块的宽度和高度为4个像素或更多时,解码器可以解析lfnst_idx[x0][y0]语法元素。

具体地,解码器可以检查可以对其应用二次变换的块大小条件。变量SubWidthC和SubHeightC根据颜色格式而设置,并且可以分别表示图片中的色度分量的宽度与亮度分量的宽度之比,以及色度分量的高度与亮度分量的高度之比。例如,因为4:2:0颜色格式图像具有每四个亮度样本包括一个色度样本的结构,所以SubWidthC和SubHeightC两者都可以设置为2。对于另一个示例,因为4:4:4颜色格式图像具有每一个亮度样本包括一个色度样本的结构,所以SubWidthC和SubHeightC两者都可以设置为1。作为当前块的水平方向上的样本数的lfnstWidth和作为垂直方向上的样本数的lfnstHeight可以基于SubWidthC和SubHeightC被设置。当treeType为DUAL_TREE_CHROMA时,因为变换单元仅包含色度分量,所以色度变换块的水平方向上的样本数等于将作为亮度变换块的宽度tbWidth除以SubWidthC而获得的值。类似地,色度变换块的垂直方向上的样本数等于通过将作为亮度变换块的高度的tbHeight除以SubHeightC而获得的值。当treeType为SINGLE_TREE或DUAL_TREE_LUMA时,因为变换单元包括亮度分量,所以lnfnstWidth和lfnstHeight可以分别设置为tbWidth和tbHeight。因为可以对其应用二次变换的块的最小条件是4×4,如果满足Min(lfnstWidth,lfnstHeight)>=4,则可以解析lfnst_idx[x0][y0]。

ii)sps_lfnst_enabled_flag==1

第二条件涉及指示是否可以启用或应用二次变换的标记值,并且当指示是否可以启用或应用二次变换的标记值(sps_lfnst_enabled_flag)被设置为1时,解码器可以解析lfnst_idx[x0][y0]。

具体地,可以以高级语法RBSP来指示二次变换。可以在SPS、PPS、VPS、图块组报头和切片报头中的至少一个中包括具有1比特大小的指示是否可以启用或应用二次变换的标记。当sps_lfnst_enabled_flag为1时,其指示在变换单元语法中存在lfnst_idx[x0][y0]语法元素。当sps_lfnst_enabled_flag为0时,其指示lfnst_idx[x0][y0]语法元素不存在于变换单元语法中。

iii)CuPredMode[x0][y0]==MODE_INTRA

第三条件涉及预测模式,并且二次变换可以仅应用于帧内预测块。因此,当当前块是帧内预测块时,解码器可以解析lfnst_idx[x0][y0]。

iv)IntraSubPartitionsSplitType==ISP_NO_SPLIT

第四条件涉及是否应用ISP预测方法。当没有将ISP应用于当前块时,解码器可以解析lfnst_idx[x0][y0]语法元素。

具体地,如参考图11所描述的,当当前CU被分区成小于CU的大小的多个变换单元时,二次变换可以不被应用于分区的变换单元。在这种情况下,作为与二次变换有关的语法元素的lfnst_idx[x0][y0]可以被设置为0同时不被解析。当用于当前CU的变换树被分割成小于CU的大小的多个变换单元时,ISP预测可以被应用于当前编译单元。当帧内预测被应用于当前编译单元时,ISP预测方法可以是用于根据预设的分割方法将变换树分割为小于CU的大小的多个变换单元的预测方法。可以在编译单元级别处指示ISP预测模式,并且可以基于其设置变量IntraSubPartitionsSplitType。在这种情况下,当IntraSubPartitionsSplitType为ISP_NO_SPLIT时,其指示ISP未应用于当前块。由于其中在变换单元级别处生成预测样本的帧内预测的特性,与不分割变换树时相比,当将变换树分割为多个变换单元时,预测的精度可能更高。因此,即使不将二次变换应用于分割的多个变换单元,也很有可能有效地压缩残差信号的能量。

v)!intra_mip_flag[x0][y0]

第五条件涉及帧内预测方法。当基于矩阵的帧内预测(MIP)未应用于当前编译单元预测时,解码器可以解析lfnst_idx[x0][y0]语法元素。

具体地说,基于矩阵的帧内预测(MIP)可以被用作帧内预测的方法,并且可以在编译单元级别处通过intra_mip_flag[x0][y0]来指示是否应用MIP。当Intra_mip_flag[x0][y0]为1时,可以指示MIP被应用于当前编译单元的预测,并且可以通过将当前块周围的重构样本与预设矩阵相乘来执行预测。因为当应用MIP时显出与执行定向或非定向预测的一般帧内预测不同的残差信号属性,所以当应用MIP时可能不会将二次变换应用于变换块。

vi)numZeroOutSigCoeff==0

第六条件涉及存在于特定位置处的有效系数。

具体地,当二次变换被应用于当前块时,在解码器中量化的变换系数在特定位置处可以总为0。因此,因为当在特定位置处存在非零量化系数时不应用二次变换,所以可以根据特定位置处的有效系数的数量来解析lfnst_idx[x0][y0]。例如,当numZeroOutSigCoeff不为0时,意味着在特定位置处存在有效系数,并且因此lfnst_idx[x0][y0]可以被设置为0同时无需解析。另一方面,当numZeroOutSigCoeff为0时,意味着在特定位置处不存在有效系数,并且因此可以解析lfnst_idx[x0][y0]。

当基于上述第一实施例在变换单元级别处指示是否二次变换被应用于当前块时,可以遵循图19中描述的residual_coding方法。如果包括在变换单元中的所有变换块的lastScanPos小于根据图19中描述的用于确定lfnstLastScanPos的等式1的阈值或者所有变换块的系数都为0,则可以确定lfnstLastScanPos为1,并且可以将lfnst_idx[x0][y0]设置为0同时无需进行解析。这指示二次变换未被应用于当前块。另一方面,如果包括在变换单元中的变换块中的任何一个具有等于或大于阈值的lastScanPos,则可以确定lfnstLastScanPos为0,并且如果图23中所描述的条件i)、ii)、iii)、iv)、v)和vii)全部满足(如果全部为真),则解码器可以解析lfnst_idx[x0][y0]。解码器可以解析lfnst_idx[x0][y0],以检查是否二次变换被应用于当前块,并且当二次变换被应用时,可以确认/确定用于二次变换的变换核。

当基于上述第二实施例在变换单元级别处指示是否二次变换被应用时,图23中描述的变换单元语法结构可以被应用,并且图20中描述的residual_coding方法可以被使用。当根据用于确定图20中描述的lfnstLastScanPos的等式4,包括在变换单元中的所有变换块的lastScanPos小于阈值或者所有变换块中的系数都为0时,可以确定lfnstLastScanPos为1,并且lfnst_idx[x0][y0]可以设置为0同时无需解析。这指示二次变换未被应用于当前块。另一方面,如果包括在变换单元中的变换块中的任何一个具有等于或大于阈值的lastScanPos,则可以确定lfnstLastScanPos为0,并且如果图23中描述的条件i)、ii)、iii)、iv)、v)和vi)全部满足(如果全部为真),则解码器可以解析lfnst_idx[x0][y0]。解码器可以解析lfnst_idx[x0][y0]以检查是否二次变换被应用于当前块,并且当二次变换被应用时,可以检查/确定用于二次变换的变换核。

图24是图示根据本发明的另一实施例的用于在变换单元级别处指示二次变换的方法的图。

根据上述第三实施例,可以通过使用从residual_coding获得的扫描顺序中的最后有效系数的位置信息而不是numSigCoeff计数器来解析lfnst_idx[x0][y0]。

在执行residual_coding之前,可以将与扫描顺序中的最后有效系数的位置有关的变量lfnstLastScanPos初始化为0。变量lfnstLastScanPos可以是通过将变换单元中包括的变换块的lastScanPos相加而获得的值。在这种情况下,如果lfnstLastScanPos大于阈值并且图23中所描述的条件i)、ii)、iii)、iv)、v)和vi)全部满足(如果全部为真),则解码器可以解析lfnst_idx[x0][y0]。解码器可以解析lfnst_idx[x0][y0],以检查是否二次变换被应用于当前块,并且如果二次变换被应用,则可以检查/确定用于二次变换的变换核。另一方面,当lfnstLastScanPos小于或等于阈值时,可以将lfnst_idx[x0][y0]设置为0同时不进行解析。这指示未应用二次变换。

可以根据treeType设置阈值。当treeType为SINGLE_TREE、DUAL_TREE_LUMA、DUAL_TREE_CHROMA时,阈值可以分别设置为Th1、Th2和Th3。Th1、Th2和Th3是等于或大于0的预设整数值,并且编码器和解码器两者都可以使用相同的值。当treeType为SINGLE_TREE时,亮度和色度分量两者都被包括,并且因此作为阈值的Th1可以被表达为作为阈值的Th2和Th3之和。

当基于上述第三实施例在变换单元级别处指示是否二次变换被应用时,图22中描述的residual_coding方法可以被使用。根据图22中描述的用于确定lfnstLastScanPos的等式5,变量lfnstLastScanPos可以被设置为通过将包括在变换单元中的变换块的所有lastScanPos相加而获得的值。另外,可以通过将lfnstLastScanPos与阈值进行比较来确定是否解析lfnst_idx[x0][y0]。

另一方面,当在变换单元级别处指示二次变换时,编译单元中包括的变换单元之间的相关性可能很高。这是因为用于预测的方法是在编译单元级别处被确定。因此,仅在包括在编译单元中的第一变换单元中用信号发送lfnst_idx[x0][y0],并且可以将用信号发送的lfnst_idx[x0][y0]与其余的变换单元共享。即,仅当指示变换单元的索引的subTuIndex为0时,才可以通过使用上述第一至第三实施例来解析lfnst_idx[x0][y0]。如果subTuIndex大于0,则相应的变换单元不解析lfnst_idx[x0][y0],并且可以使用共享的第一变换单元的lfnst_idx[x0][y0]的值。

另一方面,可以使用用于对有效系数进行计数的计数器,但是可以仅考虑存在于左上的变换块的子块中的有效系数来确定解码器是否解析lfnst_idx[x0][y0]。这是为了减少运算量。

另一方面,与在编译单元级别处指示二次变换相比,当在变换单元级别处指示二次变换时,可以减少解码器的延迟时间,但是可能发生另一个延迟时间。例如,即使在变换单元级别处指示二次变换,在对亮度变换系数、Cb变换系数和Cr变换系数的编译都被完成之后,才指示二次变换。因此,即使全部完成亮度变换系数的编译(处理),也可能在完成Cb变换系数和Cr变换系数的编译(处理)之后执行用于亮度变换系数的逆变换处理。这导致解码器的另一个延迟时间。

在下文中,将给出用于最小化解码器的延迟时间的二次变换指示方法的描述。

(第四实施例)

以用于最小化解码器的延迟时间的二次变换指示方法的示例为例,在变换单元级别处指示二次变换,但是可能存在在亮度变换系数编译之前用于解析与二次变换有关的语法元素lfnst_idx[x0][y0]的方法。因此,解码器可以在亮度变换系数编译完成之后立即对亮度变换系数执行逆变换处理,而无需等待Cb变换系数和Cr变换系数编译。类似地,解码器可以在完成Cb变换系数编译之后立即对Cb变换系数执行逆变换处理,而无需等待Cr变换系数编译。此二次变换指示方法可以使解码器的延迟时间最小化并且可以解决流水线问题。

图25是图示根据本发明的实施例的编译单元语法的图。

参考图25,因为在变换单元级别处指示二次变换,所以与二次变换有关的语法lfnst_idx[x0][y0]不在编译单元级别处被解析,并且可以在被transform_tree分割的变换单元级别处被解析。

图26是图示根据本发明的另一实施例的用于在变换单元级别处指示二次变换的方法的图。

参考图26,可以在变换单元级别处指示二次变换指示方法,并且可以在亮度和色度变换系数编译(residual_coding)之前首先解析作为与二次变换有关的语法元素的lfnst_idx[x0][y0]。例如,当在获取变换系数之前首先解析lfnst_idx[x0][y0]时,一旦完成对颜色分量Y、Cb和Cr中的每个的系数编译,对Y、Cb和Cr变换系数的逆变换就可以被处理。例如,一旦完成对Y分量的变换系数编译,就可以执行对亮度(Y)变换系数的逆变换。类似地,一旦完成针对Cb分量的变换系数编译(residual_coding),就可以执行对Cb变换系数的逆变换,并且一旦完成针对Cr分量的变换系数编译(residual_coding),则可以执行对Cr变换系数的逆变换。

当在针对Y、Cb、Cr的变换系数编译(residual_coding)之后解析lfnst_idx[x0][y0]时,即使完成针对Y的变换系数编译(residual_coding),如果未完成/处理针对Cb、Cr的变换系数编译(residual_coding)也不可以执行/处理对Y变换系数的逆变换。因此,即使完成针对Y的变换系数编译(residual_coding),解码器也可能不对Y变换系数执行逆变换,直到完成针对其他分量Cb和Cr的变换系数编译(residual_coding),这可能导致不必要的延迟时间。但是,如上所述,如果在变换系数编译(residual_coding)之前首先解析lfnst_idx[x0][y0],因为完成针对颜色分量中的每个的变换系数编译(residual_coding)之后可以立即对颜色分量Y、Cb和Cr的每个的变换系数执行逆变换,所以存在使解码器的延迟时间最小化的效果。

在transform_unit()语法结构中,可以解析tu_cbf_luma[x0][y0]、tu_cbf_cb[x0][y0]、tu_cbf_cr[x0][y0]、transform_skip_flag[x0][y0]等。

具体地,tu_cbf_luma[x0][y0]是指示当前亮度变换块是否包括一个或多个非零变换系数的元素。如果tu_cbf_luma[x0][y0]为1,则可以指示当前亮度变换块包括一个或多个非零变换系数。如果tu_cbf_luma[x0][y0]为0,则可以指示当前亮度变换块的所有变换系数都为0。tu_cbf_cb[x0][y0]是指示当前色度Cb变换块是否包括一个或多个非零变换系数的元素。如果tu_cbf_cb[x0][y0]为1,则可以指示当前色度Cb变换块包括一个或多个非零变换系数。如果tu_cbf_cb[x0][y0]为0,则可以指示当前Cb变换块的所有变换系数都为0。tu_cbf_cr[x0][y0]是指示当前色度Cr变换块是否包括一个或多个非零变换系数的元素。如果tu_cbf_cr[x0][y0]为1,则可以指示当前色度Cr变换块包括一个或多个非零变换系数。如果tu_cbf_cr[x0][y0]为0,则可以指示当前色度Cr变换块的所有变换系数都为0。transform_skip_flag[x0][y0]是与变换跳过有关的语法元素。如果transform_skip_flag[x0][y0]为1,则可以指示逆变换未应用于亮度变换块。如果transform_skip_flag[x0][y0]为0,则可以指示由另一语法元素确定是否将逆变换应用于亮度变换块。

作为参考图26的二次变换指示方法的实施例,基于扫描顺序中的最后有效系数的位置,而不是基于非零变换系数(有效系数)的数量,可以解析与二次变换有关的语法元素lfnst_idx[x0][y0]。

首先,lfnstLastScanPos变量可以通过被初始化为1来被设置。如参考图23所述,变量lfnstLastScanPos可以指示当前变换单元中包括的变换块的扫描顺序中的最后有效系数的位置信息。具体地,当lfnstLastScanPos为1时,其可以指示用于包括在变换单元中的所有变换块的扫描顺序中的最后有效系数的位置(扫描索引)小于阈值,或者指示块中的所有变换系数都为0。当lfnstLastScanPos为0时,其可以指示用于变换单元中包括的一个或多个变换块的块中存在一个或多个有效系数,并且扫描顺序中的最后有效系数的位置(扫描索引)等于或大于阈值。

接下来,变量numZeroOutSigCoeff可以通过被初始化为0来被设置。当二次变换被应用于变换块时,有效系数可能不会存在于扫描顺序的特定位置处。因此,变量numZeroOutSigCoeff可以指示有效系数是否存在于特定位置处,并且基于此,可以检查是否二次变换被应用。例如,当二次变换被应用于变换块时,假定仅最多允许16个有效系数。在4×4和8×8大小的变换块中,有效系数可能存在于扫描顺序中的索引[0,7]区域中(最多允许8个非零变换系数)。另一方面,在大小不是4×4和8×8的变换块中,有效系数可能存在于扫描顺序中的索引[0,15]区域中(最多允许16个非零变换系数)。因此,如果在扫描顺序中的最后有效系数的位置(扫描索引)存在于上述可能存在有效系数的区域之外,则解码器可以清楚地识别二次变换未被应用于当前变换块。

关于在系数编译(residual_coding)之前是否解析与二次变换lfnst_idx[x0][y0]有关的语法元素,可以基于扫描顺序中的最后有效系数的位置(扫描索引)来确定。因此,解码器可以在系数编译(residual_coding)之前处理与扫描顺序中的最后有效系数的位置有关的信息。

具体地说,当当前亮度变换块包括一个或多个有效系数(tu_cbf_luma[x0][y0]==1)并且变换跳过不被应用于当前亮度变换块时(transform_skip_flag[x0][y0]==0)时,可以处理last_significant_pos,其是与亮度的扫描顺序中的最后有效系数的位置有关的语法结构。

当tu_cbf_luma[x0][y0]的值为0(tu_cbf_luma[x0][y0]==0)时,其指示相应变换块的所有系数都为0,这转而指示系数编译(residual_coding)没有被执行。因此,不必对扫描顺序中的最后有效系数的位置信息进行处理。

当transform_skip_flag[x0][y0]的值为1时,其可以指示逆变换未被应用于当前亮度变换块。因此,可以不基于扫描顺序中的最后有效系数的位置信息来执行系数编译(residual_coding)。

当当前色度Cb变换块包括一个或多个有效系数(tu_cbf_cb[x0][y0]==1)时,作为色度Cb变换块的扫描顺序中的与除了0以外的最后有效系数的位置有关的语法结构的last_significant_pos可以被处理。last_significant_pos语法结构可以接收作为变换块的左上坐标的(x0,y0)、通过取以2为底的与变换块的宽度的对数而获得的值、通过取以2为底的与变换块的高度的对数而获得的值以及作为指示变换块是哪个颜色分量的变量的cIdx作为输入。例如,当cIdx为0时,可以表示亮度Y变换块,当cIdx为1时,可以表示色度Cb变换块,而当cIdx为2时,可以表示色度Cr变换块。当tu_cbf_cb[x0][y0]的值为0(tu_cbf_cb[x0][y0]==0)时,其指示相应变换块的所有系数都为0。这意味着系数编译(residual_coding)没有被执行,并且因此,不必执行针对扫描顺序中的除了0以外的最后有效系数的位置信息的处理。

另一方面,如果当前色度Cr变换块包括一个或多个有效系数(tu_cbf_cr[x0][y0]==1),则在last_significant_pos处理之前作为指示色度Cb和Cr是否被表达为一个残差信号的语法元素的tu_joint_cbcr_residual[x0][y0]可以被解析。例如,当tu_joint_cbcr_residual[x0][y0]为1时,不处理针对Cr的系数编译(residual_coding),并且可以从重构的Cb残差信号导出Cr的残差信号。另一方面,当tu_joint_cbcr_residual[x0][y0]为0时,可以根据tu_cbf_cr[x0][y0]的值来执行Cr的系数编译(residual_coding)。如果当前色度Cr变换块包括一个或多个有效系数(tu_cbf_cr[x0][y0]==1),则可以处理与色度Cr的扫描顺序中的最后有效系数的位置有关的语法结构last_significant_pos。当tu_cbf_cr[x0][y0]的值为0(tu_cbf_cr[x0][y0]==0)时,其指示色度Cr变换块的所有系数都为0。这意味着系数编译(residual_coding)没有被执行,并且因此不需要执行扫描顺序中的除了0以外的最后有效系数的位置信息。

当针对每个颜色分量的last_significant_pos的处理被执行时,可以获得针对每个颜色分量的扫描顺序中的最后有效系数的位置(扫描索引),并基于此,lfnstLastScanPos和numZeroOutSigCoeff值可以被更新。

另外,如果全部满足稍后要描述的条件i)、ii)、iii)、iv)、v)、vi)和vii)(如果全部为真),则解码器可以在系数编译(residual_coding)之前解析lfnst_idx[x0][y0]。

系数编译之前(residual_coding)的lfnst_idx[x0][y0]的语法元素解

i)Min(lfnstWidth,lfnstHeight)>=4

首先,第一条件与块大小有关。当块的宽度和高度为4个像素或更多时,解码器可以解析lfnst_idx[x0][y0]语法元素。

具体地,解码器可以检查可以对其应用二次变换的块大小条件。变量SubWidthC和SubHeightC是根据颜色格式设置的,并且可以分别表示图片中的色度分量的宽度与亮度分量的宽度之比,以及色度分量的高度与亮度分量的高度之比。例如,因为4:2:0颜色格式图像具有每四个亮度样本包括一个色度样本的结构,所以SubWidthC和SubHeightC两者都可以设置为2。对于另一个示例,因为4:4:4颜色格式图像具有每一个亮度样本包括一个色度样本的结构,所以SubWidthC和SubHeightC两者都可以设置为1。作为当前块水平方向上的样本数的lfnstWidth和作为垂直方向上的样本数的lfnstHeight可以基于SubWidthC和SubHeightC而被设置。当treeType为DUAL_TREE_CHROMA时,因为变换单元仅包括色度分量,所以色度变换块的水平方向上的样本数等于将作为亮度变换块的宽度tbWidth除以SubWidthC而获得的值。类似地,色度变换块的垂直方向上的样本数等于将作为亮度变换块的高度的tbHeight除以SubHeightC而获得的值。当treeType为SINGLE_TREE或DUAL_TREE_LUMA时,因为变换单元包括亮度分量,所以lnfnstWidth和lfnstHeight可以分别设置为tbWidth和tbHeight。因为可以对其应用二次变换的块的最小条件是4×4,如果满足Min(lfnstWidth,lfnstHeight)>=4,则可以解析lfnst_idx[x0][y0]。

ii)sps_lfnst_enabled_flag==1

第二条件涉及指示是否可以启用或应用二次变换的标记值,并且当指示是否可以启用或应用二次变换的标记值(sps_lfnst_enabled_flag)被设置为1时,解码器可以解析lfnst_idx[x0][y0]。

具体地,可以以高级语法RBSP来指示二次变换。具有1比特大小的指示是否可以启用或应用二次变换的标记可以被包括在SPS、PPS、VPS、图块组报头和切片报头中的至少一个中,并且当sps_lfnst_enabled_flag为1时,其可以指示在变换单元语法中存在lfnst_idx[x0][y0]语法元素。当sps_lfnst_enabled_flag为0时,其可能指示lfnst_idx[x0][y0]语法元素不存在于变换单元语法中。

iii)CuPredMode[x0][y0]==MODE_INTRA

第三条件涉及预测模式,并且二次变换可以仅应用于帧内预测块。因此,当当前块是帧内预测块时,解码器可以解析lfnst_idx[x0][y0]。

iv)IntraSubPartitionsSplitType==ISP_NO_SPLIT

第四条件涉及是否应用ISP预测方法。当没有将ISP应用于当前块时,解码器可以解析lfnst_idx[x0][y0]语法元素。

具体地,如参考图11所描述的,当当前CU被分区成小于CU的大小的多个变换单元时,二次变换可以不被应用于分区的变换单元。在这种情况下,作为与二次变换有关的语法元素的lfnst_idx[x0][y0]可以被设置为0同时不被解析。当用于当前CU的变换树被分割成小于CU的大小的多个变换单元时,ISP预测可以被应用于当前编译单元。当帧内预测被应用于当前编译单元时,ISP预测方法可以是用于根据预设的分割方法将变换树分割为小于CU的大小的多个变换单元的预测方法。可以在编译单元级别处指示ISP预测模式,并且可以基于其设置变量IntraSubPartitionsSplitType。当IntraSubPartitionsSplitType为ISP NOSPLIT时,其指示ISP未应用于当前块。由于其中在变换单元

级别处生成预测样本的帧内预测的特性,当将变换树分割为多个变换单元时,与不分割变换树时相比,预测的精度可能更高。因此,即使不将二次变换应用于分割后的多个变换单元,也很有可能有效地压缩残差信号的能量。

v)!intra_mip_flag[x0][y0]

第五条件涉及帧内预测方法。当基于矩阵的帧内预测(MIP)未应用于当前编译单元预测时,解码器可以解析lfnst_idx[x0][y0]语法元素。

具体地,基于矩阵的帧内预测(MIP)可以被用作帧内预测的方法,并且可以在编译单元级别处通过intra_mip_flag[x0][y0]来指示是否应用MIP。当Intra_mip_flag[x0][y0]为1时,其可以指示MIP被应用于当前编译单元的预测,并且可以通过将当前块周围的重构样本与预设矩阵相乘来执行预测。因为当应用MIP时显出与执行定向或非定向预测的一般帧内预测不同的残差信号属性,所以当应用MIP时不可以将二次变换应用于变换块。

vi)lfnstLastScanPos==0

第六条件涉及变换块的扫描顺序中的最后有效系数。

具体地,当当前变换单元中包括的变换块的扫描顺序中的最后有效系数的位置信息(扫描索引)小于预设阈值时,很有可能通过二次变换可以获得的编译效率增益小。因此,在这种情况下,很有可能编码器不将二次变换应用于变换块(lfnst_idx[x0][y0]为0),并且因此,编码器可能被认为具有较大的用于用信号发送lfnst_idx[x0][y0]的开销。因此,仅当在扫描顺序中的最后有效系数的位置(扫描索引)等于或大于用于变换单元中包括的至少一个变换块的预设阈值时,才可以解析lfnst_idx[x0][y0]。

换句话说,如上所述,阈值可以是等于或大于0的整数。例如,假定阈值为1,则扫描顺序中的最后有效系数的位置(扫描索引)等于或大于阈值的事实可能意味着有效系数存在于块的左上(扫描索引0,DC)以外的位置处。在这种情况下,可以将变换块的扫描顺序中的最后有效系数的位置等于或大于阈值的事实表达为“lfnstLastScanPos==0”。

vii)numZeroOutSigCoeff==0

第七条件涉及存在于特定位置的有效系数。

具体地,当二次变换被应用于当前块时,有效系数可能不存在于扫描位置中的特定位置处。即,numZeroOutSigCoeff变量指示在特定位置处是否存在非零变换系数。例如,当二次变换被应用于当前块时,假设仅允许最多16个有效系数。在4×4和8×8大小的变换块中,有效系数可以存在于扫描顺序中的索引[0,7]区域中(最多允许8个非零变换系数)。另一方面,在除了大小4×4和8×8之外的变换块中,有效系数可以存在于扫描顺序中的索引[0,15]区域中(最多允许16个非零变换系数)。因此,如果扫描顺序中的最后有效系数的位置(扫描索引)存在于上述可能存在有效系数的区域之外,则解码器可以清楚地识别二次变换未被应用于当前块。因此,因为当numZeroOutSigCoeff>0时二次变换不被应用于当前块,所以lfnst_idx[x0][y0]可以被设置为0同时无需解析。

换句话说,当numZeroOutSigCoeff不为0时意味着在特定位置处存在有效系数,并且因此lfnst_idx[x0][y0]可以设置为0同时无需解析。另一方面,当numZeroOutSigCoeff为0时,意味着在特定位置处不存在有效系数,并且因此可以解析lfnst_idx[x0][y0]。

如果上述条件i)到vii)的所有条件都为真,则可以解析lfnst_idx[x0][y0],否则,可以将lfnst_idx[x0][y0]设置为0同时不进行解析。

图27图示根据本发明的实施例的与扫描顺序中的最后有效系数的位置有关的语法结构。

参考图27,last_significant_pos语法结构指代包括用于颜色分量Y、Cb和Cr中的每一个的变换的扫描顺序中的最后有效系数的位置信息的语法结构。另外,last_significant_pos语法结构可以接收作为变换块的左上坐标的(x0,y0)、通过取以2为底的与变换块的宽度的对数而获得的log2TbWidth、通过取以2为底的与变换块的高度的对数而获得的log2TbHeight以及表示变换块的颜色分量的cIdx作为输入。当cIdx为0时,可以表示亮度变换块,当cIdx为1时,可以表示色度Cb变换块,而当cIdx为2时,可以表示色度Cr变换块。

在last_significant_pos语法结构中,可以解析与扫描顺序中的最后有效系数的位置信息有关的语法元素。具体地,可以解析与扫描顺序中的最后有效系数的x坐标值和y坐标值有关的语法元素。在这种情况下,可以通过将每个坐标值划分成前缀信息和后缀信息来指示。解码器可以基于x坐标的前缀信息和后缀信息来设置LastSignificantCoeffX变量,其是扫描顺序中的最后有效系数的x坐标。类似地,解码器可以基于y坐标的前缀信息和后缀信息来设置LastSignificantCoeffY变量,其是扫描顺序中的最后有效系数的y坐标。如图27中所图示,在do{}while()结构中,解码器可以基于LastSignificantCoeffX、LastSignificantCoeffY和DiagScanOrder来设置lastScanPos,该lastScanPos是扫描顺序中的最后有效系数的扫描索引。另外,解码器可以基于lastScanPos来更新作为在lfnst_idx[x0][y0]的解析条件中使用的变量的numZeroOutSigCoeff和lfnstLastScanPos,该lfnst_idx[x0][y0]是与二次变换有关的语法元素。

如果二次变换被应用于当前块,则有效系数不可能存在于扫描位置上的特定位置处。numZeroOutSigCoeff变量指示该位置是否存在非零变换系数。例如,当二次变换被应用于当前块时,假设仅允许最多16个有效系数。在4×4和8×8大小的变换块中,有效系数可能存在于扫描顺序中的索引[0,7]区域中(最多允许8个非零变换系数)。另一方面,在大小不是4×4和8×8的变换块中,有效系数可能存在于扫描顺序中的索引[0,15]区域中(最多允许16个非零变换系数)。因此,如果在扫描顺序中的最后有效系数的位置(扫描索引)存在于上述可能存在有效系数的上述区域之外,则解码器可以清楚地识别二次变换未被应用于当前块。可以对其应用二次变换的块的最小大小是4×4,并且当变换跳过被应用时(transform_skip_flag[x0][y0]==1),可以不应用二次变换。因此,对于宽度为4或更大(log2TbWidth>=2)、其高度为4或更大(log2TbHeight>=2)并且变换跳过未被应用(transform_skip_flag[x0])[y0]==0)的变换块,numZeroOutSigCoeff可以被更新。当二次变换被应用时,对于4×4或8×8大小的变换块,非零变换系数(有效系数)可能仅存在于扫描顺序中的索引[0,7]区域中。因此,当变换块为4×4或8×8((log2TbWidth==2||log2TbHeight==3)&&(log2TbWidth==log2TbHeight))并且lastScanPos大于7(lastScanPos>7)时,numZeroOutSigCoeff可以增加1。对于除了可以应用二次变换的大小为4×4或8×8的块之外的块,非零变换系数可以仅存在于扫描顺序中的索引[0,15]区域中。因此,当lastScanPos大于15(lastScanPos>15)时,numZeroOutSigCoeff可以增加1。

解码器可以基于lastScanPos确定lfnstLastScanPos。具体地,当变换块的宽度和高度为4或更大并且变换跳过未被应用于变换块时,可以如下面的等式6中那样设置lfnstLastScanPos。换句话说,当log2TbWidth>=2,log2TbHeight>=2,并且transform_skip_flag[x0][y0]为0时,可以如下面的等式1那样设置lfnstLastScanPos。在这种情况下,当transform_skip_flag[x0][y0]为0时,可能意味着该变换跳过未被应用于当前的变换块。

[等式6]

lfnstLastScanPos=lfnstLastScanPos&&(lastScanPos<lfnstLastScanPosTh[cldx])

如在上面所提及的,可以将lfnstLastScanPos的初始值设置为1。

如上所述,在等式6中,cIdx可以表示指示当前变换块的颜色分量的变量。

根据等式6,当紧邻的前一个lfnstLastScanPos为1且lastScanPos小于lfnstLastScanPosTh[cIdx]时,lfnstLastScanPos可以更新为1。另一方面,当紧邻的前一个lfnstLastScanPos为0或lastScanPos等于或大于lfnstScanPosTh[cIdx],则lfnstLastScanPos可以更新为0。

换句话说,当变换单元中包括的所有变换块的lastScanPos小于阈值或所有变换块的系数都为0时,可以确定lfnstLastScanPos为1,并且在不根据图26的lfnst_idx[x0][y0]的解析条件解析的情况下lfnst_idx[x0][y0可以被设置为0。这指示二次变换未被应用于当前块。另一方面,如果包括在变换单元中的变换块中的任何一个具有等于或大于阈值的lastScanPos,则可以确定lfnstLastScanPos为0,并且如果图26的条件i)、ii)、iii)、iv)、v)和vii)全部满足(如果全部为真),则解码器可以解析lfnst_idx[x0][y0]。解码器可以解析lfnst_idx[x0][y0]以检查是否二次变换被应用于当前块,并且当二次变换被应用于当前块时,可以检查/确定用于二次变换的变换核。

等式6中的lfnstLastScanPosTh[cIdx]是等于或大于0的预设整数值,并且编码器和解码器两者都可以使用相同的值。另外,所有颜色分量可以使用相同的阈值。在这种情况下,lfnstLastScanPos可以如下面的等式7进行设置。

[等式7]

lfnstLastScanPos=lfnstLastScanPos&&(lastScanPos<lfnstLastScanPosTh)

LfnstLastScanPosTh是等于或大于0的预设整数值,并且编码器和解码器两者都可以使用相同的值。例如,lfnstLastScanPosTh可以为1。即,当lastScanPos为1或更大时,可以将lfnstLastScanPos更新为0,并且可以解析lfnst_idx[x0][y0]。在这种情况下,因为阈值lfnstLastScanPosTh是整数值,所以lastScanPos为1或者更大的情况可以与lastScanPos大于0的情况具有相同的含义。在图27中,已经描述所有颜色分量具有相同的阈值1的情况;然而,本发明不限于此。

图28是图示根据本发明的实施例的residual_coding语法结构的图。

参考图28,可以在系数编译(residual_coding)之前指示扫描顺序中的最后有效系数的位置信息。因此,系数编译(residual_coding)语法结构可以不包括与扫描顺序中的最后有效系数的位置信息有关的语法结构。例如,扫描顺序中的最后有效系数的位置信息可以是扫描顺序中的最后有效系数的x坐标的前缀和后缀以及y坐标的前缀或后缀。参考参考图28的系数编译(residual_coding)语法结构,可以基于LastSignificantCoeffX和LastSignificantCoeffY来执行系数编译(residual_coding),该LastSignificantCoeffX和LastSignificantCoeffY是在系数编译(residual_coding)之前确定的扫描顺序中的最后有效系数的x坐标和y坐标。

根据第四实施例的二次变换指示方法不使用numSigCoeff计数器。因此,即使(xC,yC)位置处的系数为有效系数(sig_coeff_flag[xC][yC]==1),numSigCoeff也可能不会被更新。换句话说,根据第四实施例的二次变换指示方法可以是不使用用于有效系数的计数器的方法。另外,在根据第四实施例的二次变换指示方法中,因为可以基于lastScanPos设置numZeroOutSigCoeff变量,所以在系数编译(residual_coding)中可以不使用基于sig_coeff_flag的计数器。

图29是示出根据本发明的实施例的视频信号处理方法的流程图。

在下文中,将描述基于参考图15至图28描述的实施例的视频信号处理方法和装置。

视频信号解码装置可以包括执行图29中描述的视频信号处理方法的处理器。

首先,处理器可以接收包括与编译单元的二次变换有关的语法元素的比特流。

处理器可以检查是否满足一个或多个预设条件,并且当满足一个或多个预设条件时,处理器可以解析与编译单元的二次变换有关的语法元素(S2910和S2920)。另一方面,当不满足一个或多个预设条件时,处理器可以不解析与编译单元的二次变换有关的语法元素(S2930)。在这种情况下,与二次变换有关的语法元素的值可以被设置为0。

与图29中描述的编译单元的二次变换有关的语法元素可以是lfnst_idx[x0][y0],其是指示是否二次变换被应用于包括在图15至图28中描述的当前编译单元中的变换块的语法元素。

处理器可以通过步骤S2920解析与编译单元的二次变换有关的语法元素,并且可以基于解析的语法元素来检查是否二次变换被应用于编译单元中包括的变换块(S2940)。

在这种情况下,当二次变换被应用于变换块时,处理器可以通过基于作为构成变换块的一个或多个子块之一的第一子块的一个或多个系数执行逆二次变换来获得用于第一子块的一个或多个逆变换系数(S2950)。

然后,处理器可以通过基于在S2950中获得的一个或多个逆变换系数执行逆初次变换来获得变换块的残差样本(S2960)。

二次变换可以是低频不可分离变换(LFNST)。另外,变换块可以是对其应用可分离成垂直变换和水平变换的初次变换的块。在这种情况下,逆初次变换可以指代用于初次变换的逆变换,而逆二次变换可以指代用于二次变换的逆变换。

与编译单元的二次变换有关的语法元素可以包括指示是否二次变换被应用于编译单元的信息和指示用于二次变换的变换核的信息。

第一子块可以是根据预设的扫描顺序的第一个子块,并且在这种情况下,第一子块的索引可以为0。

一个或多个预设条件中的第一条件可以是其中指示第一子块的一个或多个系数当中的第一系数的位置的索引值大于预设阈值的情况。在这种情况下,第一系数可以是根据预设的扫描顺序的最后有效系数,并且有效系数可以指代非零系数。预设阈值可以是0。预设扫描顺序可以是在图13和图14中描述的右上对角扫描顺序。

一个或多个预设条件中的第二条件可以是其中变换块的宽度和高度为4个像素或者更多的情况。

一个或多个预设条件中的第三条件可以是其中在比特流中包括的变换跳过标记的值不是特定值的情况。在这种情况下,当变换跳过标记值具有特定值时,变换跳过标记可以指示初次变换和二次变换为被应用于变换块。

一个或多个预设条件中的第四条件可以是其中子块的一个或多个系数中的至少一个系数不为0并且该至少一个系数存在于除了根据预设扫描顺序的第一位置值之外的地方。在这种情况下,预设扫描顺序中的第一位置可以意指其中如上所述的水平和垂直坐标值为(0,0)的位置或者可以是根据预设扫描顺序(例如,右上对角顺序)的第一位置。

另外,编译单元可以包括多个编译块。在这种情况下,当分别与多个编译块相对应的变换块中的至少一个满足一个或多个预设条件时,可以解析与二次变换有关的语法元素。

另一方面,当不解析与二次变换有关的语法元素或将其设置为0时(S2930),或者当在步骤S2940中确认二次变换未被应用于编译单元中包括的变换块时,处理器可以通过基于变换块的一个或多个系数执行逆初次变换来获得变换块的残差样本(S2970)。

在这种情况下,上述逆初次变换和逆二次变换可以分别是初次变换和二次变换的逆变换。

由图29中描述的视频信号解码装置执行的视频信号处理方法或者与其类似的方法可以由视频信号编码装置执行。

视频信号编码装置可以包括对视频信号进行编码的处理器。

在这种情况下,处理器可以通过对包括在编译单元中的块的残差样本执行初次变换来获得用于块的多个初次变换系数。处理器可以通过基于多个初次变换系数中的一个或多个执行二次变换来获得用于作为构成该块的子块之一的第一子块的一个或多个二次变换系数。处理器可以通过对关于一个或多个二次变换系数的信息和与编译单元的二次变换有关的语法元素进行编码来获得比特流。

二次变换可以被称为低频不可分离变换(LFNST),并且初次变换可以被分离为垂直变换和水平变换。

另外,当满足一个或多个预设条件时,与二次变换有关的语法元素可以被编码。与二次变换有关的语法元素可以包括指示是否二次变换被应用于编译单元的信息和指示用于二次变换的变换核的信息。在这种情况下,与二次变换有关的语法元素可以是lfnst_idx[x0][y0],其是在图15至28中描述的语法元素。

第一子块可以是根据预设的扫描顺序的第一个子块。在这种情况下,第一子块的索引可以是0。

一个或多个预设条件中的第一条件可以是其中指示一个或多个二次变换系数当中的第一系数的位置的索引值大于预设阈值的情况。在这种情况下,第一系数可以是根据预设的扫描顺序的最后有效系数,并且有效系数可以指代非零系数。预设阈值可以是0。预设扫描顺序可以是在图13和图14中描述的右上对角扫描顺序。

一个或多个预设条件中的第二条件可以是其中初次变换块的宽度和高度为4个像素或更多的情况。

一个或多个预设条件中的第三条件可以是其中在比特流中包括的变换跳过标记的值不是特定值的情况。在这种情况下,当变换跳过标记值具有特定值时,变换跳过标记可以指示初次变换和二次变换未被应用于块。

一个或多个预设条件中的第四条件可以是其中一个或多个二次变换系数中的至少一个系数不为0并且该至少一个系数存在于除了根据预设扫描顺序的第一位置以外的地方。在这种情况下,预设扫描顺序中的第一位置可以意指其中如上所述的水平和垂直坐标值为(0,0)的位置,或者根据预设扫描顺序(例如,右上对角顺序)的第一位置。

另外,编译单元可以包括多个编译块。在这种情况下,当与多个编译块中的每个相对应的编译单元中包括的(变换)块中的至少一个满足一个或多个预设条件时,可以对与二次变换有关的语法元素进行编码。

另外,视频信号编码装置可以包括执行图29中描述的视频信号处理方法的视频信号解码处理器。

如上所述,比特流可以包括与图15至图29中描述的编译单元的二次变换有关的语法元素。在这种情况下,比特流可以存储在非暂时性计算机可读介质中。同时,当不满足上述一个或多个预设条件时,视频信号编码装置可以不在比特流中包括与二次变换有关的语法元素,或者可以将与二次变换有关的语法元素设置为0。比特流可以由参考图29描述的视频信号解码装置解码或者可以由上述视频信号编码装置进行编码。

用于对比特流进行编码的方法可以是包括以下的编码方法,例如对包括在编译单元中的块的残差样本执行初次变换以获得用于该块的多个初次变换系数、基于多个初次变换系数中的一个或多个系数执行二次变换以获得用于作为构成该块的子块之一的第一子块的一个或多个二次变换系数、以及对关于该一个或多个二次变换系数以及与编译单元的二次变换有关的语法元素的信息进行编码。

在本说明书中,获取系数可以意指获得与该系数有关的像素/块,并且获取残差样本可以意指获取与残差样本有关的残差信号/像素/块。

可以通过各种手段来实现本发明的上述实施例。例如,可以通过硬件、固件、软件或其组合来实现本发明的实施例。

对于通过硬件实现的情况,可以通过专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑设备(PLD)、现场可编程门阵列(FPGA)、处理器、控制器、微控制器、微处理器等中的一个或多个来实现根据本发明的实施例的方法。

在通过固件或软件实现的情况下,可以以执行上述功能或操作的模块、过程或函数的形式来实现根据本发明的实施例的方法。可以将软件代码存储在存储器中并由处理器驱动。存储器可以位于处理器内部或外部,并且可以通过各种已知的方式与处理器交换数据。

一些实施例还可以以包括由计算机可执行的指令的记录介质的形式来实现,诸如由计算机执行的程序模块。计算机可读介质可以是计算机可访问的任何可用介质,并且包括易失性和非易失性介质、可移动和不可移动介质。此外,计算机可读介质可以包括计算机存储介质和通信介质。该计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。通信介质通常包括计算机可读指令、数据结构、诸如程序模块的调制数据信号中的其他数据或其他传输机制,并且包括任何信息传递介质。

本发明的上述描述仅用于说明目的,并且将会理解,本发明所属的本领域的普通技术人员可以在不改变本发明的技术思想或者基本特征的情况下对本发明进行改变,并且本发明可以以其他特定形式容易地被修改。因此,上述实施例是说明性的,并且在所有方面均不受限制。例如,被描述为单个实体的每个组件可以被分布和实现,并且同样,被描述为被分布的组件也可以以关联的方式被实现。

本发明的范围由所附权利要求书而不是上述详细描述来限定,并且从所附权利要求书的含义和范围及其等效物导出的所有改变或修改都应解释为包括在本发明的范围内。

技术分类

06120115923146