CN110800299B - 用于对图像数据的块进行熵代码化的扫描顺序自适应 - Google Patents

用于对图像数据的块进行熵代码化的扫描顺序自适应 Download PDF

Info

Publication number
CN110800299B
CN110800299B CN201880036773.1A CN201880036773A CN110800299B CN 110800299 B CN110800299 B CN 110800299B CN 201880036773 A CN201880036773 A CN 201880036773A CN 110800299 B CN110800299 B CN 110800299B
Authority
CN
China
Prior art keywords
elements
block
group
scan order
zero
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201880036773.1A
Other languages
English (en)
Other versions
CN110800299A (zh
Inventor
徐睿杰
达克·何
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of CN110800299A publication Critical patent/CN110800299A/zh
Application granted granted Critical
Publication of CN110800299B publication Critical patent/CN110800299B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/157Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
    • H04N19/159Prediction type, e.g. intra-frame, inter-frame or bidirectional frame prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/124Quantisation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/129Scanning of coding units, e.g. zig-zag scan of transform coefficients or flexible macroblock ordering [FMO]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

公开了用于对图像数据块进行熵代码化的系统和方法。例如,方法可以包括:将视频数据块分成多组元素;使用熵解码器,从编码比特流解码数据以获取所述多组元素中的第一组的元素;基于所述第一组的所述元素来确定类别;基于所述类别,针对所述多组元素中的第二组的元素选择上下文;以及,使用所述熵解码器使用所述上下文,从所述编码比特流解码数据以获取所述多组元素中的所述第二组的所述元素。

Description

用于对图像数据的块进行熵代码化的扫描顺序自适应
背景技术
数字视频流可以使用一系列帧或静止图像来表示视频。数字视频可用于各种应用,包括:例如,视频会议、高清视频娱乐、视频广告、或用户生成的视频的共享。数字视频流可以包含大量数据,并且消耗用于处理、传输或存储视频数据的计算装置的大量计算或通信资源。已经提出了各种方法(包括压缩和其他编码技术)来减少视频流中的数据量。
可通过将帧或图像分解成基于相同帧或图像内的其他块预测的块来执行基于空间相似性的编码。块和预测块之间的差异(即,残差误差)被压缩并编码在比特流中。解码器使用差异和参考帧来重构帧或图像。
发明内容
本申请涉及对视频数据的当前块进行编码和解码。本文公开了用于使用熵代码化的适应对当前块进行编码和解码的系统、方法和设备的多个方面。
所公开的实施方式的一个方面是用于解码视频的设备或系统。该系统包括存储器和处理器。存储器存储可由处理器执行以使系统执行以下的指令:将视频数据块分成多组元素;使用熵解码器,从编码比特流解码数据以获取多组元素中的第一组的元素;基于第一组的元素来确定类别;基于类别,针对多组元素中的第二组的元素选择上下文,以及,使用熵解码器使用该上下文,从编码比特流解码数据以获取多组元素中的第二组的元素。
另一方面是一种用于解码视频的方法。该方法包括:将视频数据块分成多组元素;使用熵解码器,从编码比特流解码数据以获取多组元素中的第一组的元素;基于第一组的元素来确定类别;基于类别,针对多组元素中的第二组的元素选择上下文,以及,使用熵解码器使用该上下文,从编码比特流解码数据以获取多组元素中的第二组的元素。
另一方面是一种用于编码视频的设备或系统。该系统包括存储器和处理器。存储器存储可由处理器执行以使系统执行以下的指令:将视频数据块分成多组元素;使用熵编码器,编码多组元素中的第一组的元素;基于第一组的元素来确定类别;基于类别,针对多组元素中的第二组的元素选择上下文;以及使用熵编码器使用该上下文,编码多组元素中的第二组的元素。另一方面是一种用于编码视频的方法。该方法包括:将视频数据块分成多组元素;使用熵编码器,编码多组元素中的第一组的元素;基于第一组的元素来确定类别;基于类别,针对多组元素中的第二组的元素选择上下文;以及使用熵编码器使用该上下文,编码多组元素中的第二组的元素。
所公开的实施方式的另一方面是一种用于解码视频的设备或系统。该系统包括存储器和处理器。存储器存储可由处理器执行以使系统执行以下的指令:将视频数据块分成多组元素;使用熵解码器,从编码比特流解码数据以使用扫描顺序获取多组元素中的第一组的元素,其中,第一组包括在块的角部处形成三角形的元素,以及其中,三角形包括块的第一行的元素和块的第一列的元素,基于第一组的元素来确定多组元素中的第二组的第二扫描顺序;以及使用熵解码器,从编码比特流解码数据以使用第二扫描顺序获取多组元素中的第二组的元素。
另一方面是一种用于编码视频的设备或系统。该系统包括存储器和处理器。存储器存储可由处理器执行以使系统执行以下的指令:将视频数据块分成多组元素;使用熵编码器使用第一扫描顺序,编码多组元素中的第一组的元素,其中,第一组包括在块的角部处形成三角形的元素,以及其中,三角形包括块的第一行的元素和块的第一列的元素;基于第一组的元素来确定多组元素中的第二组的第二扫描顺序;以及使用熵编码器使用第二扫描顺序,编码多组元素中的第二组的元素。
在以下对实施例、所附权利要求书和附图的详细描述中公开了本公开的这些和其他方面。
附图说明
此处的描述参照了附图,其中,在多个视图中,类似的附图标记表示类似的零部件。
图1是视频编码和解码系统的示意图。
图2是能实施发送站或接收站的计算装置的示例的框图。
图3是要编码且随后解码的视频流的示意图。
图4是根据本公开的实施方式的编码器的框图。
图5是根据本公开的实施方式的解码器的框图。
图6是图示了根据本公开的实施方式的量化变换系数的示意图。
图7A是分别对量化系数和帧内预测模式进行编码的编码器的框图。
图7B是分别对量化系数和帧内预测模式进行解码的编码器的框图。
图8A是使用帧内预测模式编码量化系数的编码器的框图。
图8B是使用帧内预测模式解码量化系数的解码器的框图。
图9是根据本公开的实施方式的用于使用帧内预测模式编码当前块的过程的流程图。
图10是根据本公开的实施方式的编码器的框图。
图11是根据本公开的实施方式的用于使用帧内预测模式解码当前块的过程的流程图。
图12是根据本公开的实施方式的解码器的框图。
图13是根据本公开的实施方式的用于使用帧内预测模式重构当前块的过程的流程图。
图14A是根据本公开的实施方式的具有90度预测角度的帧内预测模式的示意图。
图14B是根据本公开的实施方式的具有135度预测角度的帧内预测模式的示意图。
图15A是基于块的第一组元素的数据适应的针对该块的扫描顺序的集合的示例的示意图。
图15B是基于块的第一组元素的非零图适应的针对该块的扫描顺序的集合的示例的示意图。
图16是用于自适应扫描顺序以编码视频数据块的过程的示例的流程图。
图17是用于自适应扫描顺序以解码视频数据块的过程的示例的流程图。
图18A是用于针对视频数据块的下一组元素确定扫描顺序的过程的示例的流程图。
图18B是用于针对视频数据块的下一组元素确定扫描顺序的过程的示例的流程图。
图19是用于适应扫描顺序以编码视频数据块并且使用基于块中的数据选择的上下文来对该块的帧内预测模式进行编码的过程的示例的流程图。
图20是用于适应扫描顺序以解码视频数据块并且使用基于块中的数据选择的上下文来对该块的帧内预测模式进行解码的过程的示例的流程图。
图21A是基于块的第一组元素的数据适应的针对该块的扫描顺序的集合的示例的示意图。
图21B是基于块的第一组元素的大小适应的针对该块的扫描顺序的集合的示例的示意图。
图22A是图像数据块的第一组元素的扫描顺序的示例的示意图。
图22B是图像数据块的第一组元素的扫描顺序的示例的示意图。
图23是用于适应上下文以编码视频数据块的过程的示例的流程图。
图24是用于适应上下文以解码视频数据块的过程的示例的流程图。
图25A是用于基于图像数据块的元素子集来确定块的类别的过程的示例的流程图。
图25B是用于基于图像数据块的元素子集来确定块的类别的过程的示例的流程图。
具体实施方式
与代码化视频流有关的压缩方案可以包括将图像分解成块并且使用一种或多种技术生成数字视频输出比特流(即,编码比特流)来减小输出比特流的数据速率。接收到的比特流可以被解码以根据压缩信息来重构块和源图像。用于编码和解码视频流的技术可以包括对视频信号的分量(例如,对来自视频帧的块的预测残差)进行熵代码化。
混合视频代码化框架可以利用预测、变换、量化和/或熵代码化来压缩视频数据块。取决于在预测、变换和量化之后在量化变换系数的块中出现的图案,可以通过自适应地选择扫描顺序而不是使用固定的扫描顺序来改进熵代码化的压缩性能。例如,如果大量的零值系数出现在该块的扫描顺序的末尾,则可以(例如,通过块指示的结束)显式或隐式地(例如,使用熵编码器或熵解码器)对零的结束游程进行非常有效地代码化。
可以将块分成多组元素(例如,残差块的量化变换系数)以用于熵代码,并且可以使用采用在编码器和兼容解码器处是可用的默认扫描顺序编码的第一组元素中的信息来确定下一组的扫描顺序。例如,基于先前代码化的多组元素中的非零值元素的分布,可以选择该块的最后一组或多组元素的扫描顺序,以增加在该块的所得到的扫描顺序的末尾处出现零值元素的可能性。在一些实施方式中,扫描顺序适应是仅基于当前元素块中可用的信息(例如,残差块的量化变换系数)。这样的方案可以提供的优点是避免块的熵代码化对其他参数(诸如,该块的帧内预测模式或可以由受约束的自适应扫描顺序方案使用的视频的其他块的系数统计)的依赖性。
也可以利用第一组元素中的信息通过适应用于对块中的后续组元素(例如,包括所有剩余元素的第二组元素)进行代码化的一个或多个上下文,提高熵编码方案的代码化效率。例如,可以基于第一组的元素来确定类别,并且可以部分地基于该类别来选择用于对块的第二组元素中的元素进行代码化的上下文。在一些实施方式中,也可以基于类别来确定第二组元素的扫描顺序。
用于适应用于对块的第二组元素进行代码化的上下文和/或扫描顺序的第一组元素可以被设计为减小第一组的大小,同时仍提供足够的信息来强有力地通知适应。通过减小第一组的大小,可以将改进的适应后的编码参数(例如,上下文或扫描顺序)应用于块的较大百分比的元素,以提高整体代码化效率。也可以通过将第一组设计为包括最可能为非零的块的元素(例如,通过对第一组使用左上三角形状)来提高代码化效率,以避免约束在第一组之后要代码化的这些可能的非零系数。在一些实施方式中,可以基于块的大小来选择第一组元素的形状和大小。
通过基于在块的开始扫描顺序的一组划分的元素中的信息自适应地确定块的代码化上下文和/或结束扫描顺序,可以实施优于其他代码化方案的许多优点。例如,优点可以包括:(1)通过使用适合于当前块中的非零系数的分布的扫描顺序和/或上下文来提高熵编码器/解码器的代码化效率;以及(2)通过避免对当前块之外的信息的解析依赖性,允许以不同顺序处理帧的块;和/或(3)通过使得能够在残差块的元素之后对帧内预测模式进行解码并且利用该块的元素与用于生成该块的帧内预测模式之间的相关性来提高帧内预测模式代码化效率。
可以基于在块的开始扫描顺序的一组划分的元素中的信息来适应基于帧间预测产生的残差块的块的扫描顺序。例如,帧间预测可以使用运动矢量,该运动矢量表示先前代码化的块相对于当前块的空间位移。可以使用诸如运动搜索等运动估计方法来识别运动矢量。在运动搜索中,参考帧的一部分可以转换为一系列位置以形成预测块,该预测块可以从当前帧的一部分中减去以形成一系列残差。可以将与具有例如最小残差的位置相对应的水平和/或垂直平移选择为运动矢量。可以将运动矢量与参考帧的指示一起编码在编码比特流中。所得到的帧间预测残差可以表现出空间模式,该空间模式可以被识别和利用以通过基于残差适应块的扫描顺序来提高残差的熵代码化效率。
对视频流或其一部分(例如,帧或块)进行编码可以包括在视频流中使用空间相似性以提高代码化效率。例如,可以基于识别先前代码化的像素值之间,或者先前代码化的像素值的组合与当前块中的那些之间的差(残差)来编码视频流的当前块。
使用空间相似性的编码可以被称为帧内预测。帧内预测尝试使用当前块外围的像素来预测视频流的帧的当前块的像素值;也就是说,使用与当前块在同一帧中但在当前块之外的像素。可以沿着预测方向(在此称为预测角度)执行帧内预测,其中,方向可以对应于各个帧内预测模式。帧内预测模式使用被预测的当前块外围的像素。当前块外围的像素是当前块之外的像素。
可以支持许多不同的帧内预测模式。一些帧内预测模式可以被称为定向帧内预测模式,其可以具有对应的预测角度。定向帧内预测模式可以包括:例如,水平帧内预测模式、垂直帧内预测模式和对角线帧内预测模式。水平帧内预测模式对应于具有大体水平的预测角度的帧内预测。垂直帧内预测模式对应于具有大体垂直的预测角度的帧内预测。对角线帧内预测模式对应于具有既不是大体水平的也不是大体垂直的预测角度的定向帧内预测。定向帧内预测模式的预测角度可以是0至360度之间的预测角度。在一些实施方式中,预测角度可以是0至270度之间的预测角度。可用的预测角度也可以是所有可能的预测角度的子集。例如,编解码器可以具有与0到360个预测角度中的50到60个离散预测角度相对应的可用预测模式。还可以支持非定向帧内预测模式,包括:例如,平面帧内预测模式和DC帧内预测模式。
定向帧内预测模式可用于沿着角线传播来自先前代码化的块的像素值以预测块。例如,正在传播的像素值可以包括在同一帧中的块上方和/或左侧的外围像素(例如,当在编码时使用光栅扫描顺序时)。图14A和图14B示出了帧内预测的两个示例。
图14A是根据本公开的实施方式的具有90度预测角度的帧内预测模式1401的示意图。图14A示出了使用垂直帧内预测模式针对要预测的4×4块(也称为当前块)生成预测块。图14A的帧内预测模式沿预测块的列向下传播外围像素A至D,使得一列中的每个像素的值设置为等于在箭头方向上相邻的外围像素A至D的值。
图14B是根据本公开的实施方式的具有135度预测角度的帧内预测模式1402的示意图。图14B示出了使用对角线帧内预测模式针对4×4当前块生成预测块。图14B的帧内预测模式沿着135度线(即,线1406)向右下传播外围像素值以形成预测块。外围像素值可以包括:例如,来自与帧1410的4×4当前块相邻的块的一些外围像素1408(即,像素A至R),以形成用于当前块的预测块1403。尽管以使用外围像素1408的像素值生成预测块1403为例图示了在图14B中的135度帧内预测模式,但也可以使用一些(例如,两个、三个或更多个)外围像素的线性组合(例如,加权平均值)沿着延伸穿过块的线来预测预测块的像素值。例如,可以通过像素值K、L和M的加权平均值形成沿线1406传播的像素值1404。
如以下进一步描述的,残差误差的残差块可以由视频流的块的帧内预测产生。残差块可以在像素域中。残差块可以被变换到频域中,从而产生变换系数的变换块。可以对变换系数进行量化,从而得到量化变换系数(在此也称为量化系数)的量化变换块。量化变换系数的量化变换块在本文中也称为量化变换系数的块。可以对量化系数进行熵编码并且将其添加到编码比特流。也可以对帧内预测模式进行熵编码并且将其添加到编码比特流。解码器可以接收编码比特流,熵解码量化变换系数和/或帧内预测模式以重构原始视频帧。
用于对帧内预测模式进行编码的比特数可以取决于可用帧内预测模式的数量。在N种帧内预测模式可用的视频代码化系统中,可能需要log2N个比特来指示预测模式。例如,在九(9)或十(10)种帧内预测模式可用于4×4亮度块的系统中,可能需要四(4)个比特来指示帧内预测模式。在35种帧内预测模式可用于4×4亮度块的系统中,可能需要六(6)个比特来指示帧内预测模式。使用更多帧内预测模式的编码系统需要更多的比特来编码帧内预测模式。
随着可用帧内预测模式的数量增加,对帧内预测模式进行编码的成本(以比特为单位)增加。在某些情况下,编码帧内预测模式所需的比特数可以大于对正在编码的当前块的像素值进行编码所需的比特数。例如,为了在使用多于16种帧内预测模式的代码化系统中对4x4块(包含16个像素)进行编码,不同的预测模式的数量要大于要预测的像素的数量。这导致过饱和的问题。
本公开的实施方式可以使用帧内预测模式的改进的代码化来改进视频压缩。根据本公开的实施方式可以使用残差块中的信息来改进帧内预测模式的压缩性能。例如,熵编码器可以使用量化变换块中的信息来对帧内预测模式进行编码,从而提高压缩性能。通过使用量化变换块中的信息,可以降低由于对帧内预测模式进行编码而导致的比特率。根据本公开的实施方式的编码器和解码器可以改进熵代码化而不增加编码和解码的复杂性。
在首先描述可以实施本文公开的帧内预测模式的改进的代码化的环境之后,在本文中描述细节。
图1是视频编码和解码系统100的示意图。发送站102可以是例如具有硬件(诸如图1中所描述的硬件)的内部配置的计算机。然而,发送站102的其他合适的实施方式也是可能的。例如,发送站102的处理可以分布在多个装置之间。
网络104可以连接用于对视频流进行编码和解码的发送站102和接收站106。具体地,可以在发送站102中对视频流进行编码,并且可以在接收站106中对编码的视频流进行解码。网络104可以是例如因特网。在该示例中,网络104还可以是局域网(LAN)、广域网(WAN)、虚拟专用网(VPN)、蜂窝电话网络或将视频流从发送站102传输到接收站106的任何其他方式。
在一个示例中,接收站106可以是具有硬件(诸如图2所描述的硬件)的内部配置的计算机。然而,接收站106的其他合适的实施方式也是可能的。例如,接收站106的处理可以分布在多个装置之间。
视频编码和解码系统100的其他实施方式也是可能的。例如,一种实施方式可以省略网络104。在另一种实施方式中,可以对视频流进行编码,然后将其存储以在以后的时间传输到接收站106或具有存储器的任何其他装置。在一种实施方式中,接收站106(例如,经由网络104、计算机总线和/或某种通信路径)接收编码视频流,并存储该视频流以便稍后进行解码。在示例实施方式中,实时传输协议(RTP)用于通过网络104传输编码的视频。在另一种实施方式中,可以使用除RTP以外的传输协议,例如,基于超文本传输协议(HTTP)的视频流传输协议。
例如,当在视频会议系统中使用时,发送站102和/或接收站106可以包括对视频流进行编码和解码的能力,如下所述。例如,接收站106可以是视频会议参与者,其从视频会议服务器(例如,发送站102)接收编码视频比特流以解码和查看并且进一步编码并将其自身的视频比特流发送给视频会议服务器,供其他参与者解码和查看。
图2是能够实施发送站或接收站的计算装置200的示例的框图。例如,计算装置200可以实施图1的发送站102和接收站106之一或两者。计算装置200可以是包括多个计算装置的计算系统的形式,或者是单个计算装置的形式,例如,移动电话、平板计算机、膝上型计算机、笔记本计算机、台式计算机等。
计算装置200中的CPU 202可以是中央处理单元。可替代地,CPU 202可以是任何其他类型的装置或多个装置,其能够操纵或处理现在存在或以后开发的信息。尽管所公开的实施方式可以用如图所示的单个处理器(例如CPU 202)来实践,但是可以使用一个以上的处理器来实现速度和效率上的优势。
在实施方式中,计算装置200中的存储器204可以是只读存储器(ROM)装置或随机存取存储器(RAM)装置。任何其他合适类型的存储装置都可以用作存储器204。存储器204可以包括由CPU 202使用总线212访问的代码和数据206。存储器204还可以包括操作系统208和应用程序210,应用程序210包括至少一个程序,该程序允许CPU 202执行这里描述的方法。例如,应用程序210可以包括应用1至N,其还包括执行这里描述的方法的视频代码化应用。计算装置200还可以包括辅助存储214,其可以例如是与移动的计算装置200一起使用的记忆卡。由于视频通信会话可能包含大量信息,因此可以将它们全部或部分存储在辅助存储214中,并根据需要将其加载到存储器204中。
计算装置200还可以包括一个或多个输出装置,诸如显示器218。在一个示例中,显示器218可以是将显示器与可操作用于感测触摸输入的触敏元件组合的触敏显示器。显示器218可以经由总线212耦合到CPU 202。除了显示器218之外或作为显示器218的替代,可以提供允许用户编程或使用计算装置200的其他输出装置。当输出装置是显示器或包括显示器时,则该显示器可以以各种方式实施,包括通过液晶显示器(LCD)、阴极射线管(CRT)显示器或发光二极管(LED)显示器,诸如有机LED(OLED))显示器。
计算装置200还可以包括图像感测装置220(例如,相机)、或现在存在的或以后开发的能够感测图像(诸如,操作计算装置200的用户的图像)的任何其他图像感测装置220,或与之通信。可以将图像感测装置220被定位成使得其朝向操作计算机装置200的用户。在示例中,可以对图像感测装置220的位置和光轴进行配置使得视野包括与显示器218直接相邻的区域,从该区域可以看到显示器218。
计算装置200还可以包括声音感测装置222(例如麦克风)、或现在存在的或以后开发的能够感测计算装置200附近的声音的任何其他声音感测装置,或与之通信。可以将声音感测装置222定位成使得其朝向操作计算装置200的用户,并且可以将其配置为接收在用户操作计算装置200时用户发出的声音(例如,语音或其他话语)。
尽管图2将计算装置200的CPU 202和存储器204描绘为集成到单个单元中,但是可以利用其他配置。CPU 202的操作可以分布在可以直接耦合或跨局域网或其他网络耦合的多个机器(每个机器具有一个或多个处理器)上。存储器204可以分布在多个机器之间,诸如基于网络的存储器或执行计算装置200的操作的多个机器中的存储器。尽管在这里被描绘为单个总线,但是计算装置200的总线212可以由多个总线组成。此外,辅助存储214可以直接耦合至计算装置200的其他组件,或者可以经由网络访问,并且可以包括单个集成单元(诸如记忆卡)或多个单元(诸如多个记忆卡)。因此,可以以多种配置来实施计算装置200。
图3是要编码且随后解码的视频流300的示例的图。视频流300包括视频序列302。在下一级别,视频序列302包括若干或多个相邻帧304。在一些情况下,帧可以被称为图片。尽管将三个帧描绘为相邻帧304,但是视频序列302可以包括任意数量的相邻帧304。然后可以将相邻帧304进一步细分为各个帧,例如帧306。在下一级别,帧306可以被分成一系列的片段308或平面。例如,片段308可以是允许并行处理的帧的子集。片段308也可以是可以将视频数据分离成单独的颜色的帧的子集。例如,彩色视频数据的帧306可以包括亮度平面和两个色度平面。可以以不同的分辨率对片段308进行采样。
不管帧306是否被划分为片段308,帧306都可以进一步细分为块310,其可以包含对应于例如帧306中的16x16像素的数据。块310也可以被布置为包括来自像素数据的一个或多个片段308的数据。块310还可以具有任何其他合适的大小,诸如4x4像素、8x8像素、16x8像素、8x16像素、16x16像素、4x32像素、8x32像素、16x32像素、32x4像素、32x8像素、32x16像素、32x32像素、64x64像素、或通常为NxM像素,其中,N、M可以是2的整数次幂,如2、4、8、16、32、64、128、256或更大。
图4是根据本公开的实施方式的编码器400的框图。如上所述,编码器400可以实施在发送站102中,诸如通过提供存储在存储器(例如,存储器204)中的计算机软件程序来实施。计算机软件程序可以包括机器指令,该机器指令在由诸如CPU 202等处理器执行时使发送站102以本文描述的方式对视频数据进行编码。编码器400也可以被实施为例如包括在发送站102中的专用硬件。编码器400具有用于在(由实线连接线示出的)正向路径中执行各种功能来使用视频流300作为输入产生编码或压缩比特流420的以下阶段:帧内/帧间预测阶段402、变换阶段404、量化阶段406和熵编码阶段408。编码器400还可以包括(由虚线连接线示出)重构路径以重构帧以对未来的块进行编码。在图4中,编码器400具有用于在重构路径中执行各种功能的以下阶段:去量化阶段410、逆变换阶段412、重构阶段414和环路滤波阶段416。编码器400的其他结构变型可以用于对视频流300进行编码。
当呈现视频流300以进行编码时,可以以块为单位处理帧306。在帧内/帧间预测阶段402中,可以使用帧内预测(也称为帧内预测)或帧间预测(也称为帧间预测)或两者的组合来对块进行编码。无论如何,都可以形成预测块。在帧内预测的情况下,可以从当前帧中先前已被编码和重构的样本形成预测块的全部或一部分。在帧间预测的情况下,可以从使用运动矢量确定的一个或多个先前构造的参考帧中的样本形成预测块的全部或一部分。
接下来,仍然参照图4,可以在帧内/帧间预测阶段402从当前块减去预测块以产生残差块(也称为残差)。变换阶段404使用基于块的变换将残差变换为例如频域中的变换系数。这种基于块的变换包括:例如,离散余弦变换(DCT)和非对称离散正弦变换(ADST)。其他基于块的变换(例如,身份变换、转置、旋转和卡胡南-洛夫(Karhunen–Loève)变换(KLT))也是可能的。此外,可以将不同变换的组合应用于单个残差。在变换的一个应用的示例中,DCT将残差块变换到频域,其中变换系数值基于空间频率。最低频率(DC)系数在矩阵左上角和最高频率系数在矩阵右下角。值得注意的是,预测块的大小以及因此产生的残差块的大小可能与变换块的大小不同。例如,可以将预测块划分为较小的块,对其应用单独的变换。
量化阶段406使用量化器值或量化等级将变换系数转换为离散的量子值,其被称为量化变换系数。例如,可以将变换系数除以量化器值并将其截断。然后,通过熵编码阶段408对量化变换系数进行熵编码。可以使用包括令牌树和二叉树的任何数量的技术来执行熵代码化。然后,将熵编码的系数以及用于解码块的其他信息(其可以包括:例如,所使用的预测类型、变换类型、运动矢量和量化器值)一起输出至压缩比特流420。可以将用于解码块的信息熵编码为压缩比特流420内的块、帧、切片和/或片段报头。压缩比特流420也可以被称为编码视频流或编码视频比特流,并且这些术语在本文中将可互换地使用。
(由虚线连接线示出的)图4中的重构路径可用于确保(下面描述的)编码器400和解码器500都使用相同的参考帧和块来解码压缩比特流420。重构路径执行与在解码过程中发生的将在下面进行更详细讨论的功能相似的功能,这些功能包括在去量化阶段410对量化变换系数进行去量化、以及在逆变换阶段412对去量化变换系数进行逆变换以产生导数残差块(也称为导数残差)。在重构阶段414中,可以将在帧内/帧间预测阶段402所预测的预测块添加到导数残差以创建重构块。可以将环路滤波阶段416应用于重构块,以减少诸如块伪影等失真。
编码器400的其他变型可以用于编码压缩比特流420。例如,针对某些块或帧,基于非变换的编码器400可以直接量化残差信号而无需变换阶段404。在另一实施方式中,编码器400可以具有组合成单个阶段的量化阶段406和去量化阶段410。
图5是根据本公开的实施方式的解码器500的框图。例如,通过提供存储在存储器204中的计算机软件程序,可以在接收站106中实施解码器500。该计算机软件程序可以包括机器指令,该机器指令在由诸如CPU 202等处理器执行时使接收站106以本文描述的方式解码视频数据。解码器500也可以在例如包括在发送站102或接收站106中的硬件中实施。类似于上面讨论的编码器400的重构路径,解码器500在一个示例中包括用于执行各种功能以从压缩比特流420产生输出视频流516的以下阶段:熵解码阶段502、去量化阶段504、逆变换阶段506、帧内/帧间预测阶段508、重构阶段510、环路滤波阶段512和后处理阶段514(例如,包括去块滤波)。解码器500的其他结构变型可以用于解码压缩比特流420。
当呈现压缩比特流420进行解码时,压缩比特流420内的数据元素可以由熵解码阶段502解码以产生一组量化变换系数。去量化阶段504对量化变换系数进行去量化(例如,通过将量化变换系数乘以量化器值),并且逆变换阶段506使用选择的变换类型对去量化变换系数进行逆变换以产生可以与由编码器400中的逆变换阶段412所创建的导数残差相同的导数残差。使用从压缩比特流420解码的报头信息,解码器500可以使用帧内/帧间预测阶段508来创建与在编码器400(例如,在帧内/帧间预测阶段402)中所创建的相同的预测块。在重构阶段510中,可以将预测块添加到导数残差以创建重构块。可以将环路滤波阶段512应用于重构块以减少块伪影。可以将其他滤波应用于重构块。在该示例中,后处理阶段514将去块滤波应用于重构块以减少块失真,并且将结果作为输出视频流516输出。输出视频流516也可以称为解码视频流,这些术语在本文中将可互换地使用。
解码器500的其他变型可以用于解码压缩比特流420。例如,解码器500可以在没有后处理阶段514的情况下产生输出视频流516。在解码器500的一些实施方式中,在环路滤波阶段512之前应用后处理阶段514(例如,包括去块滤波)。另外,或者可替代地,编码器400除了环路滤波阶段416之外还包括去块滤波阶段。
图6是图示了根据本公开的实施方式的量化变换系数的示意图600。示意图600描绘了当前块620、扫描顺序602、量化变换块604、非零图606、块结束图622和符标(sign)图626。当前块620被示为4x4块。但是,任何块大小都是可能的。例如,当前块可以具有4×4、8×8、16×16、32×32的大小(即,尺寸),或任何其他方形或矩形块大小。当前块620可以是当前帧的块。在另一示例中,当前帧可以被分成片段(诸如图3的片段308)、瓦片等,每个都包括块的集合,其中,当前块是该分区的块。
量化变换块604可以是与当前块620的大小相似的大小的块。量化变换块604包括非零系数(例如,系数608)和零系数(例如,系数610)。如上所述,量化变换块604包含用于与当前块620相对应的残差块的量化变换系数。同样,如上所述,量化变换系数由熵代码化阶段(例如,图4的熵代码化阶段408)进行熵代码化。
对量化变换系数进行熵代码化可以涉及对上下文模型(也称为概率上下文模型、概率模型和上下文)的选择,该上下文模型提供对用于代码化二进制化变换系数的二进制符号的条件概率的估计。当熵代码化量化变换系数时,附加信息可以用作用于选择上下文模型的上下文。例如,先前代码化的变换系数的大小可以至少部分地用于确定概率模型。
为了对变换块进行编码,视频代码化系统可以以扫描顺序遍历该变换块,并在量化变换系数分别被遍历(即,被访问)时对量化变换系数进行编码(例如,熵编码)。在锯齿形(zig-zag)扫描顺序(例如扫描顺序602)中,首先遍历并编码变换块的左上角(也称为DC系数),遍历和编码扫描顺序中的下一个系数(即,与标记为“1”的位置对应的变换系数),依此类推。在锯齿形扫描顺序(即,扫描顺序602)中,首先遍历当前量化变换系数(例如,待编码的变换系数)上方和左侧的一些量化变换系数。其他扫描顺序也是可能的。可以通过使用扫描顺序遍历二维量化变换块来产生量化变换系数的一维结构(例如,阵列)。
在一些示例中,对量化变换块604进行编码可以包括确定非零图606,其指示量化变换块604中的哪些量化变换系数为零并且哪些为非零。非零系数和零系数可以在非零图中分别用值一(1)和零(0)表示。例如,非零图606包括在与系数608对应的笛卡尔位置(0,0)处的非零607和在与系数610对应的笛卡尔位置(2,0)处的零608。在某些情况下,非零图可以称为重要性图。
在一些示例中,对量化变换块604进行编码可以包括生成块结束图622。块结束图指示量化变换块604的非零量化变换系数是否是相对于给定扫描顺序的最后一个非零系数。如果非零系数不是变换块中的最后一个非零系数,则该非零系数可以在块结束图中用二进制值0(零)表示。另一方面,如果非零系数是变换块中的最后一个非零系数,则该非零系数可以在块结束图中用二进制值1(一)表示。例如,由于与扫描位置11相对应的量化变换系数(即,最后一个非零量化变换系数628)是量化变换块604的最后一个非零系数,因此该量化变换系数用为1(一)的块结束值624表示;所有其他非零变换系数都用零表示。
在一些示例中,对量化变换块604进行编码可以包括生成符标图626。符标图626指示量化变换块604中的哪些非零量化变换系数具有正值并且哪些量化变换系数具有负值。不需要在符标图中指示为零的变换系数。符标图626示出了量化变换块604的符标图。在符标图中,负量化变换系数可以用-1表示,而正量化变换系数可以用1表示。
图7A是分别对量化系数和帧内预测模式进行编码的编码器700的框图。编码器700可以是图4的编码器400的示例。编码器700不使用残差块中的信息来改进帧内预测模式的压缩性能。编码器700可以接收视频的块701并产生比特流720。即,编码器700接收块701并将块701的编码输出到比特流720。编码器700包括模式判定702、帧内预测704、变换/量化708、逆量化/变换722、熵编码器712、熵编码器716和复用器718。
块701可以是图4的视频流300的块。比特流720可以是图4的压缩比特流420。模式判定702和帧内预测704可以是图4的帧内/帧间预测阶段402,可以由其实施或可以与之相似地实施。变换/量化708可以是图4的变换阶段404和量化阶段406,可以由其实施或可以与之相似地实施。逆量化/变换722可以是图4的去量化阶段410和逆变换阶段412,可以由其实施或可以与之相似地实施。熵编码器712可以是图4的熵编码阶段408,可以由其实施或可以与之相似地实施。熵编码器712和熵编码器716可以是相同的熵编码器。熵编码器716可以与熵编码器712分离但在功能上类似于熵编码器712。
可以由模式判定702确定用于对块701进行编码的帧内预测模式714。帧内预测704可以使用由模式判定702确定的帧内预测模式714来预测块701。编码器700生成如关于图4所描述的残差块706。变换/量化708将残差块变换为变换块,并对变换块进行量化,以产生量化变换系数710的量化变换块。
由模式判定702确定的帧内预测模式714由熵编码器716接收。熵编码器716产生熵代码化的帧内预测模式。量化变换系数710由熵编码器712接收。熵编码器712产生熵编码的量化系数。熵代码化的帧内预测模式和熵编码的量化系数可以通过复用器718被复用(例如,添加)到比特流720中。
图7B是分别对量化系数和帧内预测模式进行解码的解码器750的框图。解码器750可以是图5的解码器500的示例。解码器750不使用由编码器编码的残差块中的信息(例如,量化变换块中的信息)来解码帧内预测模式。解码器750可以接收视频的比特流720,并产生视频的重构块764。解码器750包括解复用器752、熵解码器756、熵解码器754、逆量化/变换760和帧内预测768。
比特流720可以包含要重构(即,解码)的输入视频的当前块。比特流720可以是图5的压缩比特流420。重构块764可以是图5的输出视频流516的块。熵解码器754可以是图5的熵解码阶段502,可以由其实施或可以与之相似地实施。熵解码器756和熵解码器754可以是相同的熵解码器。熵解码器756可以与熵解码器754分开,或者在功能上类似于熵解码器754。逆量化/变换760可以是图5的去量化阶段504和逆变换阶段506,可以由其实施或可以与之相似地实施。帧内预测768可以是图5的帧内/帧间预测阶段508,可以由其实施或可以与之相似地实施。
解复用器752接收比特流720并且从比特流720中提取熵代码化的帧内预测模式和熵代码化的量化变换系数。熵解码器756对熵代码化的量化变换系数进行解码以产生量化变换系数758。逆量化/变换760使用量化变换系数758来产生残差块762。并行地(即,分别地),熵解码器754从熵代码化的帧内预测模式解码帧内预测模式766。帧内预测768可以使用帧内预测模式766来生成预测块。解码器750使用预测块和残差块762来生成重构块764。
图8A是使用帧内预测模式来编码量化系数的编码器800的框图。编码器800可以是图4的编码器400的示例。编码器800包括与编码器700的组件相同的一些组件。省略了对编码器800中与编码器700共同的组件的描述。编码器800包括熵编码器804,代替了图7的熵编码器712。熵编码器804沿着路径802接收由模式判定702确定的帧内预测模式714。这样,在对残差块706进行代码化时(即,在帧内预测704和变换/量化708之后),编码器800可以使用帧内预测模式。例如,编码器800基于帧内预测模式714来选择用于对变换块的量化变换系数进行编码的代码化上下文。
编码器800可以包括任何数量的帧内预测模式。例如,编码器800(以及根据本公开的实施方式的任何其他编码器)可以包括35种帧内预测模式。例如,帧内预测模式可以包括平面帧内预测模式(也称为模式0)、DC帧内预测模式(也称为模式1)和角度预测模式(例如,模式2至模式34)。
帧内预测模式可以分成多类。这些类可以包括:水平、垂直、和对角线或其他。水平帧内预测模式是帧内预测角度接近于水平轴(即,大体水平的)的定向预测模式(例如,模式6-14)。垂直帧内预测模式是预测角度接近垂直轴(即,大体垂直的)的定向帧内预测模式(例如,模式22-30)。对角线或其他帧内预测模式是所有剩余的定向(既不是水平也不是垂直)和非定向帧内预测模式。对角线或其他帧内预测模式是帧内预测模式0-5、15-21和31-34。在本文中,“对角线或其他”可统称为“对角线”。
现在描述编码器800可以如何使用帧内预测模式来对量化系数进行编码。令m表示用于生成残差块706的帧内预测模式714,并且令c(m)表示帧内预测模式m被分类的种类。例如,m可以具有等于或对应于帧内预测模式0至34之一的值。取决于帧内预测角度,帧内预测模式m的分类c(m)可以是水平、垂直、和对角线或其他中的一种。例如,如果预测角度比垂直更水平,则可以将帧内预测模式分类为水平(即,c(m)=水平)。如果预测角度比水平或对角线更垂直,则可以将帧内预测模式分类为垂直(即,c(m)=垂直)。否则,可以将帧内预测模式分类为对角线(即,c(m)=对角线)。“对角线”的分类包括对角线和其他。
编码器800可以使用分类c(m)来导出一个或多个上下文模型,以用于将非零图(诸如图6的非零图606)编码在4x4或8x8亮度残差块中。编码器800可以使用分类c(m)来确定在对量化变换系数进行编码(以及通过对应解码器(诸如下面描述的解码器850)进行解码)时使用的扫描顺序。例如,编码器800可以在分类c(m)为水平时选择垂直扫描顺序,可以在分类c(m)为垂直时选择水平(光栅)扫描顺序,并且可以在分类c(m)为对角线时选择对角线扫描顺序。
图8B是使用帧内预测模式来解码量化系数的解码器850的框图。解码器850使用由编码器(诸如图8的编码器800)编码的残差块中的信息(例如,量化变换系数中的信息)来改进量化变换系数的压缩性能。解码器850接收视频的比特流720,并产生视频的重构块764。解码器850包括解复用器752、熵解码器754、熵解码器855、逆量化/变换760和帧内预测768。
比特流720可以包含要重构(即,解码)的输入视频的当前块。比特流720可以是图5的压缩比特流420。重构块764可以是图5的输出视频流516的块。熵解码器754可以是图5的熵解码阶段502,可以由其实施或可以与之相似地实施。逆量化/变换760可以是图54的去量化阶段504和逆变换阶段506,可以由其实施或可以与之相似地实施。帧内预测阶段可以是图5的帧内/帧间预测阶段508,可以由其实施或可以与之类似地实施。
解复用器752接收比特流720。解复用器从比特流720中提取熵代码化的帧内预测模式和熵代码化的量化变换系数。熵解码器754对熵代码化的帧内预测模式进行解码以生成帧内预测模式766。熵解码器855沿路径852接收帧内预测模式766,并且接收熵代码化的量化变换系数以生成量化变换系数758。即,熵解码器855可以使用帧内预测模式来确定用于解码变换块的量化系数的上下文模型。逆量化/变换760使用量化变换系数758来产生残差块762。帧内预测阶段可以使用帧内预测模式766来生成预测块。解码器750使用预测块和残差块762来生成重构块764。
图9是根据本公开的实施方式的用于使用帧内预测模式来代码化当前块的过程900的流程图。在一些示例中,代码化是指诸如通过编码器进行编码。在其他示例中,代码化是指诸如通过解码器进行解码。过程900可以被实施为:例如,可以由诸如发送站102或接收站106等计算装置执行的软件程序。该软件程序可以包括机器可读指令,该机器可读指令可以存储在诸如存储器204等存储器或辅助存储214中并且可以由诸如CPU 202等处理器执行以使计算装置执行过程900。
可以使用专用硬件或固件来实施过程900。一些计算装置可以具有多个存储器、多个处理器、或两者皆有。可以使用不同的处理器、存储器或两者来分配过程900的步骤或操作。单数形式的术语“处理器”或“存储器”的使用涵盖具有一个处理器或一个存储器的计算装置以及具有多个处理器或多个存储器的装置,这些装置可用于执行一些或所有上述步骤。
过程900可以在诸如图4的编码器400等编码器中实施。在至少一些实施方式中,过程900可以至少部分地由图4的编码器400的熵编码阶段408执行。当由编码器实施时,过程900可使用帧内预测模式对当前块进行编码。过程900可以在诸如图5的解码器500等解码器中实施。在至少一些实施方式中,过程900可以至少部分地由图5的解码器500的熵解码阶段502执行。当由解码器实施时,过程900可使用帧内预测模式对当前块进行解码。
在902中,过程900接收量化变换系数的块。当在编码器中实施时,过程900可接收如以上关于图4和图7A所描述那样生成的量化变换系数的块。例如,过程900可以接收由量化阶段406生成的量化变换系数的块。当在解码器中实施时,过程900可以接收如以上关于图5和图7B所描述那样的在编码比特流中的量化变换系数的块。
在904中,过程900使用量化变换系数来确定用于对帧内预测模式进行代码化的上下文。当由编码器实施时,过程900确定用于在编码比特流中对帧内预测模式进行编码的上下文(即,上下文模型)。当由解码器实施时,过程900确定用于从编码比特流解码帧内预测模式的上下文。
对帧内预测模式进行编码涉及在使用上下文模型对二进制化的值进行编码之前,对与帧内预测相对应的值的大小进行二进制化(即,转换为二进制代码)。上下文模型提供对用于代码化二进制化帧内预测模式的二进制符号的条件概率的估计。改进代码化上下文可导致使用更少的比特来编码(即,熵编码)帧内预测模式的可能值。
根据本公开的实施方式利用信息论的原理来改进帧内预测模式的代码化。令X和Y表示两个带有有限字母(即,可能的值)的随机变量。使用链规则,X和Y的联合熵H(X,Y)可以按等式(1)分解:
H(X,Y)=H(X)+H(Y|X)=H(Y)+H(X|Y) (1)
在等式(1)中,H(X)和H(Y)分别表示X和Y的边际熵,H(Y|X)表示X给定时Y的条件熵,并且H(X|Y)表示给定Y时X的条件熵。如果X表示残差块并且Y表示与残差块X相关联的帧内预测模式,在残差块Y和帧内预测模式X相关的情况下,则从链规则得出H(Y|X)<H(Y)。也就是说,与直接编码帧内预测模式(即,H(Y))相比,使用残差块中的信息(即,H(Y|X))对帧内预测模式(即,Y)进行编码会产生更大的压缩。这样,通过在代码化帧内预测模式(即,Y)时利用残差块(即,X)的信息,可以改进压缩性能。
使用残差块中的信息包括:使用残差块本身中的信息、使用对应的变换块中的信息、或使用对应的量化变换块中的信息。如果I(X;Y)表示X(即,残差块)和Y(即,帧内预测模式)之间的互信息,则等式(1)得出I(X;Y)=H(Y)-H(Y|X)>0。
过程900可以利用残差块和帧内预测模式之间的相关性来对帧内预测模式进行编码和解码。例如,相关性可以表示为:如果预测角度接近于水平轴(即,大体水平的),则非零量化变换系数更可能出现在量化变换块的前几列中;并且如果预测角度接近垂直轴(即,大体垂直的),则量化变换系数更可能出现在量化变换块的前几行中。
在示例中,确定代码化上下文可以包括使用量化变换块的量化变换系数来确定帧内预测模式的类别。类别可以具有从包括第一类别值和第二类别值的集合中选择的值。该集合可以包括其他值。在示例中,确定代码化上下文可以是基于量化变换块的行中的非零系数的第一数量与量化变换块的列中的非零系数的第二数量的比较。可以使用非零图(诸如图6的非零图606)来做出该确定,。
在示例中,确定用于帧内预测模式的类别包括确定量化变换块的行中的非零系数的第一数量和量化变换块的列中的非零系数的第二数量之间的差。该行可以是量化变换块的第一行(例如,最上面的行),并且该列可以是量化变换块的第一列(例如,最左边的列)。第一行可以不仅仅包括最上面的行,第一列可以不仅仅包括最左边的列。例如,行和列的数量可以取决于块的大小。例如,对于8x8块,第一行可以包括最上面的两行,第一列可以包括最左边的两列;对于32x32块,第一行可以包括最上面的四行,并且第一列可以包括最左边的四列。
确定帧内预测模式的类别还可以包括:在差大于第一阈值的情况下,将类别设置为第一类别值;以及在差小于第二阈值的情况下,将类别设置为第二类别值。即,可以基于该比较将类别设置为第一类别值和第二类别值之一。确定帧内预测模式的类别还可以包括:在差不大于第一阈值且不小于第二阈值的情况下,将类别设置为第三类别。第一类别、第二类别和第三类别可以分别指示帧内预测模式是大体水平的、大体垂直的、和既不是水平也不是垂直的(即,对角线)。
例如,令r[i]表示量化变换块的第i行中的非零系数的数量,并且令c[j]表示量化变换块的第j列中的非零系数的数量,其中,对于NxN块,i=0、1、...、N-1,j=0、1、....、N-1。在图6中,例如,N等于与块604的大小相对应的4。在第0行(即,行614)中的非零系数的数量是r[0]=3;并且在第1行(即,第618行)中的非零系数的数量为r[1]=2;在第0列(即,列612)中的非零系数的数量为c[0]=3;并且在第1列(即,列616)中的非零系数的数量为c[1]=1。可以使用非零图606确定在行(即,r[i])或列(即,c[i])中的非零量化变换系数的数量。
过程900可以将第一行中的非零系数的数量(即,r[0]=3)与第一列中的非零系数的数量(即,c[0]=3)进行比较。可以比较非零系数的数量以确定帧内预测模式的类别t。在示例中,类别t可以具有分别对应于水平帧内预测模式、垂直帧内预测模式、以及既不是水平也不是垂直的帧内预测模式(即,对角线)的值1、2和0。编码器的压缩增益可以与类别t的可能值的数量有关。如果类别t可以具有三(3)个值(例如,0、1、2),则对于使用帧内预测编码的每个块,编码帧内预测模式时的压缩增益可以是log2(3)(即,2)个比特。
在一个示例中,过程900可以使用算法(2)来确定类别t:
也就是说,如果第一列中的非零量化变换系数的数量(即,c[0])比第一行中的非零量化变换系数的数量(即,r[0])大了至少第一阈值,则可以将帧内预测模式归类为水平帧内预测模式(即,t=1)。如果第一行中的非零量化变换系数的数量(即,r[0])比第一列中的非零量化变换系数的数量(即,c[0])大了至少第二阈值,则可以将帧内预测模式归类为垂直帧内预测模式(即,t=2)。否则,可以将帧内预测模式归类为对角线。如上所述,可以将平面帧内预测模式和DC帧内预测模式归类为“对角线”。t=0(即,对角线)的类别可以指示非零量化系数分布在整个量化变换块(即,没有足够集中在行或列中),因此,不能将帧内预测模式确定为水平或垂直。
在示例中,第一阈值和/或第二阈值可以与量化变换系数的块的大小有关。例如,对于大小为N×N的量化变换块,可以将第一阈值设置为N/4,并且可以将第二阈值设置为N/4。第一阈值和第二阈值可以具有可以但不必与量化变换块大小有关的其他值。
将算法(2)应用于图6的量化变换块604得到类别t=0。如上所述,r[0]=3且c[0]=3。由于r[0]-c[0](即,3-3=0)不大于N/4(即,4/4=1)且c[0]-r[0](即,0)也不大于N/4,所以将类别t设置为0。
在示例中,如果基于量化变换块的第一行(例如,最上面的行)中的非零量化变换系数的数量与量化变换块的第一列(例如,最左边的列)中的非零量化变换系数的数量的比较不能将帧内预测模式的类别确定为水平或垂直,则可以对其他行和列进行比较。例如,在差不大于第一阈值且不小于第二阈值的条件下,基于量化变换块的第二行中的非零系数的第三数量与量化变换块的第二列中的非零系数的第四数量的比较来确定类别。第一行和第二行是量化变换块的不同行。第一列和第二列是量化变换块的不同列。
在示例中,确定帧内预测模式的代码化上下文可以包括:使用先前代码化的帧内预测模式来确定第一代码化上下文;以及使用第一代码化上下文和类别来确定代码化上下文。第一代码化上下文可以是基于先前解码的帧内预测模式和/或先前解码的块导出的代码化上下文。类别t可以用于完善第一代码化上下文,以确定可以提供比第一代码化上下文更好的压缩的代码化竞赛。例如,如果第一编码上下文具有一个值(例如,代码化上下文的索引),则类别t可用于将该值分成三个(例如,每个值对应于t的可能值)不同的上下文索引值。
过程900可以确定第一代码化上下文,intra_mode_ctx,如关于图7A的熵编码器716所描述的。可以从帧内预测模式的第一代码化上下文集合中选择第一代码化上下文intra_mode_ctx。第一代码化上下文intra_mode_ctx可以是帧内预测模式的这代码化上下文集合中的所选上下文的索引。可以根据第一代码化上下文intra_mode_ctx和类别t确定代码化上下文new_intra_mode_ctx,如下:
new_intra_mode_ctx=f(intra_mode_ctx,t) (3)
等式(3)的函数f可以是将(intra_mode_ctx,t)映射到可用代码化上下文的允许范围内的索引的函数。只要存在至少一个intra_mode_ctx以便将(intra_mode_ctx,t)映射到至少两个不同的索引,任何数量的映射函数都可以使用。换句话说,对于至少一个intra_mode_ctx,存在两个t值:ta和tb,使得ta≠tb且(intra_mode_ctx,ta)≠(intra_mode_ctx,tb)。映射函数f的示例可以由下面的等式(4)给出。另一示例可以由等式(5)给出。
f(intra_mode_ctx,t)=t*NUM_CONTEXTS+intra_mode_ctx (4)
f(intra_mode_ctx,t)=intra_mode_ctx*3+t. (5)
在等式(4)中,NUM_CONTEXTS可以是intra_mode_ctx的不同值的数量(即,帧内预测模式的代码化上下文集合中的上下文模型的数量)。与可用于选择intra_mode_ctx的上下文模型相比,过程900可以具有更多可用的上下文模型来选择代码化上下文(即,new_intra_mode_ctx)。这样,实施过程900的编码器(诸如(在下面描述的)图10的编码器1000)可以具有除了图7的编码器700的熵编码器716之外的帧内预测熵编码器(诸如熵编码器1002)可用于的附加代码化上下文。可用于图10的熵编码器1002的代码化上下文可以包括熵编码器716可用于的代码化上下文。
在906中,过程900使用代码化上下文对帧内预测模式进行代码化。当由编码器实施时,使用代码化上下文对帧内预测模式进行代码化包括:在编码比特流中使用上下文来对帧内预测模式进行编码。当由解码器实施时,使用代码化上下文对帧内预测模式进行代码化包括:使用上下文从编码比特流中解码帧内预测模式。
在一些实施方式中,过程900在904中可以使用量化变换块的行的一部分和列的一部分来确定类别t。该部分可以是任何连续或不连续的部分。在示例中,行(列)的部分可以是行(列)的后半部分。也就是说,对于行Row(i)(Column(i))包括量化变换系数Row(i,x)(Column(x,i))(其中,x=0、1、…、N-1)的大小为NxN的量化变换块,行(列)的后半部分包括量化变换系数Row(i,m)(Column(m,i)),其中,m=N/2、...、N-1。如果r[i]表示第i行的后半部分(即,右半部分)中的非零系数的数量,并且令c[j]表示第j列的后半部分(即,下半部分)中的非零系数的数量,则可以使用算法(6)来确定类别t:
在算法(6)中,如果量化变换块的第一列在第一列的第二部分中包括非零量化变换系数(即,c[0]>0),并且在第一行的第二部分中不存在非零量化变换系数(即,r[0]==0),则将类别t设置为1,以指示例如大体上水平的帧内预测模式。如果量化变换块的第一行在第一行的第二部分中包括非零量化变换系数(即,r[0]>0),并且在第一列的第二部分中不存在非零量化变换系数(即,c[0]==0),则将类别t设置为2,以指示例如大体上垂直的帧内预测模式。否则,类别t为零,指示例既不是水平也不是垂直的帧内预测模式。在一些示例中,代替在评估第一行和第一列的部分之后将类别t设置为0,可以将算法(6)应用于另一行和列。可以将过程900重复应用于预定数量的行和列,直到可以为类别t设置类别1或2。例如,过程900可以在检查了N/2行和列之后停止。
算法(6)可以使用除了0之外的阈值来确定类别t。例如,可以使用算法(7)来确定类别:
在算法(7)中,第三阈值和第四阈值可以使得0≤第四阈值≤第三阈值。
在又一示例中,过程900可以使用量化变换系数的值来确定类别t。例如,可以使用系数的绝对值。例如,令r[i]表示量化变换块的第i行中的量化变换系数的绝对值之和,并且令c[i]表示第j列中的转换块的量化变换系数的绝对值之和。可以使用算法(8)来确定类别t的值:
在算法(8)中,如果第一列中的量化变换系数的绝对值的总和大于第一行中的量化变换系数的绝对值的总和的两倍,则将类别t设置为1,表示例如大体上水平的帧内预测模式。如果第一行中的量化变换系数的绝对值的总和大于第一列中的量化变换系数的绝对值的总和的两倍,则将类别t设置为2,表示例如大体上垂直的帧内预测模式。否则,将类别t设置为0。
虽然类别t被描述为具有值0、1和2,但是根据本公开的实施方式不限于此。类别t可以具有任意数量的值。例如,类别t的其他值可以用于提供关于水平和垂直帧内预测模式的角度的其他粒度。
在一种实施方式中,过程900可以包括:使用量化变换系数来确定帧内预测模式预测器p,并且对帧内预测模式预测器和帧内预测模式是否相同进行编码。帧内预测模式预测器p基于解码后的量化变换系数的分布来逆向预测帧内预测模式。例如,如果解码的非零量化变换系数朝量化变换块的前几列偏斜,则可以选择大体上水平的帧内预测模式。如果解码的非零量化变换系数朝量化变换块的前几行偏斜,则可以选择大体上垂直的帧内预测模式。
可以使用量化变换系数的重要性图来确定帧内预测模式预测器p。重要性图可以如关于图6的非零图606所描述的。在另一示例中,帧内预测模式预测器p可以是量化变换系数的绝对值的函数或量化变换系数的平方值的函数。量化变换系数的平方值可以指示能量在量化变换系数的块中的分布。例如,当能量集中在例如量化变换系数的块的前几行中时,帧内预测模式预测器p可以指示大体上垂直的帧内预测模式,并且当能量集中在例如量化变换系数块的前几列中时,可以指示大体上水平的帧内预测模式。然后可以根据能量集中在哪里来选择帧内预测模式预测器p。
过程900可以基于对如上所述的量化变换块的行和列中的若干非零量化系数的比较来确定帧内预测模式预测器p。帧内预测模式预测器p可以指示预测角度。在示例中,帧内预测模式预测器p可以具有帧内预测模式的值,该帧内预测模式是大体上水平的或大体上垂直的。例如,使用相对于图8描述的帧内预测模式为例,帧内预测模式预测器p可以具有与水平帧内预测模式(例如,模式6-14)之一或垂直帧内预测模式(例如,模式22-30)之一相对应的值。
当帧内预测模式预测器和帧内预测模式相同时,过程900在由编码器实施时可以将语法元素设置为值(例如,0)。如果指示符指示帧内预测模式m等于帧内预测模式预测器p(即,m=p),则解码器可以使用编码的帧内预测模式来解码当前块。当帧内预测模式预测器和帧内预测模式不相同时,可以将语法元素设置为另一个值(例如,1),然后对帧内预测模式进行编码。
作为另一示例,可以例如通过对帧内预测模式m和帧内预测模式预测器p之间的差(即,m-p)进行编码,来对帧内预测模式m进行差分编码(并由诸如图12的解码器1200等解码器解码)。
当量化变换系数在解码器处(例如,在编码比特流中)可用时,解码器可以如上所述从量化变换系数确定类别t和帧内预测模式预测器p。
图10是根据本公开的实施方式的编码器1000的框图。编码器1000可以实施过程900,并且更详细地描绘图4的编码器400的各个方面。
编码器1000可以使用残差块中的信息来改进帧内预测模式的压缩性能。编码器1000包括与编码器700的组件相同的一些组件。省略了对与编码器700的组件相同或相似的编码器1000的组件的描述。编码器1000包括模式判定702、帧内预测704、变换/量化708、逆量化/变换722、熵编码器1002、熵编码器712和复用器718。在示例中,编码器1000可以提供对图7的编码器700的改进。例如,根据本公开的实施方式,编码器1000可以提供熵编码器1002来代替图7的编码器700的熵编码器716。
块701可以是图4的视频流300的块。比特流720可以是图4的压缩比特流420。模式判定702和帧内预测704可以是图4的帧内/帧间预测阶段402,可以由其实施或可以与之相似地实施。变换/量化708可以是图4的变换阶段404和量化阶段406,可以由其实施或可以与之相似地实施。逆量化/变换722可以是图4的去量化阶段410和逆变换阶段412,可以由其实施或可以与之相似地实施。熵编码器712可以是图4的熵编码阶段408,可以由其实施或可以与之相似地实施。熵编码器1002可以是图4的熵编码阶段408,可以由其实施或可以与之相似地实施。熵编码器1002和熵编码器712可以是相同的熵编码器。熵编码器1002可以与熵编码器712分离但是在功能上类似于熵编码器712。
可以由模式判定702确定用于对块701进行编码的帧内预测模式714。帧内预测704可以使用由模式判定702确定的帧内预测模式714来编码块701。编码器700生成如关于图4所描述的残差块706。变换/量化708将残差块变换为变换块,并对变换块进行量化,以产生量化变换系数710的量化变换块。
熵编码器712产生熵编码的量化系数。熵编码器1002接收由模式判定702确定的帧内预测模式714,并且沿着路径1004接收量化变换系数710。熵编码器1002使用量化变换系数710,如关于图9所描述的,以对帧内预测模式进行编码。编码帧内预测模式可以包括确定用于对帧内预测模式进行编码的上下文模型。熵编码的帧内预测模式和熵编码的量化系数可以通过复用器718被复用(例如,添加)到比特流720中。
图11是根据本公开的实施方式的用于使用帧内预测模式来解码当前块的过程1100的流程图。过程1100可以被实施为:例如,可以由诸如发送站102或接收站106等计算装置执行的软件程序。该软件程序可以包括机器可读指令,该机器可读指令可以存储在诸如存储器204等存储器或辅助存储214中并且可以由诸如CPU 202等处理器执行以使计算装置执行过程1100。
可以使用专用硬件或固件来实施过程1100。一些计算装置可以具有多个存储器、多个处理器、或两者皆有。可以使用不同的处理器、存储器或两者来分配过程1100的步骤或操作。单数形式的术语“处理器”或“存储器”的使用涵盖具有一个处理器或一个存储器的计算装置以及具有多个处理器或多个存储器的装置,这些装置可用于执行一些或所有上述步骤。
过程1100可以在诸如图5的解码器500等解码器中实施。过程1100可以在编码器中实施,诸如在图4的编码器400的重构路径中实施。
在1102中,过程1100从编码比特流中解码量化变换块的量化变换系数。
在1104中,过程1100使用量化变换系数来确定帧内预测模式的类别。类别可以是水平、垂直和其他(即,不是水平或垂直,例如对角线)之一。例如,过程1100可以确定非零量化变换系数的分布,如以上关于过程900所述,以确定帧内预测模式的类别。例如,如果量化变换块的非零系数集中在前几行(例如,第一行)中,则将帧内预测模式确定为可能是垂直的;如果非零系数集中在前几列(例如,第一列)中,则将帧内预测模式确定为可能是水平的。如果非零系数未集中在行或列中,则帧内预测模式更有可能是对角线(例如,DC、平面或对角线预测模式)。这样,根据非零解码量化系数的分布,可以如上关于类别t描述那样将帧内预测模式分类(例如,分为三个值之一)。
在示例中,使用类别来解码当前块包括:确定用于解码帧内预测模式的第一上下文,使用类别和第一上下文来确定第二上下文模型,并且使用第二上下文来解码帧内预测模式。可以如上面关于图9描述那样确定第一上下文和第二上下文。可以使用先前解码的块的帧内预测模式、当前块的大小、当前块的颜色分量(例如,照度或色度)、其他准则、或上述的组合来确定第一上下文。
在1106中,过程1100使用类别从编码比特流解码当前块。
在一些实施方式中,过程1100可以包括从编码比特流中解码帧内预测模式预测器是否与帧内预测模式相同。帧内预测模式预测器可以是帧内预测模式的预测,并且由编码器使用关于图9描述的量化变换系数来确定。
图12是根据本公开的实施方式的解码器1200的示例。解码器1200可以实施过程1100,并且更详细地描绘图5的解码器500的各个方面。解码器1200还可以实施过程900。
解码器1200可以使用编码比特流中的量化变换系数信息来确定用于解码当前块的帧内预测模式。编码比特流可以是从诸如图10的编码器1000等编码器接收、由其生成或由其输出的比特流720。解码器1200生成重构块764。
解码器1200包括与图7B的解码器750相同的一些组件。省略与解码器750的组件相同或相似的解码器1200的组件的描述。解码器750包括解复用器752、熵解码器756、熵解码器1202、逆量化/变换760和帧内预测768。
熵解码器1202沿着路径1204接收量化变换系数758,量化变换系数758由熵解码器756熵解码。熵解码器1202还从解复用器752接收熵编码的帧内预测模式。熵解码器1202可以如关于图1100所描述那样确定帧内预测模式的类别。熵解码器1202使用帧内预测模式的类别和量化变换系数758来解码帧内预测模式。
图13是根据本公开的实施方式的用于使用帧内预测模式来重构当前块的过程1300的流程图。可以从编码比特流重构当前块。编码比特流可以是图5的比特流420。比特流可以是由重构阶段414接收的比特流和/或图4的重构路径的比特流。
在1302中,过程1300从编码比特流中解码量化变换系数的块。可以如在902中关于过程900所描述那样对量化变换系数的块进行解码。在1304中,过程1300使用量化变换系数来确定帧内预测模式的至少一个上下文。确定上下文可以如以上在904中关于过程900所描述那样。编码比特流可以包括用于当前块的一种以上的帧内预测模式。这样,可以使用量化变换系数来确定至少一种帧内预测模式。
在1306中,过程1300使用至少一个上下文从编码比特流中解码帧内预测模式。在1308中,过程1300使用量化变换系数的块来重构残差块。当过程1300在编码器中实施时,重构残差块可以如关于图10的帧内预测704所描述那样。当过程1300在解码器中实施时,重构残差块可以如关于生成图12的残差块762所描述那样。
在1310,过程1300使用重构残差块和帧内预测模式来重构当前块。当过程1300在编码器中实施时,重构当前块可以如关于图4的重构路径所描述那样。当过程1300在解码器中实施时,重构当前块可以如关于生成图12的重构块764所描述那样。
图15A是基于块的第一元素组的数据而适应的针对该块的扫描顺序集合1500的示例的示意图。在图15的单元格中示出的数字是块的各个元素在块内的对应位置处的扫描顺序序列号。示例性扫描顺序集合1500包括四种扫描顺序:锯齿形水平扫描顺序1510;锯齿形垂直扫描顺序1520;锯齿形锯齿形扫描顺序1530;以及锯齿形对角线扫描顺序1540。在图15A的示例中,将要代码化的块划分为两个元素组:第一组,其首先使用图15A的示意图中的阴影单元格中的扫描顺序序列号0-6反映的锯齿形扫描顺序来代码化(例如,编码或解码);以及第二组,其接着使用基于来自第一组中的元素选择或适应的扫描顺序来代码化(例如,编码或解码)。例如,可以为第二组选择水平扫描顺序,从而导致该块的锯齿形水平扫描顺序1510。例如,可以为第二组选择垂直扫描顺序,从而产生该块的锯齿形垂直扫描顺序1520。例如,可以为第二组选择垂直扫描顺序,从而产生该块的锯齿形垂直扫描顺序1520。例如,可以为第二组选择锯齿形扫描顺序,从而产生该块的锯齿形锯齿形扫描顺序1520。例如,可以为第二组选择对角线扫描顺序,从而产生该块的锯齿形对角线扫描顺序1540。在图15A的示例中,第一组包括块的第一行的元素和块的第一列的元素。在图15A的示例中,第二组包括块中在第一组之外的所有剩余元素。例如,块的元素可以是量化变换系数。例如,块的元素可为残差块(例如,由帧内预测产生的残差块或由帧间预测产生的残差块)的量化变换系数。
图15B是基于块的第一元素组的非零图适应的针对该块的扫描顺序集合1550的示例的示意图。在图15B的单元格中示出的数字是块的各个元素在块内的对应位置处的二进制非零图值。示例性扫描顺序集合1550包括四种扫描顺序:锯齿形水平扫描顺序1560;锯齿形垂直扫描顺序1570;锯齿形锯齿形扫描顺序1580;以及锯齿形对角线扫描顺序1590。在图15B的示例中,将要编码的块划分为两个元素组:第一组,其首先使用锯齿形扫描顺序来代码化(例如,编码或解码);以及第二组,其接着使用基于来自第一组的非零元素的分布(例如,第一组的某些部分中的计数)选择或适应的扫描顺序来代码化(例如,编码或解码)。在图15B的示例中,第一组包括块的第一行的元素和块的第一列的元素。在图15B的示例中,第二组包括块中在第一组之外的所有剩余元素。例如,可以为第二组选择水平扫描顺序,从而产生该块的锯齿形水平扫描顺序1560,其中,第一行的后半部分中的非零元素的计数为正,并且第一列的后半部分中的非零元素的计数为零。例如,可以为第二组选择垂直扫描顺序,从而产生该块的锯齿形垂直扫描顺序1570,其中,第一行的后半部分中的非零元素的计数为零,并且第一列的后半部分中的非零元素的计数为正。例如,可以为第二组选择锯齿形扫描顺序,从而产生该块的锯齿形锯齿形扫描顺序1580(例如,其中,第一行的后半部分中的非零元素的计数为正,并且第一列的后半部分中的非零元素的计数为正)。例如,可以为第二组选择对角线扫描顺序,从而产生该块的锯齿形对角线扫描顺序1590(例如,其中,第一行的后半部分中的非零元素的计数为正,并且第一列的后半部分中的非零元素的计数为正)。例如,块的元素可以是量化变换系数。例如,块的元素可为残差块(例如,由帧内预测产生的残差块或由帧间预测产生的残差块)的量化变换系数。
在一些实施方式(未示出)中,代替对第一组使用锯齿形扫描顺序,可以使用其他扫描顺序。例如,如下的交替扫描顺序S1可以用于将扫描位置k映射到块位置(例如,笛卡尔位置)。
如果k为偶数,则S1[k]=(0,k>>1);
如果k为奇数,则S1[k]=((k+1)>>1,0);
其中,k=0、...、2*N–2。
在一些实施方式中(图15A中未示出),代替如图15A的扫描顺序1530中所示对第二组使用锯齿形扫描顺序,可以使用其他扫描顺序,例如,如下表所示的转置的锯齿形扫描顺序:
7 8 12
9 11 13
10 14 15
例如,是否将锯齿形扫描顺序用于扫描顺序1530的第二个块还是使用转置的锯齿形扫描顺序的决定可能取决于第一行和第一列中的非零系数的数量。如果前者较大,则将转置的锯齿形扫描顺序用于第二组;否则,可以使用锯齿形锯齿形扫描顺序1530。
在一些实施方式中(未示出),可以将225度对角线扫描顺序(向下至左侧)用于来自块的元素组,而不是将45度对角线扫描顺序用于图15A的扫描顺序1540中的第二组。例如,在要在45度对角线扫描顺序或225度对角线扫描顺序之间进行选择的情况下,如果在第一列中存在比第一行更多的非零系数,则可以选择225度对角线扫描顺序,否则可以选择45度对角线扫描顺序。
在一些实施方式中,可以使用多级扫描顺序。在这些情况下,图15A和15B中的每个元素都可表示量化变换系数的子块,并且扫描顺序可用于确定对这些子块进行代码化(例如,用熵编码器编码或用熵解码器解码)的顺序。例如,当元素表示子块时,图15B中的零可以指示对应的子块由所有零系数组成,并且1可以指示对应的子块包括至少一个非零系数。
当使用多级扫描顺序时,一旦确定了子块的扫描顺序,就可以根据以上示例类似地得出子块内的扫描顺序。在一些实施方式中,子块内的扫描顺序可以继承针对包括表示该子块的元素的组在子块级确定的扫描顺序。例如,1560中的每个子块可以使用水平扫描顺序,1570中的每个子块可以使用垂直扫描顺序,1580中的每个子块可以使用锯齿形扫描顺序,并且1590可以使用对角线扫描顺序。
图16是用于适应扫描顺序以编码视频数据块的过程1600的示例的流程图。过程1600包括:将视频数据块分成1610多个元素组;以及,使用熵编码器使用第一扫描顺序,对多个元素组中的第一组的元素进行编码1620;从多个组中选择1622下一组;基于先前组的元素,确定1630下一组的下一扫描顺序;使用熵编码器,使用下一扫描顺序,对下一组的元素进行编码1640;以及,继续(在1645中)处理多个组中的任何剩余组,直到所有组已经被编码1640,然后将块的编码元素输出1650到比特流。例如,过程1600可以由熵编码器712来实施。例如,过程1600可以由发送站102来实施。例如,过程1600可以由诸如计算装置200等计算装置来实施。例如,过程1600可以由包括机器可读指令的软件程序实施,该机器可读指令可以存储在诸如存储器204等存储器或辅助存储214中,并且可以由诸如CPU 202等处理器执行以使计算装置执行过程1600。例如,过程1600可以由诸如图4的编码器400等编码器来实施。例如,过程1600可以由图4的编码器400的熵编码阶段408来实施。
过程1600包括将视频数据块分成1610多个元素组。这些组可能不相交。块可以包括元素的二维阵列(例如,4×4、8×8、16×16、32×32或任何其他方形或矩形块大小)。多个元素组中的一组在块的结构内可以是连续的或不连续的。例如,块的元素可以是像素值(例如,发光度值)。例如,块的元素可以是量化变换系数。例如,块的元素可为残差块(例如,由帧内预测产生的残差块或由帧间预测产生的残差块)的量化变换系数。例如,块的元素可以基于帧间预测的结果。例如,块可以是由帧间预测产生的残差块。例如,块的元素可以基于帧内预测的结果。例如,块可以是由帧内预测产生的残差块。在一些实施方式中,多个组包括两个组(例如,如图15A至图15B、图21A至图21B、图22A或图22B的示例所示)。例如,第一组可以包括块的第一行的元素和块的第一列的元素。在一些实施方式中,第一组包括在块的角部处形成三角形的元素,并且其中,三角形包括块的第一行的元素和块的第一列的元素(例如,如在图21A至图21B、图22A或图22B的示例中所示)。在一些实施方式中,第一组包括块的第一行的在三角形之外的元素和块的第一列的在三角形之外的元素(例如,如图22A或图22B的示例所示)。例如,可以基于块的大小来选择第一组的形状(例如,如关于表2所描述的)。例如,第二组可以包括第一组之外的块的剩余元素的第一行和第一列的元素,而第三组可以包括第一组和第二组的并集之外的块的所有剩余元素。
过程1600包括使用熵编码器使用第一扫描顺序对来自多个元素组中的第一组的元素进行编码1620。第一扫描顺序可以是兼容的熵解码器被配置为用来解码块的第一组的元素的默认或初始扫描顺序。例如,第一扫描顺序可以是锯齿形顺序(例如,如图15A所示)。例如,熵编码器可以采用熵编码技术,诸如,例如可变长度代码化(VLC)、上下文自适应二进制算术代码化(CABAC)或上下文自适应(多符号)算术代码化。
过程1600包括从块的多个元素组中选择1622下一组(例如,第二组)。
过程1600包括基于一个或多个先前组(例如,第一组)的元素,确定1630来自多个元素组中的下一组(例如,第二组)的下一扫描顺序(例如,第二扫描顺序)。在一些实施方式中,可以通过从包括水平、垂直、右对角线、左对角线、锯齿形等在内的选项(例如,如图15A和图21A所示)中进行选择来确定1630下一扫描顺序。例如,可以基于第一组内的非零元素(例如,残差块的量化变换系数)的分布来确定1630下一扫描顺序。例如,可以基于先前组的并集内的非零元素的分布来确定1630下一扫描顺序。例如,可以实施图18A的过程1800以确定1630下一扫描顺序。例如,可以实施图18B的过程1840以确定1630下一扫描顺序。在一些实施方式中,确定1630的扫描顺序可增加非零元素将被预先加载在下一组或剩余组内的概率以及在该块的所得扫描顺序的末尾处的元素序列将为零的概率,这些零可以使用熵编码器隐式地或显式地有效地编码。
在一些实施方式中,类似于图25A的过程2500的过程可用于确定1630下一扫描顺序(例如,第二扫描顺序)。例如,确定1630第二扫描顺序可以包括:确定第一组的在块的主对角线下方且在块的反对角线处或上方的部分中的元素的大小的第一总和;确定第一组的在块的主对角线上方且在块的反对角线处或上方的部分中的元素的大小的第二总和;以及基于第一总和和第二总和,确定第二扫描顺序。在一些实施方式中,类似于图25B的过程2550的过程可用于确定1630下一扫描顺序(例如,第二扫描顺序)。例如,确定1630第二扫描顺序可以包括:确定第一组的在块的主对角线下方且在块的反对角线处或上方的部分中的非零元素的第一计数;确定第一组的在块的主对角线上方且在块的反对角线处或上方的部分中的非零元素的第二计数;以及基于第一计数和第二计数,确定第二扫描顺序。
过程1600包括:使用熵编码器使用下一扫描顺序(例如,第二扫描顺序),对来自块的多个元素组中的下一组(例如,第二组)的元素进行编码1640。例如,下一扫描顺序可以是水平扫描顺序、垂直扫描顺序、右对角线扫描顺序、左对角线扫描顺序、锯齿形扫描顺序等(例如,如图15A和图21A所示)。例如,熵编码器可以采用熵编码技术,诸如,例如可变长度代码化(VLC)、上下文自适应二进制算术代码化(CABAC)或上下文自适应(多符号)算术代码化。在一些实施方式中,通过适应下一组的扫描顺序,可以提高熵编码器的代码化效率。
如果(在1645中)来自块的多个元素组中的最后一组尚未被编码,则选择1622下一组,并且对组的处理继续编码块的剩余元素。
当(在1645中)来自块的多个元素组中的最后一组已被编码时,将块的编码元素输出1650到编码比特流。例如,可通过复用器718从熵编码器712输出编码元素,以将其包括在承载包括该块的视频信号的比特流720中。在一些实施方式中,比特流可以被存储(例如,在存储器中或在磁盘上)或(例如,经由网络通信链路)被发送。在一些实施方式中(未示出),当编码元素变得可用时,可以将它们输出到编码比特流。
在一些实施方式中,过程1600基于在当前阶段收集的信息来动态调节下一阶段的扫描顺序。例如,令X表示NxM块,它具有N>0行和M>0列。可以通过执行与以下伪代码相对应的操作的专用硬件和/或软件来实施过程1600:
1.将X分成K个不重叠的组,分别表示为X[1]、X[2]、…、X[K]。
2.使用默认扫描顺序(例如,锯齿形、对角线等)来编码X[1]。
3.设置k=2。
4.基于X[1]、…、X[k-1]确定用于编码X[k]的扫描顺序。
5.使用确定的扫描顺序来编码X[k]。
6.将k增加1。
7.重复步骤4-6,直到k=K+1。
图17是用于适应扫描顺序以解码视频数据块的过程1700的示例的流程图。过程1700包括:将视频数据块分成多组元素1710;以及,使用熵解码器从编码比特流解码数据以使用第一扫描顺序从多组元素中获取第一组的元素1720;从多个组中选择下一组1722;基于先前组的元素,确定下一组的下一扫描顺序1730;使用熵解码器从编码比特流解码数据以使用下一扫描顺序获取下一组的元素1740;以及,继续(在1745中)处理多个组中的任何剩余组,直到所有组已被解码1740为止,然后输出该块的解码元素进行处理以生成视频1750。例如,过程1700可以由熵解码器756来实施。例如,过程1700可以由接收站106来实施。例如,过程1700可以由诸如计算装置200等计算装置来实施。例如,过程1700可以由包括机器可读指令的软件程序实施,该机器可读指令可以存储在诸如存储器204等存储器或辅助存储214中,并且可以由诸如CPU 202等处理器执行以使计算装置执行过程1700。例如,过程1700可以由诸如图5的解码器500等解码器来实施。例如,过程1700可以由图5的解码器500的熵解码阶段502来实施。
过程1700包括将视频数据块分成多组元素1710。这些组可能不相交。块可以包括元素的二维阵列(例如,4×4、8×8、16×16、32×32或任何其他方形或矩形块大小)。多组元素中的一组在块的结构内可以是连续的或不连续的。例如,块的元素可以是像素值(例如,发光度值)。例如,块的元素可以是量化变换系数。例如,块的元素可为残差块(例如,由帧内预测产生的残差块或由帧间预测产生的残差块)的量化变换系数。例如,块的元素可以是基于帧间预测的结果。例如,块可以是由帧间预测产生的残差块。例如,块的元素可以是基于帧内预测的结果。例如,块可以是由帧内预测产生的残差块。在一些实施方式中,多个组包括两个组(例如,如图15A至图15B、图21A至图21B、图22A或图22B的示例所示)。例如,第一组可以包括块的第一行的元素和块的第一列的元素。在一些实施方式中,第一组包括在块的角部处形成三角形的元素,并且其中,三角形包括块的第一行的元素和块的第一列的元素(例如,如在图21A至图21B、图22A或图22B的示例中所示)。在一些实施方式中,第一组包括块的第一行的在三角形之外的元素和块的第一列的在三角形之外的元素(例如,如图22A或图22B的示例所示)。例如,可以基于块的大小来选择第一组的形状(例如,如关于表2所描述的)。例如,第二组可以包括第一组之外的块的所有剩余元素。在一些实施方式中,多个组包括多于两组元素。例如,第二组可以包括第一组之外的块的剩余元素的第一行和第一列的元素,而第三组可以包括第一组和第二组的并集之外的块的所有剩余元素。
过程1700包括使用熵解码器从编码比特流解码数据以使用第一扫描顺序从多组元素中获取第一组的元素1720。第一扫描顺序可以是兼容的熵编码器被配置为用于编码块的第一组的元素的默认或初始扫描顺序。例如,第一扫描顺序可以是锯齿形顺序(例如,如图15A所示)。例如,熵解码器可以采用熵解码技术,诸如,例如可变长度代码化(VLC)、上下文自适应二进制算术代码化(CABAC)或上下文自适应(多符号)算术代码化。
过程1700包括从块的多组元素中选择下一组(例如,第二组)1722。
过程1700包括基于一个或多个先前组(例如,第一组)的元素,确定多组元素中的下一组(例如,第二组)的下一扫描顺序(例如,第二扫描顺序)1730。在一些实施方式中,可以通过从包括水平、垂直、右对角线、左对角线、锯齿形等在内的选项(例如,如图15A和图21A所示)中进行选择来确定下一扫描顺序1730。例如,可以基于第一组内的非零元素(例如,残差块的量化变换系数)的分布来确定下一扫描顺序1730。例如,可以基于先前组的并集内的非零元素的分布来确定下一扫描顺序1730。例如,可以实施图18A的过程1800以确定下一扫描顺序1730。例如,可以实施图18B的过程1840以确定下一扫描顺序1730。在一些实施方式中,所确定的1730扫描顺序可增加非零元素将被预先加载在下一组或剩余组内的概率以及在该块的所产生的扫描顺序的末尾处的元素序列将为零的概率,这些零可以使用熵解码器隐式地或显式地有效地解码。
在一些实施方式中,类似于图25A的过程2500的过程可用于确定下一扫描顺序(例如,第二扫描顺序)1730。例如,确定第二扫描顺序1730可以包括:确定在第一组的位于块的主对角线下方且在块的反对角线处或上方的部分中的元素的大小的第一总和;确定在第一组的位于块的主对角线上方且在块的反对角线处或上方的部分中的元素的大小的第二总和;以及基于第一总和和第二总和,确定第二扫描顺序。在一些实施方式中,类似于图25B的过程2550的过程可用于确定下一扫描顺序(例如,第二扫描顺序)1730。例如,确定第二扫描顺序1730可以包括:确定在第一组的位于块的主对角线下方且在块的反对角线处或上方的部分中的非零元素的第一计数;确定在第一组的位于块的主对角线上方且在块的反对角线处或上方的部分中的非零元素的第二计数;以及基于第一计数和第二计数,确定第二扫描顺序。
过程1700包括:使用熵解码器,从编码比特流解码数据以使用下一扫描顺序(例如,第二扫描顺序)获取块的多组元素中的下一组(例如,第二组)的元素1740。例如,下一扫描顺序可以是水平扫描顺序、垂直扫描顺序、右对角线扫描顺序、左对角线扫描顺序、锯齿形扫描顺序等(例如,如图15A和图21A所示)。例如,熵解码器可以采用熵解码技术,诸如,例如可变长度代码化(VLC)、上下文自适应二进制算术代码化(CABAC)或上下文自适应(多符号)算术代码化。在一些实施方式中,通过适应下一组的扫描顺序,可以提高熵解码器的代码化效率。
如果(在1745中)块的多组元素中的最后一组尚未被解码,则选择下一组1722,并且对组的处理继续解码块的剩余元素。
当(在1745中)块的多组元素中的最后一组已被解码时,输出块的解码元素进行处理以生成视频1750。例如,解码的元素可以通过逆量化/变换760从熵解码器756输出1750,并用于生成形成视频的一部分的重构块764。在一些实施方式中,所得到的视频可以被存储(例如,在存储器204或辅助存储214中),(例如,经由网络通信链路)被发送或被显示(例如,在用户界面中,诸如在屏幕或投影仪上)。例如,过程1700可包括显示部分地基于块的解码元素而生成的视频(例如,块的元素为残差块的量化变换系数的情况)。
在一些实施方式中,过程1700基于在当前阶段收集的信息来动态调节下一阶段的扫描顺序。例如,令X表示NxM块,它具有N>0行和M>0列。可以通过执行与以下伪代码相对应的操作的专用硬件和/或软件来实施过程1700:
1.将X分成K个不重叠的组,分别表示为X[1]、X[2]、…、X[K]。
2.使用默认扫描顺序(例如,锯齿形、对角线等)来解码X[1]。
3.设置k=2。
4.基于X[1]、…、X[k-1]来确定用于解码X[k]的扫描顺序。
5.使用确定的扫描顺序来解码X[k]。
6.将k增加1。
7.重复步骤4-6,直到k=K+1为止。
图18A是用于确定视频数据块的下一组元素的扫描顺序的过程1800的示例的流程图。在过程1800的示例中,在编码器和解码器中可用于在确定下一组元素的扫描顺序时考虑的先前组(例如,第一组)元素包括块中的第一行元素和块中的第一列元素。过程1800包括:确定在块的第一行的一部分中的元素的大小的第一总和1810;确定在块的第一列的一部分中的元素的大小的第二总和1812;如果(在1815中)第一总和为零并且第二总和为正,则确定下一扫描顺序为垂直扫描顺序1820;如果(在1825中)第一总和为正且第二总和为零,则确定下一扫描顺序为水平扫描顺序1830;否则,如果(在1825中)第一总和和第二总和都为正或都为零,则确定下一扫描顺序为默认扫描顺序1832。相同的过程1800可以用于确定编码器和兼容解码器中的下一扫描顺序。例如,过程1800可以由熵编码器712或熵解码器756来实施。例如,过程1800可以由发送站102或接收站106来实施。例如,过程1800可以由诸如计算装置200等计算装置来实施。例如,过程1800可以由包括机器可读指令的软件程序实施,该机器可读指令可以存储在诸如存储器204等存储器或辅助存储214中,并且可以由诸如CPU 202等处理器执行以使计算装置执行过程1800。例如,过程1800可以由诸如图5的解码器500等解码器来实施。例如,过程1800可以由诸如图4的编码器400等编码器来实施。例如,过程1800可以由诸如图4的编码器400的熵编码阶段408来实施。例如,过程1800可以由图5的解码器500的熵解码阶段502来实施。
过程1800包括确定在块的第一行的一部分中的元素的大小的第一总和1810。例如,第一行的该部分可以是第一行的右半部分。在一些实施方式中,第一行的该部分可以是整个第一行。在一些实施方式中,元素可以被约束为采用整数值(例如,作为量化的结果)。例如,元素的大小可以是元素的绝对值。在一些实施方式中,元素的大小可以表示为元素的值的平方或随元素的绝对值单调变化的另一数量。例如,可以如下确定第一总和1810:
SR=|r[ceil(M/2)]|+|r[ceil(M/2)+1]|+...|r[M-1]| (9)
其中,SR是第一总和;M是块(例如,NxM块)中的列数;r[i]是i=0至M-1时的块的第一行的第i个元素;并且ceil()表示上限函数,即对于任何实数a,ceil(a)返回大于或等于a的最小整数。M可以大于或等于2。例如,块的元素可为残差块(例如,由帧内预测产生的残差块或由帧间预测产生的残差块)的量化变换系数。
过程1800包括:确定在块的第一列的一部分中的元素的大小的第二总和1812。例如,第一列的该部分可以是第一列的下半部分。在一些实施方式中,第一行的该部分可以是整个第一列。在一些实施方式中,元素可以被约束为采用整数值(例如,作为量化的结果)。例如,元素的大小可以是元素的绝对值。在一些实施方式中,元素的大小可以表示为元素的值的平方或随元素的绝对值而单调变化的另一数量。例如,可以如下确定第二总和1812:
SC=|c[ceil(N/2)]|+|c[ceil(N/2)+1]|+...|c[N-1]| (10)
其中,SC是第二总和;N是块(例如,NxM块)中的行数;并且c[i]是i=0至N-1时的块的第一列的第i个元素。N可以大于或等于2。
过程1800可以包括:响应于第一总和(例如,等式9的SR)为零并且第二总和(例如,等式10的SC)为正(在1815中),确定下一扫描顺序(例如,第二扫描顺序)为垂直扫描顺序(例如,如图15A的扫描顺序1520所示)1820。
过程1800可以包括:响应于第一总和(例如,等式9的SR)为正并且第二总和(例如,等式10的SC)为零(在1825中),确定下一扫描顺序(例如,第二扫描顺序)为水平扫描顺序(例如,如图15A的扫描顺序1510所示)1830。
否则,过程1800可以包括:响应于第一总和(例如,等式9的SR)和第二和(例如,等式10的SC)都为正或都为零,确定下一扫描顺序(例如,第二扫描顺序)为默认扫描顺序(例如,锯齿形、对角线等)1832。
在一些实施例(未示出)中,在1815中的SR==0可以被SR<=第五阈值代替,并且SC>0可以被SC>=第六阈值代替。类似地,在1825中的SR>0可以由SR>=第六阈值代替,并且在1825中的SC==0可以由SC<=第五阈值代替。
图18B是用于确定视频数据块的下一组元素的扫描顺序的过程1840的示例的流程图。在过程1840的示例中,在编码器和解码器中可用于在确定下一组元素的扫描顺序时考虑的先前组(例如,第一组)元素包括块中的第一行元素和块中的第一列元素。过程1840包括:确定在块的第一行的一部分中的非零元素的第一计数1850;确定在块的第一列的一部分中的非零元素的第二计数1852;如果(在1855中)第一计数为零并且第二计数为正,则确定下一扫描顺序为垂直扫描顺序1860;如果(在1865中)第一计数为正且第二计数为零,则确定下一扫描顺序为水平扫描顺序1870;否则,如果(在1865中)第一计数和第二计数都为正或都为零,则确定下一扫描顺序为默认扫描顺序1872。相同的过程1840可以用于确定编码器和兼容解码器中的下一扫描顺序。例如,过程1840可以由熵编码器712或熵解码器756来实施。例如,过程1840可以由发送站102或接收站106来实施。例如,过程1840可以由诸如计算装置200等计算装置来实施。例如,过程1840可以由包括机器可读指令的软件程序实施,该机器可读指令可以存储在诸如存储器204等存储器或辅助存储214中,并且可以由诸如CPU 202等处理器执行以使计算装置执行过程1840。例如,过程1840可以由诸如图5的解码器500等解码器来实施。例如,过程1840可以由诸如图4的编码器400等编码器来实施。例如,过程1840可以由诸如图4的编码器400的熵编码阶段408来实施。例如,过程1840可以由图5的解码器500的熵解码阶段502来实施。
过程1840包括确定在块的第一行的一部分中的非零元素的第一计数1850。例如,第一行的该部分可以是第一行的右半部分。在一些实施方式中,第一行的该部分可以是整个第一行。在一些实施方式中,可基于块的可用组的非零图(例如,类似于非零图606)来确定第一计数1850。例如,可以将第一计数确定为来自与块的第一行的该部分相对应的非零图的二进制值的总和1850。例如,可以如下确定第一计数1850:
CR=nz(r[ceil(M/2)])+nz(r[ceil(M/2)+1])+...nz(r[M-1]) (11)
其中,CR是第一计数;M是块(例如,NxM块)中的列数;r[i]是i=0至M-1时的块的第一行的第i个元素;nz()表示非零函数,如果参数为非零,则返回1,而如果参数为零,则返回零;ceil()表示上限函数,即对于任何实数a,ceil(a)返回大于或等于a的最小整数。M可以大于或等于2。例如,块的元素可为残差块(例如,由帧内预测产生的残差块或由帧间预测产生的残差块)的量化变换系数。
过程1840包括确定在块的第一列的一部分中的非零元素的第二计数1852。例如,第一列的该部分可以是第一列的下半部分。在一些实施方式中,第一列的该部分可以是整个第一列。在一些实施方式中,可基于块的可用组的非零图(例如,类似于非零图606)来确定第二计数1852。例如,可以将第二计数确定为来自与块的第一列的该部分相对应的非零图的二进制值的总和1850。例如,可以如下确定第二计数1852:
CC=nz(c[ceil(N/2)])+nz(c[ceil(N/2)+1])+...nz(c[N-1]) (12)
其中,CC是第二计数;N是块(例如,NxM块)中的行数;并且c[i]是i=0至N-1时的块的第一列的第i个元素。N可以大于或等于2。例如,块的元素可为残差块(例如,由帧内预测产生的残差块或由帧间预测产生的残差块)的量化变换系数。
过程1840可以包括:响应于第一计数(例如,等式11的CR)为零并且第二计数(例如,等式12的CC)为正(在1855中),确定下一扫描顺序(例如,第二扫描顺序)为垂直扫描顺序(例如,如图15A的扫描顺序1520所示)1860。
过程1840可以包括:响应于第一计数(例如,等式11的CR)为正并且第二计数(例如,等式12的CC)为零(在1865中),确定下一扫描顺序(例如,第二扫描顺序)为水平扫描顺序(例如,如图15A的扫描顺序1510所示)1870。
否则,过程1840可以包括:响应于第一计数(例如,等式11的CR)和第二计数(例如,等式12的CC)都为正或都为零,确定下一扫描顺序(例如,第二扫描顺序)为默认扫描顺序(例如,锯齿形、对角线等)1872。
在一些实施例(未示出)中,在1855中的CR==0可以被CR<=第七阈值代替,并且CC>0可以被CC>=第八阈值代替。类似地,在1865中的CR>0可以由CR>=第八阈值代替,并且在1865中的CC==0可以由CC<=第七阈值代替。
在一些实施方式中,CR和CC可以进一步用于确定默认扫描顺序的方向。例如,如果默认扫描顺序是锯齿形扫描顺序(先向下),那么,如果CR大于CC,则将使用转置的锯齿形扫描顺序(首先朝右);否则,将使用锯齿形扫描顺序(先向下)。如果默认扫描顺序是45度对角线扫描顺序(右上),那么,如果CR大于CC,则可以使用225度对角线扫描顺序(左下);否则,可以使用45度对角线扫描顺序。上面的等式9和等式10的SR和SC可以用于以类似方式确定默认扫描顺序的方向。
在一些实施方式中,编码器可以操纵CR和CC,从而选择期望的扫描顺序。例如,如果期望水平扫描顺序,则编码器可以选择在第一行和第一列中的量化系数,使得CR为非零并且CC为零(或者它们满足适当的阈值约束)。对量化系数的选择可以是基于速率失真成本。类似地,编码器可以操纵SR和SC以确保选择了期望的扫描顺序。
过程1600可以影响在对量化变换系数进行代码化时的上下文推导。根据所选择的扫描顺序,可用于导出上下文以对当前系数进行代码化的可用相邻系数可能不同。例如,一些熵代码化方案可以使用两个先前代码的邻居来导出用于对令牌表示的当前系数进行代码化(编码和解码)的上下文。假设过程1600中的第一组由当前块的第一行和第一列组成。那么,可以在下面的表1中给出用于对块位置[r,c]处的令牌进行代码化的上下文推导中使用的两个邻居的块位置。
邻居A 邻居B
[0,0] N/A N/A
[1,0] [0,0] N/A
[0,1] [0,0] [1,0]
[r,0],r>1 [r-1,0] [r-2,0]
[0,c],c>1 [0,c-1] [0,c-2]
[r,c],r>0,c>0 [r-1,c] [r,c-1]
在一些实施方式中,在对除第一组以外的组中的系数进行代码化时使用的上下文可以取决于针对该组选择的扫描顺序。例如,如果针对图15B的第二组所选择的扫描顺序是水平或垂直扫描顺序,则可以使用一个上下文对该第二组中的位置(r,c)处的系数进行代码化,其中,r>0且c>0,并且,如果针对该第二组所选择的扫描顺序是锯齿形扫描顺序,则可以使用不同的上下文对位置(r,c)处的系数进行代码化。
过程1600可以与用于使用基于块的元素所确定的上下文对块的帧内预测模式进行编码的过程(例如,过程900)一起使用。在一些实施方式中,过程(例如,过程1600与过程900)的此类组合可用于在熵代码化时更充分地利用帧内预测模式与量化变换系数之间的相关性。
图19是用于适应扫描顺序以对视频数据块进行编码并且使用基于该块中的数据所选择的上下文来对该块的帧内预测模式进行编码的过程1900的示例的流程图。过程1900包括:将视频数据块分成多组元素1910;使用第一扫描顺序使用熵编码器,对多组元素中的第一组的元素进行编码1920;从多个组中选择下一组1922;基于先前组的元素,确定下一组的下一扫描顺序1930;使用熵编码器,使用下一扫描顺序,对下一组的元素进行编码1940;以及继续(在1945中)处理多个组中的任何剩余组,直到所有组已经被编码1940为止;基于块的元素,确定块的类别(例如,水平、垂直、或对角线)1950;基于类别来确定上下文1952;使用熵解码器与上下文,对块的帧内预测模式进行编码1954;以及将块的编码元素和块的编码帧内模式输出到比特流1960。例如,过程1900可以由熵编码器712来实施。例如,过程1900可以由发送站102来实施。例如,过程1900可以由诸如计算装置200等计算装置来实施。例如,过程1900可以由包括机器可读指令的软件程序实施,该机器可读指令可以存储在诸如存储器204等存储器或辅助存储214中,并且可以由诸如CPU 202等处理器执行以使计算装置执行过程1900。例如,过程1900可以由诸如图4的编码器400等编码器来实施。例如,过程1900可以由图4的编码器400的熵编码阶段408来实施。
过程1900包括将视频数据块分成多组元素1910。这些组可能不相交。块可以包括元素的二维阵列(例如,4×4、8×8、16×16、32×32或任何其他方形或矩形块大小)。多组元素中的一组在块的结构内可以是连续的或不连续的。例如,块的元素可以是像素值(例如,发光度值)。例如,块的元素可以是量化变换系数。例如,块的元素可为残差块(例如,由帧内预测产生的残差块或由帧间预测产生的残差块)的量化变换系数。例如,块的元素可以是基于帧间预测的结果。例如,块可以是由帧间预测产生的残差块。例如,块的元素可以是基于帧内预测的结果。例如,块可以是由帧内预测产生的残差块。在一些实施方式中,多个组包括两个组(例如,如图15A的示例所示)。例如,第一组可以包括块的第一行的元素和块的第一列的元素。例如,第二组可以包括第一组之外的块的所有剩余元素。在一些实施方式中,多个组包括多于两组元素。例如,第二组可以包括第一组之外的块的剩余元素的第一行和第一列的元素,而第三组可以包括第一组和第二组的并集之外的块的所有剩余元素。
过程1900包括:使用第一扫描顺序使用熵编码器,对多组元素中的第一组的元素(例如,帧内预测残差块的量化变换系数)进行编码1920。第一扫描顺序可以是兼容的熵解码器被配置为用来解码块的第一组的元素的默认或初始扫描顺序。例如,第一扫描顺序可以是锯齿形顺序(例如,如图15A所示)。例如,熵编码器可以采用熵编码技术,诸如,例如可变长度代码化(VLC)、上下文自适应二进制算术代码化(CABAC)或上下文自适应(多符号)算术代码化。
过程1900包括从块的多组元素中选择下一组(例如,第二组)1922。例如,可以通过增加组索引来选择下一组1922。
过程1900包括基于一个或多个先前组(例如,第一组)的元素来确定多组元素中的下一组(例如,第二组)的下一个扫描顺序(例如,第二扫描顺序)1930。在一些实施方式中,可以通过从包括水平、垂直、对角线、锯齿形等在内的选项中进行选择来确定下一扫描顺序1930(例如,如图15A所示)。例如,可以基于第一组内的非零元素(例如,帧内预测残差块的量化变换系数)的分布来确定下一扫描顺序1930。例如,可以基于在先前组的并集内的非零元素的分布来确定下一扫描顺序1930。例如,可以实施图18A的过程1800以确定下一扫描顺序1930。例如,可以实施图18B的过程1840以确定下一扫描顺序1930。在一些实施方式中,所确定的1930扫描顺序可增加非零元素将被预先加载在下一组或剩余组内的概率以及在该块的所得扫描顺序的末尾处的元素序列将为零的概率,这些零可以使用熵编码器隐式地或显式地有效地编码。
过程1900包括:使用下一扫描顺序(例如,第二扫描顺序)使用熵编码器,对块的多组元素中的下一组(例如,第二组)的元素进行编码1940。例如,下一扫描顺序可以是水平扫描顺序、垂直扫描顺序、锯齿形扫描顺序等(例如,如图15A所示)。例如,熵编码器可以采用熵编码技术,诸如,例如可变长度代码化(VLC)、上下文自适应二进制算术代码化(CABAC)或上下文自适应(多符号)算术代码化。在一些实施方式中,通过适应下一组的扫描顺序,可以提高熵编码器的代码化效率。
如果(在1945中)块的多组元素中的最后一组尚未被编码,则选择下一组1922,并且对组的处理继续编码块的剩余元素1940。
当(在1945中)块的多组元素中的最后一组已被编码时,基于块的元素(例如,帧内预测残差块的量化变换系数)来确定块的类别1950。例如,类别可以被确定为水平、垂直和其他(即,不是水平或垂直,例如对角线)之一。类别可以指示块内的非零元素的分布中的定向图案,该定向图案可以与用于生成块的帧内预测模式有关。在一些实施方式中,可以基于在块的第一部分(例如,块的右半部分)中的非零元素的第一计数并且基于在块的第二部分(例如,块的下半部分)中的非零元素的第二计数来确定类别1950。例如,如果第一计数为零并且第二计数为正,则可以将类别确定为垂直1950。例如,如果第一计数为正并且第二计数为零,则可以将类别确定为水平1950。例如,如果第一计数和第二计数都为零或都为正,则可以将类别确定为对角线1950。在一些实施方式中,可以基于在块的第一组元素中的元素来确定类别1950。例如,当等式11的CR为零并且等式12的CC为正时,可以将类别确定为垂直1950。例如,当等式11的CR为正并且等式12的CC为零时,可以将类别确定为水平1950。例如,当等式11的CR和等式12的CC都为零或都为正时,可将类别确定为对角线1950。在一些实施方式中,类别(t)可以使用关于图9描述的算法(2)来确定。在一些实施方式中,类别(t)可以使用关于图9描述的算法(6)来确定。在一些实施方式中,类别(t)可以使用关于图9描述的算法(7)来确定。在一些实施方式中,类别(t)可以使用关于图9描述的算法(8)来确定。
过程1900包括基于类别确定上下文1952。因为块的非零元素的分布中的图案可以与用于生成块的帧内预测模式相关,所以类别可以用于为帧内预测模式选择更有用的上下文,这可以提高用于对帧内预测模式进行编码的代码化效率。例如,可以如关于图9的操作904所描述那样确定上下文1952。例如,可以使用相对于图9描述的等式(3)来确定上下文1952。例如,可以使用相对于图9描述的等式(4)来确定上下文1952。例如,可以使用相对于图9描述的等式(5)来确定上下文1952。
过程1900包括使用熵解码器与上下文对块的帧内预测模式进行编码1954。例如,如关于图9的操作906所描述的,可以对帧内预测模式进行编码1954。
过程1900包括将块的编码元素和块的编码帧内预测模式输出到编码比特流1960。例如,可通过复用器718从熵编码器712输出编码元素1960,以将其包括在承载包括该块的视频信号的比特流720中。例如,可通过复用器718从熵编码器716输出编码帧内预测模式1960,以将其包括在承载包括该块的视频信号的比特流720中。在一些实施方式中,比特流可以被存储(例如,在存储器中或在磁盘上)或(例如,经由网络通信链路)被发送。在一些实施方式中(未示出),当编码元素变得可用时,可以将它们输出到编码比特流。
在一些实施方式中,可以通过执行与以下伪代码相对应的操作的专用硬件和/或软件来实施过程1900(其使用以上关于等式11和等式12提供的定义):
1.确定帧内预测模式m以生成当前块X的预测P。
2.计算残差块E=X–P,并且通过执行变换(若适用)和量化来获取量化系数。
3.使用默认扫描顺序(例如,锯齿形、对角线等)来编码r[0]、…、r[N-1]和c[0]、…、c[N-1]。(图15A中示出了这种扫描顺序的示例。)
a.如果CC>=1且CR==0,设置t=1,并且选择垂直扫描顺序;
b.如果CC==0且CR>=1,设置t=2,并且选择水平扫描顺序;
c.否则,设置t=0,并且选择默认扫描顺序(例如,锯齿形、对角线等)。
4.通过使用类别t,对帧内预测模式进行编码。
5.使用步骤3中选择的扫描顺序,对块的剩余系数进行编码。
过程1700可以与用于使用基于块的元素所确定的上下文来解码块的帧内预测模式的技术(例如,过程1100)一起使用。在一些实施方式中,技术(例如,过程1700与过程1100)的此类组合可用于在熵代码化时更充分地利用帧内预测模式与量化变换系数之间的相关性。
图20是用于适应扫描顺序以解码视频数据块并且使用基于块中的数据所选择的上下文来对该块的帧内预测模式进行解码的过程2000的示例的流程图。过程2000包括:将视频数据块分成多组元素2010;使用熵解码器,从编码比特流解码数据以使用第一扫描顺序获取多组元素中的第一组的元素2020;从多个组中选择下一组2022;基于先前组的元素,确定下一组的下一扫描顺序2030;使用熵解码器,从编码比特流解码数据以使用下一扫描顺序获得下一组的元素2040;继续(在2045中)处理多个组中的任何剩余组,直到块的所有组元素都已被解码2040为止;基于块的解码元素,确定块的类别(例如,水平、垂直或对角线)2050;基于类别来确定上下文2052;使用熵解码器与上下文,从编码比特流解码数据以获取块的帧内预测模式2054;以及输出块的解码元素和解码帧内预测模式进行处理以生成视频2060。例如,过程2000可以由熵解码器756来实施。例如,过程2000可以由接收站106来实施。例如,过程2000可以由诸如计算装置200等计算装置来实施。例如,过程2000可以由包括机器可读指令的软件程序实施,该机器可读指令可以存储在诸如存储器204等存储器或辅助存储214中,并且可以由诸如CPU 202等处理器执行以使计算装置执行过程2000。例如,过程2000可以由诸如图5的解码器500等解码器来实施。例如,过程2000可以由图5的解码器500的熵解码阶段502来实施。
过程2000包括将视频数据块分成多组元素2010。这些组可能不相交。块可以包括元素的二维阵列(例如,4×4、8×8、16×16、32×32或任何其他方形或矩形块大小)。多组元素中的一组在块的结构内可以是连续的或不连续的。例如,块的元素可以是像素值(例如,发光度值)。例如,块的元素可以是量化变换系数。例如,块的元素可为残差块(例如,由帧内预测产生的残差块或由帧间预测产生的残差块)的量化变换系数。例如,块的元素可以是基于帧间预测的结果。例如,块可以是由帧间预测产生的残差块。例如,块的元素可以是基于帧内预测的结果。例如,块可以是由帧内预测产生的残差块。在一些实施方式中,多个组包括两个组(例如,如图15A的示例所示)。例如,第一组可以包括块的第一行的元素和块的第一列的元素。例如,第二组可以包括第一组之外的块的所有剩余元素。在一些实施方式中,多个组包括多于两组元素。例如,第二组可以包括第一组之外的块的剩余元素的第一行和第一列的元素,而第三组可以包括第一组和第二组的并集之外的块的所有剩余元素。
过程2000包括:使用熵解码器从编码比特流解码数据以使用第一扫描顺序从多组元素中获取第一组的元素2020。第一扫描顺序可以是兼容的熵编码器被配置为用于编码块的第一组的元素的默认或初始扫描顺序。例如,第一扫描顺序可以是锯齿形顺序(例如,如图15A所示)。例如,熵解码器可以采用熵解码技术,诸如,例如可变长度代码化(VLC)、上下文自适应二进制算术代码化(CABAC)或上下文自适应(多符号)算术代码化。
过程2000包括从块的多组元素中选择下一组(例如,第二组)2022。例如,可以通过增加组索引来选择下一组2022。
过程2000包括基于一个或多个先前组(例如,第一组)的元素,确定多组元素中的下一组(例如,第二组)的下一个扫描顺序(例如,第二扫描顺序)2030。在一些实施方式中,可以通过从包括水平、垂直、对角线、锯齿形等在内的选项中进行选择来确定下一扫描顺序2030(例如,如图15A所示)。例如,可以基于第一组内的非零元素(例如,量化变换系数)的分布来确定下一扫描顺序2030。例如,可以基于在先前组的并集内的非零元素的分布来确定下一扫描顺序2030。例如,可以实施图18A的过程1800以确定下一扫描顺序2030。例如,可以实施图18B的过程1840以确定下一扫描顺序2030。在一些实施方式中,所确定的2030扫描顺序可增加非零元素将被预先加载在下一组或剩余组内的概率以及在该块的所得扫描顺序的末尾处的元素序列将为零的概率,这些零可以使用熵解码器隐式地或显式地有效地解码。
过程2000包括:使用熵解码器从编码比特流解码数据以使用下一扫描顺序(例如,第二扫描顺序)获取块的多组元素中的下一组(例如,第二组)的元素2040。例如,下一扫描顺序可以是水平扫描顺序、垂直扫描顺序、锯齿形扫描顺序等(例如,如图15A所示)。例如,熵解码器可以采用熵解码技术,诸如,例如可变长度代码化(VLC)、上下文自适应二进制算术代码化(CABAC)或上下文自适应(多符号)算术代码化。在一些实施方式中,通过适应下一组的扫描顺序,可以提高熵解码器的代码化效率。
如果(在2045中)块的多组元素中的最后一组尚未被解码,则选择下一组2022,并且对组的处理继续解码块的剩余元素2040。
当(在2045中)块的多组元素中的最后一组已被解码时,基于块的解码元素(例如,帧内预测残差块的量化变换系数)来确定块的类别2050。例如,类别可以被确定为水平、垂直和其他(即,不是水平或垂直,例如对角线)之一。类别可以指示块内的非零元素的分布中的定向图案,该定向图案可以与用于生成块的帧内预测模式有关。在一些实施方式中,可以基于在块的第一部分(例如,块的右半部分)中的非零元素的第一计数并且基于在块的第二部分(例如,块的下半部分)中的非零元素的第二计数来确定类别2050。例如,如果第一计数为零并且第二计数为正,则可以将类别确定为是垂直的2050。例如,如果第一计数为正并且第二计数为零,则可以将类别确定为是水平的2050。例如,如果第一计数和第二计数都为零或都为正,则可以将类别确定为是对角线的2050。在一些实施方式中,可以基于在块的第一组元素中的元素来确定类别2050。例如,当等式11的CR为零并且等式12的CC为正时,可以将类别确定为垂直2050。例如,当等式11的CR为正并且等式12的CC为零时,可以将类别确定为水平2050。例如,当等式11的CR和等式12的CC都为零或都为正时,可将类别确定为对角线2050。在一些实施方式中,类别(t)可以使用关于图9描述的算法(2)来确定。在一些实施方式中,类别(t)可以使用关于图9描述的算法(6)来确定。在一些实施方式中,类别(t)可以使用关于图9描述的算法(7)来确定。在一些实施方式中,类别(t)可以使用关于图9描述的算法(8)来确定。
过程2000包括基于类别来确定上下文2052。因为块的非零元素的分布中的图案可以与用于生成块的帧内预测模式相关,所以类别可以用于为帧内预测模式选择更有用的上下文,这可以提高用于对帧内预测模式进行解码的代码化效率。例如,可以如关于图9的操作904所描述那样确定上下文2052。例如,可以使用相对于图9描述的等式(3)来确定上下文2052。例如,可以使用相对于图9描述的等式(4)来确定上下文2052。例如,可以使用相对于图9描述的等式(5)来确定上下文2052。
过程2000包括使用熵解码器与上下文从编码比特流解码数据以获取块的帧内预测模式2054。例如,如关于图11的操作1106所描述的,可以对帧内预测模式进行解码2054。
过程2000包括输出块的解码元素和块的解码帧内预测模式以进行处理以生成视频2060。例如,解码元素可以通过逆量化/变换760从熵解码器756输出2060,并用于生成形成视频的一部分的重构块764。例如,解码帧内预测模式可以从熵解码器754输出2060到帧内预测768,并用于生成形成视频的一部分的重构块764。在一些实施方式中,所得到的视频可以被存储(例如,在存储器或磁盘中),(例如,经由网络通信链路)被发送或被显示(例如,在用户界面中,诸如在屏幕或投影仪上)。例如,过程2000可包括显示部分地基于块的解码元素并且部分地基于解码帧内预测模式而生成的视频(例如,块的元素为残差块的量化变换系数的情况)。
在一些实施方式中,可以通过执行与以下伪代码相对应的操作的专用硬件和/或软件来实施过程2000(其使用以上关于等式11和等式12提供的定义):
1.使用默认扫描顺序(例如,锯齿形、对角线等)来解码r[0]、…、r[N-1]和c[0]、…、c[N-1]。(图15A中示出了这种扫描顺序的示例。)
a.如果CC>=1且CR==0,设置t=1,并且选择垂直扫描顺序;
b.如果CC==0且CR>=1,设置t=2,并且选择水平扫描顺序;
c.否则,设置t=0,并且选择默认扫描顺序(例如,锯齿形、对角线等)。
2.通过使用t,对帧内预测模式进行解码。
3.使用步骤1中选择的扫描顺序,对块的剩余系数进行解码。
4.使用帧内预测模式m生成预测P。
5.通过解码的系数,通过执行逆量化和逆变换(若适用)来重构残差块
6.重构当前图像块
在一些实施方式中,基于块的元素所确定的块的类别可用于以各种方式(诸如,推导用于对帧内预测模式m进行编码和解码的上下文,和/或推导用于帧内预测模式m的预测器(例如,如关于图9的帧内预测模式预测器p所描述的))来编码和解码帧内预测模式m。例如,可以使用基于块的类别所确定的m的预测来对帧内预测模式m进行差分编码和解码。
可以使用具有不同形状的较小的第一组元素来修改图15A至图15B的自适应扫描顺序方案,这些元素可以包括不太可能为零的元素(例如,第二行和第二列中的元素可能为非零,其中,其是低频变换系数)。将第一组调节为较小并且更可能包括块的所有非零值可以提高代码化效率。图21A是基于块的第一组元素的数据而适应的块的扫描顺序2100的集合的示例的示意图。在图21A的单元格中示出的数字是在块内的对应位置处的块的各个元素的扫描顺序序列号。扫描顺序2100的示例集合包括四种扫描顺序:交替的对角线、水平扫描顺序2110;交替的对角线、垂直扫描顺序2120;交替的对角线、右对角线扫描顺序2130;以及交替的对角线、左对角线扫描顺序2140。在图21A的示例中,将要代码化的块划分为两组元素:第一组,首先使用图21A的图中的阴影单元格中的扫描顺序序列号0-5反映的交替对角线扫描顺序对其进行代码化(例如,编码或解码);以及第二组,接着使用基于第一组中的元素选择或适应的扫描顺序对其进行代码化(例如,编码或解码)。例如,可以针对第二组选择水平扫描顺序,从而产生块的交替对角线、水平扫描顺序2110。例如,可以针对第二组选择垂直扫描顺序,从而产生块的交替对角线、垂直扫描顺序2120。例如,可以针对第二组选择右对角线扫描顺序,从而产生块的交替对角线、右对角线扫描顺序2130。例如,可以针对第二组选择左对角线扫描顺序,从而产生块的交替对角线、左对角线扫描顺序2140。在图21A的示例中,第一组包括在块的角部处形成三角形的元素,并且其中,三角形包括块的第一行的元素和块的第一列的元素。在图21A的示例中,第二组包括块中在第一组之外的所有剩余元素。例如,块的元素可以是量化变换系数。例如,块的元素可为残差块(例如,由帧内预测产生的残差块或由帧间预测产生的残差块)的量化变换系数。
图21B是基于块的第一组元素的大小而适应的块的扫描顺序2150的集合的示例的示意图。在图21B的单元格中示出的数字是在块内的对应位置处的块的各个元素的值的大小。扫描顺序2150的示例集合包括四种扫描顺序:交替的对角线、水平扫描顺序2160;交替的对角线、垂直扫描顺序2170;交替的对角线、右对角线扫描顺序2180;交替的对角线、左对角线扫描顺序2190。在图21B的示例中,将要代码化的块划分为两组元素:第一组,首先使用交替对角线扫描顺序对其进行代码化(例如,编码或解码);以及第二组,接着使用基于来自第一组的非零元素的分布(例如,第一组的某些部分中的大小的总和)选择或适应的扫描顺序对其进行代码化(例如,编码或解码)。在图21B的示例中,第一组包括在块的角部处形成三角形的元素,并且其中,三角形包括块的第一行的元素和块的第一列的元素。在图21B的示例中,第二组包括块中在第一组之外的所有剩余元素。例如,可以针对第二组选择水平扫描顺序,从而产生块的交替对角线、水平扫描顺序2160,其中,第一行的一部分中的元素的大小的总和为正,并且第一列的一部分中的元素的大小的总和为零。例如,可以针对第二组选择垂直扫描顺序,从而产生块的交替对角线、垂直扫描顺序2170,其中,第一行的一部分中的元素的大小的总和为零。例如,可以针对第二组选择左对角线扫描顺序,从而产生块的交替对角线、左对角线扫描顺序2190,其中,第一行的一部分中的元素的大小的总和大于第一列的一部分中的元素的大小的总和,且两个总和均为正。例如,可以针对第二组选择右对角线扫描顺序,从而产生块的交替对角线、右对角线扫描顺序2180(例如,在两个总和均为正且行总和小于或等于列总和的情况)。例如,块的元素可以是量化变换系数。例如,块的元素可为残差块(例如,由帧内预测产生的残差块或由帧间预测产生的残差块)的量化变换系数。
在图21A至图21B所示的示例中,在扫描第一组元素(以阴影单元格示出)之后,可以如下确定剩余第二组元素(以非阴影单元格示出)中的系数的扫描顺序:令r[j],j=0、...、N-1,表示第一行中第j个系数(从左到右)的绝对值,令c[i],i=0、...、N-1,表示N×N当前块的第一列中的第i个系数(从上到下)的绝对值,其中,在图21A至图21B中,N=4,并且更一般而言,可以是大于或等于2的任何整数。然后,对于当前块中的剩余系数:
1.计算cSum=c[L]+…+c[N-1-K]和rSum=r[L]+…+r[N-1-K],其中,L和K是非负常数,L+K<N(例如,在图21A至图21B中,L=1且K=1)。
2.然后:
a.如果rSum>cSum且cSum==0,则选择水平扫描顺序;
b.如果rSum>cSum且cSum>0,选择左对角线扫描顺序(例如,与反对角线平行的左下);
c.如果rSum<=cSum且rSum==0,则选择垂直扫描顺序;否则d.选择右对角线扫描顺序(例如,与反对角线平行的右上)。
注意,用于第一组的扫描顺序可以是编码器和解码器都知道的任何默认扫描顺序(水平、对角线、交替对角线、锯齿形、垂直等)。还要注意,对于8x8、16x16、32x32或甚至更大的较大块,L和/或K可能会相应增加。例如,K可以是N/2-1,即,当N=8时为K=3,当N=16时为K=7,当N=32时为K=15,等等。在一些实施方式中,L和/或K的值可以作为标头信息(例如,图片或代码化块标头)的一部分发送给解码器。可以针对第一列和第一行使用不同的L和/或K值。在那种情况下,可以根据用于累计各个总和的位置的数量来缩放cSum和rSum。还要注意,尽管在本文中使用了四个不同的扫描顺序(左对角线、水平、垂直、右对角线)的集合来说明解决方案,但这些仅是示例。也可以使用其他扫描顺序,包括但不限于锯齿形(先下)、Z字形(先右)。
在一些实施方式中,上面的r[i]指示第一行中的第i个系数是否为非零,并且上面的c[j]指示第一列中的第j个系数是否为非零,其中,i、j=0、…、N-1。这样,rSum=r[L]+…+r[N-1-K]表示第一行中介于索引L和N-1-K之间(含L和N-1-K)的非零系数的计数,且cSum=c[L]+…+c[N-1-K]表示第一列中介于索引L和N-1-K之间(含L和N-1-K)的非零系数的计数。然后:
1.如果rSum>cSum且cSum==0,则选择水平扫描顺序;
2.如果rSum>cSum且cSum>0,则选择左对角线扫描顺序;
3.c.如果rSum<=cSum且rSum==0,则选择垂直扫描顺序;否则
4.选择右对角线扫描顺序。
与图15A至图15B中使用第一行和第一列来定义块的第一组元素的示例方案相比,图21A至图21B的方案定义较小的第一组元素,因此具有在较大的第二组元素中利用更好的扫描顺序来提高代码化效率的潜力。
在一些实施方式中,可以通过使用在第一行和第一列之外的位置处的系数值来计算cSum和rSum。例如,令u[i,j]表示块位置[i,j](第i行和第j列)处的系数的绝对值或大小。然后,可以在下面的等式(13)中如下计算cSum和rSum。令K<2N是编码器和解码器已知的非负常数。
在等式(13)中,cSum实际上是位于主对角线下方且位于由K定义的反对角线上方或上的系数(即,位于位置[i,j]的系数)的绝对值的总和,其中,i+j<=K,且j<i。相应地,在等式(13)中,rSum是位于主对角线上方且位于由K定义的反对角线上方或上的系数(即,位于位置[i,j]的系数)的绝对值的总和,其中,i+j<=K,且i<j。
可以基于图像数据块的大小来选择块的第一组元素的大小和形状,以实施块的大小相关划分。鉴于以下事实:图像数据的NxN块中的边界像素(例如,变换系数)的数量以维度N按照顺序O(N)线性增长,并且块中的像素的数量按照顺序O(N2)平方增长,并且鉴于以下事实:第一组元素使用固定的扫描顺序,而第二组可能会受益于从第一组学习的扫描顺序,因此可以通过取决于块大小以及可能还有其他信息(如变换类型(例如,离散余弦变换、离散傅里叶变换、标识等))将块划分为两组元素来提高代码化效率。
参照下面的表2可以看到块的第一组元素相对于块大小的大小。
从表2来看,我们看到,与当N=4时关于图15A至图15B所描述那样使用第一行和第一列相比,如关于图21A至图21B所描述那样使用左上三角形来定义第一组元素产生的第一组更小,当N=8时,两种方案是相等的,并且当N>8时,图15A至图15B的方案产生的第一组更小。这样,在一些实施方式中,图21A至图21B的方案可以用于较小的变换(如4x4或8x8),而图15A至图15B的方案或图21A至图21B的方案与图15A至图15B的方案的组合可以用于较大的变换(如8x8及以上)。作为组合图21A至图21B的方案和图15A至图15B的方案的示例,第一组可以由固定大小的左上三角形加上第一行的附加段和第一列的附加段组成。图22A至图22B示出了将两种算法组合用于8x8变换的两个示例,其中,图22A中的第一组元素的大小是12,而图22B中的第一组元素的大小是14,两者都小于可由图21A至图21B方案或图15A至图15B方案使用的第一组元素。
图22A是图像数据块的第一组元素的扫描顺序2200的示例的示意图。在图22A中,第一组的元素出现在阴影单元格中,并用在块内的对应位置处的块的各个元素的扫描顺序序列号来标记。扫描顺序2200包括用于块的第一组元素的交替对角线扫描顺序。扫描顺序2200的第一组元素包括在块的角部处形成三角形的元素,并且其中,三角形包括块的第一行的元素和块的第一列的元素(例如,按照扫描顺序2200标记为0-5的元素)。扫描顺序2200的第一组元素还包括块的第一行的在三角形之外的元素和块的第一列的在三角形之外的元素(例如,按照扫描顺序2200标记为6-11的元素)。例如,块的第二组元素可以包括块的在第一组之外的所有剩余元素。
图22B是图像数据块的第一组元素的扫描顺序2250的示例的示意图。在图22B中,第一组的元素出现在阴影单元格中,并用在块内的对应位置处的块的各个元素的扫描顺序序列号来标记。扫描顺序2250包括用于块的第一组元素的交替对角线扫描顺序。扫描顺序2250的第一组元素包括在块的角部处形成三角形的元素,并且其中,三角形包括块的第一行的元素和块的第一列的元素(例如,按照扫描顺序2250标记为0-9的元素)。扫描顺序2250的第一组元素还包括块的第一行的在三角形之外的元素和块的第一列的在三角形之外的元素(例如,按照扫描顺序2200标记为10-13的元素)。例如,块的第二组元素可以包括块的在第一组之外的所有剩余元素。
当使用自适应扫描顺序时,从在第一组中解码的元素(例如,变换系数)推断出第二组元素的扫描顺序。尽管在许多情况下推断的扫描顺序在第二组中可能效果很好,但是在给定的可用扫描顺序集合中,推断的扫描顺序可能不是最佳的扫描顺序,即另一扫描顺序可能会针对给定图像数据块提供更好的压缩性能(例如,代码化效率)。针对这个机会,一些实施方式可以对第二组元素的扫描顺序进行代码化和发送(例如,以比特流的形式),并使用第一组元素来确定扫描顺序预测器以及在对第二组的该扫描顺序进行代码化时所使用的上下文。
为了说明第二扫描顺序的这种预测代码化,请考虑以下示例。现在假设将变换系数块划分为两组,如图21A至图21B所示。令t∈{0,1,2,3}表示变量,该变量表示基于第一组的元素确定的第二组的扫描顺序(例如,使用关于图21A至图21B描述的方案),其中:
0指示默认右对角线扫描顺序;
1指示水平扫描顺序;
2指示垂直扫描顺序;以及
3指示左对角线扫描顺序。
计算cSum=c[1]+…+c[N-1-K]和rSum=r[1]+…+r[N-1-K],其中,K<N是非负常数。然后,如下确定t:
如果rSum>cSum且cSum==0,则设置t=1;
如果rSum>cSum且cSum>0,则设置t=3;
如果rSum<=cSum且rSum==0,则设置t=2;
否则,设置t=0。
接下来,给定t,对选择的扫描顺序s∈{0,1,2,3}进行编码或解码。在一个示例中,给定t,如下对s进行编码:
对指示是否s==t的二进制标记ScanOrderNotEqualToPredictor进行编码;
如果ScanOrderNotEqualToPredictor为0,则对s的编码终止;
否则,将s编码成{0,1,2,3}\{t}中的符号,其中,对于两个集合A和B,A\B指示:相对于A,B的补集。
相应地,给定t,如下从编码比特流解码s:
从比特流解码二进制标记ScanOrderNotEqualToPredictor;
如果ScanOrderNotEqualToPredictor为0,则设置s=t并且对s的解码终止;
否则,将s解码为{0,1,2,3}\{t}中的符号。
在上文中,将s编码和解码为{0,1,2,3}\{t}中的符号可以进一步使用t来确定上下文。在一个示例中,t本身可以用作上下文。在另一示例中,如果t==0或t==3,则f(t)=0;如果t==1或t==2,则f(t)=1,可以用作上下文。
可以将上述第二扫描顺序的预测代码化与图16的过程1600和图17的过程1700集成在一起。例如,可以将图16的过程1600修改为包括基于第一组的元素来确定扫描顺序预测;并且使用熵编码器,对是基于第二扫描顺序和扫描顺序预测的扫描顺序调节参数进行编码。该扫描顺序调节参数可以作为比特流的一部分输出。例如,可以修改图17的过程1700,使得基于第一组的元素来确定多组元素中的第二组的第二扫描顺序1730包括:基于第一组的元素来确定扫描顺序预测;使用熵解码器,从编码比特流解码数据,以获取扫描顺序调节参数;并且基于扫描顺序预测和扫描顺序调节参数来确定第二扫描顺序。
一些实施方式可以提供是否启用扫描顺序适应的嵌入式信令。在一些应用中,用于启用或禁用扫描顺序适应的灵活性是有利的。为了实施扫描顺序适应启用特征,可以使用信令方案来指示解码器启用或禁用扫描顺序适应。通常,这种信令方案涉及代码化二进制标记并向解码器发送二进制标记。例如,假设标记命名为EnableScanOrderSelection。然后,如果设置了EnableScanOrderSelection(即,等于1),则启用扫描顺序选择;如果清除了标记(即,等于0),则禁用扫描顺序选择。
代码化EnableScanOrderSelection将附加比特添加到代码化比特流,并影响压缩性能。在一些实施方式中,可以将本文中描述的过程(例如,图16的过程1600和图17的过程1700)修改为嵌入式信令,其指示是否启用扫描顺序适应(例如,如关于图15A至图15B、图21A至图21B所描述的或这些方案的组合)。例如,令absSum表示图像数据块的第一组元素中的所有量化系数(编码器和解码器均可用)的绝对值的总和。然后,absSum的奇偶性可用于发信号通知是否对该块的第二组元素启用扫描顺序适应。在一个示例中,如果absSum大于或等于阈值(例如,2),并且如果absSum是偶数,则如关于图21A至图21B所描述那样确定第二组的扫描顺序;否则(即,如果absSum小于阈值或如果absSum为奇数),则第二组的扫描顺序为默认扫描顺序(例如,右对角线或锯齿形)。
在以上示例中,从第一组元素(例如,变换系数)的值推断出是启用还是禁用扫描顺序适应,并且不需要编码比特流中的附加比特。这样,可以认为这种信息被嵌入在系数中,可能的代价是会增加失真。
用于启用上述第二扫描顺序的适应的嵌入式代码化可以与图16的过程1600和图17的过程1700集成在一起。例如,可以将图16的过程1600修改为包括:确定第一组的所有元素的大小的总和;检查该总和的奇偶性;以及调节第一组中的元素以改变该总和的奇偶性,以发出启用第二扫描顺序的使用的信号。例如,可以将图17的过程1700修改为包括:确定第一组的所有元素的大小的总和;检查该总和的奇偶性;以及,基于该总和的奇偶性,启用第二扫描顺序的使用。
在一些实施方式中,absSum的奇偶性可用于直接用信号通知扫描顺序。例如,如果absSum为偶数,则第二组的扫描顺序为默认扫描顺序(例如,右对角线或锯齿形);如果absSum为奇数,则扫描顺序为交替扫描顺序(例如,左对角线、水平或垂直)。另外,为了允许灵活地禁用这种信令方案,如果absSum小于指定阈值和/或图像数据块的第一组元素中的非零系数的数量小于阈值,则可以禁用基于absSum的扫描顺序推断。
为了在存在自适应扫描顺序的情况下促进频带推导,其中相同的扫描位置可以对应于不同块中的不同块位置,可以在频带推导操作中使用块位置(而不是扫描位置)。
可以通过基于块的第一组或子集中的元素来适应上下文来提高图像数据块的代码化效率。非零量化变换(例如,离散余弦变换)系数通常集中在DC位置周围的左上角。然而,这些非零系数的确切位置被熵代码化并发送到解码器。然而,如果变换块中的一些值已经被解码和已知,则有可能阐明这些非零系数在变换块中可能出现的位置,并利用这种知识来提高代码化效率。从适应扫描顺序的两级扫描的思想中汲取灵感,设计上下文模型以基于块(例如,量化变换系数的块)中的解码系数的子集进行适应。该自适应上下文模型设计可以是当前上下文模型(例如,用于系数代码化的AV1或VP9上下文模型)的改进。
图23是用于适应上下文以编码视频数据块的过程2300的示例的流程图。过程2300包括:将视频数据块分成多组元素2310;使用熵编码器,对多组元素中的第一组的元素进行编码2320;从多个组中选择下一组2322;基于先前组的元素来确定类别2330;基于类别,选择多组元素中的下一组的元素的一个或多个上下文2332;使用了该上下文使用熵编码器,对多组元素中的下一组的元素进行编码2340;以及继续(在2345中)处理多组中的任何剩余组,直到所有组已经被编码2340,然后将块的编码元素输出到比特流2350。例如,过程2300可以由熵编码器712来实施。例如,过程2300可以由发送站102来实施。例如,过程2300可以由诸如计算装置200等计算装置来实施。例如,过程2300可以由包括机器可读指令的软件程序实施,该机器可读指令可以存储在诸如存储器204等存储器或辅助存储214中,并且可以由诸如CPU202等处理器执行以使计算装置执行过程2300。例如,过程2300可以由诸如图4的编码器400等编码器来实施。例如,过程2300可以由图4的编码器400的熵编码阶段408来实施。
过程2300包括将视频数据块分成多组元素2310。这些组可能不相交。块可以包括元素的二维阵列(例如,4×4、8×8、16×16、32×32或任何其他方形或矩形块大小)。多组元素中的一组在块的结构内可以是连续的或不连续的。例如,块的元素可以是像素值(例如,发光度值)。例如,块的元素可以是量化变换系数。例如,块的元素可为残差块(例如,由帧内预测产生的残差块或由帧间预测产生的残差块)的量化变换系数。例如,块的元素可以是基于帧间预测的结果。例如,块可以是由帧间预测产生的残差块。例如,块的元素可以是基于帧内预测的结果。例如,块可以是由帧内预测产生的残差块。在一些实施方式中,块的元素分别表示量化变换系数的子块。在一些实施方式中,多个组包括两个组(例如,如图15A至图15B、图21A至图21B、图22A或图22B的示例所示)。例如,第一组可以包括块的第一行的元素和块的第一列的元素。在一些实施方式中,第一组包括在块的角部处形成三角形的元素,并且其中,三角形包括块的第一行的元素和块的第一列的元素(例如,如在图21A至图21B、图22A或图22B的示例中所示)。在一些实施方式中,第一组包括块的第一行的在三角形之外的元素和块的第一列的在三角形之外的元素(例如,如图22A或图22B的示例所示)。例如,可以基于块的大小来选择第一组的形状(例如,如关于表2所描述的)。例如,第二组可以包括第一组之外的块的所有剩余元素。在一些实施方式中,多个组包括多于两组元素。
过程2300包括:使用熵编码器,对多组元素中的第一组的元素进行编码2320。例如,可以使用兼容的熵解码器被配置为用来解码块的第一组的元素的默认或初始扫描顺序,对第一组元素进行编码。例如,第一扫描顺序可以是锯齿形顺序(例如,如图15A所示)或交替对角线顺序(例如,如图21A所示)。例如,熵编码器可以采用熵编码技术,诸如,例如可变长度代码化(VLC)、上下文自适应二进制算术代码化(CABAC)或上下文自适应(多符号)算术代码化。
过程2300包括从块的多组元素中选择下一组(例如,第二组)2322。
过程2300包括基于一个或多个先前组的元素(例如,基于第一组的元素)来确定类别2330。该类别可以用于选择用于对块的后续元素组(例如,第二组)中的一个或多个元素进行编码的上下文2332。例如,类别可以对应于块的元素值的空间分布和/或对应于针对块的一个或多个后续元素组可以使用的扫描顺序。在一些实施方式中,类别是水平、垂直、左对角线和右对角线之一(例如,如图21A所示)。例如,可以基于块的第一组元素内的非零元素(例如,残差块的量化变换系数)的分布来确定类别2330。例如,可以基于先前组的并集内的非零元素的分布来确定类别顺序2330。例如,可以实施图25A的过程2500来确定类别2330。例如,可以实施图25B的过程2550来确定类别2330。在一些实施方式中,过程2300包括基于类别来确定多组元素中的第二组的扫描顺序。在一些实施方式中,可以使用类似于图18A的过程1800的过程来确定类别2430。例如,确定类别2430可以包括:确定在块的第一行的一部分中的元素的大小的第一总和;确定在块的第一列的一部分中的元素的大小的第二总和;响应于第一总和为正且第二总和为零,将类别确定为与水平扫描顺序相对应的值。在一些实施方式中,可以使用类似于图18B的过程1840的过程来确定类别2430。例如,确定类别2430可以包括:确定在块的第一行的一部分中的非零元素的第一计数;确定在块的第一列的一部分中的非零元素的第二计数;响应于第一计数为零且第二计数为正,将类别确定为与垂直扫描顺序相对应的值。
例如,可以使用以下技术来确定类别2330:令u[i,j]表示大小为NxN的块(例如,变换块)中的块位置(i,j)处的系数,其中,i=0、...、N-1且j=0、...、N-1。假设,如图15A至图15B、图21A至图21B、图22A或图22B所示,该块被分成两组元素。则通过以下来确定类别2330:
1.)计算cSum=c[L]+…+c[N-1-K]和rSum=r[L]+…+r[N-1-K],其中,L<N和K<N是非负常数。
2.)则从{0,1,2,3}推出类别t。
如果rSum>cSum且cSum==0,则设置t=1;
如果rSum>cSum且cSum>0,则设置t=3;
如果rSum<=cSum且rSum==0,则设置t=2。
否则,设置t=0。
类别值可以对应于扫描顺序,并且可以用于针对块的第二组元素中的元素选择扫描顺序和上下文。例如,t=0可以对应于右对角线扫描顺序,t=1可以对应于水平扫描顺序,t=2可以对应于垂直扫描顺序,并且t=3可以对应于左对角线扫描顺序。
在一些实施方式中,可以根据上面的等式(13)来确定用于确定类别2330的rSum和cSum。例如,这些总和可以是各个元素的大小的总和或各个元素是否具有非零值的二进制指示符的计数。
过程2300包括:基于类别,选择多组元素中的第二组中的元素的上下文2332。在一些实施方式中,将利用基于类别所选择2332的单个上下文来编码第二组中的所有元素。在一些实施方式中,第二组中的各个元素具有用于解码的依赖于位置的上下文,这些上下文是基于类别选择2332的。例如,熵编码器可被配置为使用与匹配解码器共享的上下文表(例如,包括18或72个上下文)中的上下文。可以基于以第一组元素中的元素为基础所确定2330的类别来修改用于选择用于解码块的元素的上下文之一的该表的索引。现在假设要对u[i,j]或从u[i,j]推出的语法元素(如,u[i,j]==0是否成立)进行编码,可以通过使用现有上下文(例如,用于系数代码化的VP9上下文模型)来推导默认上下文Ctx[i,j]。然后,基于元素的默认上下文和已经为该块确定2330的类别t,来确定新的上下文。例如,可以根据以下选择上下文2332:Ctx_new[i,j]=f(Ctx[i,j],i,j,t),其中,f是满足以下约束的映射:对于至少一个三元组(x,i,j),f(x,i,j,t)≠f(x,i,j,t′);以及,不重复的对(t,t′),其中,0≤t<t′≤3。函数f的示例包括f(x,i,j,t)=x*4+t和f(x,i,j,t)=t*W+x,其中,W是Ctx[i,j]可能取的不同值的数量。注意,在上面,x可能取决于(i,j)。在一些实施方式中,为了减轻由于具有太多不同的上下文而引起的所谓的上下文稀释问题,所提出的设计可以对函数f施加以下约束:f(x,i,j,t=1)=f(x,j,i,t=2)和/或f(x,i,j,t=0)=f(x,j,i,t=3)。
过程2300包括:使用熵编码器使用上下文,对多组元素中的下一组(例如,第二组)的元素进行编码2340。例如,熵编码器可以采用熵编码技术,诸如,例如可变长度代码化(VLC)、上下文自适应二进制算术代码化(CABAC)或上下文自适应(多符号)算术代码化。在一些实施方式中,通过适应用于下一组的元素的扫描顺序,可以提高熵编码器的代码化效率。
在一些实施方式中,对下一组(例如,第二组)的元素进行编码2340使用已基于类别确定的扫描顺序。例如,过程2300可以包括:使用熵编码器使用该扫描顺序,对多组元素的第二组中的元素进行编码。例如,扫描顺序可以是水平扫描顺序、垂直扫描顺序、右对角线扫描顺序、左对角线扫描顺序、锯齿形扫描顺序等(例如,如图15A或图21A所示)。
如果(在2345中)块的多组元素中的最后一组尚未被编码,则选择下一组2322,并且对组的处理继续编码块的剩余元素。
当(在2345中)块的多组元素中的最后一组已被编码时,将块的编码元素输出到编码比特流2350。例如,可通过复用器718从熵编码器712输出编码后的元素,以将其包括在承载包括该块的视频信号的比特流720中。在一些实施方式中,比特流可以被存储(例如,在存储器中或在磁盘上)或(例如,经由网络通信链路)被发送。在一些实施方式中(未示出),当编码元素变得可用时,可以将它们输出到编码比特流。
图24是用于适应上下文以解码视频数据块的过程2400的示例的流程图。过程2400包括:将视频数据块分成多组元素2410;使用熵解码器,从编码比特流解码数据以获取多组元素中的第一组的元素2420;从多个组中选择下一组2422;基于先前组的元素来确定类别2430;基于类别,选择多组元素中的下一组的元素的一个或多个上下文2432;使用熵解码器使用了该上下文,从编码比特流解码数据以获取多组元素中的下一组的元素2440;以及继续(在2345中)处理多组中的任何剩余组,直到所有组已经被解码2440,然后输出块的解码元素进行处理以生成视频2450。例如,过程2400可以由熵解码器756来实施。例如,过程2400可以由接收站106来实施。例如,过程2400可以由诸如计算装置200等计算装置来实施。例如,过程2400可以由包括机器可读指令的软件程序实施,该机器可读指令可以存储在诸如存储器204等存储器或辅助存储214中,并且可以由诸如CPU 202等处理器执行以使计算装置执行过程2400。例如,过程2400可以由诸如图5的解码器500等解码器来实施。例如,过程2400可以由图5的解码器500的熵解码阶段502来实施。
过程2400包括将视频数据块分成多组元素2410。这些组可能不相交。块可以包括元素的二维阵列(例如,4×4、8×8、16×16、32×32或任何其他方形或矩形块大小)。多组元素中的一组在块的结构内可以是连续的或不连续的。例如,块的元素可以是像素值(例如,发光度值)。例如,块的元素可以是量化变换系数。例如,块的元素可为残差块(例如,由帧内预测产生的残差块或由帧间预测产生的残差块)的量化变换系数。例如,块的元素可以基于帧间预测的结果。例如,块可以是由帧间预测产生的残差块。例如,块的元素可以是基于帧内预测的结果。例如,块可以是由帧内预测产生的残差块。在一些实施方式中,块的元素分别表示量化变换系数的子块。在一些实施方式中,多个组包括两个组(例如,如图15A至图15B、图21A至图21B、图22A或图22B的示例所示)。例如,第一组可以包括块的第一行的元素和块的第一列的元素。在一些实施方式中,第一组包括在块的角部处形成三角形的元素,并且其中,三角形包括块的第一行的元素和块的第一列的元素(例如,如在图21A至图21B、图22A或图22B的示例中所示)。在一些实施方式中,第一组包括块的第一行的在三角形之外的元素和块的第一列的在三角形之外的元素(例如,如图22A或图22B的示例所示)。例如,可以基于块的大小来选择第一组的形状(例如,如关于表2所描述的)。例如,第二组可以包括第一组之外的块的所有剩余元素。在一些实施方式中,多个组包括多于两组元素。
过程2400包括:使用熵解码器,从编码比特流解码数据以获取多组元素中的第一组的元素2420。例如,可以使用兼容的熵编码器被配置为用来编码块的第一组的元素的默认或初始扫描顺序,对第一组元素进行解码。例如,第一扫描顺序可以是锯齿形顺序(例如,如图15A所示)或交替对角线顺序(例如,如图21A所示)。例如,熵解码器可以采用熵解码技术,诸如,例如可变长度代码化(VLC)、上下文自适应二进制算术代码化(CABAC)或上下文自适应(多符号)算术代码化。
过程2400包括从块的多组元素中选择下一组(例如,第二组)2422。
过程2400包括基于一个或多个先前组的元素(例如,基于第一组的元素)来确定类别2430。该类别可以用于选择用于对块的后续元素组(例如,第二组)中的一个或多个元素进行解码的上下文2432。例如,类别可以对应于块的元素值的空间分布和/或对应于针对块的一个或多个后续元素组可以使用的扫描顺序。在一些实施方式中,类别是水平、垂直、左对角线和右对角线之一(例如,如图21A所示)。例如,可以基于块的第一组元素内的非零元素(例如,残差块的量化变换系数)的分布来确定类别2430。例如,可以基于先前组的并集内的非零元素的分布来确定类别顺序2430。例如,可以执行图25A的过程2500来确定类别2430。例如,可以执行图25B的过程2550来确定类别2430。在一些实施方式中,过程2400包括基于类别来确定多组元素中的第二组的扫描顺序。在一些实施方式中,可以使用类似于图18A的过程1800的过程来确定类别2430。例如,确定类别2430可以包括:确定在块的第一行的一部分中的元素的大小的第一总和;确定在块的第一列的一部分中的元素的大小的第二总和;响应于第一总和为正且第二总和为零,将类别确定为与水平扫描顺序相对应的值。在一些实施方式中,可以使用类似于图18B的过程1840的过程来确定类别2430。例如,确定类别2430可以包括:确定在块的第一行的一部分中的非零元素的第一计数;确定在块的第一列的一部分中的非零元素的第二计数;响应于第一计数为零且第二计数为正,将类别确定为与垂直扫描顺序相对应的值。
例如,可以使用以下技术来确定类别2430:令u[i,j]表示大小为NxN的块(例如,变换块)中的块位置(i,j)处的系数,其中,i=0、...、N-1且j=0、...、N-1。假设,如图15A至图15B、图21A至图21B、图22A或图22B所示,该块被分成两组元素。则,可以通过以下方法确定类别2430:
3.)计算cSum=c[L]+…+c[N-1-K]和rSum=r[L]+…+r[N-1-K],其中,L<N和K<N是非负常数。
4.)则从{0,1,2,3}推出类别t。
如果rSum>cSum且cSum==0,则设置t=1;
如果rSum>cSum且cSum>0,则设置t=3;
如果rSum<=cSum且rSum==0,则设置t=2。
否则,设置t=0。
类别值可以对应于扫描顺序,并且可以用于针对块的第二组元素中的元素选择扫描顺序和上下文。例如,t=0可以对应于右对角线扫描顺序,t=1可以对应于水平扫描顺序,t=2可以对应于垂直扫描顺序,并且t=3可以对应于左对角线扫描顺序。
在一些实施方式中,可以根据上面的等式(13)来确定用于确定类别2430的rSum和cSum。例如,这些总和可以是各个元素的大小的总和或各个元素是否具有非零值的二进制指示符的计数。
过程2400包括:基于类别,选择多组元素中的第二组中的元素的上下文2432。在一些实施方式中,将利用基于类别所选择2432的单个上下文来解码第二组中的所有元素。在一些实施方式中,第二组中的各个元素具有用于解码的依赖于位置的上下文,这些上下文是基于类别选择2432的。例如,熵解码器可被配置为使用与匹配编码器共享的上下文表(例如,包括18或72个上下文)中的上下文。可以基于以第一组元素中的元素为基础所确定2430的类别,来修改用于选择用于解码块的元素的上下文之一的该表的索引。现在假设要对u[i,j]或从u[i,j]推出的语法元素(如,u[i,j]==0是否成立)进行解码,可以通过使用现有上下文(例如,用于系数编码的VP9上下文模型)来推导默认上下文Ctx[i,j]。然后,基于元素的默认上下文和已经针对该块确定2430的类别t,来确定新的上下文。例如,可以根据以下选择上下文2432:Ctx_new[i,j]=f(Ctx[i,j],i,j,t),其中,f是满足以下约束的映射:对于至少一个三元组(x,i,j),f(x,i,j,t)≠f(x,i,j,t′);以及,不重复的对(t,t′),其中,0≤t<t′≤3。函数f的示例包括f(x,i,j,t)=x*4+t和f(x,i,j,t)=t*W+x,其中,W是Ctx[i,j]可能取的不同值的数量。注意,在上面,x可能取决于(i,j)。在一些实施方式中,为了减轻由于具有太多不同的上下文而引起的所谓的上下文稀释问题,所提出的设计可以对函数f施加以下约束:f(x,i,j,t=1)=f(x,j,i,t=2)和/或f(x,i,j,t=0)=f(x,j,i,t=3)。
过程2400包括:使用熵解码器使用了该上下文,从编码比特流解码数据以获取多组元素中的下一组(例如,第二组)的元素2440。例如,熵解码器可以采用熵解码技术,诸如,例如可变长度代码化(VLC)、上下文自适应二进制算术代码化(CABAC)或上下文自适应(多符号)算术代码化。在一些实施方式中,通过适应用于下一组的元素的扫描顺序,可以提高熵解码器的代码化效率。
在一些实施方式中,对下一组(例如,第二组)的元素进行解码2440使用已基于类别所确定的扫描顺序。例如,过程2400可以包括:使用熵解码器,从编码比特流解码数据,以使用扫描顺序获取多组元素中的第二组的元素。例如,扫描顺序可以是水平扫描顺序、垂直扫描顺序、右对角线扫描顺序、左对角线扫描顺序、锯齿形扫描顺序等(例如,如图15A或图21A所示)。
如果(在2445中)块的多组元素中的最后一组尚未被解码,则选择下一组2422,并且对组的处理继续解码块的剩余元素。
当(在2445中)块的多组元素中的最后一组已被解码时,输出块的解码元素进行处理以生成视频2450。例如,解码的元素可以通过逆量化/变换760从熵解码器756输出2450,并用于生成形成视频的一部分的重构块764。在一些实施方式中,所得到的视频可以被存储(例如,在存储器204或辅助存储214中),(例如,经由网络通信链路)被发送或被显示(例如,在用户界面中,诸如在屏幕或投影仪上)。例如,过程2400可包括显示部分地基于块的解码元素而生成的视频(例如,块的元素为残差块的量化变换系数的情况)。
图25A是用于基于图像数据块的元素的子集来确定块的类别的过程2500的示例的流程图。过程2500包括:确定在第一组的位于块的主对角线下方且在块的反对角线处或上方的部分中的元素的大小的第一总和2510;确定在第一组的位于块的主对角线上方且在块的反对角线处或上方的部分中的元素的大小的第二总和2512;以及基于第一总和和第二总和,确定类别2520。相同的过程2500可以用于确定编码器和兼容解码器中的类别。例如,过程2500可以由熵编码器712或熵解码器756来实施。例如,过程2500可以由发送站102或接收站106来实施。例如,过程2500可以由诸如计算装置200等计算装置来实施。例如,过程2500可以由包括机器可读指令的软件程序实施,该机器可读指令可以存储在诸如存储器204等存储器或辅助存储214中,并且可以由诸如CPU 202等处理器执行以使计算装置执行过程2500。例如,过程2500可以由诸如图5的解码器500等解码器来实施。例如,过程2500可以由诸如图4的编码器400等编码器来实施。例如,过程2500可以由诸如图4的编码器400的熵编码阶段408来实施。例如,过程2500可以由图5的解码器500的熵解码阶段502来实施。
例如,可以根据等式(13),将在第一组的位于块的主对角线下方且在块的反对角线处或上方的部分中的元素的大小的第一总和确定为cSum 2510。例如,可以根据等式(13),将在第一组的位于块的主对角线上方且在块的反对角线处或上方的部分中的元素的大小的第二总和确定为rSum 2512。
过程2500包括基于第一总和和第二总和来确定类别2520。例如,可以通过将第一总和与第二总和相互进行比较和/或与零进行比较来确定类别。例如,可以根据以下来确定2570类别t:
如果Sum_2>Sum_1且Sum_1==0,则设置t=1;
如果Sum_2>Sum_1且Sum_1>0,则设置t=3;
如果Sum_2<=Sum_1且Sum_2==0,则设置t=2。
否则,设置t=0。
图25B是用于基于图像数据块的元素的子集来确定块的类别的过程2550的示例的流程图。过程2550包括:确定在第一组的位于块的主对角线下方且在块的反对角线处或上方的部分中的非零元素的第一计数2560;确定在第一组的位于块的主对角线上方且在块的反对角线处或上方的部分中的非零元素的第二计数2562;以及基于第一计数和第二计数,确定类别2570。相同的过程2500可以用于确定编码器和兼容解码器中的类别。例如,过程2500可以由熵编码器712或熵解码器756来实施。例如,过程2500可以由发送站102或接收站106来实施。例如,过程2500可以由诸如计算装置200等计算装置来实施。例如,过程2500可以由包括机器可读指令的软件程序实施,该机器可读指令可以存储在诸如存储器204等存储器或辅助存储214中,并且可以由诸如CPU 202等处理器执行以使计算装置执行过程2500。例如,过程2500可以由诸如图5的解码器500等解码器来实施。例如,过程2500可以由诸如图4的编码器400等编码器来实施。例如,过程2500可以由诸如图4的编码器400的熵编码阶段408来实施。例如,过程2500可以由图5的解码器500的熵解码阶段502来实施。
例如,可以根据等式(13),将在第一组的位于块的主对角线下方且在块的反对角线处或上方的部分中的非零元素的第一计数确定为cSum 2560。例如,可以根据等式(13),将在第一组的位于块的主对角线上方且在块的反对角线处或上方的部分中的非零元素的第二计数确定为rSum 2562。
过程2550包括基于第一计数和第二计数来确定类别2570。例如,可以通过将第一计数与第二计数相互进行比较和/或与零进行比较来确定类别。例如,可以根据以下确定2570类别t:
如果Count_2>Count_1且Count_1==0,则设置t=1;
如果Count_2>Count_1且Count_1>0,则设置t=3;
如果Count_2<=Count_1且Count_2==0,则设置t=2。
否则,设置t=0。
上面描述的编码和解码方面说明了一些编码和解码技术。然而,应当理解,编码和解码(如在权利要求中使用的那些术语)可以表示对数据的压缩、解压缩、变换或任何其他处理或改变。
词语“示例”或“实施方式”在本文中用来表示充当示例、实例或说明。本文作为“示例”或者“实施方式”描述的任何方面或者设计不必理解为比其他方面或者设计更优选或有利。相反,词语“示例”或“实施方式”的使用旨在以具体方式呈现构思。如本申请中所使用的,术语“或”旨在表示包括性的“或”而不是排他性的“或”。即,除非另有说明或从上下文可以清楚地看出,“X包括A或B”旨在表示任何自然的包含性排列。也就是说,如果X包括A;X包括B;或X包括A和B,则在任何上述情况下均满足“X包括A或B”。另外,在本申请和所附权利要求书中使用的冠词“一”和“一个”通常应被解释为意指“一个或多个”,除非另有说明或从上下文清楚地指向单数形式。此外,贯穿全文,除非如此描述,否则术语“实施方式”或者“一种实施方式”并不旨在表示相同的实施例或实施方式。
发送站102和/或接收站106的实施方式(以及存储在其上和/或由其执行(包括由编码器400和解码器500执行)的算法、方法、指令等)可以用硬件、软件、或其任何组合来实施。硬件可以包括:例如,计算机、知识产权(IP)内核、专用集成电路(ASIC)、可编程逻辑阵列、光学处理器、可编程逻辑控制器、微代码、微控制器、服务器、微处理器、数字信号处理器或任何其他合适的电路。在权利要求中,术语“处理器”应被理解为单独地或组合地包括任何前述硬件。术语“信号”和“数据”可互换使用。此外,发送站102和接收站106的部分不必一定要以相同的方式实施。
此外,在一个方面中,例如,可以使用具有计算机程序的计算机或处理器来实施发送站102或接收站106,该计算机程序在被执行时执行本文描述的各种方法、算法和/或指令中的任何一种。另外或可替代地,例如,可以利用专用计算机/处理器,其可以包含用于执行本文描述的任何方法、算法或指令的其他硬件。
例如,发送站102和接收站106可以在视频会议系统中的计算机上实施。可替代地,发送站102可以在服务器上实施,而接收站106可以在与服务器分离的装置(例如手持通信装置)上实施。在这种情况下,发送站102可以使用编码器400将内容编码成编码视频信号,并且将编码视频信号发送到通信装置。继而,通信装置然后可以使用解码器500对编码视频信号进行解码。可替代地,通信装置可以对本地存储在通信装置上的内容进行解码,例如,不是由发送站102发送的内容。其他发送站102和接收站106实施方案也是可用的。例如,接收站106可以是大体上固定的个人计算机,而不是便携式通信装置,和/或包括编码器400的装置也可以包括解码器500。
此外,本公开的全部或部分实施方式可以采取可从例如有形计算机可用或计算机可读介质访问的计算机程序产品的形式。计算机可用或计算机可读介质可以是例如可以有形地包含、存储、通信或传输程序以供任何处理器使用或与其结合使用的任何装置。介质可以是例如电子、磁性、光学、电磁或半导体装置。也可以使用其他合适的介质。
已经描述了上述实施例、实施方式和方面,以便容易地理解本公开并且不限制本公开。相反,本公开旨在覆盖包括在所附权利要求的范围内的各种修改和等效布置,该范围应被赋予最广泛的解释,以涵盖法律允许的所有此类修改和等效结构。

