一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

视频译码中的基于子图像的条带地址的制作方法

2021-10-29 23:12:00 来源:中国专利 TAG:译码 图像 专利申请 视频 等人

视频译码中的基于子图像的条带地址
1.相关申请交叉引用
2.本专利申请要求王业奎(ye

kui wang)等人于2019年3月11日提交的申请号为62/816,751、发明名称为“基于子图像的视频译码(sub

picture based video coding)”的美国临时专利申请案以及王业奎等人于2019年3月29日提交的申请号为62/826,659、发明名称为“基于子图像的视频译码(sub

picture based video coding)”的美国临时专利申请案的权益,其内容通过引用并入本文中。
技术领域
3.本发明大体上涉及视频译码,具体涉及在视频译码中对图像中的子图像进行译码。


背景技术:

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


技术实现要素:

5.在一个实施例中,本发明包括一种在解码器中实现的方法,所述方法包括:所述解码器的接收器接收包括子图像的码流,其中,所述子图像包括条带;所述处理器获取条带地址,其中,当所述条带为矩形条带时,所述条带地址包括所述条带的子图像级条带索引;所述处理器根据所述条带地址,对所述子图像的所述条带进行解码。图像可以被分割成多个条带,以用于编码。在一些视频译码系统中,这些条带根据它们相对于图像的位置寻址。还有一些视频译码系统采用子图像的概念。从译码角度来看,子图像可以与其它子图像以不同的方式处理。例如,子图像可以独立于其它子图像提取和显示。在这种情况下,由于省略了大量预期条带地址,根据图像位置生成的条带地址可能会停止正常起作用。一些视频译码系统解决这个问题的方式是根据请求动态地重写条带头以更改条带地址来支持子图像提取。这种过程可能需要很多资源,因为每次用户请求观看子图像时,这个过程都可能会发生。本发明包括相对于包括条带的子图像寻址的条带。例如,条带头可以包括子图像标识符(identifier,id)和子图像中包括的每个条带的地址。此外,序列参数集(sequence parameter set,sps)可以包括子图像id可以参考的子图像的维度。因此,当请求单独提取子图像时,不需要重写条带头。条带头和sps包括足够信息来支持在子图像中定位条带,以
用于显示。因此,本示例提高了译码效率和/或避免了条带头重写冗余,从而减少了编码器和/或解码器侧处理器资源、内存资源和/或网络资源的使用。
6.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述方法还包括:所述处理器获取包括所述条带的所述子图像的子图像标识符(identifier,id);所述处理器根据所述条带地址和所述子图像id,在所述子图像中定位所述条带。
7.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述码流还包括与所述条带相关的条带头,所述条带地址和所述子图像id是从所述条带头中获取的。
8.可选地,根据上述任一方面,在所述方面的另一种实现方式中,当rect_slice_flag等于1时,所述条带为矩形条带。
9.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述条带地址是从变量slice_address中获取的,所述子图像id是从变量slice_subpic_id中获取的。
10.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述码流还包括序列参数集(sequence parameter set,sps),其中,所述sps包括所述子图像的描述,所述子图像id参考所述子图像的所述描述。
11.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述子图像的所述描述包括以编码树块(coding tree block,ctb)为单位的所述子图像的宽度、以ctb为单位的所述子图像的高度和所述子图像的偏移,其中,所述偏移表示为所述子图像的左上方编码树单元(coding tree unit,ctu)的垂直位置和所述子图像的所述左上方ctu的水平位置。
12.在一个实施例中,本发明包括一种在编码器中实现的方法,所述方法包括:所述编码器的处理器将子图像分割成条带;所述处理器确定条带地址,其中,当所述条带为矩形条带时,所述条带地址包括所述条带的子图像级条带索引;所述处理器将所述条带地址编码到码流中;所述处理器将所述子图像的所述条带编码到所述码流中;耦合到所述处理器的存储器存储所述码流,用于发送到解码器。图像可以被分割成多个条带,以用于编码。在一些视频译码系统中,这些条带根据它们相对于图像的位置寻址。还有一些视频译码系统采用子图像的概念。从译码角度来看,子图像可以与其它子图像以不同的方式处理。例如,子图像可以独立于其它子图像提取和显示。在这种情况下,由于省略了大量预期条带地址,根据图像位置生成的条带地址可能会停止正常起作用。一些视频译码系统解决这个问题的方式是根据请求动态地重写条带头以更改条带地址来支持子图像提取。这种过程可能需要很多资源,因为每次用户请求观看子图像时,这个过程都可能会发生。本发明包括相对于包括条带的子图像寻址的条带。例如,条带头可以包括子图像标识符(identifier,id)和子图像中包括的每个条带的地址。此外,序列参数集(sequence parameter set,sps)可以包括子图像id可以参考的子图像的维度。因此,当请求单独提取子图像时,不需要重写条带头。条带头和sps包括足够信息来支持在子图像中定位条带,以用于显示。因此,本示例提高了译码效率和/或避免了条带头重写冗余,从而减少了编码器和/或解码器侧处理器资源、内存资源和/或网络资源的使用。
13.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述方法还包括:所述处理器确定包括所述条带的所述子图像的子图像id;所述处理器将所述子图像id编码到所述码流中。
14.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述码流还包括所述处理器将与所述条带相关的条带头编码到所述码流中,其中,所述条带地址和所述子图像id被编码到所述条带头中。
15.可选地,根据上述任一方面,在所述方面的另一种实现方式中,当rect_slice_flag等于1时,所述条带为矩形条带。
16.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述条带地址被编码到变量slice_address中,所述子图像id被编码到变量slice_subpic_id中。
17.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述方法还包括:所述处理器将sps编码到所述码流中,其中,所述sps包括所述子图像的描述,所述子图像id参考所述子图像的所述描述。
18.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述子图像的所述描述包括以ctb为单位的所述子图像的宽度、以ctb为单位的所述子图像的高度和所述子图像的偏移,其中,所述偏移表示为所述子图像的左上方ctu的垂直位置和所述子图像的所述左上方ctu的水平位置。
19.在一个实施例中,本发明包括一种视频译码设备,包括:处理器、与所述处理器耦合的接收器和与所述处理器耦合的存储器、与所述处理器耦合的发送器,其中,所述处理器、所述接收器、所述存储器和所述发送器用于执行根据上述方面中任一方面所述的方法。
20.在一个实施例中,本发明包括一种非瞬时性计算机可读介质,包括供视频译码设备使用的计算机程序产品,所述计算机程序产品包括存储在所述非瞬时性计算机可读介质中的计算机可执行指令,当处理器执行所述计算机可执行指令时,使得所述视频译码设备执行根据上述任一方面所述的方法。
21.在一个实施例中,本发明包括一种解码器,包括:接收模块,用于接收包括子图像的码流,其中,所述子图像包括条带;获取模块,用于获取条带地址,其中,当所述条带为矩形条带时,所述条带地址包括所述条带的子图像级条带索引;解码模块,用于根据所述条带地址,对所述子图像的所述条带进行解码;转发模块,用于转发所述条带,以显示为经解码视频序列的一部分。
22.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述解码器还用于执行根据上述任一方面所述的方法。
23.在一个实施例中,本发明包括一种编码器,包括:分割模块,用于将子图像分割成条带;确定模块,用于确定条带地址,其中,当所述条带为矩形条带时,所述条带地址包括所述条带的子图像级条带索引;编码模块,用于:将所述条带地址编码到码流中;将所述子图像的所述条带编码到所述码流中;存储模块,用于存储所述码流,用于发送到解码器。
24.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述编码器还用于执行根据上述任一方面所述的方法。
25.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述编码器还用于执行根据上述任一方面所述的方法。
26.为了描述的清晰性,上述任一实施例可以与上述其它任一或多个实施例结合以创建本发明范围内的新实施例。
27.这些和其它特征将结合附图和权利要求书从以下详细描述中更清楚地理解。
set,mcts)是一种分块集,设计目的是限制相关运动矢量指向mcts内部的整样本位置和指向仅需要mcts内部的整样本位置进行插值的分数样本位置。此外,不允许将根据mcts外部的块推导出的运动矢量候选用于时间运动矢量预测。这样,mcts可以在不需要mcts之外的分块的情况下独立解码。时间mcts补充增强信息(supplemental enhancement information,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),并更新条带头。
57.图像还可以分割成一个或多个子图像。将图像分割成子图像可以实现,从译码观点以不同的方式处理图像中的不同部分。例如,子图像可以在不提取其它子图像的情况进行提取和显示。又如,不同的子图像可以按不同的分辨率显示,相对于彼此重新定位(例如,在电话会议应用中),或者即使子图像共同包括来自同一图像的数据,也可以译码为单独的图像。
58.子图像的示例性实现方式如下所述。图像可以分割成一个或多个子图像。子图像是以地址等于0的条带/分块组开始的矩形或方形条带集/分块集。每个子图像可以参考不同的pps,因此每个子图像可以采用不同的分割机制。在解码过程中,子图像可以当作图像处理。对当前子图像进行解码所使用的当前参考图像可以通过从解码图像缓冲器中的参考图像中提取与当前子图像并置的区域来生成。提取到的区域可以是经解码子图像,因此帧间预测可以发生在图像中的相同大小和相同位置的子图像之间。分块组可以是子图像的分块光栅扫描下的一系列分块。以下内容可以推导用来确定子图像在图像中的位置。每个子图像可以包括在图像中的按照ctu光栅扫描顺序排列的下一个未占用位置上,该位置足够大以适合图像边界处的子图像。
59.各种视频译码系统采用的子图像方案存在降低译码效率和/或功能的各种问题。本发明包括各种技术方案,以解决这些问题。在第一示例性问题中,帧间预测可以根据几种帧间预测模式中的一种来执行。某些帧间预测模式在编码器和解码器侧都生成运动矢量预测值的候选列表。这样,编码器可以通过指示候选列表中的索引而不是指示整个运动矢量来指示运动矢量。此外,一些系统对子图像进行编码,以用于独立提取。这样,当前子图像可以在不对来自其它子图像的信息进行解码的情况下进行解码和显示。这样可能会在采用指向子图像外部的运动矢量时导致错误,因为运动矢量指向的数据可能没有解码,因此可能不可用。
60.因此,在第一示例中,本文公开了一种表示子图像可以当作图像处理的标志。该标志被设置为支持子图像的单独提取。当设置有该标志时,从并置块(collocated block)中获得的运动矢量预测值只包括指向子图像内部的运动矢量,而指向子图像外部的任何运动矢量预测值排除在外。这样确保指向子图像外部的运动矢量不被选择,避免了相关错误。并
置块是与当前图像不同的图像中的块。来自当前图像中的块(非并置块)的运动矢量预测值可以指向子图像外部,因为插值滤波器等其它过程可以避免这些运动矢量预测值导致的错误。因此,本示例通过防止在执行子图像提取时出现错误,将附加功能提供给视频编码器/解码器(编解码器)。
61.在第二示例中,本文公开了一种表示子图像可以当作图像处理的标志。在当前子图像当作图像处理时,当前子图像可以在不参考其它子图像的情况下提取。具体地,本示例采用在应用插值滤波器时使用的限幅函数。这种限幅函数确保插值滤波器不依赖于来自相邻子图像的数据,以保持子图像分开,从而支持单独提取。因此,限幅函数是在设置有该标志且运动矢量指向当前子图像外部时使用的。插值滤波器然后应用于限幅函数的结果。因此,本示例通过防止在执行子图像提取时出现错误,将附加功能提供给视频编解码器。这样一来,第一示例和第二示例解决了第一示例性问题。
62.在第二示例性问题中,视频译码系统将图像分割成子图像、条带(slice)、分块(tile)和/或编码树单元(coding tree unit),然后它们分割成块。接着对这些块进行编码,用于发送到解码器。对这些块进行解码可能会产生包括各种噪声的经解码图像。为了解决这些问题,视频译码系统可以跨块边界应用各种滤波器。这些滤波器可以去除块效应(blocking)、量化噪声和其它不好的译码伪影。如上所述,一些系统对子图像进行编码,以用于独立提取。这样,当前子图像可以在不对来自其它子图像的信息进行解码的情况下进行解码和显示。在这些系统中,子图像可以分割成块,以用于编码。因此,沿着子图像边缘的块边界可以与子图像边界对齐。在一些情况下,块边界也可以与分块边界对齐。滤波器可以跨这些块边界应用,因此可以跨子图像边界和/或分块边界应用。这样可能会在当前子图像被独立提取时导致错误,因为当来自相邻子图像的数据不可用时,滤波过程可能会以意想不到的方式执行。
63.在第三示例中,本文公开了一种控制子图像级滤波的标志。当该标志针对子图像设置时,滤波器可以跨子图像边界应用。当未设置有该标志时,滤波器不会跨子图像边界应用。以这种方式,滤波器可以对于编码以用于单独提取的子图像禁用,而对于编码以用于成组显示的子图像启用。因此,本示例通过防止在执行子图像提取时出现滤波器相关错误,将附加功能提供给视频编解码器。
64.在第四示例中,本文公开了一种可以设置为控制分块级滤波的标志。当该标志针对分块设置时,滤波器可以跨分块边界应用。当未设置有该标志时,滤波器不会跨分块边界应用。以这种方式,所述滤波器可以禁用或启用,以便在分块边界处使用(例如,同时继续滤波所述分块的内部部分)。因此,本实施例通过支持跨分块边界的选择性滤波,将附加功能提供给视频编解码器。这样一来,第三示例和第四示例解决了第二示例性问题。
65.在第三示例性问题中,视频译码系统可以将图像分割成子图像。这样,不同的子图像可以在对视频进行译码时以不同的方式处理。例如,子图像可以单独提取和显示,根据应用级更改独立调整大小,等等。在一些情况下,子图像可以通过将图像分割成分块并将分块分配给子图像来创建。一些视频译码系统根据子图像中包括的分块来描述子图像边界。但是,分块方案可能不适用于一些图像中。因此,这些边界描述可以限制采用分块的图像使用子图像。
66.在第五示例中,本文公开了一种用于根据ctb和/或ctu指示子图像边界的机制。具
体地,子图像的宽度和高度可以按ctb为单位指示。此外,子图像中的左上方ctu的位置可以指示为与图像中的左上方ctu的偏移,测量单位是ctb。ctu和ctb的大小可以被设置为预定值。因此,根据ctb和ctu指示子图像尺寸和位置提供足够信息给解码器来定位子图像,以用于显示。这样,子图像还可以用于未采用分块的情况下。此外,这种指示机制既避免了复杂性,又可以使用相对较少的比特进行译码。因此,本示例通过将子图像与分块独立使用,将附加功能提供给视频编解码器。此外,本示例提高了译码效率,因此减少了编码器和解码器侧处理器资源、内存资源和/或网络资源的使用。这样一来,第五示例解决了第三示例性问题。
67.在第四示例性问题中,图像可以分割成多个条带,以用于编码。在一些视频译码系统中,这些条带根据它们相对于图像的位置寻址。还有一些视频译码系统采用子图像的概念。如上所述,从译码角度来看,子图像可以与其它子图像以不同的方式处理。例如,子图像可以独立于其它子图像提取和显示。在这种情况下,由于省略了大量预期条带地址,根据图像位置生成的条带地址可能会停止正常起作用。一些视频译码系统解决这个问题的方式是根据请求动态地重写条带头以更改条带地址来支持子图像提取。这种过程可能需要很多资源,因为每次用户请求观看子图像时,这个过程都可能会发生。
68.在第六示例中,本文公开了相对于包括条带的子图像寻址的条带。例如,条带头可以包括子图像标识符(identifier,id)和子图像中包括的每个条带的地址。此外,序列参数集(sequence parameter set,sps)可以包括子图像id可以参考的子图像的维度。因此,当请求单独提取子图像时,不需要重写条带头。条带头和sps包括足够信息来支持在子图像中定位条带,以用于显示。因此,本示例提高了译码效率和/或避免了条带头重写冗余,从而减少了编码器和/或解码器侧处理器资源、内存资源和/或网络资源的使用。这样一来,第六示例解决了第四示例性问题。
69.图1为对视频信号进行译码的示例性操作方法100的流程图。具体地,在编码器侧对视频信号进行编码。编码过程通过使用各种机制来压缩视频信号,从而减小视频文件。较小的文件大小有助于压缩视频文件传输给用户,同时减少相关的带宽开销。然后,解码器对压缩视频文件进行解码,以重建原始视频信号,向终端用户显示。解码过程通常与编码过程一样,有助于解码器以相同方式重建视频信号。
70.在步骤101中,将视频信号输入到编码器中。例如,视频信号可以是存储在存储器中的未压缩的视频文件。又如,视频文件可以由视频捕获设备(例如,摄像机)捕获,并且进行编码以支持视频的实时流传输。视频文件可以同时包括音频分量和视频分量。视频分量包括一系列图像帧,当按顺序观看时,这些图像帧会产生运动的视觉效果。这些帧包括以光表示的像素(本文称为亮度分量(或亮度样本))和颜色(称为色度分量(或颜色样本))。在一些示例中,所述帧还可以包括深度值以支持三维观看。
71.在步骤103中,将视频分割成块。分割包括将每个帧中的像素细分为正方形和/或矩形块以进行压缩。例如,在高效视频编码(high efficiency video coding,hevc)(也称为h.265和mpeg

h第2部分)中,可以首先将帧划分为编码树单元(coding tree unit,ctu),这些编码树单元是预定义大小(例如,64个像素
×
64个像素)的块。ctu包括亮度样本和色度样本。可以使用编码树将ctu分成块,然后递归地细分这些块,直到获得支持进一步编码的配置结构。例如,可以细分帧的亮度分量,直到各个块包括相对均匀的亮度(lighting)值。
此外,可以细分帧的色度分量,直到各个块包括相对均匀的颜色值。因此,视频帧的内容不同,分割机制就不同。
72.在步骤105中,使用各种压缩机制来压缩在步骤103中分割的图像块。例如,可以使用帧间预测和/或帧内预测。帧间预测旨在利用一个事实,即一个共同场景中的对象往往出现在连续的帧中。因此,无需在相邻帧中重复描述在参考帧中描绘对象的块。一个对象(如一张桌子)可以在多个帧中保持恒定的位置。因此,该桌子只描述一次,相邻帧可以回指参考帧。模式匹配机制可用于匹配跨多个帧的对象。此外,由于对象移动或摄像机移动等原因,移动对象可以跨多个帧表示。在特定示例中,一个视频可以跨多个帧显示在屏幕上移动的汽车。运动矢量可以用来描述这种移动。运动矢量是一个二维矢量,提供从对象在一个帧中的坐标与该对象在参考帧中的坐标之间的偏移。因此,帧间预测可将当前帧中的图像块编码为运动矢量集,表示当前帧中的图像块与参考帧中的对应块之间的偏移。
73.帧内预测对公共帧中的块进行编码。帧内预测利用了以下事实:亮度分量和色度分量往往聚集在一个帧中。例如,一棵树的一部分中的一片绿色往往与几片类似的绿色相邻。帧内预测使用多种方向性预测模式(例如,hevc中的33个模式)、平面模式和直流(direct current,dc)模式。方向性模式表示当前块的样本与相邻块在对应方向上的样本相似/相同。平面模式表示可以根据行边缘的邻块对行/列(例如平面)上的一系列块进行插值。实际上,平面模式通过在变化值中使用相对恒定的斜率来表示亮度/颜色在行/列之间的平滑过渡。dc模式用于边界平滑,表示块和方向性预测模式的角方向相关的所有相邻块的样本相关的平均值相似/相同。因此,帧内预测块可以将图像块表示为各种关系预测模式值而不是实际值。此外,帧间预测块可以将图像块表示为运动矢量值而不是实际值。在这两种情况下,预测块在某些情况下可以不完全表示图像块。任何差异都存储在残差块中。可以对残差块进行变换以进一步压缩文件。
74.在步骤107中,可以应用各种滤波技术。在hevc中,根据环内滤波方案应用滤波器。以上讨论的基于块的预测可在解码器中创建块状图像。此外,基于块的预测方案可以对块进行编码,然后重建经编码块,以供以后用作参考块。环内滤波方案迭代地将噪声抑制滤波器、去块效应滤波器、自适应环路滤波器和样本自适应偏移(sample adaptive offset,sao)滤波器应用到块/帧。这些滤波器减少了这些块伪影,以便可以准确地重建经编码文件。此外,这些滤波器减少了重建参考块伪影,使得伪影不太可能在基于重建参考块编码的后续块中产生其它的伪影。
75.在步骤109中,一旦视频信号被分割、压缩和滤波,则将所得数据编码到码流中。码流包括上述数据以及任何期望支持解码器中适当的视频信号重建的指示数据。例如,这些数据可以包括分割数据、预测数据、残差块和向解码器提供译码指令的各种标志。码流可以存储在存储器中,所述码流用于根据请求发送到解码器。码流还可以向多个解码器广播和/或组播。码流的创建是一个迭代过程。因此,步骤101、103、105、107和109可以在多个帧和块上连续和/或同时发生。图1所示的顺序是为了清楚和便于讨论而呈现的,并非旨在将视频译码过程限制于特定顺序。
76.在步骤111中,解码器接收码流并开始解码过程。具体地,解码器使用熵解码方案将码流转换为对应的语法和视频数据。在步骤111中,解码器使用码流中的语法数据来确定帧的分割。所述分割应与步骤103中的块分割的结果匹配。现在描述在步骤111中使用的熵
编码/解码。编码器在压缩过程中做出许多选择,例如根据输入图像中的值的空间定位从多个可能选项中选择块分割方案。指示确切的选项可以使用大量的二进制位。本文中使用的二进制位是当作变量的二进制值(例如,可以根据上下文变化的比特值)。熵编码有助于编码器丢弃任何明显不适合特定情况的选项,从而留下一组可使用的选项。然后,为每个可使用的选项分配一个码字。码字的长度基于可允许选项的数目(例如,一个二进制位用于两个选项,两个二进制位用于三个到四个选项)。然后,编码器对所选选项的码字进行编码。此方案减小了码字的大小,因为码字的大小与期望的一样大,以唯一地指示可使用选项的小子集中的一个选项,而不是唯一地指示所有可能选项的可能大集中的选项。然后,解码器通过以与编码器类似的方式确定可使用选项集对所述选项进行解码。通过确定可使用选项集,解码器可以读取码字并确定编码器做出的选择。
77.在步骤113中,解码器执行块解码。具体地,解码器进行逆变换来生成残差块。然后,解码器使用残差块和对应的预测块,根据分割来重建图像块。预测块可包括编码器在步骤105中生成的帧内预测块和帧间预测块。然后,根据在步骤111中确定的分割数据将重建图像块放置在重建视频信号的帧中。步骤113的语法还可以通过上文讨论的熵编码在码流中指示。
78.在步骤115中,以类似于编码器在步骤107的方式对重建视频信号的帧执行滤波。例如,可以对帧使用噪声抑制滤波器、去块效应滤波器、自适应环路滤波器和sao滤波器以消除块伪影。一旦帧被滤波,可以在步骤117中将视频信号输出到显示器以供终端用户观看。
79.图2是用于视频译码的示例性编码和解码(编解码)系统200的示意图。具体地,编解码系统200能够实现操作方法100。广义地,编解码器系统200用于描述编码器和解码器中使用的组件。如关于操作方法100中的步骤101和103所讨论,编解码系统200接收视频信号并对视频信号进行分割,产生分割视频信号201。然后,当作为编码器时,编解码系统200将分割视频信号201压缩到编码码流中,如关于方法100中的步骤105、107和109所讨论。当充当解码器时,编解码系统200从码流中生成输出视频信号,如结合操作方法100中的步骤111、113、115和117所述。编解码系统200包括通用译码器控制组件211、变换缩放量化组件213、帧内估计组件215、帧内预测组件217、运动补偿组件219、运动估计组件221、缩放和逆变换组件229、滤波器控制分析组件227、环内滤波器组件225、解码图像缓冲器组件223、标头格式和上下文自适应二进制算术编码(context adaptive binary arithmetic coding,cabac)组件231。这些组件如图所示相耦合。在图2中,黑线表示待编码/解码数据的运动,而虚线表示控制其它组件操作的控制数据的运动。编解码系统200中的组件都可以存在于编码器中。解码器可包括编解码系统200中组件的子集。例如,解码器可以包括帧内预测组件217、运动补偿组件219、缩放和逆变换组件229、环内滤波器组件225和解码图像缓冲器组件223。现对这些组件加以说明。
80.分割视频信号201是已通过编码树分割成像素块的捕获视频序列。编码树使用各种划分模式将像素块细分为更小的像素块。然后,可以将这些块进一步细分为更小的块。所述块可以称为编码树上的节点。将较大的父节点划分为较小的子节点。节点被细分的次数称为节点/编码树的深度。在某些情况下,划分的块可以包括在编码单元(coding unit,cu)中。例如,cu可以是ctu的子部分,包括亮度块、红差色度(cr)块和蓝差色度(cb)块以及cu的
对应语法指令。划分模式可以包括二叉树(binary tree,bt)、三叉树(triple tree,tt)和四叉树(quad tree,qt),用于将节点分别划分为形状不同的两个、三个或四个子节点,具体取决于所使用的划分模式。将分割视频信号201转发到通用译码器控制组件211、变换缩放和量化组件213、帧内估计组件215、滤波器控制分析组件227和运动估计组件221进行压缩。
81.通用译码器控制组件211用于根据应用约束条件做出与将视频序列的图像编码到码流中相关的决策。例如,通用译码器控制组件211管理码率/码流大小相对于重建质量的优化。可以根据存储空间/带宽可用性和图像分辨率请求做出这些决策。通用译码器控制组件211还根据传输速度管理缓冲器的利用率,以减轻缓存欠载和超载问题。为了管理这些问题,通用译码器控制组件211管理由其它组件进行的分割、预测和滤波。例如,通用译码器控制组件211可以动态增加压缩复杂度以增大分辨率和带宽利用率,或者降低压缩复杂度以降低分辨率和带宽利用率。因此,通用译码器控制组件211控制编解码系统200的其它组件来平衡视频信号重建质量与码率问题。通用译码器控制组件211创建控制数据,控制其它组件的操作。还将控制数据转发到标头格式和cabac组件231,以在码流中进行编码,从而指示在解码器中解码的参数。
82.分割视频信号201还发送到运动估计组件221和运动补偿组件219进行帧间预测。可以将分割视频信号201的帧或条带分为多个视频块。运动估计组件221和运动补偿组件219根据一个或多个参考帧中的一个或多个块对所接收视频块执行帧间预测译码以提供时间预测。编解码系统200可以执行多个译码过程,以便为每个视频数据块选择适当的译码模式,等等。
83.运动估计组件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可以确定当前块/帧的多个参考块、多个运动矢量等,并且可以选择具有最佳率失真特性的参考块、运动矢量等。最佳率失真特性平衡视频重建的质量(例如,压缩造成的数据丢失量)和译码效率(例如,最终编码的大小)。
84.在一些示例中,编解码系统200可以计算存储在解码图像缓冲器组件223中的参考图像的子整数像素位置的值。例如,视频编解码系统200可对参考图像的四分之一像素位置、八分之一像素位置或其它分数像素位置的值进行插值。因此,运动估计组件221可执行有关于整像素位置和分数像素位置的运动搜索,并输出具有分数像素精度的运动矢量。运动估计组件221通过比较pu的位置与参考图像的预测块的位置来计算经帧间编码条带中视频块的pu的运动矢量。运动估计组件221将计算的运动矢量作为运动数据输出至标头格式和cabac组件231进行编码,将运动输出至运动补偿组件219。
85.由运动补偿组件219执行的运动补偿可涉及根据由运动估计组件221确定的运动
矢量获取或生成预测块。同样,在一些示例中,运动估计组件221和运动补偿组件219可以在功能上集成。在接收当前视频块的pu的运动矢量之后,运动补偿组件219可以定位运动矢量指向的预测块。然后,通过从正在编码的当前视频块的像素值中减去预测块的像素值,产生像素差值,从而形成残差视频块。通常,运动估计组件221对亮度分量进行运动估计,运动补偿组件219将根据亮度分量计算的运动矢量用于色度分量和亮度分量。将预测块和残差块转发到变换缩放和量化组件213。
86.分割视频信号201还发送到帧内估计组件215和帧内预测组件217。与运动估计组件221和运动补偿组件219一样,帧内估计组件215和帧内预测组件217可以高度集成,但出于概念的目的单独说明。帧内估计组件215和帧内预测组件217根据当前帧中的块对当前块进行帧内预测,以替代如上所述的由运动估计组件221和运动补偿组件219在帧之间执行的帧间预测。具体地,帧内估计组件215确定用于对当前块进行编码的帧内预测模式。在一些示例中,帧内估计组件215从多个测试的帧内预测模式中选择适当的帧内预测模式对当前块进行编码。然后,将所选择的帧内预测模式转发到标头格式和cabac组件231进行编码。
87.例如,帧内估计组件215使用各种测试的帧内预测模式的率失真分析来计算率失真值,并在测试的模式中选择具有最佳率失真特性的帧内预测模式。率失真分析通常确定经编码块和为了产生经编码块进行编码的原始未编码块之间的失真(或误差)量以及用于产生经编码块的码率(例如,比特数)。帧内估计组件215根据各种经编码块的失真和速率计算比率,确定哪种帧内预测模式得到块的最佳率失真值。另外,帧内估计组件215可用于根据率失真优化(rate

distortion optimization,rdo)使用深度建模模式(depth modeling mode,dmm)对深度图的深度块进行编码。
88.当在编码器上实现时,帧内预测组件217可根据由帧内估计组件215确定的已选帧内预测模式从预测块中生成残差块,或者当在解码器上实现时,从码流中读取残差块。残差块包括预测块和原始块之间的值差,表示为矩阵。然后,将残差块转发到变换缩放和量化组件213。帧内估计组件215和帧内预测分量217可以对亮度分量和色度分量执行操作。
89.变换缩放和量化组件213用于进一步压缩残差块。变换缩放和量化组件213将离散余弦变换(discrete cosine transform,dct)、离散正弦变换(discrete sine transform,dst)等变换或概念上类似的变换应用于残差块,产生包括残差变换系数值的视频块。还可以使用小波变换、整数变换、子带变换或其它类型的变换。变换可将残差信息从像素值域变换到变换域,例如频域。变换缩放和量化组件213还用于根据频率等对变换残差信息进行缩放。这种缩放涉及对残差信息应用缩放因子,以便在不同的粒度上量化不同的频率信息,可以影响重建视频的最终视觉质量。变换缩放和量化分量213还用于量化变换系数以进一步降低码率。量化过程可以减少与部分或全部系数相关的位深度。可以通过调整量化参数来修改量化程度。在一些示例中,变换缩放和量化组件213随后可对包括量化变换系数的矩阵进行扫描。将量化变换系数转发到标头格式和cabac组件231,以编码到码流中。
90.缩放和逆变换组件229进行变换缩放和量化组件213的逆操作以支持运动估计。缩放和逆变换组件229进行反缩放、逆变换和/或反量化来重建像素域中的残差块,例如,后续用作参考块,该参考块可成为另一当前块的预测块。运动估计组件221和/或运动补偿组件219可以通过将残差块与对应预测块相加来计算参考块,以用于对后续块/帧进行运动估计。将滤波器应用于重建参考块,以减少在缩放、量化和变换过程中产生的伪影。当预测后
续块时,这些伪影可以产生不准确的预测(并产生其它伪影)。
91.滤波器控制分析组件227和环内滤波器组件225将滤波器应用于残差块和/或重建图像块。例如,缩放和逆变换组件229中的变换残差块可以与帧内预测组件217和/或运动补偿组件219中的对应预测块组合以重建原始图像块。然后,可以将滤波器应用于重建图像块。在一些示例中,可以将滤波器应用于残差块。与图2中的其它组件一样,滤波器控制分析组件227和环内滤波器组件225高度集成且可以一起实现,但出于概念目的单独描述。应用于重建参考块的滤波器应用于特定空间区域,并且包括多个参数以调整如何应用这些滤波器。所述滤波器控制分析组件227分析重建参考块,以确定应在哪里应用这些滤波器并设置对应的参数。这些数据作为滤波器控制数据转发到标头格式和cabac组件231进行编码。环内滤波器组件225根据滤波器控制数据应用这些滤波器。滤波器可以包括去块效应滤波器、噪声抑制滤波器、sao滤波器和自适应环路滤波器。这些滤波器可以根据示例应用于空间/像素域(例如,在重建像素块上)或频域中。
92.当作为编码器操作时,将滤波后的重建图像块、残差块和/或预测块存储在解码图像缓冲器组件223中,以供以后进行如上所述的运动估计。当作为解码器操作时,解码图像缓冲器组件223存储重建块和滤波块并向显示器转发重建块和滤波块,作为输出视频信号的一部分。解码图像缓冲器组件223可以是能够存储预测块、残差块和/或重建图像块的任何存储器设备。
93.标头格式和cabac组件231从编解码系统200的各种组件接收数据并将这些数据编码到经编码码流中用于发送到解码器。具体地,标头格式和cabac组件231生成各种标头以对总体控制数据和滤波器控制数据等控制数据进行编码。此外,包括帧内预测和运动数据的预测数据以及量化变换系数数据形式的残差数据均编码到码流中。最终码流包括解码器想要重建原始分割视频信号201的所有信息。这些信息还可以包括帧内预测模式索引表(也称为码字映射表)、各种块的编码上下文的定义、最可能的帧内预测模式的指示、分割信息的指示等。这些数据可以通过熵译码技术进行编码。例如,可以通过使用上下文自适应可变长度编码(context adaptive variable length coding,cavlc)、cabac、基于语法的上下文自适应二进制算术编码(syntax

based context

adaptive binary arithmetic coding,sbac)、概率区间分割熵(probability interval partitioning entropy,pipe)译码或其它熵译码技术来对所述信息进行编码。在熵译码之后,经译码码流可用于发送到另一设备(例如,视频解码器)或存档以供稍后发送或检索。
94.图3为示例性视频编码器300的框图。视频编码器300可用于实现编解码系统200的编码功能和/或实现操作方法100的步骤101、103、105、107和/或109。编码器300对输入视频信号进行分割,产生和分割视频信号201基本相似的分割视频信号301。然后,通过编码器300的组件将分割视频信号301压缩和编码到码流中。
95.具体地,将分割视频信号301转发给帧内预测组件317进行帧内预测。帧内预测组件317可与帧内估计组件215和帧内预测组件217基本相似。分割视频信号301还转发到运动补偿组件321,用于根据解码图像缓冲器323中的参考块进行帧间预测。运动补偿组件321可与运动估计组件221和运动补偿组件219基本相似。将帧内预测组件317和运动补偿组件321中的预测块和残差块转发到变换和量化组件313以对残差块进行变换和量化。变换和量化组件313可与变换缩放和量化组件213基本相似。将变换和量化残差块和对应的预测块(以
及相关控制数据)转发到熵编码组件331以编码到码流中。熵编码组件331可与标头格式和cabac组件231基本相似。
96.变换和量化残差块和/或对应的预测块也从变换和量化组件313转发到逆变换和量化组件329以重建为参考块供运动补偿组件321使用。逆变换和量化组件329可与缩放和逆变换组件229基本相似。根据示例,也将环内滤波器组件325中的环内滤波器应用于残差块和/或重建参考块。环内滤波器组件325可与滤波器控制分析组件227和环内滤波器组件225基本相似。如关于环内滤波器组件225所讨论,环内滤波器组件325可以包括多个滤波器。然后,将滤波块存储在解码图像缓冲器组件323中,以供运动补偿组件321用作参考块。解码图像缓冲器组件323可与解码图像缓冲器组件223基本相似。
97.图4为示例性视频解码器400的框图。视频解码器400可用于实现编解码系统200的解码功能和/或实现操作方法100的步骤111、113、115和/或117。例如,解码器400从编码器300接收码流,并根据所述码流生成重建输出视频信号以向终端用户显示。
98.码流由熵解码组件433接收。熵解码组件433用于实现熵解码方案,例如cavlc、cabac、sbac、pipe译码或其它熵译码技术。例如,熵解码组件433可以使用标头信息来提供上下文以解译在码流中编码为码字的其它数据。解码信息包括对视频信号进行解码所需的任何信息,例如总体控制数据、滤波器控制数据、分割信息、运动数据、预测数据和残差块的量化变换系数。将量化变换系数转发到逆变换和量化组件429以重建为残差块。逆变换和量化组件429可与逆变换和量化组件329基本相似。
99.将重建残差块和/或预测块转发到帧内预测组件417以根据帧内预测操作重建为图像块。帧内预测组件417可与帧内估计组件215和帧内预测组件217相似。具体地,帧内预测组件417使用预测模式来定位帧中的参考块,并将残差块应用于结果以重建帧内预测图像块。重建帧内预测图像块和/或残差块以及对应的帧间预测数据通过环内滤波器组件425转发到解码图像缓冲器组件423,解码图像缓冲器组件423和环内滤波器组件425可以分别与解码图片缓冲器组件223和环内滤波器组件225基本相似。环内滤波器组件425对重建图像块、残差块和/或预测块进行滤波,并且这些信息存储在解码图像缓冲器组件423中。将解码图像缓冲器组件423中的重建图像块转发到运动补偿组件421进行帧间预测。运动补偿组件421可与运动估计组件221和/或运动补偿组件219基本相似。具体地,运动补偿组件421使用参考块中的运动矢量来生成预测块,并将残差块应用于结果中以重建图像块。所得重建块还可以通过环内滤波器组件425转发到解码图像缓冲器组件423。解码图像缓冲器组件423继续存储其它重建图像块,这些图像块可以通过分割信息重建成帧。这些帧也可以按顺序排列。所述顺序作为重建输出视频信号向显示屏输出。
100.图5a为分割成子图像510的示例性图像500的示意图。例如,图像500可以由编解码系统200和/或编码器300分割以用于编码以及由编解码系统200和/或解码器400分割以用于解码。又如,图像500可以由编码器在方法100的步骤103中分割,以供解码器在步骤111中使用。
101.图像500是描述视频序列在指定时间位置上的完整视觉部分的图像。图像(picture/image)500还可以称为帧。图像500可以由图像顺序编号(picture order count,poc)表示。poc是表示图像500在视频序列中的输出顺序/显示顺序的索引。图像500可以分割成子图像510。子图像510是图像500中的一个或多个条带/分块组的矩形区域或方形区
域。子图像510是可选的,因此一些视频序列包括子图像510,而其它视频序列不包括。虽然示出了四个子图像510,但图像500可以分割成任意数量的子图像510。子图像510的分割可以在整个编码视频序列(coded video sequence,cvs)上保持一致。
102.子图像510可以用于以不同的方式处理图像500中的不同区域。例如,指定的子图像510可以独立提取并发送到解码器。在一个具体示例中,用户使用虚拟现实(virtual reality,vr)头盔可以看到图像500的子集,这可以给用户带来身临图像500描述的空间中的感觉。在这种情况下,对很可能显示给用户的子图像510进行流式传输可能会提高译码效率。又如,不同的子图像510可以在某些应用中以不同的方式处理。在一个具体示例中,电话会议应用可以在比当前未说话的用户更突出的位置上以更高的分辨率显示活动的说话者。将不同的用户放置在不同的子图像510中支持实时配置所显示图像以支持这种功能。
103.每个子图像510可以由唯一的子图像id标识,这可以对于整个cvs保持一致。例如,位于图像500左上方的子图像510的子图像id可以为0。在这种情况下,序列中的任何图像500的左上方子图像510可以由为0的子图像id参考。此外,每个子图像510可以包括定义好的配置,这可以对于整个cvs保持一致。例如,子图像510可以包括高度、宽度和/或偏移。高度和宽度描述子图像510的大小,偏移描述子图像510的位置。例如,一行中所有子图像510的宽度之和等于图像500的宽度。此外,一列中所有子图像510的高度之和等于图像500的高度。另外,偏移表示子图像510的左上角相对于图像500的左上角的位置。子图像510的高度、宽度和偏移提供足够信息来定位图像500中的对应子图像510。由于子图像510的分割可以在整个cvs上保持一致,因此与子图像相关的参数可以包括在序列参数集(sequence parameter set,sps)中。
104.图5b为分割成条带515的示例性子图像510的示意图。如图所示,图像500中的子图像510可以包括一个或多个条带515。条带515包括整数个完整的分块或一个分块内的整数个连续完整的ctu行,这些行只包括在单个网络抽象层(network abstraction layer,nal)单元中。虽然示出了四个条带515,但子图像510可以包括任意数量的条带515。条带515包括指定poc的图像500特有的视觉数据。因此,与条带515相关的参数可以包括在图像参数集(picture parameter set,pps)和/或条带头中。
105.图5c为分割成分块517的示例性条带515的示意图。如图所示,图像500中的条带515可以包括一个或多个分块517。分块517可以通过将图像500分割成矩形的各行各列来创建。因此,分块517是图像中特定分块列和特定分块行内的ctu组成的矩形区域或方形区域。分块是可选的,因此一些视频序列包括分块517,而其它视频序列不包括。虽然示出了四个分块517,但分块515可以包括任意数量的分块517。分块517可以包括指定poc的图像500中的条带515特有的视觉数据。在一些情况下,条带515也可以包括在分块517中。因此,与块517相关的参数可以包括在pps和/或条带头中。
106.图5d为分割成ctu 519的示例性条带515的示意图。如图所示,图像500中的条带515(或条带515中的分块517)可以包括一个或多个ctu 519。ctu 519是图像500中的一个区域,其通过编码树进行细分,产生译码块进行编码/解码。ctu 519可以包括黑白图像500中的亮度样本或彩色图像500中的亮度样本和色度样本的组合。可以通过编码树分割的一组亮度样本或色度样本称为编码树块(coding tree block,ctb)518。因此,ctu 519包括亮度样本的ctb 518,以及具有三个样本阵列的图像500的色度样本的两个对应的ctb 518,或包
括单色图像的样本的ctb 518或使用三个独立颜色平面和语法结构(用于对样本进行译码)译码的图像的样本的ctb 518。
107.如上所述,图像500可以分割成子图像510、条带515、分块517、ctu 519和/或ctb 518,然后它们分割成块。接着对这些块进行编码,用于发送到解码器。对这些块进行解码可能会产生包括各种噪声的经解码图像。为了解决这些问题,视频译码系统可以跨块边界应用各种滤波器。这些滤波器可以去除块效应(blocking)、量化噪声和其它不好的译码伪影。如上所述,子图像510可以在执行独立提取时采用。在这种情况下,当前子图像510可以在不对来自其它子图像510的信息进行解码的情况下进行解码和显示。因此,沿着子图像510边缘的块边界可以与子图像边界对齐。在一些情况下,块边界也可以与分块边界对齐。滤波器可以跨这些块边界应用,因此可以跨子图像边界和/或分块边界应用。这样可能会在当前子图像510被独立提取时导致错误,因为当来自相邻子图像510的数据不可用时,滤波过程可能会以意想不到的方式执行。
108.为了解决这些问题,一种标志可以用于控制子图像510级滤波。例如,该标志可以表示为loop_filter_across_subpic_enabled_flag。当该标志针对子图像510设置时,滤波器可以跨对应的子图像边界应用。当未设置有该标志时,滤波器不会跨对应的子图像边界应用。以这种方式,滤波器可以对于编码以用于单独提取的子图像510禁用,而对于编码以用于成组显示的子图像510启用。另一种标志可以被设置为控制分块517级滤波。该标志可以表示为loop_filter_across_tiles_enabled_flag。当该标志针对分块517设置时,滤波器可以跨分块边界应用。当未设置有该标志时,滤波器不会跨分块边界应用。以这种方式,所述滤波器可以禁用或启用,以便在分块边界处使用(例如,同时继续滤波所述分块的内部部分)。
109.同样如上所述,分块(tiling)是可选的。但是,一些视频译码系统根据子图像510中包括的分块517描述子图像边界。在这些系统中,根据分块517的子图像边界描述限制采用分块517的图像500使用子图像510。为了扩大子图像510的适用性,子图像510可以根据边界、ctb 518和/或ctu 519描述。具体地,子图像510的宽度和高度可以按ctb 518为单位指示。此外,子图像510中的左上方ctu 519的位置可以指示为与图像500中的左上方ctu 519的偏移,测量单位是ctb 518。ctu 519和ctb 518的大小可以被设置为预定值。因此,根据ctb 518和ctu 519指示子图像尺寸和位置提供足够信息给解码器来定位子图像510,以用于显示。这样,子图像510还可以用于未采用分块517的情况下。如本文所述,滤波器在应用于边界两侧的样本时跨子图像510或分块517的边界应用。
110.另外,一些视频译码系统根据条带515相对于图像500的位置寻址这些条带。当子图像510进行译码以用于独立提取和显示时,这会产生一个问题。在这种情况下,条带515和与省略的子图像510相关的对应地址也被省略掉。省略条带515的地址可能会妨碍解码器正确定位条带515。一些视频译码系统通过动态重写与条带515相关的条带头中的地址来解决这个问题。由于用户可以请求任何子图像,因此用户每次请求视频时都会发生这种重写,这需要大量资源。为了解决这个问题,当采用子图像510时,条带515相对于包括条带515的子图像510进行寻址。例如,条带515可以由包括条带515的子图像510特有的索引或其它值标识。条带地址可以译码到与条带515相关的条带头中。包括条带515的子图像510的子图像id也可以编码到条带头中。此外,子图像510的尺寸/配置可以与子图像id一起译码到sps中。
因此,解码器可以根据子图像id从sps中获取子图像510的配置,并在不参考完整图像500的情况下,在子图像510中定位条带515。因此,当提取到子图像510时,可以省略条带头重写,这大大减少了编码器、解码器和/或对应条带器侧的资源使用。
111.一旦图像500分割成ctb 518和/或ctu 519,ctb 518和/或ctu 519就可以进一步划分为编码块。编码块然后可以根据帧内预测和/或帧间预测进行译码。本发明还包括与帧间预测机制相关的改进点。帧间预测可以在几种不同的模式下执行,这些模式可以根据单向帧间预测和/或双向帧间预测运行。
112.图6为在块压缩步骤105、块解码步骤113、运动估计组件221、运动补偿组件219、运动补偿组件321和/或运动补偿组件421中执行以确定运动矢量(motion vector,mv)的单向帧间预测600的示例的示意图。例如,单向帧间预测600可以用于确定在分割图像(例如图像500)时产生的经编码块和/或解码块的运动矢量。
113.单向帧间预测600采用包括参考块631的参考帧630来预测当前帧610中的当前块611。如图所示,参考帧630可以在时间上位于当前帧610之后(例如,作为下一个参考帧),但在一些示例中,也可以在时间上位于当前帧610之前(例如,作为前一个参考帧)。当前帧610是在特定时间进行编码/解码的示例帧/图像。当前帧610包括当前块611中的一个对象,该对象与参考帧630中的参考块631中的一个对象匹配。参考帧630是对当前帧610进行编码用作参考的帧,参考块631是参考帧630中的一个块,这个块包括的对象也包括在当前帧610中的当前块611中。
114.当前块611是译码过程中在指定时间点进行编码/解码的任何编码单元。当前块611可以是整个分割块,也可以是采用仿射帧间预测时的子块。当前帧610与参考帧630间隔一定时间距离(temporal distance,td)633。td 633表示视频序列中的当前帧610与参考帧630之间的时间量,测量单位可以是帧。当前块611的预测信息可以通过表示各帧之间的方向和时间距离的参考索引对参考帧630和/或参考块631参考。在td 633表示的时间段内,当前块611中的对象从当前帧610中的一个位置移动到参考帧630中的另一个位置(例如,参考块631的位置)。例如,该对象可以沿着运动路径(trajectory)613移动,运动路径613表示对象随时间移动的方向。运动矢量635描述该对象在td 633内沿着运动路径613移动的方向和幅度。因此,经编码的运动矢量635、参考块631和包括当前块611与参考块631之间差值的残差提供足够信息来重建当前块611并且在当前帧610中定位当前块611。
115.图7为双向帧间预测700的一个示例的示意图。例如,在块压缩步骤105、块解码步骤113、运动估计组件221、运动补偿组件219、运动补偿组件321和/或运动补偿组件421处,执行双向帧间预测700以确定mv。例如,双向帧间预测700可以用于确定在分割图像(例如图像500)时产生的经编码块和/或解码块的运动矢量。
116.双向帧间预测700类似于单向帧间预测600,但采用一对参考帧来预测当前帧710中的当前块711。因此,当前帧710和当前块711分别基本上类似于当前帧610和当前块611。当前帧710在时间上位于前一个参考帧720与下一个参考帧730之间,其中,前一个参考帧720在视频序列中出现在当前帧710之前,下一个参考帧730在视频序列中出现在当前帧710之后。前一个参考帧720和下一个参考帧730在其它方面基本上类似于参考帧630。
117.当前块711与前一个参考帧720中的前一个参考块721和下一个参考帧730中的下一个参考块731匹配。这样的匹配表示,在播放视频序列的过程中,一个对象沿着运动路径
713从前一个参考块721中的位置经过当前块711移动到下一个参考块731中的位置。当前帧710与前一个参考帧720间隔一定的前一个时间距离(td0)723,且与下一个参考帧730间隔一定的下一个时间距离(td1)733。td0 723表示视频序列中先前参考帧720与当前帧710之间以帧为单位的时间量。td1 733表示视频序列中当前帧710与后续参考帧730之间以帧为单位的时间量。因此,该对象在由td0 723表示的时间段内沿着运动路径713从前一个参考块721移动到当前块711。该对象还在由td1 733表示的时间段内沿着运动路径713从当前块711移动到下一个参考块731。当前块711的预测信息可以通过一对表示各帧之间的方向和时间距离的参考索引对前一个参考帧720和/或前一个参考块721以及下一个参考帧730和/或下一个参考块731参考。
118.前一个运动矢量(mv0)725描述该对象在td0 723(例如,在前一个参考帧720与当前帧710之间)内沿着运动路径713移动的方向和幅度。下一个运动矢量(mv1)735描述该对象在td1 733(例如,在当前帧710与下一个参考帧730之间)内沿着运动路径713移动的方向和幅度。因此,在双向帧间预测700中,当前块711可以通过前一个参考块721和/或下一个参考块731、mv0 725和mv1 735进行译码和重建。
119.在融合(merge)模式和高级运动矢量预测(advanced motion vector prediction,amvp)模式中,候选列表都是通过按照候选列表确定模式定义好的顺序将候选运动矢量添加到候选列表中生成的。这些候选运动矢量可以包括根据单向帧间预测600、双向帧间预测700或其组合的运动矢量。具体地,运动矢量是在相邻块进行编码时针对这类块生成的。这类运动矢量被添加到当前块的候选列表中,而且当前块的运动矢量是从该候选列表中选择的。然后,运动矢量可以指示为选定运动矢量在候选列表中的索引。解码器可以使用与编码器相同的过程构建候选列表,并可以根据指示的索引从候选列表中确定选定的运动矢量。因此,候选运动矢量包括根据单向帧间预测600和/或双向帧间预测700生成的运动矢量,具体取决于在编码这些相邻块时使用哪种方法。
120.图8为根据来自相邻经译码块802的候选运动矢量对当前块801进行译码的一个示例800的示意图。编码器300和/或解码器400操作方法100和/或采用编解码器系统200的功能,可以采用相邻块802来生成候选列表。这种候选列表可以用于根据单向帧间预测600和/或双向帧间预测700的帧间预测中。然后,候选列表可以用于对当前块801进行编码/解码,当前块801可以通过分割图像(例如图像500)生成。
121.当前块801是在指定时间内根据示例在编码器侧编码或在解码器侧解码的块。经译码块802是在指定时间已经编码的块。因此,经译码块802很可能用于生成候选列表。当前块801和经译码块802可以包括在相同帧中和/或可以包括在时间相邻帧中。当经译码块802与当前块801包括在相同帧中时,经译码块802包括与当前块801的边界紧邻(例如,邻接)的边界。当经译码块802包括在时间相邻帧中时,经译码块802在时间相邻帧中的位置与当前块801在当前帧中的位置相同。候选列表可以是通过将来自经译码块802的运动矢量添加为候选运动矢量生成的。然后,当前块801可以通过从候选列表中选择候选运动矢量并指示选定候选运动矢量的索引进行译码。
122.图9为用于确定运动矢量的候选列表的示例性模式900的示意图。具体地,编码器300和/或解码器400操作方法100和/或采用编解码器系统200的功能,可以采用候选列表确定模式900来生成候选列表911,从而对从图像500中分割到的当前块801进行编码。得到的
候选列表911可以是融合候选列表或amvp候选列表,都可以用于根据单向帧间预测600和/或双向帧间预测700的帧间预测中。
123.当对当前块901进行编码时,候选列表确定模式900在当前块901所在的相同图像/帧中的位置905(表示为a0、a1、b0、b1和/或b2)中搜索有效的候选运动矢量。候选列表确定模式900还可以在并置块909中搜索有效的候选运动矢量。并置块909是与当前块901位于相同位置的块,但包括在时间相邻图像/帧中。然后,候选运动矢量可以按照预定检查顺序放置在候选列表911中。因此,候选列表911是一列按程序生成的带索引的候选运动矢量。
124.候选列表911可以用于选择运动矢量以执行当前块901的帧间预测。例如,编码器可以获取由候选列表911中的候选运动矢量指向的参考块中的样本。然后,编码器可以选择指向与当前块901最匹配的参考块的候选运动矢量。然后,选定的候选运动矢量的索引可以进行编码以表示当前块901。在一些情况下,一个或多个候选运动矢量指向包括部分参考样本915的参考块。在这种情况下,插值滤波器913可以用于重建完整的参考样本915以支持运动矢量选择。插值滤波器913是一种能够对信号进行上采样的滤波器。具体地,插值滤波器913是一种能够接受部分/低质量信号作为输入并确定完整/高质量信号的近似值的滤波器。因此,插值滤波器913可以在某些情况下用于获取参考样本915的完整集合,以用于选择当前块901的参考块,因此用于选择运动矢量以对当前块901进行编码。
125.上述根据帧间预测使用候选列表对块进行译码的机制在采用子图像(例如子图像510)时可能会导致某些错误。具体地,这些问题可能会出现在当前块901包括在当前子图像中,但运动矢量指向至少部分位于相邻子图像中的参考块时。在这种情况下,当前子图像可以在没有相邻子图像的情况提取进行呈现。当这种情况发生时,相邻子图像中的参考块的各部分可能不发送到解码器,因此参考块可能不可用于对当前块901进行解码。当这种情况发生时,解码器无法访问足够的数据来对当前块901进行解码。
126.本发明提供了解决这种问题的机制。在一个示例中,一种标志用于表示当前子图像可以当作图像处理。该标志可以设置为支持子图像的单独提取。具体地,当设置有该标志时,当前子图像可以在不参考其它子图像中的数据的情况下进行编码。在这种情况下,当前子图像当作图像处理,因为当前子图像与其它子图像分开译码且可以显示为单独的图像。因此,该标志可以表示为subpic_treated_as_pic_flag[i],其中,i为当前子图像的索引。当设置有该标志时,从并置块909中获得的运动矢量候选(也称为运动矢量预测值)只包括指向当前子图像内部的运动矢量。指向当前子图像外部的任何运动矢量预测值排除在候选列表911之外。这样确保指向当前子图像外部的运动矢量不被选择,避免了相关错误。本示例具体应用于来自并置块909的运动矢量。来自同一图像/帧中的搜索位置905的运动矢量可以通过如下所述的不同机制修改。
[0127]
另一个示例可以用于在当前子图像当作图像处理时(例如,当设置有subpic_treated_as_pic_flag[i]时)寻址搜索位置905。在当前子图像当作图像处理时,当前子图像可以在不参考其它子图像的情况下提取。示例机制涉及插值滤波器913。插值滤波器913可以应用于一个位置上的样本,以对另一个位置上的相关样本进行插值(例如,预测)。在本示例中,只要插值滤波器913可以只根据当前子图像中的参考样本915对当前子图像外部的参考样本915进行插值,则来自经译码块的位于搜索位置905上的运动矢量可以指向参考样本915。因此,本示例采用在将插值滤波器913应用于来自同一图像中的搜索位置905的运动
矢量候选时使用的限幅函数。在确定由运动矢量候选指向的参考样本915时,该限幅函数对来自相邻子图像的数据进行限幅并因此去除输入到插值滤波器913的数据。这种方法在编码过程中保持子图像分开,以支持当子图像当作图像处理时的单独提取和解码。限幅函数可以应用于亮度样本双线性插值过程、亮度样本8抽头插值滤波过程和/或色度样本插值过程。
[0128]
图10为示例性环内滤波器1000的框图。环内滤波器1000可以用于实现环内滤波器225、325和/或425。此外,在执行方法100时,环内滤波器1000可以应用于编码器和解码器侧。另外,环内滤波器1000可以用于滤波从图像500中分割到的当前块801,当前块801可以根据单向帧间预测600和/或双向帧间预测700使用根据模式900生成的候选列表进行译码。环内滤波器1000包括去块效应滤波器1043、sao滤波器1045和自适应环路滤波器(adaptive loop filter,alf)1047。环内滤波器1000中的滤波器依次应用于编码器侧(例如,在用作参考块之前)和解码器侧(在显示之前)的重建图像块。
[0129]
去块效应滤波器1043用于去除由于基于块的帧间和帧内预测产生的块状边缘。去块效应滤波器1043扫描图像部分(例如,图像条带),以确定在分割边界处出现的色度值和/或亮度值的不连续性。然后,去块效应滤波器1043将平滑函数应用于块边界,以去除这些不连续性。去块效应滤波器1043的强度可以因发生在与块边界相邻的区域内的空间活动(例如,亮度/色度分量的变化)而异。
[0130]
sao滤波器1045用于去除与编码过程导致的样本失真相关的伪影。编码器侧的sao滤波器1045根据相关的去块效应滤波边缘形状和/或方向将重建图像中的经去块效应滤波的样本分类为几个类别。然后,根据类别确定偏移,并将偏移添加到样本中。偏移接着编码到码流中,解码器侧的sao滤波器1045使用该偏移。sao滤波器1045去除带状伪影(值带而不是平滑过渡)和振铃伪影(清晰边缘附近的杂波信号)。
[0131]
编码器侧的alf 1047用于将重建图像与原始图像进行比较。alf 1047通过基于维纳(wiener)的自适应滤波器等确定描述重建图像与原始图像之间差异的系数。这些系数编码到码流中,并由解码器侧的alf 1047用来去除重建图像与原始图像之间的差异。
[0132]
经过环内滤波器1000滤波的图像数据输出到图像缓冲器1023,其基本上类似于解码图像缓冲器223、323和/或423。如上所述,去块效应滤波器1043、sao滤波器1045和/或alf 1047可以通过loop_filter_across_subpic_enabled_flag和/或loop_filter_across_tiles_enabled_flag等标志在子图像边界和/或分块边界处禁用。
[0133]
图11为包括译码工具参数以支持对图像中的子图像进行解码的示例性码流1100的示意图。例如,码流1100可以由编解码系统200和/或编码器300生成,以由编解码系统200和/或解码器400进行解码。又如,码流1100可以由编码器在方法100的步骤109中生成,以供解码器在步骤111中使用。此外,码流1100可以包括经编码图像500、对应的子图像510和/或相关的经译码块,例如当前块801和/或901,当前块801和/或901可以根据单向帧间预测600和/或双向帧间预测700使用根据模式900生成的候选列表进行译码。码流1100还可以包括用于配置环内滤波器1000的参数。
[0134]
码流1100包括序列参数集(sequence parameter set,sps)1110、多个图像参数集(picture parameter set,pps)1111、多个条带头1115以及图像数据1120。sps 1110包括码流1100中包括的视频序列中所有图像共用的序列数据。这些数据可以包括图像大小、位深
度、译码工具参数、码率限制等。pps 1111包括应用于整个图像的参数。因此,视频序列中的每个图像可以参考pps 1111。需要说明的是,虽然每个图像都参考pps 1111,但在一些示例中,单个pps 1111可以包括多个图像的数据。例如,可以根据类似的参数对多个类似的图像进行编码。在这种情况下,单个pps 1111可以包括这样类似图像的数据。pps 1111可以表示可用于对应图像中条带的译码工具、量化参数、偏移等。条带头1115包括图像中的每个条带特有的参数。因此,视频序列中的每个条带可以有一个条带头1115。条带头1115可以包括条带类型信息、图像顺序编号(picture order count,poc)、参考图像列表、预测权重、分块入口点、去块效应滤波参数等。需要说明的是,在一些上下文中,条带头1115还可以称为分块组头。
[0135]
图像数据1120包括根据帧间预测和/或帧内预测进行编码的视频数据以及对应的变换量化残差数据。例如,视频序列包括译码为图像数据的多个图像。图像是视频序列中的单帧,因此在显示视频序列时通常显示为单个单元。但是,子图像可以显示用来实现某些技术,例如虚拟现实、画中画等。图像都是参考pps 1111。如上所述,图像分成子图像、分块和/或条带。在一些系统中,条带称为包括分块的分块组。条带和/或包括分块的分块组参考条带头1115。这些条带进一步分成ctu和/或ctb。根据编码树,将ctu/ctb进一步划分为编码块。然后可以根据预测机制对编码块进行编码/解码。
[0136]
码流1100中的参数集包括可以用于实现本文所述示例的各种数据。为了支持第一示例性实现方式,码流1100中的sps 1110包括与指定子图像相关的子图像当作图像处理标志(sub

pic treated as a pic flag)1131。在一些示例中,子图像当作图像处理标志1131表示为subpic_treated_as_pic_flag[i],其中,i为与该标志相关的子图像的索引。例如,子图像当作图像处理标志1131可以被设置为1,表示编码视频序列中(图像数据1120中)的每个经译码图像的第i个子图像在除环内滤波操作以外的解码过程中当作图像处理。子图像当作图像处理标志1131可以用于当前图像中的当前子图像已经根据帧间预测进行译码的情况下。当子图像当作图像处理标志1131被设置为表示当前子图像作为图像处理时,当前块的候选运动矢量的候选列表可以通过将并置块中包括的且指向当前子图像外部的并置运动矢量排除在候选列表之外来确定。这样确保在当前子图像与其它子图像分开提取时,指向当前子图像外部的运动矢量不被选择,避免了相关错误。
[0137]
在一些示例中,当前块的运动矢量的候选列表是根据时间亮度运动矢量预测确定的。例如,时间亮度运动矢量预测可以用于以下情况中:当前块是亮度样本组成的亮度块,当前块的选定当前运动矢量是指向参考块中的参考亮度样本的时间亮度运动矢量,以及当前块是根据参考亮度样本进行译码的。在这种情况下,时间亮度运动矢量预测根据以下内容执行:
[0138]
xcolbr=xcb cbwidth;
[0139]
ycolbr=ycb cbheight;
[0140]
rightboundarypos=subpic_treated_as_pic_flag[subpicidx]?
[0141]
subpicrightboundarypos:pic_width_in_luma_samples

