视频译码中的基于分块的寻址

文档序号:739783 发布日期:2021-04-20 浏览:16次 >En<

阅读说明:本技术 视频译码中的基于分块的寻址 (Block-based addressing in video coding ) 是由 王业奎 弗努·亨德里 陈建乐 于 2019-09-13 设计创作,主要内容包括:本发明公开了一种视频译码机制。所述机制包括:接收码流,其中,所述码流包括编码到多个条带中的图像数据;确定第一条带的左上分块标识符(identifier,ID)和右下分块ID;根据所述左上分块ID和所述右下分块ID,确定所述第一条带的边界;根据所述第一条带的所述边界对所述第一条带进行解码,以生成重建图像。(The invention discloses a video decoding mechanism. The mechanism comprises: receiving a code stream, wherein the code stream comprises image data encoded into a plurality of stripes; determining an upper left partition Identifier (ID) and a lower right partition ID of the first stripe; determining the boundary of the first stripe according to the upper left block ID and the lower right block ID; decoding the first slice according to the boundary of the first slice to generate a reconstructed image.)

视频译码中的基于分块的寻址

相关申请案的交叉参考

本专利申请案要求王业奎等人于2018年9月14日递交的申请号为62/731,696、发明名称为“视频译码中的条带和分块(Slicing and Tiling In Video Coding)”的美国临时专利申请案的权益,其内容以引用的方式并入本文本中。

技术领域

本发明通常涉及视频译码,并且具体涉及将图像分割成条带、分块和编码树单元(coding tree unit,CTU),以支持视频编码中的增强压缩。

背景技术

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

发明内容

在一个实施例中,本发明包括一种在解码器中实现的方法。所述方法包括:所述解码器的接收器接收码流,其中,所述码流包括编码到多个条带中的图像数据。所述方法还包括:所述解码器的处理器确定与第一条带相关的左上分块标识符(identifier,ID)和右下分块ID。所述方法还包括:所述处理器根据所述左上分块ID和所述右下分块ID,确定所述第一条带的边界。所述方法还包括:所述处理器根据所述第一条带的所述边界对所述第一条带进行解码,以生成重建图像。在某些系统中,条带从帧的左侧延伸到帧的右侧。这些条带根据相对于帧的位置来指示(signal)。本发明将分块与条带联系起来,并使用这种关系更高效地指示条带数据。例如,条带是矩形的,由条带的左上分块和右下分块指示。根据分块ID指示条带边界,可以推断出各种信息。例如,条带中的某些分块ID可以根据条带中的左上分块和右下分块推断出,因此从码流中省略这些分块ID。此外,根据分块ID而不是条带在帧中的相对位置来指示条带边界可以支持一种寻址方案,即在指示子帧时不需要重写条带头。因此,在一些示例中,码流可以压缩,从而节省编码器和解码器侧的内存资源以及网络通信资源。此外,用于对所述码流进行编码的处理资源可以保存在编码器和/或解码器侧。而且,根据分块ID而不是条带中的相对位置来寻址条带可以支持并行处理,从而提高解码速度。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述多个条带都是矩形,所述第一条带具有左侧壁和右侧壁,所述图像数据与具有左侧壁和右侧壁的图像帧相关,所述第一条带的所述左侧壁不与所述图像帧的所述左侧壁重合,所述第一条带的所述右侧壁不与所述图像帧的所述右侧壁重合,或其组合。在本发明中,仅要求条带是矩形的,因此条带不需要延伸穿过整个帧。这样,条带能够覆盖所述帧中间的感兴趣区域。这样,在某些情况下,不需要对整个帧进行解码。例如,发送和解码帧中间的条带,而不发送和/或解码帧两侧的条带。这使得在发送期间从码流中省略帧的部分,可以减少网络资源使用率,减少解码器侧的处理资源使用率,以及减少解码器侧的内存使用率。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述第一条带包括多个分块,所述多个分块包括左上分块和右下分块,所述多个分块中每个分块关联一个分块ID,所述码流省略除所述多个分块中所述左上分块和所述右下分块之外的每个分块的分块ID。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,还包括:根据所述左上分块ID和所述右下分块ID,确定所述第一条带中所有所述多个分块的分块ID。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述分块中的每个分块包括一个或多个CTU,所述CTU包括经编码图像数据,所述CTU的地址根据相应分块的分块ID来分配。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,对所述多个条带进行解码包括:根据所述左上分块ID和所述右下分块ID,确定所述第一条带中所有所述CTU的地址。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,从所述码流中省略所述一个或多个CTU的地址。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,还包括:所述处理器将所述重建图像作为重建视频序列的一部分转发给显示器。

在一个实施例中,本发明包括一种在编码器中实现的方法。所述方法包括:所述编码器的处理器将图像分割成多个条带。所述方法还包括:所述处理器将所述多个条带中的每个条带分割成多个分块。所述方法还包括:所述处理器确定与第一条带相关的左上分块ID和右下分块ID。所述方法还包括:所述处理器将所述左上分块ID和所述右下分块ID编码到码流中,表示所述第一条带的边界。所述方法还包括:所述处理器将所述第一条带编码到所述码流中,以对所述图像进行编码。在某些系统中,条带从帧的左侧延伸到帧的右侧。这些条带根据相对于帧的位置来指示(signal)。本发明将分块与条带联系起来,并使用这种关系更高效地指示条带数据。例如,条带是矩形的,由条带的左上分块和右下分块指示。根据分块ID指示条带边界,可以推断出各种信息。例如,条带中的某些分块ID可以通过条带中的第一个分块和最后一个分块推断出。此外,根据分块ID而不是所述条带在帧中的相对位置来指示条带边界可以支持一种寻址方案,即在指示子帧时不需要重写条带头。因此,在一些示例中,码流可以压缩,从而节省编码器和解码器侧的内存资源以及网络通信资源。此外,用于对所述码流进行编码的处理资源可以保存在编码器和/或解码器侧。此外,根据分块ID而不是条带中的相对位置来寻址条带可以支持并行处理,从而提高解码速度。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述多个条带都是矩形,所述第一条带具有左侧壁和右侧壁,所述图像与左侧壁和右侧壁相关,所述第一条带的所述左侧壁不与所述图像的所述左侧壁重合,所述第一条带的所述右侧壁不与所述图像的所述右侧壁重合,或其组合。在本发明中,仅要求条带是矩形的,因此条带不需要延伸穿过整个帧。这样,条带能够覆盖所述帧中间的感兴趣区域。这样,在某些情况下,不需要对整个帧进行解码。例如,发送和解码帧中间的条带,而不发送和/或解码帧两侧的条带。这使得在传输期间从码流中省略帧的部分,可以减少网络资源使用率,减少解码器侧的处理资源使用率,以及减少解码器侧的内存使用率。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述第一条带包括左上分块和右下分块,所述多个分块中每个分块关联一个分块ID,对所述多个分块进行编码还包括从所述码流省略所述第一条带中除所述左上分块和所述右下分块之外的每个分块的分块ID。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,对所述码流进行解码以支持根据所述左上分块ID和所述右下分块ID,通过在解码器侧推断的方式确定所述第一条带中所有所述多个分块的分块ID。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,还包括:所述处理器在对所述分块进行编码之前,将每个分块分割成一个或多个CTU,其中,所述CTU包括所述图像的部分;所述处理器根据对应的分块ID为所述CTU分配地址。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,对所述码流进行编码以支持根据所述左上分块ID和所述右下分块ID,通过在解码器侧推断的方式确定所述第一条带中所有所述CTU的地址。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,对所述多个分块进行编码还包括从所述码流中省略所述一个或多个CTU的地址。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,还包括:所述解码器的发送器发送包括所述左上分块ID和所述右下分块ID的所述码流,以支持部分根据所述第一条带的所述边界,在解码器侧重建作为重建视频序列的一部分的所述图像。

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

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

在一个实施例中,本发明包括一种解码器,所述解码器包括:接收模块,用于接收码流,其中,所述码流包括编码到多个条带中的图像数据。所述解码器还包括:分块模块,用于确定与第一条带相关的左上分块ID和右下分块ID。所述解码器还包括:边界确定模块,用于根据所述左上分块ID和所述右下分块ID,确定所述第一条带的边界。所述解码器还包括:解码模块,用于根据所述第一条带的所述边界对所述第一条带进行解码,以生成重建图像。

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

在一个实施例中,本发明包括一种编码器,所述编码器包括:分割模块,用于将图像分割成多个条带,并将所述多个条带中的每个条带分割成多个分块。所述编码器还包括:确定模块,用于确定与第一条带相关的左上分块ID和右下分块ID。所述编码器还包括:编码模块,用于将所述左上分块ID和所述右下分块ID编码到码流中,以表示所述第一条带的边界;将所述第一条带编码到所述码流中,以对所述图像进行编码。

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

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

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

