解码方法、编码方法、相应的装置、电子设备及存储介质
文献发布时间:2023-06-19 10:06:57
技术领域
本申请涉及编解码技术领域,具体而言,本申请涉及一种解码方法、编码方法、相应的装置、电子设备及计算机可读存储介质。
背景技术
目前的视频标准中,常采用的run-level的系数编码方式,是将每一个非零系数必须与其前的联系零系数绑定编码,即使此前的零系数为0,也需要对run进行编码才能在解码端找到对应的系数位置。如图1所示的run-level系数编码示意图中,编码块中的系数是以一定的扫描顺序进行编码的,如图1中所示的由左至右的扫描顺序,具体地,在进行编码时,非零系数的level与其前面的连续零系数个数run一起编码,直到编码到最后一个非零系数,由last_flag标识,Last_flag之后的零系数均不再编码,解码端也同样填充零系数即可,如对于图1中的第一个非零系数,其level的取值为5,对应的run为0,则在该系数进行编码时,需要对该系数的level取值和对应的run值一起编码。最后,再针对每一个非零系数的符号进行编码,即系数为正,sign_flag=1;系数为负,sign_flag为0。通过以上流程,将编码块中的每一个系数进行逐一编码。
可见,现有的run-level编码方案中,每一个非零系数的level编码之前必须先编码其对应的run值,即使该run值为0也必须要进行编码。该编码方式虽然可以保证每一个系数都能在解码端对应的位置正确解码,但是在某些情况下仍存在一些冗余。对于一个N*N’大小的编码块,如图2b中所示,其中1表示非零系数,0表示零系数。当其前面连续多个系数均为非零系数时,按照现有编码方式,在以图2a中所示的Zigzag扫描方式对编码块中的系数进行编码时,则需要额外编码多个值为0的run,即连续多个系数的编码方式都是以(0,level)对的形式进行编码,这时候的run值并不能传递有用信息,造成编码冗余。
发明内容
针对现有技术中存在的上述问题,本申请实施例提供了一种编码方法、解码方法、相应的装置、电子设备及计算机可读存储介质,具体技术方案如下:
第一方面,本申请实施例提供了一种编码方法,该方法包括:
根据待编码块的前M个量化系数,确定待编码块的标识信息,其中,M≥1,标识信息为第一标识或第二标识,第一标识用于标识前M个量化系数均为非零系数,第二标识用于标识前M个量化系数中存在零系数;
确定标识信息的上下文,并根据标识信息的上下文对标识信息进行编码;
若标识信息为第一标识,则对前M个量化系数中的每个量化系数的值level进行编码,对除前M个量化系数之外的其他量化系数中的每个非零系数的游程run和level进行编码;
若标识信息为第二标识,则对待编码块的每个非零量化系数的run和level进行编码。
第一方面的一种可选实施例中,确定标识信息的上下文,包括:
根据待编码块的关联编码块的编码参数信息、以及待编码块的块类型,确定标识信息的上下文;
其中,关联编码块是已编码完成的编码块,上下文是基于编码参数信息和块类型设计的,块类型为亮度编码块或色度编码块。
第一方面的一种可选实施例中,根据待编码块的关联编码块的编码参数信息、以及块类型,确定标识信息的上下文,包括:
根据编码参数信息和块类型,以及上下文索引号确定规则,确定标识信息的上下文的索引号,上下文索引号确定规则是基于编码参数信息和块类型配置的;
根据上下文的索引号确定标识信息的上下文。
第一方面的一种可选实施例中,上下文索引号确定规则包括索引号偏移确定规则和索引号确定规则,其中,索引号偏移确定规则是基于编码参数信息配置的,索引号确定规则是基于块类型确定的;
根据编码参数信息和块类型,以及上下文索引号确定规则,确定标识信息的上下文的索引号,包括:
根据编码参数信息和索引号偏移确定规则,确定上下文的索引号的偏移;
根据块类型和偏移,以及索引号确定规则,确定上下文的索引号。
第一方面的一种可选实施例中,关联编码块包括以下至少一项:
与待编码块直接相邻的至少一个已编码块;
与待编码块间接相邻的至少一个已编码块。
第一方面的一种可选实施例中,关联编码块包括待编码块的上方相邻的已编码块和左侧相邻的已编码块。
第一方面的一种可选实施例中,编码参数信息包括关联编码块的量化系数信息、关联编码块的标识信息、或关联编码块的块类型信息中的至少一项。
第一方面的一种可选实施例中,在完成对待编码块的编码后,该方法还包括:
根据待编码块的编码结果,对上下文进行更新。
第一方面的一种可选实施例中,根据待编码块的前M个量化系数,确定待编码块的标识信息之前,还包括:
获取待编码块的相关信息;
根据相关信息确定M的取值。
第一方面的一种可选实施例中,相关信息包括编码块大小或待编码块所对应视频的视频纹理信息中的至少一项。
第一方面的一种可选实施例中,该方法还包括:
对待编码块的量化系数进行zigzag扫描,确定待编码块的各个量化系数的run和level。
第二方面,本申请实施例提供了一种解码方法,该方法包括:
确定待解码块的标识信息的上下文;
根据标识信息的上下文对解码块的编码码流进行解码,得到待编码块的标识信息,标识信息为第一标识或第二标识,第一标识用于标识待解码块所对应的前M个量化系数均为非零系数,第二标识用于标识前M个量化系数中存在零系数,其中,M≥1;
若标识信息为第一标识,则确定待解码块所对应的前M个量化系数的run为零,对编码码流中前M个量化系数的level所对应的码流数据进行解码,得到每个量化系数的level,并对除前M个量化系数之外的其他量化系数的run和level所对应的码流数据分别进行解码,得到每个量化系数的run和level;
若标识信息为第二标识,则对编码码流中每个量化系数的run和level所对应的码流数据分别进行解码,得到每个量化系数的run和level。
第二方面的可选实施例中,确定待解码块的标识信息的上下文,包括:
根据待解码块的关联解码块的解码参数信息、以及待解码块的块类型,确定标识信息的上下文;
其中,关联解码块是已解码完成的解码块,上下文是解码参数信息和块类型设计的,块类型为亮度解码块或色度解码块。
第二方面的一种可选实施例中,根据待解码块的关联解码块的解码参数信息、以及块类型,确定标识信息的上下文,包括:
根据解码参数信息和块类型,以及上下文索引号确定规则,确定标识信息的上下文的索引号,上下文索引号确定规则是基于解码参数信息和块类型配置的;
根据上下文的索引号确定标识信息的上下文。
第二方面的一种可选实施例中,上下文索引号确定规则包括索引号偏移确定规则和索引号确定规则,其中,索引号偏移确定规则是基于解码参数信息配置的,索引号确定规则是基于块类型确定的;
根据解码参数信息和块类型,以及上下文索引号确定规则,确定标识信息的上下文的索引号,包括:
根据解码参数信息和索引号偏移确定规则,确定上下文的索引号的偏移;
根据块类型和偏移,以及索引号确定规则,确定上下文的索引号。
第二方面的一种可选实施例中,关联解码块包括以下至少一项:
与待解码块直接相邻的至少一个已解码块;
与待解码块间接相邻的至少一个已解码块。
第二方面的一种可选实施例中,关联解码块包括待解码块的上方相邻的已解码块和左侧相邻的已解码块。
第二方面的一种可选实施例中,解码参数信息包括关联解码块的量化系数信息、关联解码块的标识信息、或关联解码块的块类型信息中的至少一项。
第二方面的一种可选实施例中,在完成对待解码块的解码后,该方法还包括:
根据待解码块的解码结果,对上下文进行更新。
第二方面的一种可选实施例中,还包括:
获取待解码块的相关信息;
根据相关信息确定M的取值。
第二方面的一种可选实施例中,相关信息包括待解码块的块大小或待解码块所对应视频的视频纹理信息中的至少一项。
第二方面的一种可选实施例中,该方法还包括:
对待解码块的码流进行zigzag扫描,确定待解码块的码流中各个码流数据。
第三方面,本申请实施例提供了一种编码装置,该装置包括:
块标识确定模块,用于根据待编码块的前M个量化系数,确定待编码块的标识信息,其中,M≥1,标识信息为第一标识或第二标识,第一标识用于标识前M个量化系数均为非零系数,第二标识用于标识前M个量化系数中存在零系数;
编码模块,用于确定标识信息的上下文,并根据标识信息的上下文对标识信息进行编码;
编码模块,还用于在标识信息为第一标识时,对前M个量化系数中的每个量化系数的level进行编码,对除前M个量化系数之外的其他量化系数中的每个非零系数的run和level进行编码;在标识信息为第二标识时,对待编码块的每个非零量化系数的run和level进行编码。
第三方面的一种可选实施例中,编码模块在确定标识信息的上下文时,具体用于:
根据待编码块的关联编码块的编码参数信息、以及待编码块的块类型,确定标识信息的上下文;
其中,关联编码块是已编码完成的编码块,标识信息的上下文是基于编码参数信息和块类型设计的,块类型为亮度编码块或色度编码块。
第三方面的一种可选实施例中,编码模块在根据待编码块的关联编码块的编码参数信息、以及块类型,确定标识信息的上下文时,具体用于:
根据编码参数信息和块类型,以及上下文索引号确定规则,确定标识信息的上下文的索引号,上下文索引号确定规则是基于编码参数信息和块类型配置的;
根据上下文的索引号确定标识信息的上下文。
第三方面的一种可选实施例中,上下文索引号确定规则包括索引号偏移确定规则和索引号确定规则,其中,索引号偏移确定规则是基于编码参数信息配置的,索引号确定规则是基于块类型确定的;
编码模块在根据编码参数信息和块类型,以及上下文索引号确定规则,确定标识信息的上下文的索引号时,具体用于:
根据编码参数信息和索引号偏移确定规则,确定上下文的索引号的偏移;
根据块类型和偏移,以及索引号确定规则,确定上下文的索引号。
第三方面的一种可选实施例中,关联编码块包括以下至少一项:
与待编码块直接相邻的至少一个已编码块;
与待编码块间接相邻的至少一个已编码块。
第三方面的三种可选实施例中,关联编码块包括待编码块的上方相邻的已编码块和左侧相邻的已编码块。
第三方面的一种可选实施例中,编码参数信息包括关联编码块的量化系数信息、关联编码块的标识信息、或关联编码块的块类型信息中的至少一项。
第三方面的一种可选实施例中,该装置还包括:
上下文更新模块,用于在完成对待编码块的编码后,根据待编码块的编码结果,对上下文进行更新。
第三方面的一种可选实施例中,块标识确定模块还用于:在根据待编码块的前M个量化系数,确定待编码块的标识信息之前,获取待编码块的相关信息,根据相关信息确定M的取值。
第三方面的一种可选实施例中,相关信息包括编码块大小或待编码块所对应视频的视频纹理信息中的至少一项。
第四方面,本申请实施例提供了一种解码装置,该装置包括:
上下文确定模块,用于确定待解码块的标识信息的上下文;
解码模块,用于根据标识信息的上下文对解码块的码流码流进行解码,得到待编码块的标识信息,标识信息为第一标识或第二标识,第一标识用于标识待解码块所对应的前M个量化系数均为非零系数,第二标识用于标识前M个量化系数中存在零系数,其中,M≥1;
解码模块,还用于在标识信息为第一标识时,则确定待解码块所对应的前M个量化系数的run为零,对编码码流中前M个量化系数的level所对应的码流数据进行解码,得到每个量化系数的level,并对除前M个量化系数之外的其他量化系数的run和level所对应的码流数据分别进行解码,得到每个量化系数的run和level;以及用于在标识信息为第二标识时,则对编码码流中每个量化系数的run和level所对应的码流数据分别进行解码,得到每个量化系数的run和level。
第四方面的一种可选实施例中,上下文确定模块在确定待解码块的标识信息的上下文时,具体用于:
根据待解码块的关联解码块的解码参数信息、以及待解码块的块类型,确定标识信息的上下文;
其中,关联解码块是已解码完成的解码块,上下文是基于解码参数信息和块类型设计的,块类型为亮度解码块或色度解码块。
第四方面的一种可选实施例中,上下文确定模块在根据待解码块的关联解码块的解码参数信息、以及块类型,确定标识信息的上下文时,具体用于:
根据解码参数信息和块类型,以及上下文索引号确定规则,确定标识信息的上下文的索引号,上下文索引号确定规则是基于解码参数信息和块类型配置的;
根据上下文的索引号确定标识信息的上下文。
第四方面的一种可选实施例中,上下文索引号确定规则包括索引号偏移确定规则和索引号确定规则,其中,索引号偏移确定规则是基于解码参数信息配置的,索引号确定规则是基于块类型确定的;
上下文确定模块在根据解码参数信息和块类型,以及上下文索引号确定规则,确定标识信息的上下文的索引号时,具体用于:
根据解码参数信息和索引号偏移确定规则,确定上下文的索引号的偏移;
根据块类型和偏移,以及索引号确定规则,确定上下文的索引号。
第四方面的一种可选实施例中,关联解码块包括以下至少一项:
与待解码块直接相邻的至少一个已解码块;
与待解码块间接相邻的至少一个已解码块。
第四方面的一种可选实施例中,关联解码块包括待解码块的上方相邻的已解码块和左侧相邻的已解码块。
第四方面的一种可选实施例中,解码参数信息包括关联解码块的量化系数信息、关联解码块的标识信息、或关联解码块的块类型信息中的至少一项。
第四方面的一种可选实施例中,该装置还包括:
上下文更新模块,用于在完成对待解码块的解码后,根据待解码块的解码结果,对上述上下文进行更新。
第四方面的一种可选实施例中,解码模块还用于:
获取待解码块的相关信息;
根据相关信息确定M的取值。
第四方面的一种可选实施例中,相关信息包括待解码块的块大小或待解码块所对应视频的视频纹理信息中的至少一项。
第五方面,本申请实施例提供了一种电子设备该电子设备包括存储器和处理器;
存储器中存储有计算机程序;
处理器,用于在运行计算机程序时执行本申请第一方面或第二方面的任一实施例中所示的方法。
第六方面,本申请实施例提供了一种计算机可读存储介质,该存储介质上用于存储计算机程序,计算机程序在处理器中运行时用于执行本申请第一方面或第二方面的任一实施例中所示的方法。
本申请提供的技术方案带来的有益效果是:
本申请实施例所提供的编码方法,设计了新的语法元素即待编码块的标识信息来标记当前块是否是前连续M个系数为非零系数,如果是则跳过相应的run编码,该方案对于前面存在连续M个非零系数的编码块,可以省掉M个run的编码,相应的,解码端可以通过当前块的omit_m_run_flag的值推测出来当前块的前M个的run,能够有效节省比特、节省码流,尤其是在高码率情况下非常有效。将本申请实施例所提供的方案应用于视频编码中,可以有效提高视频标准的压缩效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1示出了一种现有编码方式的示意图;
图2a示出了一种编码块的量化系数的扫描方式的示意图;
图2b示出了一种编码块的量化系数的示意图;
图3示出了本申请实施例提供的一种编码方法的流程示意图;
图4示出了本申请一示例中一种待编码块的上下文设计时采用的参考信息的示意图;
图5示出了本申请一示例中一种上下文索引号的示意图;
图6示出了本申请实施例提供的一种解码方法的流程示意图;
图7示出了本申请实施例提供的一种编码装置的结构示意图;
图8示出了本申请实施例提供的一种解码装置的结构示意图;
图9示出了本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
为了更加清楚的说明本申请实施例所提供的方案,下面首先对本申请实施例中所涉及的一些技术名词进行介绍和解释:
熵编码:一种数据压缩的方法,是视频编码过程实现信息压缩的关键模块。熵编码把一系列用来表示视频序列的元素符号转变为一个用来传输或是存储的压缩码流。
语法元素:表示在视频编码中需要编码并传进码流的信息,语法元素为熵编码的输入数据,语法元素包括量化系数(即经过变换和量化的残差系数)、各种编码参数等。
Run-level编码:即游程编码,一种系数编码方式,其中,Run表示非零系数之前的连续零系数个数,Level表示非零系数的幅值大小。
上下文缓存(buffer):一种存储着信号(即需要编码的语法元素)概率的buffer,熵编码过程中,每个语法元素读写对应的buffer中的信息,进行计算和更新。对于编解码方案,可以通过开辟了一个buffer来存储语法元素对应的一些信息,比如它可能在编码过程中需要这个信号的概率或者这个信号的值(是大信号还是小信号),类似存储着这样的信息。编码过程中开辟了一个buffer,这个buffer中存储的是待编码的语法元素对应的一些信息,比如在编码过程中需要这个信号的概率或者这个信号的值(是大信号还是小信号)等,例如,MPS(Most Probability Symbol,最大概率符号)、LPS(Least ProbabilitySymbol,最小概率符号)等。本申请实施例的方案中设计了新的语法元素即编码块的标识信息,因此,需要设计相应的上下文,该语法元素的上下文对应存储于该语法元素对应的上下文buffer中。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
图3示出了本申请实施例提供的一种编码方法的流程示意图,如图3中所示,该方法主要可以包括:
步骤S110:根据待编码块的前M个量化系数,确定待编码块的标识信息;
其中,M≥1,标识信息为第一标识或第二标识,第一标识用于标识前M个量化系数均为非零系数,第二标识用于标识前M个量化系数中存在零系数。
在实际应用中,M的具体取值是可以根据实际需要进行配置的。作为一可选方式,为了使该方法适用于所有待编码块,M的取值要不大于编码标准所规定的最小编码块的大小。当然,M的取值也可以不受该条件约束,此时,在应用时,对于待编码块,应可以首先确定待编码块的块大小,如果待编码块的块大小不小于M的取值,则可以采用该方法进行编码处理,如果待编码块的块大小小于M的取值,则可以采用现有其他编码方法进行编码处理。
为了描述方便,在下文描述中可以将待编码块简称为当前块,将待编码块的标识信息简记为omit_m_run_flag,其中,omit_m_run_flag=1代表标识信息为第一标识,omit_m_run_flag=0代表标识信息为第二标识。
作为一示例,对于图2b中所示的编码块,若M的取值设置为5,按照图2a中所示的扫描顺序,该编码块的前7个量化系数均为非零系数,则该编码块的omit_m_run_flag=1。
步骤S120:确定标识信息的上下文,根据标识信息的上下文对标识信息进行编码;
上下文是语法元素的核心。编码块的标识信息作为本申请实施例所提出的一种新的语法元素,为了实现对该语法元素的编码,就需要为该语法元素设计相应的上下文,以根据该标识信息的上下文对该标识信息进行编码。标识信息的上下文可以根据实际需求配置,本申请实施例对该标识信息的上下文的具体配置方式不做限定。
步骤S130:若标识信息为第一标识,则对前M个量化系数中的每个量化系数的level进行编码,对除前M个量化系数之外的其他量化系数中的每个非零系数的run和level进行编码;若标识信息为第二标识,则对待编码块的每个非零量化系数的run和level进行编码。
在omit_m_run_flag=1时,则说明待编码块的前M个量化系数均为非零系数,即前M个量化系数的level的取值均为非零,这M个量化系数所对应的run均为0,这些run并不能够传递有用信息,造成编码冗余。因此,在待编码块的前M个量化系数均为非零系数时,则可以不对这前M个量化系数的run进行编码,即对于这连续的M个非零系数,可以省去其各自的run编码,只对相应的level进行编码,大大节省了码流。此时,对除前M个量化系数之外的其他量化系数中的每个非零系数可以采用现有编码方式,即对这些量化系数的run和level进行编码。在待编码块的标识信息为第二标识时,则说明前M个量化系数存在零系数,此时,则对待编码块的每个非零量化系数的run和level进行编码。
下面示出了本申请实施例提供的一种确定编码块的标识信息的逻辑代码:
上述逻辑代码中,scanPos()表示量化系数的扫描顺序函数,规定了当前块的扫描顺序。Coeff[]表示存储当前块的系数的数组。width和height的值分别表示编码块的宽和高,二者不一定相等。
上述逻辑代码则可以解读为:omit_m_run_flag的初始值为0,如果待编码块的前M个量化系数中存在零系数(即if(pos 下面示出了本申请实施例提供的一种在待编码块的omit_m_run_flag=1时,部分编码流程的逻辑代码:
同样的,该逻辑代码中,scanPos()表示量化系数的扫描顺序函数,规定了当前块的扫描顺序。width和height的值分别表示编码块的宽和高,二者不一定相等。 该段逻辑代码则可以解读为:基于对待编码块的标识信息的上下文对标识信息进行编码(即Encode_bin(omit_m_run_flag,ctx)),其中,该处的ctx表示标识信息的上下文,之后扫描量化系数,在omit_m_run_flag为1时,如果不是前M个量化系数(即If(pos>=M)),则对量化系数的run编码(即Encode_bin(run,ctx_run)),ctx_run表示run的上下文,并对量化系数的level编码(即Encode_bin(level,ctx_level)),ctx_level表示level的上下文;而对于对前M个量化系数,则只对量化系数的level进行编码(即Encode_bin(level,ctx_level))。 基于本申请实施例所提供的该可以跳过run值编码的系数编码方案,设计了新的语法元素omit_m_run_flag(即块标识信息)来标记当前块是否是前连续M个系数为非零系数,如果是,则跳过相应的run编码(即语法元素omit_m_run_flag用来标记哪一种类型的块可以跳过前面M个run值),该方案对于前面存在连续M个非零系数的编码块,可以省掉M个run的编码,相应的,解码端可以通过当前块的omit_m_run_flag的值推测出来当前块的前M个的run,能够有效节省比特、节省码流,尤其是在高码率情况下非常有效。将本申请实施例所提供的方案应用于视频编码中,可以有效提高视频标准的压缩效率。 本申请的可选实施例中,该方法还包括: 对待编码块的量化系数进行zigzag扫描,确定待编码块的各个量化系数的run和level。 在实际应用中,对于高码率且纹理比较复杂的编码块,经过变换量化之后,会有很多非零系数集中在左上角,如图2b中所示,采用zigzag扫描方式,则在扫描顺序的初始段出现连续非零系数的概率就会很高,即出现前M个连续的量化系数均为非零系的可能性就会很高,使用本申请实施例中的该方案就会非常有用。 本申请的可选实施例中,根据待编码块的前M个量化系数,确定待编码块的标识信息之前,还可以包括: 获取待编码块的相关信息; 根据相关信息确定M的取值。 可选的,该相关信息可以包括但不限于编码块大小或待编码块所对应视频的视频纹理信息中的至少一项。 对于一待编码块,由于编码块大小、编码块的纹理信息的复杂度等信息的不同,在扫描顺序的初始段出现连续非零系数的概率、连续非零系数的个数也都可能不同,因此,为了进一步提高编码效果,可以根据待编码块的相关信息,来动态确定不同的M的取值,以更好的适应各种不同的编码块。 也就是说,在omit_m_run_flag的确定过程中定义的M可以是更大的取值或者更小的取值,也可以根据视频类型(纹理复杂或者简单,块的大小等),自适应的调整M的取值。 本申请的可选实施例中,确定标识信息的上下文,包括: 根据待编码块的关联编码块的编码参数信息、以及待编码块的块类型,确定标识信息的上下文; 其中,关联编码块是已编码完成的编码块,上下文是基于编码参数信息和块类型设计的,块类型为亮度编码块或色度编码块。 由前文的描述可知,上下文是语法元素的核心,而合理的上下文设计可以进一步提升压缩效率,因为上下文揭示了信号之间的相关性,使用与该信号相关性强的信息来编码信号,比使用与该信号相关性弱或不相关的信息进行编码,编码效果要突出很多。与现有语法元素的上下文设计原理类似,本申请实施例的编码块的标识信息的上下文的设计,也是在已经编码完成的信息中寻找与当前信号比较相关的信息,即根据与待编码块关联的、且已编码完成的编码块的编码参数信息,来设计omit_m_run_flag的上下文。另外,由于编码块按照颜色通道可以对应有亮度块和色度块,因此,在设计上下文时,还需要考虑待编码块的类型,即待编码块是亮度块,还是色度块。 在实际应用中,具体选用关联编码块以及选用关联编码块的哪些编码参数信息,可以根据实际需求选择,本申请实施例不做限定。 作为一可选方案关联编码块包括以下至少一项: 与待编码块直接相邻的至少一个已编码块; 与待编码块间接相邻的至少一个已编码块。 例如,如图4中所示的一示例,关联编码块可以选用待编码块的上方相邻的已编码块和左侧相邻的已编码块。 作为一可选方案,该编码参数信息可以包括但不限于已编码块的量化系数信息、已编码块的标识信息、或已编码块的块类型信息中的至少一项。 如图4中所示的示例,在关联编码块为待编码块的上方相邻的已编码块和左侧相邻的已编码块时,编码参数信息可以包括上方相邻的已编码块的标识信息(图中所示的omit_m_run_flag_A)和连续非零系数(开始扫描时的连续非零系数)个数CNumA,以及左侧相邻的已编码块的标识信息(图中所示的omit_m_run_flag_L)和连续非零系数个数CNumL。 需要说明的是,对于标识信息的上下文设计部分,参考左块(左侧相邻的编码块)和上块(上方相邻的块)只是其中一种示例,在实际应用中,还可以参考更多的左边的块、上边的块、左上方的块等,还可以对参考块的大小进行限制等。也就是说,可以根据需求配置关联编码块的选用规则。 本申请的可选实施例中,根据待编码块的关联编码块的编码参数信息、以及块类型,确定标识信息的上下文,包括: 根据编码参数信息和块类型,以及上下文索引号确定规则,确定标识信息的上下文的索引号,上下文索引号确定规则是基于编码参数信息和块类型配置的; 根据上下文的索引号确定标识信息的上下文。 在实际应用中,为了提升编码效果,减少冗余数据,对于一个语法元素,通常会设计多个上下文,此时,则会为每个上下文设置相应的索引号,在确定待编码块的上下文时,则可以根据关联编码块的参数信息和块类型,以及上下文的设计规则(即上下文索引号确定规则),确定出所需要采用的上下文的索引号,从而根据索引号确定出编码时所选用的上下文。 本申请的可选实施例中,上下文索引号确定规则包括索引号偏移确定规则和索引号确定规则,其中,索引号偏移确定规则是基于编码参数信息配置的,索引号确定规则是基于块类型确定的; 根据编码参数信息和块类型,以及上下文索引号确定规则,确定标识信息的上下文的索引号,包括: 根据编码参数信息和索引号偏移确定规则,确定上下文的索引号的偏移; 根据块类型和偏移,以及索引号确定规则,确定上下文的索引号。 具体的,在设计上下文时,会根据不同的块类型即颜色通道信息,设计不同的上下文,即分别设计对应于亮度(Luma)分量的上下文和对应于色度(Chroma)分量的上下文。作为一种可选方案,则可以首先确定出索引号的偏移,再根据待编码块的类型和该偏移,确定出最终的上下文。 可以理解的是,上述索引号的偏移指的是相对于Luma分量的上下文的起始索引号的偏移,或者是相对于Chroma分量的上下文的起始索引号的偏移。作为一示例,假设上下文个数设计为6个,其中包括Luma分量3个,chroma分量3个,上下文索引号取值为0~5,其中,0~2对应于Luma分量,3~5对应于chroma分量,则偏移是相对于索引号0或索引号3的偏移。 下面结合一个示例,对本申请实施例提供的omit_m_run_flag的上下文的设计原理进行说明。可以理解的是,该示例中的上下文的个数,以及索引号的推导也只是一种示例,在实际应用中,可以根据实际需求增加或者减少上下文个数,同时也可以改变上下文索引号的推导方式,该示例并不构成对本申请方案的限定。 本示例中,在设计omit_m_run_flag的上下文时,主要参考的信息有:当前块的上面的已经编码的块(对于编码过程而言)/已解码的块(对于解码过程而言),以及当前块的左边的已经编码的块/已经解码的块,二者的块标识信息的属性omit_m_run_flag_A和omit_m_run_flag_L,以及连续非零系数的个数CNumA和CNumL。上下文个数设计为6个,其中包括Luma分量3个,chroma分量3个,6个上下文索引号取值为0~5,0~2对应于Luma分量,3~5对应于chroma分量。 本示例中待编码块上下文的推导流程如下: 逻辑表达式(1): int offset=(omit_m_run_flag_L==1&&omit_m_run_flag_A==1)?0:((omit_m_run_flag_L==1||omit_m_run_flag_A==1)&&((CNumA>M+extra)||(CNumL>M+extra)))?1:2 逻辑表达式(2):ctx_Idx=offset+(ch_type==luma)?0:3 其中,上述逻辑表达式(1)为确定索引号偏移offset的表达式,即本示例中的索引号偏移确定规则;上述逻辑表达式(2)为确定上下文索引号ctx_Idx的表达式,即本示例中的索引号确定规则。 逻辑表达式(1)具体可以解读为:如果当前块上方的已编码块(简称为上方已编码块)的标识信息为1且当前块左侧的已编码块(简称为左侧已编码块))的标识信息为1(即omit_m_run_flag_L==1&&omit_m_run_flag_A==1),则offset=0,否则,offset=((omit_m_run_flag_L==1||omit_m_run_flag_A==1)&&((CNumA>M+extra)||(CNumL>M+extra)))?1:2,具体含义为:如果上方已编码块的标识信息和左侧已编码块的标识信息中有一个为1(即omit_m_run_flag_L==1||omit_m_run_flag_A==1),且CNumA和CNumL中有一个满足大于设定值(M+extra),则offset=1,否则offset=2,其中,M即为前文中按照扫描顺序开始编码时满足跳过run编码的连续非零系数的个数,extra为一设定数值,可以根据实际需求配置。 逻辑表达式(2)具体可以解读为:如果当前待编码块为亮度块即ch_type==luma,则上下文索引号ctx_Idx=offset,否则,ctx_Idx=offset+3,也就是说,对于亮度块,上下文索引号即为偏移,对于色度块,上下文索引号为偏移加上3(所设计的对应于亮度分量的上下文的数量)。 如图5中所示的示意图,假设基于上述逻辑表达式(1)确定出的offset=1,当前块为亮度块,则基于逻辑表达式(2)可以确定出当前块的标识信息的上下文索引号ctx_Idx=1,如图5中所示,则可以基于确定出的下文索引号在用于存储块标识信息的下文buffer中查找到相应的上下文。 本申请的可选实施例中,在完成对待编码块的编码后,该方法还包括:根据待编码块的编码结果,对上下文进行更新。 为了使不同待编码块的标识信息的上下文能够根据环境的不同而改变,在每次完成一个待编码块的编码后,可以根据其编码结果,对所使用的标识信息的上下文进行更新。例如,当前待编码块所选用的标识信息的上下文为索引号为1的上下文(简称为1号上下文),则在完成对当前待编码块的编码之后,需要把标识信息的上下文buffer中该索引号对应的上下文的信息进行更新,在对下一个待编码块进行编码时,如果此时该块所选择的标识信息的上下文也是1号上下文,那此时所使用的信息就是更新后的上下文信息了。 对应于图3中所示的编码方法,本申请实施例相应提供了一种解码方法,如图6中所示,该解码方法主要包括以下步骤: 步骤S210:确定待解码块的标识信息的上下文; 步骤S220:根据标识信息的上下文对解码块的编码码流进行解码,得到待编码块的标识信息,其中,标识信息为第一标识或第二标识,第一标识用于标识待解码块所对应的前M个量化系数均为非零系数,第二标识用于标识前M个量化系数中存在零系数,其中,M≥1; 步骤S230:若标识信息为第一标识,则确定待解码块所对应的前M个量化系数的run为零,对编码码流中前M个量化系数的level所对应的码流数据进行解码,得到每个量化系数的level,并对除前M个量化系数之外的其他量化系数的run和level所对应的码流数据分别进行解码,得到每个量化系数的run和level;若标识为第二标识,则对编码码流中每个量化系数的run和level所对应的码流数据分别进行解码,得到每个量化系数的run和level。 本申请所提供的该解码方法,是与本申请所提供的编码方法相对应的解码方法,该解码方法的具体实现是对于上述编码处理方式的反向处理,即解码方法中的处理步骤是对上述编码中相应处理步骤的反向处理,将编码后的信息解码为编码前的信息,因此,可以理解的是,解码方法中的处理步骤是与编码方法中的步骤相对应的,编码方法中相应步骤的具体描述可以参见前文中编码部分的相应描述。 例如,对于相对应的待编码块和待解码块,在编码和解码时所采用的上下文是相同,如编码端使用了索引号为1的上下文,那解码端也同样使用索引号为1的上下文,只要编码端与解码端是匹配的,才能够实现信息的还原。也就是说,编码端与解码端都是需要相同的语法元素的上下文,因为只有相同的语法元素的相同上下文,采用相同的更新、计算规则,才能够实现正确的解码。 下面示出了本申请实施例提供的一种在待解码块的omit_m_run_flag=1时,部分解码流程的逻辑代码:
其中,上述代码中,Str表示编码码流,因为编码端编码一个语法元素会生成一段二进制串,这个二进制串要写到码流中,这个码流是解码端的输入,解码端通过这个输入读取这个输入的码流的码流串,然后就可以在对应位置找到对应的语法元素的编码得到的值,再将编码得到的值解码出来。符号“&”表示读取码流的地址的操作。 该段逻辑代码则可以解读为:通过对编码码流即待解码块进行解码,确定出块的标识信息,即Decode_bin(&str,ctx),该处的ctx即为待解码块的标识信息的上下文,可以理解的是,对于同一块而言,编码和解码时的上下文是相同的。在解码出待解码块的标识信息omit_m_run_flag之后,即可基于omit_m_run_flag进行下一步解码。如上述代码中所示,在omit_m_run_flag=1时,如果是前M个系数所对应的码流,则这M个系数对应的run为0,即上述If(pos 本申请的可选实施例中,确定待解码块的标识信息的上下文,包括: 根据待解码块的关联解码块的解码参数信息、以及待解码块的块类型,确定标识信息的上下文; 其中,关联解码块是已解码完成的解码块,上下文是基于解码参数信息和块类型设计的,块类型为亮度解码块或色度解码块。 本申请的可选实施例中,根据待解码块的关联解码块的解码参数信息、以及块类型,确定标识信息的上下文,包括: 根据解码参数信息和块类型,以及上下文索引号确定规则,确定标识信息的上下文的索引号,上下文索引号确定规则是基于解码参数信息和块类型配置的; 根据上下文的索引号确定标识信息的上下文。 本申请的可选实施例中,上下文索引号确定规则包括索引号偏移确定规则和索引号确定规则,其中,索引号偏移确定规则是基于解码参数信息配置的,索引号确定规则是基于块类型确定的; 根据解码参数信息和块类型,以及上下文索引号确定规则,确定标识信息的上下文的索引号,包括: 根据解码参数信息和索引号偏移确定规则,确定上下文的索引号的偏移; 根据块类型和偏移,以及索引号确定规则,确定上下文的索引号。 本申请的可选实施例中,关联解码块包括以下至少一项: 与待解码块直接相邻的至少一个已解码块; 与待解码块间接相邻的至少一个已解码块。 本申请的可选实施例中,关联解码块包括待解码块的上方相邻的已解码块和左侧相邻的已解码块。 本申请的可选实施例中,解码参数信息包括关联解码块的量化系数信息、关联解码块的标识信息、或关联解码块的块类型信息中的至少一项。 本申请的可选实施例中,在完成对待编码块的解码之后,该方法还包括: 根据待编码块的解码结果,对解码时所选用的标识信息的上下文进行更新。 本申请的可选实施例中,该方法还包括: 获取待解码块的相关信息; 根据相关信息确定M的取值。 本申请的可选实施例中,相关信息包括待解码块的块大小或待解码块所对应视频的视频纹理信息中的至少一项。 对应于图3中所示的编码方法,本申请实施例还提供了一种编码装置,如图7所示,该编码装置100可以包括块标识确定模块110和编码模块120,其中: 块标识确定模块110,用于根据待编码块的前M个量化系数,确定待编码块的标识信息,其中,M≥1,标识信息为第一标识或第二标识,第一标识用于标识前M个量化系数均为非零系数,第二标识用于标识前M个量化系数中存在零系数; 编码模块120,用于确定标识信息的上下文,并根据标识信息的上下文对标识信息进行编码; 编码模块120,还用于在标识信息为第一标识时,对前M个量化系数中的每个量化系数的值level进行编码,对除前M个量化系数之外的其他量化系数中的每个非零系数的游程run和level进行编码;在标识信息为第二标识时,对待编码块的每个非零量化系数的run和level进行编码。 可选的,编码模块在确定标识信息的上下文时,具体用于: 根据待编码块的关联编码块的编码参数信息、以及待编码块的块类型,确定标识信息的上下文; 其中,关联编码块是已编码完成的编码块,上下文是基于编码参数信息和块类型设计的,块类型为亮度编码块或色度编码块。 可选的,编码模块在根据待编码块的关联编码块的编码参数信息、以及块类型,确定标识信息的上下文时,具体用于: 根据编码参数信息和块类型,以及上下文索引号确定规则,确定标识信息的上下文的索引号,上下文索引号确定规则是基于编码参数信息和块类型配置的; 根据上下文的索引号确定标识信息的上下文。 可选的,上下文索引号确定规则包括索引号偏移确定规则和索引号确定规则,其中,索引号偏移确定规则是基于编码参数信息配置的,索引号确定规则是基于块类型确定的; 编码模块在根据编码参数信息和块类型,以及上下文索引号确定规则,确定标识信息的上下文的索引号时,具体用于: 根据编码参数信息和索引号偏移确定规则,确定上下文的索引号的偏移; 根据块类型和偏移,以及索引号确定规则,确定上下文的索引号。 可选的,关联编码块包括以下至少一项: 与待编码块直接相邻的至少一个已编码块; 与待编码块间接相邻的至少一个已编码块。 可选的,关联编码块包括待编码块的上方相邻的已编码块和左侧相邻的已编码块。 可选的,编码参数信息包括关联编码块的量化系数信息、关联编码块的标识信息、或关联编码块的块类型信息中的至少一项。 可选的,该装置还包括: 上下文更新模块,用于在完成对待编码块的编码后,根据待编码块的编码结果,对上下文进行更新。 可选的,块标识确定模块还用于: 在根据待编码块的前M个量化系数,确定待编码块的标识信息之前,获取待编码块的相关信息,根据相关信息确定M的取值。 可选的,相关信息包括编码块大小或待编码块所对应视频的视频纹理信息中的至少一项。 可选的,编码模块还用于: 对待编码块的量化系数进行zigzag扫描,确定待编码块的各个量化系数的run和level。 对应于图6中所示的解码方法,本申请实施例提供了一种解码装置,如图8中所示,该解码装置200可以包括上下文确定模块210和解码模块220。 上下文确定模块210,用于确定待解码块的标识信息的上下文; 解码模块220,用于根据标识信息的上下文对解码块的编码码流进行解码,得到待编码块的标识信息,标识信息为第一标识或第二标识,第一标识用于标识待解码块所对应的前M个量化系数均为非零系数,第二标识用于标识前M个量化系数中存在零系数,其中,M≥1; 解码模块220,还用于在标识信息为第一标识时,则确定待解码块所对应的前M个量化系数的run为零,对编码码流中前M个量化系数的level所对应的码流数据进行解码,得到每个量化系数的level,并对除前M个量化系数之外的其他量化系数的run和level所对应的码流数据分别进行解码,得到每个量化系数的run和level;以及用于在标识信息为第二标识时,则对编码码流中每个量化系数的run和level所对应的码流数据分别进行解码,得到每个量化系数的run和level。 可选的,上下文确定模块在确定待解码块的标识信息的上下文时,具体用于: 根据待解码块的关联解码块的解码参数信息、以及待解码块的块类型,确定标识信息的上下文; 其中,关联解码块是已解码完成的解码块,上下文是基于解码参数信息和块类型设计的,块类型为亮度解码块或色度解码块。 可选的,上下文确定模块在根据待解码块的关联解码块的解码参数信息、以及块类型,确定标识信息的上下文时,具体用于: 根据解码参数信息和块类型,以及上下文索引号确定规则,确定标识信息的上下文的索引号,上下文索引号确定规则是基于解码参数信息和块类型配置的; 根据上下文的索引号确定标识信息的上下文。 可选的,上下文索引号确定规则包括索引号偏移确定规则和索引号确定规则,其中,索引号偏移确定规则是基于解码参数信息配置的,索引号确定规则是基于块类型确定的; 上下文确定模块在根据解码参数信息和块类型,以及上下文索引号确定规则,确定标识信息的上下文的索引号时,具体用于: 根据解码参数信息和索引号偏移确定规则,确定上下文的索引号的偏移; 根据块类型和偏移,以及索引号确定规则,确定上下文的索引号。 第四方面的一种可选实施例中,关联解码块包括以下至少一项: 与待解码块直接相邻的至少一个已解码块; 与待解码块间接相邻的至少一个已解码块。 可选的,关联解码块包括待解码块的上方相邻的已解码块和左侧相邻的已解码块。 可选的,解码参数信息包括关联解码块的量化系数信息、关联解码块的标识信息、或关联解码块的块类型信息中的至少一项。 可选的,该装置还包括: 上下文更新模块,用于在完成对待编码块的解码之后,根据待编码块的解码结果对上述所确定的上下文进行更新。 可选的,解码模块还用于: 获取待解码块的相关信息; 根据相关信息确定M的取值。 可选的,相关信息包括待解码块的块大小或待解码块所对应视频的视频纹理信息中的至少一项。 对于本领域技术人员而言清楚的是,由于本发明实施例所提供的装置(编码装置/解码装置)为可以执行本发明实施例中的相应的方法的装置,故而基于本发明实施例中所提供的方法,本领域所属技术人员能够了解本发明实施例的装置的具体实施方式以及其各种变化形式,所以在此对于该装置如何实现本发明实施例中的方法不再详细介绍。只要本领域所属技术人员实施本发明实施例中的方法所采用的装置,都属于本申请所欲保护的范围。 基于与本申请实施例所提供的编码方法或解码方法相同的原理,本申请实施例提供了一种电子设备,该电子设备包括存储器和处理器; 存储器中存储有计算机程序; 处理器,用于在运行计算机程序时执行本申请任一可选实施例中所示的编码方法或解码方法。 第六方面,本申请实施例提供了一种计算机可读存储介质,该存储介质上用于存储计算机程序,计算机程序在处理器中运行时用于执行本申请任一可选实施例中所示的编码方法或解码方法。 图9中示出了本申请实施例所适用的一种电子设备的结构示意图,如图9所示,图9所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本申请实施例的限定。 处理器4001可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。 总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(ExtendedIndustry Standard Architecture,扩展工业标准结构)总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图9中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。 存储器4003可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(Compact DiscRead Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。 存储器4003用于存储执行本申请方案的应用程序代码,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的应用程序代码,以实现前述任一方法实施例所示的方法。 应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。 以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
- 编码方法、解码方法、相应的装置、电子设备及存储介质
- 解码方法、编码方法、相应的装置、电子设备及存储介质