1;
[0142]
botboundarypos=subpic_treated_as_pic_flag[subpicidx]?
[0143]
subpicbotboundarypos:pic_height_in_luma_samples

1,
[0144]
其中,xcolbr和ycolbr表示并置块的位置,xcb和ycb表示相对于当前图像的左上
方样本的当前块的左上方样本,cbwidth表示当前块的宽度,cbheight表示当前块的高度,subpicrightboundarypos表示子图像的右边界的位置,subpicbotboundarypos表示子图像的下边界的位置,pic_width_in_luma_samples表示以亮度样本为单位测量的当前图像的宽度,pic_height_in_luma_samples表示以亮度样本为单位测量的当前图像的高度,botboundarypos表示子图像的下边界的计算位置,rightboundarypos表示子图像的右边界的计算位置,subpicidx表示子图像的索引;当ycb>>ctblog2sizey不等于ycolbr>>ctblog2sizey时,并置运动矢量排除在外,其中,ctblog2sizey表示编码树块的大小。
[0145]
子图像当作图像处理标志1131还可以用于第二示例性实现方式。如在第一示例中一样,子图像当作图像处理标志1131可以用于当前图像中的当前子图像已经根据帧间预测进行译码的情况下。在本示例中,运动矢量可以针对子图像中的当前块(例如,从候选列表中)确定。当设置有子图像当作图像处理标志1131时,限幅函数可以应用于参考块中的样本位置。样本位置是图像中的位置,可以包括亮度值和/或一对色度值组成的单个样本。然后,插值滤波器可以应用于运动矢量指向当前子图像外部的情况下。这种限幅函数确保插值滤波器不依赖于来自相邻子图像的数据,以保持子图像分开,从而支持单独提取。
[0146]
限幅函数可以应用于亮度样本双线性插值过程中。亮度样本双线性插值过程可以接收包括整样本单位的亮度位置(xintl,yintl)的输入。亮度样本双线性插值过程输出预测亮度样本值(predsamplelxl)。限幅函数应用于样本位置,如下所述。当subpic_treated_as_pic_flag[subpicidx]等于1时,以下内容适用:
[0147]
xinti=clip3(subpicleftboundarypos,subpicrightboundarypos,xintl i),
[0148]
yinti=clip3(subpictopboundarypos,subpicbotboundarypos,yintl i),
[0149]
其中,subpic_treated_as_pic_flag表示设置为表示子图像当作子图像处理的标志,subpicidx表示子图像的索引,xinti和yinti表示索引i处的限幅后样本位置,subpicrightboundarypos表示子图像的右边界的位置,subpicleftboundarypos表示子图像的左边界的位置,subpictopboundarypos表示子图像的上边界的位置,subpicbotboundarypos表示子图像的下边界的位置,clip3为根据下式的限幅函数:
[0150][0151]
其中,x、y和z是数字输入值。
[0152]
限幅函数还可以应用于亮度样本8抽头插值滤波过程中。亮度样本8抽头插值滤波过程接收包括整样本单位的亮度位置(xintl,yintl)的输入。亮度样本双线性插值过程输出预测亮度样本值(predsamplelxl)。限幅函数应用于样本位置,如下所述。当subpic_treated_as_pic_flag[subpicidx]等于1时,以下内容适用:
[0153]
xinti=clip3(subpicleftboundarypos,subpicrightboundarypos,xintl i

3),
[0154]
yinti=clip3(subpictopboundarypos,subpicbotboundarypos,yintl i

3),
[0155]
其中,subpic_treated_as_pic_flag表示设置为表示子图像当作图像处理的标志,subpicidx表示子图像的索引,xinti和yinti表示索引i处的限幅后样本位置,subpicrightboundarypos表示子图像的右边界的位置,subpicleftboundarypos表示子图像的左边界的位置,subpictopboundarypos表示子图像的上边界的位置,
subpicbotboundarypos表示子图像的下边界的位置,clip3如上所述。
[0156]
限幅函数还可以应用于色度样本插值过程中。色度样本插值过程接收包括整样本单位的色度位置(xintc,yintc)的输入。色度样本插值过程输出预测色度样本值(predsamplelxc)。限幅函数应用于样本位置,如下所述。当subpic_treated_as_pic_flag[subpicidx]等于1时,以下内容适用:
[0157]
xinti=clip3(subpicleftboundarypos/subwidthc,subpicrightboundarypos/subwidthc,xintc i),
[0158]
yinti=clip3(subpictopboundarypos/subheightc,subpicbotboundarypos/subheightc,yintc i),
[0159]
其中,subpic_treated_as_pic_flag表示设置为表示子图像当作图像处理的标志,subpicidx表示子图像的索引,xinti和yinti表示索引i处的限幅后样本位置,subpicrightboundarypos表示子图像的右边界的位置,subpicleftboundarypos表示子图像的左边界的位置,subpictopboundarypos表示子图像的上边界的位置,subpicbotboundarypos表示子图像的下边界的位置,subwidthc和subheightc表示亮度样本与色度样本之间的水平和垂直采样率比,clip3如上所述。
[0160]
sps 1110中的跨子图像环路滤波器启用标志1132可以用于第三示例性实现方式。跨子图像环路滤波器启用标志1132可以被设置为控制是否跨指定子图像的边界采用滤波。例如,跨子图像环路滤波器启用标志1132可以表示为loop_filter_across_subpic_enabled_flag。跨子图像环路滤波器启用标志1132在表示环内滤波操作可以跨子图像的边界执行时,可以被设置为1,或者在表示环内滤波操作不跨子图像的边界执行时,可以被设置为0。因此,根据跨子图像环路滤波器启用标志1132的值,滤波过程可以跨子图像的边界执行,也可以不跨子图像的边界执行。滤波操作可以包括应用去块效应滤波器1043、alf 1047和/或sao滤波器1045。以这种方式,滤波器可以对于编码以用于单独提取的子图像禁用,而对于编码以用于成组显示的子图像启用。
[0161]
pps 1111中的跨分块环路滤波器启用标志1134可以用于第四示例性实现方式。跨分块环路滤波器启用标志1134可以被设置为控制是否跨指定分块的边界采用滤波。例如,跨分块环路滤波器启用标志1134可以表示为loop_filter_across_tiles_enabled_flag。跨分块环路滤波器启用标志1134在表示环内滤波操作可以跨分块的边界执行时,可以被设置为1,或者在表示环内滤波操作不跨分块的边界执行时,可以被设置为0。因此,根据跨分块环路滤波器启用标志1134的值,滤波过程可以跨分块的边界执行,也可以不跨分块的边界执行。滤波操作可以包括应用去块效应滤波器1043、alf 1047和/或sao滤波器1045。
[0162]
sps 1110中的子图像数据1133可以用于第五示例性实现方式。子图像数据1133可以包括图像数据1120中的每个子图像的宽度、高度和偏移。例如,每个子图像的宽度和高度可以在子图像数据1133中以ctb为单位描述。在一些示例中,子图像的宽度和高度分别作为subpic_width_minus1和subpic_height_minus1存储在子图像数据1133中。此外,每个子图像的偏移可以在子图像数据1133中以ctu为单位描述。例如,每个子图像的偏移可以表示为子图像中的左上方ctu的垂直位置和水平位置。具体地,子图像的偏移可以表示为图像中的左上方ctu与子图像中的左上方ctu之间的差值。在一些示例中,子图像中的左上方ctu的垂直位置和水平位置分别作为subpic_ctu_top_left_y和subpic_ctu_top_left_x存储在子
图像数据1133中。本示例性实现方式以ctb/ctu为单位而不是以分块为单位描述子图像数据1133中的子图像。这样,子图像还可以用于分块未用于对应的图像/子图像中的情况下。
[0163]
sps 1110中的子图像数据1133、条带头1115中的条带地址1136和条带头1115中的条带子图像id 1135可以用于第六示例性实现方式。子图像数据1133可以如第五示例性实现方式中所述实现。条带地址1136可以包括与条带头1115相关的条带(例如,在图像数据1120中)的子图像级条带索引。例如,条带是根据条带在子图像中的位置而不是根据条带在图像中的位置进行索引的。条带地址1136可以存储在变量slice_address中。条带子图像id 1135包括子图像的id,该子图像包括与条带头1115相关的条带。具体地,条带子图像id 1135可以参考子图像数据1133中的对应子图像的描述(例如,宽度、高度和偏移)。条带子图像id 1135可以存储在变量slice_subpic_id中。因此,条带地址1136被指示(signal)为基于条带在由条带子图像id 1135表示的子图像中的位置的索引,如子图像数据1133中所描述。以这种方式,条带在子图像中的位置还可以在子图像被单独提取并且从码流1100中省略其它子图像的情况下确定。这是因为这种寻址方案将每个子图像的地址与其它子图像分开。因此,当提取子图像时,不需要重写条带头1115,如在寻址方案中所要求的那样,在寻址方案中,条带是基于条带在图像中的位置进行寻址的。需要说明的是,这种方法可以用于条带是矩形/方形条带(与光栅扫描条带相对)的情况下。例如,pps 1111中的rect_slice_flag可以被设置为1,表示条带是矩形/方形条带。
[0164]
在一些视频译码系统中使用的子图像的示例性实现方式如下所述。与cvs中可能存在的子图像相关的信息可以指示在sps中。这种指示可以包括以下信息。cvs的每个图像中存在的子图像的数量可以包括在sps中。在sps或cvs的上下文中,所有接入单元(access unit,au)的并置子图像可以统称为子图像序列。用于进一步表示与每个子图像的属性相关的信息的环路也可以包括在sps中。这些信息可以包括子图像标识、子图像的位置(例如,子图像中的左上角亮度样本与图像中的左上角亮度样本之间的偏移距离)以及子图像的大小。另外,sps还可以用于指示每个子图像是否为运动约束子图像,其中,运动约束子图像是包括mcts的子图像。每个子图像的档次(profile)、层次(tier)和级别(level)信息可以包括在码流中,除非这些信息是可推导的。这些信息可以用于通过从包括整个图像的原始码流中提取子图像而产生的提取码流的档次、层次和级别信息。每个子图像的档次和层次可以推导为与原始码流的档次和层次相同。每个子图像的级别可以显式指示。这种指示可以出现在上述环路中。序列级假设参考解码(hypothetical reference decoder,hrd)参数可以指示在每个子图像(或每个子图像序列)的sps的视频可用信息(video usability information,vui)部分中。
[0165]
当图像没有分割成两个或两个以上子图像时,子图像的属性(例如,位置、大小等),除子图像id以外,可能不会指示在码流中。当提取cvs的图像中的子图像时,新码流中的每个接入单元可能不包括子图像,因为新码流中的每个au中所产生的图像数据没有分割成多个子图像。因此,位置和大小等子图像属性可以从sps中省略,因为这些信息可以从图像属性中推导出。但是,子图像标识仍然可以指示,因为这个id可以由包括在提取子图像中的视频编码层(video coding layer,vcl)nal单元/分块组参考。在提取子图像时,需要避免更改子图像id,以减少资源使用。
[0166]
例如,子图像在图像中的位置(x偏移和y偏移)可以按亮度样本为单位指示,并且
可以表示子图像中的左上角亮度样本与图像中的左上角亮度样本之间的距离。又如,子图像在图像中的位置可以按最小译码亮度块大小(mincbsizey)为单位指示,并且可以表示子图像中的左上角亮度样本与图像中的左上角亮度样本之间的距离。又如,子图像位置偏移的单位可以由参数集中的语法元素显式指示,该单位可以是ctbsizey、mincbsizey、亮度样本或其它值。编解码器可能要求,当子图像的右边界与图像的右边界不重合时,子图像的宽度应该是亮度ctu大小(ctbsizey)的整数倍。同理,编解码器还可能要求,当子图像的下边界与图像的下边界不重合时,子图像的高度应该是ctbsizey的整数倍。编解码器还可能要求,当子图像的宽度不是亮度ctu大小的整数倍时,子图像位于图像最右边的位置上。同理,编解码器也可能要求,当子图像的高度不是亮度ctu大小的整数倍时,子图像位于图像最下方的位置上。当子图像的宽度以亮度ctu大小为单位指示,且子图像的宽度不是亮度ctu大小的整数倍时,以亮度样本为单位的实际宽度可以根据子图像的偏移位置、以亮度ctu大小为单位的子图像宽度和以亮度样本为单位的图像宽度推导出。同理,当子图像的高度以亮度ctu大小为单位指示,且子图像的高度不是亮度ctu大小的整数倍时,以亮度样本为单位的实际高度可以根据子图像的偏移位置、以亮度ctu大小为单位的子图像高度和以亮度样本为单位的图像高度推导出。
[0167]
对于任何子图像,子图像id可以与子图像索引不同。子图像索引可以是指示在sps中的子图像环路中的子图像的索引。可选地,子图像索引可以是相对于图像按照子图像光栅扫描顺序分配的索引。当每个子图像的子图像id的值与其子图像索引相同时,子图像id可以指示或推导出。当每个子图像的子图像id与其子图像索引不同时,子图像id显式指示。用于指示子图像id的比特数可以指示在包括子图像属性的同一参数集中(例如,在sps中)。出于某些目的,子图像id的一些值可以保留。这种值保留可以如下所述。当分块组/条带头包括子图像id来表示哪个子图像包括分块组时,值0可以保留并且可以不用于子图像,以确保分块组/条带头起始处的前几个比特不全为0,从而避免生成防伪码。当图像中的子图像没有无重叠、无间隙地覆盖图像的整个区域时,一个值(例如,值1)可以针对不属于任何子图像的分块组保留。可选地,剩余区域的子图像id可以显式指示。用于指示子图像id的比特数可以约束如下。取值范围需要足够唯一地标识图像中的所有子图像,包括子图像id的保留值。例如,用于子图像id的最小比特数可以为ceil(log2(图像中子图像的数量 保留子图像id的数量)的值。
[0168]
环路中的子图像的合并可能需要无间隙、无重叠地覆盖整个图像。当应用这种约束条件时,每个子图像存在一个标志,表示子图像是否为运动约束子图像,这表示可以提取该子图像。可选地,子图像的合并可能不覆盖整个图像。但是,图像中的子图像之间可能没有重叠。
[0169]
子图像id可以紧跟在nal单元头之后,以辅助子图像提取过程,所以提取器不需要知道其余的nal单元比特。对于vcl nal单元,子图像id可以存在于分块组头的前几个比特中。对于非vcl nal单元,以下内容可以适用。子图像id可能不需要紧跟在sps的nal单元头之后。关于pps,当同一图像中的所有分块组都约束为参考同一pps时,子图像id不需要紧跟在nal单元头之后。另一方面,如果同一图像中的分块组可以参考不同pps,则子图像id可以存在于pps的前几个比特中(例如,紧跟在pps nal单元头之后)。在这种情况下,一个图像中的任意两个分块组不可以共用同一pps。可选地,当同一图像中的分块组可以参考不同pps,
且同一图像中的不同分块组还可以共用同一pps时,pps语法中不存在子图像id。可选地,当同一图像中的分块组可以参考不同pps,且同一图像中的不同分块组还可以共用同一pps时,pps语法中存在子图像id列表。该列表表示pps应用到的子图像。对于其它非vcl nal单元,如果非vcl单元适用于图像级(例如,接入单元分隔符、序列结束、码流结束等)或以上级别,则子图像id不需要紧跟在其nal单元头之后。否则,子图像id可以紧跟在nal单元头之后。
[0170]
各个子图像内的分块分割可以指示在pps中,但同一图像中的分块组可以参考不同pps。在这种情况下,分块在每个子图像中进行分组,而不是跨图像进行分组。因此,这样情况下的分块分组概念包括将子图像分割成分块的方式。可选地,子图像参数集(sub

picture parameter set,spps)可以用于描述各个子图像内的分块分割。spps通过采用参考sps id的语法元素来参考sps。spps可以包括子图像id。出于子图像提取目的,参考子图像id的语法元素是spps中的第一个语法元素。spps包括分块结构,表示列数、行数、均匀分块间距等。spps可以包括标志来表示环路滤波器是否跨相关子图像边界启用。可选地,每个子图像的子图像属性可以指示在spps中,而不是指示在sps中。各个子图像内的分块分割可以指示在pps中,但同一图像中的分块组可以参考不同pps。spps一旦激活可以按照解码顺序持续一系列连续au,但可以在不是cvs起始的au处去激活/激活。在包括多个子图像的单层码流的解码过程中,多个spps可以在任何时刻处于活动状态,而且spps可以被au的不同子图像共用。可选地,spps和pps可以合并为一个参数集。为了实现这种情况,包括在同一子图像中的所有分块组可能约束为参考spps和pps合并得到的同一参数集。
[0171]
用于指示子图像id的比特数可以指示在nal单元头中。这种信息存在时有助于子图像提取过程解析nal单元载荷起始的子图像id值(例如,紧跟在nal单元头之后的前几个比特)。对于这种指示,nal单元头中的一些保留位可以用于避免增加nal单元头的长度。用于这样指示的比特数可以覆盖sub

picture

id

bit

len的值。例如,vvc nal单元头中的7个保留比特中的4个比特可以用于此目的。
[0172]
当对子图像进行解码时,每个编码树块的位置,表示为垂直ctb位置(xctb)和水平ctb位置(yctb),被调整为图像中的实际亮度样本位置,而不是子图像中的亮度样本位置。以这种方式,由于所有事物都解码为好像位于图像中而不是子图像中,所以可以避免从每个参考图像中提取并置子图像。为了调整编码树块的位置,变量subpicturexoffset和subpictureyoffset可以根据子图像位置(subpic_x_offset和subpic_y_offset)推导出。这两个变量的值可以分别与子图像中的每个编码树块的亮度样本位置x和y坐标的值相加。子图像提取过程可以定义如下。该过程的输入包括待提取的目标子图像。待提取的目标子图像可以按照子图像id或子图像位置的形式输入。当该输入是子图像的位置时,相关子图像id可以通过解析sps中的子图像信息解析出。对于非vcl nal单元,以下内容适用。sps中与图像大小和级别相关的语法元素可以随着子图像的大小和级别信息而更新。以下非vcl nal单元不会通过提取改变:pps、接入单元分隔符(access unit delimiter,aud)、序列结束(end of sequence,eos)、码流结束(end of bitstream,eob)以及任何其它适用于图像级或以上级别的非vcl nal单元。子图像id不等于目标子图像id的剩余非vcl nal单元可以被去除。子图像id不等于目标子图像id的vcl nal单元也可以被去除。
[0173]
子图像嵌套sei消息可以用于嵌套子图像集的au级或子图像级sei消息。子图像嵌
套sei消息携带的数据可以包括缓冲周期、图像定时和非hrd sei消息。这个sei消息的语法和语义可以如下所述。对于系统操作,例如,全向媒体格式(omnidirectional media format,omaf)环境,覆盖视角的子图像序列集可以由omaf播放器请求和解码。因此,序列级sei消息可以携带统一包括矩形或方形图像区域的子图像序列集的信息。该信息可以由系统使用,该信息表示最小解码能力以及子图像序列集的码率。该信息包括只有子图像序列集的码流的级别、码流的码率,可选地包括为子图像序列集指定的子码流提取过程。
[0174]
上述实现方式存在几个问题。图像的宽度和高度和/或子图像的宽度/高度/偏移的指示效率不高。指示这些信息可以节省更多比特。当子图像大小和位置信息指示在sps中时,pps包括分块配置。此外,pps可以由同一图像中的多个子图像共用。因此,num_tile_columns_minus1和num_tile_rows_minus1的取值范围可以更明确地说明。此外,表示子图像是否是运动约束子图像的标志的语义没有明确说明。每个子图像序列都必须指示级别。但是,当子图像序列不能独立解码时,指示子图像的级别没有用处。此外,在一些应用中,一些子图像序列可以与至少一个其它子图像序列一起解码和显示。因此,指示这些子图像序列中的单个子图像序列的级别可能没有用处。此外,确定每个子图像的定级别值可能会给编码器带来负担。
[0175]
随着独立可解码的子图像序列的引入,需要独立提取和解码图像中某些区域的方案可能无法根据分块组实现。因此,分块组id的显式指示可能没有用处。此外,pps语法元素pps_seq_parameter_set_id和loop_filter_across_tiles_enabled_flag中的每个语法元素的值在经译码图像的分块组头参考的所有pps中可以是相同的。这是因为活动sps不可以在cvs中改变,并且loop_filter_across_tiles_enabled_flag的值对于根据分块用于并行处理的图像中的所有分块可以是相同的。是否可以在图像中混合矩形分块组和光栅扫描分块组需要明确说明。属于不同图像并在cvs中采用相同子图像id的子图像是否可以使用不同的分块组模式也需要说明。时间亮度运动矢量预测的推导过程可能无法将子图像边界当作时间运动矢量预测(temporal motion vector prediction,tmvp)中的图像边界处理。此外,亮度样本双线性插值过程、亮度样本8抽头插值滤波过程和色度样本插值过程可以不将子图像边界当作运动补偿中的图像边界处理。另外,用于控制子图像边界处的去块效应滤波操作、sao滤波操作和alf滤波操作的机制也需要说明。
[0176]
随着独立可解码的子图像序列的引入,loop_filter_across_tile_groups_enabled_flag可能不太有用。这是因为出于并行处理目的禁用环内滤波操作也可以通过将loop_filter_across_tile_groups_enabled_flag设置为0来满足。此外,禁用环内滤波操作以实现图像中的某些区域的独立提取和解码也可以通过将loop_filter_across_sub_pic_enabled_flag设置为0来满足。因此,进一步说明根据loop_filter_across_tile_groups_enabled_flag禁用跨分块组边界的环内滤波操作的过程会不必要地给解码器带来负担并浪费比特。另外,如上所述的解码过程可能无法禁用跨分块边界的alf滤波操作。
[0177]
因此,本发明包括支持基于子图像的视频译码的设计。子图像是图像中的矩形区域或方形区域,可以或可以不使用与图像相同的解码过程进行独立解码。这些技术的描述以通用视频编码(versatile video coding,vvc)标准为基础。然而,这些技术还适用于其它视频编解码规范。
[0178]
在一些示例中,为图像宽度和高度语法元素以及语法元素子图像宽度/高度/
offset_x/offset_y的列表指示大小单位。所有语法元素都以xxx_minus1的形式指示。例如,当大小单位为64个亮度样本时,宽度值为99表示图像宽度为6400个亮度样本。同样的示例适用于这些语法元素中的其它元素。又如,以下一个或多个大小单位适用。可以为语法元素图像宽度和高度指示大小单位,以xxx_minus1为形式。为语法元素子图像宽度/高度/offset_x/offset_y的列表指示的大小单位可以是xxx_minus1的形式。又如,以下一个或多个大小单位适用。语法元素图像宽度和子图像宽度/offset_x的列表的大小单位可以按xxx_minus1的形式指示。语法元素图像高度和子图像高度/offset_y的列表的大小单位可以按xxx_minus1的形式指示。又如,以下一个或多个大小单位适用。以xxx_minus1为形式的语法元素图像宽度和高度可以按最小编码单元为单位指示。以xxx_minus1为形式的语法元素子图像宽度/高度/offset_x/offset_y可以按ctu或ctb为单位指示。图像右边界处的每个子图像的子图像宽度可以推导出。图像下边界处的每个子图像的子图像高度可以推导出。子图像宽度/高度/offset_x/offset_y的其它值都可以指示在码流中。在其它示例中,对于子图像具有均匀大小的情况,可以添加用于指示子图像的宽度和高度以及它们在图像中的位置的模式。当子图像包括相同的子图像行和子图像列时,子图像具有均匀大小。在这种模式下,子图像行的数量、子图像列的数量、每个子图像列的宽度和每个子图像行的高度都可以指示。
[0179]
又如,子图像宽度和高度的指示可以不包括在pps中。num_tile_columns_minus1和num_tile_rows_minus1的取值范围可以为0到整数值,例如1024,包括端值。又如,当参考pps的子图像包括多个分块时,通过存在标志(presence flag)调整的两个语法元素可以指示在pps中。这些语法元素用于以ctb为单位指示子图像宽度和高度,并表示参考pps的所有子图像的大小。
[0180]
又如,描述各个子图像的附加信息也可以指示。可以为每个子图像序列指示sub_pic_treated_as_pic_flag[i]等标志,以表示子图像序列中的子图像是否在解码过程中当作图像处理,以用于除环内滤波操作以外的目的。当sub_pic_treated_as_pic_flag[i]等于1时,只可以指示子图像序列符合的级别。子图像序列是具有相同子图像id的子图像组成的cvs。当sub_pic_treated_as_pic_flag[i]等于1时,还可以指示子图像序列的级别。这可以由所有子图像序列的标志控制,也可以由每个子图像序列的一个标志控制。又如,可以在不改变vcl nal单元的情况下实现子码流提取。这可以通过从pps中去除显式分块组id指示来实现。当rect_tile_group_flag等于1,表示矩形分块组时,规定tile_group_address的语义。tile_group_address可以包括子图像内的多个分块组中的分块组的分块组索引。
[0181]
又如,pps语法元素pps_seq_parameter_set_id和loop_filter_across_tiles_enabled_flag中的每个语法元素的值在经译码图像的分块组头参考的所有pps中可以是相同的。其它pps语法元素对于经译码图像的分块组头参考的不同pps可以不同。single_tile_in_pic_flag的值对于经译码图像的分块组头参考的不同pps可以不同。以这种方式,cvs中的一些图像可能只包括一个分块,而cvs中的其它一些图像可能包括多个分块。这样,图像中的一些子图像(例如,非常大的子图像)可以包括多个分块,而同一图像中的其它子图像(例如,非常小的子图像)只包括一个分块。
[0182]
又如,图像可以包括矩形扫描分块和光栅扫描分块组的混合。因此,图像中的一些子图像使用矩形/方形分块组模式,而其它子图像使用光栅扫描分块组模式。这种灵活性有
益于码流融合场景。可选地,约束条件可能要求图像中的所有子图像都应该使用相同的分块组模式。cvs中具有相同子图像id的不同图像中的子图像可以不使用不同的分块组模式。cvs中具有相同子图像id的不同图像中的子图像可以使用不同的分块组模式。
[0183]
又如,当子图像的sub_pic_treated_as_pic_flag[i]等于1时,用于子图像的时间运动矢量预测的并置运动矢量被限制为来自子图像的边界内。因此,处理子图像的时间运动矢量预测,就好像子图像边界是图像边界。此外,限幅操作被指定为亮度样本双线性插值过程、亮度样本8抽头插值滤波过程和色度样本插值过程的一部分,以在sub_pic_treated_as_pic_flag[i]等于1的子图像的运动补偿中,将子图像边界当做图像边界处理。
[0184]
又如,每个子图像都与loop_filter_across_sub_pic_enabled_flag等指示标志相关。该标志用于控制子图像边界处的环内滤波操作,并用于控制对应解码过程中的滤波操作。去块效应滤波过程可能不用于对与loop_filter_across_sub_pic_enabled_flag等于0的子图像的边界重合的子块边缘和变换块边缘译码。可选地,去块效应滤波过程不用于对与loop_filter_across_sub_pic_enabled_flag等于0的子图像的上边界或左边界重合的子块边缘和变换块边缘译码。可选地,去块效应滤波过程不用于对与sub_pic_treated_as_pic_flag[i]等于1或0的子图像的边界重合的子块边缘和变换块边缘译码。可选地,去块效应滤波过程不用于对与子图像的上边界或左边界重合的子块边缘和变换块边缘译码。当子图像的loop_filter_across_sub_pic_enabled_flag等于零时,限幅操作可以被指定来禁用跨子图像边界的sao滤波操作。当子图像的loop_filter_across_sub_pic_enabled_flag等于0时,限幅操作可以被指定来禁用跨子图像边界的alf滤波操作。loop_filter_across_tile_groups_enabled_flag也可以从pps中去除。因此,当loop_filter_across_tiles_enabled_flag等于0时,跨非子图像边界的分块组边界的环内滤波操作不会被禁用。环路滤波器操作可以包括去块效应滤波操作、sao滤波操作和alf滤波操作。又如,当分块的loop_filter_across_tiles_enabled_flag等于0时,限幅操作被指定来禁用跨分块边界的alf滤波操作。
[0185]
上述一个或多个示例中可以实现如下。子图像可以被定义为图像中的一个或多个分块组或条带组成的矩形区域或方形区域。处理元素的以下划分可以形成空间或分量分割:将每个图像划分为分量,将每个分量划分为ctb,将每个图像划分为子图像,将每个子图像划分为子图像中的分块列,将每个子图像划分为子图像中的分块行,将子图像中的每个分块列划分为分块,将子图像中的每个分块行划分为分块,以及将每个子图像划分为分块组。
[0186]
子图像内的ctb光栅和分块扫描过程可以如下所述。列表colwidth[i]表示以ctb为单位的第i个分块列的宽度,其中,i的取值范围为0到num_level1_tile_columns_minus1(包括端值)。该列表colwidth[i]推导如下:
[0187][0188]
列表rowheight[j]表示以ctb为单位的第j个分块行的高度,其中,j的取值范围为0到num_tile_rows_minus1(包括端值)。该列表rowheight[j]推导如下:
[0189][0190]
列表colbd[i]表示以ctb为单位的第i个分块列边界的位置,其中,i的取值范围为0到num_tile_columns_minus1 1(包括端值)。该列表colbd[i]推导如下:
[0191]
for(colbd[0]=0,i=0;i<=num_tile_columns_minus1;i )
[0192]
colbd[i 1]=colbd[i] colwidth[i]
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(6

3)
[0193]
列表rowbd[j]表示以ctb为单位的第j个分块行边界的位置,其中,j的取值范围为0到num_tile_rows_minus1 1(包括端值)。该列表rowbd[j]推导如下:
[0194]
for(rowbd[0]=0,j=0;j<=num_tile_rows_minus1;j )
[0195]
rowbd[j 1]=rowbd[j] rowheight[j]
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(6

4)
[0196]
列表ctbaddrrstots[ctbaddrrs]表示从子图像的ctb光栅扫描下的ctb地址到子图像的分块扫描下的ctb地址的转换,其中,ctbaddrrs的取值范围为0到subpicsizeinctbsy

1(包括端值)。该列表ctbaddrrstots[ctbaddrrs]推导如下:
[0197][0198]
列表ctbaddrtstors[ctbaddrts]表示从分块扫描下的ctb地址到子图像的ctb光栅扫描下的ctb地址的转换,其中,ctbaddrts的取值范围为0到subpicsizeinctbsy

1(包括端值)。该列表ctbaddrtstors[ctbaddrts]推导如下:
[0199]
for(ctbaddrrs=0;ctbaddrrs<subpicsizeinctbsy;ctbaddrrs )
ꢀꢀꢀꢀꢀꢀ
(6

6)
[0200]
ctbaddrtstors[ctbaddrrstots[ctbaddrrs]]=ctbaddrrs
[0201]
列表tileid[ctbaddrts]表示从分块扫描下的ctb地址到分块id的转换,其中,ctbaddrts的范围为0到subpicsizeinctbsy

1(包括端值)。该列表tileid[ctbaddrts]推导如下:
[0202][0203][0204]
列表numctusintile[tileidx]表示从分块索引到分块中ctu的数量的转换,其中,tileidx的取值范围为0到numtilesinsubpic

1(包括端值)。该列表numctusintile[tileidx]推导如下:
[0205]
for(j=0,tileidx=0;j<=num_tile_rows_minus1;j )
[0206]
for(i=0;i<=num_tile_columns_minus1;i ,tileidx )
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(6

8)
[0207]
numctusintile[tileidx]=colwidth[i]*rowheight[j]
[0208]
列表firstctbaddrts[tileidx]表示从分块id到分块中的第一个ctb的分块扫描下的ctb地址的转换,其中,tileidx的取值范围为0到numtilesinsubpic

1(包括端值)。该列表firstctbaddrts[tileidx]推导如下:
[0209][0210]
columnwidthinlumasamples[i]的值表示以亮度样本为单位的第i个分块列的宽度,设置为colwidth[i]<<ctblog2sizey,其中,i的取值范围为0到num_tile_columns_minus1(包括端值)。rowheightinlumasamples[j]的值表示以亮度样本为单位的第j个分块行的高度,设置为rowheight[j]<<ctblog2sizey,其中,j的范围为0到num_tile_rows_minus1(包括端值)。
[0211]
序列参数集rbsp语法举例如下:
[0212]
[0213][0214]
图像参数集rbsp语法举例如下:
[0215]
[0216][0217][0218]
通用分块组头语法举例如下:
[0219][0220]
编码树单元语法举例如下:
[0221][0222]
序列参数集rbsp语义举例如下:
[0223]
bit_depth_chroma_minus8表示色度阵列bitdepthc中的样本的位深度,色度量化参数范围偏移qpbdoffsetc的值如下所述:
[0224]
bitdepthc=8 bit_depth_chroma_minus8
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(7

4)
[0225]
qpbdoffsetc=6*bit_depth_chroma_minus8
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(7

5)
[0226]
bit_depth_chroma_minus8的取值范围应该为0到8(包括端值)。
[0227]
num_sub_pics_minus1 1表示cvs中的每个经译码图像中的子图像的数量。num_sub_pics_minus1的取值范围应该为0到1024(包括端值)。sub_pic_id_len_minus1 1表示用于表示sps中的语法元素sub_pic_id[i]和分块组头中的语法元素tile_group_sub_pic_id的比特数量。sub_pic_id_len_minus1的取值范围应该为ceil(log2(num_sub_pic_minus1 1)

1到9(包括端值)。sub_pic_level_present_flag被设置为1,表示语法元素sub_pic_level_idc[i]可能存在。sub_pic_level_present_flag被设置为0,表示语法元素sub_pic_level_idc[i]不存在。sub_pic_id[i]表示cvs中每个经译码图像中的第i个子图像的子图像id。sub_pic_id[i]的长度为(sub_pic_id_len_minus1 1)个比特。
[0228]
sub_pic_treated_as_pic_flag[i]被设置为1,表示cvs中每个经译码图像的第i个子图像在不包括环内滤波操作的解码过程中当作图像处理。sub_pic_treated_as_pic_flag[i]被设置为0,表示cvs中每个经译码图像中的第i个子图像在不包括环内滤波操作的解码过程中不当作图像处理。sub_pic_level_idc[i]表示第i个子图像序列符合的级别,其中,第i个子图像序列只包括cvs中的子图像id等于sub_pic_id[i]的子图像的vcl nal单元及其相关的非vcl nal单元。sub_pic_x_offset[i]表示第i个子图像中的左上角亮度样本相对于cvs中每个图像中的左上角亮度样本的水平偏移,以亮度样本为单位。当sub_pic_x_offset[i]不存在时,则推断sub_pic_x_offset[i]的值等于0。sub_pic_y_offset[i]表示第i个子图像中的左上角亮度样本相对于cvs中每个图像中的左上角亮度样本的垂直偏移,
以亮度样本为单位。当sub_pic_y_offset[i]不存在时,则推断sub_pic_y_offset[i]的值等于0。sub_pic_width_in_luma_samples[i]表示cvs中每个图像中的第i个子图像的宽度,以亮度样本为单位。当sub_pic_x_offset[i]和sub_pic_width_in_luma_samples[i]之和小于pic_width_in_luma_samples时,sub_pic_width_in_luma_samples[i]的值应该为ctbsizey的整数倍。当sub_pic_width_in_luma_samples[i]不存在时,则推断sub_pic_width_in_luma_samples[i]的值等于pic_width_in_luma_samples。sub_pic_height_in_luma_samples[i]表示cvs中每个图像中的第i个子图像的高度,以亮度样本为单位。当sub_pic_y_offset[i]与sub_pic_height_in_luma_samples[i]之和小于pic_height_in_luma_samples时,sub_pic_height_in_luma_samples[i]的值应该为ctbsizey的整数倍。当sub_pic_height_in_luma_samples[i]不存在时,则推断sub_pic_height_in_luma_samples[i]的值等于pic_height_in_luma_samples。
[0229]
对于码流一致性,以下约束条件适用。对于i和j的任何整数值,当i等于j时,sub_pic_id[i]和sub_pic_id[j]的值应该不相同。对于任意两个子图像subpica和subpicb,当subpica的子图像id小于subpicb的子图像id时,subpica的任何经译码分块组nal单元应该在解码顺序上位于subpicb的任何经译码分块组nal单元之后。子图像的形状应该确保每个子图像在解码时使其整个左边界和整个上边界由图像边界组成或由先前解码的一个或多个子图像的边界组成。
[0230]
spid值等于sub_pic_id[i]的列表subpicidx[spid]表示从子图像id到子图像索引的转换,其中,i的取值范围为0到num_sub_pics_minus1(包括端值)。该列表subpicidx[spid]推导如下:
[0231]
for(i=0;i<=num_sub_pics_minus1;i )
[0232]
subpicidx[sub_pic_id[i]]=i
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(7

5)
[0233]
log2_max_pic_order_cnt_lsb_minus4表示用于图像顺序编号的解码过程中的变量maxpicordercntlsb的值,如下所述:
[0234]
maxpicordercntlsb=2(log2_max_pic_order_cnt_lsb_minus4 4)
ꢀꢀꢀꢀꢀꢀ
(7

5)
[0235]
log2_max_pic_order_cnt_lsb_minus4的取值范围应该为0到12,包括端值。
[0236]
图像参数集rbsp语义举例如下:
[0237]
当pps语法元素pps_seq_parameter_set_id和loop_filter_across_tiles_enabled_flag存在时,其中每个语法元素的值在经译码图像的分块组头参考的所有pps中应该是相同的。pps_pic_parameter_set_id标识spps,以供其它语法元素参考。pps_pic_parameter_set_id的取值范围应该为0到63,包括端值。pps_seq_parameter_set_id表示活动sps的sps_seq_parameter_set_id的值。pps_seq_parameter_set_id的取值范围应该为0到15,包括端值。loop_filter_across_sub_pic_enabled_flag被设置为1,表示环内滤波操作可以跨参考pps的子图像的边界执行。loop_filter_across_sub_pic_enabled_flag被设置为0,表示环内滤波操作不跨参考pps的子图像的边界执行。
[0238]
single_tile_in_sub_pic_flag被设置为1,表示每个子图像中只包括一个分块参考pps。single_tile_in_sub_pic_flag被设置为0,表示每个子图像中包括多个分块参考pps。num_tile_columns_minus1 1表示分割子图像的分块列的数量。num_tile_columns_minus1的取值范围应该为0到1024(包括端值)。当不存在num_tile_columns_minus1时,则
推断num_tile_columns_minus1的值等于0。num_tile_rows_minus1 1表示分割子图像的分块行的数量。num_tile_rows_minus1的取值范围应该为0到1024(包括端值)。当不存在num_tile_rows_minus1时,则推断num_tile_rows_minus1的值等于0。变量numtilesinsubpic被设置为(num_tile_columns_minus1 1)*(num_tile_rows_minus1 1)。当single_tile_in_sub_pic_flag等于0时,numtilesinsubpic应该大于1。
[0239]
uniform_tile_spacing_flag被设置为1,表示分块列边界和分块行边界是跨子图像均匀分布的。uniform_tile_spacing_flag被设置为0,表示分块列边界和分块行边界不是均匀分布在子图像上,而是使用语法元素tile_column_width_minus1[i]和tile_row_height_minus1[i]显式指示。当uniform_tile_spacing_flag不存在时,则推断uniform_tile_spacing_flag的值等于1。tile_column_width_minus1[i] 1表示以ctb为单位的第i个分块列的宽度。tile_row_height_minus1[i] 1表示以ctb为单位的第i个分块行的高度。single_tile_per_tile_group被设置为1,表示参考pps的每个分块组包括一个分块。single_tile_per_tile_group被设置为0,表示参考pps的分块组可以包括多个分块。
[0240]
rect_tile_group_flag被设置为0,表示子图像中的每个分块组内的分块处于光栅扫描顺序下,并且分块组信息未指示在pps中。rect_tile_group_flag被设置为1,表示每个分块组内的分块覆盖子图像中的矩形区域或方形区域,并且分块组信息指示在pps中。当single_tile_per_tile_group_flag被设置为1时,rect_tile_group_flag被推断为1。num_tile_groups_in_sub_pic_minus1 1表示参考pps的每个子图像中的分块组的数量。num_tile_groups_in_sub_pic_minus1的取值范围应该为0到numtilesinsubpic

1(包括端值)。当num_tile_groups_in_sub_pic_minus1不存在且single_tile_per_tile_group_flag等于1时,则推断num_tile_groups_in_sub_pic_minus1的值等于numtilesinsubpic

1。
[0241]
top_left_tile_idx[i]表示位于子图像中的第i个分块组的左上角的分块的分块索引。对于任何不等于j的i,top_left_tile_idx[i]的值应该不等于top_left_tile_idx[j]的值。当top_left_til_idx[i]不存在时,则推断top_left_til_idx[i]的值等于i。语法元素top_left_til_idx[i]的长度为ceil(log2(numtilesinsubpic)个比特。bottom_right_tile_idx[i]表示位于子图像中的第i个分块组的右下角的分块的分块索引。当single_tile_per_tile_group_flag被设置为1时,则推断bottom_right_tile_idx[i]的值等于top_left_tile_idx[i]。语法元素bottom_right_tile_idx[i]的长度为ceil(log2(numtilesinsubpic))个比特。
[0242]
码流一致性的要求是,任何特定分块应该只包括在一个分块组中。变量numtilesintilegroup[i]表示子图像中的第i个分块组中的分块的数量,该变量与相关变量推导如下:
[0243][0244][0245]
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的值等于1。num_ref_idx_default_active_minus1[i] 1在i等于0时,表示num_ref_idx_active_override_flag等于0的p条带组或b条带组的变量numrefidxactive[0]的推断值;在i等于1时,表示num_ref_idx_active_override_flag等于0的b条带组的numrefidxactive[1]的推断值。num_ref_idx_default_active_minus1[i]的取值范围应该为0到14(包括端值)。
[0246]
通用分块组头语义举例如下。当分块组头语法元素tile_group_pic_order_cnt_lsb和tile_group_temporal_mvp_enabled_flag存在时,其中每个语法元素的值在经译码图像的所有分块组头中应该是相同的。当tile_group_pic_parameter_set_id存在时,tile_group_pic_parameter_set_id的值在经译码子图像的所有分块组头中应该是相同的。tile_group_pic_parameter_set_id表示当前使用的pps的pps_pic_parameter_set_id的值。tile_group_pic_parameter_set_id的取值范围应该为0到63(包括端值)。码流一致性的要求是,当前图像的temporalid的值应该大于或等于当前图像中的分块组参考的每个pps的temporalid的值。tile_group_sub_pic_id标识分块组头所属的子图像。tile_group_sub_pic_id的长度为(sub_pic_id_len_minus1 1)个比特。tile_group_sub_pic_id的值对于经译码子图像的所有分块组头应该是相同的。
[0247]
变量subpicwidthinctbsy、subpicheightinctbsy和subpicsizeinctbsy推导如下:
[0248][0249]
通过调用ctb光栅扫描和分块扫描转换过程来推导以下变量:列表colwidth[i](i的取值范围为0到num_tile_columns_minus1,包括端值),表示第i个分块列的宽度,以ctb为单位;列表rowheight[j](j的取值范围为0到num_tile_rows_minus1,包括端值),表示第j个分块行的高度,以ctb为单位;列表colbd[i](i的取值范围为0到num_tile_columns_minus1 1,包括端值),表示第i个分块列边界的位置,以ctb为单位;列表rowbd[j](j的取值范围为0到num_tile_rows_minus1 1,包括端值),表示第j个分块行边界的位置,以ctb为单位;列表ctbaddrrstots[ctbaddrrs](ctbaddrrs的取值范围为0到subpicsizeinctbsy

1,包括端值),表示从子图像中的ctb光栅扫描下的ctb地址到子图像中的分块扫描下的ctb地址的转换;列表ctbaddrtstors[ctbaddrts](ctbaddrts的取值范围为0到subpicsizeinctbsy

1,包括端值),表示子图像中的分块扫描下的ctb地址到子图像中的ctb光栅扫描下的ctb地址的转换;列表tileid[ctbaddrts](ctbaddrts的取值范围为0到subpicsizeinctbsy

1,包括端值),表示子图像中的分块扫描下的ctb地址到分块id的转换;列表numctusintile[tileidx](tileidx的取值范围为0到numtilesinsubpic

1,包括端值),表示从分块索引到分块中的ctu数量的转换;列表firstctbaddrts[tileidx](tileidx
的取值范围为0到numtilesinsubpic

1,包括端值),表示从分块id到分块中的第一个ctb的分块扫描下的ctb地址的转换;列表columnwidthinlumasamples[i](i的取值范围为0到num_tile_columns_minus1,包括端值),表示第i个分块列的宽度,以亮度样本为单位;列表rowheightinlumasamples[j](j的取值范围为0到num_tile_rows_minus1,包括端值),表示第j个分块行的高度,以亮度样本为单位。
[0250]
columnwidthinlumasamples[i](i的取值范围为0到num_tile_columns_minus1,包括端值)和rowheightinlumasamples[j](j的取值范围为0到num_tile_rows_minus1,包括端值)的值应该均大于0。变量subpicleftboundarypos、subpictopboundarypos、subpicrightboundarypos和subpicbotboundarypos推导如下:
[0251][0252]
对于当前子图像中的每个分块,索引i=0..numtilesinsubpic

1,变量tileleftboundarypos[i]、tiletopboundarypos[i]、tilerightboundarypos[i]和tilebotboundarypos[i]推导如下:
[0253]
tilecolidx=i%(num_tile_columns_minus1 1)
[0254]
tilerowidx=i/(num_tile_columns_minus1 1)
[0255]
tileleftboundarypos[i]=subpicleftboundarypos (colbd[tilecolidx]<<ctblog2sizey))
[0256]
tilerightboundarypos[i]=subpicleftboundarypos
[0257]
((colbd[tilecolidx] colwidth[tilecolidx])<<ctblog2sizey)
–1[0258]
if(tilerightboundarypos[i]>pic_width_in_luma_samples

1)
ꢀꢀꢀꢀꢀꢀꢀ
(7

41)
[0259]
tilerightboundarypos[i]=pic_width_in_luma_samples
–1[0260]
tiletopboundarypos[i]=subpictopboundarypos (rowbd[tilerowidx]<<ctblog2sizey)
[0261]
tilebotboundarypos[i]=subpictopboundarypos
[0262]
((rowbd[tilerowidx] rowheight[tilerowidx])<<ctblog2sizey)
–1[0263]
if(tilebotboundarypos[i]>pic_height_in_luma_samples

1)
[0264]
tilebotboundarypos[i]=pic_height_in_luma_samples
‑1[0265]
tile_group_address表示分块组中的第一个分块的分块地址。如果tile_group_address不存在时,则推断tile_group_address的值等于0。如果rect_tile_group_flag等于0,则以下情况适用:分块地址为分块id;tile_group_address的长度为ceil(log2(numtilesinsubpic))个比特;tile_group_address的取值范围应该为0到numtilesinsubpic

1(包括端值)。否则(rect_tile_group_flag等于1),以下情况适用:分
块地址为子图像中的多个分块组中的分块组的分块组索引;tile_group_address的长度为ceil(log2(num_tile_groups_in_sub_pic_minus1 1))个比特;tile_group_address的取值范围应该为0到num_tile_groups_in_sub_pic_minus1(包括端值)。
[0266]
码流一致性的要求为以下约束条件适用。tile_group_address的值不应该等于同一经译码图像的任何其它经译码分块组nal单元的tile_group_address的值。子图像中的分块组应该按照它们tile_group_address值的递增顺序排列。子图像中的分块组的形状应该确保每个分块在解码时使其整个左边界和整个上边界由子图像边界组成或由先前解码的一个或多个分块的边界组成。
[0267]
num_tiles_in_tile_group_minus1在存在时表示分块组中的分块的数量减1。num_tiles_in_tile_group_minus1的取值范围应该为0到numtilesinsubpic

1(包括端值)。当num_tiles_in_tile_group_minus1不存在时,则推断num_tiles_in_tile_group_minus1的值等于0。变量numtilesincurrtilegroup表示当前分块组中的分块数量,tgtileidx[i]表示当前分块组中的第i个分块的分块索引,两者推导如下:
[0268][0269]
tile_group_type表示分块组的译码类型。
[0270]
时域亮度运动矢量预测的示例性推导过程如下。变量mvlxcol和availableflaglxcol推导如下:如果tile_group_temporal_mvp_enabled_flag等于0,则mvlxcol的两个分量都被设置为0,且availableflaglxcol被设置为0。否则(tile_group_temporal_mvp_enabled_flag等于1),以下按顺序执行的步骤适用:右下角并置运动矢量和右下边界样本位置推导如下:
[0271]
xcolbr=xcb cbwidth
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8

414)
[0272]
ycolbr=ycb cbheight
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8

415)
[0273]
rightboundarypos=sub_pic_treated_as_pic_flag[subpicidx[tile_group_subpic_id]]?
[0274]
subpicrightboundarypos:pic_width_in_luma_samples
–1ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8

