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

视频译码中的子图像级别指示符指示

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


视频译码中的子图像级别指示符指示

相关申请案交叉申请

本专利申请要求王业奎等人2019年1月9日递交的发明名称为“视频译码中的子图像(Sub-Pictures in Video Coding)”的第62/790,207号美国临时专利申请的权益,其全部内容以引用的方式并入本文中。

技术领域

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

背景技术

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

发明内容

在一个实施例中,本发明包括一种在解码器中实现的方法,所述方法包括:所述解码器的接收器接收码流,所述码流包括从图像中分割的一个或多个子图像和表示解码当前子图像的资源需求的子图像级别指示符;所述解码器的处理器解析所述码流,以获取所述子图像级别指示符和所述当前子图像;所述处理器根据所述子图像级别指示符分配资源,以解码所述当前子图像;所述处理器通过所述分配的资源解码所述当前子图像,以生成视频序列;所述处理器发送用于显示的所述视频序列。在一些视频译码系统中,指示图像的级别。级别表示解码图像所需的硬件资源。在一些示例中,不同的子图像在一些情况下可能具有不同的功能,因此在译码过程中可以差别处理。因此,基于图像的级别可能不利于解码一些子图像。在本示例中,指示每个子图像的级别。这样,每个子图像可以独立于其它子图像进行译码,不会因为根据不复杂的机制对子图像设置过高的解码要求而使解码器的负载过重。指示的子图像级别信息增强了功能和/或提高了译码效率,这降低了编码器和解码器的网络资源利用率、内存资源利用率和/或处理资源利用率。

可选地,在上述任一方面中,在所述方面的另一种实现方式中,所述子图像级别指示符包括在所述码流中的SEI消息中。

可选地,在上述任一方面中,在所述方面的另一种实现方式中,所述子图像级别指示符包括在所述码流中的SPS中。

可选地,在上述任一方面中,在所述方面的另一种实现方式中,所述子图像级别指示符表示子图像大小、子图像像素计数、子图像码率或其组合。

可选地,在上述任一方面中,在所述方面的另一种实现方式中,所述码流包括SPS,所述SPS包括所述子图像中的每个子图像的子图像ID。

可选地,在上述任一方面中,在所述方面的另一种实现方式中,所述SPS还包括所述子图像中的每个子图像的子图像位置。

可选地,在上述任一方面中,在所述方面的另一种实现方式中,所述SPS还包括所述子图像中的每个子图像的子图像大小。

在一个实施例中,本发明包括一种在编码器中实现的方法,所述方法包括:所述编码器的处理器将图像分割为多个子图像;所述处理器将所述多个子图像中的一个或多个子图像编码到码流中;所述处理器确定解码所述一个或多个子图像中的每个子图像的资源需求;所述处理器将表示解码所述一个或多个子图像的资源需求的子图像级别指示符编码到所述码流中;在所述编码器的存储器中存储所述码流,所述码流用于发送到解码器。在一些视频译码系统中,指示图像的级别。级别表示解码图像所需的硬件资源。在一些示例中,不同的子图像在一些情况下可能具有不同的功能,因此在译码过程中可以差别处理。因此,基于图像的级别可能不利于解码一些子图像。在本示例中,指示每个子图像的级别。这样,每个子图像可以独立于其它子图像进行译码,不会因为根据不复杂的机制对子图像设置过高的解码要求而使解码器的负载过重。指示的子图像级别信息增强了功能和/或提高了译码效率,这降低了编码器和解码器的网络资源利用率、内存资源利用率和/或处理资源利用率。

可选地,在上述任一方面中,在所述方面的另一种实现方式中,将所述子图像级别指示符编码到所述码流中的一个或多个SEI消息中。

可选地,在上述任一方面中,在所述方面的另一种实现方式中,将所述子图像级别指示符编码到所述码流中的SPS中。

可选地,在上述任一方面中,在所述方面的另一种实现方式中,所述子图像级别指示符表示子图像大小、子图像像素计数、子图像码率或其组合。

可选地,在任一前述方面中,在所述方面的另一种实现方式中,所述方法还包括:所述处理器将SPS编码到所述码流中,所述SPS包括所述子图像中的每个子图像的子图像标识符(identifier,ID)。

可选地,在上述任一方面中,在所述方面的另一种实现方式中,所述方法还包括:所述处理器将SPS编码到所述码流中,所述SPS包括所述子图像中的每个子图像的子图像位置。

可选地,在上述任一方面中,在所述方面的另一种实现方式中,所述方法还包括:所述处理器将SPS编码到所述码流中,所述SPS包括所述子图像中的每个子图像的子图像大小。

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

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

在一个实施例中,本发明包括一种解码器。所述解码器包括:接收模块,用于接收码流,所述码流包括从图像分割的一个或多个子图像和表示解码当前子图像的资源需求的子图像级别指示符;解析模块,用于解析所述码流,以获取所述子图像级别指示符和所述当前子图像;分配模块,用于根据所述子图像级别指示符分配资源,以解码所述当前子图像;解码模块,用于通过所述分配的资源解码所述当前子图像,以生成视频序列;发送模块,用于发送用于显示的所述视频序列。

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

在一个实施例中,本发明包括一种编码器。所述编码器包括:分割模块,用于将图像分割为多个子图像;确定模块,用于确定解码所述一个或多个子图像中的每个子图像的资源需求;编码模块,用于:将表示解码所述一个或多个子图像的资源需求的子图像级别指示符编码到所述码流中,以及,将所述多个子图像中的一个或多个子图像编码到所述码流中;存储模块,用于存储所述码流,所述码流用于发送到解码器。

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

为了清楚起见,上述任一实施例可以与上述任一其它实施例组合以生成本发明范围内的新实施例。

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

附图说明

为了更完整地理解本发明,参考以下结合附图和详细描述而进行的简要描述,其中,相同的附图标记表示相同的部分。

图1为对视频信号进行译码的示例性方法的流程图。

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

图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)、工作草案(workingdraft,WD)。

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

为了确保经编码视频能够正确解码,视频根据对应的视频编码标准进行编码和解码。视频编码标准包括国际电联电信标准化部门(international telecommunicationunion(ITU)standardization sector,ITU-T)H.261、国际标准化组织/国际电工委员会(international organization for standardization/internationalelectrotechnical commission,ISO/IEC)运动图像专家组(motion picture expertsgroup,MPEG)-1第2部分、ITU-T H.262或ISO/IEC MPEG-2第2部分、ITU-T H.263、ISO/IECMPEG-4第2部分、高级视频编码(advanced video coding,AVC),也称为ITU-T H.264或ISO/IEC MPEG-4第10部分、以及高效视频编码(high efficiency video coding,HEVC),也称为ITU-T H.265或MPEG-H第2部分。AVC包括可分级视频编码(Scalable Video Coding,SVC)、多视点视频编码(Multiview Video Coding,MVC)和多视点视频编码加深度(MultiviewVideo Coding plus Depth,MVC+D)以及三维(three dimensional,3D)AVC(3D-AVC)等扩展版。HEVC包括可分级HEVC(Scalable HEVC,SHVC)、多视点HEVC(Multiview HEVC,MV-HEVC)和3D HEVC(3D-HEVC)等扩展版。ITU-T和ISO/IEC的联合视频专家组(joint video expertsteam,JVET)已着手开发一种称为通用视频编码(Versatile Video Coding,VVC)的视频编码标准。VVC包括在工作草案(Working Draft,WD)中,该WD包括JVET-L1001-v7。

为了对视频图像进行编码,首先对该图像进行分割,然后将得到的各分割部分编码在码流中。存在各种图像分割方案。例如,一个图像可以分割成常规条带(slice)、非独立条带、分块(tile),和/或根据波前并行处理(wavefront parallel processing,WPP)进行分割。为了简单起见,HEVC限制了编码器,使得在将条带分割为用于视频译码的CTB组时,只能使用常规条带、非独立条带、分块、WPP及其组合。这种分割可以用于支持最大传输单元(maximum transfer unit,MTU)大小匹配、并行处理和减少端到端时延。MTU表示单个报文中能够发送的最大数据量。如果报文有效载荷超过MTU,则通过称为分割的过程将该载荷分划为两个报文。

