掌桥专利:专业的专利平台
掌桥专利
首页

视频译码中的时间运动约束子图像指示

文献发布时间:2023-06-19 12:19:35


视频译码中的时间运动约束子图像指示

相关申请交叉引用

本专利申请要求王业奎等人于2019年1月9日提交的申请号为62/790,207、发明名称为“视频译码中的子图像(Sub-Pictures in Video Coding)”的美国临时专利申请的权益,其全部内容通过引用结合在本申请中。

技术领域

本发明大体上涉及视频译码,具体涉及视频译码中的子图像管理。

背景技术

即使在视频较短的情况下也需要大量的视频数据进行描述,当数据要在带宽容量有限的通信网络中流式传输或以其它方式传输时,这样可能会造成困难。因此,在现代电信网络中传输视频数据之前通常会对视频数据进行压缩。由于内存资源可能有限,当在存储设备中存储视频时,视频的大小也可能成为问题。视频压缩设备通常在源侧使用软件和/或硬件在传输或存储视频数据之前对视频数据进行编码,从而减少用于表示数字视频图像所需的数据量。然后,由用于对视频数据进行解码的视频解压缩设备在目的地侧接收压缩的数据。在有限的网络资源以及对更高视频质量的需求不断增长的情况下,需要改进压缩和解压缩技术,这些改进的技术在几乎不降低图像质量的情况下能够提高压缩比。

发明内容

在一个实施例中,本发明包括一种在解码器中实现的方法,所述方法包括:所述解码器的接收器接收码流,所述码流包括参数集和通过对图像进行分割获得的一个或多个子图像;所述解码器的处理器对所述参数集进行解析,获得表示当前子图像是时间运动约束子图像的标志;所述处理器根据所述标志,独立于所述图像,从所述码流中提取所述当前子图像;所述处理器对所述当前子图像进行解码,以产生视频序列;所述处理器发送所述视频序列,以用于显示。在一些视频译码系统中,可以将所有子图像统一设置为时间运动约束子图像,或完全不允许使用时间运动约束子图像。此类时间运动约束子图像以降低译码效率为代价提供了独立提取功能。然而,在基于感兴趣区域的应用中,应该对感兴趣区域进行编码以进行独立提取,而感兴趣区域之外的区域不需要采用这种功能。因此,会导致其余子图像译码效率降低,且没有得到任何实际价值。在本示例中,可以在SPS中指示标志,以表示子图像是否为时间运动约束子图像。所述标志允许提供独立提取功能的时间运动约束子图像和非运动约束子图像进行组合,以便在不需要独立提取时提高译码效率。因此,所述标志有助于增强功能和/或提高译码效率。这样就降低了编码器和解码器侧的网络资源、内存资源和/或处理资源的占用率。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,包括所述标志的所述参数集为序列参数集(sequence parameter set,SPS)。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述参数集包括用于所述一个或多个子图像中的每个时间运动约束子图像的至少一个标志。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,用于所述一个或多个子图像中的每个非时间运动约束子图像的标志被省略;所述方法还包括:所述处理器推断每个省略的标志的值等于0。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述标志为subpic_motion_constrained_flag[i],其中,i为所述当前子图像的索引。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述参数还包括所述一个或多个子图像中的每个子图像的子图像标识符(identifier,ID)。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述参数集还包括所述一个或多个子图像中的每个子图像的子图像大小和所述一个或多个子图像中的每个子图像的子图像位置。

在一个实施例中,本发明包括一种在编码器中实现的方法,所述方法包括:所述编码器的处理器将图像分割成多个子图像;所述处理器将当前子图像作为时间运动约束子图像编码在码流中;所述处理器将参数集编码在所述码流中,所述参数集包括表示所述当前子图像是所述时间运动约束子图像的标志,所述时间运动约束子图像可以以独立于所述图像的方式从所述码流中提取;将所述码流存储在所述编码器的存储器中,以向解码器发送。在一些视频译码系统中,可以将所有子图像统一设置为时间运动约束子图像,或完全不允许使用时间运动约束子图像。此类时间运动约束子图像以降低译码效率为代价提供了独立提取功能。然而,在基于感兴趣区域的应用中,应该对感兴趣区域进行编码以进行独立提取,而感兴趣区域之外的区域不需要采用这种功能。因此,会导致其余子图像译码效率降低,且没有得到任何实际价值。在本示例中,可以在SPS中指示标志,以表示子图像何时为时间运动约束子图像。所述标志允许提供独立提取功能的时间运动约束子图像和非运动约束子图像进行组合,以便在不需要独立提取时提高译码效率。因此,所述标志有助于增强功能和/或提高译码效率。这样就降低了编码器和解码器侧的网络资源、内存资源和/或处理资源的占用率。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,包括所述标志的所述参数集为序列参数集(sequence parameter set,SPS)。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述参数集包括用于所述一个或多个子图像中的每个时间运动约束子图像的至少一个标志。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,用于所述一个或多个子图像中的每个非时间运动约束子图像的标志被省略。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述标志为subpic_motion_constrained_flag[i],其中,i为所述当前子图像的索引。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述方法还包括:所述处理器将所述一个或多个子图像中的每个子图像的子图像标识符(identifier,ID)编码在所述参数集中。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述方法还包括:所述处理器将所述一个或多个子图像中的每个子图像的子图像大小和所述一个或多个子图像中的每个子图像的子图像位置编码在所述参数集中。

在一个实施例中,本发明包括一种视频译码设备,包括:处理器、存储器、耦合到所述处理器的接收器以及耦合到所述处理器的发送器,其中,所述处理器、所述存储器、所述接收器以及所述发送器用于执行上述任一方面所述的方法。

在一个实施例中,本发明包括一种非瞬时性计算机可读介质,所述非瞬时性计算机可读介质包括供视频译码设备使用的计算机程序产品,其中,所述计算机程序产品包括存储在所述非瞬时性计算机可读介质中的计算机可执行指令,当处理器执行所述计算机可执行指令时,使得所述视频译码设备执行上述任一方面所述的方法。

在一个实施例中,本发明包括一种解码器,所述解码器包括:接收模块,用于接收码流,所述码流包括参数集和通过对图像进行分割获得的一个或多个子图像;解析模块,用于对所述参数集进行解析,获得表示当前子图像是时间运动约束子图像的标志;提取模块,用于根据所述标志,独立于所述图像,从所述码流中提取所述当前子图像;解码模块,用于对所述当前子图像进行解码,以产生视频序列;发送模块,用于发送所述视频序列,以用于显示。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述解码器还用于执行上述任一方面所述的方法。

在一个实施例中,本发明包括一种编码器,所述编码器包括:分割模块,用于将图像分割成多个子图像;编码模块,用于:将当前子图像作为时间运动约束子图像编码在码流中;将参数集编码在所述码流中,所述参数集包括表示所述当前子图像是所述时间运动约束子图像的标志,所述时间运动约束子图像可以以独立于所述图像的方式从所述码流中提取;存储模块,用于存储所述码流,以向解码器发送。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述编码器还用于执行上述任一方面所述的方法。

为清楚起见,上述任一实施例可以与上述其它任一或多个实施例结合以产生本发明范围内的新实施例。

在下文结合附图和权利要求的详细描述中,将更清楚地理解这些以及其它特征。

附图说明

为了更全面地理解本发明,现结合附图和具体实施方式,进行以下简要说明,其中,相似的附图标记表示相似的部件。

图1为一种视频信号译码的示例性方法的流程图。

图2为一种用于视频译码的示例性编码和解码(编解码)系统的示意图。

图3为一种示例性视频编码器的示意图。

图4为一种示例性视频解码器的示意图。

图5为示例性码流和从码流中提取的子码流的示意图。

图6为分割成子图像的示例性图像的示意图。

图7为一种用于将条带与子图像的布局进行关联的示例性机制的示意图。

图8为分割成子图像的另一示例性图像的示意图。

图9为一种示例性视频译码设备的示意图。

图10为一种对包括时间运动约束子图像的码流进行编码的示例性方法的流程图。

图11为一种对包括时间运动约束子图像的码流进行解码的示例性方法的流程图。

图12为一种对包括时间运动约束子图像的码流进行指示的示例性系统的示意图。

具体实施方式

首先应理解,尽管下文提供了一项或多项实施例的说明性实施方式,但所公开的系统和/或方法可使用任何数量的技术来实现,无论该技术是当前已知的还是现有的。本发明决不应限于下文所说明的说明性实现方式、附图和技术,包括本文所说明并描述的示例性设计和实现方式,而是可以在所附权利要求书的范围以及其等效物的完整范围内修改。

本文采用各种缩略语,例如编码树块(coding tree block,CTB)、编码树单元(coding tree unit,CTU)、编码单元(coding unit,CU)、编码视频序列(coded videosequence,CVS)、联合视频专家组(Joint Video Experts Team,JVET)、运动约束分块集(motion constrained tile set,MCTS)、最大传输单元(maximum transfer unit,MTU)、网络抽象层(network abstraction layer,NAL)、图像顺序编号(picture order count,POC)、原始字节序列载荷(raw byte sequence payload,RBSP)、序列参数集(sequenceparameter set,SPS)、通用视频编码(versatile video coding,VVC)以及工作草案(working draft,WD)。

可以采用多种视频压缩技术来减小视频文件的大小,同时将数据损失降至最低。例如,视频压缩技术可以包括进行空间(例如,帧内)预测和/或时间(例如,帧间)预测以减少或去除视频序列中的数据冗余。对于基于块的视频编码,视频条带(slice)(例如,视频图像或视频图像的一部分)可以被分割成若干视频块,视频块也可以称为树块(treeblock)、编码树块(coding tree block,CTB)、编码树单元(coding tree unit,CTU)、编码单元(coding unit,CU)和/或编码节点。采用针对同一个图像中的相邻块中的参考样本的空间预测来编码图像的帧内编码(I)条带中的视频块。可以采用针对同一个图像中的相邻块中的参考样本的空间预测或针对其它参考图像中的参考样本的时间预测来编码图像的帧间编码单向预测(P)条带或双向预测(B)条带中的视频块。图像(picture/image)可以称为帧,参考图像可以称为参考帧。空间或时间预测产生表示图像块的预测块。残差数据表示原始图像块和预测块之间的像素差。相应地,根据指向构成预测块的参考样本的块的运动矢量和表示编码块与预测块之间差值的残差数据对帧间编码块进行编码。根据帧内编码模式和残差数据对帧内编码块进行编码。为了进一步压缩,可以将残差数据从像素域变换到变换域,从而产生残差变换系数,可以对该残差变换系数进行量化。量化变换系数最初可以排列在二维阵列中。可以扫描量化变换系数,以产生变换系数的一维矢量。可以应用熵编码,来实现进一步压缩。下文将更详细地描述这些视频压缩技术。

为了保证经编码视频能够被准确解码,按照相应的视频编码(coding)标准进行视频编码和解码。视频编码标准包括国际电联电信标准化部门(InternationalTelecommunication Union(ITU)Standardization Sector,ITU-T)H.261、国际标准化组织/国际电工委员会(International Organization for Standardization/International Electrotechnical Commission,ISO/IEC)运动图像专家组(MotionPicture Experts Group,MPEG)-1第2部分、ITU-TH.262或ISO/IEC MPEG-2第2部分、ITU-TH.263、ISO/IEC MPEG-4第2部分、高级视频编码(Advanced Video Coding,AVC),也称为ITU-T H.264或ISO/IEC MPEG-4第10部分、高效视频编码(High Efficiency VideoCoding,HEVC),也称为ITU-T H.265或MPEG-H第2部分)。AVC包括标准的扩展,如可伸缩视频编码(Scalable Video Coding,SVC)、多视点视频编码(Multiview Video Coding,MVC)、多视点视频编码+深度(Multiview Video Coding plus Depth,MVC+D)以及三维(3D)AVC(three dimensional(3D)AVC,3D-AVC)。HEVC包括标准的扩展,如可伸缩HEVC(ScalableHEVC,SHVC)、多视点HEVC(Multiview HEVC,MV-HEVC)以及3D HEVC(3D-HEVC)。ITU-T和ISO/IEC的联合视频专家组(joint video experts team,JVET)已开始研发一种称为通用视频编码(Versatile Video Coding,VVC)的视频编码标准。VVC包含在包括JVET-L1001-v9的工作草案(Working Draft,WD)中。

为了对视频图像进行编码,首先对图像进行分割,并将各个分割部分编码在码流中。图像分割方案有多种。例如,可以将图像分割成常规条带、非独立条带、分块(tile)和/或根据波前并行处理(Wavefront Parallel Processing,WPP)方式进行分割。为了简单起见,HEVC对编码器进行限制,使得在将条带分割成用于视频编码的CTB组时,只能分割成常规条带、非独立条带、分块、根据WPP方式进行分割及其组合。此类分割方式可以用于支持最大传输单元(Maximum Transfer Unit,MTU)大小匹配、并行处理以及降低端到端时延。MTU表示单个数据包能够传输的最大数据量。如果数据包荷载超过MTU,则通过称为分片的过程将数据包载荷拆分成两个数据包。

常规条带,也简称为条带,是图像的分割部分。该常规条带可以独立于同一个图像内的其它常规条带进行重建,但是,由于存在环路滤波操作,存在相互依赖关系。将每个常规条带封装在各自的网络抽象层单元(Network Abstraction Layer,NAL)中进行传输。此外,可以禁用帧内预测(样本内预测、运动信息预测、编码模式预测)和跨条带边界的熵编码依赖性,以支持独立重建。这种独立重建支持并行化。基于常规条带的并行化极大程度地减少了处理器间或核间通信。但是,由于每个常规条带都是独立的,因此每个条带都与单独的条带头相关联。由于每个条带都具有条带头比特开销,且缺乏跨条带边界的预测,所以采用常规条带会产生大量的编码开销。此外,可以采用常规条带来支持MTU大小匹配需求。具体而言,由于常规条带封装在单独的NAL单元中,并且可以独立编码,因此每个常规条带需要小于MTU方案中的MTU,以避免该条带被拆分成多个数据包。因此,为了实现并行化和MTU大小匹配,图像中的条带布局会互相矛盾。