415)
[0275]
botboundarypos=sub_pic_treated_as_pic_flag[subpicidx[tile_group_subpic_id]]?
[0276]
subpicbotboundarypos:pic_height_in_luma_samples
–1ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8

415)
[0277]
如果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的sbflag作为输入,调用并置运动矢量的推导过程,将输出赋值给mvlxcol和availableflaglxcol。否则,mvlxcol的两个分量都被设置为0,且availableflaglxcol被设置为0。
[0278]
示例性亮度样本双线性插值过程如下所述。对于i=0..1,以整样本为单位的亮度位置(xinti,yinti)推导如下:如果sub_pic_treated_as_pic_flag[subpicidx[tile_group_subpic_id]]等于1,则以下情况适用:
[0279]
xinti=clip3(subpicleftboundarypos,subpicrightboundarypos,xintl i)
ꢀꢀ
(8

458)
[0280]
yinti=clip3(subpictopboundarypos,subpicbotboundarypos,yintl i)
ꢀꢀꢀ
(8

458)
[0281]
否则(sub_pic_treated_as_pic_flag[subpicidx[tile_group_subpic_id]]等于0),则以下情况适用:
[0282]
xinti=sps_ref_wraparound_enabled_flag?
[0283]
cliph((sps_ref_wraparound_offset_minus1 1)*mincbsizey,picw,(xintl i)):
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8