常规条带还简称为条带,是分割图像后得到的部分,可以独立于同一个图像内的其它常规条带重建,但是由于存在环路滤波操作,所以还是存在相互依赖性。每个常规条带被封装在自己的网络抽象层(network abstraction layer,NAL)单元中进行发送。进一步地,可以不使能帧内预测(帧内样本预测、运动信息预测、编码模式预测)和跨条带边界的熵编码的依赖,以支持独立重建。这种独立重建支持并行化操作。例如,基于常规条带的并行化减少了处理器间或核间通信。但是,由于每个常规条带是独立的,因此每个条带都与单独的条带头相关。由于每个条带的条带头的位成本,以及由于缺乏跨条带边界的预测,使用常规条带会造成大的译码开销。此外,可以采用常规条带来支持MTU大小匹配需求。具体地,由于常规条带封装在单独的NAL单元中,并且可以独立译码,所以每个常规条带应小于MTU方案中的MTU,以避免将条带分成多个报文。因此,为了实现并行化和MTU大小匹配,图像中的条带布局会互相矛盾。

非独立条带与常规条带类似,但非独立条带具有缩短的条带头,并且允许在不影响帧内预测的情况下对图像树块边界进行分割。因此,非独立条带将常规条带分割为多个NAL单元,这通过在整个常规条带的编码完成之前发送常规条带的一部分,降低端到端时延。