附图说明

为了更透彻地理解本发明,现参阅结合附图和

具体实施方式

而描述的以下简要说明,其中的相同附图标记表示相同部分。

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

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

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

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

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

图6为分割用于译码的示例性图像的示意图。

图7为具有由分块位置限定的条带边界的示例性图像的示意图。

图8为示例性视频译码设备的示意图。

图9为根据由分块位置限定的条带边界将图像编码到码流中的示例性方法的流程图。

图10为根据由分块位置限定的条带边界从码流中解码图像的示例性方法的流程图。

图11为根据由分块位置限定的条带边界将图像视频序列编码到码流中的示例性系统的流程图。

具体实施方式

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

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

为了保证经编码视频能够被准确解码,按照对应的视频编码标准对视频进行编码和解码。这些视频编码标准包括国际电信联盟电信标准化部门(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(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)已开始开发一种称为通用视频译码(VersatileVideo Coding,VVC)的视频译码标准。VVC包括在工作草案(Working Draft,WD)JVET-K1001-v4和JVET-K1002-v1中。

为了对视频图像进行译码,首先对图像进行分割,并将各个分割部分译码到码流中。图像分割方案有多种。例如,图像可以被分割成常规条带、非独立条带、分块(tile)和/或根据波前并行处理(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大小匹配。每个分块可以由一个处理器/核处理,用于对相邻分块进行解码的处理单元之间的帧间预测所采用的处理器间/核间通信可以限于传输共享的条带头(当相邻分块在同一条带中时)以及共享与环路滤波相关的重建样本和元数据。当条带中包括多个分块时,可以在条带头中指示除条带中的第一入口点(entry point)偏移之外的每个分块的入口点字节偏移。对于每个条带和分块,至少应满足以下条件之一:(1)条带中的所有经译码树块属于同一分块;(2)分块中的所有经译码树块属于同一条带。

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

分块也可以包括运动约束分块集。运动约束分块集(motion constrained tileset,MCTS)是一种分块集,设计目的是限制相关运动矢量指向MCTS内部的整样本位置和指向仅需要MCTS内部的整样本位置进行插值的分数样本位置。此外,不允许将根据MCTS外部的块推导出的运动矢量候选用于时间运动矢量预测。这样,MCTS可以在不需要MCTS之外的分块的情况下独立解码。时间MCTS补充增强信息(supplemental enhancementinformation,SEI)消息可以用于表示码流中存在MCTS并指示所述MCTS。MCTS SEI消息提供补充信息(作为SEI消息语义的一部分),该补充信息可用于MCTS子码流提取,以生成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),并更新条带头。

上述分块和条带机制具有很高的灵活性,从而支持MTU大小匹配和并行处理。然而,随着电信网络的速度和可靠性的不断提高,MTU大小匹配变得越来越不重要。例如,MTU大小匹配的主要用途之一是支持显示错误隐藏图像。错误隐藏图像是指在数据丢失时从传输的经编码图像生成的解码图像。这种数据丢失可以包括经编码图像的一些条带的丢失或经编码图像使用的参考图像中的错误(例如,参考图像也是错误隐藏图像)。错误隐藏图像可以通过显示正确的条带并估计错误条带,例如通过从视频序列中的前一张图像复制对应于错误条带的条带产生。错误隐藏图像可以在每个条带都包括在一个NAL单元中的情况下产生。然而,如果条带被分散到多个NAL单元(例如,没有MTU大小匹配),丢失一个NAL单元可能会损坏多个条带。错误隐藏图像的生成在现代网络环境中越来越不重要,原因是:丢包很少发生,而且现代网络速度允许系统完全省略带有错误的图像而不会造成严重的视频卡顿,因为错误图像和错误较少图像之间的延迟通常较小。此外,估计错误隐藏图像的质量是一个复杂的过程,因此简单地省略错误图像可能更好。因此,视频会议和视频电话等视频会话应用,甚至广播应用通常都放弃使用隐藏错误图像。

由于错误隐藏图像的用处不大,所以MTU大小匹配的用处也不大。此外,在分割时继续支持MTU大小匹配范式可能会不必要地使译码系统变得复杂,而且会使用本来可以省略以提高译码效率的不必要的比特。另外,一些分块方案(例如,MCTS)可以显示图像的子图像。为了显示子图像,显示感兴趣区域中的条带,而省略其它条带。感兴趣区域可以开始于除图像的左上部分之外的位置,并且因此可以具有从图像的起点偏移可变值的地址。为了正确地显示子图像,可以使用拼接器重写感兴趣区域的一个或多个条带头,以计算此偏移。不需要这种条带头重写的条带和分块方案是有益的。另外,不可以将分块边界视为图像边界,除非分块边界与图像边界并置。然而,在某些情况下,由于边界的填充以及放宽了与指向参考图像中边界外的样本的运动矢量相关的约束条件,将分块边界视为图像边界可以提高译码效率。此外,HEVC可以在每个CTU的经编码数据末尾处使用名为end_of_slice_flag的标志来表示是否已到达条带的末尾。出于相同的目的,AVC在每个宏块(macroblock,MB)的经编码数据末尾处使用这个标志。但是,当最后一个CTU/MB通过其它机制已知时,没有必要对标志进行译码,产生了比特浪费。本发明提供了用于解决视频编码领域中的这些问题和其它问题的机制。

本文公开了各种机制,以提高译码效率并减少与上面讨论的条带和分块方案相关的处理开销。在一个示例中,要求条带包括整数个分块。此外,要求条带是矩形的(包括正方形),但可能不需要跨越图像的整个宽度延伸。此外,可以为分块分配分块标识符(identifier,ID),这些标识符在图像中是唯一的,并且按光栅顺序递增。这允许根据分块ID而不是根据在图像内的相对位置来指示条带的边界。例如,第一条带的边界可以根据左上分块ID和右下分块ID来指示。然后,解码器可以根据左上分块ID和右下分块ID推断出条带中的完整的分块列表和分块ID。这样有助于一个数据集同时指示(signal)分块ID列表和条带边界。此外,每个分块可以包括一个或多个CTU。根据包括CTU的分块的分块ID为每个CTU分配地址。在一些示例中,可以在码流中指示CTU的地址。在其它示例中,也可以在解码器侧推断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 sets,PPS)512、多个条带头514和图像数据520。SPS 510包括码流500中包括的视频序列中所有图像共用的序列数据。这些数据可以包括图像大小、位深度、译码工具参数、码率限制条件等。PPS 512包括每个图像专用的参数。因此,视频序列中的每个图像可以有一个PPS 512。PPS 512可以表示对应图像中的条带可用的译码工具、量化参数、偏移、图像特定编码工具参数(例如,滤波器控制参数)等。条带头514包括图像中每个条带特定的参数。因此,视频序列中的每个条带可以有一个条带头514。条带头514可以包括条带类型信息、图像顺序编号(picture order count,POC)、参考图像列表、预测权重、分块入口点、去块效应滤波器参数等。

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

每个条带521可以是由左上角分块523和右下角分块523限定的矩形。与其它译码系统不同,条带521可能不遍历图像的整个宽度。条带521为解码器可以单独显示的最小单元。因此,将条带521分割成更小的单元有助于以足够粒度来显示图像的期望区域的方式生成子图像。例如,在虚拟现实(virtual reality,VR)上下文中,图像可以包括整个可视数据范围,但是用户只能观看头戴式显示器上的子图像。较小的条带521允许单独指示这些子图像。条带521通常也在单独的VCL NAL单元533中进行指示。此外,条带521可以不支持根据其它条带521进行预测,这样有助于每个条带521独立于其它条带521进行编码。

条带521划分为整数个分块523。分块523是由水平和垂直边界创建的条带521的分割部分。分块523可以按照光栅扫描顺序进行译码,可以或可以不支持根据其它分块523进行预测,具体根据示例确定。每个分块523可以在图像中具有唯一的分块ID 524。分块ID524是数字标识符,可以用于区分一个分块523与另一个分块523。分块ID 524可采用以光栅扫描顺序数字增加的分块索引的值。光栅扫描顺序是指从左到右、从上到下。分块ID 524也可以采用其它数值。然而,分块ID 524应总是以光栅扫描顺序增加以支持本文讨论的计算。例如,可以根据条带521的左上角分块523的分块ID 524和条带521的右下角分块523的分块ID 524来确定条带521的边界。当分块ID 524与分块索引的值不同时,可以在码流500中,例如在PPS 512中指示转换机制。此外,每个分块523可与入口点偏移525相关。入口点偏移525表示与分块523相关的经译码数据的第一比特的位置。第一分块523的入口点偏移525可以为0,并且其它分块523的入口点偏移525都可以等于前面分块523中的经译码数据的比特数。因此,可以推断出入口点偏移525的数量比分块523的数量少1。

分块523进一步划分为CTU 527。CTU 527是分块523的子部分,分块523能够通过编码树结构进一步细分为可由编码器编码并由解码器解码的编码块。CTU 527都与CTU地址529相关。CTU地址529表示对应的CTU 527在码流500中的位置。具体地,CTU地址529可以表示对应的CTU 527在VCL NAL单元533中的位置。在一些示例中,CTU 527的CTU地址529可以(例如)在PPS 512中显式指示。在其它示例中,可以由解码器推导CTU地址529。例如,可以根据包括对应CTU 527的分块523的分块ID 524来分配CTU地址529。在这种情况下,解码器可以根据左上分块523和右下角分块523的分块ID 524确定条带521中的分块523。然后,解码器可以使用条带521中确定的分块523来确定条带521中的CTU 527的数量。此外,解码器可以使用已知的分块ID 524和CTU的数量527来确定CTU地址529。此外,由于解码器知道CTU527的数量,可以省略表示每个CTU 527是否是VCL NAL单元533中的最后一个CTU 527的标志。这是因为解码器可以通过知道VCL NAL单元533中包括的条带521中的CTU 527的数量来确定哪个CTU 527是VCL NAL单元533中的最后一个CTU 527。然而,在一些示例中,填充位可以放置在分块523中的最后一个CTU 527之后,以便帮助区分分块523。可以看到,根据分块ID 524来指示条带521的边界可以有助于解码器推断大量数据,然后可以从码流500中省略这些数据,以提高译码效率。

码流500置于VCL NAL单元533和非VCL NAL单元531中。NAL单元是译码数据单元,其大小可设置为单个数据包的载荷,以便通过网络进行发送。VCL NAL单元533是包括经译码视频数据的NAL单元。例如,每个VCL NAL单元533可包括一个数据条带521,所述数据条带521包括对应的分块523、CTU 527和编码块。非VCL NAL单元531是包括支持语法但不包括经译码视频数据的NAL单元。例如,非VCL NAL单元531可以包括SPS 510、PPS 512、条带头514等。因此,解码器在离散VCL NAL单元533和非VCL NAL单元531中接收码流500。在流媒体应用中,解码器不用等待接收整个码流500,就可以解码当前视频数据。因此,分块ID 524、入口点偏移525和CTU地址529有助于解码器正确定位VCL NAL单元533中的视频数据,用于快速解码、并行处理和其它视频显示机制。因此,计算分块ID524、入口点偏移525和/或CTU地址529允许实现有效的解码和显示机制,同时减小码流500的大小并因此提高译码效率。

图6为分割用于译码的示例性图像600的示意图。例如,图像600可以由编解码系统200、编码器300和/或解码器400等编码在码流500中以及从码流500中解码。此外,可以分割图像600以实现方法100中的编码和解码。

图像600可以分割成条带621、条带623和CTU 627,这些条带和CTU可以分别基本上类似于条带521、条带523和CTU 527。在图6中,条带621用粗线表示,通过交替的白色背景和散列以图形的方式区分各条带621。分块623用虚线表示。位于条带621的边界上的分块623的边界显示为粗虚线,而不位于条带621的边界上的分块623的边界显示为细虚线。除由分块623的边界或条带621的边界覆盖的CTU 627的边界之外,CTU 627的边界显示为细实线。在该示例中,图像600包括9个条带621、24个分块623和216个CTU 627。

如图所示,条带621是具有边界的矩形,这些边界可以由包括在内的分块623限定。条带621可以不跨越图像600的整个宽度。分块623可以根据行和列在条带621中生成。然后,CTU 627可以从分块623中分割出来,产生图像600的分割部分,这些分割部分可以细分成编码块,从而根据帧间预测和/或帧内预测进行译码。

采用上述方法,可以改进视频译码系统。例如,条带被设计成使得包括在条带中的CTU可能不只是按照图像的CTU光栅扫描顺序的图像的CTU集。但条带被定义为覆盖图像的矩形区域的CTU集。此外,每个条带在自己的NAL单元中。此外,可以通过在条带头中以条带中左上角CTU和右下角CTU的光栅扫描顺序指示CTU地址来指示包括在条带中的CTU的地址。此外,条带被设计成包括并且仅包括覆盖图像的矩形区域的完整分块集。每个条带在自己的NAL单元中。这样,具有多个条带的目的可以是将覆盖图像的矩形区域的分块集放入NAL单元中。在某些情况下,图像中具有一个或多个条带,并且这些条带中的每个条带可以包括覆盖矩形区域的完整分块集。图像中可能还有另一个条带覆盖图像的其余部分。该条带覆盖的区域可以是具有孔的矩形区域,该孔被其它条带覆盖。例如,出于感兴趣区域的目的,图像可以包括两个条带,其中一个条带包括覆盖感兴趣区域的完整分块集,而另一个条带包括图像的剩余分块。

可以通过条带中包括的分块的分块ID显式或隐式地指示条带中包括的CTU的地址。为了高效地进行指示,在一些示例中,可以仅指示左上分块和右下分块的分块ID。为了进一步提高指示效率,可以指示表示所述条带是否包括一个分块的标志,如果包括,则仅指示一个分块ID。在其它情况下,指示包括在条带中的所有分块ID。在一些示例中,分块ID总是与图像中的分块索引相同。用于显式指示条带头中的分块ID以用于推导条带中包括的CTU的地址的长度(以比特为单位),可以根据图像中的分块数量推导(例如,图像中分块数量的对数2的单元格)。图像中的分块数量可以在参数集中显式指示,也可以根据参数集中指示的分块配置推导。在一些示例中,可以在参数集中指示用于推导条带中包括的CTU的地址的条带头中显式指示分块ID的长度(以比特为单位)。在一些示例中,推导入口点数量并且不在条带头中指示入口点数量,所述入口点数量等于条带中的分块数量减1。在另一个示例中,避免指示(signal)每个CTU表示该CTU是否为条带的末尾的标志。

在一些示例中,条带和分块设计成使得从码流中提取运动约束分块集(motionconstrained tile set,MCTS)等分块集时不需要重写条带头,以创建一致性子码流。例如,可以针对指示了分块配置的参数集中的每个分块显式地指示分块ID。分块ID在图像中都是唯一的。分块ID在图像中可能是不连续的。然而,分块ID应当沿着图像的分块光栅扫描的方向以递增顺序(例如,单调递增)来组织。由此,图像中条带的解码顺序可以限制在左上分块的条带ID的递增值范围中。当没有显式地指示分块ID并推断分块ID不与分块索引相同时,以下内容可用于在条带头中指示分块ID值。可以指示表示所述条带是否是图像的第一个条带的标志。当表示所述条带是图像的第一个条带的标志时,可以不指示该条带的左上条带的条带ID,因为条带ID可以推断为具有最低条带索引的条带(例如,条带索引0—假设条带索引从0开始)。

在另一个示例中,图像可以包含零个、一个或多个MCTS。MCTS可以包括一个或多个分块。当条带中的分块是MCTS的一部分时,对MCTS进行约束,使得条带中的所有分块都是同一个MCTS的一部分。可以进一步约束条带,使得包括MCTS的分块的所有图像的分块配置与MCTS中的分块的位置和大小是相同的。在一些示例中,对条带进行约束,使得MCTS只包括在条带中。有两种结果。在这种情况下,每个MCTS在一个单独的NAL单元中。此外,每个MCTS都为矩形。

MCTS的指示可以如下:可以在条带头中指示标志,以表示所述条带是否包括具有对应条带的接入单元中的MCTS的NAL单元。在SEI消息中指示MCTS的其它支持信息(例如,由提取MCTS产生的子码流的档次、层级和级别信息)。或者,可以在SEI消息中指示MCTS的标志指示和支持信息。为了能够指示将MCTS边界视为图像边界,例如在指示分块配置的参数集中,指示表示是否将所有分块边界视为图像边界的语法元素。此外,例如当其它语法元素不表示将所有分块边界视为与图像边界相同时,可以在条带头中指示表示是否将条带的所有条带边界视为与图像边界相同的语法元素。

仅当语法不以其它方式表示将所有分块边界视为与图像边界相同时,可以指示是否可跨每个分块边界应用环内滤波操作的语法元素。在这种情况下,将分块边界视为图像边界说明,除其它方面外,可以不跨每个分块边界应用环内滤波操作。在其它示例中,与是否将所有分块边界视为图像边界的指示无关,指示表示是否可跨每个分块边界应用环内滤波操作的语法元素。在这种情况下,将分块边界视为图像边界表示仍然可以跨每个分块边界应用环内滤波操作。

