本申请要求2007年4月24日提交的题为“Interview Prediction withDifferent Resolution Reference Picture”的美国临时申请No.60/925,956的优先权,这里通过引用将该申请的全部内容并入进来用于所有目的。
具体实施方式
至少一种实现方式涉及利用不同分辨率的参考图片来进行视角间预测的方法和装置。因此将会明白,本领域的技术人员将能够设计出各种配置,这些配置虽然在这里未被明确描述或者示出,但却实现了本申请中论述的一种或多种实现方式的原理,并且被包括在其范围之内。
这里记载的所有示例和条件语言都意图用于教学目的,以帮助读者理解本发明原理和发明人对推进现有技术所贡献的概念,并且应当被解释为不限于这种具体记载的示例和条件。
另外,这里的所有记载本发明的原理、方面和实施例及其具体示例的陈述,都意图包括其结构和功能等同物。此外,希望这种等同物既包括当前已知的等同物,也包括将来开发出的等同物,即所开发出的任何执行相同功能的元件,不论其结构如何。
因此,例如,本领域的技术人员将会明白,这里给出的框图表示了实现本发明原理的示例性电路的概念性视图。类似地,将会明白,任何流程图、状态转换图、伪代码等等都表示实质上可以表示在计算机可读介质中并可以由计算机或处理器来如此执行的各种过程,不论这种计算机或处理器是否被明确地示出。
图中所示的各种元件的功能可通过使用专用硬件以及能够结合适当的软件来执行软件的硬件来提供。当由处理器提供时,这些功能可由单个专用处理器提供、由单个共享处理器提供、或者由多个独立的处理器(其中一些可能被共享)提供。另外,对术语“处理器”或“控制器”的明确使用不应当被解释为只指能够执行软件的硬件,而是可以隐含地包括(但不限于)数字信号处理器(“DSP”)硬件、用于存储软件的只读存储器(“ROM”)、随机存取存储器(“RAM”)和非易失性存储设备。
还可以包括其他传统的和/或定制的硬件。类似地,图中所示的任何开关都只是概念性的。它们的功能可通过程序逻辑的操作来实现、通过专用逻辑来实现、通过程序控制和专用逻辑的交互来实现,或者甚至手工实现,具体的技术由实现者根据对上下文的更具体理解来选择。
在这里的权利要求中,被表达为用于执行指定功能的装置的任何元件都意图涵盖执行该功能的任何方式,例如包括a)执行该功能的电路元件的组合或者b)任何形式的软件,因此包括固件、微代码等等,这种软件与用于执行该软件的适当电路相组合以执行该功能。这种权利要求所限定的本发明原理存在于以下事实中:由所记载的各种装置所提供的功能以权利要求所要求的方式被组合到一起。因此,认为任何能够提供这些功能的装置都与这里示出的那些是等同的。
说明书中提到本发明原理的“一个实施例”(或“一种实现方式”)或“实施例”(或“实现方式”)意指结合该实施例描述的特定特征、结构、特性等等被包括在本发明原理的至少一个实施例中。因此,说明书中各处出现的短语“在一个实施例中”或者“在实施例中”中不一定均指相同实施例。
应当明白,例如在“A和/或B”和“A和B中的至少一个”的情况下使用术语“和/或”和“至少一个”意图涵盖:仅选择第一个列出的选项(A),或者仅选择第二个列出的选项(B),或者选择两个选项(A和B)。又例如,在“A、B和/或C”和“A、B和C中的至少一个”的情况下,这种短语意图涵盖:仅选择第一个列出的选项(A),或者仅选择第二个列出的选项(B),或者仅选择第三个列出的选项(C),或者仅选择第一个和第二个列出的选项(A和B),或者仅选择第一个和第三个列出的选项(A和C),或者仅选择第二个和第三个列出的选项(B和C),或者选择所有三个选项(A和B和C)。正如本领域和相关领域的普通技术人员很清楚的,列出了多少个项目,这就可以扩展到多少个项目。
另外,应当明白,虽然本发明原理的一个或多个实施例在这里是针对MPEG-4 AVC标准来描述的,但是本发明原理并不仅限于该标准,而是可以应用于不涉及任何标准的上下文中。因此,例如,本申请中论述的概念、特征和实现方式可针对其他视频编码标准、推荐及其扩展来使用,其中包括MPEG-4 AVC标准的扩展,同时仍维持本发明原理的精神。
另外,应当明白,虽然本发明原理的一个或多个其他实施例在这里是针对MPEG-4 AVC标准的多视角视频编码扩展来描述的,但是本发明原理并不仅限于该扩展和/或该标准,并且因此可针对与多视角视频编码有关的其他视频编码标准、推荐及其扩展来使用,同时仍维持本发明原理的精神。多视角视频编码(MVC)是多视角序列的编码的压缩框架。多视角视频编码(MVC)序列是从不同的视点(view point)捕捉同一场景的两个或更多个视频序列的集合。
另外,应当明白,虽然这里描述了使用关于视频内容的深度信息的本发明原理的一个或多个其他实施例,但是本发明原理并不限于这样的实施例,并且因此可以实现其他不使用深度信息的实施例,同时仍维持本发明原理的范围。
此外,这里使用的“高级别语法”(high level syntax)指的是比特流中存在的在层次上位于宏块层之上的语法。例如,这里使用的高级别语法可以指(但不限于)片段(slice)头部级、补充增强信息(SEI)级、图片参数集(PPS)级、序列参数集(SPS)级、视角参数集(VPS)和网络抽象层(NAL)单元头部级的语法。
另外,这里使用的“视角可缩放层”(view scalable layer)指的是包括某一序列中的一组经编码图片的层。可以利用非负整数来对视角可缩放层编号。具有较大层号码的层是比具有较小层号码的层更高的层。
利用经下采样的参考图片进行的视角间预测
在多视角序列中的每个视角具有不同的空间分辨率的情况下,可以应用一种特定的视角间预测技术。该特定技术可以指定在参考更高分辨率的参考图片时视角间预测如何工作。然而,该特定技术在以下意义上是严格的,即,I和P视角应当以(JMVM(联合多视角视频模型)中规定的)原始分辨率来编码,而只有B视角被允许以经下采样的分辨率来编码。对于水平方向和垂直方向,下采样比率都固定为2。对于B视角,如果B视角被以更低的分辨率编码,则全分辨率图片被从参考图片缓冲器中加载并被下采样以便进行视角间预测。
上述特定技术至少具有两个局限性。首先,如果我们有分层次的B视角,那么在所提供的语法下,我们就可能会遇到这样的情况,即以较高分辨率编码的某些B视角参考了以较低分辨率编码的参考视角。其次,该语法仅允许对水平和垂直方向两者均等于2的固定下采样比率。然而,对于不同的内容和应用,我们可能希望能够较为灵活地对水平和垂直方向指定不同的分辨率。
可结合该特定技术使用的预测结构的一个示例在图1中示出。转到图1,用于多视角视频编码(MVC)的示例性预测结构由标号100总地指示。图1的结构大部分是不言自明的,但以下仍提供简要描述。结构100示出了一组I视角,这些I视角按定义不具有视角间预测。结构100还示出了一组B视角和一组P视角,两者都可使用视角间预测。该组I视角包括时刻t1的某一I帧。箭头表示某一图片被用作另一图片的参考图片。箭头开始于参考图片并且结束于使用该参考图片的图片处的箭头头部。因此,例如,在时刻t1,B视角使用P视角和I视角两者作为参考图像。又例如,在时刻t2,B视角使用时刻t2的I视角和P视角以及时刻t1和t3的B视角作为参考图片。
用于图1的预测结构100的示例性编码器在图2中示出。转到图2,当利用较低空间分辨率来对B视角编码时执行参考图片下采样的编码器由标号200总地指示。编码器200包括I/P视角部分291和B视角部分292。
编码器200包括组合器205,该组合器205具有与变换器/量化器210的输入发生信号通信连接的输出。变换器/量化器210的输出与逆量化器/逆变换器215的输入和熵编码器220的第二输入发生信号通信连接。
逆量化器/逆变换器215的输出与组合器225的第一同相输入发生信号通信连接。组合器225的输出与解块滤波器230的输入发生信号通信连接。解块滤波器230的输出与经解码图片缓冲器(DPB)235的输入发生信号通信连接。经解码图片缓冲器235的输出与运动估计器和补偿器240的第一输入发生信号通信连接。运动估计器和补偿器240的第一输出与组合器205的反相输入和组合器225的第二同相输入发生信号通信连接。运动估计器和补偿器240的第二输出与熵编码器220的第一输入发生信号通信连接。
经解码图片缓冲器235的第一输出还与下采样器270的输入发生信号通信连接。下采样器270的输出与运动估计器和补偿器285的第二输入发生信号通信连接。运动估计器和补偿器285的第一输出与组合器245的反相输入和组合器265的第二同相输入发生信号通信连接。组合器245的输出与变换器/量化器250的输入发生信号通信连接。变换器/量化器250的输出与逆量化器/逆变换器260的输入和熵编码器255的第二输入发生信号通信连接。
逆量化器/逆变换器260的输出与组合器265的第一输入发生信号通信连接。组合器265的输出与解块滤波器275的输入发生信号通信连接。解块滤波器275的输出与经解码图片缓冲器280的输入发生信号通信连接。经解码图片缓冲器280的输出与运动估计器和补偿器285的第一输入发生信号通信连接。运动估计器和补偿器285的第二输出与熵编码器255的第一输入发生信号通信连接。
组合器205的第一输入以及运动估计器和补偿器240的第二输入可用作编码器200的输入,用于接收输入的视频信号。熵编码器220的输出可用作编码器200的输出,用于输出比特流。
组合器245的第一输入以及运动估计器和补偿器285的第二输入可用作编码器200的输入,用于接收输入的视频信号。熵编码器255的输出可用作编码器200的输出,用于输出比特流。
指定空间分辨率的实现方式的语法如表1所示。
表1
seq_parameter_set_mvc_extension(){ |
C |
描述符 |
num_views_minus_1 |
|
ue(v) |
num_downsampled_views_minus_1 |
|
ue(v) |
for(i=0;i<=num_views_minus_1;i++) |
|
|
view_id[i] |
|
ue(v) |
for(i=0;i<=num_views_minus_1;i++){ |
|
|
num_anchor_refs_l0[i] |
|
ue(v) |
for(j=0;j<num_anchor_refs_l0[i];j++) |
|
|
anchor_ref_l0[i][j] |
|
ue(v) |
num_anchor_refs_l1[i] |
|
ue(v) |
for(j=0;j<num_anchor_refs_l1[i];j++) |
|
|
anchor_ref_l1[i][j] |
|
ue(v) |
} |
|
|
for(i=0;i<=num_views_minus_1;i++){ |
|
|
num_non_anchor_refs_l0[i] |
|
ue(v) |
for(j=0;j<num_non_anchor_refs_l0[i];j++) |
|
|
non_anchor_ref_l0[i][j] |
|
ue(v) |
num_non_anchor_refs_l1[i] |
|
ue(v) |
for(j=0;j<num_non_anchor_refs_l1[i];j++) |
|
|
non_anchor_ref_l1[i][j] |
|
ue(v) |
} |
|
|
for(i=0;i<=num_downsampled_views_minus_1;i++) |
|
|
downsampled_view_id[i] |
|
ue(v) |
} |
|
|
上述实现方式至少具有两个局限性。首先,如果我们有分层次的B视角,那么在所提供的语法下,我们就可能会遇到这样的情况,即以较高分辨率编码的某些B视角参考了以较低分辨率编码的参考视角。其次,该语法仅允许对水平和垂直方向两者均等于2的固定下采样比率。然而,对于不同的内容和应用,我们可能希望能够较为灵活地对水平和垂直方向指定不同的分辨率。
JMVM中的视角级别
在JMVM(联合多视角视频模型)中,视角级别(视角可缩放性的级别)是由网络抽象层(NAL)单元头部中的语法view_level来描述的,如表2所示。视角级别也可以从序列参数集(SPS)中的视角依赖性信息中导出,如表3所示。在JMVM规范中,视角级别具有以下约束:对view_level等于currVI的任何访问单元的解码应当独立于view_level大于或等于currVI的所有访问单元。令vId为任何大于或等于Vmin的值,其中Vmin是经编码的视频序列中的view_level的最小值。通过丢弃view_level大于vId的所有NAL单元而将获得的比特流符合该标准。
表2
nal_unit_header_svc_mvc_extension(){ |
C |
描述符 |
svc_mvc_flag |
全部 |
u(1) |
if(!svc_mvc_flag){ |
|
|
reserved_zero_bit |
全部 |
u(1) |
priority_id |
全部 |
u(6) |
temporal_level |
全部 |
u(3) |
dependency_id |
全部 |
u(3) |
quality_level |
全部 |
u(2) |
idr_flag |
全部 |
u(1) |
layer_base_flag |
全部 |
u(1) |
use_base_prediction_flag |
全部 |
u(1) |
discardable_flag |
全部 |
u(1) |
reserved_zero_three_bits |
全部 |
u(3) |
tlO_frame_idx_present_flag |
全部 |
u(1) |
}else{ |
|
|
temporal_level |
全部 |
u(3) |
view_level |
全部 |
u(3) |
anchor_pic_flag |
全部 |
u(1) |
view_id |
全部 |
u(10) |
idr_flag |
全部 |
u(1) |
reserved_zero_flve_bits |
全部 |
u(5) |
} |
|
|
nalUnitHeaderBytes+=3 |
|
|
} |
|
|
表3
seq_parameter_set_mvc_extension(){ |
C |
描述符 |
num_views_minus_1 |
|
ue(v) |
for(i=0;i<=num_vews_minus_1;i++) |
|
|
view_id[i] |
|
ue(v) |
for(i=0;i<=num_views_minus_1;i++){ |
|
|
num_anchor_refs_l0[i] |
|
ue(v) |
for(j=0;j<num_anchor_refs_l0[i];j++) |
|
|
anchor_ref_l0[i][j] |
|
ue(v) |
num_anchor_refs_l1[i] |
|
ue(v) |
for(j=0;j<num_anchor_refs_l1[i];j++) |
|
|
anchor_ref_l1[i][j] |
|
ue(v) |
} |
|
|
for(i=0;i<=num_views_minus_1;i++){ |
|
|
nurm_non_anchor_refs_l0[i] |
|
ue(v) |
for(j=0;j<num_non_anchor_refs_l0[i];j++) |
|
|
Non_anchor_ref_l0[i][j] |
|
ue(v) |
num_non_anchor_refs_l1[i] |
|
ue(v) |
for(j=0;j<num non_anchor_refs_l1[i];j++) |
|
|
Non_anchor_ref_l1[i][j] |
|
ue(v) |
} |
|
|
} |
|
|
转到图3,示例性的多视角视频编码(MVC)编码器由标号300总地指示。编码器300包括组合器305,该组合器305具有与变换器310的输入发生信号通信连接的输出。变换器310的输出与量化器315的输入发生信号通信连接。量化器315的输出与熵编码器320的输入和逆量化器325的输入发生信号通信连接。逆量化器325的输出与逆变换器330的输入发生信号通信连接。逆变换器330的输出与组合器335的第一同相输入发生信号通信连接。组合器335的输出与内预测器345的输入和解块滤波器350的输入发生信号通信连接。解块滤波器350的输出与参考图片存储装置355(用于视角i)的输入发生信号通信连接。参考图片存储装置355的输出与运动补偿器375的第一输入和运动估计器380的第一输入发生信号通信连接。运动估计器380的输出与运动补偿器375的第二输入发生信号通信连接。
参考图片存储装置360(用于其他视角)的输出与差异(disparity)估计器370的第一输入和差异补偿器365的第一输入发生信号通信连接。差异估计器370的输出与差异补偿器365的第二输入发生信号通信连接。
熵编码器320的输出可用作编码器300的输出。组合器305的同相输入可用作编码器300的输入,并且与差异估计器370的第二输入以及运动估计器380的第二输入发生信号通信连接。开关385的输出与组合器335的第二同相输入和组合器305的反相输入发生信号通信连接。开关385包括与运动补偿器375的输出发生信号通信连接的第一输入,与差异补偿器365的输出发生信号通信连接的第二输入,以及与内预测器345的输出发生信号通信连接的第三输入。
模式判决模块340具有与开关385相连的输出,用于控制开关385选择哪个输入。
转到图4,示例性的多视角视频编码(MVC)解码器由标号400总地指示。解码器400包括熵解码器405,该熵解码器405具有与逆量化器410的输入发生信号通信连接的输出。该逆量化器的输出与逆变换器415的输入发生信号通信连接。逆变换器415的输出与组合器420的第一同相输入发生信号通信连接。组合器420的输出与解块滤波器425的输入和内预测器430的输入发生信号通信连接。解块滤波器425的输出与参考图片存储装置440(用于视角i)的输入发生信号通信连接。参考图片存储装置440的输出与运动补偿器435的第一输入发生信号通信连接。
参考图片存储装置445(用于其他视角)的输出与差异补偿器450的第一输入发生信号通信连接。
熵解码器405的输入可用作解码器400的输入,用于接收残余比特流。另外,模式模块460的输入也可用作解码器400的输入,用于接收用来控制开关455选择哪个输入的控制语法。另外,运动补偿器435的第二输入可用作解码器400的输入,用于接收运动向量。此外,差异补偿器450的第二输入可用作解码器400的输入,用于接收差异向量。
开关455的输出与组合器420的第二同相输入发生信号通信连接。开关455的第一输入与差异补偿器450的输出发生信号通信连接。开关455的第二输入与运动补偿器435的输出发生信号通信连接。开关455的第三输入与内预测器430的输出发生信号通信连接。模式模块460的输出与开关455的发生信号通信连接,用于控制开关455选择哪个输入。解块滤波器425的输出可用作解码器400的输出。
在一个实施例中,我们提出了利用动态分辨率参考图片来改进视角间预测。另外,在一个实施例中,我们提出了基于视角可缩放性的对空间分辨率的约束并且还对水平和垂直方向允许了灵活的下采样比率。另外,在一个实施例中,我们提出了关于使用不同分辨率的视角间预测如何工作的改进的语法和语义。
在一个实施例中,我们不是基于视角类型来指定空间分辨率(在这种情况下只有B视角被允许具有较小的分辨率),而是提出了基于视角级别来指定约束。
在一个实施例中,我们对每个视角的空间分辨率指定了以下约束。令vId为任何大于或等于Vmin的值,其中Vmin是经编码的视频序列中的视角级别的最小值。对于任何大于vId的视角级别,其空间分辨率等于或小于vId的空间分辨率。
在另一个实施例中,我们添加了以下进一步约束:对于任何等于vId的视角级别,其空间分辨率等于vId的空间分辨率。
在另一个实施例中,我们添加了以下进一步约束:只有最高的视角级别能够具有最低的空间分辨率。
在至少一种实现方式中,我们还对水平方向或垂直方向允许了灵活的下采样比率。
在一个实施例中,我们固定了对编码每个视角所允许的空间分辨率下采样的数目。表4示出了这样的示例。
表4
Seq_parameter_set_mvc_extension(){ |
C |
描述符 |
num_views_minus_1 |
|
ue(v) |
for(i=0;i<=num_views_minus_1;i++) |
|
|
{ |
|
|
view_id[i] |
|
ue(v) |
view_res[i] |
|
ue(v) |
} |
|
|
for(i=0;i<=num_views_minus_1;i++){ |
|
|
num_anchor_refs_l0[i] |
|
ue(v) |
for(j=0;j<num_anchor_refs_l0[i];j++) |
|
|
anchor_ref_l0[i][j] |
|
ue(v) |
num_anchor_refs_l1[i] |
|
ue(v) |
for(j=0;j<num_anchor_refs_l1[i];j++) |
|
|
anchor_ref_l1[i][j] |
|
ue(v) |
} |
|
|
for(i=0;i<=num_views_minus_1;i++){ |
|
|
num_non_anchor_refs_l0[i] |
|
ue(v) |
for(j=0;j<num_non_anchor_refs_l0[i];j++) |
|
|
non_anchor_ref_l0[i][j] |
|
ue(v) |
num_non_anchor_refs_l1[i] |
|
ue(v) |
for(j=0;j<num_non_anchor_refs_l1[i];j++) |
|
|
non anchor_ref_l1[i][j] |
|
ue(v) |
} |
|
|
} |
|
|
view_res[i]指定具有view_id[i]的视角的空间分辨率尺度(scale)。view_res的语法元素在表5中定义。
表5
view_res |
水平尺度 |
垂直尺度 |
0 |
全 |
全 |
1 |
半 |
全 |
2 |
全 |
半 |
3 |
半 |
半 |
在另一个实施例中,我们分别指定水平和垂直方向的缩放比率。表6示出了这样的示例。
表6
Seq_parameter_set_mvc_extension(){ |
C |
描述符 |
num_views_minus_1 |
|
ue(v) |
for(i=0;i<=num_views_minus_1;i++) |
|
|
{ |
|
|
view_id[i] |
|
ue(v) |
downsampling_flag[i] |
|
u(1) |
if(downsample_flag[i]) |
|
|
{ |
|
|
horizontal_scale[i] |
|
ue(v) |
vertical_scale[i] |
|
ue(v) |
} |
|
|
} |
|
|
for(i=0;i<=num_views_minus_1;i++){ |
|
|
num_anchor_refs_l0[i] |
|
ue(v) |
for(j=0;j<num_anchor_refs_l0[i];j++) |
|
|
anchor_ref_l0[i][j] |
|
ue(v) |
num_anchor_refs_l1[i] |
|
ue(v) |
for(j=0;j<num_anchor_refs_l1[i];j++) |
|
|
anchor_ref_l1[i][j] |
|
ue(v) |
} |
|
|
for(i=0;i<=num_views_minus_1;i++){ |
|
|
num_non_anchor_refs_l0[i] |
|
ue(v) |
for(j=0;j<num_non_anchor_refs_l0[i];j++) |
|
|
non_anchor_ref_l0[i][j] |
|
ue(v) |
num_non_anchor_refs_l1[i] |
|
ue(v) |
for(j=0;j<num_non_anchor_refs_l1[i];j++) |
|
|
non_anchor_ref_l1[i][j] |
|
ue(v) |
} |
|
|
} |
|
|
等于1的downsampling_flag[i]指定下采样被应用到具有view_id[i]的视角。等于0的downsampling_flag[i]指定下采样不被应用到具有view_id[i]的视角。
horizontal_scale[i]指定具有view_id[i]的视角的水平下采样尺度。
vertical_scale[i]指定具有view_id[i]的视角的垂直下采样尺度。
以上论述的一个后果是,影响了视角间参考选择。层被基于其彼此之间的依赖性来分层次地排序,从而使得某一视角可缩放层次体系层中的任何图片(属于视角“i”)都不应当根据更高的视角可缩放层次体系层中的任何图片(属于另一视角“j”)来预测。
转到图5(总地指图5A和5B),用于对图片编码的示例性方法由标号500总地指示。
方法500包括将控制传递到功能块504的开始块502。功能块504为编码器读取配置参数,并将控制传递到功能块506。功能块506确认当前视角的分辨率是基于其在可缩放性层次体系中的位置的,并将控制传递到功能块508。在确认分辨率是基于在可缩放性层次体系中的位置时,块506测试当前视角的分辨率不违反其在可缩放性层次体系中的位置。例如,在典型的应用中,较低的位置将具有较低的分辨率,而较高的位置将具有较高的分辨率。
功能块508在高级别语法(例如,在SPS、PPS、片段头部、NAL单元头部等等中的任何一种中包括的高级别语法)中为视角“i”设定view_res,并将控制传递到功能块510。功能块510令视角的数目等于变量N,将变量i和变量j初始化为零,并将控制传递到判决块512。判决块512判定变量i的当前值是否小于变量N的当前值。如果是,则控制被传递到判决块514。否则,控制被传递到判决块528。
判决块514判定变量j的当前值是否小于视角i中的图片数目。如果是,则控制被传递到功能块516。否则,控制被传递到功能块536。
功能块516建立时间性图片,并将控制传递到判决块518。判决块518判定视角“i”是否具有视角间参考图片。如果是,则控制被传递到判决块520。否则,控制被传递到功能块524。
判决块520判定当视角间参考具有低分辨率时,视角间参考的视角可缩放性级别是否处于可缩放性层次体系中比当前图片低的部分中。如果是,则控制被传递到功能块522。否则,控制被传递到功能块538。
各种其他实现方式在判决块520中更一般性地工作。这种其他实现方式仅考虑视角间参考是否在视角可缩放性级别层次体系中具有与当前图片的位置相同或者高于当前图片的位置的位置(并且因此具有与当前图片相同或高于当前图片的分辨率)。在视角可缩放性级别层次体系中的位置较高则对应于分辨率较高,但通常也对应于该位置的值较低。例如,级别0通常分辨率高于级别1。然而,各种其他实现方式按相反的顺序来为级别编号。
功能块522禁止使用视角间图片作为当前图片的参考,并且将控制传递到功能块524。功能块524对图片编码,并将控制传递到功能块526。功能块526递增变量i,并将控制返回到判决块512。
功能块536递增变量i,重置frame_num和图片顺序计数(POC),并且将控制返回到判决块512。
功能块538使用视角间图片作为当前图片的参考,并且将控制传递到功能块524。
判决块528判定SPS、PPS和/或VPS(和/或用于本发明原理的目的的任何其他语法结构和/或语法元素)是否要被在带内发送。如果是,则控制被传递到功能块530。否则,控制被传递到功能块532。
功能块530在带内发送SPS、PPS和/或VPS,并将控制传递到功能块534。
功能块534将比特流写入到文件或通过网络流式传输比特流,并将控制传递到结束块599。
功能块532在带外发送SPS、PPS和/或VPS,并将控制传递到功能块534。
转到图6(总地指图6A和6B),用于对图片解码的示例性方法由标号600总地指示。
方法600包括将控制传递到功能块604的开始块602。功能块604解析SPS、PPS、VPS、片段头部和/或NAL单元头部,并将控制传递到功能块606。功能块606解析高级别语法(例如,SPS、PPS、VPS、片段头部和/或NAL单元头部中的任何一种中包括的高级别语法)中每个视角“i”的view_res,并将控制传递到判决块608。判决块608判定当前图片是否需要解码。如果是,则控制被传递到判决块610。否则,控制被传递到功能块620。
判决块610判定图片顺序计数(POC)的当前值是否等于POC的先前值。如果是,则控制被传递到功能块612。否则,控制被传递到功能块614。
功能块612将语法元素view_num设定为等于零,并将控制传递到功能块614。
功能块614在高级别索引view_id信息以确定视角编码顺序,递增view_num,并且将控制传递到判决块616。判决块616判定当前图片是否按期望的编码顺序。如果是,则控制被传递到功能块624。否则,控制被传递到功能块618。
功能块624解析片段头部,并将控制传递到功能块626。功能块626建立时间性图片,并将控制传递到判决块628。判决块628判定视角“i”是否具有视角间参考图片。如果是,则控制被传递到判决块630。否则,控制被传递到功能块636。
判决块630判定当视角间参考具有低分辨率时,视角间参考的视角可缩放性级别在可缩放性层次体系中是否具有比当前图片低的位置。如果是,则控制被传递到功能块632。否则,控制被传递到功能块634。
各种其他实现方式在判决块630中更一般性地工作。这种其他实现方式仅考虑视角间参考是否在视角可缩放性级别层次体系中具有与当前图片的位置相同或者高于当前图片的位置的位置(并且因此具有与当前图片相同或高于当前图片的分辨率)。在视角可缩放性级别层次体系中的位置较高则对应于分辨率较高,但通常也对应于该位置的值较低。例如,级别0通常分辨率高于级别1。然而,各种其他实现方式按相反的顺序来为级别编号。
此外,并不是在所有实现方式中都使用判决块630。各种其他实现方式只是简单地对接收到的经编码流解码,并假定视角间参考图片具有至少与当前图片同样高的分辨率。
功能块632指示和/或以其他方式确定解码中差错的存在,并且将控制传递到结束块699。
功能块620获得下一图片,并将控制返回到判决块608。
功能块618隐藏当前图片,并将控制传递到功能块620。
功能块634使用视角间图片作为当前图片的参考,并将控制传递到功能块636。功能块636对图片解码,并将控制传递到功能块638。功能块638将当前图片插入到经解码图片缓冲器(DPB)中,并将控制传递到判决块640。判决块640判定是否所有图片都已被解码。如果是,则控制被传递到结束块699。否则,控制被返回到功能块624。
转到图7(总地指图7A和7B),用于对图片编码的示例性方法由标号700总地指示。
方法700包括将控制传递到功能块704的开始块702。功能块704为编码器读取配置参数,并将控制传递到功能块706。功能块706确认当前视角的分辨率是基于其在可缩放性层次体系中的位置的,并将控制传递到功能块708。
在确认分辨率是基于在可缩放性层次体系中的位置时,块706测试当前视角的分辨率不违反其在可缩放性层次体系中的位置。例如,在典型的应用中,较低的位置将具有较低的分辨率,而较高的位置将具有较高的分辨率。
功能块708对于低分辨率视角将downsampling_flag[i]设定为等于1,对于全分辨率视角将downsampling_flag[i]设定为等于0,并将控制传递到判决块750。判决块750判定downsampling_flag[i]是否等于1。如果是,则控制被传递到功能块752。否则,控制被传递到功能块710。
功能块752设定语法元素horizontal_scale[i]和语法元素vertical_scale[i],并将控制传递到功能块710。
功能块710令视角的数目等于变量N,将变量i和变量j初始化为零,并将控制传递到判决块712。判决块712判定变量i的当前值是否小于变量N的当前值。如果是,则控制被传递到功能块714。否则,控制被传递到功能块728。
功能块714判定变量j的当前值是否小于视角i中的图片数目。如果是,则控制被传递到功能块716。否则,控制被传递到功能块736。
功能块716建立时间性图片,并将控制传递到判决块718。判决块718判定视角“i”是否具有视角间参考图片。如果是,则控制被传递到判决块720。否则,控制被传递到功能块724。
判决块720判定当视角间参考具有低分辨率时,视角间参考的视角可缩放性级别是否处于可缩放性层次体系中比当前图片低的部分中。如果是,则控制被传递到功能块722。否则,控制被传递到功能块738。
各种其他实现方式在判决块720中更一般性地工作。这种其他实现方式仅考虑视角间参考是否在视角可缩放性级别层次体系中具有与当前图片的位置相同或者高于当前图片的位置的位置(并且因此具有与当前图片相同或高于当前图片的分辨率)。在视角可缩放性级别层次体系中的位置较高则对应于分辨率较高,但通常也对应于该位置的值较低。例如,级别0通常分辨率高于级别1。然而,各种其他实现方式按相反的顺序来为级别编号。
功能块722禁止使用视角间图片作为当前图片的参考,并且将控制传递到功能块724。功能块724对图片编码,并将控制传递到功能块726。功能块726递增变量i,并将控制返回到判决块712。
功能块736递增变量i,重置frame_num和图片顺序计数(POC),并且将控制返回到判决块712。
功能块738使用视角间图片作为当前图片的参考,并且将控制传递到功能块724。
判决块728判定SPS、PPS和/或VPS(和/或用于本发明原理的目的的任何其他语法结构和/或语法元素)是否要被在带内发送。如果是,则控制被传递到功能块730。否则,控制被传递到功能块732。
功能块730在带内发送SPS、PPS和/或VPS,并将控制传递到功能块734。
功能块734将比特流写入到文件或通过网络流式传输比特流,并将控制传递到结束块799。
功能块732在带外发送SPS、PPS和/或VPS,并将控制传递到功能块734。
转到图8(总地指图8A和8B),用于对图片解码的示例性方法由标号800总地指示。
方法800包括将控制传递到功能块804的开始块802。功能块804解析SPS、PPS、VPS、片段头部和/或NAL单元头部,并将控制传递到功能块806。功能块806为每个视角“i”解析downsampling_flag[i],并将控制传递到功能块807。功能块807为每个等于1的downsampling_flag[i]解析horizontal_scale[i]和vertical_scale[i],并将控制传递到判决块808。判决块808判定当前图片是否需要解码。如果是,则控制被传递到判决块810。否则,控制被传递到功能块820。
判决块810判定图片顺序计数(POC)的当前值是否等于POC的先前值。如果是,则控制被传递到功能块812。否则,控制被传递到功能块814。
功能块812将语法元素view_num设定为等于零,并将控制传递到功能块814。
功能块814在高级别索引view_id信息以确定视角编码顺序,递增view_num,并且将控制传递到判决块816。判决块816判定当前图片是否按期望的编码顺序。如果是,则控制被传递到功能块824。否则,控制被传递到功能块818。
功能块824解析片段头部,并将控制传递到功能块826。功能块826建立时间性图片,并将控制传递到判决块828。判决块828判定视角“i”是否具有视角间参考图片。如果是,则控制被传递到判决块830。否则,控制被传递到功能块836。
判决块830判定当视角间参考具有低分辨率时,视角间参考的视角可缩放性级别在可缩放性层次体系中是否具有比当前图片低的位置。如果是,则控制被传递到功能块832。否则,控制被传递到功能块834。
各种其他实现方式在判决块830中更一般性地工作。这种其他实现方式仅考虑视角间参考是否在视角可缩放性级别层次体系中具有与当前图片的位置相同或者高于当前图片的位置的位置(并且因此具有与当前图片相同或高于当前图片的分辨率)。在视角可缩放性级别层次体系中的位置较高则对应于分辨率较高,但通常也对应于该位置的值较低。例如,级别0通常分辨率高于级别1。然而,各种其他实现方式按相反的顺序来为级别编号。
此外,并不是在所有实现方式中都使用判决块830。各种其他实现方式只是简单地对接收到的经编码流解码,并假定视角间参考图片具有至少与当前图片同样高的分辨率。
功能块832指示和/或以其他方式确定解码中差错的存在,并且将控制传递到结束块899。
功能块820获得下一图片,并将控制返回到判决块808。
功能块818隐藏当前图片,并将控制传递到功能块820。
功能块834使用视角间图片作为当前图片的参考,并将控制传递到功能块836。功能块836对图片解码,并将控制传递到功能块838。功能块838将当前图片插入到经解码图片缓冲器(DPB)中,并将控制传递到判决块840。判决块840判定是否所有图片都已被解码。如果是,则控制被传递到结束块899。否则,控制被返回到功能块824。
参考图9,示出了视频处理设备900。视频处理设备900例如可以是接收经编码的视频并提供例如经解码的视频以供显示给用户或存储的机顶盒或其他设备。因此,设备900可将其输出提供给电视、计算机监视器或计算机或其他处理设备。
设备900包括前端设备905和解码器910。前端设备905例如可以是一接收机,该接收机适合于接收具有表示经编码的图片的多个比特流的节目信号并且从该多个比特流中选择用于解码的比特流。典型的接收机执行例如以下各项中的一种或多种功能:接收经调制和编码的数据信号,对数据信号解调,对数据信号的一个或多个编码(例如信道编码和/或信源编码)进行解码,和/或对数据信号进行差错校正。前端设备905可从例如天线(未示出)接收节目信号。前端设备905将接收到的数据信号提供给解码器910。
解码器910接收数据信号920。数据信号920例如可包括符合AVC、SVC或MVC的流。解码器910对接收到的信号920的全部或一部分进行解码,并提供经解码的视频信号930作为输出。经解码的视频930被提供给选择器950。设备900还包括接收用户输入970的用户接口960。用户接口960基于用户输入970向选择器950提供图片选择信号980。图片选择信号980和用户输入970指示出用户希望显示多个图片、序列、可缩放版本或可用经编码数据的其他选项中的哪些。选择器950提供所选择的(一个或多个)图片作为输出990。选择器950使用图片选择信息980来选择提供经解码的视频930中的哪些图片作为输出990。
在各种实现方式中,选择器950包括用户接口960,而在其他实现方式中不需要用户接口960,因为选择器950直接接收用户输入970,而不执行单独的接口功能。选择器950例如可以用软件实现或者实现为集成电路。在一个实现方式中,选择器950与解码器910结合在一起,而在另一个实现方式中,解码器910、选择器950和用户接口960都被集成在一起。
在一种应用中,前端设备905接收各种电视节目的广播并且选择一个来进行处理。对一个节目的选择是基于用户关于希望观看的频道的输入的。虽然用户对前端设备905的输入在图9中没有示出,但前端设备905接收用户输入970。前端设备905接收广播,并且通过对广播频谱的有关部分进行解调并对经解调的节目的任何外部编码进行解码,来处理希望的节目。前端设备905将经解码的节目提供给解码器910。解码器910是包括设备960和950的集成单元。解码器910从而接收用户输入,该用户输入是用户提供的有关在该节目中希望观看的视角的指示。解码器910对所选择的视角以及来自其他视角的任何所需参考图片进行解码,并提供经解码的视角990以便在电视(未示出)上显示。
继续以上应用,用户可能希望切换所显示的视角,于是可向解码器910提供新的输入。在从用户接收到“视角改变”之后,解码器910对旧视角和新视角两者以及旧视角和新视角之间的任何视角进行解码。即,解码器910对从在物理上位于拍摄旧视角的相机和拍摄新视角的相机之间的相机拍摄的任何视角进行解码。前端设备905也接收标识旧视角、新视角和其间的视角的信息。这种信息例如可由拥有关于视角的位置的信息的控制器(图9中未示出)或由解码器910来提供。其他实现方式可使用具有与前端设备集成的控制器的前端设备。
解码器910提供所有这些经解码的视角作为输出990。后处理器(图9中未示出)在视角间进行插值以提供从旧视角到新视角的平滑转变,并将该转变显示给用户。在转变到新视角之后,后处理器(通过一个或多个未示出的通信链路)告知解码器910和前端设备905:仅需要新视角。然后,解码器910仅提供新视角作为输出990。
参考图10,其中示出了对于一种实现方式示出视角级别、分辨率和视角编号之间的对应关系的表格1000。在该实现方式中,存在从物理上彼此接近的相机拍摄的五个视角。这些视角从左到右被编号为0、1、2、3和4。视角0和4被指定为最重要的,因此被指派视角级别0和高分辨率。中间视角2被指定为下一重要级别并且因此被指派视角级别1和中间分辨率。剩余的视角1和3被指定为最不重要的并且因此被指派视角级别2和低分辨率。这样指定和指派的原因在于,所有内部视角1、2和3都可以从外部视角0和4插值出来,如果例如视角1、2和3有差错的话。此外,内部视角1和3也可分别从视角0和2以及视角2和4插值出来。
编码器可被提供以诸如表格1000之类的表格来用于编码。例如,表格1000可在配置文件中提供,并且编码器可使用表格1000来确定视角编码顺序和不同视角的分辨率。或者,可以不明确提供诸如表格1000之类的表格,而是可以通过为诸如视角编码顺序和视角分辨率之类的参数选择适当的值来隐含提供该信息。例如,编码器可被提供以每个视角编号的分辨率。基于该分辨率信息,编码器于是可确定每个视角的可能的视角间参考视角,并且随后可确定相应的视角编码顺序。
继续图10的示例,这种系统可提供例如编码时灵活性增强和节省比特的优点。例如,其他实现方式可基于视角类型(例如,I视角、P视角和B视角类型)来确定分辨率。在这种系统中,例如,P视角可被指派以高分辨率,而B视角可被指派以低分辨率。在这种系统中,不存在以低分辨率来对P视角编码的灵活性。因此,如果图片序列包括很多P视角,则所有这些P视角都将被以高分辨率编码,这就需要更多的比特。然而,用低分辨率来对许多P视角编码,将可能是有利的。与之不同,对于基于层次体系来指派分辨率的实现方式,一般可以用低分辨率来对许多P视角编码。例如,利用图10的五视角示例,视角1和3可包括P视角,而这些P视角可以用低分辨率来编码。因此,该五视角示例可实现例如比特的节省。
我们因此提供了具有特定的特征和方面的一种或多种实现方式。然而,所描述的实现方式的特征和方面也可针对其他实现方式进行修改。实现方式可利用多种技术来通知信息,这些技术包括但不限于以下各项中的一种或多种:SPS语法;其他高级别语法;非高级别语法;带外信息;以及隐含信令。因此,虽然这里描述的实现方式可能是在特定的上下文中描述的,但这种描述绝不应当被认为是将特征和概念限制到了这样的实现方式或上下文。
这里描述的实现方式可以例如用方法或过程、装置或软件程序来实现。即使仅仅是在一种实现方式的上下文中论述的(例如,仅是以方法的形式论述的),所论述的实现方式或特征也可以用其他形式来实现(例如,以装置或程序的形式来实现)。装置例如可以用适当的硬件、软件和固件来实现。方法例如可以实现在诸如计算机或其他处理设备之类的装置中。此外,方法可以通过处理设备或其他装置执行指令来实现,并且这种指令可被存储在诸如CD之类的计算机可读介质或其他计算机可读存储设备或集成电路上。
正如对于本领域的技术人员来说显而易见的,实现方式还可产生被格式化来携带例如可被存储或传输的信息的信号。该信息例如可包括用于执行方法的指令,或者由上述实现方式之一产生的数据。例如,信号可被格式化以携带一种或多种实现方式中描述的语法的值来作为数据,或者例如甚至携带语法指令本身作为数据(如果语法被传输的话)。
此外,许多实现方式可以用预处理器、编码器、解码器或后处理器中的一个或多个或其组合来实现。
另外,本公开设想了其他实现方式。例如,通过组合、删除、修改或补充所公开的实现方式的各种特征,可以创建其他实现方式。
这里描述的实现方式可以例如用方法或过程、装置或软件程序来实现。即使仅仅是在一种实现方式的上下文中论述的(例如,仅是以方法的形式论述的),所论述的特征的实现方式也可以用其他形式来实现(例如,以装置或程序的形式来实现)。装置例如可以用适当的硬件、软件和固件来实现。方法例如可以实现在诸如处理器之类的装置中,其中处理器总地指处理设备,其中包括例如计算机、微处理器、集成电路或可编程逻辑器件。处理设备还包括通信设备,例如计算机、蜂窝电话、便携式/个人数字助理(“PDA”),以及其他促成终端用户之间的信息通信的设备。
这里描述的各种过程和特征的实现方式可以在多种不同的设备或应用中实现,尤其例如是在与数据编码和解码相关联的设备或应用中实现。设备的示例包括视频编码器、视频解码器、视频编解码器、web服务器、机顶盒、膝上型笔记本电脑、个人计算机、蜂窝电话、PDA和其他通信设备。正如应当清楚的,该设备可以是移动的,甚至可被安装在移动交通工具中。
此外,方法可以通过处理器执行指令来实现,并且这种指令可被存储在处理器可读介质上,所述处理器可读介质例如是集成电路、软件载体或者诸如硬盘、致密盘、随机存取存储器(“RAM”)或只读存储器(“ROM”)之类的其他存储设备。指令可形成有形地包含在处理器可读介质上的应用程序。指令例如可以是硬件、固件、软件或其组合的形式。指令可存在于例如操作系统、单独的应用或两者的组合中。处理器的特征因此可在于例如被配置为执行过程的设备以及包括具有用于执行过程的指令的计算机可读介质的指令。
正如对于本领域的技术人员来说显而易见的,实现方式还可产生被格式化来携带例如可被存储或传输的信息的信号。该信息例如可包括用于执行方法的指令,或者由上述实现方式之一产生的数据。这种信号例如可被格式化为电磁波(例如,利用频谱的射频部分)或基带信号。格式化例如可包括对数据流编码并利用经编码的数据流来调制载波。信号携带的信息例如可以是模拟或数字信息。正如已知的,信号可通过多种不同的有线或无线链路来传输。
上面已经描述了若干种实现方式。然而,应当理解,可以进行各种修改。例如,不同实现方式的要素可被组合、补充、修改或去除以产生其他实现方式。此外,本领域的普通技术人员将会理解,可以用其他结构和过程来代替所公开的那些,并且由此得到的实现方式将以与所公开的实现方式至少基本相同的(一种或多种)方式来执行与所公开的实现方式至少基本相同的(一个或多个)功能,以实现与所公开的实现方式至少基本相同的(一个或多个)结果。因此,这些和其他实现方式被本申请所设想到并处于权利要求的范围之内。