分块是图像中由水平和垂直边界划分的分割部分,这些边界形成了分块的列和行。分块可以按光栅扫描顺序(从右到左,从上到下)进行译码。CTB的扫描顺序在分块内部进行。因此,在进行到下一个分块中的CTB之前,第一分块中的CTB按照光栅扫描顺序进行译码。与常规条带类似,分块消除了对帧内预测以及对熵解码的依赖。但是,各个NAL单元中可以不包括分块,因此,分块可以不用于MTU大小匹配。每个分块可以由一个处理器/核处理,用于解码相邻分块的处理单元之间的帧内预测的处理器间/核间通信可以限制用于(当相邻分块在同一条带中时)发送共享的条带头,和执行与环路滤波相关的重建样本和元数据的共享。当条带中包括多个分块时,可以在条带头中指示除条带中的第一入口点偏移之外的每个分块的入口点字节偏移。对于每个条带和分块,应至少满足以下一个条件:(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补充增强信息(supplemental enhancement information,SEI)消息可以用于表示码流中存在MCTS并指示(signal)MCTS。该MCTS SEI消息提供补充信息,该补充信息可以用于MCTS子码流提取(该补充信息表示为SEI消息语义的一部分),以生成MCTS集的一致性码流。该信息包括多个提取信息集,每个提取信息集定义多个MCTS,并且包括在MCTS子码流提取过程所使用的替换视频参数集(video parameter set,VPS)、序列参数集(sequence parameter set,SPS)和图像参数集(picture parameter set,PPS)的原始字节序列载荷(raw bytes sequence payload,RBSP)字节。因为一个或所有条带地址相关的语法元素(包括first_slice_segment_in_pic_flag和slice_segment_address)可以在提取的子码流中采用不同的值,所以在按照MCTS子码流提取过程提取子码流时,可以重写或替换参数集合(VPS、SPS、PPS),并更新条带头。

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

此外,图像分割可以基于图像级分块和序列级分块。序列级分块可以包括MCTS的功能,并且可以实现为子图像。例如,图像级分块可以定义为图像中的特定分块列和特定分块行内的编码树块的矩形区域。序列级分块可以定义为包括在不同帧中的编码树块的矩形区域集合,其中每个矩形区域又包括一个或多个图像级分块,并且编码树块的矩形区域集合可独立于任何其它类似的矩形区域集合进行解码。序列级分块组集(sequence leveltile 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可以使用8个位在VCL NAL单元的NAL单元头中指示。这有助于子图像提取。这种指示可能会不必要地增加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:将视频信号输入编码器。例如,视频信号可以是存储在存储器中的未压缩的视频文件。在另一示例中,视频文件可以由视频捕获设备(例如视频摄像机)捕获,并进行编码以支持视频的直播。视频文件可以包括音频分量和视频分量。所述视频分量包括一系列图像帧,当按顺序观看时,这些图像帧会产生运动的视觉效果。这些帧包括根据光表示的像素(本文称为亮度分量(或亮度样本))和颜色(称为色度分量(或色度样本))。在一些示例中,这些帧还可以包括深度值以支持三维观看。

步骤103:将视频分割为块。分割包括将每个帧中的像素细分为用于压缩的方块和/或矩形块。例如,在高效视频编码(high efficiency video coding,HEVC)(还称为H.265和MPEG-H第2部分)中,可以先将帧分成编码树单元(coding tree unit,CTU),这些CTU是预定义大小(例如64×64个像素)的块。CTU包括亮度样本和色度样本。可以使用编码树将CTU分成块,然后递归细分这些块,直到获得支持进一步编码的配置。例如,可以对帧的亮度分量进行细分,直到各个块包括相对均匀的亮度值。此外,可以对帧的色度分量进行细分,直到各个块包括相对均匀的颜色值。因此,分割机制根据视频帧的内容而不同。

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

帧内预测对公共帧中的块进行编码。帧内预测利用亮度分量和色度分量往往在帧中聚集这一事实。例如,一棵树的一部分中的一片绿色往往与几片类似的绿色相邻。帧内预测采用多种方向预测模式(例如HEVC中的33种模式)、平面模式和直流(direct current,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为用于视频译码的示例性编码和解码(codec)系统200的示意图。具体地,编解码系统200能够实现操作方法100。编解码系统200广义地描述编码器和解码器中使用的组件。编解码系统200接收视频信号并对视频信号进行分割,如操作方法100中的步骤101和103所描述,从而产生经分割的视频信号201。然后,当作为编码器时,编解码系统200将经分割的视频信号201压缩到经编码码流中,如方法100中的步骤105、107和109所描述的。当作为解码器时,编解码系统200从码流中生成输出视频信号,如操作方法100中的步骤111、113、115和117所描述的。编解码系统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是已通过编码树分割为像素块的捕获视频序列。编码树采用各种划分模式将像素块细分为更小的像素块。然后可以将这些块进一步细分为更小块。所述块可以称为编码树上的节点。较大的父节点被划分成较小的子节点。节点被细分的次数称为节点/编码树的深度。在某些情况下,划分的块可以包括在编码单元(coding unit,CU)中。例如,CU可以是CTU的子部分,包括亮度块、红差色度(Cr)块和蓝差色度(Cb)块以及CU的对应语法指令。所述划分模式可以包括二叉树(binary tree,BT)、三叉树(tripletree,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 squaredifference,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 binaryarithmetic coding,SBAC)、概率区间分割熵(probability interval partitioningentropy,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。环内滤波器组件325可以包括多个滤波器,如环内滤波器组件225所描述的。然后,将滤波块存储在解码图像缓冲器组件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可以表示可用于相应图像中的分块的译码工具、量化参数、偏移、图像特定译码工具参数(例如滤波器控制)等。条带头514包括针对图像中的一个或多个相应条带524的参数。因此,视频序列中的每个条带524可参考条带头514。条带头514可以包括条带类型信息、图像顺序编号(picture ordercount,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可以在整个视频序列(也称为分段)上一致地分割,因此可以参考SPS510。每个条带524可以包括一个或多个分块。每个条带524以及每个图像521和每个子图像522也可以包括多个CTU。

每个图像521可以包括与相应时刻的视频序列相关的整个视觉数据集。但是,在一些情况下,一些应用可以仅显示图像521的一部分。例如,虚拟现实(virtual reality,VR)系统可以显示图像521的用户选择区域,生成了出现在图像521描绘的场景中的感觉。当编码码流500时,用户可能希望观看的区域是未知的。因此,图像521可以包括用户可能观看的每个可能的区域作为子图像522,所述子图像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、PPS 512、选择的子图像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的布局信息可以确保只针对序列/分段指示一次布局,而不是针对每个PPS 512都指示(在一些情况下可以针对每个图像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的子图像ID 533。这样,解码器可以接收条带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的示意图。例如,可以由编解码系统200、编码器300、和/或解码器400将图像600编码在码流500中和从码流500中解码。此外,可以对图像600进行分割和/或将图像600包括在子码流501中,以支持根据方法100进行编码和解码。

图像600实质上可以类似于图像521。此外,可以将图像600分割为子图像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可以不是。在所示示例中,子图像ID 633为5的子图像622是时间运动约束子图像634。这表明标识为5的子图像622在没有参考任何其它子图像622的情况下进行译码,因此可以提取和单独解码而无需考虑其它子图像622的数据。可以用运动约束子图像标记534在码流500中指示表示哪些子图像622是时间运动约束子图像634。

如图所示,可以将子图像622约束为覆盖图像600,没有间隙或重叠。间隙是图像600中不包括在任何子图像622中的区域。重叠是图像600的包括在多个子图像622中的区域。在图6所示的示例中,从图像600分割子图像622,以防止间隙和重叠。间隙导致图像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。此外,可以由编解码系统200、编码器300、和/或解码器400将图像800编码在码流500中和从码流500中解码。此外,可以对图像800进行分割和/或将图像800包括在子码流501中,以支持根据方法100和/或机制700进行编码和解码。

图像800包括子图像822,子图像822实质上可以类似于子图像522、523、622和/或722。将子图像822分为多个CTU 825。CTU 825是标准化视频译码系统中的基本译码单元。通过编码树将CTU 825细分为编码块,根据帧间预测或帧内预测对编码块进行译码。如图所示,将一些子图像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和ISO/IEC的JVET的VVC。但是,这些技术也适用于其它视频编解码规范。下面是本文描述的示例性实施例。这样的实施例可以单独地或组合地应用。

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

当没有将一个图像分割为两个或多个子图像时,可能不会在码流中存在/指示除了子图像ID外的子图像的属性(例如位置、大小等)。在提取CVS中的图像的子图像时,新码流中的每个接入单元可以不包括子图像。在这种情况下,不会将新码流中的每个AU中的图像分割为多个子图像。因此,不需要在SPS中指示位置和大小等子图像属性,因为此类信息可以从图像属性推导。但是,仍然可以指示子图像标识,因为ID可以由包括在提取的子图像中的VCL NAL单元/分块组参考。这样,在提取子图像时保持相同子图像ID。

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

可以以亮度样本为单位指示子图像的大小(子图像宽度和子图像高度)。或者,子图像的尺寸可以以最小编码亮度块尺寸(minimum coding luma block size,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可以在分块组头的前几位中。对于非VCL NAL单元,可以应用以下内容。对于SPS,子图像ID不需要紧接在NAL单元头之后。对于PPS,如果将同一图像的所有分块组都约束为参考同一个PPS,则子图像ID不需要紧接在NAL单元头之后。如果允许同一图像的分块组参考不同的PPS,则子图像ID可以在PPS的前几位中(例如紧接在NAL单元头之后)。在这种情况下,可以允许一个图像的任何分块组共用同一PPS。或者,当允许同一个图像的分块组参考不同的PPS,并且允许同一个图像的不同分块组共用相同的PPS时,PPS语法中也可以没有子图像ID。或者,当允许同一个图像的分块组参考不同的PPS,并且允许同一个图像的不同分块组共用相同的PPS时,PPS语法中可以存在子图像ID列表。该列表表示PPS应用到的子图像。对于其它非VCLNAL单元,如果非VCL单元适用于图像或更高级别(例如访问单元分隔符、序列结束符、码流结束符等),则子图像ID可能不会紧跟在NAL单元头之后出现。否则,子图像ID可以紧接在NAL单元头之后。

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

或者,定义用于描述各个子图像内的分块分割方式的参数集。这种参数集可以称为子图像参数集(sub-picture parameter set,SPPS)。SPPS参考SPS。SPPS中存在一个参考SPS ID的语法元素。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融合产生的同一参数集

可以在NAL单元头中指示用于指示子图像ID的比特数。当这些信息出现在NAL单元头中时,可以协助子图像提取过程在NAL单元的载荷开始处(例如紧跟在NAL单元头之后的前几个比特处)解析子图像ID的值。对于此类指示,可以使用NAL单元头中的一些保留位(例如七个保留位)以避免增加NAL单元头的长度。此类指示的比特数可以覆盖sub-picture-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中与图像大小和级别相关的语法元素可以更新为子图像的大小和级别信息。以下非VCLNAL单元保持不变:PPS、访问单元分隔符(access unit delimiter,AUD)、序列结束(end of sequence,EOS)、(end ofbitstream,EOB),以及适用于图像级或更高级的非VCL NAL单元。可以去除子图像ID不等于目标子图像ID的其余的非VCL NAL单元。也可以去除子图像ID不等于目标子图像ID的VCLNAL单元。

序列级子图像嵌套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)。否则,如果以下条件都为真,则将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:等于SPLIT_BT_HOR,cbWidth大于MaxTbSizeY,cbHeight小于等于MaxTbSizeY。否则,将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 plus 1表示属于经编码的视频序列的经编码图像中分割的子图像的数量。subpic_id_len_minus1plus 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。子图像x偏移的值推导如下:SubpictureXOffset[i]=subpic_x_offset[i]。subpic_y_offset[i]表示第i个子图像的左上角相对于图像的左上角的垂直偏移。当subpic_y_offset[i]的值不存在,则推断subpic_y_offset[i]的值等于0。子图像y偏移的值推导如下: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、SubpicSizeInCtbsY、SubpicWidthInMinCbsY、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语法和语义如下:

spps_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的值等于0。num_tile_rows_minus1+1表示分割子图像的分块行的数量。num_tile_rows_minus1应在0到PicHeightInCtbsY[spps_subpic_id]-1的范围内(包括端值)。当不存在,则推断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。Thetile_column_width_minus1[i]+1表示第i个分块列的宽度(以CTB为单位)。tile_row_height_minus1[i]+1表示第i个分块行的高度(以CTB为单位)。

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

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

否则,如果treeType等于DUAL_TREE_CHROMA或大于MinQtSizeY,如果以下条件都为真,则推断qt_split_cu_flag[x0][y0]的值等于1: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表示的并置图像的左上亮度样本。调用并置运动矢量推导过程,将currCb、colCb、(xColCb,yColCb)、refIdxLX和sbFlag设置为0作为输入,将输出分配给mvLXCol和availableFlagLXCol。否则,mvLXCol的两个分量都设置为0,availableFlagLXCol设置为0。

时间三角融合候选的推导过程如下:变量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表示的并置图像的左上亮度样本。调用并置运动矢量推导过程,将currCb、colCb、(xColCb,yColCb)、refIdxLXC0和sbFlag设置为0作为输入,将输出分配给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表示的并置图像的左上亮度样本。调用并置运动矢量推导过程,将currCb、colCb、(xColCb,yColCb)、refIdxLX和sbFlag设置为0作为输入,将输出分配给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]的比特数,SPPS中的spps_subpic_id参考SPS,分块组头中的tile_group_subpic_id参考用SPS。subpic_id_len_minus1的取值范围为Ceil(Log2(num_subpic_minus1+3)至8(包括端值)。对于i从0到num_subpic_minus1(包括端值)的子图像[i]之间不应重叠,这是码流一致性的要求。每个子图像可以是时间运动约束子图像。

通用分块组头语义如下:tile_group_subpic_id标识分块组所属的子图像。tile_group_subpic_id的长度为subpic_id_len_minus1+1位。tile_group_subpic_id等于1表示该tile组不属于任何子图像。

在第三示例性实施例中,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,处理器930包括用于处理数据的逻辑单元和/或中央处理器(central processing unit,CPU)以及用于存储数据的存储器932。视频译码设备900还可包括电、光电(optical-to-electrical,OE)组件、电光(electrical-to-optical,EO)组件、和/或耦合到上行端口950和/或下行端口920的无线通信组件,用于通过电、光或无线通信网络发送数据。视频译码设备900还可以包括用于与用户发送数据的输入和/或输出(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,可以使用码流500、图像600和/或图像800。译码模块914还可以实现本文所描述的任何其它方法/机制。此外,译码模块914可以实现编解码系统200、编码器300和/或解码器400。例如,译码模块914可以用于在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)、静态随机存取存储器(staticrandom-access memory,SRAM)等。存储器932可以用作溢出数据存储设备,以在选择程序用于执行时存储此类程序,并存储程序执行期间读取的指令和数据。

图10为一种用于将子图像级别指示符编码到码流(例如码流500)中以支持子图像(例如子图像522、523、622、722和/或822)解码的示例性方法1000的流程图。编码器(例如编解码系统200、编码器300和/或视频译码设备900)在执行方法100时可以使用方法1000。

方法1000可以在编码器接收到包括多个图像的视频序列,并且例如根据用户输入确定将该视频序列编码到码流中时开始。在编码之前,将视频序列分割为图像/帧以进行进一步分割。

步骤1001:将图像分割为多个子图像。然后将所述多个子图像中的一个或多个子图像编码到所述码流中。

步骤1003:所述编码器确定解码所述一个或多个子图像中的每个子图像的资源需求。该步骤可以作为RDO过程的一部分完成。例如,所述编码器可以使用假设参考解码器(hypothetical reference decoder,HRD)作为编码过程的一部分。所述HRD可以使用资源解码多个潜在编码,以确定最优编码。所述编码器可以确定所述HRD在解码所选的最优编码时所使用的资源。

步骤1005:将子图像级别指示符编码到码流中。所述子图像级别指示符表示在步骤1003中确定的用于解码所述一个或多个子图像中的每个子图像的资源需求。在一些示例中,将所述子图像级别指示符编码到所述码流中的一个或多个SEI消息中。在其它示例中,将所述子图像级别指示符编码到所述码流中的SPS中。所述子图像级别指示符表示子图像大小、子图像像素计数、子图像码率或其组合。

步骤1007:将SPS编码到码流中。当将子图像级别指示符编码到SPS中时,步骤1005和1007可以合并。所述SPS还可以包括所述子图像中的每个子图像的子图像ID。所述SPS还可以包括所述子图像中的每个子图像的子图像位置。所述SPS还可以包括所述子图像中的每个子图像的子图像大小。

步骤1009:存储所述码流,所述码流用于发送到解码器。然后,可以根据需要将码流发送到解码器。在一些示例中,可以从经编码的码流中提取子码流。在这种情况下,发送的码流为子码流。在其它示例中,可以发送经编码的码流,用于在解码器中进行子码流提取。在又一示例中,无需子码流提取,经编码的码流可以解码和显示。在这些示例中的任一个示例中,可以在码流中发送子图像级别指示符。这样,每个子图像可以独立于其它子图像进行译码。可以确保基于每个子图像设置解码需求,而不是基于编码的最复杂的部分设置整个图像的解码需求。因此,所述子图像级别指示符确保所述解码器不会针对根据不复杂的机制编码的子图像设置过高的解码需求。指示的子图像级别信息增强了功能和/或提高了译码效率,这降低了编码器和解码器的网络资源利用率、内存资源利用率和/或处理资源利用率。

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

解码器开始接收包括子图像的码流时,可以启动方法1100的流程。该码流可以包括完整的视频序列,或者该码流可以是包括用于单独提取的缩减后的子图像集合的子码流。步骤1101:接收码流。所述码流包括从图像分割的一个或多个子图像。所述码流还包括子图像级别指示符,表示解码当前子图像的资源需求。

步骤1103:解析所述码流,以获取所述子图像级别指示符和所述当前子图像。在一些示例中,子图像级别指示符包括在所述码流中的SEI消息中。在其它示例中,子图像级别指示符包括在所述码流中的SPS中。因此,解析码流包括解析所述SPS、SEI消息和/或其它参数集,例如PPS、条带头等。所述子图像级别指示符表示子图像大小、子图像像素计数、子图像码率或其组合。所述SPS还可包括其它子图像信息,例如所述子图像中的每个子图像的子图像ID、子图像位置、子图像大小等。因此,解析SPS也可以得到这样的信息。

步骤1105:根据所述子图像级别指示符分配资源,以解码所述当前子图像。步骤1107:通过所述分配的资源解码所述当前子图像,以生成视频序列。步骤1109:发送用于显示的所述视频序列。相应地,子图像级别指示符可以在码流中发送,解码器可以为待解码的每个子图像分别分配硬件和/或软件资源。这样,每个子图像可以独立于其它子图像进行译码。此外,资源不会像在图像级别分配资源时那样过度分配。而且,在单独提取子图像的子集时,可以合理分配资源。因此,子图像级别指示符增强了功能和/或提高了译码效率,这降低了编码器和解码器的网络资源利用率、内存资源利用率和/或处理资源利用率。

图12为一种用于通过码流(例如码流500和/或子码流501)指示子图像级别指示符(例如子图像522、523、622、722和/或822的子图像级别指示符)的示例性系统1200的示意图。系统1200可以通过编码器和解码器(例如编解码系统200、编码器300、解码器400、和/或视频译码设备900)实现。此外,可以使用系统1200实现方法100、1000和/或1100。

系统1200包括视频编码器1202。所述视频编码器1202包括分割模块1201,用于将图像分割为多个子图像。所述视频编码器1202还包括确定模块1203,用于确定解码所述一个或多个子图像中的每个子图像的资源需求。所述视频编码器1202还包括编码模块1205,用于将表示解码所述一个或多个子图像的资源需求的子图像级别指示符编码到所述码流中;以及将所述多个子图像中的一个或多个子图像编码到所述码流中。所述视频编码器1202还包括存储模块1207,用于存储所述码流,所述码流用于发送到解码器。所述视频编码器1202还包括发送模块1209,用于将包括所述一个或多个子图像和所述级别指示符的所述码流发送到所述解码器。所述视频编码器1202还可以用于执行方法1000中的任一步骤。

所述系统1200还包括视频解码器1210。所述视频解码器1210包括接收模块1211,用于接收码流,所述码流包括从图像分割的一个或多个子图像和表示解码当前子图像的资源需求的子图像级别指示符。所述视频解码器1210还包括解析模块1213,用于解析所述码流,以获取所述子图像级别指示符和所述当前子图像。所述视频解码器1210还包括分配模块1215,用于根据所述子图像级别指示符分配资源,以解码所述当前子图像。所述视频解码器1210还包括解码模块1217,用于通过所述分配的资源解码所述当前子图像,以生成视频序列。所述视频解码器1110还包括发送模块1219,用于发送用于显示的所述视频序列。所述视频解码器1210还可以用于执行方法1100中的任一步骤。

当第一组件与第二组件之间除线、迹线或其它介质之外,没有中间组件时,第一组件直接耦合到第二组件。当第一组件与第二组件之间除了线、迹线或其它介质之外还有中间组件时,第一组件与第二组件间接耦合。术语“耦合”及其同义词包括直接耦合和间接耦合。除非另有说明,否则使用术语“约”意指包括后续数字±10%的范围。

还应理解,本文中阐述的示例性方法的步骤不一定需要按照所描述的顺序执行,并且这些方法的步骤的顺序应理解为仅仅是示例性的。同样地,在与本发明各种实施例相一致的方法中,这些方法可以包括其它步骤,并且某些步骤可以省略或组合。

虽然本发明中已提供若干实施例,但可以理解,在不脱离本发明的精神或范围的情况下,所公开的系统和方法可以以许多其它特定形式来体现。本发明的示例应被视为说明性而非限制性的,且本发明并不限于本文本所给出的细节。例如,可以在另一系统中结合或集成各种元件或组件,或者可以省略或不实施某些特征。

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

相关技术
  • 视频译码中的子图像级别指示符指示
  • 视频译码中的子图像布局指示
技术分类

06120113250067