在一些示例中,将MCTS边界视为图像边界。此外,还可以使条带头中表示是否将条带边界视为与图像边界相同的语法元素作为表示所述条带是否包括MCTS的标志的条件。在某些情况下,当条带头中的标志表示条带包括MCTS时,可以推断表示将MCTS边界视为图像边界的标志的值。

如果表示将分块或条带的边界视为图像边界,则以下内容适用。在时域亮度运动矢量预测的推导过程中,该过程使用的右图像边界位置和下图像边界位置分别用pic_height_in_luma_samples–1和pic_width_in_luma_samples–1表示,分别用分块或条带的右边界位置和下边界位置(以亮度样本为单位)替换。在亮度样本插值过程中,该过程中使用的左、右、上和下图像边界位置分别用0、pic_height_in_luma_samples–1、0、pic_width_in_luma_samples–1,分别用分块或条带的左、右、上和下边界位置(以亮度样本为单位)替换。在色度样本插值过程中,该过程中使用的左侧、右侧、上方和下方图像边界位置(分别用0、pic_height_in_luma_samples/SubWidthC–1、0、pic_width_in_luma_samples/SubWidthC–1表示)分别替换为分块或条带的左边界、右边界、上边界和下边界位置(以色度样本为单位)。

前述机制可以如下实现。定义条带为覆盖图像矩形区域的整数个分块,且这些分块只包括在一个NAL单元中。定义条带头为经编码条带的一部分,所述经编码条带部分包括与条带中表示的所有分块相关的数据元素。定义分块为图像中特定分块列和特定分块行内的CTU的矩形区域。定义分块列为CTU的矩形区域,所述矩形区域的高度与图像的高度相等,宽度通过图像参数集中的语法元素表示。定义分块行为CTU的矩形区域,所述矩形区域的高度通过图像参数集中的语法元素表示,宽度与图像的宽度相等。定义分块扫描为对分割图像的CTU的特定有序排列,其中CTU在分块中的CTU光栅扫描中连续排列,而图像中的分块在图像的分块光栅扫描中连续排列。

本章节详述如何将图像分割成条带和分块。图像划分为条带和分块。条带是覆盖图像的矩形区域的分块序列。分块是覆盖图像的矩形区域的CTU序列。

当图像采用三个独立的颜色平面(separate_color_plane_flag=1)编码时,一个条带只包括一个颜色分量的CTU,该颜色分量由对应的color_plane_id值标识,图像的每个颜色分量阵列包括具有相同color_plane_id值的条带。图像内具有不同color_plane_id值的经编码条带可以在以下约束条件下相互交织:对于每个color_plane_id值,具有该color_plane_id值的经编码条带的NAL单元应按照每个经编码条带的NAL单元的第一个CTU的分块扫描顺序递增CTU地址的顺序排列。应注意,当separate_colour_plane_flag等于0时,图像的每个CTU正好包括在一个条带中。当separate_color_plane_flag等于1时,颜色分量的每个CTU正好包括在一个条带中(例如,图像的每个CTU的信息正好在三个条带中,这三个条带的color_plane_id值不同)。

本说明书的处理元件的以下划分形成空间或逐分量分割:将每个图像划分为分量;将每个分量划分为CTB;将每个图像划分为分块列;将每个图像划分为分块行;将每个分块列划分为分块;将每个分块行划分为分块;将每个分块划分为CTU;将每个图像划分为条带;将每个条带划分为分块;将每个条带划分为CTU;将每个CTU划分为CTB;将每个CTB划分为编码块,但当分量宽度不是CTB大小的整数倍时,右侧分量边界处的CTB不完整,当分量高度不是CTB大小的整数倍时,下方分量边界处的CTB不完整;将每个CTU划分为编码单元,但当图像宽度以亮度样本计算不是亮度CTB大小的整数倍时,右侧图像边界处的CTU不完全,当图像高度以亮度样本计算不是亮度CTB大小的整数倍时,下方图像边界处的CTU不完全;将每个编码单元划分为变换单元;将每个编码单元划分为编码块;将每个编码块划分为变换块;将每个变换单元划分为变换块。

相邻块可用度的推导过程的输入是:当前块的左上样本相对于当前图像的左上亮度样本的亮度位置(xCurr,yCurr)以及相邻块相对于当前图像的左上亮度样本覆盖的亮度位置(xNbY,yNbY)。该过程的输出是覆盖位置(xNbY,yNbY)的相邻块的可用度,表示为availableN。相邻块可用度availableN的推导方式如下:如果以下一个或多个条件为真,则availableN设置为假。包括相邻块的条带的top_left_tile_id与包括当前块的条带的top_left_tile_id的值不同,或者相邻块包括在与当前块不同的分块中。

CTB光栅扫描过程和分块扫描过程可以如下:列表ColWidth[i]表示以CTB为单位的第i个分块列的宽度,其中,i的范围为0到num_tile_columns_minus1(包括端值)。该列表ColWidth[i]的推导方式如下:

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

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

for(ColBd[0]=0,i=0;i<=num_tile_columns_minus1;i++)

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

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

for(RowBd[0]=0,j=0;j<=num_tile_rows_minus1;j++)

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

列表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<PicSizeInCtbsY;ctbAddrRs++)(6-6)

CtbAddrTsToRs[CtbAddrRsToTs[ctbAddrRs]]=ctbAddrRs

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

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

NumTilesInPic tileId值集的列表TileIdToIdx[tileId]表示从分块ID到分块索引的转换,列表FirstCtbAddrTs[tileIdx]表示从分块ID到分块的第一个CTB的分块扫描中的CTB地址的转换,其中,tileIdx的范围为0到NumTilesInPic–1(包括端值)。列表TileIdToIdx[tileId]和列表FirstCtbAddrTs[tileIdx]的推导方式如下:

ColumnWidthInLumaSamples[i]的值表示以亮度样本为单位的第i个分块列的宽度,并设置为等于ColWidth[i]<<CtbLog2SizeY,其中,i的范围为0到num_tile_columns_minus1(包括端值)。RowHeightInLumaSamples[j]的值表示以亮度样本为单位的第j个分块行的高度,并设置为等于RowHeight[j]<<CtbLog2SizeY,其中,j的范围为0到num_tile_rows_minus1(包括端值)。

图像参数集RBSP语法如下:

表1

条带头语法变更如下:

表2

slice_data()语法如下:

表3

图像参数集RBSP语义如下:single_tile_in_pic_flag设置为等于1,表示每个图像中只有一个分块参考PPS。single_tile_in_pic_flag设置为等于0,表示每个图像中有多个分块参考PPS。码流一致性可以要求single_tile_in_pic_flag的值对于在编码视频序列(coded video sequence,CVS)内激活的所有PPS应该相同。num_tile_columns_minus1+1表示分割图像的分块列的数量。num_tile_columns_minus1的取值范围应为0到PicWidthInCtbsY–1(包括端值)。如果不存在num_tile_columns_minus1,则推断num_tile_columns_minus1的值等于0。num_tile_rows_minus1+1表示分割图像的分块行的数量。num_tile_rows_minus1的取值范围应为0到PicHeightInCtbsY–1(包括端值)。如果不存在num_tile_rows_minus1,则推断num_tile_rows_minus1的值等于0。变量NumTilesInPic设置为等于(num_tile_columns_minus1+1)*(num_tile_rows_minus1+1)。

