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

相关申请案的交叉参考

本专利申请案要求FNU Hendry等人于2018年12月27日递交的申请案号为62/785,511、发明名称为“视频译码中的灵活分块(Flexible Tiling in Video Coding)”的美国临时专利申请案的权益,其内容以引用的方式并入本文本中。

技术领域

本发明大体上涉及视频译码,具体地,涉及灵活视频分块(tiling)方案,该方案支持同一图像中不同分辨率的多个分块。

背景技术

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

发明内容

在一个实施例中,本发明包括一种在编码器中实现的方法,所述方法包括:所述编码器的处理器将图像分割成多个第一级分块;所述处理器将所述第一级分块的子集分割成多个第二级分块;所述处理器将所述第一级分块和所述第二级分块编码到码流中;所述处理器将划分指示编码到所述码流中,所述划分指示表示所述第一级分块中的至少一个第一级分块划分成所述第二级分块;所述编码器的存储器存储所述码流,所述码流用于发送到解码器。视频译码系统可以使用条带和分块来分割图像。如果能够发送包括以不同分辨率编码的多个区域的单个图像,则可以改进某些流式应用(例如,虚拟现实(virtualreality,VR)和电话会议)。某些条带和分块机制可以不支持这种功能,因为不同分辨率的分块可以以不同的方式处理。例如,由于像素密度不同,第一分辨率的分块可包括单个数据条带,而第二分辨率的分块可携带多个数据条带。本方面通过指示的方式使用灵活分块方案,所述灵活分块方案包括第一级分块和第二级分块。第二级分块是通过对第一级分块进行分割而创建的。这种灵活分块方案使第一级分块包括一个第一分辨率的数据条带,并且使包括第二级分块的第一级分块包括多个第二分辨率的条带。所述指示表示将第一级分块进一步划分为第二级分块的时间。因此,所公开的灵活分块方案使编码器/解码器(编解码器)支持包括多个分辨率的图像,因此增强了编码器和解码器的功能。

可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述子集之外的第一级分块包括第一分辨率的图像数据,第二级分块包括第二分辨率的图像数据,所述第二分辨率与所述第一分辨率不同。

可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述划分指示编码在图像参数集中作为二级分块划分标志,并且为经分割以创建所述第二级分块的每个第一级分块设置所述二级分块划分标志。

可选地,根据任一上述方面,在所述方面的另一种实现方式中,每个第二级分块包括所述图像中的单个条带的图像数据。

可选地,根据任一上述方面,在所述方面的另一种实现方式中,还包括:所述处理器对分割后的第一级分块的第二级分块行和第二级分块列进行编码,其中,所述第二级分块行和所述第二级分块列编码在所述图像关联的图像参数集中。

可选地,根据任一上述方面,在所述方面的另一种实现方式中,从宽度小于最小宽度阈值且高度小于最小高度阈值的第一级分块的码流中省略显示表示第一级分块是否分割成第二级分块的数据。

可选地,根据任一上述方面,在所述方面的另一种实现方式中,还包括:所述处理器将所述第一级分块和所述第二级分块分配到一个或多个分块组中,使得包括第二级分块的对应分块组中的分块受到约束以覆盖所述图像的矩形部分。

可选地,根据任一上述方面,在所述方面的另一种实现方式中,从宽度小于所述最小宽度阈值的两倍且高度小于所述最小高度阈值的两倍的分割后的第一级分块的图像参数集中省略第二级分块行和第二级分块列。

在一个实施例中,本发明包括一种在解码器中实现的方法,所述方法包括:所述解码器的处理器通过接收器接收码流,所述码流包括分割成多个第一级分块的图像,所述第一级分块的子集进一步分割成多个第二级分块;所述处理器从所述码流中获取划分指示,所述划分指示表示所述第一级分块中的至少一个第一级分块划分成所述第二级分块;所述处理器根据所述划分指示,确定所述第一级分块的配置和所述第二级分块的配置;所述处理器根据所述第一级分块的配置和所述第二级分块的配置,对所述第一级分块和所述第二级分块进行解码;所述处理器根据经解码的第一级分块和第二级分块,生成重建视频序列进行显示。视频译码系统可以使用条带和分块来分割图像。如果能够发送包括以不同分辨率编码的多个区域的单个图像,则可以改进某些流式应用(例如,VR和电话会议)。某些条带和分块机制可以不支持这种功能,因为不同分辨率的分块可以以不同的方式处理。例如,由于像素密度不同,第一分辨率的分块可包括单个数据条带,而第二分辨率的分块可携带多个数据条带。本方面通过指示的方式使用灵活分块方案,所述灵活分块方案包括第一级分块和第二级分块。第二级分块是通过对第一级分块进行分割而创建的。这种灵活分块方案使第一级分块包括一个第一分辨率的数据条带,并且使包括第二级分块的第一级分块包括多个第二分辨率的条带。所述指示表示将第一级分块进一步划分为第二级分块的时间。因此,所公开的灵活分块方案使编解码器支持包括多个分辨率的图像,因此增强了编码器和解码器的功能性。

可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述子集之外的第一级分块包括第一分辨率的图像数据,第二级分块包括第二分辨率的图像数据,所述第二分辨率与所述第一分辨率不同。

可选地,根据任一上述方面,在所述方面的另一种实现方式中,从二级分块划分标志中的图像参数集中获取所述划分指示,并且为经分割以创建所述第二级分块的每个第一级分块设置所述二级分块划分标志。

可选地,根据任一上述方面,在所述方面的另一种实现方式中,每个第二级分块包括所述图像中的单个条带的图像数据。

可选地,根据任一上述方面,在所述方面的另一种实现方式中,还包括:所述处理器从分割后的第一级分块的码流中获取第二级分块行和第二级分块列,其中,所述第二级分块行和所述第二级分块列是从所述图像关联的图像参数集中获取的,并且所述第一级分块的配置和所述第二级分块的配置根据所述第二级分块行和所述第二级分块列确定的。

可选地,根据任一上述方面,在所述方面的另一种实现方式中,从宽度小于最小宽度阈值且高度小于最小高度阈值的第一级分块的码流中省略显示表示第一级分块是否分割成第二级分块的数据。

可选地,根据任一上述方面,在所述方面的另一种实现方式中,将所述第一级分块和所述第二级分块分配到一个或多个分块组中,使得包括第二级分块的对应分块组中的分块受到约束以覆盖所述图像的矩形部分。

可选地,根据任一上述方面,在所述方面的另一种实现方式中,从宽度小于所述最小宽度阈值的两倍且高度小于所述最小高度阈值的两倍的分割后的第一级分块的图像参数集中省略第二级分块行和第二级分块列。

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

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

在一个实施例中,本发明包括一种编码器,包括:分割模块,用于:将图像分割成多个第一级分块;将所述第一级分块的子集分割成多个第二级分块;编码模块,用于:将所述第一级分块和所述第二级分块编码到码流中;将划分指示编码到所述码流中,所述划分指示表示所述第一级分块中的至少一个第一级分块划分成所述第二级分块;存储模块,用于存储所述码流,所述码流用于发送到解码器。

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

在一个实施例中,本发明包括一种解码器,包括:接收模块,用于接收码流,所述码流包括分割成多个第一级分块的图像,所述第一级分块的子集进一步分割成多个第二级分块;获取模块,用于从所述码流中获取划分指示,所述划分指示表示所述第一级分块中的至少一个第一级分块划分成所述第二级分块;确定模块,用于根据所述划分指示,确定所述第一级分块的配置和所述第二级分块的配置;解码模块,用于根据所述第一级分块的配置和所述第二级分块的配置,对所述第一级分块和所述第二级分块进行解码;生成模块,用于根据经解码的第一级分块和第二级分块,生成重建视频序列进行显示。

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