非独立条带与常规条带类似,但缩短了条带头,可以允许在不破坏帧内预测的情况下的图像树块边界处的分割。相应地,非独立条带允许将常规条带分成多个NAL单元。这样,可以在完成整个常规条带的编码之前,先将该常规条带的一部分发送出去,从而降低端到端时延。

分块(tile)是图像中由水平和垂直边界形成的分割部分,这些边界形成了分块的列和行。分块可以按照光栅扫描顺序(从右到左,从上到下)进行编码。CTB的扫描顺序为在一个分块内执行扫描的顺序。相应地,在处理下一个分块内的CTB之前,对第一个分块内的CTB按照光栅扫描顺序进行编码。与常规条带类似,分块消除了对帧内预测和熵解码的依赖。但是,单独的NAL单元中可以不包括分块,因此,分块不能用于MTU大小匹配。每个分块可以由一个处理器/核处理,解码相邻分块的处理单元之间的帧内预测所采用的处理器间/核间通信可以限于传输共享的条带头(当相邻分块在同一个条带内时)以及进行重建样本和元数据的环路滤波相关共享。当条带中包括多于一个分块时,可以在条带中指示除该条带中的第一入口点偏移(entry point offset)外的每个分块的入口点字节偏移。对于每个条带和分块,需要满足以下条件中的至少一个:(1)条带中的所有编码树块都属于同一个分块;(2)分块中的所有编码树块都属于同一个条带。

在WPP中,图像被分割成单行CTB。熵解码和预测机制可以使用其它行中的CTB的数据。并行处理通过CTB行的并行解码实现。例如,当前行可以与前一行并行解码。但是,当前行的解码会比前几行的解码过程延迟两个CTB。该延迟确保了在对当前CTB进行译码之前,与位于当前行中当前CTB上方和右侧的CTB相关的数据可用。当用图形表示时,该方法看起来像波面。这种交错式开始有助于使用与图像包括的CTB行一样多的处理器/核实现并行化。由于允许在图像内的相邻树块行之间进行帧内预测,因此可能需要大量处理器间/核间通信来实现帧内预测。WPP分割不考虑NAL单元大小。因此,WPP不支持MTU大小匹配。然而,常规条带可以与WPP结合使用,并具有一定的译码开销,以根据需要实现MTU大小匹配。

分块也可以包括运动约束分块集。运动约束分块集(motion constrained tileset,MCTS)是一种分块集。设计该分块集使得关联的运动矢量被限制在指向MCTS内部的整数样本位置和指向仅需要在MCTS内部的整数样本位置进行插值的分数样本位置。此外,不允许将从MCTS外部的块推导出的运动矢量候选用于时间运动矢量预测。这样,在分块都包括在MCTS中的情况下,可以独立解码每个MCTS。时间MCTS补充增强信息(supplementalenhancement information,SEI)消息可以用于表示码流中存在MCTS,并指示该MCTS。该MCTS SEI消息提供补充信息,该补充信息可以用于MCTS子码流提取(表示为SEI消息语义的一部分),以生成MCTS集的一致性码流。所述信息包括提取信息集的个数、每个提取信息集定义的MCTS集的个数以及包括的替换视频参数集(video parameter set,VPS)、替换序列参数集(sequence parameter set,SPS)、替换图像参数集(picture parameter set,PPS)的原始字节序列载荷(raw byte sequence payload,RBSP)字节,以便在后续子码流提取过程中使用。因为一个或所有条带地址相关的语法元素(包括first_slice_segment_in_pic_flag和slice_segment_address)可以在提取的子码流中采用不同的值,所以在按照MCTS子码流提取过程提取子码流时,可以重写或替换参数集合(VPS、SPS、PPS),并更新条带头。

图像也可以分割成一个或多个子图像。子图像是分块组/条带的矩形集合,该矩形集合起始于tile_group_address等于0的分块组。每个子图像可以参考单独的PPS,因此可以具有单独的分块分割方式。子图像在解码过程中可以当作图像来处理。用于解码当前子图像的参考子图像是通过从解码图像缓冲区中的参考图像中提取与当前子图像并置的区域而生成的。提取的区域当作解码后的子图像来处理。可以在图像内相同大小和相同位置的子图像之间进行帧间预测。分块组又称为条带,是图像或子图像中相关分块的序列。可以推导出若干项来确定子图像在图像中的位置。例如,每个当前子图像可以按照CTU光栅扫描顺序定位在图像内的下一个未被占用的位置,该图像足够大可以将当前子图像包含在图像边界内。

进一步地,图像分割可以基于图像级分块和序列级分块。序列级分块可以包括MCTS的功能,并且可以实现为子图像。例如,图像级分块可以定义为图像中的特定分块列和特定分块行内的编码树块的矩形区域。序列级分块可以定义为包括在不同帧中的编码树块的矩形区域集合,其中每个矩形区域又包括一个或多个图像级分块,并且编码树块的矩形区域集合可独立于任何其它类似的矩形区域集合进行解码。序列级分块组集合(sequencelevel tile group set,STGPS)是一组此类序列级分块。STGPS可以在非视频编码层(videocoding layer,VCL)NAL单元中用NAL单元头中的关联标识符(identifier,ID)进行指示。

上述基于子图像的分割方案可能会存在一些问题。例如,当采用子图像时,可以在子图像内进行分块(将子图像分割成分块)来支持并行处理。用于并行处理的子图像的分块分割方式可以随着图像的改变而改变(例如,用于并行处理、负载均衡),因此可以在图像级别(例如,在PPS中)进行管理。然而,可以采用子图像分割方式(将图像分割成子图像)来支持感兴趣区域(region of interest,ROI)和基于子图像的图像访问。在这种情况下,PPS中的子图像或MCTS的指示效率不高。

在另一示例中,当图像中的任意一个子图像编码为时间运动约束子图像时,图像中的所有子图像都可以编码为时间运动约束子图像。这种图像分割方式可能会造成限制。例如,将子图像编码为时间运动约束子图像可能会降低编码效率,以得到附加功能。然而,在基于感兴趣区域的应用中,通常只有一个或少数子图像会使用基于时间运动约束子图像的功能。因此,会导致其余子图像编码效率降低,且没有得到任何实际价值。

在另一示例中,用于表示子图像大小的语法元素可以以亮度CTU大小为单位进行表示。相应地,子图像宽度和子图像高度都应为CtbSizeY的整数倍。这种表示子图像宽度和子图像高度的机制可能会导致各种问题。例如,子图像分割方式只适用于图像宽度和/或图像高度为CtbSizeY的整数倍的图像。这样,对于包括的大小不是CTbSizeY的整数倍的图像,子图像分割方式不可用。如果当图像大小不是CtbSizeY的整数倍时,子图像分割方式应用于图像宽度和/或图像高度,则对于最右侧的子图像和最底部的子图像的以亮度样本为单位的子图像宽度和/或子图像高度的推导将是错误的。这种错误的推导会导致一些编码工具产生错误的结果。

在另一示例中,可以不指示图像中子图像的位置。而使用以下规则推导出该位置。当前子图像按照CTU光栅扫描顺序定位在图像内的下一个此类未被占用的位置,该图像足够大可以将子图像包含在图像边界内。以这种方式推导子图像的位置在一些情况下可能会出错。例如,如果一个子图像在传输中丢失,那么将会错误地推导其它子图像的位置,并且会将解码的样本放置在错误的位置。当子图像按照错误的顺序到达时,会产生同样的问题。

在另一示例中,解码子图像可能需要提取参考图像中的并置子图像。这可能会在处理器和内存资源占用方面增加额外的复杂度并由此造成负担。

在另一示例中,当子图像被指定为时间运动约束子图像时,禁用遍历子图像边界的环路滤波器。无论是否启用了遍历分块边界的环路滤波器,都会发生这种情况。此类约束条件可能限制性太强,并且可能会导致具有多个子图像的视频图像的视觉伪影。

在另一示例中,SPS、STGPS、PPS和分块组头之间的关系如下:STGPS参考SPS,PPS参考STGPS,分块组头/条带头参考PPS。但是,STGPS和PPS应该是正交的,而非PPS参考STGPS。上述设置也可以不允许相同图像的所有分块组参考相同的PPS。

在另一示例中,每个STGPS可以包括子图像的四个边的ID。这些ID用于标识具有相同边界的子图像,以便定义子图像的相对空间关系。然而,在一些情况下,此类信息可能不足以推导序列级分块组集合的位置和大小信息。在其它情况下,指示位置和大小信息可能是冗余的。

在另一示例中,STGPS ID可以在VCL NAL单元的NAL单元头中使用8个比特进行指示。这可能有助于提取子图像。但此类指示可能会不必要地增加NAL单元头的长度。另一个问题是,除非对序列级分块组集合进行约束以防止重叠,否则一个分块组可能与多个序列级分块组集合相关联。

本文公开了用于解决上述问题中的一个或多个问题的各种机制。在第一示例中,子图像的布局信息包括在SPS而非PPS中。子图像的布局信息包括子图像位置和子图像大小。子图像位置是指子图像的左上角样本与图像的左上角样本之间的偏移。子图像大小是指子图像的高度和宽度,该高度和宽度以亮度样本为单位。由于分块可能随着图像的改变而改变,一些系统在PPS中包括分块方式信息。而子图像可用于支持ROI应用和基于子图像的访问。这些功能不会根据每个图像发生改变。此外,视频序列可以包括单个SPS(或每个视频片段一个SPS),并且可以包括每个图像最多一个PPS。在SPS中携带子图像的布局信息确保仅针对序列/分段指示一次布局,而非针对每个PPS重复指示布局。相应地,在SPS中指示子图像布局提高了译码效率,因此降低了编码器和解码器侧的网络资源、内存资源和/或处理资源的占用率。此外,一些系统中,由解码器推导子图像信息。指示子图像信息减少了在丢包情况下出错的可能性,并且支持提取子图像的附加功能。因此,在SPS中指示子图像布局改进了编码器和/或解码器的功能。

在第二示例中,子图像宽度和子图像高度被约束为CTU大小的倍数。但是,位于图像右边界的子图像和位于图像底部边界的子图像不受上述约束。如上所述,一些视频系统可以限制子图像的高度和宽度为CTU大小的倍数。这会妨碍子图像在很多图像布局中的正确操作。通过允许底部子图像的高度和右侧子图像的宽度不为CTU大小的倍数,子图像可以与任何图像一起使用而不会造成解码错误。这有利于增强编码器和解码器的功能。此外,功能增强有利于编码器更高效地对图像进行编码。这样就降低了编码器和解码器侧的网络资源、内存资源和/或处理资源的占用率。

在第三示例中,子图像被约束覆盖图像,且无间隙、无重叠。如上所述,一些视频译码系统允许子图像间存在间隙和重叠。这可能会导致分块组/条带与多个子图像相关联。如果编码器允许这样处理,即使解码方案很少使用,也必须构建解码器来支持这样的编码方案。通过禁止子图像间存在间隙和重叠,可以降低解码器的复杂度,因为当确定子图像大小和位置时,解码器不需要考虑潜在的间隙和重叠。此外,禁止子图像间存在间隙和重叠降低了编码器侧率失真优化(rate distortion optimization,RDO)过程的复杂度,因为编码器在为视频序列选择编码方案时可以不考虑间隙和重叠的情况。因此,避免存在间隙和重叠可以降低编码器和解码器侧的内存资源和/或处理资源的占用率。

在第四示例中,可以在SPS中指示标志,以表示子图像何时为时间运动约束子图像。如上所述,一些系统可以将所有子图像统一设置为时间运动约束子图像,或完全不允许使用时间运动约束子图像。此类时间运动约束子图像以降低译码效率为代价提供了独立提取功能。然而,在基于感兴趣区域的应用中,应该对感兴趣区域进行编码以进行独立提取,而感兴趣区域之外的区域不需要采用这种功能。因此,会导致其余子图像译码效率降低,且没有得到任何实际价值。相应地,所述标志允许提供独立提取功能的时间运动约束子图像和非运动约束子图像进行组合,以便在不需要独立提取时提高译码效率。因此,所述标志有助于增强功能和/或提高译码效率。这样就降低了编码器和解码器侧的网络资源、内存资源和/或处理资源的占用率。

在第五示例中,在SPS中指示一套完整的子图像ID,条带头包括子图像ID,所述子图像ID用于表示包括相应条带的子图像。如上所述,一些视频译码系统中,指示相对于其它子图像的子图像位置。如果子图像丢失或单独提取,则会导致问题。通过使用ID表示每个子图像,能够定位子图像并调整子图像的大小,而无需参考其它子图像。反过来,这样还支持纠错以及仅提取部分子图像而不传输其它子图像的应用。在SPS中,包括所有子图像ID的完整列表可以和相关的大小信息一起发送。每个条带头可以包括子图像ID,所述子图像ID用于表示包括相应条带的子图像。这样,能够提取和定位子图像及对应的条带,而无需参考其它子图像。因此,所述子图像ID有助于增强功能和/或提高译码效率。这样就降低了编码器和解码器侧的网络资源、内存资源和/或处理资源的占用率。

在第六示例中,针对每个子图像指示级别。在一些视频译码系统中,针对图像指示级别。级别表示解码图像所需的硬件资源。如上所述,不同的子图像在一些情况下可能具有不同的功能,因此在译码过程中可以差别处理。这样,基于图像的级别可能无法用于解码一些子图像。因此,本发明包括每个子图像的级别。这样,每个子图像可以独立于其它子图像进行编码,而不会因为对根据较简单的机制编码的子图像设置过高的解码要求而对解码器造成过度负担。指示子图像级别信息有助于增强功能和/或提高译码效率。这样就降低了编码器和解码器侧的网络资源、内存资源和/或处理资源的占用率。

