视频编解码方法和装置、计算机设备与流程

文档序号:24347336发布日期:2021-03-19 12:31阅读:85来源:国知局
优先权信息本申请要求于2019年9月19日递交的、申请号为62/902,938的美国临时申请、于2019年9月20日递交的、申请号为62/903,572的美国临时申请、以及于2020年9月18日递交的、申请号为17/026,141的美国申请的优先权,其全部内容通过引用并入本申请中。本申请涉及视频编解码
技术领域
:,更具体地,涉及视频编解码方法和装置、计算机设备和存储介质。
背景技术
::视频编码专家组itu-tvceg(q6/16)和动态图像专家组iso/iecmpeg(jtc1/sc29/wg11)在2013年(版本1)、2014年(版本2)、2015(第3版)和2016(第4版)发布了h.265/hevc(高效视频编码)标准。从那时起,他们一直在研究对未来视频编码技术的标准化的潜在需求,该未来视频编码技术的压缩能力将大大超越hevc。2017年10月,他们发出了针对能力超越hevc的视频压缩提案的联合征集(cfp)。截至2018年2月15日,分别提交了针对标准动态范围(sdr)的共22个cfp回复、针对高动态范围(hdr)的12个cfp回复和针对360种视频类别的12个cfp回复。在2018年4月,在122运动图像专家组(mpeg)/第十次联合视频专家组(jvet)会议上,对所有收到的cfp回复都进行了评估。经过仔细评估,jvet正式启动了超越hevc的下一代视频编码的标准化过程,即所谓的通用视频编码(vvc)。在vvc标准(草案6)中,可以在空间域或变换域中对像素块进行熵编码。当在空间域中对像素块进行熵编码时,即,在变换跳过模式下,变换系数的残差编码中的上下文已编码的二进制文件(bin)的数量为:每个具有变换跳过的变换系数2个bin(或2个二进制符号),每个不具有变换跳过的变换系数1.75个bin(或1.75个二进制符号)。为了提高cabac(context-basedadaptivebinaryarithmeticcoding,基于上下文的自适应二进制算术编码)编码算法的吞吐量,希望在具有和不具有变换跳过且不牺牲编码效率的情况下,都将变换系数的残差编码中的上下文已编码的bin的数量保持为1.75。所公开的方法和系统旨在解决上述一个或多个问题以及其它问题。技术实现要素:本公开的实施例涉及视频编解码方法和装置、计算机设备和存储介质,旨在提出一种技术方案,使得无论是否具有变换跳过,都能将变换系数的残差编码中的上下文已编码的bin的数量保持为1.75,而且不牺牲编码效率。根据本公开的实施例,提供了一种视频编解码方法。该方法包括:获取视频信号;将所述视频信号划分成多个编码块;根据每个编码块生成残差编码块;将所述残差编码块分割成多个子块,并且每个子块包括多个像素;在所述残差编码块中的每个像素处,对残差符号级别进行熵编码;以及输出包含熵编码残差符号级别的比特流。其中,所述在所述残差编码块中的每个像素处,对残差符号级别进行熵编码包括:基于所述像素的至少三个相邻像素的上下文信息,在变换跳过模式下对所述像素的残差符号级别进行上下文建模,所述像素的至少三个相邻像素包括:在所述残差编码块中,所述像素左侧的第一像素、上方的第二像素和左上对角线的第三像素。根据本公开的实施例,提供了一种视频编解码装置。该装置包括:获取模块,用于获取视频信号;划分模块,用于将所述视频信号划分成多个编码块;生成模块,用于根据每个编码块生成残差编码块;分割模块,用于将所述残差编码块分割成多个子块,并且每个子块包括多个像素;熵编码模块,用于在所述残差编码块中的每个像素处,对残差符号级别进行熵编码;以及输出模块,用于输出包含熵编码残差符号级别的比特流。其中,所述熵编码模块用于:基于所述像素的至少三个相邻像素的上下文信息,在变换跳过模式下对所述像素的残差符号级别进行上下文建模,所述像素的至少三个相邻像素包括:在所述残差编码块中,所述像素左侧的第一像素、上方的第二像素和左上对角线的第三像素。根据本公开的实施例,提供了一种非易失性计算机可读存储介质,用于存储计算机程序指令,当所述计算机程序指令被用于视频编码/解码的计算机执行时,使得所述计算机执行所述的视频编解码方法。本公开的实施例还提供了一种计算机设备,包括一个或多个处理器和一个或多个存储器,所述一个或多个存储器中存储有至少一条程序指令,所述至少一条程序指令由所述一个或多个处理器加载并执行,以实现上述实施例所述的视频编解码方法。通过本公开的实施例,在具有和不具有变换跳过且不牺牲编码效率的情况下,都能将变换系数的残差编码中的上下文已编码的bin的数量保持为1.75,从而提高提高cabac编码的吞吐量。根据本公开的说明书,权利要求书和附图,本领域技术人员可以理解本公开的其他方面。附图说明图1示出了本公开一些实施例的运行环境的示意图;图2示出了根据本公开实施例的电子设备的结构示意图;图3示出了根据本公开实施例的计算机系统的结构示意图;图4示出了根据本公开实施例的视频编码器的结构示意图;图5示出了根据本公开实施例的图4所示的熵编码器的结构示意图;图6示出了根据本公开实施例的示例性视频编解码方法的流程图;图7示出了根据本公开实施例的在变换跳过模式下对变换系数标志进行熵编码的上下文建模的流程图;图8示出了根据本公开实施例的在变换跳过模式下的局部模板的示意图;图9示出了根据本公开实施例的在变换跳过模式下对变换系数有效标志进行上下文索引计算的示意图;图10示出了根据本公开实施例的在变换跳过模式下对变换系数符号标志进行上下文索引计算的示意图。具体实施方式下面结合附图描述本公开实施例的技术方案。在所有附图中,将尽可能使用相同的附图标号表示相同或相似的部件。很显然,所描述的实施例仅仅是本公开的一些实施例,而非全部实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的其它实施例,都属于本公开的保护范围。下面首先解释本公开中使用的一些术语。通用视频编码(vvc,草案6):vvc是联合视频专家组(jvet)为接替hevc(也称为itu-th.265)而开发的视频解码标准。vvc规定了一种视频编码技术,其压缩能力大大超越了此类标准的前几代技术,并且具有很高的通用性,可以在广泛的应用中有效使用。vcc标准通过引用并入本文。基于上下文的自适应二进制算术编码(cabac):cabac是hevc和vvc标准中使用的一种熵编码形式。通用视频编码测试模型(vtm,草案6):vtm提供vcc算法的编码器侧说明和测试过程。bjontegaarddeltarate(bdr或bd-rate):bdr是一种评估编码效率的方法,该方法通过测量视频信号的相同峰值信噪比(psnr)的比特率变化来评估编码效率。图1示出了本公开的一些实施例的运行环境100。如图1所示,运行环境100可以包括具有视频功能的各种设备。例如,运行环境100可以包括终端设备102、相机设备104和物联网(iot)设备106。运行环境100还可以包括其他类型的设备。运行环境100还可以包括服务器122、人类视觉应用124、机器视觉应用126、以及将各种设备连接到服务器122的通信链路140。用户130可以使用、访问或控制各种设备中的一个或多个。终端设备102可以包括任何用户终端,例如个人数字助理(pda)、移动电话、智能电话、集成消息收发设备(imd)、平板计算机、笔记本计算机、台式计算机、以及其他计算设备。相机设备104可以包括任何图像或视频捕获设备,例如数码相机、摄像机、安全摄像机、车载摄像机、立体摄像机等。iot设备106可以包括具有摄像功能的任何类型的iot设备,例如数字门铃、自动驾驶传感器、数字语音助手、智能扬声器、智能家电以及任何工业或商业物联网系统。各种设备102、104和106中的任何一个在被移动的个人携带时可以是静止的或移动的,并且还可以作为运输的一部分或以运输模式来放置,该运输模式包括汽车、卡车、出租车、公共汽车、火车、轮船、飞机、自行车、摩托车或任何类似的合适运输模式。图2示出了用于实现各种设备102、104和/或106中的任何一个的电子设备。如图2所示,电子设备200可以包括硬件处理器202、存储器204、读卡器206、显示器208、键盘210、射频(rf)接口212、基带214、天线216、编码器222、解码器224、照相机226、扬声器232和麦克风234等。图2所示的组件是说明性的,可以省略某些组件,并且可以添加其他组件。可以提供处理器202以控制电子设备200。处理器202可以通过至少一个总线或其他电连接连接到其他组件,以向其他组件发送数据和从其他组件接收数据。处理器202可以包括至少一个处理核,例如四核处理器或八核处理器。处理器202可以使用数字信号处理(dsp)、现场可编程门阵列(fpga)、专用集成电路(asic)和可编程逻辑阵列(pla)的至少一种硬件形式来实现。处理器202还可以包括主处理器和协处理器。主处理器可以是中央处理单元(cpu),协处理器可以是图形处理单元(gpu),该图形处理单元被配置为负责渲染和绘制显示屏幕需要显示的内容。在一些实施例中,处理器202可以进一步包括人工智能(ai)处理器。ai处理器被配置为处理与机器学习有关的计算操作。存储器204可以包括诸如高速随机存取存储器和非易失性存储器的一个或多个计算机可读存储介质,例如,一个或多个磁盘存储设备或闪存设备。存储器204既可以存储图像和音频数据形式的数据,还可以存储用于处理器202的指令。读卡器206可以包括任何类型的便携式卡接口,例如智能卡接口、通信卡接口(例如,近场通信(nfc)卡)、用户识别模块(sim)卡、或其他用于提供用户信息并适于为用户130的认证和授权提供认证信息的卡接口。此外,显示器208可以是适于显示图像或视频的任何合适的显示技术。例如,显示器208可以包括液晶显示器(lcd)屏幕、有机发光二极管(oled)屏幕等,并且可以是触摸屏。键盘210可以包括物理或虚拟键盘,以便用户130输入信息,并且还可以包括其他类型的输入/输出设备。扬声器232和麦克风234可以用于为电子设备200输入和输出音频。rf接口212(连同天线216)可以包括用于接收和发送rf信号的rf电路。rf接口212可以将电信号转换成用于发送的电磁信号,或者将接收到的电磁信号转换成用于接收的电信号。rf接口212可以通过至少一种无线通信协议与其他电子设备通信。无线通信协议可以包括城域网、各代移动通信网络(2g、3g、4g和5g)、无线局域网(lan)和/或无线保真(wifi)网络。在一些实施例中,rf接口212还可以包括与近场通信(nfc)相关的电路。基带214可以包括电路,用于处理去往和来自rf接口212的信号。此外,照相机226可以包括用于收集图像或视频的任何类型的成像或视频捕获设备。当电子设备200是由用户130携带的便携式设备时,照相机226可以包括前置摄像头和后置摄像头。前置摄像头可以设置在电子设备的前面板上,后置摄像头可以设置在电子设备的后表面上。在一些实施例中,至少有两个后置摄像头,每个摄像头都是主摄像头、景深摄像头、广角摄像头和长焦摄像头中的任何一个,以便通过融合主摄像头与景深摄像头来实现背景模糊功能,并且通过融合主摄像头与广角摄像头来实现全景拍摄和虚拟现实(vr)拍摄功能或其他融合拍摄功能。在一些实施例中,照相机226可以进一步包括闪光灯。编码器222和解码器224可以被称为电子设备的编解码器电路,该编解码器电路适于执行音频和/或视频数据的编码和解码,或者辅助处理器202执行编码和解码。如图2所示,电子设备200可以包括类似于无线通信系统的移动终端或用户设备的结构。然而,还可以包括可能需要编码和解码、或者需要编码、或者需要解码视频或图像的任何电子设备或装置。返回图1,电子设备200(即,各种设备102、104和/或106中的任何一个或多个)可以捕获或收集各种数据(例如,音频数据、环境/操作数据、图像数据和/或视频数据),并通过通信链路140将数据发送到服务器122。电子设备200可以在将数据发送到服务器122之前处理或预处理数据,或者可以将未处理的数据发送到服务器122。通信链路140可以包括任何适当类型的通信网络,并且可以包括有线或无线网络的任意组合,该有线或无线网络包括但不限于无线蜂窝电话网络、无线局域网(wlan)、蓝牙个人域网、以太网局域网、令牌环局域网、广域网和因特网。通信链路140还可以包括用于语音/数据通信的私有或公共云计算平台。当包括因特网或其他类型的网络时,与因特网的连接可以包括长距离无线连接、短距离无线连接、以及包括电话线、电缆线、电源线和类似通信路径的各种有线连接。服务器122可以包括配置在服务器集群中或分布在不同位置的任何类型的服务器计算机系统或多个计算机系统。服务器122还可以包括云计算平台上的云服务器。图3示出了实现服务器122的某些方面的示例性计算机系统。如图3所示,计算机系统300可以包括处理器302、存储介质304、监视器306、通信模块308、数据库310和外围设备312。可以省略某些设备并且可以包括其他设备。处理器302可以包括任何适当的一个或多个处理器。此外,处理器302可以包括用于多线程或并行处理的多个核。存储介质304可以包括诸如只读存储器(rom)、随机存取存储器(ram)、闪存模块、以及可擦除和可擦写存储器之类的存储器模块,以及诸如cd-rom、u盘和硬盘等的大容量存储设备。存储介质304可以存储计算机程序指令,该计算机程序指令在由处理器302执行时,用于实现各种过程。例如,当所述计算机程序指令被用于编码/解码的计算机执行时,使得所述计算机执行本公开实施例提供的视频编解码方法。此外,外围设备312可以包括i/o设备,例如键盘和鼠标。通信模块308可以包括网络设备,用于通过通信网络建立连接。数据库310可以包括至少一个数据库,用于存储某些数据,并用于对所存储的数据执行某些操作,例如数据库搜索。返回图2,编码器222可以实现具有变换跳过的变换系数标志的熵编码的上下文建模方法。在这种情况下,也可以认为电子设备200实现了具有变换跳过的变换系数标志的熵编码的上下文建模方法。也就是说,编码器222可以实现为电子设备200中的硬件电路,或者可以实现为由电子设备200执行的软件程序,或者实现为硬件电路和软件程序的组合。图4示出了根据本公开实施例的示例性视频编码器。如图4所示,视频编码器400包括块分区单元410、减法单元420、预测单元430、变换/量化单元440、逆变换/逆量化单元450、加法单元460、内环路(in-loop)滤波器470和熵编码器480。输入视频(也称为视频信号)被输入到视频编码器400,作为响应,视频编码器400输出比特流。输入视频包括多个图片帧。块分区单元410将每个图片帧划分成一系列编码树单元(ctu)。对于具有三个样本阵列的图片帧,一个ctu由n×n亮度样本块以及两个对应的m×m色度样本块组成。块分区单元410进一步通过使用嵌套的多类型树将ctu分割为方形或矩形编码单元(cu),以适应各种局部特性,其中,该嵌套的多类型树使用表示为编码树的二进制和三进制分割(splits)分段(segmentation)结构。在编码树的叶cu级别上做出是否使用图片间(时间)或图片内(空间)预测对图片区域进行编码的决定。将预测过程应用于叶cu以获得残差块,可以将变换应用于该残差块,并且将相关信息以cu为单位发送到对应的解码器。通过应用预测过程获得残差块之后,可以通过另一树结构将叶cu划分成变换单元(tu),以用于具有或不具有变换的残差编码。预测单元430支持帧内预测、帧间预测以及组合的帧间和帧内预测。为了捕获自然视频中呈现的任意边缘方向,除了平面(planar)(表面拟合)帧内预测模式和dc(平面(flat))帧内预测模式之外,预测单元430还支持65个方向(或角度)帧内预测模式。预测单元430还支持基于运动参数的帧间预测样本生成,该运动参数包括运动矢量、参考图片索引和参考图片列表使用索引以及vvc编码特征所需的附加信息。预测单元430还支持跳过模式,其中以跳过模式编码的cu与一个pu相关联,并且不具有有效(significant)残差系数,不具有已编码运动矢量增量或参考图片索引。预测单元430还支持合并模式,其中当前cu的运动参数是从相邻cu(包括空间和时间候选)以及附加调度获得的。合并模式可以应用于任何帧间预测的cu,而不仅仅适用于跳过模式。预测单元430还通过显式发送运动参数来支持合并模式的替代方案,其中运动矢量、每个参考图片列表的相应参考图片索引和参考图片列表使用标志、以及其他所需信息通过每个cu显式地发信号通知。减法单元420将cu和pu之间的差(或残差)输出到变换/量化单元440。变换/量化单元440支持大小最大为64×64的大块大小变换(largeblock-sizetransform)。对于大小等于64的变换块,将高频变换系数归零,从而仅保留低频系数。当以变换跳过模式变换大块时,变换/量化单元440使用整个块而不将任何值归零。变换/量化单元440还支持用于核心变换的多变换选择(mts)。为了控制mts,变换/量化单元440在序列参数集(sps)级别针对帧内和帧间预测使用单独的启用标志。当在sps级别上启用mts时,发信号通知cu级别标志,以指示是否应用mts。变换/量化单元440还支持在vvc标准(草案6)中描述的其他变换特征,例如低频不可分离变换(lfnst)和子块变换(sbt)。此外,变换/量化单元440最多支持63个量化参数(qp)。变换/量化单元440还通过在sps中发信号通知亮度-色度映射关系来支持灵活的亮度-色度qp映射。变换/量化单元440还支持cu级别qp自适应(adaption),其中,可以分别发信号通知亮度和色度分量的增量qp值。变换/量化单元440还支持vvc标准(草案6)中描述的其他量化特征,例如依赖性量化(dependentquantization)。变换/量化单元440还支持色度残差的联合编码,其由tu级别标志指示。vvc标准(草案6)将cabac描述为熵编码算法。熵编码器480包括cabac编码引擎,以对变换/量化单元440输出的语法元素进行编码。cabac编码引擎支持诸如golomb-rice编码算法的算术编码算法。熵编码器480支持用于变换块和变换跳过块的单独的残差编码结构。熵编码器480使用非重叠的系数组(cg或子块)对编码块的变换系数进行编码,并且每个cg包含可变大小的编码块的变换系数。系数组的大小仅基于变换块大小来选择,与信道类型无关。cg的大小可以包括1×16、2×8、8×2、2×4、4×2和16×1。每个编码块内的cg和每个cg内的变换系数根据预定的扫描顺序进行编码。所述编码块是通过对输入视频(即视频信号)进行划分而获得的。在一个实施例中,变换单元中的每个编码块被分割成多个子块,并且每个子块包括多个像素。该多个子块是4×4或2×2子块。预测单元430基于每个像素的前一符号级别预测符号级别,例如,预测每个像素的残差符号级别。变换/量化单元440对每个像素的残差符号级别进行变换和量化。熵编码器480对变换/量化单元440输出的每个像素的变换和量化后的残差符号级别进行熵编码,最后输出比特流。具体地,熵编码器480在所述残差编码块中的每个像素处,对残差符号级别进行熵编码,并输出包含熵编码残差符号级别的比特流。在算术编码算法中,根据之前的已编码信息,为每个语法元素动态地选择概率模型。逆变换/逆量化单元450反向执行变换/量化单元440执行的量化过程和变换过程,并将输出馈送到加法单元460,以重建图片帧。加法单元460还将预测单元430的输出作为另一输入。重建的图片帧将由内环路滤波器470进行滤波。内环路滤波器470包括解块滤波器、采样自适应偏移(sao)滤波器和自适应环路滤波器(alf),它们以此顺序进行级联。内环路滤波器470的输出被输入到预测单元430。图5示出了图4所示的熵编码器480的结构框图。如图5所示,熵编码器480包括第一选择器510、二值化器(binarizer)520、第二选择器530、上下文建模器540、常规编码引擎550、旁路编码引擎560和第三选择器570。熵编码器480的输入是至少一个语法元素,并且熵编码器480的输出是比特流。在一个实施例中,熵编码器480运行算术编码算法,更具体地,运行上下文自适应二进制算术编码算法(cabac)。第一选择器510确定输入到熵编码器480中的语法元素是以旁路模式还是以常规编码模式进行处理。在旁路模式中,语法元素绕过二值化器520。在常规编码模式中,语法元素由二值化器520处理,以映射到二进制符号或二进制文件(bin)。第二选择器530确定是由常规编码引擎550还是由旁路编码引擎560对语法元素进行编码。在旁路模式中,语法元素由旁路编码引擎560进行编码。在常规编码模式中,语法元素由常规编码引擎550进行编码。在由常规编码引擎550对语法元素进行编码之前,上下文建模器540基于某些上下文估计每个非旁路或常规编码的二进制符号(或bin)的概率。然后,常规编码引擎550根据估计的概率将bin压缩为比特。在一些实施例中,由二值化器520执行的二值化(binarization)过程可以包括第k阶截断莱斯(trk,k-thordertruncatedrice)、第k阶指数哥伦布(egk,k-thorderexp-golomb(egk))、固定长度(fl)二值化及其组合。本公开不限制二值化器520所采用的二值化过程。在一些实施例中,可以基于固定选择、语法元素的类型、语法元素的二进制表示中的bin位置(或bin索引)来选择概率模型,或者可以根据相关辅助信息(上下文信息)从两个或更多个概率模型中自适应地选择概率模型。相关辅助信息可以包括cu、pu和tu的空间相邻单元、分量、深度或大小,或tu内的位置。选择概率模型也称为上下文建模。概率模型的参数是自适应的。换句话说,概率模型的参数在熵编码器和对应的解码器之间以反向自适应和同步方式、在逐个符号或逐个bin的基础上自适应二进制符号或bin的统计变化。自适应过程也称为概率估计。概率模型通常通过唯一的上下文索引来寻址。上下文索引可以通过固定分配来确定,或者由上下文推导逻辑来计算。本公开的实施例提供了一种用于电子设备的视频编解码方法。图6示出了根据本公开实施例的示例性视频编解码方法的流程图。如图6所示,该视频编解码方法包括如下步骤:步骤s610,获取视频信号。步骤s620,将视频信号划分成多个编码块。步骤s630,根据每个编码块生成残差编码块。通常,残差编码块也称为变换块。步骤s640,将残差编码块分割成多个子块,并且每个子块包括多个像素。步骤s650,在残差编码块中的每个像素处,对残差符号级别进行熵编码。步骤s660,输出包含熵编码残差符号级别的比特流。该视频编解码方法的工作原理类似于图4中的视频编码器400,因此省略了该视频编解码方法的详细描述。图7示出了根据本公开实施例的在变换跳过模式下对变换系数标志进行熵编码的上下文建模的流程图。其具体示出了在残差编码块中的每个像素处,对残差符号级别进行熵编码的过程。在实施例中,在每个像素处,基于该像素的至少三个相邻像素的上下文信息,在变换跳过模式下对像素的残差符号级别(例如变换系数)进行上下文建模。该像素的至少三个相邻像素包括:在残差编码块中,该像素左侧的第一像素、上方的第二像素和左上对角线的第三像素。在变换跳过模式下,分别根据预定的扫描顺序对当前编码块内的子块和每个子块的变换系数有效标志进行编码。类似地,分别根据预定的扫描顺序对每个子块内的像素和每个像素的变换系数有效标志进行编码。对于不具有任何非零变换系数的子块,对应的变换系数有效标志在子块级别进行编码。对于具有至少一个非零变换系数的子块,将子块中每个像素的变换系数的编码分成三个扫描过程,分别对应步骤s710~s730。步骤s710,在第一扫描过程中,扫描当前变换块中每个子块中的每个像素,并使用所述像素的至少三个相邻像素的上下文信息,在每个扫描位置处以所述变换跳过模式对第一扫描过程标志(firstscanningpassflags)进行编码。第一扫描过程标志包括变换系数有效标志sig_coeff_flag、变换系数符号标志coeff_sign_flag、变换系数奇偶性标志par_level_flag和绝对级别大于1标志abs_level_gtx_flag[0]。具体地,所述使用所述像素的至少三个相邻像素的上下文信息,在每个扫描位置处以所述变换跳过模式对第一扫描过程标志进行编码包括:使用所述像素的至少三个相邻像素的上下文信息,在每个扫描位置处以所述变换跳过模式对所述变换系数有效标志、所述变换系数符号标志、所述变换系数奇偶性标志和所述绝对级别大于1标志中的一个或多个进行编码。sig_coeff_flag[xc][yc]也称为变换系数有效标志,它为位于当前变换块内的当前位置(xc,yc)处的变换系数指示当前位置(xc,yc)处的对应变换系数的值是否为非零。如果变换系数的值为非零,则sig_coeff_flag[xc][yc]的值为1,否则sig_coeff_flag[xc][yc]的值为0。coeff_sign_flag也称为变换系数符号标志,它指示每个扫描位置处的变换系数的非零值的符号是否为负。如果符号为负,则coeff_sign_flag的值为1,否则coeff_sign_flag的值为0。abs_level_gtx_flag[0]也称为绝对级别大于1标志,它指示每个扫描位置处的变换系数的绝对值是否大于1。如果每个扫描位置处的变换系数的绝对值大于1,则abs_level_gtx_flag[0]的值为1,否则abs_level_gtx_flag[0]的值为0。par_level_flag也称为变换系数级别奇偶性标志,它指示每个扫描位置处的变换系数的值的奇偶性。步骤s720,在第二扫描过程中,扫描所述当前变换块中每个子块中的每个像素,并使用在前面扫描过程中已编码的所述第一扫描过程标志,在每个扫描位置处对第二扫描过程标志进行编码。第二扫描通过标志包括绝对级别大于x标志阵列abs_level_gtx_flag[i],其中对于i=1,2,3,4,x=(i<<1)+1。具体地,所述使用在前一扫描过程中已编码的所述第一扫描过程标志,在每个扫描位置处对第二扫描过程标志进行编码包括:使用在所述第一扫描过程中已编码的变换系数有效标志、变换系数符号标志、变换系数奇偶性标志和绝对级别大于1标志中的一个或多个,在每个扫描位置处对绝对级别大于x标志阵列进行编码。abs_level_gtx_flag[i]也称为绝对级别大于x标志阵列,它指示每个扫描位置处的变换系数的绝对值是否大于x,其中对于i=1,2,3,4,x=(i<<1)+1。换句话说,abs_level_gtx_flag[i]指示分别对应于i=1,2,3,4,在每个扫描位置处的变换系数的绝对值是否大于3、5、7和9。标志par_level_flag和abs_level_gtx_flag[i]的组合唯一地标识变换系数的绝对值在两个连续的正整数(不超过9)之间的位置。步骤s730,在第三扫描过程中,扫描所述当前变换块中每个子块中的每个像素,并使用在前面扫描过程中已编码的所述第一扫描过程标志和所述第二扫描过程标志,在每个扫描位置处用哥伦布-莱斯(golomb-rice)码对所述变换系数的剩余绝对值abs_remainder进行编码。具体地,所述使用在前一扫描过程中已编码的所述第一扫描过程标志和所述第二扫描过程标志,在每个扫描位置处用哥伦布-莱斯码对所述变换系数的剩余绝对值abs_remainder进行编码包括:使用在所述第一扫描过程中已编码的变换系数有效标志、变换系数符号标志、变换系数奇偶性标志和绝对级别大于1标志、以及在所述第二扫描过程中已编码的绝对级别大于x标志阵列中的一个或多个,在每个扫描位置处用哥伦布-莱斯(golomb-rice)码对所述变换系数的剩余绝对值进行编码。此外,在第一扫描过程中对位于当前变换块内的像素位置(xc,yc)处的变换系数的sig_coeff_flag[xc][yc]进行编码包括以下过程。在一个实施例中,为了在变换跳过模式中利用相邻变换系数之间的相关性,在当前变换系数有效标志sig_coeff_flag[xc][yc]的上下文选择中,使用被图8所示的局部模板覆盖的先前已编码的变换系数有效标志,其中,用深灰色标记的位置指示当前变换系数位置(xc,yc),用浅灰色标记的位置指示该当前变换系数位置的三个相邻位置,在(xc-1,yc)处的称为leftsigflag,在(xc,yc-1)处的称为abovesigflag,在(xc-1,yc-1)处的称为diagonalsigflag。如果局部模板中变换系数有效标志的位置不在变换单元中,则将其设置为默认值零。具体地,leftsigflag、abovesigflag和thediagonalsigflag定义如下:leftsigflag=xc>0?sig_coeff_flag[xc-1][yc]:0(等式1);abovesigflag=yc>0?sig_coeff_flag[xc][yc-1]:0(等式2);diagonalsigflag=(xc>0&&yc>0)?sig_coeff_flag[xc-1][yc-1]:0(等式3)。在一个实施例中,sig_coeff_flag[xc][yc]的上下文基于diagonalsigflag以及leftsigflag和abovesigflag的变换系数有效标志的总和(统称为locnumsig),其定义如下:locnumsig=leftsigflag+abovesigflag(等式4)。在对当前系数的sig_coeff_flag[xc][yc]进行编码时,将上下文模型索引ctxidx设置为等于ctxinc和ctxidxoffset的总和,如下所述:ctxinc=60+((locnumsig==1)?2*diagonalsigflag+locnumsig:locnumsig)(等式5),ctxidx=ctxinc+ctxidxoffset(等式6),其中,在vvc草案6的表9-4中,根据初始类型(inittype)或初始化类型(initializationtype)的当前值,指示用于残差编码的变量ctxidxoffset,如表1所示。表1:在初始化过程中对于每个initializationtype,ctxidx和残差编码语法元素的关联注意:ctxtable列中的表号是指vvc标准(草案6)中的表号。在一个实施例中,将元组(leftsigflag,abovesigflag,diagonalsigflag)的所有可能值分类成p个类,其中p是整数,且3<p≤8。为每个类分配唯一的上下文增量偏移数ctxincoffset,使得0≤ctxincoffset<p。上下文索引增量ctxinc导出如下:ctxinc=k+ctxincoffset(等式7),其中,k是不具有变换跳过的变换系数有效标志的上下文的数量。将上下文模型索引ctxidx设置为等于ctxinc和ctxidxoffset的总和,如下所示:ctxidx=ctxinc+ctxidxoffset(等式8)。在一个实施例中,定义为ctxinc-k的上下文增量偏移的值ctxincoffset也可以由表2确定,其中k等于60。如表2所示,将元组(leftsigflag,abovesigflag,diagonalsigflag)的所有可能结果分成四类:leftsigflag和abovesigflag都是0。leftsigflag和abovesigflag都是1。leftsigflag和abovesigflag不同,并且diagonalsigflag是0。leftsigflag和abovesigflag不同,并且diagonalsigflag是1。为每个类分配一个介于0到3之间的唯一ctxincoffset数。表2:基于(leftsigflag,abovesigflag,diagonalsigflag)选择ctxincoffset在一个实施例中,用于在变换跳过模式下对sig_coeff_flag[xc][yc]进行编码的上下文模型的数量是4,且在变换跳过变换系数的残差编码中的上下文已编码的bin的数量包括但不限于每个变换系数2个bin和每个变换系数1.75个bin。在一个实施例中,由maxccbs=2*(1<<log2tbwidth)*(1<<log2tbheight)确定的、在变换跳过变换系数的残差编码中的上下文已编码的bin的数量是每个变换系数2个bin。表3示出了具有变换跳过的完整残差编码的语法。表3:具有变换跳过的残差编码的语法ctxincoffset的值可以通过表查找、某些等式、某些逻辑或其组合来确定。本公开不限制确定ctxincoffset的方法。标志coded_sub_block_flag[xs][ys]为当前变换块内的位置(xs,ys)处的子块指示以下内容,其中子块是16个变换系数级别的(4×4)阵列。如果coded_sub_block_flag[xs][ys]等于0,则推断位置(xs,ys)处的子块的16个变换系数级别等于0。否则coded_sub_block_flag[xs][ys]等于1,并且以下内容适用。如果(xs,ys)等于(0,0)并且(lastsignificantcoeffx,lastsignificantcoeffy)不等于(0,0),则位置(xs,ys)处的子块的16个sig_coeff_flag语法元素中的至少一个存在。否则,位置(xs,ys)处的子块的16个变换系数级别中的至少一个具有非零值。当coded_sub_block_flag[xs][ys]不存在时,推断其等于1。标志sig_coeff_flag[xc][yc]为当前变换块内的变换系数位置(xc,yc)指示位置(xc,yc)处的对应变换系数级别是否为非零。如果sig_coeff_flag[xc][yc]等于0,则将位置(xc,yc)处的变换系数级别设置为0。如果sig_coeff_flag[xc][yc]等于1,则位置(xc,yc)处的变换系数级别具有非零值。当sig_coeff_flag[xc][yc]不存在时,可推断如下。如果(xc,yc)是扫描顺序中的最后有效位置(lastsignificantcoeffx,lastsignificantcoeffy)或以下所有条件都为真,则推断sig_coeff_flag[xc][yc]等于1。如果(xc&((1<<log2sbw)-1),yc&((1<<log2sbh)-1))等于(0,0),则infersbdcsigcoeffflag等于1,并且coded_sub_block_flag[xs][ys]等于1。否则,推断sig_coeff_flag[xc][yc]等于0。标志coeff_sign_flag指示每个扫描位置处的变换系数级别的符号,如下所述。如果coeff_sign_flag等于0,则对应的变换系数级别具有正值。如果coeff_sign_flag等于1,则对应的变换系数级别具有负值。当coeff_sign_flag不存在时,推断其等于0。coeffsignlevel[xc][yc]的值指示位置(xc,yc)处的变换系数级的符号,如下所述。如果coeffsignlevel[xc][yc]等于0,则对应的变换系数级别等于零。如果coeffsignlevel[xc][yc]等于1,则对应的变换系数级别具有正值。如果coeffsignlevel[xc][yc]等于-1,则对应的变换系数级别具有负值。标志par_level_flag指示每个扫描位置处的变换系数级别的奇偶性。当par_level_flag不存在时,推断其等于0。标志阵列abs_level_gtx_flag[j]指示每个扫描位置处的变换系数级别的绝对值是否大于(j<<1)+1。当abs_level_gtx_flag[j]不存在时,推断其等于0。参数abs_remainder是在每个扫描位置处用golomb-rice码进行编码的变换系数级别的剩余绝对值。当abs_remainder不存在时,推断其等于0。比特流一致性的要求是,应当对abs_remainder的值进行限制,使得transcoefflevel[x0][y0][cidx][xc][yc]的对应值在coeffmin到coeffmax的范围内(包括coeffmin和coeffmax)。在一个实施例中,将具有变换跳过的变换系数有效标志的编码应用于变换单元的一个亮度变换单元。在一个实施例中,将具有变换跳过的变换系数有效标志的编码应用于变换单元的一个亮度变换单元和一个或两个色度变换单元。此外,在第一扫描过程中对位于当前变换块内的像素位置(xc,yc)处的变换系数的coeff_sign_flag[xc][yc]进行编码包括以下过程。coeff_sign_flag[xc][yc]由coeffsignlevel[xc][yc]的值确定,coeffsignlevel[xc][yc]的值指示位置(xc,yc)处的变换系数的值的符号,如下所述。如果coeffsignlevel[xc][yc]的值等于0,则对应的变换系数的值等于零。如果coeffsignlevel[xc][yc]的值等于1,则对应的变换系数具有正值。如果coeffsignlevel[xc][yc]的值等于-1,则对应的变换系数具有负值。在一个实施例中,为了在变换跳过模式中利用相邻变换系数之间的相关性,在当前系数符号标志sig_coeff_flag[xc][yc]的上下文选择中,使用被图8所示的局部模板覆盖的先前已编码的系数符号级别coeffsignlevel[xc][yc],其中,用深灰色标记的位置指示当前变换系数位置(xc,yc),用浅灰色标记的位置指示该当前变换系数位置的三个相邻符号变量,在(xc–1,yc)处的称为leftsigflag,在(xc,yc-1)处的称为abovesigflag,在(xc–1,yc–1)处的称为diagonalsigflag。如果局部模板中符号级别的位置不在变换单元中,则将其设置为默认值零。具体地,leftsign、abovesign和diagsign定义如下:leftsign=(xc==0)?0:coeffsignlevel[xc-1][yc](等式9)。abovesign=(yc==0)?0:coeffsignlevel[xc][yc-1](等式10)。diagsign=(xc==0||yc==0)?0:coeffsignlevel[xc-1][yc-1](等式11)。在一个实施例中,coeff_sign_flag[xc][yc]的上下文索引是基于以下定义的diagsign、leftsign和uppersign来确定的。变量ctxinc导出如下。如果leftsign等于0且abovesign等于0,或者如果leftsign等于-abovesign,则适用以下条件:ctxincoffset=(diagsign==0)?0:((leftsign!=0)?3+(diagsign>=0):4-(diagsign>=0))(等式12).否则,如果leftsign大于或等于0且abovesign大于或等于0,则适用以下条件:ctxincoffset=diagsign>=0?1:3(等式13).否则,适用以下条件:ctxincoffset=diagsign<=0?2:4(等式14).然后,上下文索引增量ctxinc导出如下:ctxinc=ctxincoffset+(intra_bdpcm_flag==0?0:5)(等式15),其中,intra_bdpcm_flag等于1指示将bdpcm(模糊差分脉冲编码调制,blurreddifferentialpulsecodemodulation)应用于位置(x0,y0)处的当前亮度编码块,而intra_bdpcm_flag等于0指示不将bdpcm应用于位置(x0,y0)处的当前亮度编码块。将上下文模型索引ctxidx设置为等于ctxinc和ctxidxoffset的总和,如下所示:ctxidx=ctxinc+ctxidxoffset(等式16),其中,在vvc草案6的表9-4中,根据表1所示的inittype或初始化类型的当前值,指示用于残差编码的coeff_sign_flag[xc][yc]的变量ctxidxoffset。在一个实施例中,将元组(leftsign,abovesign,diagsign)的所有可能值分类成q个类,其中q是整数,且3<q≤27。为每个类分配唯一的上下文增量偏移数ctxincoffset,使得0≤ctxincoffset<q。上下文索引增量ctxinc导出如下:ctxinc=ctxincoffset+(intra_bdpcm_flag==0?0:q)t(等式17)。将上下文模型索引ctxidx设置为等于ctxinc和ctxidxoffset的总和,如下所示:ctxidx=ctxinc+ctxidxoffsett(等式18)。上下文增量偏移ctxincoffset是leftsign、abovesign和diagsign的函数。ctxincoffset的值可以通过表查找、某些等式、某些逻辑或其组合来确定。本公开不限制确定ctxincoffset的方法。在一个实施例中,ctxincoffset的值可以由表4确定。如表4所示,将元组(leftsign,abovesign,diagsign)的所有可能结果分成五类。为每个类分配一个介于0到4之间的唯一ctxincoffset数。表4:基于(leftsign,abovesign,diagsign)选择ctxincoffset在一个实施例中,ctxincoffset的值可以由表5确定。如表5所示,将该符号对(leftsign+abovesign)和diagsign的所有可能结果分成五类。为每个类分配一个介于0到4之间的唯一ctxincoffset数。表5:基于(leftsign+abovesign)和diagsign选择ctxincoffset在一个实施例中,ctxincoffset的值可以由表6确定。如表6所示,将元组(leftsign,abovesign,diagsign)的所有可能结果分成五类。为每个类分配一个介于0到4之间的唯一ctxincoffset数。表6:基于(leftsign+abovesign)和diagsign选择ctxincoffset在一个实施例中,用于在变换跳过模式下对coeff_sign_flag[xc][yc]进行编码的上下文模型的数量是10,且在变换跳过变换系数的残差编码中,常规变换模式中的上下文已编码的bin的数量包括但不限于每个变换系数1.75个bin。在一个实施例中,在变换跳过变换系数的残差编码中,如通过maxccbs=2*(1<<log2tbwidth)*(1<<log2tbheight)所确定的,常规变换模式中的上下文已编码的bin的数量是每个变换系数2个bin。表3示出了vvc草案6的完整残差编码的语法。在一个实施例中,将具有变换跳过的变换系数符号标志的编码应用于变换单元的一个亮度变换单元。在一个实施例中,将具有变换跳过的变换系数符号标志的编码应用于变换单元的一个亮度变换单元和一个或两个色度变换单元。通常,对于屏幕内容编码测试序列,当在vtm-6.0中将变换跳过变换系数的残差编码中的上下文已编码的bin的数量从每个系数2个bin变为1.75个bin时,在qp(37、32、27、22)进行测试时会观察到亮度bdr增加。具体地,对于ai、ra和ld配置,会观察到亮度bdr分别增加了0.26%、0.20%和-0.02%。当在vtm-6.0中实施优选的有效标志和符号标志的编解码方法时,对于ai、ra和ld配置,亮度bdr分别增加了-0.10%,-0.13%和-0.28%。因此,在不牺牲编码效率的情况下,将每个变换系数的上下文已编码的bin的数量从2变到1.75。本公开的实施例还提供了一种通用视频编码装置。该装置包括:获取模块,用于获取视频信号;划分模块,用于将所述视频信号划分成多个编码块;生成模块,用于根据每个编码块生成残差编码块;分割模块,用于将所述残差编码块分割成多个子块,并且每个子块包括多个像素;熵编码模块,用于在所述残差编码块中的每个像素处,对残差符号级别进行熵编码;以及输出模块,用于输出包含熵编码残差符号级别的比特流。其中,所述熵编码模块用于:基于所述像素的至少三个相邻像素的上下文信息,在变换跳过模式下对所述像素的残差符号级别进行上下文建模,所述像素的至少三个相邻像素包括:在所述残差编码块中,所述像素左侧的第一像素、上方的第二像素和左上对角线的第三像素。在本公开实施例中,所述熵编码模块用于:扫描当前变换块中每个子块中的每个像素,并使用所述像素的三个相邻像素的上下文信息,在每个扫描位置处以所述变换跳过模式对第一扫描过程标志进行编码;扫描所述当前变换块中每个子块中的每个像素,并使用在前一扫描过程中已编码的所述第一扫描过程标志,在每个扫描位置处对第二扫描过程标志进行编码;以及扫描所述当前变换块中每个子块中的每个像素,并使用在前一扫描过程中已编码的所述第一扫描过程标志和所述第二扫描过程标志,在每个扫描位置处用哥伦布-莱斯golomb-rice码对所述变换系数的剩余绝对值abs_remainder进行编码。本公开的实施例还提供了一种计算机设备,包括一个或多个处理器和一个或多个存储器,所述一个或多个存储器中存储有至少一条程序指令,所述至少一条程序指令由所述一个或多个处理器加载并执行,以实现上述各种实现方式中提供的视频编解码方法。本公开的实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各种实现方式中提供的视频编解码方法。在本公开实施例中,“多个”是指两个或两个以上。本公开实施例所提出的方法可以单独使用或以任何顺序组合使用。此外,每一个方法(或实施例)、编码器和解码器中都可以由处理电路(例如,至少一个处理器、或至少一个集成电路)来实现。在一个实施例中,该至少一个处理器执行存储在非易失性计算机可读存储介质中的程序。尽管通过说明书中的具体实施例描述了本公开的原理和实施方式,但是前面所述的实施例仅用于帮助理解本公开的方法及其核心思想。同时,本领域普通技术人员可以根据本公开的思想对具体的实施方式和应用范围进行修改。总之,说明书的内容不应解释为对本公开的限制。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1