为了描述的清晰性,上述任一实施例可以与上述其它任一或多个实施例结合以创建本发明范围内的新实施例。

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

附图说明

为了更透彻地理解本发明,现参阅结合附图和具体实施方式而描述的以下简要说明,其中的相同附图标记表示相同部分。

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

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

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

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

图5为包括经编码视频序列的示例性码流的示意图。

图6A至图6E示出了用于创建提取器轨迹的示例性机制,所述提取器轨迹用于将不同码流中具有多个分辨率的子图像组合成单个图像,从而用于虚拟现实(VirtualReality,VR)应用中。

图7示出了将不同码流中具有多个分辨率的图像拼接成单个图像进行显示的示例性视频会议应用。

图8A和图8B为能够支持同一图像中不同分辨率的多个分块的示例性灵活视频分块方案的示意图。

图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)。

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

为了保证经编码视频能够被准确解码,按照对应的视频译码标准对视频进行编码和解码。这些视频编码标准包括国际电信联盟电信标准化部门(InternationalTelecommunication Union Telecommunication Standardization Sector,ITU-T)H.261,国际标准化组织/国际电工委员会(International Organization for Standardization/International Electrotechnical Commission,ISO/IEC)运动图像专家组(MotionPicture Experts Group,MPEG)-1第2部分、ITU-T H.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包括可分级视频译码(ScalableVideo Coding,SVC)、多视图视频译码(Multiview Video Coding,MVC)和多视图加深度视频译码(Multiview Video Coding plus Depth,MVC+D)以及三维(three dimensional,3D)AVC(three dimensional AVC,3D-AVC)等扩展。HEVC包括可分级HEVC(Scalable HEVC,SHVC)、多视图HEVC(Multiview HEVC,MV-HEVC)和3D HEVC(3D-HEVC)等扩展。ITU-T和ISO/IEC的联合视频专家组(joint video experts team,JVET)已开始开发一种称为通用视频译码(Versatile Video Coding,VVC)的视频译码标准。VVC包括在工作草案(WorkingDraft,WD)中,工作草案包括JVET-L1001-v5。

为了对视频图像进行译码,首先对图像进行分割,并将分割译码到码流中。图像分割方案有多种。例如,图像可以被分割成规则条带、相关条带、分块和/或根据波前并行处理(Wavefront Parallel Processing,WPP)分割成规则条带、相关条带、分块。为了描述的简洁性,HEVC限制了编码器,使得在将条带分割成用于视频译码的CTB组时,只能使用规则条带、相关条带、分块、WPP及其组合。这种分割可以用于支持最大传输单元(MaximumTransfer 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并指示所述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)字节。根据MCTS子码流提取过程提取子码流时,参数集(VPS、SPS、PPS)可以被重写或替换并且可以更新条带头,因为一个或所有条带地址相关语法元素(包括first_slice_segment_in_pic_flag和slice_segment_address)可以使用所提取子码流中的不同值。

当分割图像以进行进一步编码时,可以使用多种分块方案。在一个特定示例中,可以将分块分配给分块组,在一些示例中,分块组可以取代条带。在一些示例中,可以独立于其它分块组提取每个分块组。因此,分块分组可以通过允许将每个分块组分配给不同的处理器来支持并行化。在解码器可以不希望对整个图像进行解码的情况下,可以使用分块分组。在特定示例中,可以使用视频译码方案来支持虚拟现实(virtual reality,VR)视频,所述视频可以根据全向媒体应用格式(Omnidirectional Media Application Format,OMAF)进行编码。

在VR视频中,一个或多个摄像机可以记录摄像机周围的环境。这时,用户就可以看到VR视频,就好像用户和摄像机处于同一位置一样。在VR视频中,一个图像包括了用户周围的整个环境。然后,用户观看图像的子部分。例如,用户可以使用头戴式显示器,该显示器根据用户的头部移动来改变所显示的图像的子部分。正在显示的视频部分可以称为视角。

因此,全向视频的一个显着特征是,在任何特定时间只显示一个视角。这与其它可以显示整个视频的视频应用形成鲜明对比。该特性可以用于提高全向视频系统的性能,例如通过根据用户的视角(或任何其它标准,例如推荐的视角定时元数据)进行选择性传递。例如,可以通过采用区域打包和/或视角相关视频译码来启用视角相关传递。当采用相同视频分辨率/质量时,与其它全向视频系统相比,性能改进可使传输带宽更小、解码复杂度更小或两者同时变小。

示例性视角相关操作是基于MCTS的方法,用于使用基于HEVC的视角相关OMAF视频配置文件,实现5000个样本(例如,5120×2560亮度样本)分辨率(5K)有效等角投影(effective equirectangle projection,ERP)分辨率。下文详细介绍这一方法。但通常,这种方法将VR视频分割成分块组,并以多个分辨率对视频进行编码。解码器可以指示用户在流化过程中当前使用的视角。提供VR视频数据的视频服务器随后可以以高分辨率转发视角关联的(多个)分块组,并且以低分辨率转发未观看的分块组。这样用户就可以以高分辨率观看VR视频,而不需要以高分辨率发送整个图像。舍弃未观看的子部分,因此用户可以不知道较低的分辨率。但是,如果用户改变视角,则可将低分辨率分块组显示给用户。然后,随着视频进行播放,新视角的分辨率可以增大。为了实现这样的系统,应该创建包括高分辨率分块组和低分辨率分块组的图像。

在另一示例中,视频会议应用可用于转发包括多个分辨率的图像。例如,视频会议中可以具有多个参与者。可以以高分辨率显示当前发言的参与者,而可以以低分辨率显示其它参与者。为了实现这样的系统,应该创建包括高分辨率分块组和低分辨率分块组的图像。

本文公开了各种灵活的分块机制,以支持创建具有以多个分辨率译码的子图像的图像。例如,可以以多个分辨率对视频进行译码。视频也可以通过在每种分辨率下使用条带进行译码。低分辨率条带比高分辨率条带小。为了创建具有多个分辨率的图像,可以将图像分割成第一级分块。最高分辨率的条带可以直接包括在第一级分块中。此外,第一级分块可以被分割成第二级分块,所述第二级分块比第一级分块小。因此,较小的第二级分块可以直接接受较低分辨率的条带。这样,在不需要动态地重寻址不同分辨率的分块以使用一致的寻址方案的情况下,通过分块索引关系,可以将每个分辨率的条带压缩成单个图像。第一级分块和第二级分块可以实现为MCTS,因此可以接受不同分辨率的运动约束图像数据。本发明包括许多方面。在特定示例中,第一级分块划分为第二级分块。然后,可以约束第二级分块,各自包括单个矩形条带的图像数据(例如,在低分辨率下)。如本文所用,分块是由水平边界和垂直边界(例如,根据列和行)创建的图像的分割部分。矩形条带是约束为矩形形状的条带,因此根据水平和垂直图像边界进行译码。因此,矩形条带不根据光栅扫描组进行译码(光栅扫描组从左到右和从上到下包括呈直线的CTU,并且可以不保持矩形形状)。条带是图像/帧中与同一图像/帧中任何其它区域分开编码的在空间上不同的区域。在另一特定示例中,例如,在参数集中可以指示第一级分块和第二级分块的配置。例如,可以为每个第一级分块设置划分指示(例如标志)。划分指示可以设置为第一值,表示对应的第一级分块不划分成第二级分块,或者设置为第二值,表示对应的第一级分块划分成第二级分块。

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

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

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

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

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