459)
[0284][0285]
clip3(0,picw

1,xintl i)
[0286]
yinti=clip3(0,pich

1,yintl i)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8

460)
[0287]
示例性亮度样本8抽头插值滤波过程如下所述。对于i=0..7,以整样本为单位的亮度位置(xinti,yinti)推导如下:如果sub_pic_treated_as_pic_flag[subpicidx[tile_group_subpic_id]]等于1,则以下情况适用:
[0288]
xinti=clip3(subpicleftboundarypos,subpicrightboundarypos,xintl i

3)(8

830)
[0289]
yinti=clip3(subpictopboundarypos,subpicbotboundarypos,yintl i

3)(8

830)
[0290]
否则(sub_pic_treated_as_pic_flag[subpicidx[tile_group_subpic_id]]等于0),则以下情况适用:
[0291]
xinti=sps_ref_wraparound_enabled_flag?
[0292]
cliph((sps_ref_wraparound_offset_minus1 1)*mincbsizey,picw,xintl i

3):
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8

831)
[0293]
clip3(0,picw

1,xintl i

3)
[0294]
yinti=clip3(0,pich

1,yintl i

3)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8

832)
[0295]
示例性色度样本插值过程如下所述。变量xoffset被设置为(sps_ref_
wraparound_offset_minus1 1)*mincbsizey)/subwidthc。对于i=0..3,以整样本为单位的色度位置(xinti,yinti)推导如下:
[0296]
如果sub_pic_treated_as_pic_flag[subpicidx[tile_group_subpic_id]]等于1,则以下情况适用:
[0297]
xinti=clip3(subpicleftboundarypos/subwidthc,subpicrightboundarypos/subwidthc,xintl i)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8

844)
[0298]
yinti=clip3(subpictopboundarypos/subheightc,subpicbotboundarypos/subheightc,yintl i)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8

844)
[0299]
否则(sub_pic_treated_as_pic_flag[subpicidx[tile_group_subpic_id]]等于0),则以下情况适用:
[0300]
xinti=sps_ref_wraparound_enabled_flag?cliph(xoffset,picwc,xintc i

1):
ꢀꢀꢀꢀ
(8

845)
[0301]
clip3(0,picwc

1,xintc i

1)
[0302]
yinti=clip3(0,pichc

1,yintc i

1)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8

846)
[0303]
示例性去块效应滤波器过程如下所述。去块效应滤波器过程应用于图像中的所有译码子块边缘和变换块边缘,但以下类型的边缘除外:位于图像边界的边缘;与loop_filter_across_sub_pic_enabled_flag等于0的子图像的边界重合的边缘;与loop_filter_across_tiles_enabled_flag等于0的分块的边界重合的边缘;与tile_group_deblocking_filter_disabled_flag等于1的分块组中的或内的上边界或左边界重合的边缘;与所考虑分量的8
×
8样本网格边界不对应的边缘;边缘两侧都使用帧间预测的色度分量内的边缘;不是相关变换单元的边缘的色度变换块的边缘;跨intrasubpartitionssplit值不等于isp_no_split的编码单元的亮度变换块的边缘。
[0304]
一个方向的示例性去块效应滤波器过程如下所述。对于编码块宽度为log2cbw、编码块高度为log2cbh和编码块左上样本的位置为(xcb,ycb)的每个编码单元,当edgetype等于edge_ver且xcb%8等于0时,或当edgetype等于edge_hor且ycb%8等于0时,边缘通过以下按顺序执行的步骤进行滤波:编码块宽度ncbw被设置为1<<log2cbw,编码块高度ncbh被设置为1<<log2cbh。变量filteredgeflag推导如下:如果edgetype等于edge_ver且以下一个或多个条件为真(true),则filteredgeflag被设置为0:当前编码块的左边界是图像的左边界。当前编码块的左边界是子图像的左边界或右边界,loop_filter_across_sub_pic_enabled_flag等于0。当前编码块的左边界是分块的左边界,loop_filter_across_tiles_enabled_flag等于0。如果edgetype等于edge_hor且以下一个或多个条件为真,则变量filteredgeflag被设置为0。当前亮度编码块的上边界是图像的上边界。当前编码块的上边界是子图像的上边界或下边界,loop_filter_across_sub_pic_enabled_flag等于0。当前编码块的上边界是分块的上边界,loop_filter_across_tiles_enabled_flag等于0。否则,filteredgeflag被设置为1。
[0305]
示例性ctb修改过程如下所述。对于所有样本位置(xsi,ysj)和(xyi,yyj),其中,i=0..nctbsw

1,j=0..nctbsh

1,取决于包括覆盖recpicture[xsi][ysj]的编码块的编码单元的pcm_loop_filter_disabled_flag、pcm_flag[xyi][yyj]和cu_transquant_bypass_flag的值,以下情况适用。如果所有样本位置(xsik

,ysjk

)和(xyik

,yyjk

)(k=0..1)的
以下一个或多个条件为真,则edgeidx被设置为0。位置(xsik

,ysjk

)的样本在图像边界之外。位置(xsik

,ysjk

)的样本属于不同的子图像,并且样本recpicture[xsi][ysj]所属的分块组中的loop_filter_across_sub_pic_enabled_flag等于0。loop_filter_across_tiles_enabled_flag等于0,位置(xsik

,ysjk

)的样本属于不同的分块。
[0306]
亮度样本的示例性编码树块滤波过程如下所述。为了推导经滤波的重建亮度样本alfpicturel[x][y],当前亮度编码树块内的每个重建亮度样本recpicturel[x][y]滤波如下,其中,x,y=0..ctbsizey

1:在亮度样本的给定阵列recpicture内,每个对应的亮度样本(x,y)的位置(hx,vy)推导如下:如果包括位置(hx,vy)上的亮度样本的分块tilea的loop_filter_across_tiles_enabled_flag等于0,则假设变量tileidx为tilea的分块索引,则以下情况适用:
[0307]
hx=clip3(tileleftboundarypos[tileidx],tilerightboundarypos[tileidx],xctb x)
ꢀꢀꢀꢀꢀꢀꢀꢀ
(8

1140)
[0308][0309]
vy=clip3(tiletopboundarypos[tileidx],tilebotboundarypos[tileidx],yctb y)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8