图1为一种视频信号译码的示例性操作方法100的流程图。具体地,视频信号在编码器侧进行编码。编码过程通过使用各种机制来压缩视频信号以减小视频文件的大小。在减少相关的带宽开销的同时,可以通过较小的文件将压缩的视频文件传输给用户。然后,解码器对压缩的视频文件进行解码,以重建原始视频信号,向终端用户显示。解码过程通常是编码过程的逆过程,以使得解码器一致地重建视频信号。

在步骤101中,将视频信号输入到编码器中。例如,所述视频信号可以是存储在存储器中的未压缩的视频文件。又如,视频文件可以由视频捕获设备(例如,摄像机)捕获,并且进行编码以支持视频的实时流传输(live streaming)。所述视频文件可以同时包括音频分量和视频分量。所述视频分量包括一系列图像帧,当按照顺序观看时,这些图像帧会产生运动的视觉效果。这些帧包括根据光表示的像素(本文称为亮度分量(或亮度样本))和色彩(称为色度分量(或色彩样本))。在一些示例中,所述帧还可以包括深度值以支持三维观看。

在步骤103中,将视频分割成块。分割包括将每个帧中的像素细分为正方形和/或矩形块进行压缩。例如,在高效视频编码(High Efficiency Video Coding,HEVC)(也称为H.265和MPEG-H第2部分)中,可以首先将帧划分成编码树单元(coding tree unit,CTU),这些编码树单元是预定义大小(例如,64个像素×64个像素)的块。CTU同时包括亮度样本和色度样本。可以采用编码树将CTU划分成块,然后递归地细分这些块,直到获得支持进一步编码的结构。例如,可以对帧的亮度分量进行细分,直到各个块包括相对均匀的亮度(lighting)值。此外,可以对帧的色度分量进行细分,直到各个块包括相对均匀的色彩(color)值。因此,视频帧的内容不同,分割机制就不同。

在步骤105中,采用各种压缩机制来压缩在步骤103中分割的图像块。例如,可以采用帧间预测和/或帧内预测。帧间预测旨在利用共同场景中的对象往往出现在连续帧中这一事实。因此,无需在相邻帧中对参考帧中描述对象的块进行重复描述。具体地,一个对象,如一张桌子,可以在多个帧中保持恒定的位置。因此,只描述一次桌子,相邻帧可以重新参考参考帧。可以采用模式匹配机制来匹配多个帧中的对象。此外,由于对象移动或摄像机移动等,移动对象可以跨多个帧表示。在特定示例中,视频可以跨多个帧显示在屏幕上移动的汽车。运动矢量可以用来描述这种移动。运动矢量是一个二维矢量,提供从帧中的对象的坐标到参考帧中的该对象的坐标的偏移。因此,帧间预测可以将当前帧中的图像块编码为运动矢量集合,表示相对于参考帧中对应块的偏移。

帧内预测对公共帧中的块进行编码。帧内预测利用亮度分量和色度分量往往在帧中聚集这一事实。例如,一棵树的一部分中的一片绿色往往与几片类似的绿色相邻。帧内预测采用多种方向预测模式(例如,HEVC中的33种模式)、平面模式以及直流(directcurrent,DC)模式。方向模式表示当前块与对应方向上相邻块的样本相似/相同。平面模式表示可以根据行边缘的相邻块对行/列(例如平面)上的一系列块进行插值。实际上,平面模式通过采用变化值的相对恒定的斜率来表示亮度/色彩在行/列之间的平滑过渡。DC模式用于边界平滑,表示块和方向预测模式的角方向相关联的所有相邻块的样本相关联的平均值相似/相同。因此,帧内预测块可以将图像块表示为各种关系预测模式值而非实际值。此外,帧间预测块可以将图像块表示为运动矢量值而非实际值。在这两种情况中的任一种情况下,预测块在一些情况下可能无法准确地表示图像块。所有差值都存储在残差块中。可以对残差块进行变换以进一步压缩文件。

在步骤107中,可以应用各种滤波技术。在HEVC中,根据环内滤波方案应用滤波器。上文描述的基于块的预测可以在解码器侧产生块状图像。此外,基于块的预测方案可以对块进行编码,然后重建经编码块,供以后用作参考块。所述环内滤波方案迭代地将噪声抑制滤波器、去块效应滤波器、自适应环路滤波器以及样本自适应偏移(sample adaptiveoffset,SAO)滤波器应用于块/帧。这些滤波器减少了此类块伪影,从而可以准确地重建经编码文件。此外,这些滤波器减少了重建参考块伪影,使得伪影不太可能在基于重建参考块编码的后续块中产生其它的伪影。

在步骤109中,一旦对视频信号进行了分割、压缩和滤波,则将所得数据编码在码流中。所述码流包括上述数据以及支持在解码器侧进行适当的视频信号重建所需要的任何指示数据(例如,语法)。例如,此类数据可以包括分割数据、预测数据、残差块和向解码器提供译码指令的各种标志。所述码流可以存储在存储器中,以便在请求时向解码器传输。所述码流还可以向多个解码器广播和/或组播。码流的产生是一个迭代过程。因此,步骤101、103、105、107和109可以在多个帧和块上连续和/或同时执行。图1所示的顺序是为了清楚和便于描述而呈现的,并非旨在将视频译码过程限制于特定顺序。

在步骤111中,解码器接收所述码流并开始解码过程。具体地,解码器采用熵解码方案将所述码流转换为对应的语法数据和视频数据。在步骤111中,所述解码器采用所述码流中的语法数据来确定帧的分割方式。该分割方式应与步骤103中的块分割方式的结果匹配。现在描述在步骤111中采用的熵编码/解码。编码器在压缩过程中做出许多选择,例如根据一个或多个输入图像中值的空间定位从多个可能选项中选择块分割方案。指示确切的选择可能会使用大量的位元。本文中使用的位元是被视为变量的二进制值(例如,可能根据上下文变化的比特值)。熵编码有助于编码器舍弃任何明显不适合特定情况的选项,从而留下一组可使用的选项。然后,为每个可使用的选项分配一个码字。码字的长度取决于可使用选项的数量(例如,一个位元对应两个选项,两个位元对应三个至四个选项等)。然后,编码器对所选选项的码字进行编码。该方案减小了码字的大小,因为码字的大小与唯一表示从可使用的选项的较小子集中的一个选项,而非唯一表示从所有可能选项的潜在较大集合中的选项所需要的码字一样大。然后,解码器通过与编码器类似的方式确定可使用选项的集合来解码所述选项。通过确定可使用选项的集合,解码器可以读取码字并确定编码器做出的选择。

在步骤113中,所述解码器执行块解码。具体地,解码器进行逆变换来生成残差块。然后,解码器使用残差块和对应的预测块,根据分割方式来重建图像块。所述预测块可以包括在步骤105中编码器侧生成的帧内预测块和帧间预测块。然后,根据在步骤111中确定的分割数据将重建图像块放置在重建视频信号的帧中。步骤113的语法还可以通过上文描述的熵编码在码流中指示。

在步骤115中,以类似于步骤107中编码器侧的方式对重建视频信号的帧进行滤波。例如,可以对帧应用噪声抑制滤波器、去块效应滤波器、自适应环路滤波器以及SAO滤波器以去除块伪影。一旦对帧进行滤波,可以在步骤117中将视频信号输出至显示器,供终端用户观看。

图2为一种用于视频译码的示例性编码和解码(编解码)系统200的示意图。具体地,编解码系统200提供用于实现操作方法100的功能。广义地,编解码系统200用于描述编码器和解码器中采用的组件。如操作方法100中的步骤101和103所描述的,编解码系统200接收并分割视频信号,从而产生经分割的视频信号201。如方法100中的步骤105、107和109所描述的,当作为编码器时,编解码系统200将经分割的视频信号201压缩到经编码码流中。如操作方法100中的步骤111、113、115和117所描述的,当作为解码器时,编解码系统200从码流中生成输出视频信号。编解码系统200包括总体译码器控制组件211、变换缩放和量化组件213、帧内估计组件215、帧内预测组件217、运动补偿组件219、运动估计组件221、缩放和逆变换组件229、滤波器控制分析组件227、环内滤波器组件225、解码图像缓冲区组件223、标头格式和上下文自适应二进制算术编码(context adaptive binary arithmeticcoding,CABAC)组件231。这些组件如图所示相耦合。在图2中,黑线表示待编码/解码数据的运动,而虚线表示控制其它组件操作的控制数据的运动。编码器可以包括编解码系统200中的所有组件。解码器可以包括编解码系统200中的组件的子集。例如,解码器可以包括帧内预测组件217、运动补偿组件219、缩放和逆变换组件229、环内滤波器组件225和解码图像缓冲区组件223。现在对这些组件进行描述。

经分割的视频信号201是已通过编码树分割成像素块的捕获视频序列。编码树采用各种划分模式将像素块细分为更小的像素块。然后,可以将这些块进一步细分为更小的块。所述块可以称为编码树上的节点。将较大的父节点划分成较小的子节点。节点被细分的次数称为节点/编码树的深度。在一些情况下,划分的块可以包括在编码单元(codingunit,CU)中。例如,CU可以是CTU的子部分,包括亮度块、一个或多个红色差色度(Cr)块、一个或多个蓝色差色度(Cb)块以及CU的对应语法指令。划分模式可以包括二叉树(binarytree,BT)、三叉树(triple tree,TT)和四叉树(quad tree,QT),用于根据所采用的划分模式,分别将节点分割成形状不同的两个、三个或四个子节点。将经分割的视频信号201发送至总体译码器控制组件211、变换缩放和量化组件213、帧内估计组件215、滤波器控制分析组件227和运动估计组件221进行压缩。

总体译码器控制组件211用于根据应用约束条件做出与将视频序列的图像编码在码流中相关的决策。例如,总体译码器控制组件211管理码率/码流大小相对于重建质量的优化。可以根据存储空间/带宽可用性和图像分辨率请求做出此类决策。总体译码器控制组件211还根据传输速度管理缓冲区的利用率,以减轻缓存欠载和超载问题。为了处理这些问题,总体译码器控制组件211管理由其它组件进行的分割、预测和滤波。例如,总体译码器控制组件211可以动态增加压缩复杂度以提高分辨率和带宽利用率,或者降低压缩复杂度以降低分辨率和带宽利用率。因此,总体译码器控制组件211控制编解码系统200的其它组件来平衡视频信号重建质量与码率问题。总体译码器控制组件211产生控制数据,该控制数据用于控制其它组件的操作。还将该控制数据发送至标头格式和CABAC组件231,以编码在码流中,从而指示用于在解码器侧解码的参数。

还将经分割的视频信号201发送至运动估计组件221和运动补偿组件219进行帧间预测。可以将经分割的视频信号201的帧或条带划分成多个视频块。运动估计组件221和运动补偿组件219根据一个或多个参考帧中的一个或多个块对所接收的视频块执行帧间预测编码以提供时间预测。编解码系统200可以执行多个编码过程,以便为每个视频数据块选择合适的编码模式等等。

运动估计组件221和运动补偿组件219可以高度集成,但出于概念的目的进行单独说明。由运动估计组件221执行的运动估计是生成运动矢量的过程,运动矢量用于估计视频块的运动。例如,运动矢量可以表示经编码对象相对于预测块的位移。预测块是被发现在像素差方面与待编码块高度匹配的块。预测块也可以称为参考块。此类像素差可以通过绝对差和(sum of absolute difference,SAD)、平方差和(sum of square difference,SSD)或其它差度量来确定。HEVC采用若干编码对象,包括CTU、编码树块(coding tree block,CTB)和CU。例如,可以将CTU划分成CTB,然后可以将CTB划分成CB包括在CU中。CU可以编码为包括预测数据的预测单元(prediction unit,PU)和/或包括CU的变换残差数据的变换单元(transform unit,TU)。运动估计组件221将率失真分析作为率失真优化过程的一部分来生成运动矢量、PU和TU。例如,运动估计组件221可以确定当前块/帧的多个参考块、多个运动矢量等,并且可以选择具有最佳率失真特性的参考块、运动矢量等。最佳率失真特性平衡视频重建的质量(例如,压缩造成的数据丢失量)和编码效率(例如,最终编码的大小)。

在一些示例中,编解码系统200可以计算存储在解码图像缓冲区组件223中的参考图像的子整数像素位置的值。例如,视频编解码系统200可以对参考图像的四分之一像素位置、八分之一像素位置或其它分数像素位置的值进行插值。因此,运动估计组件221可以执行相对于整数像素位置和分数像素位置的运动搜索,并输出具有分数像素精度的运动矢量。运动估计组件221通过比较PU的位置与参考图像的预测块的位置来计算帧间编码条带中视频块的PU的运动矢量。运动估计组件221将计算的运动矢量作为运动数据输出至标头格式和CABAC组件231进行编码,并将运动信息输出至运动补偿组件219。

由运动补偿组件219执行的运动补偿可以涉及根据由运动估计组件221确定的运动矢量获取或生成预测块。同样,在一些示例中,运动估计组件221和运动补偿组件219可以在功能上集成。在接收当前视频块的PU的运动矢量之后,运动补偿组件219可以定位运动矢量指向的预测块。然后,通过从正在编码的当前视频块的像素值中减去预测块的像素值,产生像素差值,从而形成残差视频块。通常,运动估计组件221根据亮度分量进行运动估计,运动补偿组件219将根据亮度分量计算的运动矢量用于色度分量和亮度分量。将预测块和残差块发送至变换缩放和量化组件213。

还将经分割的视频信号201发送至帧内估计组件215和帧内预测组件217。如同运动估计组件221和运动补偿组件219,帧内估计组件215和帧内预测组件217可以高度集成,但出于概念的目的进行单独说明。帧内估计组件215和帧内预测组件217相对于当前帧中的块对当前块进行帧内预测,以替代如上所述的由运动估计组件221和运动补偿组件219在各帧之间执行的帧间预测。具体地,帧内估计组件215确定用于对当前块进行编码的帧内预测模式。在一些示例中,帧内估计组件215从多个测试的帧内预测模式中选择合适的帧内预测模式对当前块进行编码。然后,将所选择的帧内预测模式发送至标头格式和CABAC组件231进行编码。