当single_tile_in_pic_flag=0时,NumTilesInPic应大于0。tile_id_len_minus1+1表示用于表示PPS中(如果存在)的语法元素tile_id_val[i][j]的比特数,和参考PPS的条带头中(如果存在)的语法元素top_left_tile_id和bottom_right_tile_id的比特数。tile_id_len_minus1的取值范围应为Ceil(Log2(NumTilesInPic)到15(包括端值)。explicit_tile_id_flag设置为等于1,表示显式地指示每个分块的分块ID。explicit_tile_id_flag设置为等于0,表示不显式地指示分块ID。tile_id_val[i][j]表示第i个分块列和第j个分块行中分块的分块ID。tile_id_val[i][j]的长度为(tile_id_len_minus1+1)个位。

对于0到num_tile_columns_minus1范围内(包括端值)的任意整数m和0到num_tile_rows_minus1范围内(包括端值)的任意整数n,当i不等于m或者j不等于n时,tile_id_val[i][j]不等于tile_id_val[m][n]。当j*(num_tile_columns_minus1+1)+i小于n*(num_tile_columns_minus1+1)+m时,tile_id_val[i][j]小于tile_id_val[m][n]。uniform_tile_spacing_flag设置为等于1,表示分块列边界和分块行边界均匀分布在图像上。uniform_tile_spacing_flag设置为等于0,表示分块列边界和分块行边界不是均匀分布在图像上,而是使用语法元素tile_column_width_minus1[i]and tile_row_height_minus1[i]显式指示。如果不存在uniform_tile_spacing_flag,则推断uniform_tile_spacing_flag的值等于1。tile_column_width_minus1[i]+1表示以CTB为单位的第i个分块列的宽度。tile_row_height_minus1[i]+1表示以CTB为单位的第i个分块行的高度。

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

ColumnWidthInLumaSamples[i]的值和RowHeightInLumaSamples[j]的值均应大于0,其中,i的范围为0到num_tile_columns_minus1(包括端值),j的范围为0到num_tile_rows_minus1(包括端值)。tile_boundary_treated_as_picture_boundary_flag设置为等于1,表示在解码过程中将每个分块边界视为与参考PPS的图像的图像边界相同。tile_boundary_treated_as_picture_boundary_flag设置为等于0,表示在解码过程中可以将每个分块边界视为与参考PPS的图像的图像边界相同,也可以不相同。如果不存在tile_boundary_treated_as_picture_boundary_flag,则推断tile_boundary_treated_as_picture_boundary_flag的值等于1。loop_filter_across_tiles_enabled_flag设置为等于1,表示在参考PPS的图像中可以跨分块边界执行环内滤波操作。loop_filter_across_tiles_enabled_flag设置为等于0,表示在参考PPS的图像中不跨分块边界执行环内滤波操作。环内滤波操作包括去块效应滤波操作、样本自适应偏移滤波操作以及自适应环路滤波操作。如果不存在loop_filter_across_tiles_enabled_flag,则推断loop_filter_across_tiles_enabled_flag的值等于0。

条带头语义如下:如果存在slice_pic_parameter_set_id,条带头语法元素slice_pic_parameter_set_id的值在经译码图像的所有条带头中应相同。slice_pic_parameter_set_id表示当前使用的PPS的pps_pic_parameter_set_id的值。slice_pic_parameter_set_id的取值范围为0到63(包括端值)。single_tile_in_slice_flag设置为等于1,表示每个条带中只有一个分块。single_picture_in_pic_flag设置为等于0,表示每个条带中有多个分块。top_left_tile_id表示位于条带左上角的分块的分块ID。top_left_tile_id的长度是tile_id_len_minus1+1个比特。top_left_tile_id的值不应等于同一经译码图像的任何其它经译码条带的NAL单元的top_left_tile_id的值。当图像中有多个条带时,图像中条带的解码顺序应以递增的top_left_tile_id值为准。bottom_right_tile_id表示位于条带右下角的分块的分块ID。bottom_right_tile_id的长度是tile_id_len_minus1+1个比特。如果不存在bottom_right_tile_id,则推断bottom_right_tile_id的值等于top_left_tile_id。

变量NumTileRowsInSlice、NumTileColumnsInSlice和NumTilesInSlice的推导方式如下:

deltaTileIdx=TileIdToIdx[bottom_right_tile_id]–TileIdToIdx[top_left_tile_id]

NumTileRowsInSlice=(deltaTileIdx/(num_tile_columns_minus1+1))+1(7-25)

NumTileColumnsInSlice=(deltaTileIdx%(num_tile_columns_minus1+1))+1

NumTilesInSlice=NumTileRowsInSlice*NumTileColumnsInSlice

slice_type表示根据表4的条带的译码类型。

表4

slice_type slice_type的名称
0 B(B条带)
1 P(P条带)
2 I(I条带)

当nal_unit_type的值在TBD范围(包括端值)内时,例如,图像是帧内随机接入图像(IntraRandomAccessPicture,IRAP)图像,则slice_type应等于2。log2_diff_ctu_max_bt_size表示可以使用二叉树划分进行划分的译码块的亮度CTB大小与最大亮度大小(宽度或高度)之间的差值。log2_diff_ctu_max_bt_size的取值范围应为0到CtbLog2SizeY–MinCbLog2SizeY(包括端值)。如果log2_diff_ctu_max_bt_size不存在,则推断log2_diff_ctu_max_bt_size的值等于2。

变量MinQtLog2SizeY、MaxBtLog2SizeY、MinBtLog2SizeY、MaxTtLog2SizeY、MinTtLog2SizeY、MaxBtSizeY、MinBtSizeY、MaxTtSizeY、MinTtSizeY和MaxMttDepth的推导方式如下:

MinQtLog2SizeY=(slice_type==I)?MinQtLog2SizeIntraY:MinQtLog2SizeInterY

(7-26)

MaxBtLog2SizeY=CtbLog2SizeY–log2_diff_ctu_max_bt_size (7-27)

MinBtLog2SizeY=MinCbLog2SizeY

(7-28)

MaxTtLog2SizeY=(slice_type==I)?5:6 (7-29)

MinTtLog2SizeY=MinCbLog2SizeY (7-30)

MinQtSizeY=1<<MinQtLog2SizeY (7-31)

MaxBtSizeY=1<<MaxBtLog2SizeY (7-32)

MinBtSizeY=1<<MinBtLog2SizeY (7-33)

MaxTtSizeY=1<<MaxTtLog2SizeY (7-34)

MinTtSizeY=1<<MinTtLog2SizeY (7-35)

MaxMttDepth=(slice_type==I)?max_mtt_hierarchy_depth_intra_slices:max_mtt_hierarchy_depth_inter_slices (7-36)

dep_quent_enabled_flag设置为等于0,表示禁用相关量化。dep_quent_enabled_flag设置为等于1,表示启用相关量化。sign_data_hiding_enabled_flag设置为等于0,表示禁用符号位隐藏。sign_data_hiding_enabled_flag设置为等于1,表示启用符号位隐藏。如果不存在sign_data_hiding_enabled_flag,则推断sign_data_hiding_enabled_flag的值等于0。slice_boundary_treated_as_pic_boundary_flag设置为等于1,表示在解码过程中将条带的每个条带边界视为与图像边界相同。Slice_boundary_treated_as_pic_boundary_flag=0表示在解码过程中可以将每个分块边界视为与图像边界相同,也可以不相同。如果不存在slice_boundary_treated_as_pic_boundary_flag,则推断slice_boundary_treated_as_pic_boundary_flag的值等于1。offset_len_minus1+1表示以比特为单位的语法元素entry_point_offset_minus1[i]的长度。offset_len_minus1的值应在范围0至31内(包括0和31)。entry_point_offset_minus1[i]+1表示以字节为单位的第i个入口点偏移,该第i个入口点偏移通过offset_len_minus1+1个比特表示。紧跟条带头的条带数据由NumTilesInSlice子集组成,子集索引值的取值范围为0到NumTilesInSlice–1(包括端值)。条带数据的第一个字节是字节0。如果存在,出现在经编码条带的NAL单元的条带数据部分中的预防混淆字节会被计为条带数据的一部分,以达到子集识别的目的。

子集0包括经编码条带段数据的字节0到字节entry_point_offset_minus1[0](包括端值),子集k包括经编码条带数据的字节firstByte[k]到字节lastByte[k](包括端值),其中,k的范围为1到NumTilesInSlice–2(包括端值),字节firstByte[k]和字节lastByte[k]定义如下:

lastByte[k]=firstByte[k]+entry_point_offset_minus1[k](7-38)

最后一个子集(其子集索引等于NumTilesInSlice–1)包括经编码条带数据的剩余字节。每个子集应包括条带中同一个分块内的所有CTU的所有编码比特。

通用条带数据语义如下:end_of_tile_one_bit应等于1。对于每个分块,变量LeftBoundaryPos、TopBoundaryPos、RightBoundaryPos和BotBoundaryPos的推导方式如下:如果tile_boundary_treated_as_pic_boundary_flag等于真,则:

tileColIdx=CurrTileIdx/(num_tile_columns_minus1+1)

(7-39)

tileRowIdx=CurrTileIdx%(num_tile_columns_minus1+1)

(7-40)

LeftBoundaryPos=ColBd[tileColIdx]<<CtbLog2SizeY

(7-41)

RightBoundaryPos=((ColBd[tileColIdx]+ColWidth[tileColIdx])<<CtbLog2SizeY)–1

(7-42)

TopBoundaryPos=RowBd[tileRowIdx]<<CtbLog2SizeY

(7-43)

BotBoundaryPos=((RowBd[tileRowIdx]+RowHeight[tileRowIdx])<<CtbLog2SizeY)–1

(7-44)

否则,如果slice_boundary_treated_as_pic_boundary_flag等于真(true),则

sliceFirstTileColIdx=TileIdToIdx[top_left_tile_id]/(num_tile_columns_minus1+1)

(7-45)

sliceFirstTileRowIdx=TileIdToIdx[top_left_tile_id]%(num_tile_columns_minus1+1)

(7-46)

sliceLastTileColIdx=TileIdToIdx[bottom_right_tile_id]/(num_tile_columns_minus1+1)

(7-47)

sliceLastTileRowIdx=TileIdToIdx[bottom_right_tile_id]%(num_tile_columns_minus1+1)

(7-48)

LeftBoundaryPos=ColBd[sliceFirstTileColIdx]<<CtbLog2SizeY (7-49)

RightBoundaryPos=((ColBd[sliceLastTileColIdx]+ColWidth[sliceLastTileColIdx])<<CtbLog2SizeY)–1

(7-50)

TopBoundaryPos=RowBd[sliceFirstTileRowIdx]<<CtbLog2SizeY (7-51)

BotBoundaryPos=((RowBd[sliceLastTileRowIdx]+RowHeight[sliceLastTileRowIdx])<<CtbLog2SizeY)–1

(7-52)

否则(slice_boundary_treated_as_pic_boundary_flag等于假(False),则

LeftBoundaryPos=0

(7-53)

RightBoundaryPos=pic_width_in_luma_samples–1 (7-54)

TopBoundaryPos=0

(7-55)

BotBoundaryPos=pic_height_in_luma_samples–1 (7-56)

时域亮度运动矢量预测的推导方式如下:如果yCb>>CtbLog2SizeY等于yColBr>>CtbLog2SizeY,yColBr小于pic_height_in_luma_samples,xColBr小于pic_width_in_luma_samples,则:

变量colCb表示覆盖ColPic表示的并置图像内的((xColBr>>3)<<3,(yColBr>>3)<<3)给出的修改位置的亮度编码块。亮度位置(xColCb,yColCb)设置为等于colCb表示的并置亮度样本编码块的左上样本相对于ColPic表示的并置图像的左上亮度样本的位置。将currCb、colCb、(xColCb,yColCb)、refIdxLX以及设置为0的控制参数controlParaFlag作为输入,调用并置运动矢量的推导过程,将输出赋值给mvLXCol和availableFlagLXCol。如果yCb>>CtbLog2SizeY等于yColBr>>CtbLog2SizeY,yColBr小于或等于BotBoundaryPos,xColBr小于或等于RightBoundaryPos,则:变量colCb表示覆盖ColPic表示的并置图像内的((xColBr>>3)<<3,(yColBr>>3)<<3)给出的修改位置的亮度编码块。亮度位置(xColCb,yColCb)设置为等于colCb表示的并置亮度样本编码块的左上样本相对于ColPic表示的并置图像的左上亮度样本的位置。将currCb、colCb、(xColCb,yColCb)、refIdxLX以及设置为0的控制参数controlParaFlag作为输入,调用并置运动矢量的推导过程,将输出赋值给mvLXCol和availableFlagLXCol。

在一些示例中,时域亮度运动矢量预测的推导方式如下:如果yCb>>CtbLog2SizeY等于yColBr>>CtbLog2SizeY,yColBr小于pic_height_in_luma_samples,xColBr小于pic_width_in_luma_samples变量colCb表示覆盖ColPic表示的并置图像内的((xColBr>>3)<<3,(yColBr>>3)<<3)给出的修改位置的亮度编码块。亮度位置(xColCb,yColCb)设置为等于colCb表示的并置亮度样本编码块的左上样本相对于ColPic表示的并置图像的左上亮度样本的位置。将currCb、colCb、(xColCb,yColCb)、refIdxLX以及设置为0的控制参数controlParaFlag作为输入,调用并置运动矢量的推导过程,将输出赋值给mvLXCol和availableFlagLXCol。如果yCb>>CtbLog2SizeY等于yColBr>>CtbLog2SizeY,则xColCtr=Min(xColCtr,RightBoundaryPos),yColCtr=Min(yColCtr,BotBoundaryPos)。变量colCb表示覆盖ColPic表示的并置图像内的((xColBr>>3)<<3,(yColBr>>3)<<3)给出的修改位置的亮度编码块。亮度位置(xColCb,yColCb)设置为等于colCb表示的并置亮度样本编码块的左上样本相对于ColPic表示的并置图像的左上亮度样本的位置。将currCb、colCb、(xColCb,yColCb)、refIdxLX以及设置为0的控制参数controlParaFlag作为输入,调用并置运动矢量的推导过程,将输出赋值给mvLXCol和availableFlagLXCol。

色度样本插值过程如下:该过程的输入为:整样本单元中的亮度位置(xIntL,yIntL);分数样本单元中的亮度位置(xFracL,yFracL);亮度参考样本阵列refPicLXL。该过程的输出是预测亮度样本值predSampleLXL。变量shift1、shift2和shift3的推导方式如下:变量shift1设置为等于Min(4,BitDepthY–8),变量shift2设置为等于6,变量shift3设置为等于Max(2,14–BitDepthY)。色度样本预测值predSampleLXL的推导方式如下:如果xFracL和yFracL都等于0,则predSampleLXL的值的推导方式如下:

predSampleLXL=refPicLXL[xIntL][yIntL]<<shift3(8-228)

否则,如果xFracL不等于0且yFracL等于0,则predSampleLXL的值如下推导:

predSampleLXL=

(fL[xFracL,0]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL–3)][yIntL]+

fL[xFracL][1]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL–2)][yIntL]+

fL[xFracL][2]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL–1)][yIntL]+

fL[xFracL][3]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL)][yIntL]+

fL[xFracL][4]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL+1)][yIntL]+

(8-228)

fL[xFracL][5]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL+2)][yIntL]+

fL[xFracL][6]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL+3)][yIntL]+

fL[xFracL][7]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL+4)][yIntL])>>shift1

否则,如果xFracL等于0且yFracL不等于0,则predSampleLXL的值如下推导:

predSampleLXL=

(fL[yFracL,0]*refPicLXL[xIntL][Clip3(TopBoundaryPos,BotBoundaryPos,yIntL–3)]+

fL[yFracL][1]*refPicLXL[xIntL][Clip3(TopBoundaryPos,BotBoundaryPos,yIntL–2)]+

fL[yFracL][2]*refPicLXL[xIntL][Clip3(TopBoundaryPos,BotBoundaryPos,yIntL–1)]+

fL[yFracL][3]*refPicLXL[xIntL][Clip3(TopBoundaryPos,BotBoundaryPos,yIntL)]+

fL[yFracL][4]*refPicLXL[xIntL][Clip3(TopBoundaryPos,BotBoundaryPos,yIntL+1)]+

(8-228)

fL[yFracL][5]*refPicLXL[xIntL][Clip3(TopBoundaryPos,BotBoundaryPos,yIntL+2)]+

fL[yFracL][6]*refPicLXL[xIntL][Clip3(TopBoundaryPos,BotBoundaryPos,yIntL+3)]+

fL[yFracL][7]*refPicLXL[xIntL][Clip3(TopBoundaryPos,BotBoundaryPos,yIntL+4)])>>shift1

否则,如果xFracL不等于0且yFracL不等于0,则predSampleLXL的值如下推导。样本阵列temp[n]如下推导,其中,n=0..7:

yPosL=Clip3(TopBoundaryPos,BotBoundaryPos,yIntL+n–3)(8-228)

temp[n]=

(fL[xFracL,0]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL–3)][yPosL]+

fL[xFracL][1]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL–2)][yPosL]+

fL[xFracL][2]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL–1)][yPosL]+

fL[xFracL][3]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL)][yPosL]+

fL[xFracL][4]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL+1)][yPosL]+(8-228)

fL[xFracL][5]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL+2)][yPosL]+

fL[xFracL][6]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL+3)][yPosL]+

fL[xFracL][7]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL+4)][yPosL])>>shift1

色度样本预测值predSampleLXL的推导方式如下:

表5

色度样本插值过程如下:该过程的输入为:整样本单元中的色度位置(xIntC,yIntC);第八个分数样本单元中的色度位置(xFracC,yFracC);色度参考样本阵列refPicLXC。该过程的输出是色度样本预测值predSampleLXC。变量shift1、shift2、shift3、picWC和picHC的推导方式如下:变量shift1设置为等于Min(4,BitDepthC–8),变量shift2设置为等于6,变量shift3设置为等于Max(2,14–BitDepthC)。变量lPos、rPos、tPos和bPos设置如下:

lPos=LeftBoundaryPos/SubWidthC

(8-228)

rPos=(RightBoundaryPos+1)/SubWidthC

(8-228)

tPos=TopBoundaryPos/SubHeightC

(8-228)

bPos=(BotBoundaryPos+1)/SubHeightC

(8-228)

色度样本预测值predSampleLXC的推导方式如下:如果xFracC和yFracC都等于0,则predSampleLXC的值的推导方式如下:

predSampleLXC=refPicLXC[xIntC][yIntC]<<shift3(8-228)

否则,如果xFracC不等于0且yFracC等于0,则predSampleLXC的值如下推导:

否则,如果xFracC等于0且yFracC不等于0,则predSampleLXC的值如下推导:

否则,如果xFracC不等于0且yFracC不等于0,则predSampleLXC的值如下推导。样本阵列temp[n]的推导方式如下,其中,n=0..3:

色度样本预测值predSampleLXC的推导方式如下:

表6

条带数据的上下文自适应二进制算术编码(Context-Based Adaptive BinaryArithmetic Coding,CABAC)解析过程如下:在开始解析CTU语法时调用初始化过程,CTU是分块中的第一个CTU。注意:由于条带数据的每个起点都是分块的起点,因此该语句也涵盖了条带数据的起点。

在另一个示例中,CTB光栅扫描过程和分块扫描过程如下:列表ColWidth[i]表示以CTB为单位的第i个分块列的宽度,其中,i的范围为0到num_tile_columns_minus1(包括端值)。该列表ColWidth[i]的推导方式如下:

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

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

for(ColBd[0]=0,i=0;i<=num_tile_columns_minus1;i++)

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

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

for(RowBd[0]=0,j=0;j<=num_tile_rows_minus1;j++)RowBd[j+1]=RowBd[j]+RowHeight[j](6-4)

列表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<PicSizeInCtbsY;ctbAddrRs++)(6-6)

CtbAddrTsToRs[CtbAddrRsToTs[ctbAddrRs]]=ctbAddrRs

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

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

NumTilesInPic tileId值集的列表TileIdToIdx[tileId]表示从分块ID到分块索引的转换,列表FirstCtbAddrTs[tileIdx]表示从分块ID到分块的第一个CTB的分块扫描中的CTB地址的转换,其中,tileIdx的范围为0到NumTilesInPic–1(包括端值)。列表TileIdToIdx[tileId]和列表FirstCtbAddrTs[tileIdx]的推导方式如下:

ColumnWidthInLumaSamples[i]的值表示以亮度样本为单位的第i个分块列的宽度,并设置为等于ColWidth[i]<<CtbLog2SizeY,其中,i的范围为0到num_tile_columns_minus1(包括端值)。RowHeightInLumaSamples[j]的值表示以亮度样本为单位的第j个分块行的高度,并设置为等于RowHeight[j]<<CtbLog2SizeY,其中,j的范围为0到num_tile_rows_minus1(包括端值)。

图像参数集RBSP语法如下:

表7

条带头语法如下:

表8

条带头语义如下:如果存在slice_pic_parameter_set_id,条带头语法元素slice_pic_parameter_set_id的值在经译码图像的所有条带头中应相同。slice_pic_parameter_set_id表示当前使用的PPS的pps_pic_parameter_set_id的值。slice_pic_parameter_set_id的取值范围为0到63(包括端值)。first_slice_in_pic_flag设置为等于1,表示该条带是图像中按解码顺序排列的第一个条带。first_slice_in_pic_flag设置为等于0,表示该条带不是图像中按解码顺序排列的第一个条带。single_tile_in_slice_flag设置为等于1,表示条带中只有一个分块。single_picture_in_pic_flag=0表示条带中有多个分块。top_left_tile_id表示位于条带左上角的分块的分块ID。top_left_tile_id的长度为Ceil(Log2((num_tile_rows_minus1+1)*(num_tile_columns_minus1+1)))个比特。top_left_tile_id的值不应等于同一经译码图像的任何其它经译码条带的NAL单元的top_left_tile_id的值。如果不存在top_left_tile_id,则推断top_left_tile_id的值等于0。当图像中有多个条带时,图像中条带的解码顺序应以递增的top_left_tile_id值为准。bottom_right_tile_id表示位于条带右下角的分块的分块ID。bottom_right_tile_id的长度位Ceil(Log2((num_tile_rows_minus1+1)*

(num_tile_columns_minus1+1)))个比特。如果不存在bottom_right_tile_id,则推断bottom_right_tile_id的值等于top_left_tile_id。变量NumTileRowsInSlice、NumTileColumnsInSlice和NumTilesInSlice的推导方式如下:

deltaTileIdx=TileIdToIdx[bottom_right_tile_id]–TileIdToIdx[top_left_tile_id]

NumTileRowsInSlice=(deltaTileIdx/(num_tile_columns_minus1+1))+1(7-25)

NumTileColumnsInSlice=(deltaTileIdx%(num_tile_columns_minus1+1))+1

NumTilesInSlice=NumTileRowsInSlice*NumTileColumnsInSlice

all_tiles_mcts_flag设置为等于1,表示条带中的所有分块都是MCTS的一部分,MCTS只包括当前接入单元的条带中的分块,并且将MCTS边界(与条带的条带边界并置)视为与图像边界相同。all_tiles_mcts_flag设置为等于0,表示all_tiles_mcts_flag等于1表示的上述内容可能适用或可能不适用。slice_boundary_treated_as_pic_boundary_flag设置为等于1,表示在解码过程中将条带的每个条带边界视为与图像边界相同。slice_boudnary_treated_as_pic_boundary_flag设置为等于0,表示在解码过程中可以将每个分块边界视为与图像边界相同,也可以不相同。如果不存在slice_boundary_treated_as_pic_boundary_flag,则推断slice_boundary_treated_as_pic_boundary_flag的值等于1。每个子集应包括条带中同一个分块内的所有CTU的所有编码比特。

图7为具有由分块位置限定的条带边界的示例性图像700的示意图。例如,图像700可用于实现图像600。此外,图像700可以由编解码系统200、编码器300和/或解码器400等编码在码流500中以及从码流500中解码。此外,图像700可以分割以实现方法100提供的编码和解码。

图像700包括多个条带,这些条带包括第一条带721,第一条带721可以实质上类似于条带521和/或621。其它条带可以类似于第一条带721,但是为了清楚讨论,未示出。第一条带721包括多个分块723,这些分块723用对应的分块ID 724指定,分块723和分块ID 724分别实质上类似于分块523和分块ID 524。分块723分别包括由对应的CTU地址729指定的一个或多个CTU 727,CTU 727和CTU地址729可以分别实质上类似于CTU 527和CTU地址529。所述多个条带都是矩形,但可能不会从图像的左侧壁一直延伸到图像的右侧壁。例如,第一条带721的左侧壁不与图像700帧的左侧壁重合,第一条带721的右侧壁不与图像700帧的右侧壁重合。

如图所示,第一条带721为矩形,并且包括整数个分块723(例如,没有部分的/分数的分块723)。分块723包括位于第一条带721的左上角的左上分块723a和位于第一条带721的左下角的右下分块723b。如上所述,分块ID 724以光栅顺序递增排列。光栅顺序在图像700上从左到右、从上到下。此外,分块ID 724在图像700上是唯一的。因此,第一条带721的边界可以通过在码流中指示左上分块723a和右下分块723b来唯一地标识。这对于指示第一条带721相对于图像700的坐标的边界具有若干好处。例如,当整个图像700没有发送给解码器时,解码器不需要改变与第一条带721相关的寻址方式。这发生在包括第一条带721的感兴趣区域发送给解码器进行显示并且感兴趣区域不位于图像700的左上角(例如,第一条带721在编码器和解码器的相对位置不同)的情况下。

此外,第一条带721中的所有分块723的分块ID 724可以根据左上分块723和右下分块723b的分块ID 724确定。例如,可以在条带头中使用top_left_tile_id和bottom_right_tile_id以包括左上分块723和右下分块723b的分块ID 724。然后,解码器可以根据上面的等式7-25,根据左上分块723和右下分块723b确定分块723的数量。在将分块ID 724设置为分块723的索引的情况下,可以根据确定的第一条带721中的分块数量来确定分块ID724。当分块ID724使用一些其它值集合时,可以指示TileIdToIdx值以在分块索引和分块ID724之间转换以支持如上面等式6-9中进行的确定。

此外,CTU 727可以根据分块ID 724寻址。因此,可以为每个分块723中的每个CTU727确定表示为ctbAddrInTs或ctbAddrInRs的CTU地址729,例如,通过采用等式6-5和表3所述的第一CTU地址729(表示为FirstCtbAddrTs)和对应的分块ID 724(表示为CurrTileIdx)。因此,可以在解码器侧根据左上分块723a和右下分块723b的分块ID 724确定第一条带721的边界和位置、第一条带721的分块ID 724和第一条带721的CTU地址729。因此,可以从码流中省略第一条带721的分块ID 724和/或第一条带721的CTU地址729,以便提高压缩和译码效率。

