基于图块组ID对图片进行编码和解码
文献发布时间:2023-06-19 11:00:24
相关申请的交叉引用
本申请要求2018年10月2日提交的美国申请No.62/740360的优先权,其公开内容通过引用整体并入本文。
技术领域
本公开一般性地涉及视频编码和解码技术,并且更具体地,涉及图片的片段的编码和解码。
背景技术
高效率视频编码(HEVC)是由ITU-T和运动图片专家组(MPEG)二者标准化的基于块的视频编解码,利用空间预测技术和时间预测技术二者。空间预测减少了空间冗余,并且使用来自当前图片的同一帧内的帧内(I)预测来实现。时间预测减少了时间冗余,并且使用先前解码的参考图片,在块级别上使用帧间(P)或双向帧间(B)预测来实现。然而,无论特定类型的预测技术如何,得到的原始像素数据和经预测的像素数据之间的差异(被称为“残差”)被变换到频域并被量化。对经变换的残差进行量化,其水平由量化参数(QP)确定,有助于控制比特率和视频质量之间的折衷。
然后,经变换和量化的残差在被发送到解码器之前,与必要的预测参数一起被熵编码。也被熵编码的预测参数包括预测模式和运动矢量。接收到后,解码器执行熵解码、逆量化和逆变换以获得残差。然后,解码器使用帧内预测或帧间预测技术从残差重构图像。
MPEG和ITU-T都正在联合视频探索组(JVET)内研究HEVC的后继者。该视频编解码的名称为“多功能视频编码(VVC)”。
发明内容
本文的实施例对于对被划分为图片片段(本文中被称为“图块”)的图片进行编码和解码是有用的。例如,在一个或多个实施例中,图片具有灵活分区结构,其中第一图块的边缘与图片中两个或多个相邻图块的对应边缘邻接。在这些实施例中,图块组ID可以用于标识每个图块属于图片的哪个区域。利用本公开的实施例,并非区域的所有部分都需要在空间上相邻。
因此,本公开的一个或多个实施例提供了一种对图片进行解码的方法。在一个实施例中,该方法包括:接收包括一个或多个编码图片片段组的比特流,其中,每个图片片段组包括组ID(例如,如上所述的图块组ID)和一个或多个编码图片片段;从比特流提取第一图片片段组作为单个实体;以及以预定顺序对所述第一图片片段组中的所述一个或多个图片片段进行解码。
应当注意,通常知晓“图片片段组”为图片的子部分。另外,如本领域普通技术人员所知道的,通常还知晓“图块组”是图片的子部分。因此,如稍后更详细描述的,图片片段组与图块组指同一事物。
本公开的实施例还提供了一种解码器。在一个实施例中,解码器包括通信接口电路和处理电路。通信接口电路被配置为从编码器接收包括一个或多个编码图片片段组的比特流,其中,每个图片片段组包括组ID和一个或多个编码图片片段。处理电路被配置为从比特流中提取第一图片片段组作为单个实体,并且以预定顺序对第一图片片段组中的所述一个或多个图片片段进行解码。
本公开的实施例还提供一种对图片进行编码的方法。在一个实施例中,该方法包括:定义图片片段的结构,其中,定义所述结构包括:将图片分为多个图片片段组,并且向每个图片片段组指派唯一的组ID。该方法还包括:针对每个图片片段组,将该图片片段组分为一个或多个图块,并且向该图片片段组中的每个图片片段指派该图片片段组的组ID。该方法还包括:将每个图片片段组的图片片段编码到比特流中,以及向解码器发送编码比特流。
本公开的实施例还提供了一种编码器,其包括通信接口电路和处理电路。在一个实施例中,通信接口电路被配置为向解码器发送包括一个或多个编码图片片段组的比特流,其中,每个图片片段组包括组ID和一个或多个编码图片片段。处理电路被配置为通过将图片分为多个图片片段组并向每个图片片段组指派唯一的组ID来定义图片片段的结构。此外,处理电路被配置为针对每个图片片段组,将该图片片段组分为一个或多个图片片段,并且向该图片片段组中的每个图片片段指派该图片片段组的组ID。处理电路还被配置为将每个图片片段组的图片片段编码到比特流中,并且经由通信接口电路向解码器发送编码比特流。
本公开的实施例还提供了一种解码器电路,被配置为接收包括一个或多个编码图片片段组的比特流,其中,每个图片片段组包括组ID和一个或多个编码图片片段;从比特流中提取第一图片片段组作为单个实体;以及以预定顺序对第一图片片段组中的所述一个或多个图片片段进行解码。
本公开的实施例还提供了一种编码器电路,被配置为向解码器发送包括一个或多个编码图片片段组的比特流,其中,每个图片片段组包括组ID和一个或多个编码图片片段。编码器电路还被配置为通过将图片分为多个图片片段组并向每个图片片段组指派唯一的组ID来定义图片片段的结构。编码器电路还被配置为针对每个图片片段组,将该图片片段组分为一个或多个图片片段,并且向该图片片段组中的每个图片片段指派该图片片段组的组ID。编码器电路还被配置为将每个图片片段组的图片片段编码到比特流中,以及经由通信接口电路向解码器发送编码比特流。
本领域技术人员理解,本文的实施例还包括对应的装置、计算机程序和包含这些计算机程序的载体。例如,在一个或多个实施例中,计算机程序包括指令,该指令在由解码器中的处理电路执行时,使解码器执行根据上述各个处理中的任一个。
在一个或多个实施例中,计算机程序包括指令,该指令在由编码器中的处理电路执行时,使编码器执行根据上述各个处理中的任一个。
在这方面,计算机程序可以包括与上述装置或单元相对应的一个或多个代码单元或模块。
实施例还包括包含这样的计算机程序的载体。载体可以包括电信号、光信号、无线电信号或计算机可读存储介质之一。
本文的实施例还提供了一种包含计算机程序的非暂时性计算机可读存储介质,该计算机程序在由解码器中的处理电路执行时,使解码器如上所述执行。
本文的实施例还提供一种包含计算机程序的非暂时性计算机可读存储介质,该计算机程序在由编码器中的处理电路执行时,使编码器如上所述执行。
附图说明
图1示出了使用QTBT将CTU划分为CU的示例。
图2示出了示例图块划分。
图3A至图3B示出了具有高分辨率图块和低分辨率图块的示例图块化结构。
图4示出了在HEVC中不支持的图块结构的示例。
图5示出了可以在HEVC中得到支持的示例图块结构。
图6A至图6B示出了并排帧封装(图6A)和上下帧封装(图6B)的示例。
图7A至图7C分别示出了3DoF、3DoF+和6DoF视频的用例。
图8示出了利用并排帧封装的立体图片。
图9A示出了当不使用图块组时图块在比特流中的顺序。白色表示属于左视图的图块,灰色表示属于右视图的图块。
图9B示出了当使用图块组时图块在比特流中的顺序。白色表示属于左视图的图块,灰色表示属于右视图的图块。
图10是示出了根据一个实施例的在解码器处实现的方法的流程图。
图11是示出了根据一个实施例的从比特流中解码图片或图片的一部分(具有以图块组ID分组的图块)的方法的流程图。
图12是示出了根据一个实施例的从比特流中提取图片中的图片的一部分(具有以图块组ID分组的图块)的方法的流程图。
图13是示出了根据一个实施例的用于将图片(具有使用图块组ID的图块)编码到比特流中的方法的流程图。
图14A至图14D示出了根据一个实施例的立方体贴图和扫描顺序。
图15示出了根据一个实施例的在将具有不同分辨率的立方体贴图封装到帧中时使用图块组的示例。
图16示出了根据一个实施例的片段化矩形帧封装布置的重新布置。
图17示出了根据一个实施例的用于纹理加深度的帧封装。
图18示出了根据一个实施例的用于使用图块组的3DoF+视频的帧封装的示例。每个图块组可以由用于空间随机接入的若干图块组成。
图19示出了根据一个实施例的利用三个图块组编码的视频的示例。
图20示出了根据一个实施例的比特流所支持的一些宽高比的示例。
图21是根据一个实施例配置的编码器的示意图。
图22是根据一个实施例配置的解码器的示意图。
图23是示出了根据一个实施例的编码器的一些功能组件的示意框图。
图24是示出了根据一个实施例的解码器的一些功能组件的示意框图。
图25是根据本公开的一个实施例的包括编码器和解码器在内的系统。
具体实施方式
如前所述,HEVC是由ITU-T和MPEG标准化的基于块的视频编解码,利用时间预测和空间预测二者。HEVC使用块结构,其中通过四叉树(QT)结构来划分每个顶层编码块,即,编码块划分中的最大块,本文中被称为编码树单元(CTU)。该划分产生编码块分区,本文中被称为编码单元(CU)。然后,可以利用四叉树结构将CU进一步递归地划分为较小的大小相等的CU,直到8×8的块大小。
VVC的当前版本中的块结构与HEVC中的块结构不同。具体地,VVC中的块结构被称为四叉树加二叉树(QTBT)加三叉树(TT)块结构(QTBT+TT)。QTBT+TT中的CU可以具有正方形或矩形形状。与HEVC中一样,首先通过四叉树结构对编码树单元(CTU)进行划分。然后,以二叉树结构在垂直或水平方向上用大小相等的分区进一步划分CTU,以形成编码块(也被称为编码单元-CU)。因此,块可以具有正方形或矩形形状。
编码器可以在比特流中设置四叉树和二叉树的深度。图1示出了使用QTBT+TT分割CTU的示例。TT允许将CU分为三个分区,而不是大小相等的两个分区。这增加了使用更适合图片中的内容结构的块结构的可能性。
上下文自适应二进制算术编码(CABAC)是HEVC和VVC中使用的熵编码工具。CABAC被配置为对二进制符号进行编码,其保持复杂度较低,并且允许对符号的更频繁使用的比特的概率进行建模。由于编码模式通常在局部具有强相关性,因此基于局部上下文来自适应地选择概率模型。
HEVC中片的概念将图片分为独立编码的片,其中以CTU为单位按照光栅扫描顺序来读取每个片。可以将不同的编码类型用于相同图片的片。例如,片可以是I片、P片或B片。然而,片的主要目的是在丢失数据的情况下实现重新同步。
HEVC视频编码标准还包括被称为“图块”的工具,其将图片分为矩形的空间上独立的区域。使用图块,可以将HEVC中的图片划分为多行样本和多列样本,其中任意给定图块位于给定行和给定列的交点处。图2示出了使用四(4)行图块和五(5)列图块的图块划分的示例,导致图片总共二十(20)个图块。如图2所示,HEVC中的图块始终与CTU边界对齐。
通过指定行的厚度和列的宽度,在图片参数集合(PPS)中以信号传送图块划分结构,本文中也称为“图块结构”。各个行和列可以具有不同的大小,但是划分始终跨整个图片,分别从左到右以及从上到下。
表1列出了在HEVC中用于指定图块结构的PPS语法。如表1所示,标志(即,tiles_enabled_flag)指示是否使用了图块。如果tiles_enabled_flag被设置,则指定图块列数(即,num_tile_columns_minus1)和图块行数(即,num_tile_rows_minusl)。uniform_spacing_flag是指定是显式地以信号传送列宽度和行高度、还是应使用将图块边界均等地间隔开的预定方法的标志。如果指示显式的以信号传送,则一一以信号传送列宽度,随后是行高度。以CTU为单位以信号传送列宽度和行高度信息。最后,标志loop_filter_across_tiles_enabled_flag指定是否为图片中的所有图块边界打开或关闭跨图块边界的环路滤波器。
表1-HEVC中的图块语法
与片类似,相同图片的图块之间没有解码依赖性。这包括帧内预测、上下文选择和运动矢量预测。然而,一个例外是,在图块之间一般允许环路滤波依赖性。然而,可以通过适当地设置loop_filter_across_tiles_enabled_flag来禁用这些依赖性。
与片相反,图块不需要那么多的头数据。每个图块的头开销包括比特流偏移的信号传送,这些比特流偏移存在于片头中,并指示图片中所有图块的起始点。解码器对起始点进行解码,以实现将编码图片分为编码图块,以便分发它们进行并行解码。在HEVC中,当启用图块时,在片头中包含比特流偏移是强制性的。然而,HEVC中限制了图块和片的组合。具体地,图块中的所有CTU属于相同的片,或者所有CTU属于相同的图块。
比特流偏移还可以允许提取图块并拼接图块,以将图块重新构成为输出流。这需要一些编码器侧约束,以使图块在时间上独立。一个约束限制了运动矢量,使得对图块的运动补偿仅使用包括在先前图片的空间共位图块中的样本。另一个约束限制了时间运动矢量预测(TMVP),使得该过程在时间上独立地进行。为了完全独立,必须经由先前描述的loop_filter_across_tiles_enabled_flag来禁用对图块之间的边界的去块化。然而,禁用去块化会在图块之间引入可见的线。因此,一些实现禁用去块化,而其他实现不禁用。运动约束图块集合(MCTS)是HEVC中用于以信号传送对时间上独立的图块集合的编码侧约束的特征。MCTS中的图块集合覆盖图片的一个或多个图块。
有时将图块用于打算使用头戴式显示(HMD)设备来消费的360度视频。在使用当今的HMD设备时的视场被限制在整个球面的20%左右。这意味着整个360度视频中仅20%被用户消费。通常,对于HMD设备来说整个360度视频球面都是可获得的,该HMD设备然后裁剪出要为用户渲染的部分。该部分(即,用户看到的球面部分)被称为视口。众所周知的资源的优化是使HMD设备视频系统知道用户的头部移动和正在看的方向,使得花费较少的资源来处理没有渲染给用户的视频样本。资源可以是例如从服务器到客户端的带宽或设备的解码能力。对于未来的HMD设备,其视场将比当前可能的视场更大,非均匀资源分配仍将是有益的。具体地,人类视觉系统在中央视觉面积(大约18°水平视图)中要求较高的图像质量,而对周围区域(对于舒适的水平视图,大约为120°或更大)中的图像质量的要求较低。因此,通过与周围区域相比在中央视觉面积中分配更多的资源,非均匀资源分配将有助于满足人类视觉系统的需求。
优化感兴趣区域(ROI)的资源是针对图块的另一用例。RoI可以在内容中指定,或通过诸如眼动追踪之类的方法来提取。使用头部移动来减少所需资源的一种方法是使用图块。该方法首先使用图块多次对视频序列进行编码。图块分区结构在所有编码中是相同的;然而,视频序列以不同的视频质量进行编码。这为视频序列产生了至少一个高质量的编码,并且为视频序列产生了一个低质量的编码。这意味着对于特定时间点的每个图块,存在至少一个高质量的图块表示和至少一个低质量的图块表示。高质量图块与低质量图块之间的差异可以是:以比低质量图块高的比特率对高质量图块进行编码,或者高质量图块的分辨率比低质量图块的高。
图3A至图3B示出了具有比低质量图块的分辨率高的分辨率的高质量图块的示例。具体地,图3A示出了刚由解码器解码的图片。在该上下文中,显示来自解码器的输出的图片(即,经解码的图片)是在压缩域中显示的图片。在图3A的示例中,压缩域中的所有8个图块A-H具有相等的空间大小。然后,在图片被解码之后但是在图片被渲染之前,图块A-H被缩放并在空间上被布置。已经准备用于渲染(即,缩放和重新布置之后)的图片是要在输出域中显示的图片。在图3B中看到的输出域示出了在渲染或呈现给用户时的图片。
如图3A至图3B所示,图块B、D、F和H是高质量图块,因为它们在输出域中具有更高的分辨率。然而,图块A、C、E和G是低分辨率图块,因为缩放步骤降低了实际分辨率。
除了说明图块如何具有不同的分辨率外,图3A至图3B还说明了压缩域(图3A)中的图块不需要按照与它们在输出域(图3B)中排序相同的方式进行空间排序。考虑到图块在空间和时间上都是独立的,图块在压缩域中的空间放置不是至关重要的。
在HEVC中启用图块时,有多种因素会增加比特成本。首先,禁用跨图块的预测,这意味着不跨图块来预测运动矢量和帧内模式。图块的使用也禁用量化参数(QP)预测和上下文选择。其次,针对每个图块初始化CABAC,这意味着CABAC适应性受到妨碍。第三,必须针对每个图块以信号传送比特流偏移。第四,需要在PPS中指定图块划分结构。最后,在每个图块之后刷新CABAC,并且编码数据必须按字节对齐。
图块很有用;然而,一些考虑需要解决。例如,在HEVC的当前形式中,HEVC限制图块以确保它们垂直和水平地跨整个图片。然而,这限制了图块的灵活性。例如,图4示出了不受HEVC当前实现支持的图块结构的示例。具体地,图4的图块结构具有以如下方式布置的图块,使得给定图块的一侧(即,“图块边界”)与多个相邻图块的侧边或图块边界接触。
为了虚拟地支持这种图块结构,可以在HEVC中指定分区结构,如图5所示。然而,图5中示出的图块结构包含更多图块边界。这会损害压缩效率,并且导致不必要的图块化伪影。另外,如果图块要完全在空间上独立,则当前形式的HEVC仅允许针对图片的所有图块边界启用或禁用环路滤波依赖性。因此,传统的HEVC解决方案将出现不必要的环路滤波限制,因为它们不支持灵活的图块分区。
“灵活图块”的概念通过提供灵活图块划分方法来解决这些问题。具体地,每个图块包括单个矩形面积,并且在比特流中将每个图块的宽度和高度以信号传送给解码器。接收到后,解码器被配置为从比特流解码每个图块的单独的宽度和高度值。这些方法为编码器将图片划分为图块提供了更大的自由度,因为这意味着编码器不再局限于如HEVC中那样定义图块行数和图块列数。
表2示出了用于表达灵活图块的一种可能的图块语法。
表2-灵活图块实施例
number_of_tiles_in_picture_minus2:指定图片中的图块数量;
subtile_width_minus1:指定子图块单元以编码树单元为单位的宽度;
subtile_height_minus1:指定子图块单元以编码树单元为单位的高度;
use_previous_tile_size_flag:当该标志等于1时,它指定当前图块的大小等于先前图块的大小。然而,当等于0时,它指定当前图块的大小不等于先前图块的大小。当该标志不存在时,use_previous_tile_size_flag的值被推断为等于0;
tile_width_minus1[i]加1:指定第i个图块以子图块单元为单位的宽度;以及
tile_height_minus1[i]加1:指定第i个图块以子图块单元为单位的高度。
通常通过使用并排封装或上下封装将立体视频(其已经存在了很长一段时间)封装为一帧,分别如图6A至图6B所示。利用立体视频,每只眼睛接收到图像的单独视图,其中第二视图的视点与第一视图相比略微偏移(例如,当与针对用户右眼的视点相比时,针对用户左眼的视点略微偏移)。
使用立体视频有一些缺点。具体地,当用户正在移动时,沉浸式体验降低。
为了能够至少部分地环视对象,即,略微转移视口,可以使用纹理和深度信息的组合,其中可以根据纹理和深度信息合成其他视图。纹理加深度通常也以并排、上下或一些其他方式被帧封装在一个图片内(例如,参见图17)。
MPEG当前正在致力于针对沉浸式视频的一些活动,这些活动将发布在MPEG-I标准集合中。一个活动涉及3自由度(3DoF),也被称为360°视频。在这些活动中,用户可以使用头戴式显示器(HMD)沿着球面的所有方向观看。至于立体视频,视点是固定的。
另一活动涉及扩展的3自由度视频(3DoF+)。使用3DoF+,用户可以体验如在360°视频中的整个球面,但是具有通过稍微移动头部在一定程度上环视对象的自由。为了从技术上实现这一点,从包含纹理和深度信息二者的大量视图中构建3DoF+场景。使用来自相邻视图的纹理和深度来合成中间视图。
MPEG还具有涉及六自由度(6DoF)视频的活动。在6DoF视频中,用户具有完全的自由度以比3DoF+更大的体量环视对象。在一些情况下,用户不仅可以站立,而且还可以四处走动。一种方法是使用背景视频和点云对象的组合来实现6DoF视频。使用附加到点云中的每个点的几何信息、纹理和属性来描述点云对象。属性可以包括但不限于颜色值(例如,RGB纹理)、反射率、占用率和不透明度,其可以表示为纹理图、反射率图、占用率图和不透明度图。
在图7A至图7C中分别示出了3DoF、3DoF+和6DoF的用例。3DoF、3DoF+和6DoF都可以支持立体观看;然而,对于这些技术中的每一种,可能发生某(些)种类的帧封装。
尽管与HEVC相比,灵活图块提高了图块的灵活性,但是它没有解决如何在比特流中有效地对视频数据进行分组。例如,在包括沉浸式视频的许多视频服务中,可以从视频中提取部分视频数据。将视频数据分组为组块(chunk)而不是分散在比特流中的不同位置,这加快了提取和解码的速度。可以使用HEVC中的图块和片来解决简单情况,例如将图片分为两部分(例如,进行了并排帧封装的立体图片)。然而,对于与3DoF视频、3DoF+视频和6DoF视频相关的更复杂的情况,使用HEVC中当前定义的图块和片,这是不可能的。
然而,本公开的实施例通过将“图块组”引入被配置为对划分为图块的图像进行处理的视频编解码器来解决这些问题。具体地,使用图块组ID将每个图块指派给图块组。该图块组ID可以用于标识每个图块属于图片的哪个区域。不需要区域的所有部分在空间上相邻。例如,图块组可以是立方体贴图中的立方体面、进行了帧封装的立体视频中的两个视图、或者进行了帧封装的纹理加深度视频中的纹理和深度字段。此外,可以以预定义的顺序(例如,光栅扫描顺序)来扫描每个图块组内的图块。这允许将每个图块组单独提取为一个组块,由此无需组装若干图块来构建视频的所需部分。对于图块组,也可以按照任何所需或期望的顺序(例如,光栅扫描顺序)或按照它们的图块组ID的顺序对它们进行扫描。其他扫描顺序也是可能的。
本公开的实施例提供了常规编码和解码方法未提供的益处和优点。例如,本公开的实施例提供了图片的图块与图块在图片中的逻辑分组之间的映射。对于进行了帧封装的视频,例如立体视频、纹理加深度视频、3DoF视频、3DoF+视频和6DoF视频,这很有用。
本实施例提供的另一优点来自以下事实:彼此相关的图块(例如,在内容类型或场景的几何形状方面)在比特流中被分组为图块组。因此,可以将这些图块组提取为一个组块。这与HEVC中的图块相反,在HEVC中,这种相关的图像可以分散在比特流上。因此,如本实施例中那样对图块进行分组将加快从比特流中提取图块组的速度,并改善时延。
另外,可以按重要性顺序在比特流中对图块组进行排序(例如,立方体贴图中,首先是正面的立方体面)。然后,可以更容易地首先对最重要的图块进行解码和渲染,这进一步降低了感知到的时延。
此外,如前所述,每个图块组具有自己的图块组ID。在一些实施例中,该图块组ID可以指示应如何在系统层解释给定视频的图块。例如,考虑进行了并排帧封装的立体图片。在这种情况下,图块组ID为“0”的图块可以与右视图相关联,且图块组ID为“1”的图块与左视图相关联。这样指派后,可以根据用户的右视图和左视图来处理图块。还可以使用图块组ID将对应的标签指派给图块组。
另一优点在于,本实施例使得可以为给定图块组定义某些属性。这种属性包括但不限于:针对每个图块组定义运动约束和环路滤波器约束的属性、以及在图块组内的图块之间允许运动和环路滤波但在图块组之间约束运动和环路滤波的属性。
在第一实施例中,使用图块组ID将图块分组为图块组。可以例如在PPS、SPS中或者在片或图块头中以信号传送图块组ID。例如,在图块组内以预定顺序(例如,光栅扫描顺序)对属于相同图块组的图块进行编码和解码。连续地扫描图块,使得图块组中的所有图块都被依次扫描。在扫描图块组中的图块时,不扫描图块组外的图块。通过连续地扫描图块组中的图块,可以在单个组块中从比特流中解码或提取图块组中的所有图块,而不必首先从比特流的不同部分中提取图块,然后组装这些图块。
可以使用图8中所示的简单情况看到这一点。如该图所示,立体视频使用并排格式进行帧封装。与第一视点相关联的图块TL在帧F的左(“L”)侧,而与第二视点相关联的图块TR位于帧F的右(“R”)侧。出于并行处理的原因,每个视图被分为若干图块。
图9A至图9B示出了图块在比特流B中的顺序。具体地,图9A示出了当使用HEVC图块语法时图块T的顺序。在这种常规情况下,以光栅扫描顺序扫描图块T。因此,比特流B中的每第二个图块TR属于右视图R,且比特流B中的其他图块TL属于左视图L。然而,图9B示出了当根据本实施例对图块T进行分组时这些图块T的顺序。在这些情况下,每个图块组被连续地一一扫描。因此,每个图块组的图块T(即,第一组(T1)无阴影图块中的图块和第二组(T2)阴影图块中的图块)在比特流中是连续的。
在一个实施例中,按照图块组ID的顺序在比特流中编码和解码图块组。例如,按照升序。
在另一实施例中,以光栅扫描顺序对图块组T1、T2进行编码和解码。在本公开的上下文中,将针对图块组T1、T2内的图块T的“光栅扫描顺序”定义为针对图块组中的图块的左上角的光栅扫描顺序。然而,将针对图块组T1、T2的光栅扫描顺序定义为以下顺序:其中,当以光栅扫描顺序逐个像素地(或者逐个块地或逐个CTU地)扫描图片时,图块组T1、T2首先出现。备选地,还可以将针对图块组T1、T2的光栅扫描顺序定义为针对每个图块组T1、T2中的第一个图块的左上角的光栅扫描顺序。
在一个实施例中,例如以信号传送顺序指示符(如标志)来指示是以图块组ID顺序还是以光栅扫描顺序扫描图块组。
图10示出了根据本公开的用于对比特流B进行解码的方法10。在该实施例中,解码器接收包括一个或多个编码图片片段组(例如,“图块组T1、T2”)的比特流B(框12)。每个图片片段组包括组ID和一个或多个编码图片片段(例如,“图块”T)。一旦接收到,解码器就从比特流中提取第一图片片段组作为单个实体(框14)。如上所述,这与常规方法(例如,HEVC)不同,常规方法在以适当的顺序组装图片片段之前,首先从所接收的比特流B的不同部分中提取给定组中的图片片段。因此,本实施例通过加快从比特流B中提取图块组的速度并改善时延来增强解码器的操作。一旦提取出图块组,方法10就要求以预定顺序对第一图片片段组中的所述一个或多个图片片段进行解码(框16)。
如前所述,可以由编码器使用图块组ID将图块T指派给图块组T1、T2。然而,并不总是需要这种指派。例如,在一个实施例中,将图块T指派给图块组T1、T2,而无需显式地使用图块组ID。例如,当定义图块结构时,第一步骤将是定义图块组T1、T2。一旦被定义,图块T将被指派给给定图块组T1、T2,而无需显式地向图块T指派任何图块组ID。
图11示出了根据本公开的用于对比特流B中接收的图片或图片的一部分(具有以图块组ID分组的图块)进行解码的方法20。本领域普通技术人员将理解,方法20在解码器处实现。
如图11所示,方法20开始于:解码器从接收到的比特流B中解析图片的图块结构语法,该图块结构语法包括每个图块T的组ID(框22)。对于每个图块T,解码器基于图块组ID来确定该图块所属的图块组T1、T2(框24)。然后,解码器选择要解码的图块组T1、T2(框26)。例如,在常见情况下,解码器将决定对所有图块组T1、T2进行解码。一旦被确定,解码器就从比特流B中解码所选择的图块组的图块T(框28)。更具体地,以预定义的顺序对每个图块组T1、T2的图块T进行扫描和解码,然后从比特流B中连续地解码。在该实施例的一个方面,还以图块组T1、T2的图块组ID的显式顺序对图块组T1、T2进行扫描和解码。
图12示出了在解码器处实现的方法30,用于从接收到的比特流B中提取图片中的具有利用图块组ID分组的图块T的一部分图片。如图12所示,方法30开始于:解码器解析图片的图块结构语法以获得每个图块T的组ID(框32)。然后,对于每个图块T,解码器基于图块组ID来确定该图块所属的图块组T1、T2(框34)。然后,解码器选择要从接收到的比特流中提取的图块组T1、T2(框36),并且从比特流中提取所选择的图块组T1、T2的图块T(框38)。对以预定义的顺序扫描的每个图块组T1、T2的图块T进行分组,并将这些图块彼此连续地置于比特流B中。在该实施例的一个方面,还以图块组T1、T2的图块ID的显式顺序扫描和提取图块组T1、T2。
图13示出了在编码器处实现的方法40,用于将具有使用图块组ID的图块T的图片编码到比特流B中。如图13所示,方法40开始于编码器定义图块结构(框42)。在该实施例中,编码器将图片分为图块组T1、T2,并向每个图块组T1、T2指派唯一的图块组ID。然后,对于每个图块组,编码器将图块组分为一个或多个图块T,并将图块组ID指派给图块组中的每个图块(框44)。一旦将图块T指派给图块组T1、T2,编码器就将图片的图块结构编码到比特流B中,该图块结构包括每个图块T的图块组ID(框46),并且将图块编码到比特流中(框48)。在该实施例中,以预定义的顺序扫描每个图块组的图块,并连续编码到比特流中。然而,本领域的普通技术人员将容易理解,本公开不限于此。一方面,例如,以图块组的图块组ID的显式顺序对图块组进行扫描和编码。这样编码后,编码器将比特流发送到解码器以进行解码(框50)。
图14A至图14D示出了根据一个实施例的图块分组。如图所示,图14A示出了360°视频的典型立方体贴图。立方体贴图被分为六个立方体面-左侧(L)、正面(F)、右侧(R)、底面(BM)、背面(BK)和顶面(T)。立方体面用实线标记。虚线是图块边界。为头戴式显示器(HMD)节省360°视频的带宽的一种方法是将图片分为若干图块。这允许仅将HMD的当前视点中的那些图块发送到HMD。在该示例中,将每个立方体面L、F、R、BM、BK和T分为16个图块。
图14B示出了图块的扫描顺序,在这种情况下,该扫描顺序是用于HEVC中的图块的光栅扫描顺序。为了在示例中提取一个完整的立方体面,始终需要组装四个“图块组块”。如本文定义的,“图块组块”包括比特流中的连续图块集合。
图14C示出了以光栅扫描顺序使用图块组ID的扫描顺序。具体地,每个立方体面L、F、R、BM、BK和T与各个图块组相对应。将每个图块组(即,立方体面)的唯一的图块组ID指派给该图块组中的图块。这样指派后,每个立方体面L、F、R、BM、BK和T都可以被解码或提取为仅一个图块组块。
图14D示出了使用图块组ID的扫描顺序。具体地,扫描顺序是通过递增图块组ID来实现的,其中每个图块组被指派了唯一的图块组ID(即,0,1,2,3,4,5)并按照光栅扫描顺序扫描。如该图所示,已经为立方体面不同地指派了图块组ID,并且按照图块组ID的顺序扫描这些立方体面。以图块组ID的顺序扫描图块组允许按照重要性的顺序来扫描图块。这对于低延迟应用(例如360°视频)可能很重要。
在图15中描绘了图块分组的另一示例。如上所述,图块组边界用实线标记,且图块边界用虚线标记。如该实施例所示,编码器将两个不同分辨率的同一立方体贴图封装到一帧中。高分辨率立方体贴图的每个立方体面L、F、R、BM、BK和T是图块组,而低分辨率立方体贴图可以被分为两个图块组-第一图块组是立方体面(L、F和R)且第二图块组是立方体面(BM、BK和T)。
在图15的实施例中,编码器以多种分辨率封装帧,并且将多个立方体面封装到对应的图块组中。然而,本领域普通技术人员应理解,本公开内容不限于此。一方面,对于每个分辨率,编码器仅利用单个图块组。
在另一实施例中,编码器基于在HEVC的附录D中定义的片段化矩形帧封装布置SEI消息来将图片P划分为图块组,其申明了:“通过从解码帧中裁剪区域RO来获得组成帧0,并且通过垂直堆叠区域R2和R3以及将得到的矩形置于区域R1的右侧来获得组成帧1。区域R4不是这两个组成帧中任一个的一部分,因此被丢弃。因此,在该方面,本公开的编码器被配置为重新布置帧封装布置,以确保图片在向解码器发送的比特流中可以是连续的。
图16示出了该实施例,其中区域R0成为一个图片帧F1,且区域R1、R2和R3成为另一图片帧F2。如果帧F1和F2中的每个区域R0、R1、R2、R3和R4是对应的图块组,则编码器可以对每个区域进行编码并将其置入比特流中,使得两个组成图片帧F1、F2在HEVC中的比特流中将是连续的。然而,区域和图块组之间并不总是一一对应的。例如,如果每个区域R0、R1、R2、R3和R4在区域的高度H上包括多于一个图块,则组成图片帧F1、F2的各部分在比特流中将不连续。因此,通过使用根据该实施例的图块分组,编码器可以将两个组成图片帧F1、F2连续置入比特流中,以用于进行帧封装的图片。
表3中示出了在HEVC图块之上实现的图块组ID的示例。
表3-使用图块组ID的HEVC图块语法
tile_group_ids_enabled_flag:当等于1时,该标志指定针对每个图块以信号传送图块组ID。当等于0时,该标志指定每个图块属于相同的图块组,并且tile_group_id[i]被推断为0。
tile_group_id[i]:该标志指定索引为i的图块的图块组ID。tile_group_id[i]应在0到maxTileGroupID之间。
表4示出了用于灵活图块解决方案的图块组ID的示例。
表4-使用图块组ID的灵活图块语法
tile_group_ids_enabled_flag:当该标志等于1时,它指定针对每个图块以信号传送图块组ID。当该标志等于0时,它指定每个图块属于相同的图块组,并且tile_group_id[i]被推断为0。
tile_group_id[i]指定索引为i的图块的图块组ID。tile_group_id[i]应在0到maxTileGroupID之间。
maxTileGroupID:出于灵活性原因,该参数被定义为较大的常数值(例如,256)。在一些实施例中,可以将该参数定义为图块的数量;然而,将该参数定义为图块的数量在使用图块组ID时带来了限制。具体地,当将该参数定义为图块的数量时,在所使用的图块组ID的范围内不允许有间隙。如果从比特流中提取图块组,则这种限制可能存在问题。
上面的表3和表4中的语法描述了如何通过以信号传送每个图块的图块ID来为每个图块指派图块组ID。然而,在该实施例的另一版本中,首先定义每个图块组的空间结构,并将其与唯一的图块组ID一起在比特流中以信号传送。然后,将每个图块组分为图块,其中在比特流中以信号传送对此的描述性语法。
在本公开的一个实施例中,为每个图块组ID指派标签。这种标签可以是例如进行了帧封装的图片的图片类型(例如,立体视频中的左视图和右视图),或者进行了纹理加深度封装的视频中的纹理和深度部分。可以在SPS中、在PPS中、在SEI消息中或在诸如ISOBMFF或OMAF框的系统层中以信号传送对图块组ID的标签指派。标签可以包括描述性文本、对描述性文本的参考、整数或动态表达。
以下用例示例适用于以上讨论的实施例1和实施例2。
先前在图8中示出了具有并排帧封装的立体图片的示例。为了支持并行处理,将每个视图分为若干图块。第一图块组被指派“左视图”标签L,第二图块组被指派“右视图”标签R。这种标签化不仅使解码器直接提取属于仅其中一个视图的图块T(例如,图8中的TL和TR),而且通过利用图块组ID为0的第一图块组对左视图L中的所有图块进行分组,并利用图块组ID为1的第二图块组对右视图R中的图块进行分组,编码器可以在比特流中将属于相同视图的图块分组在一起。
图16描绘了纹理加深度的常见帧封装的示例。如该图所示,本公开的该实施例将图片帧划分为多个图块。与图片的纹理相关的图块位于中间,并被编码为属于图块组0的一个图块。为图块组0指派标签“纹理”。在纹理部分的上方和下方可以看到与已经在空间上进行了压缩和水平分割的深度图相关的图块,这些图块被编码为属于图块组1的两个图块。为图块组1指派“深度”标签。
在MPEG中的3DoF+视频项目中,为了能够准确地表示场景而没有遮挡伪像,最多使用25个纹理和深度图。一种方法是发送全分辨率(针对与纹理和深度中的每一个,5760×2880的分辨率)的集中视图,并发送具有降低的分辨率、但利用比中央视图高的QP进行编码的其他24个视图的稀疏表示。解码之后,将稀疏表示与集中视图组合,以形成其他24个视图中的每个视图。使用相邻的纹理和深度图构造25个视图中的任意视图之间的中间视图。
可以在一个或多个(例如,几个)图片中完成用于压缩域的视图的封装。图18示出了3DoF+视图中如何进行到一个帧中的封装的示例。如图18所示,每个纹理(以白色表示)和深度图(以灰色表示)都属于唯一的图块组。出于空间随机接入的原因,每个图块组可以包括若干图块。
图18示出了图块组的图块组ID。可以为图块组0指派标签“集中纹理”,并且可以为图块组1指派标签“集中深度”。稀疏视图的编号为0到23。可以为图块组2指派标签“稀疏纹理0”并为图块组3指派标签“稀疏深度0”,而为图块组4和5指派标签“稀疏纹理1”和“稀疏深度1”等等。如果例如3DoF+播放器希望渲染稀疏视图22和23之间的视图,则它请求解码器对具有标签“集中纹理”、“集中深度”、“稀疏纹理22”、“稀疏深度22”、“稀疏纹理23”和“稀疏深度23”的图块组(与具有图块组ID 0、1、46、47、48和49的图块组相对应)进行解码。在根据经解码的纹理和深度图创建和渲染合成视图之前,以完整的组块来提取各个图块组中的所有图块并对这些图块进行解码。
在MPEG的6DoF视频项目中,可以通过将背景视频与点云对象添加在一起来创建完整的VR体验,其中利用几何信息和点属性来创建点云对象,该点属性可以包括颜色值(例如,RGB)、反射率(I)和不透明度。通常对于背景视频来说,点云几何信息和点属性可以被描述为并被压缩为视频。使用公共帧封装确保了帧的时间对齐并简化了解码过程。可以将每个背景图片和每个点云对象的几何信息、颜色值、反射率和透明度指派给唯一的图块组ID,图块组ID可以映射到描述性标签。这样可以轻松接入场景的特定部分。如果将场景的各个部分分为若干图块,这特别有用,因为其提供了空间随机接入。
标签也可以与视频的宽高比有关。一个示例是当以比对视频进行解码的设备可以显示的宽高比宽的宽高比记录视频时。通常,将完整的比特流发送到接收设备,接收设备将对比特流进行解码并裁剪视频。
然而,改为考虑视频比特流使用三个不同的图块组进行编码,如图19所示。图块组1的部分和图块组2的部分在空间上不相邻。图块组0将代表4∶3的宽高比,图块组0和1的组合将代表16∶9的宽屏宽高比,图块组0、1和2的组合将代表2.35∶1的变形投影宽高比,如图20所示。
在一个实施例中,可以如下将标签指派给图块组:
·将图块组ID 0指派给标签“4∶3宽高比和更宽的”;
·将图块组ID 1指派给标签“16∶9宽高比和更宽的”;以及
·将图块组ID 2指派给标签“2.35∶1宽高比”。
在该实施例的一个方面,标签被映射到一个或多个图块组ID。那么,在这些方面中,可以如下将图块组ID映射到标签:
·“4∶3宽高比”映射到图块组ID 0;
·“16∶9宽高比”映射到图块组ID 0和1;
·“2.35∶1宽高比”映射到图块组ID 0、1和2。
如果发送方知道接收设备只能显示特定的宽高比,例如4∶3宽高比,则发送方可以选择仅发送该宽高比的视频,即,图块组ID为0的图块组。然而,如果发送方不知道接收设备的显示能力,则它可以发送完整比特流。在这些稍后的情况下,接收设备随后可以决定仅对图块组ID为0的图块组进行解码以节约一些处理能力。
先前的实施例描述了对单个层中的图块进行分组。然而,本领域的普通技术人员将容易理解,本公开不限于此。在本公开的一个实施例中,支持多层图块分组。更详细地,图块组可以包括一个或多个图块子组,图块子组又可以包括一个或多个图块。因此,根据该实施例,图块组可以被称为某个层级的图块组。例如,层级1的图块组可以包括层级2的一个或多个图块子组,层级2的图块子组可以包括一个或多个图块。
针对给定图块组内的一个或多个图块子组的扫描顺序可以是所需或期望的任何扫描顺序,只要将图块子组连续置入比特流中即可。然而,本公开的一个实施例在将图块子组连续置入比特流之前,按顺序扫描给定图块组内的图块子组。
作为示例,可以从图18所示的3DoF+示例中导出针对图块组内的图块子组的一个实际用例。层次结构的第一层级(例如,“层级1”)可以包括指派了标签“纹理”的图块组和指派了标签“深度”的图块组。层次结构的第二层级(例如“层级2”)可以包括指派了标签“集中视图”以及标签“稀疏视图0”至“稀疏视图22”的图块子组。作为示例,则提取所有纹理将是相当直接的,因为解码器将仅需要知道要提取标签为“纹理”的所谓的“层级1”图块组。
在图15所示的立方体贴图示例中,可以看到针对图块组内的图块子组的另一实际用例。具体地,在该示例中,编码器基于分辨率将那些图块组指派给“层级1”,并将立方体贴图的立方体面指派给图块子组和“层级2”图块组。
在另一实施例中,针对每个图块组定义属性集合。属性可以定义如何对图块组中的图块进行解码。属性还可以提供关于图块组的信息,例如图块组的相对视频质量等。可以针对每个图块组单独地定义每个属性,或者针对图片中的所有图块组定义相同的属性。图块组属性还可以被称为图块组特性或图块组参数。
根据本公开要针对每个图块组定义的图块组属性的示例是“delta_QP”值。在一个实施例中,可以将delta_QP值定义为参考的量化参数(QP)值与图块组的QP之间的差。参考QP值可以是针对参数集合、图片、片等以信号传送的QP值。图块组的QP值可以是图块组的初始QP值,例如,用于图块组中的第一图块中的第一块的QP值、或者用于预测图块组中的第一图块中的第一块的QP值的QP值。
在另一实施例中,可以将delta_QP值定义为先前图块组的QP值与当前图块组的QP值之间的差。在一个示例中,如果图片中的图块组具有纹理内容且图片中的另一图块组具有深度内容,则可以有益地针对每个图块组(即,在每个图块组的基础上)定义delta_QP,由此支持不同图块组可能希望使用不同QP值的情况。在这样的实施例中,例如,可以使用高QP值对第一图块组进行编码,而可以使用低QP值对第二图块组进行编码。
图块组属性的其他示例是所谓的“去块化参数”(例如,去块化滤波器强度)。在HEVC中,去块化滤波器的强度可以由编码器在每个图片和/或每个片的基础上进行调整。此外,根据本公开,可以在每个图块组的基础上提供去块化参数,因此使去块化参数适于每个图块组的内容。
在HEVC中,与片边界类似,图块边界打破了解析和空间预测依赖性,使得可以独立地处理图块。然而,环路滤波器(例如,去块化和SAO滤波器)仍可以跨图块边界,以便可选地防止图块边界伪像。该功能由PPS中的loop_filter_across tile_enabled_flag语法元素控制。针对每个图块组设置该功能是根据本公开的图块组属性的另一示例。具体地,在图片中的图块组的一些在内容上相互独立而其他图块组存在相关性的情况下,可以针对每个图块组设置loop_filter_across tile_groups_enabled_flag。因此,可以针对具有独立内容的图块组禁用该标志,并针对具有相关内容的图块组启用该标志。
与MCTS对图块的作用类似,图块组属性的另一示例是以信号传送是否允许在图块组之间进行帧间预测。如果允许帧间预测,则允许在图块组内的图块边界之上进行帧间预测,而不允许在图块组边界之上进行帧间预测。可以针对所有图块组以信号传送相同的图块组属性,或者可以针对每个图块组单独地以信号传送图块组属性。
下表5中示出了图块组属性示例,其具有HEVC之上的图块组帧间预测和环路滤波的语法和语义。
表5-使用图块组ID和图块组属性的HEVC图块语法
loop_filter_across_tiles_enabled_flag:当该标志等于1时,它指定可以在参考PPS的图片中跨图块边界执行环路滤波操作。当该标志等于0时,它指定不在参考PPS的图片中跨图块边界执行环路滤波操作。环路滤波操作包括去块化滤波器和样本自适应偏移滤波器操作。当不存在时,loop_filter_across_tiles_enabled_flag的值被推断为等于1。
tile_group_ids_enabled_flag:当该标志等于1时,它指定针对每个图块以信号传送图块组ID。当该标志等于0时,它指定每个图块属于相同的图块组,并且tile_group_id[i]被推断为0。
tile_group_id[i]:其指定索引为i的图块的图块组ID。tile_group_id[i]的有效值应在0到maxTileGroupID之间。
loop_filter_across_tile_groups_enabled_flag:当该标志等于1时,它指定可以在参考PPS的图片中跨图块组边界执行环路滤波操作。当该标志等于0时,它指定不在参考PPS的图片中跨图块组边界执行环路滤波操作。环路滤波操作包括去块化滤波器和样本自适应偏移滤波器操作。如果loop_filter_across_tiles enabled_flag等于0,则loop_filter_across_tile_groups_enabled_flag被推断为0。否则,如果不存在,则loop_filter_across_tile_groups_enabled_flag的值被推断为等于1。
prediction_across_tile_groups_enabled_flag:当该标志等于1时,它指定可以参考每个图块组之外或图片之外的样本值进行帧间预测。当该标志等于0时,它指定没有每个图块组之外或图片之外的样本值被参考用于帧间预测。此外,从当前图块组之外的块导出的运动矢量候选可以不用于预测。当不存在时,prediction_across_tile_groups_enabled_flag被推断等于1。
根据一个实施例,如果将loop_filter_across_tiles_enabled_flag设置为1,则以信号传送loop_filter_across_tile_groups_enabled_flag。如果已针对图块边界禁用环路滤波,则自动对图块组边界禁用环路滤波。在这些情况下,以信号传送loop_filter_across_tile_groups_enabled_flag的值是没有意义的。
如前所述,可以在每个图块组的基础上定义的一个属性是delta_QP值。在一个实施例中,例如,解码器被配置为从序列参数集合或图片参数集合中确定参考QP值(refQP)。然后,根据前述实施例中的任一个,针对每个图块组以信号传送delta_QP值。
聚焦于一个图块组T为例,将对应的delta_QP值视为deltaQP1。可选地,可能存在针对图块组T的第一图块的第一块以信号传送的deltaQP2。然后,要用于第一块的delta_QP值变为refQP+deltaQP1+deltaQP2。如果该块没有deltaQP2(例如,其可能在第一块不包括任何非零变换系数时发生),则第一块的QP值变为refQP+deltaQP1。
被指派给第一块的QP值被用于对解码变换系数进行缩放。然而,根据本实施例,还可以将QP值用在对第一块与相邻块之间的边界附近的样本值的去块化过程中。根据该实施例,在每个图块组的基础上以信号传送delta_QP值的可能性是有益的,因为它允许解码器将源自不同比特流的图块组“拼接”到一个输出比特流中。作为示例,可能已经使用QP值Q1将第一图块组T1编码到比特流B1中,而可能已经使用QP值Q2将第二图块组T2编码到比特流B2中。如果在没有可能设置图块组QP的情况下将T1和T2拼接到一个输出比特流中,则可能无法在输出流中正确地设置T1和T2的QP值。通过使delta_QP成为图块组属性的一部分并使用前述实施例之一,可以针对所有的输出图块组设置正确的QP值。
注意,在HEVC中,仅针对包含至少一个非零变换系数的块以信号传送块delta_QP。这意味着,如果图块组T1和T2中的第一图块中的第一块不包含任何非零系数,则如果将图块组T1和T2一起拼接到一个图片中,可能无法为这两个块指派正确的QP值,除非插入了片头。
本文中的实施例分别参考编码器和解码器(例如,图21中所示的编码器60和图22中所示的解码器80)来描述。可以使用硬件和/或软件的合适组合来实现编码器60和解码器80。因此,包括一个或多个处理器以及例如一个或多个存储器的编码器被配置为执行根据本文的实施例的方法。
图21是示例编码器60的示意图,该编码器60包括通信接口72、输入/输出电路68、处理器62、一个或多个存储器64和存储在存储器64中的计算机程序66。处理器62可以是能够执行存储在一个或多个存储器64中的计算机程序66所包含的软件指令的合适的中央处理单元(CPU)、多处理器、微控制器、数字信号处理器(DSP)、专用集成电路(ASIC)等中的一个或多个的任意组合。一个或多个存储器64例如是数据缓冲器、读写存储器(RWM)、只读存储器(ROM)、随机存取存储器(RAM)、高速缓存存储器、闪存设备、光学存储设备等。通信接口72可以包括输入和/或输出电路68,该输入和/或输出电路68被配置为例如经由发射机或收发机天线70来发送比特流。
图21是示例解码器80的一些组件的示意图,该解码器80包括一个或多个处理器和例如一个或多个存储器。图22中所示的解码器80被配置为执行根据本文的实施例的解码过程。
具体地,如图22所示,解码器80包括处理器82、通信接口88、输入/输出电路90、一个或多个存储器84以及计算机程序86。处理器82可以是能够执行存储在一个或多个存储器84中的计算机程序86所包含的软件指令的合适的中央处理单元(CPU)、多处理器、微控制器、数字信号处理器(DSP)、专用集成电路(ASIC)等中的一个或多个的任意组合。一个或多个存储器84例如是数据缓冲器、读写(RWM)存储器或只读(ROM)存储器。解码器80包括具有输入和/或输出电路90的通信接口88,该输入和/或输出电路90被配置为例如经由接收机或收发机来接收比特流。
如图23所示,编码器60可以具有被配置为执行本文描述的方法的单元、模块或电路。例如,编码器60包括图片结构定义单元/模块100,该图片结构定义单元/模块100被配置为如本文所述定义图片片段单元的结构。具体地,图片结构定义单元/模块100将图片分为多个图片片段组,并且向每个图片片段组指派唯一的组ID。针对每个图片片段组,组ID指派单元/模块102将该图片片段组分为一个或多个图块,并向该图片片段组中的每个图片片段指派该图片片段组的组ID。编码单元/模块104将每个图片片段组的图片片段编码到比特流中,发射单元/模块106向解码器(例如解码器80)发送编码比特流。
如图24所示,解码器80还可以具有被配置为执行本文描述的方法的单元、模块或电路。例如,在该实施例中,解码器80包括接收单元/模块110,其被配置为接收如本文所述的比特流。具体地,比特流包括一个或多个编码图片片段组,每个图片片段组包括组ID和一个或多个编码图片片段。提取单元/模块112从比特流中提取第一图片片段组作为单个实体,并且解码单元/模块114以预定顺序对第一图片片段组中的所述一个或多个图片片段进行解码,如前所述。
图25示出了示例系统或方法120,其中根据本文所述的实施例配置的编码器60和/或解码器60将是有用的。系统120包括媒体源122(例如,捕获、渲染器或文件)。媒体源122被馈送到投影映射124,然后被馈送到如本文先前所述配置的图块编码器或转码器(例如,编码器60)。经编码的信息(例如,比特流)可以存储在存储器126中,然后被馈送到服务器128。它可以通过网络130发送到观看设备132。例如,图像是视频之一,并且观看设备132具有如本文所述配置的解码器80,用于对比特流进行解码,渲染134解码图片,并将图像显示在显示器140上以供观看设备132的用户观看。这种观看设备可以是例如头戴式显示器(HMD)设备或任何显示设备。
参考附图更全面地描述本文中设想的一些实施例。然而,其他实施例包含在本文公开的主题的范围内。所公开的主题不应被解释为仅限于本文阐述的实施例;而是这些实施例作为示例被提供,以将主题的范围传达给本领域技术人员。
- 基于图块组ID对图片进行编码和解码
- 用于基于图片组(GOP)对视频数据流进行编码的方法