例如,帧内估计组件215通过对各种测试的帧内预测模式的率失真分析来计算率失真值,并在测试的模式中选择具有最佳率失真特性的帧内预测模式。率失真分析通常确定经编码块和为了产生经编码块进行编码的原始未编码块之间的失真(或误差)量以及用于产生经编码块的码率(例如,比特数)。帧内估计组件215根据各种经编码块的失真和速率计算比率,以确定哪种帧内预测模式可以呈现块的最佳率失真值。另外,帧内估计组件215可以用于根据率失真优化(rate-distortion optimization,RDO)使用深度建模模式(depth modeling mode,DMM)对深度图的深度块进行编码。

当在编码器上实现时,帧内预测组件217可以根据由帧内估计组件215确定的所选帧内预测模式从预测块中生成残差块,或者当在解码器上实现时,从码流中读取残差块。残差块包括预测块和原始块之间的差值,表示为矩阵。然后,将残差块发送至变换缩放和量化组件213。帧内估计组件215和帧内预测组件217可以对亮度分量和色度分量执行操作。

变换缩放和量化组件213用于进一步压缩残差块。变换缩放和量化组件213将离散余弦变换(discrete cosine transform,DCT)、离散正弦变换(discrete sine transform,DST)等变换或概念上类似的变换应用于残差块,从而产生包括残差变换系数值的视频块。还可以使用小波变换、整数变换、子带变换或其它类型的变换。变换可以将残差信息从像素值域变换到变换域,例如频域。变换缩放和量化组件213还用于根据频率等对变换残差信息进行缩放。这种缩放涉及对残差信息施加缩放因子,以便在不同的粒度上量化不同的频率信息,这可能会影响重建视频的最终视觉质量。变换缩放和量化分量213还用于量化变换系数以进一步降低码率。量化过程可以降低与部分或全部系数相关联的位深度。可以通过调整量化参数来修改量化程度。在一些示例中,变换缩放和量化组件213随后可以对包括量化变换系数的矩阵进行扫描。将量化变换系数发送至标头格式和CABAC组件231,以编码在码流中。

缩放和逆变换组件229进行变换缩放和量化组件213的逆操作以支持运动估计。缩放和逆变换组件229进行反缩放、逆变换和/或反量化来重建像素域中的残差块,例如,后续用作参考块,该参考块可以成为另一当前块的预测块。运动估计组件221和/或运动补偿组件219可以通过将残差块与对应预测块相加来计算参考块,以用于对后续块/帧进行运动估计。将滤波器应用于重建参考块,以减少在缩放、量化和变换过程中产生的伪影。当预测后续块时,这些伪影可能导致预测不准确(并产生其它伪影)。

滤波器控制分析组件227和环内滤波器组件225将滤波器应用于残差块和/或重建图像块。例如,来自缩放和逆变换组件229的变换残差块可以与来自帧内预测组件217和/或运动补偿组件219的对应预测块合并以重建原始图像块。然后,可以将滤波器应用于重建图像块。在一些示例中,可以将滤波器应用于残差块。如同图2中的其它组件,滤波器控制分析组件227和环内滤波器组件225高度集成且可以一起实现,但出于概念的目的进行单独描述。应用于重建参考块的滤波器应用于特定空间区域,并且包括多个参数以调整应用此类滤波器的方式。滤波器控制分析组件227对重建参考块进行分析,以确定应在哪里应用此类滤波器并设置对应的参数。将此类数据作为滤波器控制数据发送至标头格式和CABAC组件231进行编码。环内滤波器组件225根据该滤波器控制数据应用此类滤波器。所述滤波器可以包括去块效应滤波器、噪声抑制滤波器、SAO滤波器和自适应环路滤波器。此类滤波器可以根据示例应用于空间/像素域(例如,在重建像素块上)或频域中。

在编码器侧,将滤波后的重建图像块、残差块和/或预测块存储在解码图像缓冲区组件223中,用于以后进行如上所述的运动估计。在解码器侧,解码图像缓冲区组件223存储重建及滤波后的块并向显示器发送重建及滤波后的块,作为输出视频信号的一部分。解码图像缓冲区组件223可以是能够存储预测块、残差块和/或重建图像块的任何存储器设备。

标头格式和CABAC组件231从编解码系统200的各组件接收数据并将此类数据编码在经编码码流中,以便向解码器传输。具体地,标头格式和CABAC组件231生成各种标头以对控制数据(例如总体控制数据和滤波器控制数据)进行编码。此外,包括帧内预测和运动数据的预测数据以及量化变换系数数据形式的残差数据均编码在码流中。最终码流包括解码器重建原始的经分割的视频信号201所需的所有信息。此类信息还可以包括帧内预测模式索引表(也称为码字映射表)、各种块的编码上下文的定义、最可能的帧内预测模式的指示、分割信息的指示等。此类数据可以采用熵编码技术进行编码。例如,可以采用上下文自适应可变长度编码(context adaptive variable length coding,CAVLC)、CABAC、基于语法的上下文自适应二进制算术编码(syntax-based context-adaptive binary arithmeticcoding,SBAC)、概率区间分割熵(probability interval partitioning entropy,PIPE)编码或其它熵编码技术对所述信息进行编码。在熵编码之后,经编码码流可以传输给另一设备(例如,视频解码器)或存档以供后续传输或检索。

图3为一种示例性视频编码器300的框图。视频编码器300可以用于实现编解码系统200的编码功能和/或实现操作方法100的步骤101、103、105、107和/或109。编码器300对输入视频信号进行分割,产生经分割的视频信号301,其中,经分割的视频信号301与经分割的视频信号201基本类似。然后,通过编码器300的组件对经分割的视频信号301进行压缩并编码在码流中。

具体地,将经分割的视频信号301发送至帧内预测组件317进行帧内预测。帧内预测组件317可与帧内估计组件215和帧内预测组件217基本类似。还将经分割的视频信号301发送至运动补偿组件321,以根据解码图像缓冲区323中的参考块进行帧间预测。运动补偿组件321可与运动估计组件221和运动补偿组件219基本类似。将来自帧内预测组件317和运动补偿组件321的预测块和残差块发送至变换和量化组件313以对残差块进行变换和量化。变换和量化组件313可与变换缩放和量化组件213基本类似。将变换和量化的残差块和对应的预测块(连同相关控制数据)发送至熵编码组件331以编码在码流中。熵编码组件331可与标头格式和CABAC组件231基本类似。

还将变换和量化的残差块和/或对应的预测块从变换和量化组件313发送至逆变换和量化组件329,用于重建参考块供运动补偿组件321使用。逆变换和量化组件329可与缩放和逆变换组件229基本类似。根据示例,还将环内滤波器组件325中的环内滤波器应用于残差块和/或重建参考块。环内滤波器组件325可与滤波器控制分析组件227和环内滤波器组件225基本类似。如同关于环内滤波器组件225的描述,环内滤波器组件325可以包括多个滤波器。然后,将滤波块存储在解码图像缓冲区组件323中,以供运动补偿组件321用作参考块。解码图像缓冲区组件323可与解码图像缓冲区组件223基本类似。

图4为一种示例性视频解码器400的框图。视频解码器400可以用于实现编解码系统200的解码功能和/或实现操作方法100的步骤111、113、115和/或117。解码器400例如从编码器300接收码流,并根据码流生成重建输出视频信号,以向终端用户显示。

所述码流由熵解码组件433接收。熵解码组件433用于实现熵解码方案,例如CAVLC、CABAC、SBAC、PIPE译码或其它熵译码技术。例如,熵解码组件433可以使用标头信息来提供上下文,以对在码流中编码为码字的其它数据进行解释。解码信息包括解码视频信号所需的任何信息,例如总体控制数据、滤波器控制数据、分割信息、运动数据、预测数据和残差块的量化变换系数。将量化变换系数发送至逆变换和量化组件429,用于重建为残差块。逆变换和量化组件429可与逆变换和量化组件329基本类似。

将重建残差块和/或预测块发送至帧内预测组件417,以根据帧内预测操作重建为图像块。帧内预测组件417可与帧内估计组件215和帧内预测组件217类似。具体地,帧内预测组件417采用预测模式来定位帧中的参考块,并将残差块应用于结果以重建帧内预测图像块。将重建帧内预测图像块和/或残差块以及对应的帧间预测数据通过环内滤波器组件425发送至解码图像缓冲区组件423。解码图像缓冲区组件423和环内滤波器组件425可分别与解码图像缓冲区组件223和环内滤波器组件225基本类似。环路内滤波器组件425对重建图像块、残差块和/或预测块进行滤波。此类信息存储在解码图像缓冲区组件423中。将来自解码图像缓冲区组件423的重建图像块发送至运动补偿组件421进行帧间预测。运动补偿组件421可与运动估计组件221和/或运动补偿组件219基本类似。具体地,运动补偿组件421使用来自参考块的运动矢量来生成预测块,并将残差块应用于结果以重建图像块。还可以将得到的重建块通过环内滤波器组件425发送至解码图像缓冲区组件423。解码图像缓冲区组件423继续存储其它重建图像块,这些重建图像块可以通过分割信息重建成帧。这些帧也可以放置在序列中。将所述序列作为重建的输出视频信号向显示器输出。

图5为示例性码流500和从码流500中提取的子码流501的示意图。例如,码流500可以由编解码系统200和/或编码器300生成,由编解码系统200和/或解码器400进行解码。又例如,码流500可以由编码器在方法100的步骤109中生成,以供解码器在步骤111中使用。

码流500包括序列参数集(sequence parameter set,SPS)510、多个图像参数集(picture parameter set,PPS)512、多个条带头514、图像数据520以及一个或多个SEI消息515。SPS 510包括码流500所包括的视频序列中所有图像共用的序列数据。此类数据可以包括图像大小、位深度、编码工具参数、码率限制等。PPS 512包括一个或多个相应图像特定的参数。因此,视频序列中的每个图像可以参考一个PPS 512。PPS 512可以表示可用于相应图像中的分块(tile)的编码工具、量化参数、偏移、图像特定编码工具参数(例如,滤波器控制参数)等。条带头514包括图像中的一个或多个相应条带524特定的参数。因此,视频序列中的每个条带524可参考条带头514。条带头514可包括条带类型信息、图像顺序编号(pictureorder count,POC)、参考图像列表、预测权重、分块入口点、去块效应参数等。在一些示例中,条带524可以称为分块组。在这种情况下,条带头514可以称为分块组头。SEI消息515为包括块解码不需要的元数据的可选消息,但是可以用于相关目的,例如表示图像输出定时、显示设置、丢失检测、丢失隐藏等。

图像数据520包括根据帧间预测和/或帧内预测编码的视频数据以及相应的变换和量化的残差数据。根据编码前用于对图像进行分割的分割方式,对此类图像数据520进行排序。例如,将视频序列划分成图像521。图像521可以进一步划分成子图像522,子图像522划分成条带524。条带524可以进一步划分成分块和/或CTU。根据编码树,将CTU进一步划分成编码块。然后,可以根据预测机制对编码块进行编码/解码。例如,图像521可以包括一个或多个子图像522。子图像522可以包括一个或多个条带524。图像521参考PPS 512,条带524参考条带头514。子图像522可以在整个视频序列(也称为视频段)上进行一致分割,因此可以参考SPS 510。每个条带524可以包括一个或多个分块。每个条带524以及每个图像521和每个子图像522也可以包括多个CTU。

每个图像521可以包括与对应时刻的视频序列相关联的整个视觉数据集合。然而,在一些情况下,一些应用可能希望仅显示图像521的一部分。例如,虚拟现实(virtualreality,VR)系统可以显示图像521的用户选择区域。这样,创造出一种置身于图像521描绘的场景中的感觉。当对码流500进行编码时,用户可能希望观看的区域是未知的。相应地,图像521可以包括用户可能作为子图像522观看的每个可能区域,该区域可以根据用户的输入单独解码和显示。其它应用可以单独显示感兴趣区域。例如,在图像中,显示画中画的电视可能希望从不相关的视频序列的图像521上的一个视频序列显示特定区域,即显示子图像522。在又一示例中,电话会议系统可以显示当前正在发言的用户的整个图像521和当前未发言的用户的子图像522。相应地,子图像522可以包括图像521的界定区域。暂时受运动约束的子图像522可以与图像521的其余部分分开解码。具体地,在不参考时间运动约束子图像之外的样本的情况下,对时间运动约束子图像进行编码,因此包括了足够用于完整解码的信息,而不需要参考图像521的其余部分。

每个条带524可以是左上角的CTU和右下角的CTU界定的矩形。在一些示例中,条带524包括一系列分块和/或CTU,这些分块和/或CTU按照从左到右和从上到下的顺序进行光栅扫描。在其它示例中,条带524为矩形条带。矩形条带可能不会按照光栅扫描顺序遍历图像的整个宽度。矩形条带可以包括根据CTU和/或分块行以及CTU和/或分块列界定的图像521和/或子图像522的矩形和/或正方形区域。条带524是解码器能够单独显示的最小单元。因此,可以将图像521的条带524分配给不同的子图像522来分别描绘图像521的期望区域。

解码器可以显示图像521的一个或多个子图像523。子图像523是用户选择的或预定义的子图像522的子组。例如,图像521可以划分成9个子图像522,但解码器可以仅显示该组子图像522中的单个子图像523。子图像523包括条带525,条带525是选择的或预定义的条带524的子组。为了单独显示子图像523,可以从码流500中提取(529)子码流501。可以在编码器侧进行提取(529),这种情况下,解码器可以仅接收子码流501。在其它情况下,将整个码流500发送至解码器,由解码器提取(529)子码流501用于单独解码。需要说明的是,通常子码流501在一些情况下也可以称为码流。子码流501包括SPS 510、PPS512、选择的子图像523以及与子图像523和/或条带525相关的条带头514和SEI消息515。

