具体实施方式
本发明的原理涉及多视图视频编码和解码的方法及装置。
本说明书阐释了本发明的原理。因此,应当的理解的是,所属领域的技术人员将能够设计出虽未在此处明确说明或示出、但体现了本发明的原理并涵盖于其精神和范围内的各种配置。
此处叙述的所有示例以及条件式语言均为达到教学目的,旨在帮助读者理解由发明者提出的改进了现有技术的发明原理以及发明构思,因而应将其看成不限于那些具体叙述的示例以及条件。
此外,此处叙述的所有本发明的原理、方案和实施例的所有说明及其具体示例均意在涵盖其结构以及功能等价物。此外,这些等价物意在包括现存等价物以及将于未来开发出来的等价物,即,不管结构如何,开发出来用于执行同一功能的任意元件。
因而,举例而言,所属领域技术人员应意识到此处所示的方框图呈现了体现本发明原理的示意电路的概念视图。类似地,应意识到流程图、状态转移图、伪码等表示各种可以计算机可读介质充分表现的,因而无论是否明确说明了计算机或处理器,均能够用计算机或处理器予以执行的过程。
可以通过采用专用硬件以及能够执行同适当软件有关的软件的硬件实现附图所示的各种实施例的功能。如果用处理器来提供功能,则可以用单独的专用处理器、单独的共享处理器或者多个其中若干可以是共享处理器的独立处理器来提供功能。此外,不应将术语“处理器”或“控制器”的明确使用看成专指能够执行软件的硬件,反之其可以无限制地隐含包括,数字处理器(“DSP”)硬件、用于存储软件的只读存储器(“ROM”)、随机存取存储器(“RAM”)以及非易失性存储器。
还可以包括常规的和/或定制的其他硬件。类似地,附图中的所有开关也只是概念上的。可以通过程序逻辑操作、专用逻辑、程序控制以及专用逻辑的相互作用,或者甚至手动实现它们的功能,其中具体技术可以根据上下文进行了更加具体的理解后,由实施者加以选择。
在其权利要求中,任意被表示为用于执行指定功能的元件都意在包含执行该功能的任意方式,后者包括:比如,a)执行该功能的电路元件的组合或b)任意形式的软件,因而包括:同用于执行该软件以实现所述功能的适当电路相结合的固件、微码或类似软件。由这种权利要求所限定的发明在于以权项要求的方式结合在一起的各种所述装置所提供的功能。因而,应将能够提供这种功能的任意装置看做此处说明的装置的等价物。
说明书中对本发明原理“一个实施例”或“一实施例”的引用意味着,至少在依照本发明原理的一实施例中包含了结合实施例进行说明的特定的特征、结构、特点等等。因而,在整篇说明书中各处出现的短语“在一个实施例中”或在“一实施例”未必指同一实施例。
如此处所用,“高层语法”指存在于在层次结构中位于宏块层之上的比特流中的语法。例如,如此处所用,高层语法可以指但不限于位于图像条(slice)头层、辅助增强信息(SEI)层、图像参数集层、以及序列参数集层的语法。
下面参考图1,参考标记100总体指示可以应用本发明原理的典型视频编码器。
视频编码器100的输入信号通信地连接至合并器110的同相输入。合并器110的输出信号通信地连接至变换器/量化器120。变换器/量化器120的输出信号通信地连接至熵编码器140。熵编码器140的输出可用作编码器100的输出。
变换器/量化器120的输出还信号通信地连接至逆变换器/量化器150。逆变换器/量化器150的输出信号通信地连接至去块滤波器160的输入。去块滤波器160的输出信号通信地连接至参考图像存储器170。参考图像存储器170的第一输出信号通信地连接至运动估计器180的第一输入。编码器100的输入还信号通信地连接至运动估计器180的第二输入。运动估计器180的输出信号通信地连接至运动补偿器190的第一输入。参考图像存储器170的第二输出信号通信地连接至运动补偿器190的第二输入。运动补偿器190的输出信号通信地连接至合并器110的反向输入。
下面参考图2,参考标记200总体指示可以应用本发明原理的典型视频解码器。
视频解码器200包括熵解码器210,用于接收视频序列。熵解码器210的第一输出信号通信地连接至逆量化器/变换器220的输入。逆量化器/变换器220的输出信号通信地连接至合并器240的第一同相输入。
合并器240的输出信号通信地连接至去块滤波器290的输入。去块滤波器290的输出信号通信地连接至参考图像存储器250的输入。参考图像存储器250的输出信号通信地连接至运动补偿器260的第一输入。运动补偿器260的输出信号通信地连接至合并器240的第二同相输入。熵解码器210的第二输出信号通信地连接至运动补偿器260的第二输入。去块滤波器290的输出可用作视频解码器200的输出。
根据本发明的原理,提供了一种多视图视频编码和解码的方法及装置。在一实施例中,提出对MPEG-4AVC标准的高层语法加以改变,以有效地处理多视图视频序列。例如,在一实施例中,提出包含标记或其他语法元素,用以在指示多视图视频序列依赖结构的不同方法间作出选择。通过提供这样的标记或其他语法元素,根据本发明原理的实施例使解码器能够确定多视图视频编码序列中不同图像如何相互依赖。采用这种方法,可以有利地仅对必要图像进行解码。此外,这种视图依赖信息提供了对于视随机访问和视可扩展性的有效支持。
已提出了两种不同的方法(以下称“第一方法”和“第二方法”),用于提供多视图压缩比特流中的依赖信息。两种方法都提出对国际标准化组织/国际电工委员会(ISO/IEC)运动图像专家组-4(MPEG-4)第10部分高级视频编码(AVC)标准/国际电信联盟电信标准化部门(ITU-T)的H.264建议(以下称“MPEG-4AVC标准”)加以改变。具体而言,两种方法定义了所谓视图参数集(VPS)的新参数集。
在以下说明中,假定节点对应于视频序列中的图像。每幅图像可以独立编码也可以根据之前编码的图像进行编码。如果图像编码依赖于之前编码的图像,则可以将参考图像(即,之前编码的图像)称为正在编码的图像的父图像。一幅图像可以用一幅以上的父图像。图像A的派生图像是用A作为其参考图像的图像。
第一种方法提供局部依赖信息。这意味着以信号告知各节点的直接父节点。采用这种方法,需要使用该依赖信息重建依赖图。重建依赖图的一种方法是递归调用以确定所述依赖图。
第二种方法提供全局依赖信息。这意味着以信号告知各节点的所有派生节点。实际上,仅使用查找表就可以判断出任意两节点间存在的祖先/后代关系。以下语法表示用于指示多视图视频比特流中依赖信息的第一和第二方法的可能的实施例。
表1示出了指示多视图比特流中依赖信息的第一方法所用的视图参数集(VPS)语法。
表1
view_parameter_set_rbsp(){ | 描述符 |
view_parameter_set_id | ue(v) |
num_multiview_refs_for_list0 | ue(v) |
num_multiview_refs_for_list1 | ue(v) |
for(i=0;i<num_multiview_refs_for_list0;i++){ | |
reference_view_for_list_0[i] | ue(v) |
} | |
for(i=0;i<num_multiview_refs_for_list1;i++){ | |
reference_view_for_list_1[i] | ue(v) |
} | |
} | |
view_parameter_set_id标识图像条头中所涉及的视图参数集。
view_parameter_set_id的值应位于0到216-1的范围内。
num_multiview_refs_for_list0指定列表0的多视图预测参考的数量。
num_multiview_refs_for_list0的值应当小于等于列表0中的最大元素数。
num_multiview_refs_for_list1指定列表1的多视图预测参考的数量。
num_multiview_refs_for_list0的值应当小于等于列表1中的最大元素数。
reference_view_for_list_0[i]标识用作列表0的当前视图的第i参考的视图的视图索引。
reference_view_for_list_1[i]标识用作列表0的当前视图的第i参考的视图的视图索引。
表2示出了指示多视图比特流中依赖信息的第二方法所用的视图参数集(VPS)语法。
表2
view_parameter_set_rbsp(){ | c | 描述符 |
view_parameter_set_id | 0 | ue(v) |
number_of_views_minus_1 | 0 | ue(v) |
avc_compatible_view_id | 0 | ue(v) |
for(i=0;i<=number_of_views_minus_1;i++){ | | |
is_base_view_flag[i] | 0 | u(1) |
dependency_update_flag | 0 | u(1) |
if(dependency_update_flag==1){ | | |
for(j=0;j<number_of_views_minus_1;j++){ | | |
anchor_picture_dependency_maps[i][j] | 0 | f(1) |
if(anchor_picture_dependency_maps[i][j]==1) | | |
non_anchor_picture_dependency_maps[i][j] | 0 | f(1) |
} | | |
} | | |
} | | |
view_pararneter_set_id标识图像条头中所涉及的视图参数集。
view_parameter_set_id的值应位于0到255的范围内。
number_of_views_minus_1加1标识比特流中视图总数。
number_of_view_minus_1的值应位于0到255的范围内。
avc_compatible_view_id指示AVC兼容视图的view_id。
avc_compatible_view_id的值应位于0到255的范围内。
is_base_view_flag[i]等于1表示视图i是基本视图,可独立解码。
is_base_view_flag[i]等于0表示视图i不是基本视图。对于AVC兼容视图i,is_base_view_flag[i]的值等于1。
dependency_update_flag等于1表示在VPS中更新该视图的依赖信息。
dependency_update_flag等于表示不更新且不应改变该视图的依赖信息。
anchor_picture_dependency_maps[i][j]等于1表示view_id等于j的锚点图像将依赖于view_id等于i的锚点图像。
non_anchor_picture_dependency_maps[i][j]等于1表示view_id等于j的非锚点图像将依赖于view_id等于i的非锚点图像。仅当anchor_picture_dependency_maps[i][i]等于1时才存在non_anchor_picture_dependency_maps[i][j]。如果存在anchor_picture_dependency_maps[i][i],且其等于0,则应推断non_anchor_picture_dependency_maps[i][j]为0.
两种方法均依赖于被称为锚点图像(锚点图像)的新图像类型的定义。
锚点图像:是一种其中所有图像条仅参考具有相同时间索引的图像条(即其他视图中的图像条,而不是当前视图中的图像条)的编码视图。这样的图像是通过设置nal_ref_idc=3来以信号进行通知的。在对锚点图像进行解码后,将可以在不根据在锚点图像之前进行解码的任意图像进行帧间预测的情况下,对依显示顺序的所有随后的编码图像进行解码。如果一视图中的图像是锚点图像,那么其他视图中具有相同时间索引的所有图像也将是锚点图像。
通过令锚点图像要求将依显示顺序的之前的图像标记为未用于参考(以斜体示出),和/或要求各视图的锚点图像对齐(以斜体加黑体示出),两种独立改变标记出了时间依赖性的断点。
如表4中以粗体显示的那样,第一方法和第二方法均引入了新的NAL单元类型。此外,如表5所示,两种方法还修改了图像条头,以指示所使用的视图参数集以及view_id。
第一方法具有处理基本视图随时间改变的情况的优势,但其需要在决定丢弃哪些图像前对图像进行额外的缓存。第一方法还具有需要用于确定依赖性的递归过程的缺点。
相反,第二方法无需任何递归过程,并且在基本视图不改变的情况下无需对图像进行缓存。然而,如果基本图像随时间变化,那么第二方法仍需要对图像进行缓存。
应当意识到,虽然本发明的原理主要是针对于用于指示多视图视频比特流中依赖信息的两种方法进行说明的,但本发明的原理还可以应用于其他用于指示多视图视频比特流中依赖信息的方法,并同时依然使本发明原理的范围保持不变。例如,可以针对替代和/或除此处描述的两种用于指示依赖信息的方法以外的其他方法实现本发明的原理。
根据本发明的原理,提出了用于引入多视图视频比特流的新语法,所述新语法用于在指示比特流中一幅以上图像的依赖结构的不同方法间进行选择。在一实施例中,该语法是高层语法。如上所述,术语“高层语法”指存在于在层次结构中位于宏块层之上的比特流中的语法。例如,如此处所用,高层语法可以指但不限于位于图像条头层、辅助增强信息(SEI)层、图像参数集层、以及序列参数集层的语法。在一实施例中,解码器根据这种语法的值可以识别出属于指示依赖结构的特定方法的随后的语法元素。在一实施例中,可以在此时将该语法存储在解码器中,并在稍后有需要时加以处理。
可以将在仅仅两种指示依赖结构的方法中进行选择看作根据本发明原理的新语法的一种特殊情况。在这种情况下,该语法元素可以只取两个值。因此,在一实施例中,该语法元素可以仅仅是比特流中的二进制值标记。以下,将对一个这样的典型实施例加以说明。
假定对于MPEG-4AVC比特流,两种方法之一基于提供该局部依赖信息,如上述第一方法。这意味着,对于每个节点以信号告知其直接父节点。在这种方法中,需要使用该信息重建依赖图。一种方式是采用递归调用以确定该依赖图。
在第二方法中,依赖信息是全局的。这意味着,对于每个节点,以信号告知其派生节点。实际上,仅使用查找表就可以判断出任意两节点间存在的祖先/后代关系。
在一实施例中,在比特流高层引入标记以指示在比特流中以信号告知了两种方法中的哪种方法。这可以是在序列参数集(SPS)、视图参数集(VPS)或存在于MPEG-4AVC比特流的高层的某种其他特殊的数据结构。
在一实施例中,该标记指vps_selection_flag。当vps_selection_flag被设置为1时,用第一方法(全局法)表示依赖图。当vps_selection_flag被设置为0时,用第二方法(局部法)指示表示依赖图。这使应用能够在指示依赖结构的两种不同方法间进行选择。表3所示的视图参数集中示出了该标记的实施例。表3示出了根据本发明原理的实施例的所提出的视图参数集(VPS)语法。表4示出了根据本发明原理的实施例的NAL单元类型码。表5示出了根据本发明原理的实施例的图像条头语法。表6示出了根据本发明原理的一实施例的所提出的序列参数集(SPS)语法。表7示出了根据本发明原理的一实施例的所提出的图像参数集(PPS)语法。
表3
view_parameter_set_rbsp(){ | 描述符 |
view_parameter_set_id | ue(v) |
vps_selection_flag | u(1) |
if(vps_selection_flag){ | |
num_multiview_refs_for_list0 | ue(v) |
num_multiview_refs_for_list1 | ue(v) |
for(i=0;i<num_multiview_refs_for_list0;i++){ | |
reference_view_for_list_0[i] | ue(v) |
} | |
for(i=0;i<num_multiview_refs_for_list1;i++){ | |
reference_view_for_list_1[i] | ue(v) |
} | |
}else{ | |
view_parameter_set_id | ue(v) |
number_of_views_minus_1 | ue(v) |
avc_compatible_view_id | ue(v) |
for(i=0;i<=number_of_views_minus_1;i++){ | |
is_base_view_flag[i] | u(1) |
dependency_update_flag | u(1) |
if(dependency_update_flag=1){ | |
for(j=0;j<number_of_views_minus_1;j++){ | |
anchor_picture_dependency_maps[i][j] | f(1) |
if(anchor_picture_dependency_maps[i][j]=1) | |
non_anchor_picture_dependency_maps[i][j] | f(1) |
} | |
} | |
} | |
} | |
表4
| NAL单元类型码 | |
nai_unit_type | NAL单元的内容和RBSP语法结构 | C |
0 | 未指定 | |
1 | 非IDR图像的编码图像条slice_layer_without_partitioning_rbsp() | 2,3,4 |
2 | 编码图像条数据划分A slice_data_partition_a_layer_rbsp() | 2 |
3 | 编码图像条数据划分B slice_data_partition_b_layer_rbsp() | 3 |
4 | 编码图像条数据划分C slice_data_partition_c_layer_rbsp() | 4 |
5 | IDR图像的编码图像条slice_layer_without_partitioning_rbsp() | 2,3 |
6 | 辅助增强信息(SEI)sei_rbsp() | 5 |
7 | 序列参数集seq_parameter_set_rbsp() | 0 |
8 | 图像参数集pic_parameter_set_rbsp() | 1 |
9 | 访问单元定界符access_unit_delimiter_rbsp() | 6 |
10 | 序列结尾end_of_seq_rbsp() | 7 |
11 | 流的结尾end_of_stream_rbsp() | 8 |
12 | 填充数据filler_data_rbsp() | 9 |
13 | 序列参数集extension seq parameter_set_extension_rbsp() | 10 |
14 | 视图参数集view_parameter_set_rbps() | 11 |
15..18 | 保留 | |
19 | 未划分的辅助编码图像的编码图像条slice_layer_without_partitioning_rbsp() | 2,3,4 |
20 | 可伸缩扩展中非IDR图像的编码图像条slice_layer_in_scalable_extension_rbsp() | 2,3,4 |
21 | 可伸缩扩展中IDR图像的编码图像条slice_layer_in_scalable_extension_rbsp() | 2,3 |
22 | 多视图扩展中非IDR图像的编码图像条slice_layer_in_mvc_extension_rbsp() | 2,3,4 |
23 | 多视图扩展中DR图像的编码图像条slice_layer_in_mvc_extension_rbsp() | 2,3 |
24..31 | 未指定 | |
表5
slice_header(){ | C、 | 描述符 |
first_mb_in_slice | 2 | ue(v) |
slice_type | 2 | ue(v) |
pic_parameter_set_id | 2 | ue(v) |
if(nal_unit_type==22||nal_unit_type==23){ | | |
view_parameter_set_id | 2 | ue(v) |
view_id | 2 | ue(v) |
} | | |
frame_num | 2 | u(v) |
if(!frame_mbs_only_flag){ | | |
field_pic_flag | 2 | u(1) |
if(field_pic_flag) | | |
bottom_field_flag | 2 | u(1) |
} | | |
........ | | |
} | | |
表6
seq_parameter_set_rbsp(){ | C | 描述符 |
profile_idc | 0 | u(8) |
..... | | |
if(profile_idc=MULTI_VIEW_PROFILE){ | | |
vps_selection_flag | | |
} | | |
if(profile_idc==100||profile_idc=110||profile_idc==122||profile_idc=144||profile_idc==83||profile_idc==MULTI_VIEW_PROFILE){ | | |
chroma_format_idc | 0 | ue(v) |
..... | | |
} | | |
表7
pic_parameter_set_rbsp(){ | C | 描述符 |
pic_parameter_set_id | 1 | ue(v) |
seq_parameter_set_id | 1 | ue(v) |
entropy_coding_mode_flag | 1 | u(1) |
...... | | |
if(profile_idc==MULTI_VIEW_PROFILE){ | 1 | u(1) |
vps_slection_flag | 1 | ue(v) |
} | 1 | |
..... | | |
} | | |
下面参考图3,参考标记300总体指示将vps_selection_flag***结果比特流的典型方法。方法300特别适于对与多视图视频内容相对应的多视图进行编码。
方法300包括将控制权交予功能框310的起始框305。功能框310提供随机访问方法选择准则,并将控制权交予判决框315。判决框315判断是否要将第一方法的语法用于随机访问。倘若如此,就将控制权交予功能框320。否则,就将控制权交予功能框335。
功能框320将vps_selection_flag设置为1,并将控制权交予功能框325。功能框325将第一方法的随机访问语法写入视图参数集(VPS)、序列参数集(SPS)、或图像参数集(PPS),并将控制权交予功能框350。
功能框350读取编码器参数,并将控制权交予功能框355。功能框355对图像进行编码,并将控制权交予功能框360。功能框360将比特流写入文件或流,并将控制权判决框365。判决框365判断是否要对更多的图像进行编码。倘若如此,就将控制权返还至功能框355(以对下一图像进行编码)。否则,就将控制权传递至判决框370。判决框370判断参数是不是以带内信号告知的。倘若如此,就将控制权传递至功能框375。否则,将控制权传递至功能框380。
功能框375将参数集作为比特流的一部分写入文件,或使参数集与比特流一起流动,并将控制权交予终止框399。
功能框380使参数集独立于比特流(带外)成流,并将控制权交予终止框399。
功能框335将vps_selection_flag设置为0,并将控制权交予功能框340。功能框340将第二方法的随机访问语法写入VPS、SPS、或PPS,并将控制权交予功能框350。
下面参考图4,参考标记400总体指示对比特流中的vps_selection_flag进行解码的典型方法。方法400适于对与多视图视频内容相对应的多视图进行解码。
方法400包括将控制权交予功能框410的起始框405。功能框410判断参数集是不是以带内信号告知的。倘若是以带内信号告知的,就将控制权传递至功能框415。否则,将控制权传递至功能框420。
功能框415开始解析包含参数集和编码视频的比特流,并将控制权交予功能框425。
功能框425读取存在于视图参数集(VPS)、序列参数集(SPS)、或图像参数集(PPS)中的vps_selection_flag,并将控制权交予判决框430。
判决框430判断vps_selection_flag是否等于1。倘若等于1,就控制权就被传递至功能框435。否则,就将控制权传递至功能框440。
功能框435读取第一方法的随机访问语法,并将控制权交予判决框455。判决框455判断是否要求随机访问。倘若要求,就将控制权传递至功能框460。否则,将控制权传递至功能框465。
功能框460基于VPS、SPS、或PPS语法确定对所请求视图进行解码所需的图像,并将控制权交予功能框465。
功能框465对比特流进行解析,并将控制权交予功能框470。功能框470对图像进行解码,并将控制权交予判决框475。判决框475判断是否有更多的图像需要译码。倘若存在更多需要译码的图像,就将控制权返还至功能框465。否则,就将控制权传递至终止框499。
功能框420从带外流中获得参数集,并将控制权交予功能框425。
功能框440读取第二方法的随机访问语法,并将控制权交予判决框455。
下面将对本发明的某些附属优势/特征予以说明,其中某些优势/特征已在上文有所提及。举例而言,一种优势/特征在于一种装置,该装置包括:编码器,用于使用语法元素将与多视图视频内容相对应的至少两个视图编码为结果比特流。语法元素标识至少两种方法中特定的一种,所述两种方法指示至少两个视图的至少部分视图间的解码依赖性。另一优势/特征在于具有上述编码器的装置,其中,所述语法元素是高层语法元素。另一优势/特征在于具有上述编码器的装置,其中,所述高层语法是相对于结果比特流以带外方式来提供的。另一优势/特征在于具有上述编码器的装置,其中,所述高层语法是相对于结果比特流以带内方式来提供的。此外,另一优势/特征在于具有上述编码器的装置,其中,所述语法元素存在于结果比特流的参数集中。此外,另一优势/特征在于具有上述编码器的装置,其中,所述参数集是视图参数集、序列参数集、或图像参数集之一。此外,另一优势/特征在于具有上述编码器的装置,其中,所述语法元素是二进制值标记。此外,另一优势/特征在于具有上述编码器的装置,其中,所述语法元素是上述二进制值标记,其中所述标记被表示为vps_selection_flag元素。此外,另一优势/特征在于具有上述编码器的装置,其中,所述语法元素是上述二进制值标记,其中所述标记存在于比结果比特流中的宏块层更高的高层中。此外,另一优势/特征在于具有上述编码器的装置,其中,所述语法元素是存在于比结果比特流中的宏块层更高的高层中的上述二进制值标记,其中所述高层与结果比特流的参数集相对应。此外,另一优势/特征在于具有上述编码器的装置,其中,所述语法元素位于与上述参数集相对应的层中,其中所述参数集是序列参数集、图像参数集、或视图参数集之一。
根据此处的教导,所属领域技术人员易于弄清本发明的上述和其他特征以及优势。应当理解的是,可以硬件、软件、固件、专用处理器或其组合等各种形式实现对本发明原理的教导。
优选情况下,用硬件和软件的组合实现对本发明原理的教导。此外,可以用确实包含于程序存储单元中的应用程序实现软件。应用程序可装载于具有任意适当架构的机器,并由后者予以执行。优选情况下,在具有诸如一个以上的中央处理单元(“CPU”)、随机存取存储器(“RAM”)以及输入/输入(“I/O”)接口等硬件的计算机平台上实现所述机器。计算机平台还可以包含操作***以及微指令代码。此处说明的各种处理以及函数可以是用CPU执行的、微指令代码的一部分或者应用程序的一部分或者其任意组合的一部分。此外,可以将诸如附加数据存储单元和打印单元等各种其他***设备连接至计算机平台。
还应当理解的是,由于附图中所描绘的某些构成***组件以及方法在优选情况下是用软件来实现的,因而***组件或处理功能框间的实际连接根据本发明的编程方式可能会有所不同。给定此处的说明,所属领域技术人员将能够构想出本发明的上述以及类似的实现或者配置。
虽然参考附图对说明性实施例进行了描述,然而应当理解的是,本发明不局限于这些具体的实施例,所属领域技术人员可以在不背离本发明范围或精神的前提下进行各种改进以及修改。正如附属权利要求所阐释的那样,意图将所有此类修改以及改进包含于本发明的范围之内。