图8为示例性视频译码设备800的示意图。视频译码设备800适用于实现本文所述的所公开示例/实施例。视频译码设备800包括下行端口820、上行端口850,和/或收发单元(Tx/Rx)810,其中,所述收发单元包括用于通过网络在上游和/或下游进行数据通信的发送器和/或接收器。视频译码设备800还包括:处理器830,包括用于处理数据的逻辑单元和/或中央处理单元(central processing unit,CPU);和用于存储数据的存储器832。视频译码设备800还可以包括与上行端口850和/或下行端口820耦合的电组件、光电(optical-to-electrical,OE)组件、电光(electrical-to-optical,EO)组件,和/或无线通信组件,用于通过电通信网络、光通信网络或无线通信网络进行数据通信。视频译码设备800还可以包括输入和/或输出(input/output,I/O)设备860,用于与用户进行数据通信。I/O设备860可以包括输出设备,例如显示视频数据的显示器、输出音频数据的扬声器等。I/O设备860还可以包括键盘、鼠标、轨迹球等输入设备和/或与上述输出设备进行交互的对应接口。

处理器830由硬件和软件实现。处理器830可以实现为一个或多个CPU芯片、一个或多个核(例如,作为多核处理器)、一个或多个现场可编程门阵列(field-programmablegate array,FPGA)、一个或多个专用集成电路(application specific integratedcircuit,ASIC)以及一个或多个数字信号处理器(digital signal processor,DSP)。处理器830与下行端口820、Tx/Rx 810、上行端口850和存储器832通信。处理器830包括译码模块814。译码模块814实现本文描述的公开实施例,例如方法100、方法900和/或方法1000,它们可以采用码流500、图像600和/或图像700。译码模块814还可以实现本文描述的任何其它方法/机制。此外,译码模块814可以实现编解码系统200、编码器300和/或解码器400。例如,译码模块814可以将图像分割成条带,条带分割成分块,分块分割成CTU,CTU分割成块,并在充当编码器时对块进行编码。此外,译码模块814可以根据分块ID和位置来指示图像条带的边界,有助于推断各种条带、分块和CTU数据,从而从码流中省略这些条带、分块和CTU数据以提高译码效率。当译码模块814作为解码器时,可以根据条带中的左上条带和右下条带重建图像,并推断条带位置、条带中的条带ID和CTU地址,从而提高译码效率。因此,译码模块814使视频译码设备800在分割和译码视频数据时提供其它功能和/或译码效率。因此,译码模块814改进了视频译码设备800的功能,并解决了视频译码领域特有的问题。此外,译码模块814影响了视频译码设备800到不同状态的转换。或者,编码模块814可以实现为存储在存储器832中并由处理器830执行的指令(例如实现为存储在非瞬时性介质中的计算机程序产品)。

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

图9为根据由分块位置限定的条带边界将图像600和/或700等图像编码到码流500等码流中的示例性方法900的流程图。方法900可以由编解码系统200、编码器300和/或视频译码设备800等编码器在执行方法100时执行。

方法900可以开始于:编码器接收包括多个图像的视频序列,并根据用户输入等确定将所述视频序列编码到码流中。所述视频序列在编码之前被分割成图像(picture/image)/帧以进一步分割。在步骤901中,将图像分割成多个条带。将条带分割成多个分块。将分块分割成多个CTU,其中,所述多个CTU包括图像的部分。进一步将CTU分割成编码块。如上所述,所述多个条带都是矩形。所述图像具有左侧壁和右侧壁。此外,所述多个条带中的第一条带也具有左侧壁和右侧壁。第一条带可以不完全延伸穿过图像。例如,第一条带的左侧壁可以不与图像的左侧壁重合。又如,第一条带的右侧壁可以不与图像的右侧壁重合。又如,第一条带的左侧壁和第一条带的右侧壁都不与图像的左侧壁和图像的右侧壁重合。

在步骤903中,将分块ID分配给分块。也根据分块ID将CTU地址分配给CTU。例如,多个分块中的每个分块可以与分块ID相关/分配有分块ID。此外,可以根据包括/对应于CTU的分块的分块ID为每个CTU分配每个CTU地址。

由于第一条带是矩形,因此第一条带包括左上分块和右下分块。在步骤905中,确定第一条带的左上分块ID和右下分块ID。在步骤907中,将所述左上分块ID和所述右下分块ID编码到码流(例如,条带头)中,表示所述第一条带的边界。该方法可以用于将图像编码到码流中以支持根据所述左上分块ID和所述右下分块ID,通过在解码器侧推断的方式确定所述第一条带中所有所述多个分块的分块ID。

在步骤909中,将所述多个分块编码到所述码流中以对所述图像进行编码。例如,将CTU中的编码块编码为预测值和变换残差值。在一些示例中,当对多个分块进行编码时,可以从码流中省略第一条带中除左上分块和右下分块之外的每个分块的分块ID。在一些示例中,对所述多个分块进行编码还包括从所述码流中省略所述一个或多个CTU的地址。因此,对所述码流进行编码以支持根据所述左上分块ID和所述右下分块ID,通过在解码器侧推断的方式确定所述第一条带中的所有分块和CTU的地址。然后,将码流发送给解码器。码流包括左上分块ID和右下分块ID,支持部分根据所述第一条带的所述边界,在解码器侧重建作为重建视频序列的一部分的所述图像。

图10为根据由分块位置限定的条带边界从码流500等码流中解码图像600和/或700等图像的示例性方法1000的流程图。方法1000可以由编解码系统200、解码器400和/或视频译码设备800等解码器在执行方法100时执行。

方法1000可以开始于:解码器开始接收码流(例如方法900的结果),其中,所述码流包括表示视频序列的经编码图像数据。在步骤1001中,在解码器侧接收码流。具体地,所述码流包括编码到多个条带中的图像数据。将条带分割成多个分块。将分块分割成多个CTU。将CTU分割成多个编码块。如上所述,所述多个条带都是矩形。图像数据与具有左侧壁和右侧壁的图像帧相关。此外,所述多个条带中的第一条带也具有左侧壁和右侧壁。第一条带可以不完全延伸穿过图像帧。例如,第一条带的左侧壁可以不与图像帧的左侧壁重合。又如,第一条带的右侧壁可以不与图像帧的右侧壁重合。又如,第一条带的左侧壁和第一条带的右侧壁分别不与图像帧的左侧壁和图像帧的右侧壁重合。

在步骤1003中,从与第一条带相关的条带头等中确定与第一条带相关的左上分块ID和右下分块ID。在步骤1005中,根据所述左上分块ID和所述右下分块ID,确定所述第一条带的边界。

第一条带可以包括多个分块,所述多个分块包括左上分块和右下分块。此外,每个分块都与分块ID相关。码流可以省略多个分块中除左上分块和右下分块之外的每个分块的分块ID。因此,在步骤1007中,根据左上分块ID和右下分块ID确定第一条带中所有多个分块的分块ID。此外,每个分块可以包括一个或多个CTU,所述一个或多个CTU包括经编码图像数据。CTU的地址可以根据对应分块的分块ID进行分配。在一些示例中,可以从码流中省略一个或多个CTU的地址。在这些情况下,还可以根据左上分块ID和右下分块ID,确定所述第一条带中所有CTU的地址。

在步骤1009中,可以根据所述第一条带的边界对所述条带、分块、CTU和编码块进行解码以生成重建图像。重建图像还可以作为重建视频序列的一部分转发给显示器。

图11为用于由根据分块位置限定的条带边界将图像600和/或700等图像的视频序列编码到码流500等码流中的示例性系统1100的示意图。系统1100可以由编解码系统200、编码器300、解码器400和/或视频译码设备800等编码器和解码器实现。此外,系统1100可以用于实现方法100、方法900和/或方法1000。

系统1100包括视频编码器1102。视频编码器1102包括分割模块1101,用于将图像分割成多个条带,并将多个条带中的每个条带分割成多个分块。视频编码器1102还包括:确定模块1103,用于确定与第一条带相关的左上分块ID和右下分块ID。视频编码器1102还包括:编码模块1105,用于:将左上分块ID和右下分块ID编码到码流中,以表示所述第一条带的边界;将多个分块编码到码流中,以对所述图像进行编码。视频编码器1102还包括:发送模块1107,用于发送包括所述左上分块ID和所述右下分块ID的所述码流,以支持部分根据所述第一条带的所述边界,在解码器侧重建作为重建视频序列的一部分的所述图像。视频编码器1102还可以用于执行方法900的任一步骤。

系统1100还包括视频解码器1110。视频解码器1110包括:接收模块1111,用于接收码流,其中,所述码流包括编码到多个条带中的图像数据。视频解码器1110还包括:分块模块1113,用于确定与第一条带相关的左上分块ID和右下分块ID。视频解码器1110还包括:边界确定模块1115,用于根据所述左上分块ID和所述右下分块ID,确定所述第一条带的边界。视频解码器1110还包括:解码模块1117,用于根据所述第一条带的所述边界对所述多个条带进行解码,以生成重建图像。视频解码器1110还可以用于执行方法1000的任一步骤。

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

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

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

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

59页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:用于流传输内容的方法和设备

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类