本发明中,指示各种数据,用于支持对子图像522进行高效编码以在解码器侧选择和显示子图像523。SPS 510包括子图像大小531、子图像位置532和与一套完整的子图像522相关的子图像ID 533。子图像大小531包括对应子图像522的以亮度样本为单位的子图像高度和以亮度样本为单位的子图像宽度。子图像位置532包括对应子图像522的左上角样本与图像521的左上角样本之间的偏移距离。子图像位置532和子图像大小531定义了对应子图像522的布局。子图像ID 533包括唯一标识对应子图像522的数据。子图像ID 533可以是子图像522的光栅扫描索引或其它定义值。因此,解码器可以读取SPS 510并确定每个子图像522的大小、位置和ID。在一些视频译码系统中,由于子图像522是由图像521分割成的,因此与子图像522相关的数据可以包括在PPS 512中。然而,用于产生子图像522的分割部分可以由应用,例如基于ROI的应用、VR应用等使用,这些应用在视频序列/分段上依赖于一致的子图像522的分割部分。因此,子图像522的分割部分通常不会随着每个图像发生改变。在SPS510中携带子图像522的布局信息确保仅针对序列/分段指示一次布局,而非针对每个PPS512重复指示布局(在一些情况下,可以针对每个图像521指示)。此外,指示子图像522的信息而非依赖于解码器来推导此类信息,减少了在丢包情况下出错的可能性,并且支持提取子图像523的附加功能。因此,在SPS 510中指示子图像522的布局改进了编码器和/或解码器的功能。

SPS 510还包括与一套完整的子图像522相关的运动约束子图像标志534。运动约束子图像标志534表示每个子图像522是否为时间运动约束子图像。因此,解码器可以读取运动约束子图像标志534,并确定哪个子图像522可以单独提取和显示,而无需解码其它子图像522。这样,将选择的子图像522编码为时间运动约束子图像,同时在没有此类限制的情况下对其它子图像522进行编码,以提高编码效率。

子图像ID 533也包括在条带头514中。每个条带头514包括与对应的一组条带524相关的数据。因此,条带头514仅包括对应于与条带头514相关联的条带524的子图像ID533。这样,解码器可以接收条带524,从条带头514中获取子图像ID 533,并确定哪个子图像522包括该条带524。解码器还可以使用条带头514中的子图像ID 533与SPS 510中的相关数据进行关联。这样,解码器可以通过读取SPS 510和相关条带头514来确定如何定位子图像522/523和条带524/525。这样,即使一些子图像522在传输过程中丢失或故意省略以提高编码效率,也能够对子图像523和条带525进行解码。

SEI消息515还可以包括子图像级别535。子图像级别535表示解码对应子图像522所需的硬件资源。这样,每个子图像522可以独立于其它子图像522进行编码。这样确保了在解码器侧可以为每个子图像522分配适当数量的硬件资源。如果没有此类子图像级别535,将为每个子图像522分配足够解码最复杂的子图像522的资源。因此,如果子图像522与不同的硬件资源需求相关联,则子图像级别535可以避免解码器分配过多硬件资源。

图6为分割成子图像622的示例性图像600的示意图。例如,图像600可以由编解码系统200、编码器300和/或解码器400编码在码流500中和从码流500中解码。进一步地,图像600可以进行分割和/或包括在子码流501中,以支持方法100中的编码和解码。

图像600可与图像521基本类似。进一步地,图像600可以分割成子图像622,子图像622与子图像522基本类似。每个子图像622包括子图像大小631,子图像大小631可像子图像大小531一样包括在码流500中。子图像大小631包括子图像宽度631a和子图像高度631b。子图像宽度631a是以亮度样本为单位的对应子图像622的宽度。子图像高度631b是以亮度样本为单位的对应子图像622的高度。每个子图像622包括子图像ID 633,子图像ID 633可像子图像ID 633一样包括在码流500中。子图像ID 633可以是唯一标识每个子图像622的任意值。在所示示例中,子图像ID 633是子图像622的索引。每个子图像622包括位置632,位置632可像子图像位置532一样包括在码流500中。位置632表示为对应子图像622的左上角样本与图像600的左上角样本642之间的偏移。

还如图所示,一些子图像622可以是时间运动约束子图像634,而其它子图像622可以不是时间运动约束子图像634。在所示示例中,子图像ID 633为5的子图像622是时间运动约束子图像634。这表明标识符为5的子图像622在没有参考任何其它子图像622的情况下进行编码,因此可以提取和单独解码而无需考虑其它子图像622的数据。可以在码流500中的运动约束子图像标志534中指示哪些子图像622是时间运动约束子图像634。

如图所示,子图像622可以被约束覆盖图像600,且无间隙、无重叠。间隙是图像600中不包括在任何子图像622中的区域。重叠是图像600中包括在多于一个子图像622中的区域。在图6所示的示例中,子图像622是由图像600分割而成,避免存在间隙和重叠。间隙导致图像600的样本遗漏在子图像622之外。重叠导致相关联的条带包括在多个子图像622中。因此,当子图像622以不同的方式编码时,间隙和重叠可能导致样本受到差别处理的影响。如果编码器允许这样处理,即使解码方案很少使用,解码器也必须支持这样的编码方案。通过禁止子图像622间存在间隙和重叠,可以降低解码器的复杂度,因为当确定子图像大小631和位置632时,解码器不需要考虑潜在的间隙和重叠。此外,禁止子图像622间存在间隙和重叠,降低了编码器侧RDO过程的复杂度。这是因为编码器在为视频序列选择编码方案时可以不用考虑间隙和重叠的情况。因此,避免存在间隙和重叠可以降低编码器和解码器侧的内存资源和/或处理资源的占用率。

图7为一种用于将条带724与子图像722的布局进行关联的示例性机制700的示意图。例如,机制700可以应用于图像600。此外,编解码系统200、编码器300和/或解码器400可以根据码流500中的数据应用机制700。进一步地,机制700可以用于支持方法100中的编码和解码。

机制700可以应用于子图像722中的条带724,例如,可以分别是条带524/525和子图像522/523。在所示示例中,子图像722包括第一条带724a、第二条带724b和第三条带724c。条带724的条带头都包括子图像722的子图像ID 733。解码器可以将条带头中的子图像ID 733与SPS中的子图像ID 733进行匹配。然后,解码器可以根据子图像ID 733从SPS中确定子图像722的位置732和大小。根据位置732,子图像722可以相对于图像的左上角742的左上角样本放置。该大小可以用于设置子图像722相对于位置732的高度和宽度。此时,条带724可以包括在子图像722中。相应地,条带724可以根据子图像ID 733在正确的子图像722中定位,而无需参考其它子图像。由于其它丢失的子图像不会改变子图像722的解码,因此这种机制支持纠错。这种机制还支持仅提取子图像722且避免传输其它子图像的应用。因此,子图像ID 733有助于增强功能和/或提高译码效率。这样就降低了编码器和解码器侧的网络资源、内存资源和/或处理资源的占用率。

图8为分割成子图像822的另一示例性图像800的示意图。图像800可与图像600基本类似。另外,图像800可以由编解码系统200、编码器300和/或解码器400等编码在码流500中和从码流500中解码。进一步地,图像800可以进行分割和/或包括在子码流501中,以支持方法100中的编码和解码和/或机制700。

图像800包括子图像822,子图像822可与子图像522、523、622和/或722基本类似。子图像822被划分成多个CTU 825。CTU 825是标准化视频译码系统中的基本编码单元。CTU825通过编码树细分为编码块,这些编码块根据帧间预测或帧内预测进行编码。如图所示,一些子图像822a被约束为宽度和高度是CTU 825大小的倍数的子图像。在所示示例中,子图像822a的高度为6个CTU 825,宽度为5个CTU 825。位于图像右边界801的子图像822b和位于图像底部边界802的子图像822c不受上述约束。在所示示例中,子图像822b的宽度介于5到6个CTU 825之间。然而,不位于图像底部边界802的子图像822b仍然受上述约束,保持子图像高度为CTU 825大小的倍数。在所示示例中,子图像822c的高度介于6到7个CTU 825之间。然而,不位于图像右边界801的子图像822c仍然受上述约束,保持子图像宽度为CTU 825大小的倍数。

如上所述,一些视频系统可以限制子图像822的高度和宽度为CTU 825大小的倍数。这样做可能会影响子图像822与许多图像布局(例如总宽度或高度不是CTU 825大小的倍数的图像800)一起正确操作。通过允许底部子图像822c的高度和右侧子图像822b的宽度不为CTU 825大小的倍数,子图像822可以与任何图像800一起使用而不会造成解码错误。这样增强了编码器和解码器的功能。此外,功能增强使得编码器更高效地对图像进行编码。这样就降低了编码器和解码器侧的网络资源、内存资源和/或处理资源的占用率。

如本文所述,本发明描述了视频译码中基于子图像的图像分割的设计。子图像是图像内的矩形区域,可以通过类似于图像的解码过程独立解码。本发明涉及编码视频序列和/或码流中以及子图像的提取过程中的子图像的指示。上述技术说明以ITU-T的JVET和ISO/IEC的VVC为基础。然而,这些技术也适用于其它视频编解码规范。下面是本文描述的示例性实施例。此类实施例可以单独或组合应用。

有关可能出现在编码视频序列(coded video sequence,CVS)中的子图像的信息可以在序列级参数集合(例如SPS)中指示。这种指示可以包括以下信息:出现在CVS的每个图像中出现的子图像的数量可以在SPS中指示。在SPS或CVS的上下文中,所有访问单元(access unit,AU)的并置子图像可以统称为子图像序列。SPS中还可以包括用于进一步表示描述每个子图像属性的信息的循环。该信息可以包括子图像标识符、子图像位置(例如,子图像的左上角亮度样本与图像的左上角亮度样本之间的偏移距离)以及子图像大小。另外,SPS可以指示每个子图像是否为运动约束子图像(包含MCTS的功能)。每个子图像的档次、层和级别信息也可以进行指示或在解码器侧进行推导。此类信息可以用于确定通过从原始码流中提取子图像产生的码流的档次、层和级别信息。每个子图像的档次和层可以推导为与整个码流的档次和层相同。每个子图像的级别可以显式地指示。此类指示可以出现在SPS包括的循环中。序列级假设参考解码(hypothetical reference decoder,HRD)参数可以在SPS的视频可用性信息(video usability information,VUI)部分中针对每个子图像(或等效地,每个子图像序列)进行指示。

当图像未分割成两个或两个以上子图像时,除了子图像ID外,子图像的属性(例如,位置、大小等)可以不出现在码流中/不在码流中指示。当提取CVS中的图像的子图像时,新码流中的每个访问单元可以不包括子图像。此时,新码流中每个AU中的图像不会分割成多个子图像。因此,不需要在SPS中指示位置和大小等子图像属性,因为此类信息可以从图像属性中推导。然而,子图像标识符仍然可以指示,因为ID可以由包括在提取的子图像中的VCLNAL单元/分块组参考。这样可以使得在提取子图像时保持子图像ID相同。

图像中子图像的位置(x偏移和y偏移)可以以亮度样本为单位进行指示。该位置表示子图像的左上角亮度样本与图像的左上角亮度样本之间的距离。或者,图像中子图像的位置可以以最小编码亮度块大小(MinCbSizeY)为单位进行指示。或者,子图像位置偏移的单位可以由参数集中的语法元素显式指示。该单位可以是CtbSizeY、MinCbSizeY、亮度样本或其它值。

子图像的大小(子图像宽度和子图像高度)可以以亮度样本为单位进行指示。或者,子图像的大小可以以最小编码亮度块大小(MinCbSizeY)为单位进行指示。或者,子图像大小值的单位可以由参数集中的语法元素显式指示。该单位可以是CtbSizeY、MinCbSizeY、亮度样本或其它值。当子图像的右边界与图像的右边界不重合时,子图像的宽度可能需要为亮度CTU大小(CtbSizeY)的整数倍。同理,当子图像的底部边界与图像的底部边界不重合时,子图像的高度可能需要为亮度CTU大小(CtbSizeY)的整数倍。如果子图像的宽度不是亮度CTU大小的整数倍,则子图像可能需要位于图像中的最右侧位置。同理,如果子图像的高度不是亮度CTU大小的整数倍,则子图像可能需要位于图像中的最底部位置。在一些情况下,子图像的宽度可以以亮度CTU大小为单位进行指示,但是子图像的宽度不是亮度CTU大小的整数倍。在这种情况下,以亮度样本为单位的实际宽度可以根据子图像的偏移位置来推导。子图像的宽度可以根据亮度CTU大小来推导,图像的高度可以根据亮度样本来推导。同理,子图像的高度可以以亮度CTU大小为单位进行指示,但是子图像的高度不是亮度CTU大小的整数倍。在这种情况下,以亮度样本为单位的实际高度可以根据子图像的偏移位置来推导。子图像的高度可以根据亮度CTU大小来推导,图像的高度可以根据亮度样本来推导。

对于任意一个子图像,子图像ID和子图像索引可以不同。子图像索引可以是SPS中子图像循环中指示的子图像的索引。子图像ID可以是子图像在图像中的子图像光栅扫描顺序中的索引。当每个子图像的子图像ID的值与子图像索引相同时,可以指示或推导子图像ID。当每个子图像的子图像ID与子图像索引不同时,显式地指示子图像ID。用于指示子图像ID的比特数可以在包括子图像属性的同一个参数集中(例如,在SPS中)指示。子图像ID的一些值可以保留,用于某些特定目的。例如,当分块组头中包括子图像ID以表示哪个子图像包括分块组时,可以保留值0,而不用于子图像,以确保分块组头的前几个比特不全为0,以避免意外包括预防混淆码。在图像的子图像没有无间隙、无重叠地覆盖图像的整个区域的可选情况下,可以为不属于任何子图像的分块组保留值(例如,值1)。或者,显式地指示剩余区域的子图像ID。用于指示子图像ID的比特数可以遵循如下约束条件:取值范围应能唯一标识一个图像内的所有子图像,该取值范围包括子图像ID的保留值。例如,子图像ID的最小比特数为Ceil(Log2(一个图像中子图像的个数+保留的子图像ID的个数)的值。

可以约束子图像必须共同覆盖整个图像,且无间隙、无重叠。当应用此约束条件时,对于每个子图像,可以存在一个标志来表示该子图像是否为运动约束子图像,运动约束子图像表示可以提取该子图像。或者,子图像可以不共同覆盖整个图像,但不能重叠。

子图像ID可以紧跟在NAL单元头之后出现,以协助子图像提取过程,而不需要提取器解析NAL单元比特的其余部分。对于VCL NAL单元,子图像ID可以出现在分块组头的前几个比特中。对于非VCLNAL单元,可以适用以下内容。对于SPS,子图像ID不需要紧跟在NAL单元头之后出现。对于PPS,如果约束同一个图像的所有分块组参考相同的PPS,则子图像ID不需要紧跟在其NAL单元头之后出现。如果允许同一个图像的分块组参考不同的PPS,则子图像ID可以出现在PPS的前几个比特中(例如,紧跟在NAL单元头之后出现)。在这种情况下,一个图像的任意分块组可以使用相同的PPS。或者,当允许同一个图像的分块组参考不同的PPS,并且允许同一个图像的不同分块组使用相同的PPS时,PPS语法中可以不出现子图像ID。或者,当允许同一个图像的分块组参考不同的PPS,并且允许同一个图像的不同分块组使用相同的PPS时,PPS语法中可以出现子图像ID列表。该列表

表示应用PPS的子图像。对于其它非VCL NAL单元,如果非VCL单元适用于图像或更高

级别(例如,访问单元分隔符、序列结束符、码流结束符等),则子图像ID可能不会紧跟在

NAL单元头之后出现。否则,子图像ID可以紧跟在NAL单元头之后出现。

利用上述SPS指示,各个子图像内的分块分割方式可以在PPS中指示。允许同一个图像内的分块组参考不同的PPS。在这种情况下,可以只在每个子图像内进行分块分组。分块分组的概念是指将子图像分割成分块。

或者,定义用于描述各个子图像内的分块分割方式的参数集。此类参数集可以称为子图像参数集(Sub-Picture Parameter Set,SPPS)。SPPS参考SPS。参考SPS ID的语法元素出现在SPPS中。SPPS可以包括子图像ID。为了便于提取子图像,参考子图像ID的语法元素是SPPS中的第一个语法元素。SPPS包括分块结构(例如,列数、行数、均匀分块间隔等)。SPPS可以包括用于表示是否跨相关联的子图像边界启用环路滤波器的标志。或者,每个子图像的子图像属性可以在SPPS中而非在SPS中指示。各个子图像内的分块分割方式仍可在PPS中指示。允许同一个图像内的分块组参考不同的PPS。SPPS一旦激活,该SPPS会在一个序列中处于激活状态,该序列为按照解码顺序排列的连续的AU的序列。但是,SPPS可以在CVS的非起始AU处去激活/激活。在一些AU处,多个SPPS可以在具有多个子图像的单层码流的解码过程中的任意时刻处于激活状态。一个AU的不同子图像之间可以共用一个SPPS。或者,可以将SPPS和PPS合并为一个参数集。在这种情况下,同一个图像的所有分块组可以不需要参考相同的PPS。可以进行约束,使得同一个子图像中的所有分块组可以参考由SPPS和PPS合并产生的相同参数集。

用于指示子图像ID的比特数可以在NAL单元头中指示。当这些信息出现在NAL单元头中时,可以协助子图像提取过程在NAL单元的载荷开始处(例如,紧跟在NAL单元头之后的前几个比特处)解析子图像ID的值。此类指示可以使用NAL单元头中的保留比特(例如,7个保留比特)中的一些比特,以避免增加NAL单元头的长度。此类指示的这些比特可以包含子图像ID-bit-len的值。例如,VVC NAL单元头的7个保留比特中的4个比特可用于上述指示。

当解码子图像时,每个编码树块(例如xCtb和yCtb)的位置可以调整为图像中的实际亮度样本位置,而非子图像中的亮度样本位置。这样,由于参考图像而非参考子图像对编码树块进行解码,因此可以避免从每个参考图像中提取并置的子图像。为了调整编码树块的位置,可以根据子图像位置(subpic_x_offset和subpic_y_offset)推导变量SubpictureXOffset和SubpictureYOffset。这些变量的值可以分别与子图像中每个编码树块的亮度样本位置x和y坐标的值相加。

子图像提取过程可以定义如下:该过程的输入为待提取的目标子图像。该输入可以是子图像ID或子图像位置的形式。当该输入为子图像位置时,通过解析SPS中的子图像信息,可以解析出关联的子图像ID。对于非VCL NAL单元,适用以下内容。SPS中与图像大小和级别相关的语法元素可以随着子图像的大小和级别信息进行更新。以下非VCL NAL单元保持不变:PPS、访问单元分隔符(Access Unit Delimiter,AUD)、序列结束符(End ofSequence,EOS)、码流结束符(End of Bitstream,EOB)以及任何其它适用于图像级别或更高级别的非VCLNAL单元。可以去除子图像ID与目标子图像ID不相等的其余非VCL NAL单元。也可以去除子图像ID与目标子图像ID不相等的VCL NAL单元。

序列级子图像嵌套SEI消息可以用于为一组子图像嵌套AU级或子图像级SEI消息。该消息可以包括缓冲周期、图像定时和非HRD SEI消息。该子图像嵌套SEI消息的语法和语义可以描述如下:对于系统操作,例如在全向媒体格式(omnidirectional media format,OMAF)环境中,OMAF播放器可以请求并解码覆盖视角的一组子图像序列。因此,序列级SEI消息用于携带共同覆盖矩形图像区域的一组子图像序列的信息。该信息可以被系统使用,该信息表示所需的解码能力以及该组子图像序列的码率。该信息表示仅包括该组子图像序列的码流的级别。该信息还表示仅包括该组子图像序列的码流的码率。可选地,可以为一组子图像序列指定子码流提取过程。这样做的好处在于仅包括一组子图像序列的码流也可以符合要求。缺点在于在考虑不同的视角大小的可能性时,除了已经存在大量可能的单个子图像序列之外,还可能存在许多此类组。

在一个示例性实施例中,所公开的示例中的一个或多个可以实现如下:子图像可以定义为图像内的一个或多个分块组的矩形区域。所允许的二叉树划分过程可以定义如下:该过程的输入为:二叉树划分方式btSplit、编码块宽度cbWidth、编码块高度cbHeight、所考虑的编码块的左上角亮度样本相对于图像的左上角亮度样本的位置(x0,y0)、多类型树深度mttDepth、具有偏移的最大多类型树深度maxMttDepth、最大二叉树大小maxBtSize、分割部分索引partIdx。该过程的输出为变量allowBtSplit。

基于btSplit的parallelTtSplit和cbSize的规范

变量parallelTtSplit和cbSize的推导过程如上所述。变量allowBtSplit的推导过程如下:如果以下条件中的一个或多个条件为真(true):cbSize小于或等于MinBtSizeY、cbWidth大于maxBtSize、cbHeight大于maxBtSize、mttDepth大于或等于maxMttDepth,则allowBtSplit设置为假(FALSE)。否则,如果以下条件都为真:btSplit等于SPLIT_BT_VER、y0+cbHeight大于SubPicBottomBorderInPic,则allowBtSplit设置为FALSE。否则,如果以下条件都为真:btSplit等于SPLIT_BT_HOR、x0+cbWidth大于SubPicRightBorderInPic、y0+cbHeight小于或等于SubPicBottomBorderInPic,则allowBtSplit设置为FALSE。否则,如果以下条件都为真:mttDepth大于0、partIdx等于1、MttSplitMode[x0][y0][mttDepth–1]等于parallelTtSplit,则allowBtSplit设置为FALSE。否则,如果以下条件都为真:btSplit等于SPLIT_BT_VER、cbWidth小于或等于MaxTbSizeY、cbHeight大于MaxTbSizeY,则allowBtSplit设置为FALSE。否则,如果以下条件都为真:btSplit等于SPLIT_BT_HOR、cbWidth大于MaxTbSizeY、cbHeight小于或等于MaxTbSizeY,则allowBtSplit设置为FALSE。否则,allowBtSplit设置为TRUE。

所允许的三叉树划分过程可以定义如下:该过程的输入为:三叉树划分方式ttSplit、编码块宽度cbWidth、编码块高度cbHeight、所考虑的编码块的左上角亮度样本相对于图像的左上角亮度样本的位置(x0,y0)、多类型树深度mttDepth、具有偏移的最大多类型树深度maxMttDepth、最大二叉树大小maxTtSize。该过程的输出为变量allowTtSplit。

基于ttSplit的cbSize的规范

变量cbSize的推导过程如上所述。变量allowTtSplit的推导过程如下:如果以下条件中的一个或多个条件为真:cbSize小于或等于2*MinTtSizeY、cbWidth大于Min(MaxTbSizeY,maxTtSize)、cbHeight大于Min(MaxTbSizeY,maxTtSize)、mttDepth大于或等于maxMttDepth、x0+cbWidth大于SubPicRightBorderInPic、y0+cbHeight大于SubPicBottomBorderInPic,则allowTtSplit设置为FALSE。否则,allowTtSplit设置为TRUE。

序列参数集RBSP语法和语义描述如下:

pic_width_in_luma_samples表示每个经解码图像的宽度,以亮度样本为单位。pic_width_in_luma_samples不应等于0,并且应为MinCbSizeY的整数倍。pic_height_in_luma_samples表示每个经解码图像的高度,以亮度样本为单位。pic_height_in_luma_samples不应等于0,并且应为MinCbSizeY的整数倍。num_subpicture_minus1+1表示属于编码视频序列的经编码图像中分割的子图像的个数。subpic_id_len_minus1+1表示SPS中用于表示语法元素subpic_id[i]、参考SPS的SPPS中的spps_subpic_id和参考SPS的分块组头中的tile_group_subpic_id的比特数。subpic_id_len_minus1的取值范围应为Ceil(Log2(num_subpic_minus1+2)~8,包括端值。subpic_id[i]表示参考SPS的图像的第i个子图像的子图像ID。Subpic_id[i]的长度为(subpic_id_len_minus1+1)个比特。subpic_id[i]的值应大于0。subpic_level_idc[i]表示提取第i个子图像产生的CVS遵循的级别,该级别具有指定的资源要求。码流不应包括subpic_level_idc[i]的值,但指定的值除外。保留subpic_level_idc[i]的其它值。如果subpic_level_idc[i]的值不存在,则推断subpic_level_idc[i]的值等于general_level_idc的值。

subpic_x_offset[i]表示第i个子图像的左上角相对于图像的左上角的水平偏移。如果subpic_x_offset[i]的值不存在,则推断subpic_x_offset[i]的值等于0。子图像xoffset的值的推导过程如下:SubpictureXOffset[i]=subpic_x_offset[i]。subpic_y_offset[i]表示第i个子图像的左上角相对于图像的左上角的垂直偏移。如果subpic_y_offset[i]的值不存在,则推断subpic_y_offset[i]的值等于0。子图像y offset的值的推导过程如下:SubpictureYOffset[i]=subpic_y_offset[i]。subpic_width_in_luma_samples[i]表示SPS为激活态的SPS的第i个经解码子图像的宽度。当SubpictureXOffset[i]与subpic_width_in_luma_samples[i]之和小于pic_width_in_luma_samples时,subpic_width_in_luma_samples[i]的值应为CtbSizeY的整数倍。如果subpic_width_in_luma_samples[i]的值不存在,则推断subpic_width_in_luma_samples[i]的值等于pic_width_in_luma_samples的值。subpic_height_in_luma_samples[i]表示SPS为激活态的SPS的第i个经解码子图像的高度。当SubpictureYOffset[i]与subpic_height_in_luma_samples[i]之和小于pic_height_in_luma_samples,subpic_height_in_luma_samples[i]的值应为CtbSizeY的整数倍。如果subpic_height_in_luma_samples[i]的值不存在,则推断subpic_height_in_luma_samples[i]的值等于pic_height_in_luma_samples的值。

根据码流一致性要求,子图像应共同覆盖图像的整个区域,且无重叠、无间隙。subpic_motion_constrained_flag[i]等于1表示第i个子图像为时间运动约束子图像。subpic_motion_constrained_flag[i]等于0表示第i个子图像可以是时间运动约束子图像,也可以不是时间运动约束子图像。如果subpic_motion_constrained_flag的值不存在,则推断subpic_motion_constrained_flag的值等于0。

变量SubpicWidthInCtbsY、SubpicHeightInCtbsY、SubpicHeightInCtbsY、SubpicHeightInMinCbsY、SubpicHeightInMinCbsY、SubpicSizeInMinCbsY、SubpicSizeInSamplesY、SubpicWidthInSamplesC和SubpicHeightInSamplesC的推导过程如下:

SubpicWidthInLumaSamples[i]=subpic_width_in_luma_samples[i]

SubpicHeightInLumaSamples[i]=subpic_height_in_luma_samples[i]

SubPicRightBorderInPic[i]=SubpictureXOffset[i]+PicWidthInLumaSamples[i]

SubPicBottomBorderInPic[i]=SubpictureYOffset[i]+PicHeightInLumaSamples[i]

SubpicWidthInCtbsY[i]=Ceil(SubpicWidthInLumaSamples[i]÷CtbSizeY)

SubpicHeightInCtbsY[i]=Ceil(SubpicHeightInLumaSamples[i]÷CtbSizeY)

SubpicSizeInCtbsY[i]=SubpicWidthInCtbsY[i]*SubpicHeightInCtbsY[i]

SubpicWidthInMinCbsY[i]=SubpicWidthInLumaSamples[i]/MinCbSizeY

SubpicHeightInMinCbsY[i]=SubpicHeightInLumaSamples[i]/MinCbSizeY

SubpicSizeInMinCbsY[i]=SubpicWidthInMinCbsY[i]*SubpicHeightInMinCbsY[i]

SubpicSizeInSamplesY[i]=SubpicWidthInLumaSamples[i]*SubpicHeightInLumaSamples[i]

SubpicWidthInSamplesC[i]=SubpicWidthInLumaSamples[i]/SubWidthC

SubpicHeightInSamplesC[i]=SubpicHeightInLumaSamples[i]/SubHeightC

子图像参数集RBSP语法和语义描述如下:

pps_subpic_id标识该SPPS所属的子图像。Spps_subpic_id的长度为(subpic_id_len_minus1+1)个比特。spps_subpic_parameter_set_id标识该SPPS,供其它语法元素参考。spps_subpic_parameter_set_id的取值范围应为0~63,包括端值。spps_seq_parameter_set_id表示激活态的SPS的sps_seq_parameter_set_id的值。spps_seq_parameter_set_id的取值范围应为0~15,包括端值。Single_tile_in_subpic_flag等于1表示参考SPPS的每个子图像中只有一个分块。single_tile_in_subpic_flag等于0表示参考SPPS的每个子图像中有多于一个分块。num_tile_columns_minus1+1表示分割子图像的分块列数。num_tile_columns_minus1的范围应为0~PicWidthInCtbsY[spps_subpic_id]–1,包括端值。如果num_tile_columns_minus1的值不存在,则推断num_tile_columns_minus1的值等于0。num_tile_rows_minus1+1表示分割子图像的分块行数。num_tile_rows_minus1的范围应为0~PicHeightInCtbsY[spps_subpic_id]–1,包括端值。如果num_tile_rows_minus1的值不存在,则推断num_tile_rows_minus1的值等于0。变量NumTilesInPic设置为(num_tile_columns_minus1+1)*(num_tile_rows_minus1+1)。

当single_tile_in_subpic_flag等于0时,NumTilesInPic应大于0。uniform_tile_spacing_flag等于1表示分块列边界和分块行边界跨子图像均匀分布。uniform_tile_spacing_flag等于0表示分块列边界和分块行边界不是跨子图像均匀分布,但使用语法元素tile_column_width_minus1[i]和tile_row_height_minus1[i]显式指示。如果uniform_tile_spacing_flag的值不存在,则推断uniform_tile_spacing_flag的值等于1。tile_column_width_minus1[i]+1表示第i个分块列的宽度,以CTB为单位。tile_row_height_minus1[i]+1表示第i个分块行的高度,以CTB为单位。

通过调用CTB光栅和分块扫描转换过程,推导以下变量:list ColWidth[i]中i的范围为0~num_tile_columns_minus1,包括端值;list ColWidth[i]表示第i个分块列的宽度,以CTB为单位。list RowHeight[j]中j的范围为0~num_tile_rows_minus1,包括端值;list RowHeight[j]表示第j个分块行的高度,以CTB为单位。list ColBd[i]中i的范围为0~num_tile_columns_minus1+1,包括端值,以CTB为单位;list ColBd[i]表示第i个分块列边界的位置。list RowBd[j]中j的范围为0~num_tile_rows_minus1+1,包括端值;listRowBd[j]表示第j个分块行边界的位置,以CTB为单位。list CtbAddrRsToTs[ctbAddrRs]中ctbAddrRs的范围为0~PicSizeInCtbsY–1,包括端值;list CtbAddrRsToTs[ctbAddrRs]表示从图像的CTB光栅扫描下的CTB地址到分块扫描下的CTB地址的转换。list TileId[ctbAddrTs]中ctbAddrTs的范围为0~PicSizeInCtbsY–1,包括端值;list TileId[ctbAddrTs]表示从分块扫描下的CTB地址到图像的CTB光栅扫描下的CTB地址的转换。listTileId[ctbAddrTs]中ctbAddrTs的范围为0~PicSizeInCtbsY–1,包括端值;list TileId[ctbAddrTs]表示从分块扫描下的CTB地址到分块ID的转换。list NumCtusInTile[tileIdx]中tileIdx的范围为0~PicSizeInCtbsY–1,包括端值;list NumCtusInTile[tileIdx]表示从分块索引到分块中CTU个数的转换。list FirstCtbAddrTs[tileIdx]中tileIdx的范围为0~NumTilesInPic–1,包括端值;list FirstCtbAddrTs[tileIdx]表示从分块ID到分块中第一个CTB的分块扫描下的CTB地址的转换。listColumnWidthInLumaSamples[i]中i的范围为0~num_tile_columns_minus1,包括端值;list ColumnWidthInLumaSamples[i]表示第i个分块列的宽度,以亮度样本为单位。RowHeightInLumaSamples[j]中j的范围为0~num_tile_rows_minus1,包括端值;RowHeightInLumaSamples[j]表示第j分块行的高度,以亮度样本为单位。ColumnWidthInLumaSamples[i]中i的取值范围为0~num_tile_columns_minus1,包括端值;RowHeightInLumaSamples[j]中j的取值范围为0~num_tile_rows_minus1,包括端值。取值均应大于0。

loop_filter_across_tiles_enabled_flag等于1表示参考SPPS的子图像中可以跨分块边界执行环内滤波操作。loop_filter_across_tiles_enabled_flag等于0表示参考SPPS的子图像中不跨分块边界执行环内滤波操作。环内滤波操作包括去块效应滤波操作、样本自适应偏移滤波操作和自适应环路滤波操作。如果oop_filter_across_tiles_enabled_flag的值不存在,则推断oop_filter_across_tiles_enabled_flag的值等于1。loop_filter_across_subpic_enabled_flag等于1表示参考SPPS的子图像中可以跨子图像边界执行环内滤波操作。loop_filter_across_subpic_enabled_flag等于0表示参考SPPS的子图像中不跨子图像边界执行环内滤波操作。环内滤波操作包括去块效应滤波操作、样本自适应偏移滤波操作和自适应环路滤波操作。如果loop_filter_across_subpic_enabled_flag的值不存在,则推断loop_filter_across_subpic_enabled_flag的值等于loop_filter_across_tiles_enabled_flag的值。

分块组头的通用语法和语义描述如下:

在经编码图像的所有分块组头中,分块组头语法元素tile_group_pic_parameter_set_id的值和tile_group_pic_order_cnt_lsb的值都应相同。在经编码图像的所有分块组头中,分块组头语法元素分块tile_group_subpic_id的值应相同。tile_group_subpic_id标识该分块组所属的子图像。Tile_group_subpic_id的长度为(subpic_id_len_minus1+1)个比特。tile_group_subpic_parameter_set_id表示使用中的SPPS的spps_subpic_parameter_set_id的值。tile_group_spps_parameter_set_id的取值范围应为0~63,包括端值。

推导以下变量并用以下变量来覆盖从激活态的SPS中推导出的相应变量:

PicWidthInLumaSamples=SubpicWidthInLumaSamples[tile_group_subpic_id]

PicHeightInLumaSamples=PicHeightInLumaSamples[tile_group_subpic_id]

SubPicRightBorderInPic=SubPicRightBorderInPic[tile_group_subpic_id]

SubPicBottomBorderInPic=SubPicBottomBorderInPic[tile_group_subpic_id]

PicWidthInCtbsY=SubPicWidthInCtbsY[tile_group_subpic_id]

PicHeightInCtbsY=SubPicHeightInCtbsY[tile_group_subpic_id]

PicSizeInCtbsY=SubPicSizeInCtbsY[tile_group_subpic_id]

PicWidthInMinCbsY=SubPicWidthInMinCbsY[tile_group_subpic_id]

PicHeightInMinCbsY=SubPicHeightInMinCbsY[tile_group_subpic_id]

PicSizeInMinCbsY=SubPicSizeInMinCbsY[tile_group_subpic_id]

PicSizeInSamplesY=SubPicSizeInSamplesY[tile_group_subpic_id]

PicWidthInSamplesC=SubPicWidthInSamplesC[tile_group_subpic_id]

PicHeightInSamplesC=SubPicHeightInSamplesC[tile_group_subpic_id]

编码树单元的语法描述如下:

编码四叉树的语法和语义描述如下:

qt_split_cu_flag[x0][y0]表示是否将编码单元划分成水平和垂直大小都为原来大小一半的编码单元。数组索引x0,y0表示所考虑的编码块的左上角亮度样本相对于图像的左上角亮度样本的位置(x0,y0)。当qt_split_cu_flag[x0][y0]不存在时,适用以下内容。如果以下条件中的一个或多个条件为真,则推断qt_split_cu_flag[x0][y0]的值等于1。这些条件为:如果treeType等于DUAL_TREE_CHROMA或大于MaxBtSizeY,则x0+(1<

否则,如果以下条件都为真,则推断qt_split_cu_flag[x0][y0]的值等于1。这些条件为:如果treeType等于DUAL_TREE_CHROMA或大于MinQtSizeY,则x0+(1

多类型树的语法和语义描述如下:

mtt_split_cu_flag等于0表示编码单元不进行划分。mtt_split_cu_flag等于1表示:如语法元素mtt_split_cu_binary_flag所表示的,通过二叉树划分将编码单元划分成两个编码单元,或通过三叉树划分将编码单元划分成三个编码单元。如语法元素mtt_split_cu_vertical_flag所表示的,二叉树或三叉树划分可以是垂直划分或水平划分。当mtt_split_cu_flag不存在时,mtt_split_cu_flag的值推断如下:如果以下条件中的一个或多个条件为真,则推断mtt_split_cu_flag的值等于1。这些条件为:x0+cbWidth大于SubPicRightBorderInPic;y0+cbHeight大于SubPicBottomBorderInPic。否则,推断mtt_split_cu_flag的值等于0。

时间亮度运动矢量预测的推导过程如下:该过程的输出为:1/16分数样本精度的运动矢量预测mvLXCol,以及可用性标志availableFlagLXCol。变量currCb表示位于亮度位置(xCb,yCb)的当前亮度编码块。变量mvLXCol和availableFlagLXCol的推导过程如下:如果tile_group_temporal_mvp_enabled_flag等于0,或者参考图像是当前图像,则mvLXCol的两个分量都设置为0,且availableFlagLXCol也设置为0。否则(tile_group_temporal_mvp_enabled_flag等于1,且参考图像不是当前图像),则按照顺序执行以下步骤。右下方并置运动矢量的推导过程如下:

xColBr=xCb+cbWidth (8-355)

yColBr=yCb+cbHeight (8-356)

如果yCb>>CtbLog2SizeY等于yColBr>>CtbLog2SizeY,yColBr小于SubPicBottomBorderInPic,且xColBr小于SubPicRightBorderInPic,适用以下内容。变量colCb表示覆盖ColPic指定的并置图像内((xColBr>>3)<<3,(yColBr>>3)<<3)所给出的修改位置的亮度编码块。亮度位置(xColCb,yColCb)设置为colCb指定的并置亮度编码块的左上角样本相对于ColPic指定的并置图像的左上角亮度样本的位置。调用并置运动矢量的推导过程。设置为0的currCb、colCb、(xColCb,yColCb)、refIdxLX以及sbFlag作为该过程的输入。该过程的输出赋值给mvLXCol和availableFlagLXCol。否则,mvLXCol的两个分量都设置为0,且availableFlagLXCol也设置为0。

时间三角合并候选(temporal triangle merging candidates)的推导过程如下:变量mvLXColC0、mvLXColC1、availableFlagLXColC0和availableFlagLXColC1的推导过程如下:如果tile_group_temporal_mvp_enabled_flag等于0,则mvLXColC0和mvLXColC1的分量都设置为0,且availableFlagLXColC0和availableFlagLXColC1的分量也都设置为0。否则(tile_group_temporal_mvp_enabled_flag等于1),按照顺序执行以下步骤。右下方并置运动矢量mvLXColC0的推导过程如下:

xColBr=xCb+cbWidth (8-392)

yColBr=yCb+cbHeight (8-393)

如果yCb>>CtbLog2SizeY等于yColBr>>CtbLog2SizeY,yColBr小于SubPicBottomBorderInPic,且xColBr小于SubPicRightBorderInPic,适用以下内容。变量colCb表示覆盖ColPic指定的并置图像内((xColBr>>3)<<3,(yColBr>>3)<<3)所给出的修改位置的亮度编码块。亮度位置(xColCb,yColCb)设置为colCb指定的并置亮度编码块的左上角样本相对于ColPic指定的并置图像的左上角亮度样本的位置。调用并置运动矢量的推导过程。设置为0的currCb、colCb、(xColCb,yColCb)、refIdxLXC0以及sbFlag作为该过程的输入。该过程的输出赋值给mvLXColC0和availableFlagLXColC0。否则,mvLXColC0的两个分量都设置为0,且availableFlagLXColC0也设置为0。

构建的仿射控制点运动矢量合并候选的推导过程如下:第四个(并置右下方)控制点运动矢量cpMvLXCorner[3],参考索引refIdxLXCorner[3]、预测列表使用标志predFlagLXCorner[3]、可用性标志availableFlagCorner[3](其中X为0或1)的推导过程如下:时间合并候选的参考索引refIdxLXCorner[3](其中,X为0或1)设置为0。变量mvLXCol和availableFlagLXCol(其中,X为0或1)的推导过程如下:如果tile_group_temporal_mvp_enabled_flag等于0,则mvLXCol的两个分量都设置为0,且availableFlagLXCol也设置为0。否则(tile_group_temporal_mvp_enabled_flag等于1),适用以下内容。

xColBr=xCb+cbWidth (8-566)

yColBr=yCb+cbHeight (8-567)

如果yCb>>CtbLog2SizeY等于yColBr>>CtbLog2SizeY,yColBr小于SubPicBottomBorderInPic,且xColBr小于SubPicRightBorderInPic,适用以下内容。变量colCb表示覆盖ColPic指定的并置图像内((xColBr>>3)<<3,(yColBr>>3)<<3)所给出的修改位置的亮度编码块。亮度位置(xColCb,yColCb)设置为colCb指定的并置亮度编码块的左上角样本相对于ColPic指定的并置图像的左上角亮度样本的位置。调用并置运动矢量的推导过程。设置为0的currCb、colCb、(xColCb,yColCb)、refIdxLX以及sbFlag作为该过程的输入。该过程的输出赋值给mvLXCol和availableFlagLXCol。否则,mvLXCol的两个分量都设置为0,且availableFlagLXCol也设置为0。出现的所有pic_width_in_luma_samples都替换为PicWidthInLumaSamples。出现的所有pic_height_in_luma_samples都替换为PicHeightInLumaSamples。

在第二示例性实施例中,序列参数集RBSP的语法和语义描述如下:

subpic_id_len_minus1+1表示SPS中用于表示语法元素subpic_id[i]、参考SPS的SPPS中的spps_subpic_id和参考SPS的分块组头中的tile_group_subpic_id的比特数。subpic_id_len_minus1的取值范围应为Ceil(Log2(num_subpic_minus1+3)~8,包括端值。根据码流一致性要求,子图像[i]之间不能重叠,其中,i的取值范围为0~num_subpic_minus1,包括端值。每个子图像可以是时间运动约束子图像。

通用的分块组头的语义描述如下:tile_group_subpic_id标识该分块组所属的子图像。Tile_group_subpic_id的长度为(subpic_id_len_minus1+1)个比特。tile_group_subpic_id等于1表示该分块组不属于任何子图像。

在第三示例性实施例中,NAL单元头的语法和语义描述如下:

nuh_subpicture_id_len表示用于表示语法元素的比特数,其中,该语法元素用于表示子图像ID。当nuh_subpicture_id_len的值大于0时,nuh_reserved_zero_4bits后的前nuh_subpicture_id_len-th个比特表示NAL单元的载荷所属的子图像的ID。当nuh_subpicture_id_len大于0时,nuh_subpicture_id_len的值应等于激活态的SPS中的subpic_id_len_minus1的值。非VCL NAL单元的nuh_subpicture_id_len取值约束如下:如果nal_unit_type等于SPS_NUT或PPS_NUT,则nuh_subpicture_id_len应等于0。nuh_reserved_zero_3bits应等于“000”。解码器应忽略(例如,从码流中去除并丢弃)nuh_reserved_zero_3bits的值不等于“000”的NAL单元。

在第四示例性实施例中,子图像嵌套语法描述如下:

all_sub_pictures_flag等于1表示嵌套SEI消息适用于所有子图像。all_sub_pictures_flag等于1表示适用嵌套SEI消息的子图像由后续语法元素显式指示。nesting_num_sub_pictures_minus1+1表示适用嵌套SEI消息的子图像的个数。nesting_sub_picture_id[i]表示适用嵌套SEI消息的第i个子图像的子图像ID。nesting_sub_picture_id[i]语法元素由Ceil(Log2(nesting_num_sub_pictures_minus1+1))个比特表示。sub_picture_nesting_zero_bit应等于0。

图9为一种示例性视频译码设备900的示意图。视频译码设备900适用于实现本文所述的公开示例/实施例。视频译码设备900包括下行端口920、上行端口950和/或收发单元(Tx/Rx)910,收发单元包括发送器和/或接收器,用于通过网络上行和/或下行传输数据。视频译码设备900还包括处理器930和用于存储数据的存储器932,处理器930包括处理数据的逻辑单元和/或中央处理单元(central processing unit,CPU)。视频译码设备900还可以包括电组件、光电(optical-to-electrical,OE)组件、电光(electrical-to-optical,EO)组件、与上行端口950和/或下行端口920耦合且用于通过电、光或无线通信网络进行数据通信的无线通信组件。视频译码设备900还可以包括用于向用户发送和从用户接收数据的输入和/或输出(input/output,I/O)设备960。I/O设备960可以包括输出设备,例如用于显示视频数据的显示器、用于输出音频数据的扬声器。I/O设备960还可以包括键盘、鼠标、轨迹球等输入设备和/或用于与此类输出设备交互的对应接口。

处理器930通过硬件和软件实现。处理器930可以实现为一个或多个CPU芯片、核(例如,实现为多核处理器)、现场可编程门阵列(field-programmable gate array,FPGA)、专用集成电路(application specific integrated circuit,ASIC)、数字信号处理器(digital signal processor,DSP)。处理器930与下行端口920、Tx/Rx 910、上行端口950和存储器932进行通信。处理器930包括译码模块914。译码模块914用于实现上述公开的实施例,例如方法100、1000、1100和/或机制700,译码模块914可以采用码流500、图像600和/或图像800。译码模块914还可以实现本文描述的任何其它方法/机制。进一步地,译码模块914可以实现编解码系统200、编码器300和/或解码器400。例如,译码模块914可以用于在SPS中指示和/或获取SPS中的子图像位置和大小。在另一示例中,译码模块914可以约束子图像宽度和子图像高度为CTU大小的倍数,位于图像的右边界处的子图像的宽度或位于图像的底部边界处的子图像的高度除外。在另一示例中,译码模块914可以约束子图像覆盖图像,且无间隙、无重叠。在另一示例中,译码模块914可以用于指示和/或获取表示一些子图像是时间运动约束子图像而其它子图像不是时间运动约束子图像的数据。在另一示例中,译码模块914可以在SPS中指示一套完整的子图像ID,并在每个条带头中包括一个子图像ID,用于表示包括对应条带的子图像。在另一示例中,译码模块914可以为每个子图像指示级别。这样,在对视频数据进行分割和译码时,译码模块914使得视频译码设备900能够提供附加功能,避免一些处理来减少处理开销,和/或提高译码效率。因此,译码模块914改进了视频译码设备900的功能并解决了视频译码领域特有的问题。此外,译码模块914实现了视频译码设备900到不同状态的变换。或者,译码模块914可以实现为存储在存储器932中并由处理器930执行的指令(例如,存储在非瞬时性介质中的计算机程序产品)。

存储器932包括一个或多个存储器类型,例如磁盘、磁带驱动器、固态硬盘、只读存储器(read only memory,ROM)、随机存取存储器(random access memory,RAM)、闪存、三态内容寻址存储器(ternary content-addressable memory,TCAM)、静态随机存取存储器(static random access memory,SRAM)等。存储器932可用作溢出数据存储设备,用于在选择执行程序时存储该程序,以及存储程序执行时读取的指令和数据。

图10为一种对包括时间运动约束子图像(例如子图像522、523、622、722和/或822)的码流(例如码流500和/或子码流501)进行编码的示例性方法1000的流程图。编码器(例如编解码系统200、编码器300和/或视频译码设备900)在执行方法100时可以采用方法1000。

编码器接收包括多个图像的视频序列并基于用户输入等确定将所述视频序列编码在码流中时,可以启动方法1000。所述视频序列在编码之前分割成图像(picture/image)/帧,以便进行进一步分割。在步骤1001中,将图像分割成多个子图像。在步骤1003中,将当前子图像作为时间运动约束子图像编码在码流中。

在步骤1005中,将参数集编码在所述码流中。所述参数集包括表示所述当前子图像是所述时间运动约束子图像的标志,所述时间运动约束子图像可以以独立于所述图像的方式从所述码流中提取。在一些示例中,包括所述标志的所述参数集为SPS。在一些示例中,所述参数集包括用于所述一个或多个子图像中的每个时间运动约束子图像的至少一个标志。在一些示例中,用于所述一个或多个子图像中的每个非时间运动约束子图像的标志被省略,以便提高译码效率。在这种情况下,可以在解码器侧推断省略的标志为0,表示关联的子图像不是时间运动约束子图像。在一些示例中,所述标志为subpic_motion_constrained_flag[i],其中,i为所述当前子图像的索引。

在步骤1007中,可以将所述一个或多个子图像中的每个子图像的子图像ID编码在所述参数集中。进一步地,可以将所述一个或多个子图像中的每个子图像的子图像大小编码在所述参数集中。此外,可以将所述一个或多个子图像中的每个子图像的子图像位置编码在所述参数集中。在步骤1009中,存储所述码流,以向解码器发送。然后,可以根据需要向所述解码器传输所述码流。在一些示例中,可以从经编码码流中提取子码流。在这种情况下,传输的码流为子码流。在其它示例中,可以传输经编码码流,以在解码器侧提取子码流。在另外一些示例中,经编码码流可以在不提取子码流的情况下进行解码和显示。在上述任一示例中,可以编码标志以对图像进行编码,从而使得经编码图像包括时间运动约束子图像和非时间运动约束子图像的组合。这允许提供独立提取功能的时间运动约束子图像和非运动约束子图像进行组合,以便在不需要独立提取时提高译码效率。因此,所述标志有助于增强功能和/或提高译码效率。这样就降低了编码器和解码器侧的网络资源、内存资源和/或处理资源的占用率。

图11为一种对包括时间运动约束子图像(例如子图像522、523、622、722和/或822)的码流(例如码流500和/或子码流501)进行解码的示例性方法1100的流程图。解码器(例如编解码系统200、解码器400和/或视频译码设备900)在执行方法100时可以采用方法1100。例如,方法1100可以用于解码根据方法1000产生的码流。

解码器开始接收包括子图像的码流时,可以启动方法1100。所述码流可以包括完整的视频序列,或者所述码流可以是包括用于单独提取的缩减后的子图像集合的子码流。在步骤1101中,接收码流。所述码流包括参数集和通过对图像进行分割获得的一个或多个子图像。所述参数集包括表示所述当前子图像是所述时间运动约束子图像的标志,所述时间运动约束子图像可以以独立于所述图像的方式从所述码流中提取。在一些示例中,包括所述标志的所述参数集为SPS。在一些示例中,所述参数集包括用于所述一个或多个子图像中的每个时间运动约束子图像的至少一个标志。在一些示例中,用于所述一个或多个子图像中的每个非时间运动约束子图像的标志被省略,以便提高译码效率。在这种情况下,可以推断每个省略的标志的值为0,表示关联的子图像不是时间运动约束子图像。在一些示例中,所述标志为subpic_motion_constrained_flag[i],其中,i为所述当前子图像的索引。

在步骤1103中,对所述参数集进行解析,获得表示当前子图像是时间运动约束子图像的标志。然后,可以根据所述标志,独立于所述图像,从所述码流中提取所述当前子图像。所述参数还可以包括所述一个或多个子图像中的每个子图像的子图像ID、所述一个或多个子图像中的每个子图像的子图像大小和/或所述一个或多个子图像中的每个子图像的子图像位置。也可以对所述参数集进行解析,获得此类信息。

在步骤1105中,例如,可以根据所述标志、所述子图像ID、所述子图像大小和/或所述子图像位置对所述当前子图像进行解码,以产生视频序列。

在步骤1107中,可以发送所述视频序列,以用于显示。所述标志用于表示经编码图像包括时间运动约束子图像和非时间运动约束子图像的组合。这允许提供独立提取功能的时间运动约束子图像和非运动约束子图像进行组合,以便在不需要独立提取时提高译码效率。因此,所述标志有助于增强功能和/或提高译码效率。这样就降低了编码器和解码器侧的网络资源、内存资源和/或处理资源的占用率。

图12为一种对包括时间运动约束子图像(例如子图像522、523、622、722和/或822)的码流(例如码流500和/或子码流501)进行指示的示例性系统1200的示意图。系统1200可以通过编码器和解码器(例如编解码系统200、编码器300、解码器400和/或视频译码设备900)实现。此外,当实现方法100、1000和/或1100时,可以采用系统1200。

系统1200包括视频编码器1202。视频编码器1202包括分割模块1201,用于将图像分割成多个子图像。视频编码器1202还包括编码模块1203,用于:将当前子图像作为时间运动约束子图像编码在码流中;将参数集编码在所述码流中,所述参数集包括表示所述当前子图像是所述时间运动约束子图像的标志,所述时间运动约束子图像可以以独立于所述图像的方式从所述码流中提取。视频编码器1202还包括存储模块1205,用于存储所述码流,以向解码器发送。视频编码器1202还包括传输模块1207,用于向所述解码器传输包括所述当前子图像的所述码流。视频编码器1202还可以用于执行方法1000中的任一步骤。

系统1200还包括视频解码器1210。视频解码器1210包括接收模块1211,用于接收码流,所述码流包括参数集和通过对图像进行分割获得的一个或多个子图像。视频解码器1210还包括解析模块1213,用于对所述参数集进行解析,获得表示当前子图像是时间运动约束子图像的标志。视频解码器1210还包括提取模块1215,用于根据所述标志,独立于所述图像,从所述码流中提取所述当前子图像。视频解码器1210还包括解码模块1217,用于对所述当前子图像进行解码,以产生视频序列。视频解码器1210还包括发送模块1219,用于发送所述视频序列,以用于显示。视频解码器1210还可以用于执行方法1100中的任一步骤。

当第一组件和第二组件之间除了线、轨迹或其它介质之外不存在其它中间组件时,第一组件直接与第二组件耦合。当第一组件和第二组件之间除了线、轨迹或其它介质之外存在其它中间组件时,第一组件间接与第二组件耦合。术语“耦合”及其变体包括直接耦合和间接耦合。除非另有说明,否则术语“约”是指以下描述的数字的±10%。

还应当理解,本文中描述的示例性方法的步骤不一定需要按照所描述的顺序执行,这些方法的步骤的顺序应当理解为仅仅是示例性的。同样,在与本发明各实施例一致的方法中,这些方法可以增加步骤,也可以省略或组合一些步骤。

虽然本发明提供了几个具体实施例,但应当理解,所公开的系统和方法也可通过其它多种具体形式体现,而不会脱离本发明的精神或范围。本发明的示例应被视为说明性而非限制性的,且本发明并不限于本文所描述的细节。例如,各种元件或部件可以在另一系统中组合或集成,或者一些特征可以省略或不实现。

此外,在不脱离本发明的范围的情况下,各实施例中描述和说明为离散或单独的技术、系统、子系统和方法可以与其它系统、组件、技术或方法进行组合或集成。其它改变、替换、变更示例对本领域技术人员而言是显而易见的,均不脱离本文所公开的精神和范围。

相关技术
  • 视频译码中的时间运动约束子图像指示
  • 子块单元的基于时间运动矢量预测子候选的图像或视频编译
技术分类

06120113250070