Claims (20)

1.一种用于解码视频的系统,包括:
存储器;以及
处理器,其中,所述存储器存储能够由所述处理器执行的指令以使所述系统:
使用熵解码器,从编码比特流解码数据以获取多组元素中的第一组元素中的元素,其中所述元素是基于所述编码比特流重构视频数据的变换系数的块的变换系数或变换系数的所述块的变换系数的子块;
基于所述第一组中的所述元素来确定类别值,所述类别值对应于所述第一组中的非零元素的分布;
基于所述类别值,针对所述多组元素中的第二组的元素选择上下文;以及
使用所述熵解码器并且使用所述上下文,从所述编码比特流解码数据以获取所述多组元素中的所述第二组的所述元素。
2.根据权利要求1所述的系统,其中,所述第一组包括所述块的第一行的元素和所述块的第一列的元素。
3.根据权利要求1所述的系统,其中,所述第一组包括在所述块的角部处形成三角形的元素,以及其中,所述三角形包括所述块的第一行的元素和所述块的第一列的元素。
4.根据权利要求3所述的系统,其中,所述第一组包括所述块的所述第一行的、在所述三角形之外的元素和所述块的所述第一列的、在所述三角形之外的元素。
5.根据权利要求1所述的系统,其中,所述第二组包括所述块的、在所述第一组之外的所有剩余元素。
6.根据权利要求1所述的系统,其中,所述存储器存储能够由所述处理器执行的指令以使所述系统:
基于所述类别值,确定所述多组元素中的所述第二组的扫描顺序;以及
使用所述熵解码器,从所述编码比特流解码数据以使用所述扫描顺序获取所述多组元素中的所述第二组中的所述元素。
7.根据权利要求1所述的系统,其中,所述类别值对应于以下中的一个:水平、垂直、左对角线和右对角线。
8.根据权利要求1至7中任一项所述的系统,其中,用于基于所述第一组的所述元素来确定所述类别值的指令包括能够由所述处理器执行的指令以使所述系统:
确定在所述第一组的、位于所述块的主对角线下方且在所述块的反对角线处或上方的部分中的非零元素的第一计数;
确定在所述第一组的、位于所述块的所述主对角线上方且在所述块的所述反对角线处或上方的部分中的非零元素的第二计数;以及
基于所述第一计数和所述第二计数来确定所述类别值。
9.根据权利要求1至7中任一项所述的系统,其中,用于基于所述第一组的所述元素来确定所述类别值的指令包括能够由所述处理器执行的指令以使所述系统:
确定在所述第一组的、位于所述块的主对角线下方且在所述块的反对角线处或上方的部分中的元素的大小的第一总和;
确定在所述第一组的、位于所述块的所述主对角线上方且在所述块的所述反对角线处或上方的部分中的元素的大小的第二总和;以及
基于所述第一总和和所述第二总和来确定所述类别值。
10.根据权利要求1至7中任一项所述的系统,其中,用于基于所述第一组的所述元素来确定所述类别值的指令包括能够由所述处理器执行的指令以使所述系统:
确定在所述第一组中以及所述块的第一行的部分中的非零元素的第一计数;
确定在所述第一组中以及所述块的第一列的部分中的非零元素的第二计数;以及
响应于所述第一计数为零且所述第二计数为正,确定所述类别值是对应于垂直扫描顺序的值。
11.根据权利要求1至7中任一项所述的系统,其中,用于基于所述第一组的所述元素来确定所述类别值的指令包括能够由所述处理器执行的指令以使所述系统:
确定在所述第一组中以及所述块的第一行的部分中的元素的大小的第一总和;
确定在所述第一组中以及所述块的第一列的部分中的元素的大小的第二总和;以及
响应于所述第一总和为正且所述第二总和为零,确定所述类别值是对应于水平扫描顺序的值。
12.一种用于解码视频的方法,包括:
使用熵解码器,从编码比特流解码数据以获取多组元素中的第一组元素中的元素,其中所述元素是基于所述编码比特流重构视频数据的变换系数的块的变换系数或变换系数的所述块的变换系数的子块;
基于所述第一组中的所述元素来确定类别值,所述类别值对应于所述第一组中的非零元素的分布;
基于所述类别值,针对所述多组元素中的第二组的元素选择上下文;以及
使用所述熵解码器并且使用所述上下文,从所述编码比特流解码数据以获取所述多组元素中的所述第二组的所述元素。
13.根据权利要求12所述的方法,进一步包括:
显示部分地基于所述块的解码元素生成的视频。
14.一种用于编码视频的系统,包括:
存储器;以及
处理器,其中,所述存储器存储能够由所述处理器执行的指令以使所述系统:
将视频数据块分成多组元素,其中所述视频数据块的元素是变换系数或变换系数的子块;
使用熵编码器,编码所述多组元素中的第一组的元素;
基于所述第一组中的所述元素来确定类别值,所述类别值对应于所述第一组中的非零元素的分布;
基于所述类别值,针对所述多组元素中的第二组的元素选择上下文;以及
使用所述熵编码器并且使用所述上下文,编码所述多组元素中的所述第二组的所述元素。
15.根据权利要求14所述的系统,其中,所述第一组包括所述视频数据块的第一行的元素和所述视频数据块的第一列的元素。
16.根据权利要求14所述的系统,其中,所述第一组包括在所述视频数据块的角部处形成三角形的元素,以及其中,所述三角形包括所述视频数据块的第一行的元素和所述视频数据块的第一列的元素。
17.根据权利要求16所述的系统,其中,所述第一组包括所述视频数据块的所述第一行的、在所述三角形之外的元素和所述视频数据块的所述第一列的、在所述三角形之外的元素。
18.根据权利要求14所述的系统,其中,所述第二组包括所述视频数据块的、在所述第一组之外的所有剩余元素。
19.根据权利要求14至18中任一项所述的系统,其中,所述存储器存储能够由所述处理器执行的指令以使所述系统:
基于所述类别值,确定所述多组元素中的所述第二组的扫描顺序;以及
使用所述熵编码器并且使用所述扫描顺序,编码所述多组元素中的所述第二组的元素。
20.一种用于编码视频的方法,包括:
将视频数据块分成多组元素;
使用熵编码器,编码所述多组元素中的第一组的元素,其中所述视频数据块的元素是变换系数或变换系数的子块;
基于所述第一组中的所述元素来确定类别值,所述类别值对应于所述第一组中的非零元素的分布;
基于所述类别值,针对所述多组元素中的第二组的元素选择上下文;以及
使用所述熵编码器并且使用所述上下文,编码所述多组元素中的所述第二组的所述元素。
CN201880036773.1A 2017-08-04 2018-05-01 用于对图像数据的块进行熵代码化的扫描顺序自适应 Active CN110800299B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/668,745 US11477492B2 (en) 2017-08-04 2017-08-04 Adaptation for entropy coding of blocks of image data
US15/668,745 2017-08-04
PCT/US2018/030346 WO2019027523A1 (en) 2017-08-04 2018-05-01 SCANNING ORDER ADAPTATION FOR ENTROPY ENCODING IMAGE DATA BLOCKS

