首页> 中国专利> 基于上下文的自适应二进制算术编码(CABAC)的视频流兼容性

基于上下文的自适应二进制算术编码(CABAC)的视频流兼容性

摘要

一种提供兼容CABAC的改变(诸如水印)的方法,包括:访问包括至少两个块的编码数据,诸如视频数据;创建或访问对该编码数据的改变的列表,所述改变包括对块的直接改变;确定非紧接块的运动特征或运动矢量差值,非紧接块与紧邻所述块的紧接块相邻;基于所述块和所述非紧接块的原始运动特征确定对所述紧接块的改变,以及确定由所述改变的应用所导致的所述块的运动特征;如果所述改变不造成对所述紧接块的不同,则将该改变存储至所述列表;以及如果其它潜在改变可用,则评估其它潜在改变,其中所述其它潜在改变经历与所述直接改变相同的处理步骤。

著录项

  • 公开/公告号CN102187583A

    专利类型发明专利

  • 公开/公告日2011-09-14

    原文格式PDF

  • 申请/专利权人 汤姆森特许公司;

    申请/专利号CN200980141373.8

  • 发明设计人 邹德坤;杰弗里·A·布卢姆;何杉;

    申请日2009-08-17

  • 分类号H03M7/00(20060101);

  • 代理机构11105 北京市柳沈律师事务所;

  • 代理人吕晓章

  • 地址 法国伊西莱穆利诺

  • 入库时间 2023-12-18 03:17:32

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-08-31

    专利权的转移 IPC(主分类):H03M7/00 登记生效日:20160811 变更前: 变更后: 申请日:20090817

    专利申请权、专利权的转移

  • 2013-09-11

    授权

    授权

  • 2011-11-02

    实质审查的生效 IPC(主分类):H03M7/00 申请日:20090817

    实质审查的生效

  • 2011-09-14

    公开

    公开

说明书

相关申请的交叉引用

本专利申请要求2008年8月19日提交的题为“CABAC STREAM COMPLIANCE”的美国临时专利申请第61/189,372号的权益和优先权。对于所有目的,通过引用明确地将该临时申请的全部内容并入于此。

技术领域

本发明涉及在基于上下文的自适应二进制算术编码(CABAC)的视频流中嵌入水印。

背景技术

当今,强烈需求作为反盗版技术的数字水印加注。为了使得盗版者更难以规避水印,重要的是提出并使用许多潜在水印。然而,重要的是水印不干扰预期观众(intended audience)的预期观看体验。这样,需要更有效的水印加注技术。如此,本发明的目的是生成通常与水印加注相关联的可能改变的列表,所述可能改变遵循CABAC/AVC并且也不产生可见伪像,由此最终提供一种用于在CABAC视频流中嵌入水印的有效方法。

发明内容

一种提供兼容CABAC的改变(诸如水印)的方法,包括:访问包括至少两个块的编码数据,诸如视频数据;创建或访问对该编码数据的改变的列表,所述改变包括对块的直接改变;确定非紧接块的运动特征或运动矢量差值,非紧接块与紧邻所述块的紧接块相邻;基于所述块和所述非紧接块的原始运动特征确定对所述紧接块的改变,以及将由所述改变的应用所导致的所述块的运动特征;如果所述改变不造成对所述紧接块的不同,则将该改变存储至所述列表;并且如果其它潜在改变可用,则评估其它潜在改变,其中所述其它潜在改变经历与所述直接改变相同的处理步骤。块可以是任何尺寸或数目的集合元素或像素,紧接块可以是与所述块共享某个有限边界的块,而非紧接块可以是与所述紧接块共享某个有限边界但不与所述块共享边界的块。该方法可以包括解码所述编码数据以及编码所述编码数据,解码所述编码数据以及编码所述编码数据可以包括使用已经存储在所述列表中的改变。所述方法可以包括对于至少一个块确定所述编码数据的上下文和/或确定所述编码数据的上下文索引,其中上下文索引(ctxIdx)是初始值(ctxIdxOffset)和增量(ctxIdxInc)之和。所述方法还可以包括:算出或计算所述紧接块的原始增量以及与对所述块的直接改变相关联的所述紧接块的新增量;并且使用所述原始增量和新增量作为用于在存储步骤中确定所述不同的准则,其中可以将所述非紧接块的运动矢量差值以及所述块的原始运动矢量差值和新运动矢量差值用作用于在存储步骤中确定所述不同的准则。如果对于一个改变而言,所述紧接块的原始增量和所述紧接块的新增量不同,则在存储步骤中可以从所述列表中移除所述改变。所述方法还可以包括以下步骤:如果对于所述紧接块而言原始增量和紧接增量不同,则算出或计算另一紧接块的原始增量以及与对所述块的直接改变相关联的所述另一紧接块的新增量;并且使用所述另一紧接块的原始增量和新增量作为用于在存储步骤中确定所述不同的附加准则。可以将与所述另一紧接块相邻的另一非紧接块的运动矢量差值以及所述块的原始运动矢量差值和新运动矢量差值用作用于在存储步骤中确定所述不同的附加准则。另外,如果所述另一紧接块的原始增量和新增量不同,则在存储步骤中将所述改变添加到所述列表中。

附图说明

将参考附图通过示例描述本发明。

图1是CABAC编码的流程图。

图2是CABAC编码的更详细的流程图。

图3图示受改变影响的块的运动矢量差值。

图4图示受改变影响的块的另一组运动矢量差值。

图5图示用于避免编码中的错误的第一解决方案的流程图。

图6图示用于避免编码中的错误的第二解决方案和第三解决方案的流程图。

图7图示用于避免编码中的错误的第四解决方案的流程图。

具体实施方式

在此通过改变诸如CABAC(基于上下文的自适应二进制算术编码)编码视频流之类的编码视频流中的数据字节,来执行水印嵌入。重要的是指出:自始至终在H.264/AVC视频编码器背景下提及CABAC编码,以便强调所公开的发明将一般地可应用于这样的CABAC编码视频流。然而,本发明的范围一般可应用于其它的编码数据流以及其它类型的编码器。

在理解了水印加注可能引起AVC解码器故障、毁坏等的情况下,呈现旨在避免负面事件的实施例。

主要的是理解:在保持CABAC兼容性的同时,不能盲目地修改编码视频比特流的部分,诸如符合H.264/AVC视频编码标准的那些。在允许在保持CABAC兼容性的约束下的修改的系统中,改变可能意图对视频数据加标记或加水印。这样的修改可以被设计来识别可以作出的修改,使得所述修改不影响任何CABAC上下文。然而,可能出现特殊情况,其中修改可能影响被用于随后语法元素的编码/解码的上下文。具体地,修改可能不改变编码器的当前上下文,尽管如此但仍可能改变在解码器处选择的上下文。在这种情况发生时,CABAC解码器将应用错误的上下文,典型地引起解码错误。本申请描述了一个或多个实施例,所述实施例识别其中可能发生这种错误的特殊情况并且避免将引起这样的错误的修改。

本发明上下文可应用于H.264/AVC CABAC编码算法的操作,其中使用算术编码系统来改进熵编码。CABAC通过以下操作来实现良好的压缩性能:(a)根据每个语法元素的上下文选择该语法元素的概率模型;(b)基于局部统计来适配概率估计;以及(c)使用算术编码。

图1示出了CABAC中用于编码单一语法元素100的通用框图。编码处理包括多至三个基本步骤:1)二进制化评估101;2)上下文建模102;以及3)二进制算术编码103。

在图2中提供了更详细的视图。在块200中提供一语法元素,接着在判定块201中评估该语法元素,其中非二进制元素前进到步骤204。在块204中非二进制元素分量唯一地映射到二进制序列,即所谓的二进制串(bin string)。映射后的序列和在判定块201中最初被二进制估值的语法元素将前进到判定块205。在判定块205中,将以常规编码模式或以旁路编码模式处理二进制串的每个元素或每个二进制估值的元素。

在常规编码模式中,执行上下文建模步骤206,其中选择概率模型使得上下文的对应选择依赖于先前编码的语法元素或二进制。在指派了上下文模式之后,二进制值207及其相关联的模型208被传递到常规编码引擎209,其中处理算术编码的最后阶段以及随后的模型更新。

在旁路编码模式中,为了加速整个编码处理,应用不使用概率估计和更新处理的简化的非自适应算术编码引擎或旁路编码引擎210。

H.264/AVC压缩的最后步骤可以是熵编码,其中所述标准支持的熵编码方法中的至少一个是CABAC。CABAC是一种二进制算术编码技术,其中具体AVC语法元素的编码是关于由一组变量(总称为上下文)确定的特定的概率模型来执行的。CABAC编码器保存许多上下文,并且为每个语法元素的编码、或者甚至为同一语法元素的不同比特位置处的每个比特的编码选择一个。在许多情况下,编码处理导致上下文变量的修改。每个上下文保存一组上下文变量。编码处理可能改变该上下文内部的变量。

H.264/AVC解压缩的第一步骤是熵解码。当流被CABAC编码时,解码是CABAC解码。CABAC解码器保存许多上下文并且使用不同的上下文来解码不同的语法元素或者甚至同一语法元素的不同比特位置处的比特。每个上下文保存一组上下文变量。在许多情况下,解码处理导致对应上下文的上下文变量的修改。不同的上下文由上下文索引来标识。重要的是:以使得解码器和编码器保持同步的方式来编码数据。对于任何具体元素,解码器需要使用适当的上下文(即,被用来编码该元素的那个上下文)。该上下文的变量或该上下文的状态需要如在编码器中预测的那样。

在不修改任何上下文状态的情况下,可以修改比特流中的某些CABAC编码语法元素,并且这样做是有用的。然而,可能出现特殊情况,其中修改导致错误的上下文被用于随后语法元素的解码。

现在,运动矢量差值(MVD)的二进制化可以包括前缀,并且如果MVD大于9,还包括后缀,其中二进制化的MVD可以被表示或定义为MVDBIN。被用来解码帧间预测块的MVDBIN的前缀的CABAC上下文由如在H.264/AVC标准中规定的上下文索引“ctxIdx”确定。该索引是从两个变量的和计算的,所述两个变量是ctxIdxOffset和ctxIdxInc,分别为初始索引值和增量,如在下式中所示:

ctxIdx=ctxIdxOffset+ctxIdxInc

在该标准中规定了ctxIdxOffset。具体地,对于MVDBIN的水平分量而言,ctxIdxOffset为40,对于MVDBIN的垂直分量而言,ctxIdxOffset为47。对于MVDBIN前缀的不同比特位置,ctxIdxInc是不同的。对于除了第一比特之外的比特,根据比特位置来确定ctxIdxInc。具体地,在比特位置1、2、3、4、5、6(或更大)处,ctxIdxInc分别为3、4、5、6、6、6。对于MVD前缀的第一比特(比特位置0),CABAC编码器和解码器通过检查相邻块(具体地,如图3中所示的左侧相邻块(A)和上方相邻块(B))的MVD(整个MVD)的绝对值来确定增量的值ctxIdxInc,在图3中当前块被标记为“Cur”。对于除了MVDBIN的前缀的第一比特之外的比特,比特位置确定ctxIdxInc。图3中的块A和B可以被称为紧接块,这是因为它们与当前块共享边界。

为了编码/解码帧内预测块的MVDBIN的前缀的第一比特,如下面所解释的,存在可以使用的三种可能的上下文。第一上下文被编索引为ctxIdxOffset,第二上下文被编索引为ctxIdxOffset+1,而第三上下文被编索引为ctxIdxOffset+2。因此,变量ctxIdxInc可以取值0、1或2,并且该变量被用来从所述三种可用上下文中进行选择。这些上下文中的第一上下文被用于其中预期当前MVD较小的情况,在预期当前MVD的值为中等时使用第二上下文,而在预期当前MVD较大时使用第三上下文。该预期如下地基于相邻MVD值:

如果(absMvd_A+absMvd_B)小于3,则ctxIdxInc被设置为等于0。

如果(absMvd_A+absMvd_B)在3到32的范围内(包括3和32),则ctxIdxInc被设置为等于1。

如果(absMvd_A+absMvd_B)大于32,则ctxIdxInc被设置为等于2。

简言之,(absMvd_A+absMvd_B)可以落入三个区域:[0,3)、[3,32]以及(32,+∞)。(符号为阶理论(order theory)符号,分别为:右开区间、闭区间、和开区间)。

所附应用的一个或多个实施例可能导致对一些块的MVD的修改,而同时不关注造成任何上下文状态改变。然而,如果在这样的实施例中由于修改而引起块A的MVD或块B的MVD改变、或者如果两者都改变,则(absMvd_A+absMvd_B)的新值可能落入与原始区域不同的区域。在此情况下,ctxIdxInc将改变,并且错误的上下文将被用于当前块的MVDBIN的前缀的解码。因此,CABAC解码器在对块Cur的MVD进行解码时将不同地动作,并且可能导致解码错误。可以作出对于属于潜在修改的这些解码错误的第一解决方案,其不包括上下文状态中的任何改变并且如图5中所图示的。可以通过多个准则来评估这些潜在修改中的每一个,所述多个准则包括:其表示数据的能力、其对解码图像的保真度的影响、作为结果的像素改变的鲁棒性等。在所识别的潜在修改的列表中,通常仅仅选择满足依赖于具体应用的准则的那些来用于水印加注处理,而通常丢弃其余的潜在修改。

可以通过检查每个潜在修改以确定其是否将引起任何其它块的ctxIdxInc中的改变、由此可能造成解码错误,来扩展该评估。在至少一个实现方式中,丢弃引起另一块的ctxIdxInc中的改变的潜在修改。

对于块A中的将影响块A的MVD的潜在修改,如图4所示,块A的两个相邻块R(右侧)和D(下方)的MVD可能受到影响。这里,块R和D是紧接块,而M和N是非紧接块,这是因为M和N不与当前块A共享边界却与紧接块共享边界。

为了检查修改是否将造成解码错误,该解决方案检查块A中的MVD的该修改是否将造成块R中MVD的前缀或者块D中的MVD的前缀的ctxIdxInc中的改变。这导致图5中描述的算法。这里,在步骤505中,确定块A中的替换MVD。对于影响块A的MVD的潜在修改,检查或确定块R和块D中的ctxIdxInc。在这两种情况的每一种中,计算如果没有作出块A中的改变将被使用的旧ctxIdxInc。此外,在步骤515中对于R块,计算如果作出块A中的改变将使用的新ctxIdxInc,以及在步骤525中对于D块,计算如果作出块A中的改变将使用的新ctxIdxInc,其中在图5中示出了对于当前块A的这些示例相邻块。在任一情况下,在至少一个实施例中,在判定块520中对于R块和在判定块535中对于D块,如果旧ctxIdxInc和新ctxIdxInc不同,则在步骤545中丢弃该潜在修改,这是因为其具有造成上述的解码错误的可能性。如果旧ctxIdxInc和新ctxIdxInc相同,则在步骤540中保存块A中的替换MVD。

注意,用于块R的ctxIdxInc不仅依赖于块A的MVD,而且依赖于紧邻块R的块M的MVD。用于块R的ctxIdxInc由(absMvd_A+absMvd_M)所落入的范围来确定。类似地,块D的ctxIdxInc依赖于块A的MVD以及块N(块N是块D的相邻块)的MVD两者,如由(absMvd_A+absMvd_N)所落入的范围来确定。

可以将图5的算法认为是“以块A为中心的”。这里,考虑块A中的潜在改变,并且评估对下游的影响。

存在以下情况:其中,上面描述的并在图5中示出的算法不能检测或识别到任何解码错误。参考图3,图5的评估处理将不必完全解决在块A和块B两者的MVD都被修改时的情况。提出另一解决方案来考虑这一情况。

图6中图示了第二解决方案和第三解决方案,其示出了图5的解决方案的扩展版本。第二解决方案和第三解决方案的区别在于:第二解决方案使用步骤640a选项,而第三解决方案步骤640b选项。

关于第二解决方案,本质上,对于块A中的每个替换MVD,考虑或处理对图4中的块D和R的ctxIdxInc的影响。在该解决方案中的不同在于以下情况:其中,对于块M和N的MVD本身,考虑替换值。这里,期望保留将不改变块D或R的ctxIdxInc的块A的替换MVD,而不管对于块M或N选择哪些替换者。

图6示出了一种这样做的算法。对于块A的每个替换MVD,首先考虑或处理对于块M的所有可能MVD。可以评估每种组合,以便确定是否任何组合将改变块R的ctxIdxInc。如果任何组合改变块R的ctxIdxInc,则可以丢弃对于块A的该替换MVD。如果没有(对于块A的给定替换MVD的)组合改变块R的ctxIdxInc,则可以考虑对于块N的所有可能MVD。可以评估每种组合,以便确定是否任何组合将改变块D的ctxIdxInc。如果任何组合改变块D的ctxIdxInc,则可以丢弃对于块A的该替换MVD。如果没有组合改变块D的ctxIdxInc,则保存对于块A的该替换MVD。