在步骤107中,可以应用各种滤波技术。在HEVC中,根据环内滤波方案应用滤波器。以上讨论的基于块的预测可在解码器中创建块状图像。此外,基于块的预测方案可以对块进行编码,然后重建经编码块,以供以后用作参考块。环内滤波方案迭代地将噪声抑制滤波器、去块效应滤波器、自适应环路滤波器和样本自适应偏移(sample adaptive offset,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。然后,当作为编码器时,编解码系统200将分割视频信号201压缩到经译码码流中,如关于方法100中的步骤105、107和109所讨论。如关于操作方法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是已通过编码树分割成像素块的捕获视频序列。编码树使用各种划分模式将像素块细分为更小的像素块。然后,可以将这些块进一步细分为更小的块。所述块可以称为编码树上的节点。将较大的父节点划分成较小的子节点。节点被细分的次数称为节点/编码树的深度。在某些情况下,划分的块可以包括在编码单元(coding unit,CU)中。例如,CU可以是CTU的子部分,包括亮度块、红差色度(Cr)块和蓝差色度(Cb)块以及CU的对应语法指令。划分模式可以包括二叉树(binary tree,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 modelingmode,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对输入视频信号进行分割,产生和分割视频信号201基本相似的分割视频信号301。然后,通过编码器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可以由编解码系统200和/或编码器300生成,由编解码系统200和/或解码器400进行解码。在另一示例中,码流500可以由编码器在方法100的步骤109中生成,以供解码器在步骤111中使用。

码流500包括序列参数集(sequence parameter set,SPS)510、多个图像参数集(picture parameter set,PPS)512、分块组标头514和图像数据520。SPS 510包括码流500中包括的视频序列中所有图像共用的序列数据。这些数据可以包括图像大小、位深度、译码工具参数、码率限制等。PPS 512包括一个或多个对应图像特定的参数。因此,视频序列中的每个图像可以参考一个PPS 512。PPS 512可以指示对应图像中的分块可用的译码工具、量化参数、偏移、图像特定编码工具参数(例如,滤波器控制参数)等。分块组标头514包括图像中每个分块组特定的参数。因此,视频序列中的每个分块组可以具有一个分块组标头514。分块组标头514可包括分块组信息、图像顺序编号(picture order count,POC)、参考图像列表、预测权重、分块入口点、去块效应参数等。应注意,有些系统将分块组标头514称为条带头,并使用这些信息来支持条带而不是分块组。

图像数据520包括根据帧间预测和/或帧内预测编码的视频数据以及对应的变换和量化残差数据。根据编码前对图像进行分割的分割方案,对图像数据520进行排序。例如,图像数据520中的图像划分成分块523。分块523进一步划分为编码树单元(coding treeunit,CTU)。根据编码树,将CTU进一步划分成编码块。然后可以根据预测机制对编码块进行编码/解码。图像(image/picture)可以包括一个或多个分块523。

分块523是由水平和垂直边界创建的图像的分割部分。分块523可以是矩形和/或正方形的。具体地,分块523包括四个以直角连接的边。所述四个边包括两对平行边。此外,平行边对中的边的长度相等。因此,分块523可以是任何矩形形状,其中正方形是矩形的特殊情况,所有四个边的长度相等。一个图像可以分割成分块523的行和列。分块行是以水平相邻的方式定位以创建从图像的左边界到右边界的连续线(或者反之亦然)的分块523的集合。分块列是以垂直相邻的方式定位以创建从图像的上边界到下边界的连续线(或者反之亦然)的分块523的集合。分块523可以或不可以允许根据其它分块523进行预测,具体根据示例确定。每个分块523可以在图像中具有唯一的分块索引。分块索引是程序上选择的数字标识符,可以用于区分一个分块523与另一个分块523。例如,分块索引可以按光栅扫描顺序数值增加。光栅扫描顺序从左到右,从上到下。应注意,在一些示例中,也可以为分块523分配分块标识符(identifier,ID)。分块ID是已分配标识符,可以用于区分一个分块523与另一个分块523。在一些示例中,可以使用分块ID而不是分块索引进行计算。此外,在一些示例中,可以分配分块ID具有与分块索引相同的值。可以指示分块索引和/或ID以表示包括分块523的分块组。例如,可以使用分块索引和/或ID将与分块523关联的图像数据映射到适当位置进行显示。分块组是可以单独提取和译码的分块523的相关集合,从而支持感兴趣区域的显示和/或支持并行处理。可以在不参考分块组外的分块523的情况下对分块组中的分块523进行译码。每个分块523可以分配到对应的分块组中,因此图像可以包括多个分块组。

图6A至6E示出了用于创建提取器轨迹610的示例性机制600,所述提取器轨迹610用于将不同码流中具有多个分辨率的子图像组合成单个图像,用于虚拟现实(VirtualReality,VR)应用中。机制600可用于支持方法100的示例使用情况。例如,机制600可用于生成码流500,用于从编解码系统200和/或编码器300向编解码系统200和/或解码器400发送。在特定示例中,机制600可以与VR、OMAF、360度视频等结合使用。

在VR中,用户只看到一部分视频。例如,可以拍摄VR视频包括用户周围的球体。用户可以使用头戴式显示器(head mounted display,HMD)来观看VR视频。用户可以将HMD指向感兴趣区域。感兴趣区域显示给用户,其它视频数据则被舍弃。这样,用户在任何时刻只观看用户选择的VR视频部分。这种方法模拟用户的感知系统,从而使得用户以模拟真实环境的方式体验虚拟环境。这种方法有一个问题是,整个VR视频可以传输给用户,但是实际上只使用视频的当前视角,而其余视角则被舍弃。为了提高流应用的指示效率,用户当前的视角可以以较高的第一分辨率传输,而其它视角可以以较低的第二分辨率传输。这样,可能被舍弃的视角占用的带宽比可能被用户观看的视角占用的带宽要小。在用户选择新视角的情况下,可以显示低分辨率的内容,直到解码器可以请求以较高的第一分辨率传输不同的当前视角。机制600可用于创建提取器轨迹610,如图6E所示,以支持该功能。提取器轨迹610是图像数据的轨迹,所述图像数据以多个分辨率封装图像以供如上所述使用。

如图6A和图6B所示,机制600分别以第一分辨率611和第二分辨率612对相同的视频内容进行编码。在特定示例中,第一分辨率611可以是5120×2560亮度样本,第二分辨率612可以是2560×1280亮度样本。视频的图像可以分别分割成第一分辨率611的分块601和第二分辨率612的分块603。在所示的示例中,将分块601和603分别分割成4×2网格。此外,可以针对每个分块601和603的位置对MCTS进行译码。第一分辨率611和第二分辨率612的图像各自产生描述对应分辨率下随时间变化的视频的MCTS序列。每个经译码的MCTS序列存储为子图像轨迹或分块轨迹。然后,机制600可以使用这些图像创建段以支持视角自适应MCTS选择。例如,考虑导致高分辨率和低分辨率MCTS不同选择的每个观看方向范围。在图示的示例中,获得包括第一分辨率611的MCTS的四个分块601和包括第二分辨率613的MCTS的四个分块603。

然后,机制600可以为每个可能的视角自适应MCTS选择创建提取器轨迹610。图6C和图6D示出了示例性视角自适应MCTS选择。具体地,分别以第一分辨率611和第二分辨率612选择选定分块605和607的集合。选定分块605和607以灰色阴影示出。在所示示例中,选定分块605是将要向用户显示的第一分辨率611的分块601,选定分块607是可能被舍弃的,但在用户选择新视角时,仍支持显示的第二分辨率612的分块603。然后,将选定分块605和607组合成同时包括第一分辨率611和第二分辨率612的图像数据的单个图像。将这些图像进行组合以创建提取器轨迹610。图6E示出了对应提取器轨迹610的单个图像,以便进行说明。如图所示,提取器轨迹610中的图像包括第一分辨率611和第二分辨率612的选定分块605和607。如上所述,图6C至图6E示出了单个视角自适应MCTS选择。为了允许用户选择任何视角,应针对选定分块605和607的每个可能组合创建提取器轨迹610。

在所示示例中,每个分块603选择封装包括两个条带的第二分辨率612码流的内容。RegionWisePackingBox可以包括在提取器轨迹610中,以创建打包图像与ERP格式的投影图像之间的映射。在本示例中,从提取器轨迹解析的码流的分辨率为3200×2560。因此,支持四千个样本(4K)的解码器可以对内容进行解码,所述内容中,视角是从经译码码流中提取的,且具有五千个样本5K(5120×2560)分辨率。

如图所示,提取器轨迹610包括两行高分辨率分块601和四行低分辨率分块603。因此,提取器轨迹610包括两个高分辨率内容的条带和四个低分辨率内容的条带。均匀分块可以不支持这样的使用情况。均匀分块由分块列集合和分块行集合定义。分块列从图像的顶部延伸到图像的底部。同样,分块行从图像的左侧延伸到图像的右侧。虽然这种结构可以简单地定义,但是这种结构不能有效地支持由机制600描述的使用情况等高级使用情况。在所示的示例中,在提取器轨迹610的不同部分中采用不同的行数。如果使用均匀分块,则应重写位于提取器轨迹610右侧的分块,从而每个分块可以接受两个条带。这种方法效率低,计算复杂。

本发明包括灵活分块方案,如下所述,不需要对分块进行重写以包括不同的条带数。灵活分块方案有助于分块601包括第一分辨率611的内容。灵活分块方案还有助于将分块601分割成较小的分块,每个分块能够直接映射到第二分辨率612的分块603。这种直接映射更高效,因为这种方法不要求在如上所述组合不同分辨率时对分块进行重写/重寻址。

图7示出了将不同码流中具有多个分辨率的图像拼接成单个图像进行显示的示例性视频会议应用700。应用700可用于支持方法100的示例使用情况。例如,应用700可以用于编解码系统200和/或解码器400以显示编解码系统200和/或编码器300中的码流500的视频内容。视频会议应用700向用户显示视频序列。视频序列包括显示发言参与者701和其他参与者703的图像。发言参与者701以较高的第一分辨率显示,而其他参与者703以较低的第二分辨率显示。为了对这样的图像进行译码,图像应该包括单行部分和三行部分。为了支持这种使用均匀分块的场景,图像被分割成左右分块。然后,右分块被重写/重寻址以包括三行。这种重寻址操作会进行压缩,也会导致性能下降。下文描述的灵活分块方案有助于单个分块被分割成较小的分块并且映射到与其他参与者703关联的子图像码流中的分块。这样,发言参与者701可以直接映射到第一级分块中,而其他参与者703可以在不进行重写/重寻址的情况下映射到从第一级分块中划分的第二级分块。

图8A和图8B为能够支持同一图像中不同分辨率的多个分块的示例性灵活视频分块方案800的示意图。灵活视频分块方案800可用于支持更高效的译码机制600和应用700。因此,灵活视频分块方案800可以用作方法100的一部分。此外,灵活视频分块方案800可以由编解码系统200、编码器300和/或解码器400使用。灵活视频分块方案800的结果可以存储在码流500中,用于在编码器和解码器之间传输。

如图8A所示,可以将图像(例如,帧、图像等)分割成第一级分块801,也称为一级分块。如图8B所示,可以选择性地分割第一级分块801以创建第二级分块803,也称为二级分块。然后,可以使用第一级分块801和第二级分块803来创建具有以多个分辨率译码的子图像的图像。第一级分块801是将图像完全分割成列集合和行集合而产生的分块。第二级分块803为对第一级分块801进行分割而产生的分块。

如上所述,在各种场景中,例如在VR和/或电话会议中,视频可以以多个分辨率译码。视频也可以通过在每种分辨率下使用条带进行译码。低分辨率条带比高分辨率条带小。为了创建具有多个分辨率的图像,可以将图像分割成第一级分块801。最高分辨率的条带可以直接包括在第一级分块801中。此外,第一级分块801可以被分割成第二级分块803,所述第二级分块803比第一级分块801小。因此,较小的第二级分块803可以直接接受较低分辨率的条带。这样,在不需要动态地重寻址不同分辨率的分块以使用一致的寻址方案的情况下,例如通过分块索引关系,可以将每个分辨率的条带压缩成单个图像。第一级分块801和第二级分块803可以实现为MCTS,因此可以接受不同分辨率的运动约束图像数据。

本发明包括许多方面。在特定示例中,第一级分块801划分为第二级分块803。然后,可以约束第二级分块803,各自可以包括单个矩形条带的图像数据(例如,在低分辨率下)。矩形条带是约束为矩形形状的条带,因此根据水平和垂直图像边界进行译码。因此,矩形条带不根据光栅扫描组进行译码(光栅扫描组从左到右和从上到下包括呈直线的CTU,并且可以不保持矩形形状)。条带是图像/帧中与同一图像/帧中任何其它区域分开编码的在空间上不同的区域。在另一示例中,第一级分块801可以划分成两个或多个完整的第二级分块803。在这种情况下,第一级分块801可以不包括部分第二级分块803。在另一示例中,第一级分块801和第二级分块803的配置可以在码流中的参数集中指示,例如与被分割以创建分块的图像关联的PPS。在一个示例中,可以在针对每个第一级分块801的参数集中对划分指示(例如标志)进行译码。所述指示表示哪些第一级分块801进一步划分为第二级分块803。在另一示例中,第二级分块803的配置可以指示为第二级分块列数和第二级分块行数。

在另一个示例中,可以将第一级分块801和第二级分块803分配到分块组中。可以约束这些分块组,使得对应的分块组中的所有分块都受到约束以覆盖图像的矩形区域(例如,不是光栅扫描)。例如,某些系统可以按照光栅扫描顺序将分块添加到分块组中。该过程包括在当前行中添加初始分块,继续将每个分块添加到行中,直到到达当前行的左图像边界,继续进行到下一行的右边界,并将每个分块添加到下一行中等,直到到达最后一个分块。该方法可以产生在图像上延伸的非矩形形状。这样的形状可能不利于创建如本文所述的具有多个分辨率的图像。相反,本示例可以约束分块组,使得可以将任何第一级分块801和/或第二级分块803添加到分块组(例如,以任何顺序),但得到的分块组必须是矩形或正方形(例如,包括以直角连接的四个边)。该约束条件可以确保从单个第一级分块801划分的第二级分块803不会处于不同的分块组中。

在另一示例中,当第一级分块宽度小于最小宽度阈值的两倍且第一级分块高度小于最小高度阈值的两倍时,可以从码流中省略显式指示第二级分块列数和第二级分块行数的数据。这是因为满足这些条件的第一级分块801可以不分别划分成多于一列或一行,因此解码器可以推断出这些信息。在另一示例中,指示哪些第一级分块801被分割成第二级分块803的划分指示可以从某些第一级分块801的码流中省略。例如,当第一级分块801的第一级分块宽度小于最小宽度阈值且第一级分块高度小于最小高度阈值时,可以省略这些数据。这是因为满足这些条件的第一级分块801太小以至于不能划分成第二级分块803,因此解码器可以推断出这些信息。

如上所述,灵活视频分块方案800支持将不同码流的子图像融合为具有多个分辨率的图像。下面描述支持这些功能的各种实施例。一般来说,本发明描述了视频译码中用于以比HEVC中的分块方案更灵活的方式对图像进行分割的分块指示和译码方法。更具体地,本发明描述了一些分块方案,其中分块列可以不均匀地从经译码图像的顶部延伸到底部,同样地,分块行也可以不均匀地从经译码图像的左侧延伸至右侧。

例如,根据HEVC分块方法,一些分块应进一步划分为多个分块行以支持图6A至图6E和图7所描述的功能。此外,根据分块的位置,应将分块进一步划分为分块列。例如,在图7中,参与者2至4在某些情况下可以位于参与者1的下方,可以通过将分块分成列来支持这种情况。为了满足这些场景,可以将第一级分块划分为如下文所述的第二级分块的分块行和分块列。

例如,可以根据下文放宽对分块结构的要求。同一图像中的分块不需要是特定数量的分块行。此外,同一图像中的分块不需要是特定数量的分块列。对于灵活分块的指示,可以采用以下步骤:第一级分块结构可由HEVC中定义的分块列和分块行定义。分块列和分块行的大小可以是均匀的,也可以是不均匀的。这些分块中的每一个分块可以称为第一级分块。可以指示标志来表示每个第一级分块是否进一步划分为一个或多个分块列和一个或多个分块行。如果第一级分开进一步划分,则分块列和分块行的大小可以是均匀的,也可以是不均匀的。通过对第一级分块进行划分产生的新分块称为第二级分块。灵活分块结构可以仅限于第二级分块,因此在一些示例中不允许再对任何第二级分块进行划分。在其它示例中,可以通过根据第一级分块创建第二级分块类似的方式,对第二级分块进行进一步划分以创建下一级分块。

为了描述的简洁性,当将第一级分块划分为两个或多个第二级分块时,该划分可以始终使用均匀大小的分块列和均匀的分块行。下面将介绍通过这种方法定义的灵活分块的位置、大小、索引和扫描顺序的推导。为了描述的简洁性,当使用这种灵活分块结构时,可以约束分块组包括一个或多个完整的第一级分块。在本示例中,当分块组包括第二级分块时,所有源自对同一个第一级分块进行划分得到的第二级分块都应该包括在该分块组中。还可以约束当使用这种灵活分块结构时,分块组包括一个或多个分块,并且所有分块一起属于覆盖图像的矩形区域的分块组。在另一方面中,当使用这种灵活分块结构时,分块组包括一个或多个第一级分块,并且所有分块一起属于覆盖图像的矩形区域的分块组。

在一个示例中,灵活分块的指示可以如下:最小分块宽度和最小分块高度是定义值。第一级分块结构可由分块列和分块行定义。分块列和分块行的大小可以是均匀的,也可以是不均匀的。这些分块中的每一个分块可以称为第一级分块。可以指示标志来表示是否可进一步划分第一级分块中的任何一个。当每个第一级分块的宽度不大于最小分块宽度的两倍,并且每个第一级分块的高度不大于最小分块高度的两倍时,可以不具有该标志。如果不具有该标志,则推断所述标志的值等于0。

在一个示例中,以下内容适用于每个第一级分块。可以指示标志来表示第一级分块是否进一步划分为一个或多个分块列和一个或多个分块行。具有标志的约束方式如下。如果第一级分块宽度大于最小分块宽度,或者如果第一级分块高度大于最小分块高度,则具有/指示标志。否则,不具有所述标志,并且推断所述标志的值等于0,表示第一级分块没有进一步划分。

如果进一步划分第一级分块,则可进一步指示进行该划分的分块列的数量和分块行的数量。分块列和分块行的大小可以是均匀的,也可以是不均匀的。通过对第一级分块进行划分产生的分块称为第二级分块。具有分块列数和分块行数的约束方式如下。当第一级分块宽度小于最小分块宽度的两倍时,可以不指示分块列数,并且可以推断分块列数的值等于1。所述指示可以使用_minus1语法元素,使得所指示的语法元素值可以为0,并且分块列数是语法元素的值加1。该方法还可以压缩指示数据。当第一级分块高度小于最小分块高度的两倍时,可以不指示分块列数,并且可以推断分块列数的值等于0。指示的语法元素值可以是0,并且分块行数可以是语法元素的值加1,以进一步压缩指示数据。通过对第一级分块进行划分产生的分块可以称为第二级分块。灵活分块结构可以仅限于第二级分块,因此不允许再对任何第二级分块进行划分。在其它示例中,可以以将第一级分块划分为第二级分块的类似方式对第二级分块进行进一步划分。

在一个示例中,灵活分块结构的指示可以如下:当图像包括多个分块时,信号(例如标志)可以用于由对应的分块组直接或间接参考的参数集中。所述标志可以表示对应的分块结构是均匀的分块结构还是非均匀的分块结构(例如,如本文所述的灵活分块结构)。该标志可以称为uniform_tile_structure_flag。当uniform_tile_structure_flag等于1时,指示HEVC风格的均匀分块结构,例如通过指示num_tile_columns_minus1和num_tile_rows_minus1表示一个等级的均匀分块。当uniform_tile_structure_flag等于0时,还可以指示以下信息。图像中的分块数可以通过语法元素num_tiles_minus2指示,表示图像中的分块数(NumTilesInPic)等于num_tiles_minus2+2。这样,在指示期间可以节约比特,因为默认情况下图像可以是分块。对于每个分块(不包括最后一个分块),指示该分块的第一个编码块(例如,CTU)和最后一个编码块的地址。编码块的地址可以是块在图像中的索引(例如,CTU在图像中的索引)。这些编码块的语法元素可以是tile_first_block_address[i]和tile_last_block_address[i]。这些语法元素可以译码为ue(v)或u(v)。当语法元素译码为u(v)时,用于表示每个语法元素的比特数为ceil(log2(图像中的最大编码块数))。可以不指示最后一个分块的第一个和最后一个编码块的地址,而是可以根据亮度样本中的图像大小和图像中所有其它分块的结合来推导这些地址。

在一个示例中,对于除最后一个分块外的每个分块,可以指示分块的第一个编码块的地址以及分块的宽度和高度,而不是指示分块的第一个编码块和最后一个编码块的地址。在另一个示例中,对于除最后一个分块外的每个分块,可以指示分块的左上点相对于图像的原点(例如,图像的左上点)的偏移以及分块的宽度和高度,而不是指示分块的第一个编码块和最后一个编码块的地址。在又一个示例中,对于除最后一个分块外的每个分块,可以指示以下信息,而不是指示分块的第一个编码块和最后一个编码块的地址。可以指示分块的宽度和高度。此外,可以不指示每个分块的位置。相反,可以指示一个标志来表示是将分块定位于紧靠前一个分块的右侧还是紧靠前一个分块的下方。如果分块只能位于前一个分块的右侧或只能位于前一个分块的下方,则可以不具有此标志。第一个分块的左上偏移可以总是设置为图像的原点/左上点(例如,x=0和y=0)。

为了提高指示效率,可以指示唯一分块大小(例如,宽度和高度)集合。可以通过包括每个分块大小的指示的循环中的索引来参考该唯一分块大小的列表。在一些示例中,从所指示的分块结构推导的分块位置和大小应约束分割,以确保任何分块之间没有间隙和重叠。

下列约束条件也可以适用。可以要求分块形状为矩形(例如,不是光栅扫描形状)。图像中分块的单元应覆盖图像,不能有间隙和重叠。当仅用一个核进行解码时,对于不在图像左边界的当前编码块(例如,CTU)进行译码,应在当前编码块之前对左相邻编码块进行解码。当仅用一个核进行解码时,对于不在图像上边界的当前编码块(例如,CTU)进行译码,应在当前编码块之前对上相邻编码块进行解码。当两个分块具有彼此相邻的分块索引时(例如,idx 3、idx 4),下列其中一个是正确的。两个分块共用垂直边界和/或当第一个分块的左上位置为(Xa,Ya)且大小为Wa和Ha(表示其宽度和高度)且当第二个分块的左上位置为(Xb,Yb),则Yb=Ya+Ha。

下列约束条件也可以适用。当一个分块具有多个左相邻分块时,该分块的高度应等于所有左相邻分块的高度之和。当一个分块具有多个右相邻分块时,该分块的高度应等于所有右相邻分块的高度之和。当一个分块具有多个上相邻分块时,该分块的宽度应等于所有上相邻分块的宽度之和。当一个分块具有多个下相邻分块时,该分块的高度应等于所有下相邻分块的高度之和。

下文是上述各方面的具体示例性实施例。CTB的光栅和分块扫描过程可以如下:列表ColWidth[i]表示以CTB为单位的第i个第一级分块列的宽度,其中,i的范围为0到num_level1_tile_columns_minus1(包括端值)。该列表ColWidth[i]的推导过程如下:

列表RowHeight[j]表示以CTB为单位的第j个分块行的高度,其中,j的范围为0到num_level1_tile_rows_minus1(包括端值)。该列表RowHeight[j]的推导过程如下:

列表colBd[i]表示以CTB为单位的第i个分块列边界的位置,其中,i的范围为0到num_level1_tile_columns_minus1+1(包括端值)。该列表colBd[i]的推导过程如下:

for(colBd[0]=0,i=0;i<=num_level1_tile_columns_minus1;i++)

colBd[i+1]=colBd[i]+ColWidth[i] (6-3)

列表rowBd[j]表示以CTB为单位的第j个分块行边界的位置,其中,j的范围为0到num_level1_tile_rows_minus1+1(包括端值)。该列表rowBd[j]的推导过程如下:

for(rowBd[0]=0,j=0;j<=num_level1_tile_rows_minus1;j++)

rowBd[j+1]=rowBd[j]+RowHeight[j] (6-4)

变量NumTilesInPic表示参考PPS的图像中的分块数量。列表TileColBd[i]、TileRowBd[i]、TileWidth[i]和TileHeight[i](i的取值范围为0到NumTilesInPic–1(包括端值))表示以CTB为单位的第i个分块列边界的位置、以CTB为单位的第i个分块行边界的位置、以CTB为单位的第i个分块列的宽度以及以CTB为单位的第i个分块行的高度,具体推导过程如下:

NumTilesInPic=tileIdx

列表CtbAddrRsToTs[ctbAddrRs]表示从图像的CTB光栅扫描中的CTB地址到分块扫描中的CTB地址的转换,其中,ctbAddrRs的范围为0到PicSizeInCtbsY–1(包括端值)。该列表CtbAddrRsToTs[ctbAddrRs]的推导过程如下:

列表CtbAddrTsToRs[ctbAddrTs]表示从分块扫描中的CTB地址到图像的CTB光栅扫描中的CTB地址的转换,其中,ctbAddrTs的范围为0到PicSizeInCtbsY–1(包括端值)。该列表CtbAddrTsToRs[ctbAddrTs]的推导过程如下:

for(ctbAddrRs=0;ctbAddrRs

CtbAddrTsToRs[CtbAddrRsToTs[ctbAddrRs]]=ctbAddrRs

列表TileId[ctbAddrTs]表示从分块扫描中的CTB地址到分块ID的转换,其中,ctbAddrTs的范围为0到PicSizeInCtbsY–1(包括端值)。该列表TileId[ctbAddrTs]的推导过程如下:

for(i=0,tileIdx=0;i<=NumTilesInPic;i++,tileIdx++)

for(y=TileRowBd[i];y

for(x=TileColBd[i];x

TileId[CtbAddrRsToTs[y*PicWidthInCtbsY+x]]=tileIdx

列表NumCtusInTile[tileIdx]表示从分块索引到分块中CTU的数量的转换,其中,tileIdx的范围为0到NumTilesInPic–1(包括端值)。该列表NumCtusInTile[tileIdx]的推导过程如下:

for(i=0,tileIdx=0;i

NumCtusInTile[tileIdx]=TileColWidth[tileIdx]*TileRowHeight[tileIdx]

示例性图像参数集RBSP语法如下:

示例性图像参数集RBSP语义如下:num_level1_tile_columns_minus1+1表示分割图像的第一级分块列的数量。num_level1_tile_columns_minus1的取值范围应为0到PicWidthInCtbsY–1(包括端值)。如果不具有num_level1_tile_columns_minus1,则推断num_level1_tile_columns_minus1的值等于0。num_level1_tile_rows_minus1+1表示分割图像的第一级分块行的数量。num_tile_rows_minus1的取值范围应为0到PicHeightInCtbsY–1(包括端值)。如果不具有num_level1_tile_rows_minus1,则推断num_level1_tile_rows_minus1的值等于0。设置变量NumLevel1Tiles等于(num_level1_tile_columns_minus1+1)*(num_level1_tile_rows_minus1+1)。当single_tile_in_pic_flag=0时,NumTilesInPic应大于1。设置uniform_level1_tile_spacing_flag等于1,表示第一级分块列边界和第一级分块行边界均匀分布在图像上。设置uniform_level1_tile_spacing_flag等于0,表示第一级分块列边界和第一级分块行边界不是均匀分布在图像上,而是使用语法元素level1_tile_column_width_minus1[i]和level1_tile_row_height_minus1[i]显式指示。如果不具有uniform_level1_tile_spacing_flag,则推断uniform_level1_tile_spacing_flag的值等于1。level1_tile_column_width_minus1[i]+1表示以CTB为单位的第i个第一级分块列的宽度。level1_tile_row_height_minus1[i]+1表示以CTB为单位的第i个第一级分块行的高度。level2_tile_present_flag表示将一个或多个第一级分块划分为多个分块。level2_tile_split_flag[i]+1表示第i个第一级分块划分为两个或多个分块。num_level2_tile_columns_minus1[i]+1表示对第i个分块进行分割的分块列的数量。num_level2_tile_columns_minus1[i]的取值范围应为0到ColWidth[i](包括端值)。如果不具有num_level2_tile_columns_minus1[i],则推断num_level2_tile_columns_minus1[i]的值等于0。num_level2_tile_rows_minus1[i]+1表示对第i个分块进行分割的分块行的数量。num_level2_tile_rows_minus1[i]的取值范围应为0到RowHeight[i](包括端值)。如果不具有num_level2_tile_rows_minus1[i],则推断num_level2_tile_rows_minus1[i]的值等于0。

通过调用CTB光栅和分块扫描转换过程推导以下变量:列表ColWidth[i]表示以CTB为单位的第i个第一级分块列的宽度,其中,i的范围为0到num_level1_tile_columns_minus1(包括端值);列表RowHeight[j]表示以CTB为单位的第j个第一级分块行的高度,其中,j的范围为0到num_level1_tile_rows_minus1(包括端值);变量NumTilesInPic表示参考PPS的图像中的分块数;列表TileWidth[i]表示以CTB为单位的第i个分块的宽度,其中,i的范围为0到NumTilesInPic(包括端值);列表TileHeight[i]表示以CTB为单位的第i个分块的高度,i的范围为0到NumTilesInPic(包括端值);列表TileColBd[i]表示以CTB为单位的第i个分块列边界的位置,其中,i的范围为0到NumTilesInPic(包括端值);列表TileRowBd[i]表示以CTB为单位的第i个分块行边界的位置,其中,j的范围为0到NumTilesInPic(包括端值);列表CtbAddrRsToTs[ctbAddrRs]表示从图像的CTB光栅扫描中的CTB地址到分块扫描中的CTB地址的转换,其中,ctbAddrRs的范围为0到PicSizeInCtbsY–1(包括端值);列表CtbAddrTsToRs[ctbAddrTs]表示从分块扫描中的CTB地址到图像的CTB光栅扫描中的CTB地址的转换,其中,ctbAddrTs的范围为0到PicSizeInCtbsY–1(包括端值);列表TileId[ctbAddrTs]表示从分块扫描中的CTB地址到分块ID的转换,其中,ctbAddrTs的范围为0到PicSizeInCtbsY–1(包括端值);列表NumCtusInTile[tileIdx]表示从分块索引到分块中CTU数量的转换,其中,tileIdx的范围为0到PicSizeInCtbsY–1(包括端值);列表FirstCtbAddrTs[tileIdx]表示从分块ID到分块中第一个CTB的分块扫描中的CTB地址的转换,其中,tileIdx的范围为0到NumTilesInPic–1(包括端值)。

分块组标头语义示例如下。tile_group_address表示分块组中的第一个分块的地址,其中,分块地址等于等式6-8指定的TileId[firstCtbAddrTs],其中,firstCtbAddrTs为分块组中第一个CTU的CTB的分块扫描中的CTB地址。tile_group_address的长度为Ceil(Log2(NumTilesInPic))个比特。tile_group_address的值的范围应为0到NumTilesInPic–1(包括端值),并且tile_group_address的值应不等于同一经译码图像中任何其它经译码分块组NAL单元的tile_group_address值。当不具有tile_group_address时,则推断tile_group_address的值等于0。

下文是上述各方面的第二具体示例性实施例。CTB光栅和分块扫描过程示例可以如下:变量NumTilesInPic表示参考PPS的图像中的分块数量。列表TileColBd[i]、TileRowBd[i]、TileWidth[i]和TileHeight[i](i的取值范围为0到NumTilesInPic–1(包括端值))表示以CTB为单位的第i个分块列边界的位置、以CTB为单位的第i个分块行边界的位置、以CTB为单位的第i个分块列的宽度以及以CTB为单位的第i个分块行的高度,具体推导过程如下:

示例性图像参数集RBSP语法如下:

示例性图像参数集RBSP语义如下:设置uniform_level2_tile_spacing_flag[i]等于1,表示第i个第一级分块的第二级分块列边界和第i个第一级分块的第二级分块行边界均匀分布在图像上。可以设置uniform_level2_tile_spacing_flag[i]等于0,表示第i个第一级分块的第二级分块列边界和第i个第一级分块的第二级分块行边界不是均匀分布在图像上,而是使用语法元素level2_tile_column_width_minus1[j]和level2_tile_row_height_minus1[j]显式指示。如果不具有uniform_level2_tile_spacing_flag[i],则推断uniform_level2_tile_spacing_flag[i]的值等于1。level2_tile_column_width_minus1[j]+1表示以CTB为单位的第i个第一级分块的第j个第二级分块列的宽度。level2_tile_row_height_minus1[i]+1表示以CTB为单位的第i个第一级分块的第j个第二级分块行的高度。

下文是上述各方面的第三具体示例性实施例。示例性图像参数集RBSP语法如下:

示例性图像参数集RBSP语义如下:码流一致性可以需要应用以下约束条件。值MinTileWidth表示最小分块宽度,应等于256个亮度样本。值MinTileHeight表示最小分块高度,应等于64个亮度样本。最小分块宽度和最小分块高度的值可以根据外形和等级定义而变化。变量Level1TilesMayBeFurtherSplit的推导过程如下:

level2_tile_present_flag表示将一个或多个分块划分为多个分块。如果不具有level2_tile_present_flag,则推断level2_tile_present_flag的值等于0。level2_tile_split_flag[i]+1表示第i个第一级分块划分为两个或多个分块。如果不具有level2_tile_split_flag[i],则推断level2_tile_split_flag[i]的值等于0。

下文是上述各方面的第四具体示例性实施例。可以指示每个分块的位置和大小。支持这种分块结构指示的语法可以如下表所示。tile_top_left_address[i]和tile_bottom_right_address[i]是图像中表示该分块覆盖的矩形区域的CTU索引。指示这些语法元素的比特数应足以表示图像中CTU的最大数量。

可以指示每个分块的位置和大小。支持这种分块结构指示的语法可以如下表所示。Tile_top_left_address[i]为分块中第一个CTU的CTU索引,所述索引按照图像的CTU光栅扫描顺序排列。分块宽度和分块高度表示分块的大小。当通过首先指示公共分块大小单元来指示这两个语法元素时,可以节省一些比特。

或者,指示可以如下:

在另一示例中,可以用以下方式指示每个分块大小。为了表示灵活分块结构,可以不指示每个分块的位置。相反,可以指示一个标志来表示是分块是否紧靠前一个分块的右侧或下方。如果分块只能位于当前分块的右侧或下方,则可以不具有此标志。

tile_x_offset[i]和tile_y_offset[i]的值可以通过以下顺序步骤推导。

设置tile_x_offset[0]和tile_y_offset[0]等于0。

设置maxWidth等于tile_width[0],maxHeight等于tile_height[0]。

设置runningWidth等于tile_width[0],设置runningHeight等于tile_height[0]。

设置lastNewRowHeight等于0。

TilePositionCannotBeInferred=false

如果i>0,则:

设置isRight为如下值:

如果runningWidth+tile_width[i]<=PictureWidth,则isRight==1

否则,isRight==0

设置isBelow为如下值:

如果runningHeight+tile_height[i]<=PictureHeight,则isBelow==1

否则,isBelow==0

如果isRight==1&&isBelow==1,则TilePositionCannotBeInferred=true

如果isRight==1&&isBelow==0,则:

right_tile_flag[i]=1

tile_x_offset[i]=runningWidth

tile_y_offset[i]=(runningWidth==maxWidth)?0:lastNewRowHeight

lastNewRowHeight=(runningWidth==maxWidth)?0:lastNewRowHeight

如果isRight==0&&isBelow==1,则:

right_tile_flag[i]=0

tile_y_offset[i]=runningHeight

tile_x_offset[i]=(runningHeight==maxHeight)?0:tile_x_offset[i–1]

lastNewRowHeight=(runningHeight==maxHeight&&runningWidth==maxWidth)?runningHeight:lastNewRowHeight

如果isRight==1&&isBelow==1&&right_tile_flag[i]==1,则:

tile_x_offset[i]=runningWidth

tile_y_offset[i]=(runningWidth==maxWidth)?0:lastNewRowHeight

lastNewRowHeight=(runningWidth==maxWidth)?0:lastNewRowHeight

否则(即isRight==1&&isBelow==1&&right_tile_flag[i]==0),则:

tile_y_offset[i]=runningHeight

tile_x_offset[i]=(runningHeight==maxHeight)?0:tile_x_offset[i–1]

lastNewRowHeight=(runningHeight==maxHeight&&runningWidth==maxWidth)?runningHeight:lastNewRowHeight

如果right_tile_flag[i]==1,则:

runningWidth=runningWidth+tile_width[i]

如果runningWidth>maxWidth,则设置maxWidth等于runningWidth

runningHeight等于tile_y_offset[i]+tile_height[i]

否则(即right_tile_flag[i]==0),则:

runningHeight=runningHeight+tile_height[i]

如果runningHeight>maxHeight,则设置maxHeight等于runningHeight

runningWidth等于tile_x_offset[i]+tile_width[i]

上述内容可以用伪码来描述:

下面是在伪码中推导最后一个分块的大小的实现方式。

图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、机制600和/或应用700,其可以采用码流500和/或根据灵活视频分块方案800分割的图像。译码模块914还可以实现本文描述的任何其它方法/机制。进一步地,译码模块914可以实现编解码系统200、编码器300和/或解码器400。例如,译码模块914可以将图像分割成第一级分块,并将第一级分块分割成第二级分块。译码模块914还可以指示支持数据以表示第一级分块和第二级分块的配置。译码模块914还支持使用这样的机制将不同分辨率的子图像组合成单个图像,如本文所述的各种使用情形。因此,译码模块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为指示灵活分块方案(例如灵活视频分块方案800)的配置的示例性方法1000的流程图。编码器(例如编解码系统200、编码器300和/或视频译码设备900)在执行方法100、机制600和/或支持应用700时可以使用方法1000。此外,可以使用方法1000生成码流500以发送给解码器,例如解码器400。

编码器接收到包括多个图像(image/picture)的视频序列并确定将该视频序列编码到码流中时,开始执行方法1000。在一个示例中,视频序列(因此也是图像)可以以多个分辨率进行编码。在步骤1001中,图像分割成多个第一级分块。在步骤1003中,所述第一级分块的子集分割成多个第二级分块。在一些示例中,所述子集之外的第一级分块包括第一分辨率的图像数据,第二级分块包括第二分辨率的图像数据,所述第二分辨率与所述第一分辨率不同。在一些示例中,每个第二级分块包括所述图像中的单个条带的图像数据。在一些示例中,第一级分块和第二级分块分配到一个或多个分块组中。可以约束对应分块组(例如,包括第二级分块)中的分块以覆盖图像的矩形部分。

在步骤1005中,将所述第一级分块和所述第二级分块编码到码流中。此外,将划分指示编码到码流中以表示所使用的灵活分块方案的配置。划分指示可以表示至少一个第一级分块被划分成多个第二级分块。在一些示例中,划分指示编码在图像参数集中作为二级分块划分标志。可以为被分割以创建第二级分块的每个第一级分块设置二级分块划分标志。在一些示例中,从宽度小于最小宽度阈值且高度小于最小高度阈值的第一级分块的码流中省略显示表示是否将第一级分块分割成第二级分块的数据。这是因为这些分块太小,无法进一步划分,因此可以从分块大小推断出没有进行划分。这种方法可以节省编码中的比特,从而提高编码效率。在一些示例中,可以通过对分割后的第一级分块的第二级分块行和第二级分块列进行编码来指示分块的配置。例如,可以将第二级分块行和第二级分块列编码在图像关联的图像参数集中。在一些示例中,可以通过对参数集中的第二级分块行和第二级分块列进行编码来指示分块的配置。第二级分块行和第二级分块列可以指示第二级分块相对于对应的第一级分块的配置。在一些方面中,可以从宽度小于最小宽度阈值的两倍且高度小于最小高度阈值的两倍的分割后的第一级分块的图像参数集中省略第二级分块行和第二级分块列。这是因为这些分块太小,无法进一步划分,因此可以从分块大小推断出第二级分块列和第二级分块行没有进行划分。这种方法可以节省编码中的比特,从而提高编码效率。

在步骤1007中,存储所述码流,所述码流用于根据请求发送到解码器。

图11为根据所指示的灵活分块方案(例如灵活视频分块方案800)对图像进行解码的示例性方法1100的流程图。解码器(例如编解码系统200、解码器400和/或视频译码设备900)在执行方法100、机制600和/或支持应用700时可以使用方法1100。此外,当从编码器(例如编码器300)接收码流500时,可以使用方法1100。

方法1100可以在解码器开始接收表示视频序列的经译码数据的码流时开始,例如作为方法1000的结果。码流可包括以多个分辨率译码的视频序列中的视频数据。在步骤1101,例如,从编码器或中间文件服务器接收码流。码流包括经编码视频序列,所述经编码视频序列包括分割成多个第一级分块的图像。第一级分块的子集进一步分割成多个第二级分块。在一些示例中,每个第二级分块可以包括图像中的单个条带的图像数据。在一些示例中,所述子集之外的第一级分块(未分割成第二级分块的第一级分块)包括第一分辨率的图像数据,第二级分块包括第二分辨率的图像数据,所述第二分辨率与所述第一分辨率不同。同样,在一些示例中,第一级分块和第二级分块可以分配到一个或多个分块组中,使得包括第二级分块的对应分块组中的分块受到约束以覆盖所述图像的矩形部分。

在步骤1103中,从码流中获取划分指示。所述划分指示表示所述第一级分块中的至少一个第一级分块划分成所述第二级分块。因此,划分指示可以指示用于对图像进行分割的分块方案的配置。在一些示例中,从二级分块划分标志中的图像参数集中获取划分指示。例如,可以为被分割以创建第二级分块的每个第一级分块设置二级分块划分标志。在一些示例中,从宽度小于最小宽度阈值且高度小于最小高度阈值的第一级分块的码流中省略划分指示和显示表示是否将第一级分块分割成第二级分块的其它数据。这是因为这些分块太小,无法进一步划分,因此可以从分块大小推断出没有进行划分。这种方法可以节省编码中的比特,从而提高编码效率。

在步骤1105中,例如,根据步骤1103中的划分指示,确定所述第一级分块的配置和所述第二级分块的配置。在一些示例中,可以使用码流中的其它信息来确定分块的配置。例如,可以从分割后的第一级分块的码流中获取第二级分块行和第二级分块列。可以在图像关联的图像参数集中获取第二级分块行和第二级分块列。可以根据第二级分块行和第二级分块列(例如,以及第一级分块的相似行数据和列数据)来确定第一级分块的配置和第二级分块的配置。在一些示例中,可以从宽度小于最小宽度阈值的两倍且高度小于最小高度阈值的两倍的分割后的第一级分块的图像参数集中省略第二级分块行和第二级分块列。这是因为这些分块太小,无法进一步划分,因此可以从分块大小推断出第二级分块列和第二级分块行没有进行划分。这种方法可以节省码流编码中的比特,从而提高编码效率。

在步骤1107中,根据第一级分块的配置和第二级分块的配置,对第一级分块和第二级分块进行解码,第一级分块的配置和第二级分块的配置是根据划分指示、分块行数据、分块列数据和/或本文中所述的其它配置数据确定的。在步骤1109中,可以根据经解码的第一级分块和第二级分块,生成重建视频序列进行显示。

图12为通过采用灵活分块方案(例如灵活视频分块方案800)对视频序列进行译码的示例系统1200的示意图。系统1200可以由编码器和解码器实现,例如编解码系统200、编码器300、解码器400和/或视频译码设备900。此外,当实现方法100、1000、1100、机制600和/或应用700时,可以使用系统1200。系统1200还可以将数据编码到码流中,例如码流500,并对这种码流进行解码以向用户显示。

系统1200包括视频编码器1202。视频编码器1202包括分割模块1201,用于将图像分割成多个第一级分块,并将第一级分块的子集分割成多个第二级分块。视频编码器1202还包括编码模块1205,用于将所述第一级分块和所述第二级分块编码到码流中,并将划分指示编码到码流中,所述划分指示表示第一级分块中的至少一个分块划分成第二级分块。视频编码器1202还包括存储模块1207,用于存储码流,所述码流用于发送到解码器。视频编码器1202还包括发送模块1209,用于向解码器发送码流。视频编码器1202还可用于执行方法1000中的任一步骤。

系统1200还包括视频解码器1210。视频解码器1210包括接收模块1211,用于接收码流,所述码流包括分割成多个第一级分块的图像,其中所述第一级分块的子集进一步分割成多个第二级分块。视频解码器1210还包括获取模块1213,用于从码流中获取划分指示,所述划分指示表示所述第一级分块中的至少一个分块划分成第二级分块。视频解码器1210还包括确定模块1215,用于根据所述划分指示,确定所述第一级分块的配置和所述第二级分块的配置。视频解码器1210还包括解码模块1217,用于根据所述第一级分块的配置和所述第二级分块的配置,对所述第一级分块和所述第二级分块进行解码。视频解码器1210还包括生成模块1219,用于根据经解码的第一级分块和第二级分块,生成重建视频序列进行显示。视频解码器1210还可用于执行方法1100中的任一步骤。

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

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

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

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

相关技术
  • 视频译码中的灵活分块指示
  • 视频译码中的灵活分块
技术分类

06120113205842