Publications (2)

Publication Number Publication Date
CN110800299A CN110800299A (zh) 2020-02-14
CN110800299B true CN110800299B (zh) 2023-08-04

Family

ID=62165738

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880036773.1A Active CN110800299B (zh) 2017-08-04 2018-05-01 用于对图像数据的块进行熵代码化的扫描顺序自适应

Country Status (4)

Country Link
US (3) US11477492B2 (zh)
EP (1) EP3662665A1 (zh)
CN (1) CN110800299B (zh)
WO (1) WO2019027523A1 (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10623738B2 (en) * 2017-04-06 2020-04-14 Futurewei Technologies, Inc. Noise suppression filter
EP3763125B1 (en) * 2018-03-06 2024-04-03 Telefonaktiebolaget Lm Ericsson (Publ) Quantized coefficient coding
KR102030384B1 (ko) 2018-06-19 2019-11-08 광운대학교 산학협력단 잔차 계수 부호화/복호화 방법 및 장치
US11350093B2 (en) 2018-06-11 2022-05-31 Hanwha Techwin Co., Ltd. Residual coefficient encoding/decoding method and device
KR20200083316A (ko) * 2018-12-28 2020-07-08 한국전자통신연구원 영상 부호화/복호화 방법, 장치 및 비트스트림을 저장한 기록 매체
US11212555B2 (en) * 2019-06-19 2021-12-28 Tencent America LLC Method of reducing context models for entropy coding of transform coefficient significant flag
CN114365492B (zh) * 2019-08-24 2023-12-15 北京字节跳动网络技术有限公司 残差系数编解码
CN114303380B (zh) * 2019-08-27 2024-04-09 华为技术有限公司 用于几何划分标志的索引的cabac译码的编码器、解码器及对应方法
US11363295B2 (en) * 2019-11-27 2022-06-14 Tencent America LLC Method and system for intra mode coding

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102939755A (zh) * 2010-04-13 2013-02-20 弗兰霍菲尔运输应用研究公司 显著性图和变换系数块的编码
CN103733622A (zh) * 2011-06-16 2014-04-16 弗劳恩霍夫应用研究促进协会 熵编码中的上下文初始化

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5500678A (en) 1994-03-18 1996-03-19 At&T Corp. Optimized scanning of transform coefficients in video coding
KR0178198B1 (ko) 1995-03-28 1999-05-01 배순훈 영상 신호 부호화 장치
US8311119B2 (en) 2004-12-31 2012-11-13 Microsoft Corporation Adaptive coefficient scan order
KR101298640B1 (ko) * 2006-09-22 2013-09-16 삼성전자주식회사 전송 스트림 패킷을 전송하는 방법 및 장치
JP4901955B2 (ja) 2007-03-30 2012-03-21 富士通株式会社 基地局装置、通信システム及びコンピュータプログラム
EP2182732A1 (en) * 2008-10-28 2010-05-05 Panasonic Corporation Switching between scans in image coding
US20120236931A1 (en) * 2010-12-23 2012-09-20 Qualcomm Incorporated Transform coefficient scan
US20120230418A1 (en) * 2011-03-08 2012-09-13 Qualcomm Incorporated Coding of transform coefficients for video coding
US9445093B2 (en) * 2011-06-29 2016-09-13 Qualcomm Incorporated Multiple zone scanning order for video coding
US20130054162A1 (en) * 2011-08-31 2013-02-28 Tollgrade Communications, Inc. Methods and apparatus for determining conditions of power lines
US9386306B2 (en) * 2012-08-15 2016-07-05 Qualcomm Incorporated Enhancement layer scan order derivation for scalable video coding
CN104272735B (zh) * 2013-01-16 2018-04-13 黑莓有限公司 针对视频的上下文自适应二进制熵编码的变换系数编码
US9961358B2 (en) * 2013-04-09 2018-05-01 Mediatek Singapore Pte. Ltd. Method and apparatus for non-square intra mode coding
US9215464B2 (en) * 2013-09-19 2015-12-15 Blackberry Limited Coding position data for the last non-zero transform coefficient in a coefficient group
CN104683801B (zh) * 2013-11-29 2018-06-05 华为技术有限公司 图像压缩方法和装置
CN107211146A (zh) * 2014-11-21 2017-09-26 Vid拓展公司 一维变换模式和系数扫描顺序
US10362310B2 (en) * 2015-10-21 2019-07-23 Qualcomm Incorporated Entropy coding techniques for display stream compression (DSC) of non-4:4:4 chroma sub-sampling
US10440399B2 (en) * 2015-11-13 2019-10-08 Qualcomm Incorporated Coding sign information of video data
EP3412028B1 (en) * 2016-02-12 2024-04-03 Huawei Technologies Co., Ltd. Method and apparatus for scan order selection
US9712830B1 (en) * 2016-09-15 2017-07-18 Dropbox, Inc. Techniques for image recompression

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102939755A (zh) * 2010-04-13 2013-02-20 弗兰霍菲尔运输应用研究公司 显著性图和变换系数块的编码
CN103733622A (zh) * 2011-06-16 2014-04-16 弗劳恩霍夫应用研究促进协会 熵编码中的上下文初始化

Also Published As

Publication number Publication date
US20190045226A1 (en) 2019-02-07
WO2019027523A1 (en) 2019-02-07
US11477493B2 (en) 2022-10-18
US11477492B2 (en) 2022-10-18
CN110800299A (zh) 2020-02-14
US20190045225A1 (en) 2019-02-07
US20230039465A1 (en) 2023-02-09
EP3662665A1 (en) 2020-06-10

Similar Documents

Publication Publication Date Title
CN110800299B (zh) 用于对图像数据的块进行熵代码化的扫描顺序自适应
CN110679148B (zh) 用于代码化视频数据块的方法和装置
US10735767B2 (en) Transform coefficient coding using level maps
CN115379241B (zh) 用于对最后有效系数标志进行代码化的方法和设备
CN110169068B (zh) Dc系数符号代码化方案
CN113491129B (zh) 图像/视频压缩中的自适应滤波器帧内预测模式
US11284111B2 (en) Techniques and apparatus for inter-channel prediction and transform for point-cloud attribute coding
US11558619B2 (en) Adaptation of scan order for entropy coding
US10630974B2 (en) Coding of intra-prediction modes
CN110741636B (zh) 用于视频编码的变换块级扫描顺序选择
EP3813372A1 (en) Sparse matrix representation using a boundary of non-zero coefficients
EP3673653B1 (en) Embedding information about token tree traversal
CN110710219B (zh) 用于系数代码化的上下文推导的方法和设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant