具体实施方式
现在将详细参考示例性实施例,其示例在附图中示出。以下描述参照附图,除非另有说明,其中不同附图中的相同数字表示相同或相似的元件。在示例性实施例的以下描述中阐述的实施方式并不代表与本公开一致的所有实施方式。相反,它们仅是与如所附权利要求中所述的与本公开相关的方面一致的装置和方法的示例。下面更详细地描述本公开的特定方面。如果与通过引用并入的术语和/或定义相冲突的话,以本文提供的术语和定义为准。
ITU-T视频编码专家组(ITU-T VCEG)和ISO/IEC运动图像专家组(ISO/IEC MPEG)的联合视频专家小组(JVET)目前正在开发通用视频编码(VVC/H.266)标准。VVC标准旨在将其前身高效视频编码(HEVC/H.265)标准的压缩效率提高一倍。换句话说,VVC的目标是使用一半的带宽实现与HEVC/H.265相同的主观质量。
为了使用一半的带宽实现与HEVC/H.265相同的主观质量,JVET一直在使用联合探索模型(JEM)参考软件开发HEVC以外的技术。随着编码技术被纳入JEM,JEM实现了比HEVC更高的编码性能。
VVC标准是最近开发的,并且继续包括提供更好压缩性能的更多编码技术。VVC基于与HEVC、H.264/AVC、MPEG2、H.263等现代视频压缩标准中一直使用的混合视频编码系统。
视频是按时间顺序排列以存储视觉信息的一组静态图像(或“帧”)。可以使用视频采集设备(例如,相机)以时间顺序采集和存储这些图像,并且可以使用视频回放设备(例如,电视、计算机、智能手机、平板计算机、视频播放器、或任何具有显示功能的最终用户终端)显示时间序列中的此类图像。此外,在一些应用中,视频采集设备可以实时地将采集的视频发送到视频回放设备(例如,具有监视器的计算机),例如用于监视、会议或现场广播。
为了减少此类应用所需的存储空间和传输带宽,可以在存储和传输之前对视频进行压缩,并在显示之前进行解压缩。可以通过由处理器(例如,通用计算机的处理器)或专用硬件执行的软件来实现压缩和解压缩。用于压缩的模块通常被称为“编码器”,并且用于解压缩的模块通常被称为“解码器”。编码器和解码器可以统称为“编解码器”。编码器和解码器可以被实现为各种合适的硬件、软件、或其组合中的任何一种。例如,编码器和解码器的硬件实现可以包括电路,诸如一个或多个微处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、离散逻辑或其任何组合。编码器和解码器的软件实现可以包括固定在计算机可读介质中的程序代码、计算机可执行指令、固件或任何合适的计算机实现的算法或过程。视频压缩和解压缩可以通过各种算法或标准来实现,例如MPEG-1、MPEG-2、MPEG-4、H.26x系列等。在一些应用中,编解码器可以从第一编码标准解压缩视频,并且使用第二编码标准重新压缩解压缩的视频,在这种情况下,编解码器可以被称为“转码器”。
视频编码过程可以识别并保留可用于重建图像的有用信息,并忽略不重要的重建信息。如果忽略不重要的信息不能被完全重建,则这样的编码过程可以被称为“有损”。否则,它可以被称为“无损”。大多数编码过程都是有损的,这是为了减少所需的存储空间和传输带宽的权衡。
在许多情况下,被编码的图像(称为“当前图像”)的有用信息包括相对于参考图像(例如,先前编码和重建的图像)的变化。这样的变化可以包括像素的位置变化、亮度变化或颜色变化,其中位置变化是最受关注的。代表对象的一组像素的位置变化可以反映对象在参考图像和当前图像之间的运动。
不参考另一图像而编码的图像(即,它是自己的参考图像)被称为“I-图像”。使用先前图像作为参考图像编码的图像被称为“P-图像”,使用先前图像和将来图像作为参考图像编码的图像称为被称为“B图像”(参考是“双向”的)。
图1示出了根据本公开的一些实施例的示例视频序列100的结构。视频序列100可以是实况视频或已被采集和存档的视频。视频100可以是现实生活中的视频、电脑生成的视频(例如,计算机游戏视频)或二者组合(例如,具有增强现实效果的真实视频)。视频序列100可以从视频采集设备(例如,相机)、包含先前采集的视频档案(例如,存储在存储设备中的视频文件)或从视频内容提供商接收视频的视频馈送接口(例如,视频广播收发器)输入。
如图1所示,视频序列100可以包括沿时间线在时间上布置的一系列图像,包括图像102、104、106和108。图像102-106是连续的,在图像106和108之间有更多的图像。在图1中,图像102是I-图像,其参考图像是图像102本身。图像104是P-图像,其参考图像是图像102,如箭头所示。图像106是B图像,其参考图像是图像104和108,如箭头所示。在一些实施例中,图像的参考图像(例如,图像104)可以不紧接在图像之前或之后。例如,图像104的参考图像可以是图像102之前的图像。需要说明的是,图像102-106的参考图像仅仅是示例,本公开并不限定如图1所示的参考图像的实施例。
通常,由于编解码任务的计算复杂性,视频编解码器不会一次对整个图像进行编码或解码。相反,他们可以将图像分割成基本段,并逐段对图像段进行编码或解码。在本公开中,这样的基本段被称为基本处理单元(“BPU”)。例如,图1中的结构110示出了视频序列100的图像(例如,图像102-108中的任何图像)的示例结构。在结构110中,图像被划分为4×4基本处理单元,其边界被示出为虚线。在一些实施例中,基本处理单元可以在一些视频编码标准(例如,MPEG族、H.261、H.263或H.264/AVC)中被称为“宏块”,或者在一些其它视频编码标准(例如,H.265/HEVC或H.266/VVC)中被称为“编码树单元”(“CTU”)。基本处理单元可以在图像中具有可变的大小,例如128×128、64×64、32×32、16×16、4×8、16×32或任意形状和大小的像素。可以基于编码效率和要保持在基本处理单元中的细节水平的平衡来为图像选择基本处理单元的大小和形状。。
基本处理单元可以是逻辑单元,其可以包括存储在计算机存储器中(例如,在视频帧缓冲区中)的一组不同类型的视频数据。例如,彩色图像的基本处理单元可以包括表示消色差亮度信息的亮度分量(Y)、表示颜色信息的一个或多个色度分量(例如,Cb和Cr)以及相关联的语法元素,其中亮度和色度分量可以具有与基本处理单元的相同大小。在一些视频编码标准(例如,H.265/HEVC或H.266/VVC)中,亮度和色度分量可以被称为“编码树块”(“CTB”)。对基本处理单元执行的任何操作都可以对其亮度和色度分量中的每一个重复执行。
视频编码具有多个操作阶段,其示例如图2A-2B和图3A-3B所示。对于每个阶段,基本处理单元的大小对于处理仍然可能太大,因此可以进一步分为在本公开中称为“基本处理子单元”的段。在一些实施例中,基本处理子单元可以在一些视频编码标准(例如,MPEG族、H.261、H.263或H.264/AVC)中被称为“块”,或者作为一些其他视频编码标准(例如,H.265/HEVC或H.266/VVC)中的“编码单元”(“CU”)。基本处理子单元可以具有与基本处理单元相同的大小或具有比基本处理单元更小的大小。与基本处理单元类似,基本处理子单元也是逻辑单元,其可以包括存储在计算机存储器(例如,在视频帧缓冲区中)中的一组不同类型的视频数据(例如,Y、Cb、Cr和相关联的语法元素)。对基本处理子单元执行的任何操作都可以对其亮度和色度分量中的每一个重复执行。应该注意的是,可以根据处理需要将这种划分执行到进一步的级别。还应注意,不同阶段可以使用不同的方案来划分基本处理单元。
例如,在模式决策阶段(其示例在图2B中示出,编码器可以决定对基本处理单元使用什么预测模式(例如,帧内预测或帧间预测),该基本处理单元可能太大而无法做出这样的决定。编码器可以将基本处理单元划分成多个基本处理子单元(例如,如H.265/HEVC或H.266/VVC中的CU),并且决定每个单独的基本处理子单元的预测类型。
对于另一个示例,在预测阶段(其示例在图2A-2B中示出),编码器可以在基本处理子单元(例如,CU)的级别上执行预测操作。但是,在某些情况下,基本处理子单元仍然可能太大而无法处理。编码器可以进一步将基本处理子单元划分成更小的段(例如,在H.265/HEVC或H.266/VVC中称为“预测块”或“PB”),在该级别上可以执行预测操作。
对于另一个示例,在变换阶段(其示例在图2A-2B中示出),编码器可以对残差基本处理子单元(例如,CU)执行变换操作。但是,在某些情况下,基本处理子单元仍然可能太大而无法处理。编码器可以进一步将基本处理子单元分成更小的段(例如,在H.265/HEVC或H.266/VVC中称为“变换块”或“TB”),在该级别上可以执行变换操作。需要注意的是,同一基本处理子单元的划分方案在预测阶段和变换阶段可以不同。例如,在H.265/HEVC或H.266/VVC中,相同CU的预测块和变换块可以具有不同的大小和数量。
在图1的结构110中,将基本处理单元112进一步分为3×3个基本处理子单元,其边界以虚线示出。同一图像的不同基本处理单元可以在不同的方案中划分为基本处理子单元。
在一些实施方式中,为了提供并行处理的能力以及对视频编码和解码的容错能力,可以将图像划分成用于处理的区域,使得对于图像的区域,编码或解码过程可以不依赖于来自图像的任何其他区域的信息。换句话说,图像的每个区域都可以单独处理。通过这样做,编解码器可以并行处理图像的不同区域,从而提高了编码效率。此外,当一区域的数据在处理中被损坏或在网络传输中丢失时,编解码器可以正确地编码或解码同一图像的其他区域而不依赖于被损坏或丢失的数据,从而提供容错能力。在某些视频编码标准中,可以将图像划分为不同类型的区域。例如,H.265/HEVC和H.266/VVC提供两种类型的区域:“条带(slice)”和“块片(tile)”。还应注意的是,视频序列100的不同图像可以具有用于将图像划分为区域的不同划分方案。
例如,在图1中,结构110被划分成三个区域114、116和118,其边界被示为结构110内部的实线。区域114包括四个基本处理单元。区域116和118均包括六个基本处理单元。需要说明的是,图1中110的基本处理单元、基本处理子单元和结构区域仅是示例,本公开不限制其实施例。
图2A示出了根据本公开的实施例的示例性编码过程200A的示意图。例如,编码过程200A可以由编码器执行。如图2A所示,编码器可以根据过程200A将视频序列202编码为视频位流228。类似于图1中的视频序列100,视频序列202可以包括按时间顺序排列的一组图像(称为“原始图像”)。类似于图1中的结构110,视频序列202的每个原始图像可以由编码器划分为基本处理单元、基本处理子单元或区域进行处理。在一些实施例中,编码器可以针对视频序列202的每个原始图像在基本处理单元的级别上执行过程200A。例如,编码器可以以迭代方式执行过程200A,其中编码器可以在过程200A的一次迭代中对基本处理单元进行编码。在一些实施例中,编码器可以针对视频序列202的每个原始图像的区域(例如,区域114-118)并行地执行过程200A。
参考图2A,编码器可以将视频序列202的原始图像的基本处理单元(称为“原始BPU”)馈送到预测阶段204,以生成预测数据206和预测BPU 208。编码器可以从原始BPU减去预测的BPU 208以生成残差BPU 210。编码器可以将残差BPU 210馈送到变换阶段212和量化阶段214以216生成量化变换系数216。编码器可以将预测数据206和量化变换系数216馈送到二进制编码阶段226以生成视频位流228。组件202、204、206、208、210、212、214、216、226和228可以被称为“前向路径”。在过程200A期间,在量化阶段214之后,编码器可以将量化变换系数216馈送到逆量化阶段218和逆变换阶段220以生成重建的残差BPU 222。编码器可以将重建的残差BPU 222添加到预测的BPU 208以生成预测参考224,其用于过程200A的下一次迭代的预测阶段204中。过程200A的组件218、220、222和224可以被称为“重建路径”。重建路径可以用于确保编码器和解码器都使用相同的参考数据进行预测。
编码器可以迭代地执行过程200A以对编码原始图像的每个原始BPU(在前向路径中)进行编码,并生成用于编码原始图像的下一个原始BPU(在重建路径中)的预测参考224。在对原始图像的所有原始BPU进行编码之后,编码器可以继续对视频序列202中的下一个图像进行编码。
参考过程200A,编码器可以接收由视频采集设备(例如,相机)生成的视频序列202。本文使用的术语“接收”可以指以任何方式接收、输入、获取、检索、获取、读取、访问或用于输入数据的任何动作。
在预测阶段204,在当前迭代时,编码器可以接收原始BPU和预测参考224,并执行预测操作以生成预测数据206和预测BPU 208。预测参考224可以从过程200A的先前迭代的重建路径生成。预测阶段204的目的是通过从预测数据206和预测参考224中提取可用于将原始BPU重建为预测BPU 208的预测数据206来减少信息冗余。
理想地,预测的BPU 208可以与原始BPU相同。然而,由于非理想的预测和重建操作,预测的BPU 208通常与原始BPU略有不同。为了记录这些差异,在生成预测BPU 208,编码器可以将其从原始BPU中减去以生成残差BPU 210。例如,编码器可以从原始BPU的像素的值减去预测BPU208的对应像素的值(例如,灰度值或RGB值)。残差BPU 210的每个像素可以具有残差值作为原始BPU和预测BPU208的相应像素之间的这种相减的结果,与原始BPU相比,预测数据206和残差BPU 210可以具有更少的比特数,但是它们可以用于重建原始BPU,而不会出现明显的质量下降。因此,原始BPU被压缩。
为了进一步压缩残差BPU 210,在变换阶段212,编码器可以通过将残差BPU 210分解为一组二维“基本图案(base pattern)”来减少其空间冗余。每个基本图案与“变换系数”相关联。基本图案可以具有相同的大小(例如,残差BPU 210的大小),每个基本图案可以表示残差BPU 210的变化频率(例如,亮度变化的频率)分量。基本图案中的任何一个都不能从任何其他基本图案的任何组合(例如,线性组合)中再现。换句话说,分解可以将残差BPU210的变化分解到频域中。这种分解类似于函数的离散傅立叶变换,其中,基本图像类似于离散傅立叶变换的基本函数(例如,三角函数),并且变换系数类似于与基本函数相关联的系数。
不同的变换算法可以使用不同的基本图案。在变换阶段212可以使用各种变换算法,例如,离散余弦变换、离散正弦变换等。变换阶段212处的变换是可逆的。也就是说,编码器可以通过变换的逆运算(称为“逆变换”)来恢复残差BPU 210。例如,为了恢复残差BPU210的像素,逆变换可以是将基本图案的对应像素的值乘以相应的相关联系数并将乘积相加以产生加权和。对于视频编码标准,编码器和解码器都可以使用相同的变换算法(因此具有相同的基本图案)。因此,编码器可以仅记录变换系数,解码器可以从中重建残差BPU210,而无需从编码器接收基本图案。与残差BPU 210相比,变换系数可以具有更少的比特,但是它们可以用于重建残差BPU 210而没有显著的质量劣化。因此,残差BPU 210被进一步压缩。
编码器可以进一步在量化阶段214压缩变换系数。在变换过程中,不同的基本图案可以表示不同的变化频率(例如,亮度变化频率)。因为人眼通常更擅长识别低频变化,所以编码器可以忽略高频变化的信息,而不会在解码中引起明显的质量劣化。例如,在量化阶段214,编码器可以通过将每个变换系数除以整数值(称为“量化参数”)并将商四舍五入到其最接近的整数来生成量化的变换系数216。在这样的操作之后,可以将高频基本图案的一些变换系数转换为零,并且可以将低频基本图案的变换系数转换为较小的整数。编码器可以忽略零值的量化变换系数216,由此变换系数被进一步压缩。该量化处理也是可逆的,其中量化变换系数216可以在量化的逆操作(称为“逆量化”)中被重建为变换系数。
因为编码器在舍入操作中忽略了该除法的余数,所以量化阶段214可能是有损的。通常,量化阶段214可以在过程200A中贡献最多的信息损失。信息损失越大,量化变换系数216所需的比特数就越少。为了获得不同级别的信息损失,编码器可以使用不同的量化参数值或量化过程的任何其他参数。
在二进制编码阶段226,编码器可以使用二进制编码技术对预测数据206和量化变换系数216进行编码,二进制编码例如为熵编码、可变长度编码、算术编码、霍夫曼编码、上下文自适应二进制算术编码,或任何其他无损或有损压缩算法。在一些实施例中,除了预测数据206和量化变换系数216之外,编码器可以在二进制编码阶段226编码其他信息,例如,在预测阶段204使用的预测模式、预测操作的参数、在变换阶段212处的变换类型。量化过程的参数(例如,量化参数)、编码器控制参数(例如,比特率控制参数)等。编码器可以使用二进制编码阶段226的输出数据来生成视频位流228。在一些实施例中,视频位流228可以被进一步打包以用于网络传输。
参照过程200A的重建路径,在逆量化阶段218,编码器可以对量化变换系数216执行逆量化,以生成重建的变换系数。在逆变换阶段220,编码器可以基于重建的变换系数生成重建残差BPU 222。编码器可以将重建残差BPU 222添加到预测BPU 208以生成将在过程200A的下一次迭代中使用的预测参考224。
应当注意的是,过程200A的其他变体可用于对视频序列202进行编码。在一些实施例中,过程200A的阶段可以由编码器以不同的顺序执行。在一些实施例中,过程200A的一个或多个阶段可以组合成单个阶段。在一些实施例中,过程200A的单个阶段可以分为多个阶段。例如,变换阶段212和量化阶段214可以组合成单个阶段。在一些实施例中,过程200A可以包括附加的阶段。在一些实施例中,过程200A可以省略图2A中的一个或多个阶段。
图2B示出了根据本公开的实施例的另一示例编码过程200B的示意图。过程200B可以修改自过程200A。例如,过程200B可以由符合混合视频编码标准(例如,H.26x系列)的编码器使用。与过程200A相比,过程200B的前向路径还包括模式决策阶段230,并将预测阶段204分为空间预测阶段2042和时间预测阶段2044,过程200B的重建路径还另外包括环路滤波阶段232和缓冲区234。
通常,预测技术可以分为两种类型:空间预测和时间预测。空间预测(例如,帧内图像预测或“帧内预测”)可以使用来自同一图像中的一个或多个已经编码的相邻BPU的像素来预测当前BPU。也就是说,空间预测中的预测参考224可以包括相邻的BPU。空间预测可以减少图像固有的空间冗余。时间预测(例如,图像间预测或“帧间预测”)可以使用来自一个或多个已经编码的图像的区域来预测当前BPU。也就是说,时间预测中的预测参考224可以包括编码图像。时间预测可以减少图像固有的时间冗余。
参考过程200B,在前向路径中,编码器在空间预测阶段2042和时间预测阶段2044执行预测操作。例如,在空间预测阶段2042,编码器可以执行帧内预测。对于被编码的图像的原始BPU,预测参考224可以包括在同一图像中已经被编码(在前向路径中)和重建(在重建路径中)的一个或多个相邻BPU。编码器可以通过插值相邻的BPU来生成预测的BPU 208。插值技术可以包括例如线性插值或内插、多项式插值或内插等。在一些实施例中,编码器可以在像素级执行插值,例如通过插值预测BPU 208的每个像素的对应像素的值。用于插值的相邻BPU可以位于相对于原始BPU的各个方向,例如在垂直方向(例如,在原始BPU的顶部),水平方向(例如,在原始BPU的左侧),对角线方向(例如,在原始BPU的左下、右下、左上或右上),或在所使用的视频编码标准中定义的任何方向。对于帧内预测,预测数据206可以包括,例如,所使用的相邻BPU的位置(例如,坐标)、所使用的相邻BPU的大小、插值的参数、所使用的相邻BPU相对于原始BPU的方向等。
对于另一个示例,在时间预测阶段2044,编码器可以执行帧间预测。对于当前图像的原始BPU,预测参考224可以包括已经被编码(在前向路径中)和重建(在重建路径中)的一个或多个图像(被称为“参考图像”)。在一些实施例中,可以通过逐个BPU对参考图像进行编码和重建。例如,编码器可以将重建的残差BPU 222添加到预测BPU 208以生成重建BPU。当同一张图像的所有重建的BPU都被生成时,编码器可以生成一重建图像作为参考图像。编码器可以执行“运动估计”的操作以搜索参考图像的范围(称为“搜索窗口”)中的匹配区域。可以基于原始BPU在当前图像中的位置来确定搜索窗口在参考图像中的位置。例如,搜索窗口可以在参考图像中与当前图像中的原始BPU具有相同坐标的位置处为中心,并且可以向外延伸预定距离。当编码器在搜索窗口中识别(例如,通过使用pel递归算法、块匹配算法等)类似于原始BPU的区域时,编码器可以确定这样的区域作为匹配区域。匹配区域可以具有与原始BPU不同的大小(例如,小于、等于、大于或具有不同的形状)。因为参考图像和当前图像在时间线上在时间上分开(例如,如图1所示),所以可以认为匹配区域随着时间的推移“移动”到原始BPU的位置。编码器可以将这种运动的方向和距离记录为“运动矢量”。当使用多个参考图像时(例如,如图1中的图像106),编码器可以搜索匹配区域并为每个参考图像确定其相关联的运动矢量。在一些实施例中,编码器可以将权重分配给各个匹配参考图像的匹配区域的像素值。
运动估计可用于识别各种类型的运动,例如平移、旋转、缩放等。对于帧间预测,预测数据206可以包括例如匹配区域的位置(例如,坐标)、与匹配区域相关联的运动矢量、参考图像的数量、与参考图像相关联的权重等。
为了生成预测的BPU 208,编码器可以执行“运动补偿”的操作。运动补偿可以用于基于预测数据206(例如,运动向量)和预测参考224来重建预测的BPU 208。例如,编码器可以根据运动矢量移动参考图像的匹配区域,其中编码器可以预测当前图像的原始BPU。当使用多个参考图像时(例如,如图1中的图像106),编码器可以根据匹配区域的各个运动矢量和平均像素值来移动参考图像的匹配区域。在一些实施例中,如果编码器已经将权重分配给各个匹配参考图像的匹配区域的像素值,则编码器可以将移动的匹配区域的像素值的加权和相加。
在一些实施例中,帧间预测可以是单向的或双向的。单向帧间预测可以使用相对于当前图像在相同时间方向上的一个或多个参考图像。例如,图1中的图像104是单向帧间预测图像,其中参考图像(即,图像102)在图像04之前。双向帧间预测可以在相对于当前图像的两个时间方向上使用一个或多个参考图像。例如,图1中的图像106是双向帧间预测图像,其中参考图像(即,图像104和08)相对于图像104在两个时间方向上。
仍然参考过程200B的前向路径,在空间预测2042和时间预测阶段2044之后,在模式决策阶段230,编码器可以为过程200B的当前迭代选择预测模式(例如,帧内预测或帧间预测之一)。例如,编码器可以执行速率失真优化技术,其中编码器可以根据候选预测模式的比特率和候选预测模式下的重建参考图像的失真来选择预测模式以最小化成本函数的值。根据所选择的预测模式,编码器可以生成相应的预测BPU 208和预测数据206。
在过程200B的重建路径中,如果在前向路径中已经选择了帧内预测模式,则在生成预测参考224(例如,在当前图像中已经编码和重建的当前BPU)之后,编码器可以将预测参考224直接馈送到空间预测阶段2042以用于以后的使用(例如,用于插值当前图像的下一BPU)。如果在前向路径中已经选择了帧间预测模式,则在生成预测参考224(例如,其中所有BPU都已被编码和重建的当前图像)之后,编码器可以将预测参考224馈送到环路滤波器阶段232。在该阶段,编码器可以将环路滤波器应用于预测参考224,以减少或消除由帧间预测引入的失真(例如,块状伪影)。编码器可以在环路滤波器阶段232处应用各种环路滤波器技术,例如去块、采样自适应补偿、自适应环路滤波器等。可以将经环路滤波的参考图像存储在缓冲区234(或“经解码的图像缓冲区”)中以供以后使用(例如,用作视频序列202的未来图像的帧间预测参考图像)。编码器可以将一个或多个参考图像存储在缓冲区234中,以在时间预测阶段2044处使用。在一些实施例中,编码器可以在二进制编码阶段226处编码环路滤波器的参数(例如,环路滤波器强度)以及量化变换系数216、预测数据206和其他信息。
图3A示出了根据本公开的实施例的示例性解码过程300A的示意图。过程300A可以是对应于图2A中的压缩过程200A的解压缩过程。在一些实施例中,过程300A可以类似于过程200A的重建路径。解码器可以根据过程300A将视频位流228解码成视频流304。视频流304可以非常类似于视频序列202。然而,由于压缩和解压缩过程中的信息丢失(例如,图2A-2B中的量化阶段214),通常,视频流304与视频序列202不同。类似于图2A-2B中的过程200A和200B,解码器可以在基本处理单元(BPU)级别对在视频位流228中编码的每个图像执行过程300A。例如,解码器可以以迭代方式执行过程300A,其中解码器可以在过程300A的一次迭代中对基本处理单元进行解码。在一些实施例中,解码器可以针对在视频位流228中编码的每个图像的区域(例如,区域114-118)并行地执行过程300A。
如图3A所示,解码器可以将与编码图像的基本处理单元(称为“编码BPU”)相关联的视频位流228的一部分馈送到二进制解码阶段302,在二进制解码阶段302,解码器可以将该部分解码成预测数据206和量化变换系数216。解码器可以将量化变换系数216馈送到逆量化阶段218和逆变换阶段220以生成重建残差BPU222。解码器可以将预测数据206馈送到预测阶段204以生成预测BPU 208。解码器可以将重建残差BPU222添加到预测BPU 208以生成预测参考224。在一些实施例中,预测参考224可以存储在缓冲区(例如,计算机存储器中的解码图像缓冲区)中。解码器可以将预测参考224馈送到预测阶段204,用于在过程300A的下一次迭代中执行预测操作。
解码器可以迭代地执行过程300A,以解码编码图像的每个编码BPU,并生成用于编码图像的下一个编码BPU的预测参考224。在解码编码图像的所有编码BPU之后,解码器可以将该图像输出到视频流304以供显示,并且继续解码视频位流228中的下一个编码图像。
在二进制解码阶段302,解码器可以执行编码器使用的二进制编码技术(例如,熵编码、可变长度编码、算术编码、霍夫曼编码、上下文自适应二进制算术编码或任何其他无损压缩算法)的逆运算。在一些实施例中,除了预测数据206和量化的变换系数216,解码器可以在二进制解码阶段302解码其他信息,例如预测模式、预测操作的参数、变换类型、量化过程的参数(例如,量化参数)、编码器控制参数(例如,比特率控制参数)等。在一些实施例中,如果视频位流228通过网络以包的形式传输,则解码器可以在将视频位流228馈送到二进制解码级302之前对其进行解包。
图3B示出了根据本公开的实施例的另一示例解码过程300B的示意图。过程300B可以修改自过程300A。例如,过程300B可以由符合混合视频编码标准(例如,H.26x系列)的解码器使用。与过程300A相比,过程300B额外地将预测阶段204划分为空间预测阶段2042和时间预测阶段2044,并且额外地包括环路滤波阶段232和缓冲区234。
在过程300B中,对于在解码的编码图像(称为“当前图像”)的编码基本处理单元(称为“当前BPU”),由解码器从二进制解码阶段302解码的预测数据206可以包括各种类型的数据,这取决于编码器使用什么预测模式来编码当前BPU。例如,如果编码器使用帧内预测来编码当前BPU,则预测数据206可以包括指示帧内预测、帧内预测操作的参数等的预测模式指示符(例如,标志值)。帧内预测操作的参数可以包括例如用作参考的一个或多个相邻BPU的位置(例如,坐标)、相邻BPU的大小、插值的参数、相邻BPU相对于原始BPU的方向等。对于另一示例,如果由编码器使用的帧间预测来编码当前BPU,则预测数据206可以包括指示帧间预测、帧间预测操作的参数等预测模式指示符(例如,标志值)。帧间预测操作的参数可以包括例如与当前BPU相关联的参考图像的数量、分别与参考图像相关联的权重、相应参考图像中的一个或多个匹配区域的位置(例如,坐标)、分别与所述匹配区域相关联的一个或多个运动矢量等。
基于预测模式指示符,解码器可以决定是在空间预测阶段2042执行空间预测(例如,帧内预测)还是在时间预测阶段2044执行时间预测(例如,帧间预测),执行这种空间预测或时间预测的细节在图2B中描述,其不会在下文中重复。在执行这样的空间预测或时间预测之后,解码器可以生成预测的BPU 208,解码器可以添加预测的BPU 208和重建残差BPU222以生成预测参考224,如图3A中所述。
在过程300B中,解码器可以将预测参考224馈送到空间预测阶段2042或时间预测阶段2044,用于在过程300B的下一次迭代中执行预测操作。例如,如果在空间预测阶段2042使用帧内预测解码当前BPU,则在生成预测参考224(例如,解码的当前BPU)之后,解码器可以将预测参考224直接馈送到空间预测阶段2042以供以后使用(例如,用于插值当前图像的下一个BPU)。如果在时间预测阶段2044使用帧间预测解码当前BPU,则在生成预测参考224(例如,其中所有BPU都被解码的参考图像)之后,编码器可以将预测参考224馈送到环路滤波器阶段232以减少或消除失真(例如,块状伪影)。解码器可以如图2B所示的方式将环路滤波器应用于预测参考224。环路滤波的参考图像可以存储在缓冲区234(例如,计算机存储器中的解码图像缓冲区)中供以后使用(例如,用作视频位流228的未来编码图像的预测间参考图像)。解码器可以将一个或多个参考图像存储在缓冲区234中,以在时间预测阶段2044处使用。在一些实施例中,当预测数据206的预测模式指示符指示帧间预测被用于编码当前BPU时,预测数据可以进一步包括环路滤波器的参数(例如,环路滤波器强度)。来自缓冲区234的重建图像也可以被发送到显示器,诸如TV、PC、智能手机或平板电脑,以供终端用户观看。
可以有四种类型的环路滤波器。例如,环路滤波器可以包括去块滤波器、样本自适应偏移(“SAO”)滤波器、具有色度缩放的亮度映射(“LMCS”)滤波器和自适应环路滤波器(“ALF”)。应用四种类型的环路滤波器的顺序可以是LMCS滤波器、去块滤波器、SAO滤波器和ALF。LMCS滤波器可以包括两个主要组件。第一个组件以是基于自适应分段线性模型的亮度分量的环内映射。第二个组件可以用于色度分量,并且可以应用与亮度有关的色度残差缩放
图4是根据本公开的实施例的用于对视频进行编码或解码的示例装置400的框图。如图4所示,装置400可以包括处理器402。当处理器402执行本文所述的指令时,装置400可以成为用于视频编码或解码的专用机器。处理器402可以是能够操纵或处理信息的任何类型的电路。例如,处理器402可以包括任何数量的中央处理单元(或“CPU”)、图形处理单元(或“GPU”)、神经处理单元(“NPU”)、微控制器单元(“MCU”)、光学处理器中、可编程逻辑控制器、微处理器、数字信号处理器、知识产权(IP)核心、可编程逻辑阵列(PLA)、可编程阵列逻辑(PAL)、通用阵列逻辑(GAL)、复杂可编程逻辑器件(CPLD),一种现场可编程门阵列(FPGA)、片上系统(SoC)、专用集成电路(ASIC)等的任意组合。在一些实施例中,处理器402还可以是被分组为单个逻辑组件的一组处理器。例如,如图4所示,处理器402可以包括多个处理器,包括处理器402a、处理器402b和处理器402n。
装置400还可以包括被配置为存储数据(例如,指令集、计算机代码、中间数据等)的存储器404。例如,如图4所示,所存储的数据可以包括程序指令(例如,用于实现过程200A、200B、300A或300B中的阶段)和用于处理的数据(例如,视频序列202、视频位流228或视频流304)。处理器402可以访问用于处理的程序指令和数据(例如,经由总线410),并且执行程序指令以对用于处理的数据执行操作或操纵。存储器404可以包括高速随机存取存储设备或非易失性存储设备。在一些实施例中,存储器404可以包括任意数量的随机存取存储器(RAM)、只读存储器(ROM)、光盘、磁盘、硬盘驱动器、固态驱动器、闪存驱动器、安全数字(SD)卡、记忆棒、紧凑型闪存(CF)卡等的任意组合。存储器404也可以是被分组为单个逻辑组件的一组存储器(图4中未示出)。
总线410可以是在装置400内部的组件之间传输数据的通信设备,诸如内部总线(例如,CPU-存储器总线)、外部总线(例如,通用串行总线端口、外围组件互连快速端口),或者类似物。
为了便于解释而不引起歧义,在本公开中,处理器402和其他数据处理电路统称为“数据处理电路”。数据处理电路可以完全实现为硬件,或者实现为软件、硬件或固件的组合。此外,数据处理电路可以是单个单独模块,或者可以完全或部分地组合到装置400的任何其他部件中。
装置400还可以包括网络接口406,以提供与网络(例如,因特网、内联网、局域网、移动通信网络等)的有线或无线通信。在一些实施例中,网络接口406可以包括任何数量的网络接口控制器(NIC)、射频(RF)模块、应答器、收发器、调制解调器、路由器、网关、有线网络适配器、无线网络适配器、蓝牙适配器、红外适配器、近场通信(“NFC”)适配器、蜂窝网络芯片等的任意组合。
在一些实施例中,可选地,装置400可以进一步包括外围接口408,以提供到一个或多个外围设备的连接。如图4所示,外围设备可以包括,但不限于,光标控制设备(例如,鼠标、触摸板或触摸屏)、键盘、显示器(例如,阴极射线管显示器、液晶显示器、或发光二极管显示器)、视频输入设备(例如,相机或耦合到视频档案的输入接口)等。
应当注意,视频编解码器(例如,执行过程200A、200B、300A或300B的编解码器)可以被实现为装置400中的任何软件或硬件模块的任何组合。例如,过程200A、200B、300A或30013的一些或所有阶段可以被实现为装置400的一个或多个软件模块,诸如可以被加载到存储器404中的程序实例。对于另一示例,过程200A、200B、300A或300B的一些或全部阶段可以被实现为装置400的一个或多个硬件模块,诸如专用数据处理电路(例如,FPGA、ASIC、NPU等)。
在量化和逆量化功能块(例如,图2A或图2B的量化214和逆量化218,图3A或图3B的逆量化218)中,量化参数(QP)用于确定应用于预测残差的量化(和逆量化)量。用于对图像或条带进行编码的初始QP值可以在较高的级别上用信号通知,例如,使用图像参数集(PPS)中的init_qp_minus26语法元素和使用条带头中的slice_qp_delta语法元素。此外,可以使用以量化组的粒度发送的增量QP值在每个CU的本地级别上适配QP值。
等矩形投影(“ERP”)格式是用于表示360度视频和图像的常用投影格式。投影将子午线映射到恒定间距的垂直直线,将纬度圆映射到恒定间距的水平直线。由于图像像素在地图上的位置与其在球体上的相应地理位置之间的关系特别简单,因此ERP是用于360度视频和图像的最常见投影之一。
JVET输出的投影格式转换和视频质量指标的算法描述给出了ERP和sphere之间的坐标转换和介绍。对于2D至3D坐标转换,给定采样位置(m,n),(u,v)可以基于以下公式(1)和(2)计算。
u=(m+0.5)/W,0≤m<W 公式(1)
v=(n+0.5)/H,0≤n<H 公式(2)
然后,可以基于以下公式(3)和(4)从(u,v)计算球体中的经度和纬度(φ,θ)。
φ=(u-0.5)×(2×π) 公式(3)
θ=(0.5-v)×π 公式(4)
3D坐标(X,Y,Z)可以基于以下等式(5)-(7)计算。
X=cos(θ)cos(φ) 公式(5)
Y=sin(θ) 公式(6)
Z=-cos(θ)sin(φ) 公式(7)
对于从(X,Y,Z)开始的3D至2D坐标转换,(φ,θ)可以基于以下公式(8)和(9)计算。然后,基于公式(3)和(4)计算(u,v)。最后,可以根据公式(1)和(2)计算2D坐标(m,n)。
φ=tan-1(-Z/X) 公式(8)
θ=sin-1(Y/(X2+Y2+Z2)1/2) 公式(9)
为了减少包含ERP图像的左右边界的重建视口(viewport)中的接缝伪影,通过在ERP图像的左右两侧中的每一个上填充样本来提供称为填充等矩形投影(“PERP”)的新格式。
当使用PERP表示360度视频时,对PERP图像进行编码。解码后,通过混合复制的样本或裁剪填充的区域,将重建的PERP转换回重建的ERP。
图5A示出了根据本公开的一些实施例的用于生成重建的等矩形投影的示例混合操作的示意图。除非另有说明,否则“recPERP”用于表示后处理之前的重建PERP,并且“recERP”用于表示后处理之后的重建ERP。在图5A中,A1和B2是ERP图像中的边界区域,B1和A2是填充区域,其中A2从A1填充,B1从B2填充。如图5A所示,可以通过应用基于距离的加权平均操作来混合recPERP的复制样本。例如,可以通过将区域A1与A2混合来生成区域A,而通过将区域B1与b2混合来生成区域B。
在下面的描述中,未填充recERP的宽度和高度分别表示为“W”和“H”。左右填充宽度分别表示为“PL”和“PR”。总填充宽度表示为“Pw”,其可以是PL和PR的总和。在一些实施例中,可以通过混合操作将recPERP转换为recERP。例如,对于A中的样本recERP(j,i),其中(j,i)是ERP图像中的坐标,i在[0,PR-1]中,j在[0,H-1]中,recERP(j,i)可以根据以下公式来确定。
A=w×A1+(1–w)×A2,其中w为PL/Pw至1 公式(10)
A中的recERP(j,i)=(recPERP(j,i+PL)×(i+PL)+recPERP(j,i+PL+W)×(PR-i)+(PW>>1))/PW 公式(11)
其中,recPERP(y,x)是重建PERP图像上的样本,其中(y,x)是PERP图像中样本的坐标。
在一些实施例中,对于B中的样本recERP(j,i),其中(j,i)是ERP图像中的坐标,并且i在[W-PL,W-1]中并且j在[0,H-1]中,recERP(j,i)可以根据以下方程式生成:
B=k×B1+(1–k)×B2,其中k从0至PL/Pw 公式(12)
B中的recERP(j,i)=(recPERP(j,i+PL)×(PR-i+W)+recPERP(j,i+PL-w)×(i–W+PL)+(Pw>>1))/PW 公式(13)
其中,recPERP(y,x)是重建PERP图像上的样本,其中(y,x)是PERP图像中样本的坐标。
图5B示出了根据本公开的一些实施例的用于生成重建的等矩形投影的示例裁剪操作的示意图。在图5B中,A1和B2是ERP图像内的边界区域,B1和A2是填充区域,其中A2从A1填充,B1从B2填充。如图5B所示,在裁剪过程中,可以直接丢弃recPERP中的填充样品以获得recERP。例如,可以丢弃填充样本B1和A2。
在一些实施例中,水平环绕运动补偿可用于改善ERP的编码性能。例如,水平环绕运动补偿可以在VVC标准中用作特定于360的编码工具,该编码工具被设计为改进ERP格式或PERP格式的重建的360度视频的视觉质量。在常规的运动补偿中,当运动矢量参考超出参考图像的图像边界的样本时,通过复制从对应图像边界上的那些最近的相邻样本来应用重复填充以导出越界样本的值。对于360度视频,这种重复填充的方法是不合适的,并且可能导致在重建的视口视频中被称为“接缝伪影”的视觉伪影。因为360度视频在球体上被采集并且固有地没有“边界”,所以可以从球形域中的相邻样本获得投影域中的参考图像的边界之外的参考样本。对于一般的投影格式,可能很难在球形域中导出相应的相邻样本,因为它涉及2D至3D和3D至2D坐标转换,以及分数样本位置的样本插值。对于ERP或PERP投影格式的左右边界,可以解决此问题,因为左图像边界之外的球形邻居样本可以从右图像边界内的样本中获得,反之亦然。鉴于ERP或PERP投影格式的广泛使用以及相对易于实现,VVC采用了水平环绕运动补偿,以提高ERP或PERP投影格式编码的360度视频的视觉质量。
图6A示出了根据本公开的一些实施例的用于等矩形投影的示例水平环绕运动补偿过程的示意图。如图6A所示,当参考块的一部分在投影域中位于参考图像的左(或右)边界之外时,不是重复填充,“边界外”部分可以从位于参考图像内朝向投影域中右侧(或左侧)边界的相应球形邻居部分中获取。在一些实施例中,重复填充可以用于顶部和底部图像边界。
图6B示出了根据本公开的一些实施例的用于填充的等矩形投影的示例水平环绕运动补偿过程的示意图。如图6B所示,水平环绕运动补偿可以与通常在360度视频编码中使用的非规范填充方法组合。在一些实施例中,这通过用信号通知高级语法元素来指示环绕运动补偿偏移量来实现,该偏移量可以在填充之前被设置为ERP图像宽度。此语法可用于相应地调整水平环绕的位置。在一些实施例中,该语法不受左侧或右侧图像边界上的特定填充量的影响。结果,这种语法自然可以支持ERP图像的不对称填充。在ERP图像的不对称填充中,左右的填充可以不同。在一些实施例中,可以根据以下公式确定环绕运动补偿:
其中偏移量可以是在位流中用信号通知的环绕运动补偿偏移量,picW可以是编码前包括填充区域的图像宽度,posx可以是由当前块位置和运动矢量确定的参考位置,并且公式posx_wrap的输出可以是来自环绕运动补偿中的参考块的实际参考位置。为了节省环绕运动补偿偏移量的信号通知开销,它可以以最小亮度编码块为单位,因此,可以将偏移量替换为offsetw×MinCbSizeY,其中offsetw是以最小亮度编码块为单位的环绕运动补偿偏移量,该最小亮度编码块在位流中被信号通知,而MinCbSizeY是最小亮度编码块的大小。相反,在传统的运动补偿中,参考块来自的实际参考位置可以通过在0到picW-1范围内剪切posx直接导出。
当参考样本在参考图像的左右边界之外时,水平环绕运动补偿可以为运动补偿提供更有意义的信息。在360度视频常用测试条件下,该工具不仅可以在率失真方面提高压缩性能,还可以在减少接缝伪影和重建的360度视频的主观质量方面提高压缩性能。水平环绕运动补偿也可用于其他在水平方向上具有恒定采样密度的单面投影格式,例如调整后的等面积投影。
在VVC中,(例如,VVC草案8),可以通过用信号通知高级语法变量pps_ref_wraparound_offset以指示环绕偏移量来实现环绕运动补偿。有时,应在填充之前将环绕偏移量设置为ERP图像宽度。此语法可用于相应地调整水平环绕运动补偿的位置。此语法可能不受左侧或右侧图像边界上的特定填充量的影响。结果,该语法可以自然地支持ERP图像的不对称填充(例如,当左侧填充和右侧填充不同时)。当参考样本在参考图像的左右边界之外时,水平环绕运动补偿可以为运动补偿提供更有意义的信息。
图7示出了根据本公开的一些实施例的示例高级环绕偏移的语法。应当理解,图7所示的语法可以在VVC中使用(例如,VVC草案8)。如图7所示,当启用环绕运动补偿时(例如,pps_ref_wraparound_enabled_flag==1),可以直接用信号通知环绕偏移量pps_ref_wraparound_offset。如图7所示,位流中的语法元素或变量以粗体显示。
图8示出了根据本公开的一些实施例的示例高级环绕偏移量的语义。应当理解,图8中所示的语义可以对应于图7所示的语法。在一些实施例中,如图8所示,pps_ref_wraparound_enabled_flag的值为1意味着在帧间预测中应用水平环绕运动补偿。如果pps_ref_wraparound_enabled_flag的值为0,则不应用水平环绕运动补偿。当CtbSizeY/MinCbSizeY+1的值大于pic_width_in_luma_samples/MinCbSizeY-1时,pps_ref_wraparound_enabled_flag的值应等于0。当sps_ref_wraparound_enabled_flag等于0时,pps_ref_wraparound_enabled_flag的值应等于0。CtbSizeY是亮度编码树块的大小。
在一些实施例中,如图8所示,pps_ref_wraparound_offset加(CtbSizeY/MinCbSizeY)+2的值可以指定用于计算以MinCbSizeY亮度样本为单位的水平环绕位置的偏移量。pps_ref_wraparound_offset的值可以在0到(pic_width_in_luma_samples/MinCbSizeY)-(CtbSizeY/MinCbSizeY)-2的范围内,包含端值。可以将变量PpsRefWraparoundOffset设置为等于pps_ref_wraparound_offset+(CtbSizeY/MinCbSizeY)+2。在一些实施例中,变量PpsRefWrapararoundOffset可用于确定子块的亮度位置(例如,在VVC草案8中)。
在VVC(例如,VVC草案8)中,可以将图像划分为一个或多个块片行或一个或多个块片列。块片可以是覆盖图像的矩形区域的编码树单元(“CTU”)的序列。条带可以包括图像的块片内的整数个完整块片或整数个连续的完整CTU行。
可以支持两种模式的条带,即光栅扫描条带模式和矩形条带模式。在光栅扫描条带模式中,条带可以包括图像的块片光栅扫描中的完整块片序列。在矩形条带模式中,条带可以包括共同形成图像的矩形区域的多个完整块片,或者共同形成图像的矩形区域的一个块片的多个连续完整CTU行。矩形条带内的块片在对应于该条带的矩形区域内按块片光栅扫描顺序进行扫描。
子图像可以包括共同覆盖图像的矩形区域的一个或多个条带。图9示出了根据本公开的一些实施例的图像的示例条带和子图像划分的示意图。如图9所示,将图像划分为20个块片,具有5个块片列和4个块片行。左侧有12个块片,每个块片覆盖4×4个CTU的条带。右侧有8个块片,每个块片覆盖2个垂直堆叠的2×2个CTU的条带。总共有28个条带和28个不同尺寸的子图像(例如,每个条带可以是一个子图像)。
图10示出了根据本公开的一些实施例的具有不同条带和子图像的示例条带和子图像划分的示意图。如图10所示,将图像划分为20个块片,具有5个块片列和4个块片行。左侧有12个块片,每个块片覆盖4×4个CTU的条带。右侧有8个块片,每个块片覆盖2个垂直堆叠的2×2个CTU的条带。总共有28条带。对于左侧的12个条带,每个条带都是一个子图像。对于右边的16个条带,每个4个条带组成一个子图像。结果,总共有16个尺寸相同的子图像。
在VVC(例如,VVC草案8)中,关于条带布局的信息可以在图像参数集(“PPS”)中用信号通知。在一些实施例中,图像参数集是包括语法元素或变量的语法结构,所述语法元素或变量应用于由在每个图像标头中找到的语法元素确定的零个或更多个整个编码图像。图11示出了根据本公开的一些实施例的用于块片映射和条带布局的示例图像参数集的语法。应当理解,图11所示的语法可以在VVC中使用(例如,VVC草案8)。如图11所示,位流中的语法元素或变量以粗体显示。如图11所示,如果当前图像中的块片的数量大于1并且使用矩形条带模式(例如,rect_slice_flag==1),则可以首先用信号通知被称为single_slice_per_subpic_flag的标志以指示每个子图像仅包括一个条带。在这种情况下(例如,single_slice_per_subpic_flag==1),无需进一步用信号通知条带的布局信息,因为它可以与在序列参数集(“SPS”)中已经用信号通知的子图像布局相同。在一些实施例中,SPS是一种语法结构,其包括应用于零个或更多个整个编码层视频序列(“CLVS”)的语法元素,所述语法元素由在每个图像头中找到的语法元素所参考的图像参数集中找到的语法元素的内容确定。在一些实施例中,图像头是包括适用于编码图像的所有条带的语法元素的语法结构。在一些实施例中,如图11所示,如果single_slice_per_subpic_flag的值为0,则可以首先用信号通知图像中的条带数量(例如,num_slices_in_pic_minus1),然后是每个条带的条带位置和尺寸信息。
在一些实施例中,为了用信号通知条带的数量,可以用信号通知条带数量减1(例如,num_slices_in_pic_minus1),而不是直接用信号通知条带数量,因为在图像中存在至少1个条带。通常,用信号发送较小的正值可以花费较少的比特,并提高执行视频处理的总体效率。
图12示出了根据本公开的一些实施例的用于块片映射和条带布局的示例图像参数集的语义。应当理解,图12中所示的语义2可以对应于图11所示的语法。在一些实施例中,如图12中所示语义对应于VVC(例如,VVC草案8)。
在一些实施例中,如图12所示,变量rect_slice_flag等于0表示每个条带内的块片处于光栅扫描顺序中,并且在PPS中不用信号通知条带信息。当变量rect_slice_flag等于1时,每个条带内的块片可以覆盖图像的矩形区域,并且可以在PPS中用信号通知条带信息。在一些实施例中,当不存在时,变量rect_slice_flag可被推断为等于1。在一些实施例中,当变量subpic_info_present_flag等于1时,rect_slice_flag的值应等于1。
在一些实施例中,如图12所示,变量single_slice_per_subpic_flag等于1意味着每个子图像可以包括一个且仅一个矩形条带。当变量single_slice_per_subpic_flag等于0时,每个子图像可以包括一个或多个矩形条带。在一些实施例中,当变量single_slice_per_subpic_flag等于1时,变量num_slices_in_pic_minus1可被推断为等于变量sps_num_subpics_minus1。在一些实施例中,当不存在时,single_slice_per_subpic_flag的值可以被推断为等于0。
在一些实施例中,如图12所示,变量num_slices_in_pic_minus1加1是每个图像中参考PPS的矩形条带的数量。在一些实施例中,num_slices_in_pic_minus1的值可以在0到MaxSlicesPerPicture-1的范围内,包括端值。在一些实施例中,当变量no_pic_partition_flag等于1时,可以推断num_slices_in_pic_minus1的值等于0。
在一些实施例中,如图12所示,如果变量tile_idx_delta_present_flag等于0,则PPS中不存在tile_idx_delta的值,并且以光栅顺序指定了参考PPS的图像中的所有矩形条带。在一些实施例中,当变量tile_idx_delta_present_flag等于1时,tile_idx_delta的值可以存在于PPS中,并且以tile_idx_delta的值所指示的顺序指定参考PPS的图像中的所有矩形条带。在一些实施例中,当不存在时,可以推断tile_idx_delta_present_flag的值等于0。
在一些实施例中,如图12所示,变量slice_width_in_tiles_minus1[i]加1指定以块片为单位的第i个矩形条带的宽度。在一些实施例中,slice_width_in_tiles_minus1[i]的值应在0到NumTileColumns-1的范围内,包括端值。在一些实施例中,如果slice_width_in_tiles_minus1[i]不存在,则可以应用以下内容:如果NumTileColumns等于1,则可以推断slice_width_in_tiles_minus1[i]的值等于0;否则,slice_width_in_tiles_minus_1[i]的值可以推断为VVC草案(例如,VVC草案8)中的子句中指定的值。
在一些实施例中,如图12所示,变量slice_height_in_tiles_minus1加1指定以块片行为单位的第i个矩形条带的高度。在一些实施例中,slice_height_in_tiles_minus1[i]的值应在0到NumTileRows-1的范围内,包括端值。在一些实施例中,当变量slice_height_in_tiles_minus1[i]不存在时,以下情况适用:如果NumTileRows等于1,或者变量tile_idx_delta_present_flag等于0并且tileIdx%NumTileColumns大于0,则推断slice_height_in_tiles_minus1[i]的值等于0;否则(例如,NumTileRows不等于1,并且tile_idx_delta_present_flag等于1或tileIdx%NumTileColumns等于0),当tile_idx_delta_present_flag等于1或tileIdx%NumTileColumns等于0时,slice_height_in_tiles_minus1[i]的值可以推断为等于slice_height_in_tiles_minus1[i-1]。
在一些实施例中,如图12所示,num_exp_slices_in_tile[i]的值指定包括多个矩形条带的当前块片中明确提供的条带高度的数量。在一些实施例中,num_exp_slices_in_tile[i]的值应当在0到RowHeight[tileY]-1的范围内,包括端值,其中tileY是包括第i个条带的tile行索引。在一些实施例中,当不存在时,可以推断num_exp_slices_in_tile[i]的值等于0。在一些实施例中,当num_exp_slices_in_tile[i]等于0时,变量NumSliceInTile[i]的值被推导为等于1。
在一些实施例中,如图12所示,exp_slice_height_in_ctus_minus1[j]加1的值指定以CTU行为单位的当前块片中第j个矩形条带的高度。在一些实施例中,exp_slice_height_in_ctus_minus1[j]的值应在0到RowHeight[tileY]-1的范围内,包括端值,其中tileY是当前块片的块片行索引。
在一些实施例中,如图12所示,当变量num_exp_slices_in_tile[i]大于0时,可以得出k在0至NumSlicesInTile[i]-1范围内的变量NumSlicesInTile[i]和SliceHeightInCtusMinus1[i+k]。在一些实施例中,如图8所示,当num_exp_slices_in_tile[i]的值大于0时,可以得出NumSlicesInTile[i]和SliceHeightInCtusMinus1[i+k]的值。
在一些实施例中,如图12所示,tile_idx_delta[i]的值指定第i个矩形条带中的第一个块片的块片索引与第(i+1)个矩形条带中的第一个块片的块片索引之间的差。tile_idx_delta[i]的值应该在-NumTilesInPic+1到NumTilesInPic-1的范围内,包括端值。在一些实施例中,当不存在时,可以推断tile_idx_delta[i]的值等于0。在一些实施例中,当存在时,可以推断tile_idx_delta[i]的值不等于0。
在VVC(例如,VVC草案8)中,为了定位图像中的每个条带,可以在条带头中用信号通知一个或多个条带地址。图13示出了根据本公开的一些实施例的示例条带头的语法。应当理解,图13所示的语法3可以在VVC中使用(例如,VVC草案8)。如图11所示,位流中的语法元素或变量以粗体显示。如图13所示,如果变量picture_header_in_slice_header_flag等于1,则图像头语法结构存在于条带头中。
图14示出了根据本公开的一些实施例的示例条带头的语义。应当理解,图14中所示的语义可以对应于图13所示的语法。在一些实施例中,图14中所示语义对应于VVC(例如,VVC草案8)。
在一些实施例中,如图14所示,位流一致性的要求是,在CLVS中的所有编码条带中,picture_header_in_slice_header_flag的值都应相同。
在一些实施例中,如图14所示,当变量picture_header_in_slice_header_flag对于编码条带等于1时,位流一致性的要求是CLVS中不应当存在具有等于PH_NUT的nal_unit_type的视频编码层(“VCL”)网络抽象层(“NAL”)单元。
在一些实施例中,如图14所示,当picture_header_in_slice_header_flag等于0时,当前图像中的所有编码条带应具有等于0的picture_header_in_slice_header_flag,并且当前PU应具有PH NAL单位。
在一些实施例中,如图14所示,变量slice_address可以指定条带的条带地址。在一些实施例中,当不存在时,slice_address的值可以被推断为等于0。当变量rect_slice_flag等于1且NumSliceInSubpic[CurrSubpicIdx]等于1时,slice_address的值被推断为等于0。
在一些实施例中,如图14所示,如果变量rect_slice_flag等于0,则可以应用以下内容:条带地址可以是光栅扫描块片索引;slice_address的长度可以是ceil(Log2(NumTilesInPic))位;并且slice_address的值应在0到NumTilesInPic-1的范围内,包括端值。
在一些实施例中,如图14所示,位流一致性要求适用以下约束:如果变量rect_slice_flag等于0或变量subpic_info_present_flag等于0,则slice_address的值不应等于同一编码图像的任何其他编码条带NAL单元的slice_address的值;否则,slice_subpic_id和slice_address值对不应等于同一编码图像的任何其他编码条带NAL单元的slice_subpic_id和slice_address值对。
在一些实施例中,如图14所示中,图像的条带的形状应当如此:每个CTU在解码时应当具有其包括图像边界或包括先前解码的CTU的边界的整个左边界和整个顶边界。
在一些实施例中,如图14所示,变量slice_address可以仅在满足以下两个条件之一的情况下用信号通知:使用矩形条带模式并且当前子图像中的条带数量大于1;或者不使用矩形条带模式并且当前图像中的块片数量大于1。在一些实施例中,如果以上两个条件都不满足,则在当前子图像或当前图像中仅存在一个条带。在这种情况下,由于整个子图像或整个图像是单个条带,因此不需要用信号通知条带地址。
当前VVC的设计存在许多问题。首先,在位流中用信号通知环绕偏移量pps_ref_wraparound_offset,并且在填充之前应将其设置为ERP图像宽度。为了节省比特,在信号通知之前从环绕偏移量中减去环绕偏移量的最小值(例如,CtbSizeY/MinCbSizeY)+2)。但是,填充区域的宽度远小于原始ERP图像的宽度。对于填充区域宽度可以为0的编码ERP图像尤其如此。假设要编码或解码的图像的总宽度是已知的,用信号通知原始ERP部分的宽度可能比用信号通知填充区域的宽度要花费更多的比特。结果,用信号通知以MinCbSizeY为单位的原始ERP宽度的环绕偏移量的当前信号通知的效率不高,所述环绕偏移量。
此外,还可以改进条带布局的信号通知。例如,在用信号通知条带的数量之前从条带的数量中减去1,因为图像中的条带的数量总是大于或等于1,并且用信号通知较小的正值需要较少的比特。然而,在当前VVC(例如,VVC草案8)中,子图像包括整数个完整条带。结果,图像中的条带数量大于或等于图像中的子图像数量。在当前VVC(例如,VVC草案8)中,仅当变量single_slice_per_subpic_flag为0时才用信号通知num_slices_in_pic_minus1,并且变量single_slice_per_subpic_flag等于0表示至少有一个子图像包含多个条带。因此,在这种情况下,条带数量必须大于最小值为1的子图像数量。结果,num_slices_in_pic_minus1的最小值大于零。用信号通知范围不从零开始的非负值的信号是低效的。
此外,条带地址信号通知还有其他问题。当当前图像中只有一个条带时,可能不需要信号通知条带地址,因为整个子图像或整个图像是单个条带。条带地址可以推断为0。但是,跳过条带地址信号通知的两个条件并不完整。例如,在光栅扫描条带模式下,即使块片的数量大于1,也可以只有一个包括图像中所有块片的条带,在这种情况下也可以避免条带地址信号通知。
本公开的实施例提供了解决上述问题的方法。在一些实施例中,由于填充区域的宽度通常小于原始ERP图像的宽度,原始ERP图像的宽度可以与环绕运动补偿中的环绕偏移量相同,可以建议用信号通知位流中的编码图像宽度与原始ERP图像宽度之间的差值。例如,可以提出用信号表示编码图像宽度与位流中的环绕运动补偿偏移量之间的差值,并且在解析用信号通知的差值之后执行推导以在解码器侧获得该环绕偏移量。由于编码图像宽度和环绕偏移量之间的差异通常小于环绕偏移量本身,因此该方法可以节省信号发送的位。
图15示出了根据本公开的一些实施例的示例改进的图像参数集的语法。如图15所示,以粗体示出位流中的语法元素或变量,并且以斜体类型示出来针对先前VVC的改变(例如,图7中所示的语法),其中建议的删除语法进一步以删除线示出。如图15所示,可以创建一个新的变量pps_pic_width_minus_wraparound_offset。变量
pps_pic_width_minus_wraparound_offset的值可以根据
pps_ref_wraparound_enabled_flag的值用信号通知。在一些实施例中,新变量pps_pic_width_minus_wraparound_offset可以替换原始VVC(例如,VVC草案8)中的变量pps_ref_wraparound_offset。
图16示出了根据本公开的一些实施例的示例改进的图像参数集的语义。如图16所示,对先前VVC的改变(例如,图8中所示的语义)以斜体类型示出,所建议的删除语法进一步以删除线示出。应当理解,图16中所示的语义可以对应于图15所示的语法。在一些实施例中,图16所示的语义对应于VVC(例如,VVC草案8)。
如图16所示,新变量pps_pic_width_minus_wraparound_offset的语义不同于变量pps_ref_wraparound_offset(例如,如图8所示)。变量pps_pic_width_minus_wraparound_offset可以指定图像宽度和用于计算以MinCbSizeY luma样本为单位的水平环绕位置的偏移量之间的差值。在一些实施例中,如图16所示,pps_pic_width_minus_wraparound_offset的值应小于或等于(pic_width_in_luma_samples/MinCbSizeY)-(CtbSizeY/MinCbSizeY)-2。在一些实施例中,变量PpsRefWraparoundOffset可以被设置为等于pic_width_in_luma_samples/MinCbSizeY–pps_pic_width_minus_wraparound_offset。
在一些实施例中,可以用信号通知标志wraparound_offset_type以指示所用信号通知的环绕偏移量是原始ERP图像宽度还是编码图像宽度与原始ERP图像宽度之间的差值。编码器可以从这两个值中选择较小的一个,并在位流中用信号通知它,从而可以进一步减少信号通知的开销。图17示出了根据本公开的一些实施例的具有变量wraparound_offset_type的示例图像参数集的语法。如图17所示,位流中的语法元素或变量以粗体示出,并且针对先前VVC的改变(例如,图7中所示的语法)以斜体类型示出。如图17所示,可以添加一个新变量pps_ref_wraparound_offset,以指定用于确定PpsRefWraparoundOffset的值。
图18示出了根据本公开的一些实施例的具有变量wraparound_offset_type的示例改进的图像参数集的语义。如图18所示,对先前VVC的改变(例如,图8中所示的语义)以斜体类型示出,所建议的删除语法进一步以删除线示出。应当理解,图18所示的语义可以对应于图17所示的语法。在一些实施例中,图18所示语义对应于VVC(例如,VVC草案8)。
在一些实施例中,如图18所示,可以添加一个新变量wraparound_offset_type,来指定变量pps_ref_wraparound_offset的类型。pps_ref_wraparound_offset的值应在0到((pps_pic_width_in_luma_samples/MinCbSizeY)–(CtbSizeY/MinCbSizeY)–2)/2的范围内。
在一些实施例中,如图18所示,可以导出变量PpsRefWraparoundOffset的值。例如,当变量wraparound_offset_type等于0时,用信号通知的wrapound偏移量是原始ERP图像宽度。结果,变量PpsRefWraparoundOffset等于pps_ref_wraparound_offset+(CrbSizeY/MinCbSizeY)+2。当变量wraparound_offset_type不等于0时,用信号通知的wrapound偏移量是编码图像宽度和原始ERP图像宽度之间的差值。结果,变量PpsRefWraparoundOffset等于
pps_pic_width_in_luma_samples/MinCbSizeY–pps_ref_wraparound_offset。
在先前的VVC(例如,VVC草案8)中,当变量single_slice_per_subpic_flag为0时,在PPS中用信号通知条带的数量,这意味着存在包含多于一个条带的至少一个子图像。在这种情况下,考虑到每个子图像应该包含一个或多个完整的条带,条带的数量需要大于子图像的数量,这因此导致条带的最小数量为2。这是因为一张图像中至少有一个子图像。
本公开的实施例提供了改进条带数量的信号通知的方法。图19示出了根据本公开的一些实施例的具有变量num_slices_in_pic_minus2的示例图像参数集的语法。如图19所示,位流中的语法元素或变量以粗体示出,并且针对先前VVC的改变(例如,图11中所示的语法)以斜体类型示出,其中建议的删除语法进一步以删除线示出。如图19所示,可以添加一个新变量num_slices_in_pic_minus2,以指定用于确定PpsRefWraparoundOffset的值。
图20示出了根据本公开的一些实施例的具有变量num_slices_in_pic_minus2的示例改进的图像参数集的语义。如图20所示,对先前VVC的改变(例如,图12中所示的语义)以斜体类型示出,所建议的删除语法进一步以删除线示出。应当理解,图20所示的语义可以对应于图19所示的语法。在一些实施例中,图20所示语义对应于VVC(例如,VVC草案8)。
在一些实施例中,如图20所示,变量num_slices_in_pic_minus2的值加2可以指定参考PPS的每个图像中的矩形条带的数量。在一些实施例中,如图20所示,变量num_slices_in_pic_minus2可以替换变量num_slices_in_pic_minus_1。在一些实施例中,num_slices_in_pic_minus2加2的值应在0到MaxSlicesPerPicture-2的范围内,包括端值,其中MaxSlicesPerPicture在VVC(例如,VVC草案8)中指定。当变量no_pic_partition_flag等于1时,将num_slices_in_pic_minus2的值推断为等于-1。
在一些实施例中,可以使用条带数量减去子图像数量然后减去1(例如,num_slices_in_pic_minus_subpic_num_minus1)的变量来发信号通知条带数量。图21示出了根据本公开的一些实施例的具有变量num_slices_in_pic_minus_subpic_num_minus1的示例图像参数集的语法。如图21所示,位流中的语法元素或变量以粗体示出,并且针对先前VVC的改变(例如,图11中所示的语法)以斜体类型示出,其中建议的删除语法进一步以删除线示出。
图22示出了根据本公开的一些实施例的具有变量num_slices_in_pic_minus_subpic_num_minus1的示例改进的图像参数集的语义。如图22所示,对先前VVC的改变(例如,图12中所示的语义)以斜体类型示出,所建议的删除语法进一步以删除线示出。应当理解,图22中所示的语义可以对应于图21所示的语法。在一些实施例中,图22所示的语义对应于VVC(例如,VVC草案8)。
在VVC(例如,VVC草案8)中,只有当变量single_slice_per_subpic_flag等于0时,才在PPS中用信号通知条带的数量,这可以等同于说明存在至少一个包含多于一个条带的子图像。因此,条带的数量应大于子图像的数量,因为子图像应包含一个或多个完整的条带。结果,最小条带数等于子图像的数量加1。如图21和图22所示,用信号通知条带数量减去子图像数量然后减去1(例如,
num_slices_in_pic_minus_subpic_num_minus1)而不是条带数量减去1(例如,num_slices_in_pic_minus1),以减少用信号通知的比特数量。
在一些实施例中,如图22所示,num_slices_in_pic_minus_subpic_num_minus1加上子图像数量并加1的值可以指定参考PPS的每个图像中的矩形条带的数量。在一些实施例中,num_slices_in_pic_minus_subpic_num_minus1的值应该在0到MaxSlicesPerPicture减去sps_num_subpics_minus1减去2的范围内,包括端值,其中MaxSlicesPerPicture可以在VVC(例如,VVC草案8)中指定。在一些实施例中,当变量no_pic_partition_flag等于1时,可以推断出num_slices_in_pic_minus_subpic_num_minus1的值等于(sps_num_subpics_minus1+1)。在一些实施例中,变量SliceNumInPic可以导出为SliceNumInPic=num_slices_in_pic_minus_subpic_num_minus1+sps_num_subpics_minusl+2。
本公开的实施例还提供了一种对条带地址进行信号通知的新方式。图23示出了根据本公开的一些实施例的示例更新的条带头的语法。如图23所示,位流中的语法元素或变量以粗体示出,并且对先前VVC的改变(例如,图13中所示的语法)以斜体类型示出,所建议的删除语法进一步以删除线示出。
在一些实施例中,如图23所示,可以在条带头中用信号通知变量picture_header_in_slice_header_flag,以指示在条带头内是否存在PH语法结构。在VVC(例如,VVC草案8)中具有对条带头中的PH语法结构的存在与否和一图像中的条带数量的约束。当条带头中存在PH语法结构时,图像应该只有一个条带。因此,也不需要用信号通知条带地址。因此,条带地址的信号通知可以以picture_header_in_slice_header_flag为条件。如图23所示,可以将picture_header_in_slice_header_flag的值用作决定是否用信号通知变量slice_address的另一个条件。当picture_header_in_slice_header_flag等于1时,跳过变量slice_address的信号通知。在一些实施例中,当变量slice_address未被信号通知时,可以推断其为0。
本公开的实施例还提供了用于执行视频编码的方法。图24示出了根据本公开的一些实施例的示例视频编码方法的流程图,该方法具有用信号通知视频帧的宽度与用于计算水平环绕位置的偏移量之间的差值的变量。在一些实施例中,图24中所示的方法24000可由图4所示的装置400执行。在一些实施例中,图24所示的方法24000可以根据图15所示的语法或图16所示的语义执行。在一些实施例中,图24中所示的方法24000包括根据VVC标准执行的环绕运动补偿过程。在一些实施例中,图24中所示的方法24000可以以360度视频序列作为输入来执行。
在步骤S24010中,接收环绕运动补偿标志,其中环绕运动补偿标志与图像相关联。例如,如图15或图16所示,环绕运动补偿标志可以是变量pps_ref_wraparound_enabled_flag。在一些实施例中,所述图像在位流中。在一些实施例中,图像是360度视频的一部分。
在步骤S24020中,确定环绕运动补偿标志是否被启用。例如,如图15所示,确定变量pps_ref_wraparound_enabled_flag是否等于1。
在步骤S24030中,响应于确定环绕运动补偿标志被启用,接收图像的宽度与用于确定水平环绕位置的偏移量之间的差值。例如,如图15所示,当确定变量pps_ref_wraparound_enabled_flag等于1时,可以接收或用信号通知变量pps_pic_width_minus_wraparound_offset。在一些实施例中,所述差值小于或等于所述图像的宽度除以最小亮度编码块的大小减去亮度编码树块的大小除以最小亮度编码块的大小减去2。
在一些实施例中,在S24030中,接收所述差值包括接收环绕偏移类型标志。例如,如图17和图18所示,可以用信号通知标志wraparound_offset_type,以指示所通知的环绕偏移量的值是原始ERP图像宽度还是编码图像宽度与原始ERP图像宽度之间的差值。在一些实施例中,如图17和图18所示,标志wraparound_offset_type的值可以是0或1。
在步骤S24040中,根据环绕运动补偿标志和所述差值对图像进行运动补偿。例如,可以根据图15和图16中所示的变量pps_ref_wraparound_enabled_flag和pps_pic_width_minus_wraparound_offset对图像进行运动补偿。在一些实施例中,执行所述运动补偿还包括:根据所述图像的宽度和所述差值确定环绕运动补偿偏移量,以及根据所述环绕运动补偿偏移量对所述图像执行所述运动补偿。在一些实施例中,环绕运动补偿偏移量可以被确定为图像的宽度除以最小亮度编码块的大小减去所述差值。
图25示出了根据本公开的一些实施例的示例视频编码方法的流程图,该视频编码方法具有用信号通知视频帧中的条带数量减去2的变量。在一些实施例中,图25中所示的方法25000可以由图4所示的装置400执行。在一些实施例中,图25所示的方法25000可以根据图19所示的语法或图20所示的语义来执行。在一些实施例中,图25中所示的方法25000可以根据VVC标准执行。
在步骤S25010中,接收用于编码的图像。在一些实施例中,所述图像可以包括一个或多个条带。在一些实施例中,所述图像在位流中。在一些实施例中,所述一个或多个条带是矩形条带。
在步骤S25020中,在图像的图像参数集中用信号通知指示图像中的条带数量减去2的变量。例如,该变量可以是图19或图20中所示的num_slices_in_pic_minus2。在一些实施例中,变量的值加2可以指定每个图像中的矩形条带的数量。在一些实施例中,变量是PPS的一部分。在一些实施例中,类似于图20所示的语义,变量num_slices_in_pic_minus2可以替换变量num_slices_in_pic_minus_1。
图26示出了根据本公开的一些实施例的具有一变量的示例视频编码方法的流程图,其中,该变量用信号通知指示视频帧中的条带的数量减去视频帧中的子图像的数量减去1的变量。在一些实施例中,图26中所示的方法26000可由图4所示的装置400执行。在一些实施例中,图26所示的方法26000可以根据图21所示的语法或图22所示的语义执行。在一些实施例中,图26中所示的方法26000可以根据VVC标准执行。
在步骤S26010中,接收用于编码的图像。在一些实施例中,所述图像可以包括一个或多个条带和一个或多个子图像。在一些实施例中,所述视频帧处于位流中。在一些实施例中,所述一个或多个条带是矩形条带。
在步骤S26020中,在图像的图像参数集中用信号通知指示图像中的条带数量减去图像中的子图像数量减1的变量。例如,变量可以如图21和图22所示的num_slices_in_pic_minus_subpic_num_minus1。在一些实施例中,最小条带数量可以等于子图像的数量加1。在一些实施例中,如图21和图22所示,可以用信号通知条带数量减去子图像数量后减去1(例如,num_slices_in_pic_minus_subpic_num_minus1),而不是条带数量减去1(例如,num_slices_in_pic_minus1),以减少用信号通知的比特数。在一些实施例中,变量是PPS的一部分。在一些实施例中,如图22所示,num_slices_in_pic_minus_subpic_num_minus1加上子图像数量并plus 1的值可以指定参考PPS的每个图像中的矩形条带的数量。在一些实施例中,类似于图20所示的语义,变量num_slices_in_pic_minus2可以替换变量num_slices_in_pic_minus_1。
在一些实施例中,如步骤S26020所示,可以根据指示视频帧中的条带数量减去视频帧中的子图像数量减去1的变量来确定指示图像中的条带数量的变量。例如,如图21和图22所示,可以根据变量num_slices_in_pic_minus_subpic_num_minus1导出标志或变量SliceNumInPic。
图27示出了根据本公开的一些实施例的具有一变量的示例视频编码方法的流程图,该变量指示在视频帧的条带头内是否存在图像头语法结构。在一些实施例中,图27中所示的方法27000可以由图4所示的装置400执行。在一些实施例中,图27所示的方法27000可以根据图23所示的语法执行。在一些实施例中,图27中所示的方法27000可以根据VVC标准执行。
在步骤S27010中,接收用于编码的图像。图像包括一个或多个条带。在一些实施例中,所述图像在位流中。在一些实施例中,所述一个或多个条带是矩形条带。
在步骤S27020中,用信号通知指示在一个或多个条带的条带头中是否存在用于该图像的图像头语法结构的变量。例如,变量可以如图23所示的picture_header_in_slice_header_flag。在一些实施例中,如图23所示,当PH语法结构存在于条带头中时,图像可能只有一个条带。因此,也不需要用信号通知条带地址。从而,条带地址的信号通知可以以变量picture_header_in_slice_header_flag为条件。在一些实施例中,变量是PPS的一部分。
在一些实施例中,还提供了包括指令的非暂时性计算机可读存储介质,并且所述指令可以由设备(诸如所公开的编码器和解码器)执行,用于执行上述方法。非暂时性介质的常见形式包括,例如,软盘、硬盘、固态驱动器、磁带或任何其他磁性数据存储介质、CD-ROM、任何其他光学数据存储介质、任何具有孔图案的物理介质、RAM、PROM和EPROM、FLASH-EPROM或任何其他闪存、NVRAM、高速缓存、寄存器、任何其他存储芯片或盒式存储、以及它们的联网版本。该设备可以包括一个或多个处理器(cpu)、输入/输出接口、网络接口和/或存储器。
应该注意的是,本文中的关系术语,例如“第一”和“第二”,仅用于将实体或操作与另一实体或操作区分开来,并不要求或暗示这些实体或操作之间的任何实际关系或顺序。此外,词语“包括”、“具有”、“包含”和“包括”和其他类似的形式在含义上是等效的,并且是开放式的,因为在这些词语中的任何一个后面的一个或多个项目并不意味着是这样一个或多个项目的详尽列表,或者意味着仅限于列出的一个或多个项目。
如本文所用,除非另有特别说明,术语“或”包括所有可能的组合,除非在不可行的情况下。例如,如果声明数据库可包括A或B,则除非另有明确声明或不可行,否则数据库可包括A、或B、或A和B。作为第二示例,如果声明数据库可以包括A、B或C,则除非另有明确说明或不可行,否则数据库可以包括A、或B、或C、或A和B、或A和C、或B和C、或A,B和C。
应当理解,上述实施例可以通过硬件、或软件(程序代码)、或硬件和软件的组合来实现。如果通过软件实现,则可以将其存储在上述计算机可读介质中。该软件在由处理器执行时可以执行所公开的方法。本公开中描述的计算单元和其他功能单元可以通过硬件、或软件、或硬件和软件的组合来实现。本领域普通技术人员还将理解,上述多个模块/单元可以组合为一个模块/单元,并且上述模块/单元中的每个模块/单元可以进一步划分为多个子模块/子单元。
在前面的说明书中,已经参考许多具体细节描述了实施例,这些具体细节可以随实施而变化。可以对所描述的实施例进行某些修改和改变。通过考虑本文公开的本发明的说明书和实践,其他实施例对于本领域技术人员来说是显而易见的。本说明书和实施例仅被认为是示例性的,本发明的真正范围和精神由所附的权利要求指示。附图所示的步骤序列仅用于说明目的,而不旨在限于任何特定的步骤序列。因此,本领域技术人员可以理解,这些步骤可以在实施相同方法的同时以不同的顺序执行。
可以使用以下条款进一步描述实施例:
1、一种视频解码方法,包括:
接收环绕运动补偿标志;
基于所述环绕运动补偿标志确定是否启用环绕运动补偿;
响应于确定启用所述环绕运动补偿,接收指示图像的宽度与用于确定水平环绕位置的偏移量之间的差值的数据;以及
根据所述环绕运动补偿标志和所述差值执行运动补偿。
2、根据条款1所述的方法,其中所述差值以最小亮度编码块的大小为单位。
3、根据条款2所述的方法,其中所述差值小于或等于(pps_pic_width_in_luma_samples/MinCbSizeY)-(CtbSizeY/MinCbSizeY)–2,其中pps_pic_width_in_luma_samples是以亮度样本为单位的所述图像的宽度,MinCbSizeY是最小亮度编码块的大小,CtbSizeY是亮度编码树块的大小。
4、根据条款1所述的方法,其中执行所述运动补偿还包括:
根据所述图像的宽度和所述差值确定环绕运动补偿偏移量;以及
根据所述环绕运动补偿偏移量执行所述运动补偿。
5、根据条款4所述的方法,其中根据所述图像的宽度和所述差值确定所述环绕运动补偿偏移还包括:
将以亮度样本为单位的图像的宽度除以最小亮度编码块的大小,以生成第一值;以及
将所述环绕运动补偿偏移量确定为等于所述第一值减去所述差值。
6、根据条款1所述的方法,其中接收指示所述差值的所述数据进一步包括:
接收环绕偏移类型标志;
确定所述环绕偏移类型标志是否等于第一值或第二值;
响应于确定所述环绕偏移类型标志等于所述第一值,接收指示所述图像的宽度与用于计算水平环绕位置的偏移量之间的差值的数据;以及
响应于确定所述环绕偏移类型标志等于所述第二值,接收指示用于计算水平环绕位置的偏移量的数据。
7、根据条款6所述的方法,其中所述第一值和所述第二值中的每一个是0或1。
8、根据条款1所述的方法,其中根据通用视频编码标准执行所述运动补偿。
9、根据条款1所述的方法,其中所述图像是360度视频序列的一部分。
10、根据条款1所述的方法,其中在图像参数集(PPS)中用信号通知所述环绕运动补偿标志和所述差值。
11、一种视频解码方法,包括:
用信号通知一环绕运动补偿标志,所述标志指示是否启用环绕运动补偿;
响应于所述环绕运动补偿标志指示所述环绕运动补偿被启用,用信号通知指示所述图像的宽度与用于确定水平环绕位置的偏移量之间的差值的数据;以及
根据所述环绕运动补偿标志和所述差值执行运动补偿。
12、根据条款11所述的方法,其中所述差值以最小亮度编码块的大小为单位。
13、根据条款12所述的方法,其中所述差值小于或等于(pps_pic_width_in_luma_samples/MinCbSizeY)-(CtbSizeY/MinCbSizeY)–2,其中pps_pic_width_in_luma_samples是以亮度样本为单位的所述图像的宽度,MinCbSizeY是最小亮度编码块的大小,CtbSizeY是亮度编码树块的大小。
14、根据条款11所述的方法,其中执行所述运动补偿还包括:
根据所述图像的宽度和差值确定环绕运动补偿偏移量;以及
根据所述环绕运动补偿偏移量执行所述运动补偿。
15、根据条款14所述的方法,其中根据所述所述图像的所述宽度和所述差值确定所述环绕运动补偿偏移量进一步包括:
将以亮度样本为单位的所述图像的宽度除以最小亮度编码块的大小,以生成第一值;以及
将所述环绕运动补偿偏移量确定为等于所述第一值减去所述差值。
16、根据条款11所述的方法,其中,用信号通知指示所述差值的所述数据还包括:
用信号通知环绕偏移类型标志,其中所述环绕偏移类型标志的值是第一值或第二值;
响应于所述环绕偏移类型标志的值等于所述第一值,用信号通知指示所述图像的宽度与用于计算水平环绕位置的偏移量之间的差值的数据;以及
响应于所述环绕偏移类型标志的值等于所述第二值,用信号通知用于计算水平环绕位置的偏移量的数据。
17、根据条款16所述的方法,其中所述第一值和所述第二值中的每一个是0或1。
18、根据条款11所述的方法,其中根据通用视频编码标准执行所述运动补偿。
19、根据条款11所述的方法,其中所述图像是360度视频序列的一部分。
20、根据条款11所述的方法,其中,在图像参数集(PPS)中用信号通知所述环绕运动补偿标志和所差值。
21、一种视频编码方法,包括:
接收用于编码的图像,其中所述图像包括一个或多个条带;以及
在所述图像的图像参数集中,用信号通知指示视频帧中的条带数量减去2的变量。
22、根据条款21所述的方法,其中所述图像在位流中。
23、根据条款21所述的方法,其中根据通用视频编码标准对所述图像进行编码。
24、根据条款21所述的方法,其中所述一个或多个条带是矩形条带。
25、一种视频编码方法,包括:
接收用于编码的图像,其中所述图像包括一个或多个条带和一个或多个子图像;以及
在所述图像的图像参数集中,用信号通知指示所述图像中的条带数量减去图像中的子图像数量减去1的变量。
26、根据条款25所述的方法,其中所述图像在位流中。
27、根据条款25所述的方法,还包括:
根据所述指示所述图像中的条带数量减去所述图像中的子图像数量减去1的变量,确定指示所述图像中的条带数量的变量。
28、根据条款25所述的方法,其中根据通用视频编码标准对所述图像进行编码。
29、根据条款25所述的方法,其中所述一个或多个条带是矩形条带。
30、一种视频编码方法,包括:
接收用于编码的图像,其中,所述图像包括一个或多个条带;
用信号通知指示所述一个或多个条带的条带头中是否存在所述图像的图像头语法结构的变量;以及
根据所述变量用信号通知条带地址。
31、根据条款30所述的方法,其中所述图像在位流中。
32、根据条款30所述的方法,其中根据通用视频编码标准对所述图像进行编码。
33、根据条款30所述的方法,其中所述一个或多个条带是矩形的。
34、一种用于执行视频数据处理的系统,所述系统包括:
存储指令集的存储器;以及
被配置为执行所述指令集以使所述系统执行以下操作的处理器:
接收环绕运动补偿标志;
基于所述环绕运动补偿标志确定是否启用环绕运动补偿;
响应于确定启用所述环绕运动补偿,接收指示图像的宽度与用于确定水平环绕位置的偏移量之间的差值的数据;以及
根据所述环绕运动补偿标志和所述差值执行运动补偿。
35、根据条款34所述的系统,其中所述差值以最小亮度编码块的大小为单位。
36、根据条款35所述的系统,其中所述差值小于或等于(pps_pic_width_in_luma_samples/MinCbSizeY)-(CtbSizeY/MinCbSizeY)–2,其中pps_pic_width_in_luma_samples是以亮度样本为单位的所述图像的宽度,MinCbSizeY是最小亮度编码块的大小,CtbSizeY是亮度编码树块的大小。
37、根据条款34所述的系统,其中,在执行所述运动补偿时,所述处理器被配置为执行所述指令集以使所述系统执行:
根据所述图像的宽度和所述差值确定环绕运动补偿偏移量;以及
根据所述环绕运动补偿偏移量执行所述运动补偿。
38、根据条款37所述的系统,其中,在根据所述图像的所述宽度和所述差异确定所述环绕运动补偿偏移时,所述处理器被配置为执行所述指令集以使所述系统执行:
将以亮度样本为单位的图像的宽度除以最小亮度编码块的大小,以生成第一值;以及
将所述环绕运动补偿偏移量确定为等于所述第一值减去所述差值。
39、根据条款34所述的系统,其中,在接收指示所述差值的所述数据时,所述处理器被配置为执行所述指令集以使所述系统执行:
接收环绕偏移类型标志;
确定所述环绕偏移类型标志是否等于第一值或第二值;
响应于确定所述环绕偏移类型标志等于所述第一值,接收指示所述图像的宽度与用于计算水平环绕位置的偏移量之间的差值的数据;以及
响应于确定所述环绕偏移类型标志等于所述第二值,接收指示用于计算水平环绕位置的偏移量的数据。
40、根据条款39所述的系统,其中所述第一值和所述第二值中的每一个是0或1。
41、根据条款34所述的系统,其中根据通用视频编码标准执行所述运动补偿。
42、根据条款34所述的系统,其中所述图像是360度视频序列的一部分。
43、根据条款34所述的系统,其中,在图像参数集(PPS)中用信号通知所述环绕运动补偿标志和所述差值。
44、一种用于执行视频数据处理的系统,所述系统包括:
存储指令集的存储器;以及
被配置为执行所述指令集以使所述系统执行以下操作的处理器:
用信号通知一环绕运动补偿标志,所述标志指示是否启用环绕运动补偿;
响应于所述环绕运动补偿标志指示所述环绕运动补偿被启用,用信号通知指示所述图像的宽度与用于确定水平环绕位置的偏移量之间的差值的数据;以及
根据所述环绕运动补偿标志和所述差值执行运动补偿。
45、根据条款44所述的系统,其中所述差值以最小亮度编码块的大小为单位。
46、根据条款45所述的系统,其中所述差值小于或等于(pps_pic_width_in_luma_samples/MinCbSizeY)-(CtbSizeY/MinCbSizeY)–2,其中pps_pic_width_in_luma_samples是以亮度样本为单位的所述图像的宽度,MinCbSizeY是最小亮度编码块的大小,CtbSizeY是亮度编码树块的大小。
47、根据条款44所述的系统,其中,在执行所述运动补偿时,所述处理器被配置为执行所述指令集以使所述系统执行:
根据所述图像的宽度和差值确定环绕运动补偿偏移量;以及
根据所述环绕运动补偿偏移量执行所述运动补偿。
48、根据条款47所述的系统,其中,在根据所述图像的所述宽度和所述差值确定所述环绕运动补偿偏移量时,所述处理器被配置为执行所述指令集以使所述系统执行:
将以亮度样本为单位的所述图像的宽度除以最小亮度编码块的大小,以生成第一值;以及
将所述环绕运动补偿偏移量确定为等于所述第一值减去所述差值。
49、根据条款44所述的系统,其中,在接收指示所述差值的所述数据时,所述处理器被配置为执行所述指令集以使所述系统执行:
用信号通知环绕偏移类型标志,其中所述环绕偏移类型标志的值是第一值或第二值;
响应于所述环绕偏移类型标志的值等于所述第一值,用信号通知指示所述图像的宽度与用于计算水平环绕位置的偏移量之间的差值的数据;以及
响应于所述环绕偏移类型标志的值等于所述第二值,用信号通知用于计算水平环绕位置的偏移量的数据。
50、根据条款49所述的系统,其中所述第一值和所述第二值中的每一个是0或1。
51、根据条款44所述的系统,其中根据通用视频编码标准执行所述运动补偿。
52、根据条款44所述的系统,其中所述图像是360度视频序列的一部分。
3、根据条款44所述的系统,其中在图像参数集(PPS)中用信号通知所述环绕运动补偿标志和所述差值。
54、一种用于执行视频编码的系统,所述系统包括:
存储指令集的存储器;以及
被配置为执行所述指令集以使所述系统执行以下操作的处理器:
接收用于编码的图像,其中所述图像包括一个或多个条带;以及
在所述图像的图像参数集中,用信号通知指示视频帧中的条带数量减去2的变量。
55、根据条款54所述的系统,其中所述图像在位流中。
56、根据条款54所述的系统,其中根据通用视频编码标准对所述图像进行编码。
57、根据条款54所述的系统,其中所述一个或多个条带是矩形条带。
58、一种用于执行视频编码的系统,所述系统包括:
存储指令集的存储器;以及
被配置为执行所述指令集以使所述系统执行以下操作的处理器:
接收用于编码的图像,其中所述图像包括一个或多个条带和一个或多个子图像;以及
在所述图像的图像参数集中,用信号通知指示所述图像中的条带数量减去图像中的子图像数量减去1的变量。
59、根据条款58所述的系统,其中所述图像在位流中。
60、根据条款58所述的系统,其中所述处理器被配置为执行所述指令集以使所述系统执行:
根据所述指示所述图像中的条带数量减去所述图像中的子图像数量减去1的变量,确定指示所述图像中的条带数量的变量。
61、根据条款58所述的系统,其中根据通用视频编码标准对所述图像进行编码。
62、根据条款58所述的系统,其中所述一个或多个条带是矩形条带。
63、一种用于执行视频编码的系统,所述系统包括:
存储指令集的存储器;以及
被配置为执行所述指令集以使所述系统执行以下操作的处理器:
接收用于编码的图像,其中,所述图像包括一个或多个条带;
用信号通知指示所述一个或多个条带的条带头中是否存在所述图像的图像头语法结构的变量;以及
根据所述变量用信号通知条带地址。
64、根据条款63所述的系统,其中所述图像在位流中。
65、根据条款63所述的系统,其中根据通用视频编码标准对所述图像进行编码。
66、根据条款63所述的系统,其中所述一个或多个条带是矩形的。
67、一种存储指令集的非暂时性计算机可读介质,所述指令集可由装置的一个或多个处理器执行,以使所述装置发起用于执行视频数据处理的方法,所述方法包括:
接收环绕运动补偿标志;
基于所述环绕运动补偿标志确定是否启用环绕运动补偿;
响应于确定启用所述环绕运动补偿,接收指示图像的宽度与用于确定水平环绕位置的偏移量之间的差值的数据;以及
根据所述环绕运动补偿标志和所述差值执行运动补偿。
68、根据条款67所述的非暂时性计算机可读介质,其中所述差值以最小亮度编码块的大小为单位。
69、根据条款68所述的非暂时性计算机可读介质,其中所述差值小于或等于(pps_pic_width_in_luma_samples/MinCbSizeY)-(CtbSizeY/MinCbSizeY)–2,其中pps_pic_width_in_luma_samples是以亮度样本为单位的所述图像的宽度,MinCbSizeY是最小亮度编码块的大小,CtbSizeY是亮度编码树块的大小。
70、根据条款67所述的非暂时性计算机可读介质,其中执行所述运动补偿还包括:
根据所述图像的宽度和所述差值确定环绕运动补偿偏移量;以及
根据所述环绕运动补偿偏移量执行所述运动补偿。
71、根据条款70所述的非暂时性计算机可读介质,其中根据所述图像的所述宽度和所述差值确定所述环绕运动补偿偏移量进一步包括:
将以亮度样本为单位的图像的宽度除以最小亮度编码块的大小,以生成第一值;以及
将所述环绕运动补偿偏移量确定为等于所述第一值减去所述差值。
72、根据条款67所述的非暂时性计算机可读介质,其中接收指示差值的数据进一步包括:
接收环绕偏移类型标志;
确定所述环绕偏移类型标志是否等于第一值或第二值;
响应于确定所述环绕偏移类型标志等于所述第一值,接收指示所述图像的宽度与用于计算水平环绕位置的偏移量之间的差值的数据;以及
响应于确定所述环绕偏移类型标志等于所述第二值,接收指示用于计算水平环绕位置的偏移量的数据。
73、根据条款72所述的非暂时性计算机可读介质,其中所述第一值和所述第二值中的每一个是0或1。
74、根据条款67所述的非暂时性计算机可读介质,其中根据通用视频编码标准执行所述运动补偿。
75、根据条款67所述的非暂时性计算机可读介质,其中所述图像是360度视频序列的一部分。
76、根据条款67所述的非暂时性计算机可读介质,其中,在图像参数集(PPS)中用信号通知所述环绕运动补偿标志和所述差值。
77、一种存储指令集的非暂时性计算机可读介质,所述指令集可由装置的一个或多个处理器执行,以使所述装置发起用于执行视频数据处理的方法,所述方法包括:
用信号通知一环绕运动补偿标志,所述标志指示是否启用环绕运动补偿;
响应于所述环绕运动补偿标志指示所述环绕运动补偿被启用,用信号通知指示所述图像的宽度与用于确定水平环绕位置的偏移量之间的差值的数据;以及
根据所述环绕运动补偿标志和所述差值执行运动补偿。
78、根据条款77所述的非暂时性计算机可读介质,其中所述差值以最小亮度编码块的大小为单位。
79、根据条款78所述的非暂时性计算机可读介质,其中所述差值小于或等于(pps_pic_width_in_luma_samples/MinCbSizeY)-(CtbSizeY/MinCbSizeY)–2,其中pps_pic_width_in_luma_samples是以亮度样本为单位的所述图像的宽度,MinCbSizeY是最小亮度编码块的大小,CtbSizeY是亮度编码树块的大小。
80、根据条款77所述的非暂时性计算机可读介质,其中执行所述运动补偿还包括:
根据所述图像的宽度和差值确定环绕运动补偿偏移量;以及
根据所述环绕运动补偿偏移量执行所述运动补偿。
81、根据条款80所述的非暂时性计算机可读介质,其中根据所述图像的所述宽度和所述差值确定所述环绕运动补偿偏移量进一步包括:
将以亮度样本为单位的所述图像的宽度除以最小亮度编码块的大小,以生成第一值;以及
将所述环绕运动补偿偏移量确定为等于所述第一值减去所述差值。
82、根据条款77所述的非暂时性计算机可读介质,其中接收指示差异的数据进一步包括:
用信号通知环绕偏移类型标志,其中所述环绕偏移类型标志的值是第一值或第二值;
响应于所述环绕偏移类型标志的值等于所述第一值,用信号通知指示所述图像的宽度与用于计算水平环绕位置的偏移量之间的差值的数据;以及
响应于所述环绕偏移类型标志的值等于所述第二值,用信号通知用于计算水平环绕位置的偏移量的数据。
83、根据条款82所述的非暂时性计算机可读介质,其中所述第一值和所述第二值中的每一个是0或1。
84、根据条款77所述的非暂时性计算机可读介质,其中根据通用视频编码标准执行所述运动补偿。
85、根据条款77所述的非暂时性计算机可读介质,其中所述图像是360度视频序列的一部分。
86、根据条款77所述的非暂时性计算机可读介质,其中在图像参数集(PPS)中用信号通知所述环绕运动补偿标志和所述差值。
87、一种存储指令集的非暂时性计算机可读介质,所述指令集可由装置的一个或多个处理器执行以使所述装置发起用于执行视频编码的方法,所述方法包括:
接收用于编码的图像,其中所述图像包括一个或多个条带;以及
在所述图像的图像参数集中,用信号通知指示视频帧中的条带数量减去2的变量。
88、根据条款87所述的非暂时性计算机可读介质,其中所述图像在位流中。
89、根据条款87所述的非暂时性计算机可读介质,其中根据通用视频编码标准对所述图像进行编码。
90、根据条款87所述的非暂时性计算机可读介质,其中所述一个或多个条带是矩形条带。
91、一种存储指令集的非暂时性计算机可读介质,所述指令集可由装置的一个或多个处理器执行,以使所述装置发起用于执行视频编码的方法,所述方法包括:
接收用于编码的图像,其中所述图像包括一个或多个条带和一个或多个子图像;以及
在所述图像的图像参数集中,用信号通知指示所述图像中的条带数量减去图像中的子图像数量减去1的变量。
92、根据条款91所述的非暂时性计算机可读介质,其中所述图像在位流中。
93、根据条款91所述的非暂时性计算机可读介质,还包括:
根据所述指示所述图像中的条带数量减去所述图像中的子图像数量减去1的变量,确定指示所述图像中的条带数量的变量。
94、根据条款91所述的非暂时性计算机可读介质,其中根据通用视频编码标准对所述图像进行编码。
95、根据条款91所述的非暂时性计算机可读介质,其中所述一个或多个条带是矩形条带。
96、一种存储指令集的非暂时性计算机可读介质,所述指令集可由装置的一个或多个处理器执行,以使所述装置发起用于执行视频编码的方法,所述方法包括:
接收用于编码的图像,其中,所述图像包括一个或多个条带;
用信号通知指示所述一个或多个条带的条带头中是否存在所述图像的图像头语法结构的变量;以及
根据所述变量用信号通知条带地址。
97、根据条款96所述的非暂时性计算机可读介质,其中所述图像在位流中。
98、根据条款96所述的非暂时性计算机可读介质,其中根据通用视频编码标准对所述图像进行编码。
99、根据条款96所述的非暂时性计算机可读介质,其中所述一个或多个条带是矩形的。
在附图和说明书中,已经公开了示例性实施例。然而,可以对这些实施例进行许多变化和修改。因此,尽管采用了特定的术语,但它们仅在通用和描述性的意义上使用,而不是出于限制的目的。