具体地,图6以在步骤605中基于块A和M以及块A和N的原始MVD对来计算块R和D的原始ctxIdxInc而开始。在步骤610,检查块A中的每个替换MVD,之后在步骤615,检查块M中的每个MVD。在步骤620,基于M的替换MDV和A的替换MDV,执行对R的修改ctxIdxInc的计算。之后接着判定步骤625,其中,如果块R的修改ctxIdxInc等于原始ctxIdxInc,则在步骤630检查块M的另外的替换MVD,而如果块R的修改ctxIdxInc不等于原始ctxIdxInc,则在步骤640a丢弃块A中的替换MVD。在丢弃步骤640a之后是另一判定步骤645,其中考虑块A的另外的替换MVD。如果不存在块A的其它的替换MVD,则第二解决方案完成,这由步骤680表示。另一方面,如果存在块A的另外的替换MVD,则该解决方案前进到步骤650,其中访问块A中的下一替换MVD,然后循环到步骤610以及到如上所述地步骤610之后的步骤。

进一步参考图6,当在步骤625中块R的修改ctxIdxInc等于原始ctxIdxInc并且在判定步骤630中存在块M的另外的替换MVD时,则处理前进到步骤635中评估块M中的下一可用替换MVD,然后循环回到步骤615以及到如上所述地在步骤615之后的步骤。

此外,参考图6,当在步骤625块R的修改ctxIdxInc等于原始ctxIdxInc并且在判定步骤630不存在块M的另外的替换MVD时,则处理前进到在步骤655中访问块N中的每个替换MVD,并且然后前进到在步骤660中基于块N的替换MVD和块A的替换MVD计算块D的修改ctxIdxInc。在步骤660之后,在判定块665中如果块D的修改ctxIdxInc等于原始ctxIdxInc,则处理前进到判定块670,其中访问块N的另外的替换MVD。如果存在块N的另外的替换MVD,则前进到块675,其中访问块N中的下一MVD,然后循环回到步骤655以及如上所述地在步骤655之后的步骤。在判定块665中,如果块D的修改ctxIdxInc不等于原始ctxIdxInc,则处理前进到步骤640a,并且根据以上关于步骤640a提及的步骤前进。

如果在判定步骤670中不存在块N的另外的替换MVD,则该解决方案前进到步骤685,其中保存块A中的一个或多个替换MVD,之后前进到判定步骤645,其中访问块A的另外的替换MVD。如果不存在块A的更多的替换MVD,则第二解决方案完成,这由步骤680表示。另一方面,如果存在块A的另外的替换MVD,则该解决方案前进到步骤650,其中访问块A中的下一替换MVD,之后循环到步骤610以及如上所述地在步骤610之后的步骤。

该解决方案丢弃对于块A的以下任何替换MVD,所述替换MVD与对于块M或N的任何替换MVD的组合将使得该组合造成块D或R的ctxIdxInc的改变。

在一些情况下,移除块A的替换MVD可能不是优选的,并且可能需要被避免。这样,在图6中图示了第三解决方案,其中使用步骤640b选项而不是使用步骤640a选项。该第三解决方案移除其它的替换MVD,诸如与块M或N相关联的替换MVD,而不是对于块A的替换者。对第二解决方案的该修改使得在丢弃列表中记录潜在不利的组合。稍后可以处理该丢弃列表,以决定应当移除哪些替换者。

存在可以被采用来处理该丢弃列表的许多方式。这里列出一些:

1.一种方式是考虑该丢弃列表上的、其中替换MVD之一是原始MVD的任何组合。通过移除该组合的其它替换MVD来从该列表中移除该组合。

2.另一种方式是通过首先建立柱状图来最小化移除的替换MVD的数目并且对于丢弃列表上的每个替换MVD,对其出现的次数进行计数。之后,移除出现最频繁的替换MVD,由此从该丢弃列表中移除包含该替换MVD的任何组合。此外,可以从最频繁出现到最不频繁出现地继续移除替换MVD,直至该丢弃列表为空。