1141)
[0310][0311]
否则,如果包括位置(hx,vy)上的亮度样本的子图像中的loop_filter_across_sub_pic_enabled_flag等于0,则以下情况适用:
[0312]
hx=clip3(subpicleftboundarypos,subpicrightboundarypos,xctb x)
ꢀꢀꢀꢀ
(8

1140)
[0313]
vy=clip3(subpictopboundarypos,subpicbotboundarypos,yctb y)
ꢀꢀ
(8

1141)
[0314]
否则:
[0315]
hx=clip3(0,pic_width_in_luma_samples

1,xctb x)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8

1140)
[0316]
vy=clip3(0,pic_height_in_luma_samples

1,yctb y)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8

1141)
[0317]
亮度样本的alf转置和滤波器索引的示例性推导过程如下所述。在亮度样本的给定阵列recpicture内,每个对应的亮度样本(x,y)的位置(hx,vy)推导如下:如果包括位置(hx,vy)上的亮度样本的分块tilea的loop_filter_across_tiles_enabled_flag等于0,则假设分块tileidx为分块a的分块索引,则以下情况适用:
[0318]
hx=clip3(tileleftboundarypos[tileidx],tilerightboundarypos[tileidx],x)
ꢀꢀꢀꢀ
(8

1140)
[0319]
vy=clip3(tiletopboundarypos[tileidx],tilebotboundarypos[tileidx],y)
ꢀꢀ
(8

1141)
[0320]
否则,如果包括位置(hx,vy)上的亮度样本的子图像的loop_filter_across_sub_pic_enabled_flag等于0,则以下情况适用:
[0321]
hx=clip3(subpicleftboundarypos,subpicrightboundarypos,x)
ꢀꢀꢀꢀ
(8

1140)
[0322]
vy=clip3(subpictopboundarypos,subpicbotboundarypos,y)
ꢀꢀꢀꢀꢀꢀ
(8

1141)
[0323]
否则:
[0324]
hx=clip3(0,pic_width_in_luma_samples

1,x)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8

1145)
[0325]
vy=clip3(0,pic_height_in_luma_samples

1,y)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8

1146)
[0326]
色度样本的示例性编码树块滤波过程如下所述。为了推导经滤波的重建色度样本alfpicture[x][y],当前色度编码树块内的每个重建色度样本recpicture[x][y]滤波如
下,其中,x,y=0..ctbsizec

1:色度样本的给定阵列recpicture内的每个对应的色度样本(x,y)的位置(hx,vy)推导如下。如果包括位置(hx,vy)上的色度样本的分块tilea的loop_filter_across_tiles_enabled_flag等于0,则假设tileidx为tilea的分块索引,则以下情况适用:
[0327]
hx=clip3(tileleftboundarypos[tileidx]/subwidthc,
[0328]
tilerightboundarypos[tileidx]/subwidthc,xctb x)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8

1140)
[0329]
vy=clip3(tiletopboundarypos[tileidx]/subwidthc,
[0330]
tilebotboundarypos[tileidx]/subwidthc,yctb y)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8

1141)
[0331]
否则,如果包括位置(hx,vy)上的色度样本的子图像的loop_filter_across_sub_pic_enabled_flag等于0,则以下情况适用:
[0332]
hx=clip3(subpicleftboundarypos/subwidthc,
[0333]
subpicrightboundarypos/subwidthc,xctb x)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8

1140)
[0334]
vy=clip3(subpictopboundarypos/subwidthc,
[0335]
subpicbotboundarypos/subwidthc,yctb y)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8

1141)
[0336]
否则:
[0337]
hx=clip3(0,pic_width_in_luma_samples/subwidthc

1,xctbc x)
ꢀꢀꢀ
(8

1177)
[0338]
vy=clip3(0,pic_height_in_luma_samples/subheightc

1,yctbc y) (8

1178)
[0339]
变量和推导如下:
[0340]
sum=alfcoeffc[0]*(recpicture[hx,vy 2] recpicture[hx,vy

2])
[0341]
alfcoeffc[1]*(recpicture[hx 1,vy 1] recpicture[hx

1,vy

1])
[0342]
alfcoeffc[2]*(recpicture[hx,vy 1] recpicture[hx,vy

1])
ꢀꢀꢀꢀꢀ
(8

1179)
[0343]
alfcoeffc[3]*(recpicture[hx

1,vy 1] recpicture[hx 1,vy

1])
[0344]
alfcoeffc[4]*(recpicture[hx 2,vy] recpicture[hx

2,vy])
[0345]
alfcoeffc[5]*(recpicture[hx 1,vy] recpicture[hx

1,vy])
[0346]
alfcoeffc[6]*recpicture[hx,vy]
[0347]
sum=(sum 64)>>7
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8

1180)
[0348]
经修改且经滤波的重建色度图像样本alfpicture[xctbc x][yctbc y]推导如下:
[0349]
alfpicture[xctbc x][yctbc y]=clip3(0,(1<<bitdepthc)

1,sum)
ꢀꢀꢀ
(8

1181)
[0350]
图12为示例性视频译码设备1200的示意图。视频译码设备1200适用于实现本文所述的所公开示例/实施例。视频译码设备1200包括下行端口1220、上行端口1250和/或收发器单元(tx/rx)1210,收发器单元包括发送器和/或接收器,用于通过网络上行和/或下行传输数据。视频译码设备1200还包括:处理器1230,包括用于处理数据的逻辑单元和/或中央处理单元(central processing unit,cpu);和用于存储数据的存储器1232。视频译码设备1200还可以包括与上行端口1250和/或下行端口1220耦合的电组件、光电(optical

to

electrical,oe)组件、电光(electrical

to

optical,eo)组件,和/或无线通信组件,用于通过电通信网络、光通信网络或无线通信网络进行数据通信。视频译码设备1200还可以包括用于向用户和从用户发送数据的输入和/或输出(input/output,i/o)设备1260。i/o设备1260可以包括输出设备,例如用于显示视频数据的显示器、用于输出音频数据的扬声器。i/o设备1260还可以包括键盘、鼠标、轨迹球等输入设备,和/或用于与这种输出设备交互的对
应接口。
[0351]
处理器1230由硬件和软件实现。处理器1230可以实现为一个或多个cpu芯片、核心(例如,多核处理器)、现场可编程门阵列(field

programmable gate array,fpga)、专用集成电路(application specific integrated circuit,asic)和数字信号处理器(digital signalprocessor,dsp)。处理器1230与下行端口1220、tx/rx 1210、上行端口1250和存储器1232进行通信。处理器1230包括译码模块1214。译码模块1214实现本文描述的公开实施例,例如方法100、方法1300和方法1400,它们可以采用环内滤波器1000、码流1100、图像500和/或当前块801和/或901,当前块801和/或901可以根据单向帧间预测600和/或双向帧间预测700使用根据模式900生成的候选列表译码。译码模块1214还可以实现本文描述的任何其它方法/机制。此外,译码模块1214可以实现编解码系统200、编码器300和/或解码器400。例如,译码模块1214可以实现如上所述的第一、第二、第三、第四、第五和/或第六示例性实现方式。因此,译码模块1214使视频译码设备1200在对视频数据进行译码时提供其它功能和/或提高译码效率。因此,译码模块1214改进了视频译码设备1200的功能并解决了针对视频译码技术的问题。此外,译码模块1214将视频译码设备1200变换到不同的状态。或者,译码模块1214可以实现为存储在存储器1232中并由处理器1230执行的指令(例如,存储在非瞬时性介质上的计算机程序产品)。
[0352]
存储器1232包括一种或多种存储器类型,例如磁盘、磁带机、固态硬盘、只读存储器(read only memory,rom)、随机存取存储器(random access memory,ram)、闪存、三态内容寻址存储器(ternary content

addressable memory,tcam)、静态随机存取存储器(static random

access memory,sram)等。存储器1232可以用作溢出数据存储设备,以在选择程序来执行时存储这些程序以及存储在执行程序过程中读取的指令和数据。
[0353]
图13为通过相对于子图像(例如子图像510)寻址条带(例如条带515)的方式将视频序列编码到码流(例如码流1100)中的示例方法1300的流程图。方法1300可以由编解码系统200、编码器300和/或视频译码设备1200在执行方法100以根据单向帧间预测600和/或双向帧间预测700使用环内滤波器1000和/或根据模式900生成的候选列表对当前块801和/或901进行编码时采用。
[0354]
方法1300可以开始于:编码器接收包括多个图像的视频序列,并根据用户输入等确定将所述视频序列编码到码流中。在步骤1301中,编码器将图像分割为子图像,并将子图像分割为条带。
[0355]
在步骤1303中,编码器确定条带的条带地址。具体地,当所述条带为矩形或方形条带时,所述条带地址包括所述条带的子图像级条带索引。子图像级索引是基于条带在子图像中的位置而不是基于条带在图像中的位置的索引。此外,编码器确定包括条带的子图像的子图像id。在一些示例中,当rect_slice_flag被设置为1时,条带可以为矩形或方形条带。rect_slice_flag可以被编码在sps和/或pps中。
[0356]
在步骤1305中,编码器将条带地址和子图像id编码到码流中。例如,编码器可以将条带头编码到码流中。条带头与条带相关,且包括用于对条带进行编码/解码的参数。例如,条带可以参考条带头。条带地址和子图像id可以编码到码流中的条带头中。在一些示例中,条带地址被编码到变量slice_address中,子图像id被编码到变量slice_subpic_id中。
[0357]
在步骤1307中,编码器将子图像的条带编码到码流中。编码器还可以对码流中的
整个子图像和/或整个图像进行编码。在步骤1309中,编码器还可以将sps编码到码流中。例如,编码器可以将各种子图像的描述编码到sps中。子图像id可以参考sps中相关子图像的描述。在一些示例中,子图像的描述包括以ctb为单位的子图像的宽度、以ctb为单位的子图像的高度和子图像的偏移,其中,所述偏移表示为子图像的左上方ctu的垂直位置和子图像的左上方ctu的水平位置的以ctb为单位。在步骤1311中,编码器存储码流,用于发送到解码器。
[0358]
图14为当条带(例如条带515)是相对于子图像(例如子图像510)寻址时从码流(例如码流1100)中解码出视频序列的示例性方法1400的流程图。方法1400可以由解码器(例如,编解码系统200、解码器400和/或视频译码设备1200)在执行方法100以根据单向帧间预测600和/或双向帧间预测700使用环内滤波器1000和/或根据模式900生成的候选列表对当前块801和/或901进行解码时采用。
[0359]
方法1400可以开始于:解码器开始接收表示视频序列的经译码数据的码流(例如,方法1300的结果)。在步骤1401中,解码器接收码流。码流可以包括sps、pps、条带头和包括条带的子图像。在一些示例中,码流还可以包括整个图像,所述整个图像包括多个子图像。
[0360]
在步骤1403中,解码器获取条带地址。当条带为矩形或方形条带时,条带地址包括所述条带的子图像级条带索引。子图像级索引是基于条带在子图像中的位置而不是基于条带在图像中的位置的索引。子图像级索引是基于条带在子图像中的位置而不是基于条带在图像中的位置的索引。此外,解码器可以获取包括条带的子图像的子图像id。例如,条带头可以与条带关联,且可以包括用于对条带进行编码/解码的参数。例如,条带可以参考条带头。条带地址和子图像id可以从码流中的条带头中获取。在一些示例中,条带地址被编码到变量slice_address中,子图像id被编码到变量slice_subpic_id中。在一些示例中,当rect_slice_flag被设置为1时,条带可以为矩形或方形条带。rect_slice_flag可以从sps和/或pps中获取。
[0361]
在步骤1405中,解码器可以从sps中获取子图像的描述。例如,子图像id可以参考相关子图像,因此可以参考sps中子图像的描述。在一些示例中,子图像的描述包括以ctb为单位的子图像的宽度、以ctb为单位的子图像的高度和子图像的偏移,其中,所述偏移表示为子图像的左上方ctu的垂直位置和子图像的左上方ctu的水平位置。
[0362]
在步骤1407中,解码器可以根据条带地址、子图像id和来自sps的子图像的描述,在子图像中定位条带。在步骤1409中,解码器根据条带地址,对子图像的条带进行解码。解码器然后可以转发所述条带,以显示为经解码视频序列的一部分。
[0363]
图15为当条带(例如条带515)是相对于子图像(例如子图像510)寻址时将图像的视频序列译码到码流(例如码流1100)中的示例性系统1500的示意图。系统1500可以由编解码系统200、编码器300、解码器400和/或视频译码设备1200等编码器和解码器实现。此外,系统1500可以在实现方法100、方法1300和/或方法1400以根据单向帧间预测600和/或双向帧间预测700采用环内滤波器1000和/或根据模式900生成的候选列表对当前块801和/或901进行译码时采用。
[0364]
系统1500包括视频编码器1502。视频编码器1502包括分割模块1505,用于将子图像分割成条带。视频编码器1502还包括:确定模块1506,用于确定条带地址,其中,当条带为矩形或方形条带时,条带地址包括所述条带的子图像级条带索引。视频编码器1502还包括
编码模块1507,用于将条带地址编码到码流中。编码模块1507还用于将子图像的条带编码到码流中。视频编码器1502还包括存储模块1508,用于存储码流,用于发送到解码器。视频编码器1502还包括发送模块1509,用于将所述码流发送到视频解码器1510。视频编码器1502还可以用于执行方法1300的任一步骤。
[0365]
系统1500还包括视频解码器1510。视频解码器1510包括:接收模块1511,用于接收包括子图像的码流,其中,所述子图像包括条带。视频解码器1510还包括:获取模块1512,用于获取条带地址,其中,当条带为矩形或方形条带时,条带地址包括所述条带的子图像级条带索引。视频解码器1510还包括解码模块1513,用于根据条带地址对子图像的条带进行解码。视频解码器1510还包括转发模块1515,用于转发所述条带,以显示为经解码视频序列的一部分。视频解码器1510还可以用于执行方法1400的任一步骤。
[0366]
当第一组件和第二组件之间除了线、迹或其它介质之外没有其它中间组件时,第一组件直接与第二组件耦合。当第一组件和第二组件之间存在线、迹或其它介质之外的其它中间组件时,第一组件间接与第二组件耦合。术语“耦合”及其变体包括直接耦合和间接耦合。除非另有说明否则使用术语“约”是指以下描述的数字的
±
10%。
[0367]
还应当理解,本文中阐述的示例性方法的步骤不一定需要按照所描述的顺序执行,并且这些方法的步骤的顺序应当理解为仅仅是示例性的。同样地,在与本发明各种实施例相一致的方法中,这些方法可以包括其它步骤,并且某些步骤可以省略或合并。
[0368]
虽然本发明提供多个具体实施例,但应当理解,所公开的系统和方法也可通过其它多种具体形式体现,而不会脱离本发明的精神或范围。本发明的示例应是说明性而非限制性的,且本发明并不限于本文本所给出的细节。例如,各种元件或组件可以在另一系统中组合或集成,或者某些特征可以省略或不实现。
[0369]
此外,在不脱离本发明的范围的情况下,各种实施例中描述和说明为离散或单独的技术、系统、子系统和方法可以与其它系统、组件、技术或方法进行组合或集成。其它改变、替换、更替示例对本领域技术人员而言是显而易见的,均不脱离本文所公开的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