3.在第三种方式中,可以对于该丢弃列表上的每个替换MVD建立柱状图,并且可以对其出现的次数进行计数。然后保真度模型和/或鲁棒性模型可以向每个替换MVD指派成本。该成本可以与出现频率的柱状图一起使用,作为移除替换MVD的基础,直至该丢弃列表为空。

与前三种解决方案相反,第四种解决方案可以被认为是“以块C为中心”或“以块Cur为中心”,在于评估块Cur中的潜在改变并且检查块A或块B以确定块A或B是否具有可以影响块Cur的ctxIdxInc的改变。该第四种解决方案在图7中图示。在至少一个实现方式中,对于图像序列中每个具有替换MVD的码片执行图7的处理。

第一步骤705创建应用于当前码片中的块的潜在修改的列表。应指出:本发明的实施例意图包括访问和/或修改现有列表的特征。在这点上,可以编译、访问、或生成具有用于一码片的所有替换MVD的列表。

接下来,在步骤710,对于给定帧间预测块,考虑所有可能的MVD。所有帧间预测块将具有至少一个MVD;然而,对于一些MVD,存在已经被识别的潜在改变。每个潜在改变将导致对于当前块(块C)的不同MVD,其中该MVD被称为MVDc。对于当前块(块C),存在两个感兴趣的相邻块,左侧的块A和上方的块B,如图3所示。这些块的每一个将具有MVD,然而,对于一些相邻块而言,存在已经识别的潜在改变。每个潜在改变将导致对于该相邻块(块A或块B)的不同MVD。对于块C中的MVDc,在步骤715,考虑或收集MVDa和MVDb的所有可能组合或替换值,并且块A和B的替换MVD分别包括这些块的原始MVD。在步骤720,累计替换的所有可能组合并且将其分级(stage)以发送通过步骤725。这里,在步骤725,对于每个组合,对于块C计算ctxIdxInc。在判定步骤730中,如果任何组合造成ctxIdxInc从使用块A和B的原始MVD生成的值的改变,则在步骤735中从该列表中丢弃替换MVDa或替换MVDb之一,并且在步骤720中开始考虑下一可能组合。如果新ctxIdxInc没有不同于对于C的原始ctxIdxInc,则在步骤720从该列表中移除该改变。可以使用与在第三种解决方案中提出的处理该丢弃列表的方式相似的方式。

替换实现方式检查先前创建的列表,并且提取应用于当前码片中的块的那些子集。该方法然后一次一个地考虑当前码片中的每个帧间预测块。

可以在H.264/MPEG-4AVC(AVC)标准的背景下使用在该申请中描述的若干实现方式和特征。然而,这些实现方式和特征可以在另一标准(现有的或将来的)的背景下、或者在不涉及标准的背景下使用。因此,这里提供了具有具体特征和方面的一个或多个实现方式。然而,所描述的实现方式的特征和方面也可以被适配于其它实现方式。

这里描述的实现方式可以以例如方法或处理、装置、软件程序、数据流或信号来实现。即使仅仅在单种形式的实现方式(诸如仅仅被描述为方法)的背景下进行讨论,所讨论的实现方式或特征也可以被以其它形式(诸如装置或程序)来实现。可以以例如适当硬件、软件和固件来实现装置。可以以例如装置(诸如例如计算机或其它处理设备)来实现该方法。另外,可以通过由处理设备或其它装置执行的指令来实现该方法,并且这样的指令可以存储在诸如CD之类的计算机可读介质上、或其它计算机可读存储设备、或集成电路上。此外,计算机可读介质可以存储由实现方式所产生的数据值。

如对于本领域技术人员应该显而易见的,实施方式还可以产生被格式化为承载可以被例如存储或传输的信息的信号。该信息可以包括例如用于执行方法的指令、或由所描述的实施方式之一产生的数据。例如,信号可以被格式化为承载已加注水印的流、未加注水印的流、或水印加注信息。

另外,许多实现方式可以在编码器、解码器、处理来自解码器的输出的后处理器、或向编码器提供输入的预处理器的一个或多个中实现。此外,根据该公开可以预期其它实现方式。例如,可以通过组合、删除、修改或补充所公开的实现方式的各种特征来创建另外的实现方式。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号