説明

階層化ツリーを圧縮する方法及び圧縮されたマルチメディア信号をデコーディングする方法

【課題】マルチメディア信号を記述する階層化ツリーを圧縮する方法を提供する。
【解決手段】ツリーは、少なくとも2つの明確なタイプのコンテキストに関連付けることができるノード及びリーフを含み、それぞれがコンテントタイプの少なくとも1つに選択的に関連付けられる少なくとも2つの圧縮コード化技術によって、リーフの少なくとも幾つかに対してコンテント圧縮を実行する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明の技術分野は、データを圧縮する分野である。より正確には、本発明はXMLベースの文書(「拡張マークアップ言語規約(eXtended Markup Language)」)に関する。
【背景技術】
【0002】
本発明には、特に下記の分野のアプリケーションがあるが、それらに限定されない。
−マルチメディア用アプリケーション
−インデクセーションツール(indexation tool)
−メタデータ(meta-data)取扱いツール
−MPEG−7規格
−SMIL
−常設TV(TV Anytime)
−第三世代の無線通信(3GPP)
【0003】
XMLに対する従来の圧縮技術には、幾つかの欠点がある。特に、それらの技術はデータへの高速アクセス、高い圧縮率及び文書のプログレッシブ構造に同時に対応していない。言い換えると、大抵の場合、上記の特徴の1つに対応すると、他の全ての特徴が失われてしまう。
【0004】
従来の圧縮技術の1つは、BiM(2進MPEG)として周知である。そのような技術は、文書の構造、すなわちXML文書に関連したツリー構造のノードを2進化することによって、XML文書を圧縮する方法を提供する。このため、BiM技術はデータへの高速アクセス、文書のプログレッシブ構造及びスキップ能力を可能にするが、BiM技術を実行することによって得られる圧縮率は極めて小さい。
【発明の開示】
【発明が解決しようとする課題】
【0005】
本発明の目的は、従来技術の欠点を補償することである。より正確には、本発明は、XMLベースの文書に対する効率的な圧縮技術を提供することを目的とする。本発明は、文書のスキップ能力、高い圧縮率、及びプログレッシブ構造を提供する、XML文書に対する圧縮技術を提供することも目的とする。本発明は、MPEG−7記述子を効率的に圧縮することも目的とする。本発明の別の目的はXML文書を圧縮するための方法を実現することであり、この方法は、BiM形の技術によって与えられた圧縮率を大いに向上させるが、BiMにより与えられる機能性と同じ機能性を提供する。
【課題を解決するための手段】
【0006】
後に出てくる本発明の別の目的と同様に本発明の上記の目的は、本発明に基づいて、マルチメディア信号を記述する階層化ツリーを圧縮する方法によって実現される。このツリーは、少なくとも2つの明確なタイプの内容に結び付けることができるノード及びリーフを含むものである。この場合には、この方法は、それぞれが少なくとも1つのコンテントタイプに選択的に関連付けられた少なくとも2つの圧縮コード化技術によって、少なくとも幾つかのリーフに対してコンテント圧縮(content compression)を実現する。
【0007】
本発明の好ましい実施形態によれば、そのような方法は少なくとも1つのサブツリー(sub-tree)を識別するステップと、圧縮コード化技術の1つをこのサブツリーに割り当てるステップとを含む。
【0008】
有利には、そのような方法は、サブツリーのリーフのコンテンツ(又は、内容)が圧縮コード化技術に関連したタイプであり、サブツリーの他のリーフがいかなる圧縮コード化処理も受けないようなサブツリーのみに割り当てられた圧縮コード化技術を実行するステップを含む。
【0009】
本発明の好ましい特徴によれば、そのような方法は、圧縮コード化技術のパラメータ記述を実行する。
そのような方法は、このツリーの構造を選択的に圧縮するステップも含む。
有利には、このツリーは、MPEG7規格によるBiM(2進MPEG)形である。
この圧縮コード化技術の1つは、線形の量子化を選択的に実行する。
有利には、この圧縮コード化技術の1つは統計的な圧縮アルゴリズムを実行する。
選択的には、このアルゴリズムはGZip形である。
有利には、このアルゴリズムは、少なくとも2つのリーフの内容に対応するデータの集合に対して同時に実行される。
このツリーは、XML(Extended markup language:拡張マークアップ言語規約)形の文書の構造を選択的に示す。
本発明は、階層化ツリーを圧縮するための上記の方法に基づいて圧縮されたマルチメディア信号をデコードする方法にも関係する。
【0010】
有利には、そのような方法は、信号によって伝達されたコンテキスト情報(context information)のコード化に基づいて、現在のデコーディングコンテキスト(decoding context)をリフレッシュするステップを実行する。
この現在のコンテキストは、少なくとも1つのコンテントタイプを選択的に定義し、この方法は、リーフがこのコンテントタイプの内容を有するようなこのコンテントタイプに関連した圧縮デコーディング技術を実行するステップを含む。
【0011】
本発明は、階層化ツリーを圧縮する前述した方法が発生する信号にも関係する。
【0012】
本発明の他の特徴及び利点は、下記の説明及び以下の図面に照らしてより明確になるであろう。下記の説明は、単に説明するために示すものであり、実施例に限定するものではない。
【0013】
本発明を実行する方法を詳細に説明する前に、BiM技術としてよく知られた従来の圧縮技術の主な特徴を最初に思い出してみる。
【0014】
文書を容易に理解するために、幾つかの引例をAnnex9(表16)の中に集めて、本明細書全体にわたって参照する。本明細書に含まれる全てのAnnex(補遺)は、本発明の説明の一部をなすものである。
【0015】
1.従来技術
(はじめに)
図1に示したコーディングコンテキストは、ビットストリームをデコーディングする間に必要なデコーディング情報の集合である。コーディングコンテキストは、定義されるノードのサブツリー全体に適用できる。ツリーの全てのノードにおいて、コーディングコンテキストを修正して、新しいコーディングコンテキストを作成し、対応するサブツリーに適用するようにできる。
【0016】
コンテキストは、命令が関係するサブツリーに適用できることを特徴とする幾つかの情報を保持できる。現在のところ、BiMのサブツリーのコーディングフォーマット[1]では、これらの特徴は、(後方及び前方の互換性の特徴を提供するため、)サブツリーまたはコンテキストのスキップ能力及びサブツリーまたはコンテキストに対する複数のスキーマ(schema)のコード化である。最後に、このコンテキスト方法は、帯域幅をセーブするために全てのサブツリー内で無効にすることができる。これはコンテキスト凍結モードである。
【0017】
このコーディングコンテキスト方法は、文書ツリーの全てのサブツリーの中で最大の柔軟性を提供し、BiMのコード化方法にプラグ接続されるという拡張可能な特徴を可能にする。
【0018】
発明者らは、次に、BiM内で使用されるコンテキスト方法を説明する。
【0019】
[現在のコーディングコンテキスト方法]
(定義)
(コーディングコンテキスト(codingContext))
「コーディングコンテキスト」とは、デコーダがビットストリームをデコードするために必要とする情報の集合、すなわちコンテキスト情報である。コーディングコンテキストは、それが定義されているノード及びこのノードに対応するサブツリー全体に適用できる。
現在のコーディングコンテキスト(つまり、ある記述の指定されたノードにおいて適用可能なコンテキスト)は、文書内で修正することができる(換言すれば、その下にある情報の集合の修正)。コーディングコンテキストが修正されるたびに、修正された情報の集合を保持する新しいコーディングコンテキストが作成される。全てのコーディングコンテキストは、デコーダがコンテキストに対応するサブツリーのデコーディングを終了したとき、それらを元に戻すためにスタックされるべきものである。
【0020】
(デコーダ)
BiMのデコーダは、下記の2つのデコーダからなる、すなわち、
−コンテキストデコーダ(context decoder)。このデコーダは、コンテキスト情報のデコーディング専用である。前述したように、コンテキスト情報は記述の一部ではない。これは幾つかの外部形状、後方及び前方の互換性、高速スキッピング(fast skipping)などを保持する情報の集合である。
−要素デコーダ(element decoder)。このデコーダはBiM正規デコーダ[1](BiM regular one)であり、要素情報のデコーディング専用である。
【0021】
(チャンク)
記述の各要素は、図2に示した3つの部分にコード化される。この場合、ヘッダ部は大きさをゼロにできる2つのチャンクから構成される。
−MCはメタコンテキストのチャンク(metacontext chunk)である。
−Cはコンテキストチャンクである。
−エレメント(Element)は要素チャンクであり、これは正規の要素コーディングチャンクである([1]を参照のこと)
このMCメタコンテキストチャンクは、デコーダが次のCコンテキストチャンクをデコードするために必要とする情報を含む。すなわち、MCチャンクは、Cコンテキストチャンクのコンテキストチャンクである。
このCコンテキストチャンクは、デコーダが次の要素チャンクをデコードするために必要な、現在のコーディングコンテキストの情報の集合を変更できる情報を含む。言い換えると、このCチャンクは、要素チャンクのコンテキストチャンクである。
【0022】
(情報の集合)
現在のBiMコーディングコンテキストは、情報の集合、すなわち、次の2つの主な部類に分割できるコンテキスト情報を保持する。
−(この節に含まれた情報がコンテキストデコーディング工程のみに影響する場合の)メタコンテキスト部。
−(この節に含まれた情報が要素デコーディング工程のみに影響する場合の)コンテキスト部。
【0023】
現在の情報の集合は、下記の変数の集合である。
【表1】

定義されたクラスは、(MCメタコンテキストチャンク及びCコンテキストチャンク等の)前述したチャンクを正確にコーディングする。
【0024】
[メタコンテキストチャンク]
(定義)
MCメタコンテキストチャンクは、その大きさをゼロにすることができ、デコーダが以下の節で説明されるような次のCコンテキストチャンクを読み取る必要があるかどうかを知るための情報を含む。
【0025】
(関係する変数)
【表2】

【0026】
(デフォルト値)
freezing_stateのデフォルト値は偽である。すなわち、デフォルトでは、根本的なコンテキストを動的に変更できるようになっている。
【0027】
(伝搬規則)
新しいコンテキストが作成されるときには、
−freezing_state値は、その父親のコンテキスト(father's context)のfreezing_state値に設定される。
【0028】
(動的修正規則)
新しいコンテキストを作成するために、記述の各ノードにおいて、
−freezing_state値を偽の値から真の値に切り換えることができる。
【0029】
(デコーディング規則)
freezing_state値が真の場合には、MCメタコンテキストチャンク(及び次のCコンテキストチャンク)はビットストリームにコード化されない。真でない場合には、ヘッダ部分のMCメタコンテキストチャンクは下記のようにコード化される。
【表3】

context_chunkは偽で初期化されたローカル変数である。
【0030】
【表4】

前の節で述べたように、現在のコンテキストの変数の修正は、新しいコンテキストの作成を意味する。
【0031】
(コンテキストデコーディング工程に対する影響)
context_chunk値が真の場合には、デコーダは次のCコンテキストチャンクを読み込む必要がある。
【0032】
コンテキストチャンク
(定義)
Cコンテキストチャンクは、大きさをゼロにすることができ、現在のコンテキスト変数を動的に変更できる情報の集合を含む。これらの変数は、BiM要素のデコーディング工程に影響を与えるため、コーディング特性(codingProperties)と呼ばれる。
(関係するコーディング特性)
【表5】

【0033】
(デフォルト値)
allows_skip変数は、FDCシステム文書[1]の中で定義されているように、特別な4ビットのビットフィールド(bitfield)の最初の2ビットによって、ビットストリームの始めで初期化される。
allows_partial_instantiation変数は、特別な4ビットのビットフィールドの第3の2ビットによって、ビットストリームの始めで初期化される。
allows_subtyping変数は、特別な4ビットのビットフィールドの第4の2ビットによって、ビットストリームの始めで初期化される。
schema_modeのデフォルト値は、モノラル(mono)である。すなわち、デフォルトでは、ルートのサブツリー/コンテキストは1つのスキーマを用いてコード化される。
【0034】
(伝搬規則)
新しいコンテキストの作成時に、
−allows_skip値は、その父親のコンテキストのallows_skip値に設定される。
−allows_partial_instantiation値は、その父親のコンテキストの値に設定される。
−allows_subtyping値は、その父親のコンテキストの値に設定される。
−schema_mode値は、そのデフォルト値に設定される。
【0035】
(動的修正規則)
新しいコンテキストを作成するために、記述の各ノードにおいて、
−allows_skipは動的に修正できる。
−allows_partial_instantiationは動的に修正できない。
−allows_subtypingは動的に修正できない。
−schema_modeは動的に修正できる。
【0036】
(デコーディング規則)
Cコンテキストチャンクは、MCメタコンテキストチャンクが既に存在し、その以前のローカル変数context_chunkが真の場合にのみ存在する。
現在のコンテキストの動的な修正は、BiMの正規のコード化方式を用いてコード化されるXML要素を用いて記述される。BiMスキーマからの汎用要素modifyContextが使用される。http://www.mpeg7.org/2001/BiMCodingのコーディングスキーマは、補遺1に記載されている。
Cコンテキストチャンクは、上記のスキーマによるBiMの正規の方式を用いて記述する必要がある。
前述したように、コンテキスト内の現在のコーディング特性の修正は、新しいコンテキストの作成を意味する。このため、Cコンテキストチャンクが存在することは、修正されたコーディング特性を保持する新しいコンテキストが作られたことを意味する。
allowsSkip要素がmodifyContext要素の中で例示される場合には、allows_skipの値は新しいコンテキストの中で更新される。
schema_mode要素がmodifyContext要素の中で例示される場合には、schema_modeの値は新しいコンテキストの中で更新される。
【0037】
(要素デコーディング工程に対する影響)
allows_skip値及びschema_mode値は、スキッピング特性を処理する場合に要素デコーディング工程に影響を与える。この動作は[1]に記載されている。
schema_mode値は、要素が1つのスキーマだけにより又は幾つかのスキーマによりコード化されるのかどうかを知るために要素デコーディング工程に影響する。この仕組みは[1]に記載されている。
allows_partial_instantiation値は、1つの特殊なタイプのpartiallylnstantiatedタイプを要素の可能なサブタイプに加えることによって、要素デコーディング工程に影響を与える。[1]を参照のこと。
allows_subtyping値は、要素デコーディング工程に影響し、要素が多形性(polymorphism)(xsi:typeの属性を有する)又はユニオンの場合には、要素又は属性が異なる可能なタイプを持つことができるようにする。[1]を参照のこと。
【発明を実施するための最良の形態】
【0038】
2.本発明の説明
2.1 リーフを圧縮するためのフレームワークを提供するコンテキスト方法の拡張
本発明は、新規で興味ある特徴、すなわち、結果として生ずるビットストリームの大きさを減らすために、ある文書のリーフを圧縮する局部圧縮機(local compressor)を使用して、現在のBiMコンテキスト方法を拡張することを提案する。
【0039】
この節では、局部圧縮機を使用できるように現在のBiMコンテキスト方法を拡張する方法を説明する。これは、典型的な例では、特定の意味論規則、伝搬規則及びコーディング規則とリンクした新しい変数の集合のcodingPropertiesである。従って、この新たなcodingPropertiesの集合によって、現在のコンテキストチャンクが拡張される。
【0040】
(はじめに)
サブツリーでは、1つ又は数個の指定された単純なタイプのインスタンスがあると、それらは全て1つ又は数個の指定された圧縮機を用いて圧縮することができる。これは基本的には、圧縮機と1つ又は数個の単純なタイプとの間のマッピングを定義する。
さらに、
−場合によっては、圧縮機は幾つかの外部パラメータを必要とすることができる。
−幾つかのサブツリー内で圧縮機を使用し、別のサブツリーでは使用しないようにするために、マッピングを起動又は停止することができる。
最後に、起動または停止するために、マッピングは参照可能でなければならず、このためコンテキストの中で固有の識別子を持つ必要がある。
その結果、各コンテキストは、ゼロ、1つ又は数個のcodecTypeMapperを保持できる。ここで、codecTypeMapperは、識別子、1つ又は数個の単純なタイプ、コーデック、選択可能な外部のコーデックパラメータ及び活性化状態から成る4プレット(4-plet)である。
【0041】
(定義)
(CodecTypeMapper)
codecTypeMapperは、4プレットであり、
−サブツリーまたはコンテキストの中で固有の参照キーとして使用される識別子と、
−マッピングが適用できる1つ又は数個の単純なタイプと、
−コーデックと、
−任意選択的な外部コーデックパラメータ(コーデックに依存する)と、
−活性化状態と
を備えている。
【0042】
(識別子)
識別子は、固有の番号であり、明白な方法でコンテキスト内のマッピングを識別する。BiMのコーディングスキーマは、コンテキスト内のcodecTypeMappersの最大数を32に制限する。
【0043】
(単純なタイプ)
あるスキーマにおいて定義された全ての単純なタイプ(simple type)は、全てのコーデックによって先験的に(a priori)コード化することができるが、各コーデックはこの選択を制限できる。例えば、以後文書の中で定義するような線形の量子化器(linear quantizer)は、数値的な単純なタイプと共にのみ使用できる。
【0044】
単純なタイプは、その名前及びそれが属するスキーマのURLによって識別される。正しいスキーマを指し示すために、XMLスキーマのプレフィックス(prefix)を用いるべきである。BiMコーディングスキーマは、この対をコード化するためにある特殊なタイプを定義する、すなわち、このタイプは整数の対としてコード化されなければならない、第1の整数はわかっているスキーマの現在の数に制限され(この情報の部分は、DecoderConfig部[1]の中でフェッチすることができる)、第2の整数は対応するスキーマの中に存在するグローバルな単純なタイプの数に制限される。
【0045】
(コーデック)
圧縮機または解凍機(compressor/decompressor)の役目をするコーデック(codec)は、入力ビットを取り入れて出力ビットを書き込むモジュールである。それは幾つかの選択可能な外部パラメータを必要とすることがある。
コーデックは、BiMのコーディングスキーマの中で定義された非抽象的なコーデックの名前の中の名前によって識別される。上記の節の中で定義された現在のBiMのコーディングスキーマは、どの非抽象的なコーデックも定義しないが、本明細書の2.2節(段落番号[0061]以下)では定義している。
【0046】
(活性化状態)
活性化状態はブーリアンフラグである。
【0047】
(意味論規則)
(CodecTypeMapper)
各コンテキストは、
−ゼロ、1つ又は数個のcodecTypeMapperを保持できる。
−1つ又は数個のcodecTypeMapperを定義できる。
−1つ又は数個の現行のcodecTypeMapperを起動又は停止できる。
あるcodecTypeMapperがコンテキストの中で定義されると、それは全てのそのサブコンテキストの中に残る。
コンテキスト内に存在するcodecTypeMapperを削除又は修正することはできない(活性化状態は除く)。
【0048】
(識別子)
マッピングの識別子は、コンテキストの全てのcodecTypeMapperの中で一意的でなければならない。
【0049】
(単純なタイプ)
codecTypeMapperを1つ又は数個の単純なタイプ及びコーデックと結び付ける場合、このコーデックは単純なタイプ自体及びそれらから生じた全ての単純なタイプをコード化/デコードする。
コンテキストには、コーデックの場合とは異なり、たかだか1つの単純なタイプが存在する必要がある。
【0050】
(コーデック)
2種類のコーデック、すなわち、メモリ無しのコーデックとコンテキスト式コーデックとがある。
メモリ無しのコーデックは、常に同じ入力バイトを同じバイト出力にコード化するモジュールであり、コーデックの履歴に無関係である。典型的なメモリ無しのコーデックは、線形の限定子である。BiMのリーフ圧縮(本明細書の2.2節を参照のこと)は、そのようなコーデックを説明している。
コンテキスト式コーデックは、送られた以前のバイトを使用する(このため、コーデックのコンテキストは変更される)モジュールである。そのようなコーデックは、受け取った同じ入力バイトに対して同じ出力バイトを発生しない。典型的なコンテキスト式コーデックは、Zipのようなローカルコーデックであり、本明細書の2.2節に説明されている。
メモリ無しのコーデックは、現在のコンテキストのアーキテクチャでは何ら問題を引き起こさないが、コンテキスト式コーデックはスキップ可能なサブツリーの場合には問題を発生する。そのような場合には、この前者がサブツリーをスキップした場合にデコーダを混乱させないように、コンテキスト式コーデックはリセットされる。
【0051】
(活性化状態)
全てのサブツリー又はコンテキストにおいて、codecTypeMapperを起動又は停止することができる。
この仕組みにより、codecTypeMapperを文書ツリーのより高いレベルで定義し、使用されているサブツリーの中でのみcodecTypeMapperを再定義せずに起動することができる。
【0052】
(新しいcodingProperty:codecTypeMapper)
この部分では、新しいcodingPropertyを、前述したコンテキスト部の以前の変数の集合に加える。この新しいcodingPropertyはcodecTypeMapperと名付けられ、前の節の中で説明された以前のcodecTypeMapperのリストである。
【0053】
(関係する新しいcodingProperty)
コンテキストはcodecTypeMapperのリストを保持する。
【0054】
【表6】

【0055】
(新しいデフォルト値)
デフォルトにより、サブツリー又はコンテキスト内にはcodecTypeMapperはない。
codecTypeMapperをコンテキスト内で定義する場合には、その識別子、コーデック及びsimple_type値を定義する必要がある。指定されない場合は、新しく定義されたcodecTypeMapperの活性化状態はデフォルトにより真に設定される。すなわち、新しく定義されたcodecTypeMapperはデフォルトにより起動される。
【0056】
(新しい伝搬規則)
(規則1)
新しいコンテキストの作成時には、codecTypeMapperのリストはその父親のコンテキストのコピーである。
−識別子の値がコピーされる。
−simple_typeの値がコピーされる。
−コーデックの値が規則2に従ってコピーされる。
−codec_parameterの値がコピーされる。
−activation_stateの値がコピーされる。
(規則2)
コーデックの値がコピーされ、下記が成立する場合、つまり、
−父親のコーデックのcodingProperty[i].codecがコンテキスト式コーデックであり、
−現在のコンテキストがスキップ可能である場合には、
デコーダは、父親のコーデックの事例(その値だけでなく)をコピーし、それをリセットすることによって、コーデックの新しい事例を作成することが期待される。
例えば、ZLibコーデックがコピーされ、スキップ可能なノードに入るときに再度初期化される。
【0057】
(新しい動的な修正規則)
codecTypeMapperのリストを記述の中で下記のように動的に修正できる。
−新しいcodecTypeMapperを定義できる。
−現在の(次に参照可能な)activation_stateのcodecTypeMapperを動的に修正できる。
(そのactivation_stateを除き、)現在のcodecTypeMapperを削除することはできず、そのメンバを動的に修正することもできない。
【0058】
(新しいデコーディング規則)
同じ前の規則はCコンテキストチャンクのデコーディングに適用するが、補遺2で説明される新しいスキーマが、新しいcodecTypeMapperの動的な修正機能を加えるために使用される。
【0059】
(情報提供部)
(実施例)
補遺3に示した実施例は、記述する場合の1つの活性化された線形の限定子(本明細書の2.2節を参照のこと)の定義を示す。
【0060】
補遺4に示した実施例は、記述する場合の1つの非活性化された線形の限定子(本明細書の2.2節を参照のこと)の定義を示す。
【0061】
2.2 BiMのリーフ圧縮
異なるコーデックを用いてデータをコード化するために、本発明によって実現された仕組みをここで示す。より正確に言うと、ここで2つの実施例を示す、すなわち、1つは線形の量子化コーデックを使用して例えば浮動小数点の値を圧縮する実施例、及びもう1つはgzipのコーデックを使用して例えばストリング値を圧縮する実施例である。
【0062】
そのような仕組みはコーディングコンテキストに密接に関連しており、幾つかの他の種類のコーデックを使用できるようにする。さらに、この仕組みは、例えば、ストリップ可能なサブツリーなどのコーディングコンテキストの機能を適切に処理できる。最後に、この仕組みは、別のコーディングコンテキスト内のコーデックを再度使用することができる。
【0063】
(はじめに)
BiMのサブツリーのコーディング[1]は、記述のデータリーフを圧縮しない。現在は、リーフ値は、(IEEE754のフロート及びダブル(floats and doubles)、UTFストリングなどの)その種類に関連してコード化される。
【0064】
多くの場合には、BiMの圧縮比をその主な機能を失わずに向上させるために、(流線型の構文解析(streamline parsing)、高速スキッピング機能、タイプドデコーディング(typed decoding)などの)線形の量子化又は統計的な圧縮のような幾つかの伝統的な圧縮技術を使用することが有用である。
【0065】
次に、より優れた圧縮比を実現するために、2.1節で説明されたコンテキストコーディングの方法の中で、ある文書のデータリーフの圧縮を行うことができる方法を示す。
【0066】
2.2.1 線形量子化
(定義)
線形量子化は、情報源が既知であり、このため損失を制御できる場合に、ビットストリーム内のコード化された数の大きさを減らすための通常の損失の多い方法である。
一例として、サンプリングされたオーディオ信号の包絡線は正確なビットサイズの量子化を有するとして良く知られており、この技術は、MPEG−7のオーディオ記述をコーディングするために効果的に使用することができる。
νが実数の場合には、νはnbitsビットのνqにより下記のようにコード化することができる。
【数1】

ここで、
−νqは、νの量子化及びコード化された値である。
−nbitsは、ビットに必要な精度である。
−νminは、νが到達できる最小の包含的値である。
−νmaxは、νが到達できる最大の包含的値である。
【0067】
νからのデコード値は、
【数2】

であり、次式で与えられる。
【数3】

ここで、
【数4】

は、νのデコードされた近似値である。
【0068】
(コンテキスト方法との統合:LinearQuantizerCodec)
線形の量子化は、本明細書の2.1節の中で説明されたコーディングコンテキスト方法で定義されたように、コーデックとして使用できる。この方法を用いて、線形の量子化を記述のどのようなサブツリーの中でも、望ましい単純なタイプの数値データのリーフに対して適用できる。
【0069】
このように使用することにより、線形の量子化コーデックに関連するコーディングコンテキスト方法は、MPEG−4のBIFS[3]の中で使用されるQuantizationParameterノードとして動作する。
【0070】
(適用可能な単純なタイプに対する制約)
本明細書の2.1節のコーデックに対する定義によれば、このコーデックはメモリ無しのコーデックであり、これは全ての極小の数値及び極小でない数値の単純なタイプに適用できる。そのXMLスキーマの基本タイプは、フロート、ダブル又はデシマルである。
【0071】
(コーデックの外部パラメータ)
線形量子化器のコーデックは、下記の3つの必須のパラメータである
−上記のnbits変数であるbitSizeと、
−上記のνmin変数であるminInclusiveと、
−上記のνmax変数であるmaxInclusiveと
を必要とする。
【0072】
(コーデックのスキーマの定義)
線形量子化のコーデックは、抽象的なCodecTypeタイプ(2.1節を参照のこと)に基づいて、コーディングコンテキストのnamespaceのURL xmlns:cc=http://www.mpeg7.org/2001/BiMCodingにおける補遺5の中で与えられたスキーマで定義されたタイプLinearQuantizerCodecTypeの新しいコーデックである。
【0073】
(コード化(情報提供))
値νの数値データのリーフは、nbitsビットの符号のない整数νqにより下記の式のよう
にコード化される。
【数5】

【0074】
(デコーディング)
nbitsビットでコード化された符号のない整数νqは、下記の式のように、
【数6】

としてデコードされるべきである。
【数7】

【0075】
(実施例(情報提供))
補遺6で示された実施例は、記述における線形量子化器の定義を示す。
【0076】
2.2.2 統計的な圧縮
伝統的な損失のない統計的な圧縮アルゴリズムは、コーディングコンテキスト方法(2.1節を参照)の中で定義されたようなコーデックとして使用できる。この方法を用いて、どの記述のサブツリーの中でも、望ましい単純なタイプのデータリーフを効率的に圧縮できる。
このコーデックは、特に記述が多くの反復的な又は同様のストリングを含む場合には、ビットストリームの大きさを著しく減少させるために有用である。
【0077】
(定義)
(Zip又はGZipなどの)伝統的な損失のない統計的な圧縮アルゴリズムをBiMの中で用いて、記述の任意のリーフを圧縮することができる。
しかし、大抵の場合、データリーフが10文字よりも少ない短いストリングの場合には、通常の統計的な圧縮アルゴリズムは大きなルックアヘッドバッファ(lookahead buffer)を必要とするため、このアルゴリズムの性能は良くない。
最適な圧縮比を実現するために、文書のリーフは圧縮する前に、小さいバッファにバッファする必要がある。次の節は、根本的な損失のない統計的な圧縮アルゴリズムに依存するそのようなバッファ付き統計的コーダ(a buffered statistical coder)を定義する。
【0078】
(バッファ付き統計的コーダの定義)
バッファ付き統計的コーダは、一般的な下記の基本的な方法である、
−ストリームの圧縮又は解凍動作を初期化するinitialize_stream()と、
−コーダの現在の統計的なモデルをリセットするreset_model()と、
−入力の解凍されたバイトを取り、圧縮ストリームの中に入れるfeed_input_bytes()と、
−既に処理された入力バイトを圧縮し、対応する圧縮された出力バイトを出すことによって、圧縮ストリームをフラッシュするflush_output_bytes()と、
−指定された量の圧縮された入力バイトを取り、対応する解凍された出力バイトを出すことによってそれらをデコードするdecompress_input_bytes()と
を必ず含む根本的な統計的コーダに依存する。
バッファ付きコーデックは、bufferSizeのバイト長、すなわちバイトアレイバッファ(byte array buffer)のFIFO構造を有する。
エンコーダ側から見ると、bufferSize値はフラッシングの前にエンコーダがどの位の入力バイトを処理できるかを示す。デコーダ側からすると、これは根本的な統計的コーダのAPIを通してビットストリームをデコードするために必要な最小のバッファ寸法である。
このバッファはfillingLevel変数も有する。この変数は、バッファのバイトにおける実際の充填レベルを含む。
【0079】
(統計的なコーダとしてのZLib APIの使用)
GZip圧縮方式の中で使用されるZLibの公開ライブラリのAPI[4]は、文書リーフに対して統計的圧縮を行うための効率的で有用なAPIを提供する。
【0080】
ZLib APIは、下記のマッピングを用いて前の一般的な方法を実行する。
−initialize_stream()は、Z_DEFAULT_COMPRESSIONの効率値のパラメータを用いて、ZLibのinflateInit()又はdeflateInit()機能によってマッピングすることができる。
−reset_model()は、ZLibのinflateEnd()又はdeflateEnd()コール及び次のinitialize_stream()コールを用いてマッピングすることができる。
−feed_input_bytes()は、Z_NO_FLUSHパラメータを用いてZLibのdeflate()方法によりマッピングすることができる。
−flush_output_bytes()は、Z_SYNC_FLUSHパラメータを用いてZLibのdeflate()方法によりマッピングすることができる。
−decompress_input_bytes()は、ZLibのdeflate()方法によりマッピングすることができる。
【0081】
ZLibのバッファ付きコーデックは、[4]で定義されたように、Z_DEFAULT_COMPRESSIONの効率値を用いて初期化されるべきである。このことは、メモリのフットプリント(footprint)についての要求事項と圧縮効率との間の良いトレードオフになる。
【0082】
(コンテキスト方法との統合:ZlibCodec)
この節では、コーディングコンテキスト方法の中で定義された、ZLib APIに依存する、上記のバッファ付き統計的コーダの統合について説明する。
【0083】
(適用可能な単純なタイプに対する制約)
2.1節のコーデックに対する定義によれば、このコーデックはコンテキスト式コーデックであり、これは全ての極小のストリングタイプ及び極小でないストリングタイプに適用できる。ZLibCodecは、[1]の中で説明したように、文書のリーフの根本をなす基本的なコード化に依存している。例えば、intリーフは32ビットの符号のない整数によりコード化され、stringリーフはUTF−8のコード化により、float及びdoubleリーフはIEEE754形式でコード化される。このため、ZLibCodecは、コード化されたリーフを圧縮できる。
【0084】
(コーデックの外部パラメータ)
バッファ付きのZLibコーデックは、根本的なZLibの効率がZ_DEFAULT_COMPRESSIONに設定され、bufferSizeパラメータがデコーダ側からは必要とはされないため、どのような外部のパラメータも必要としない。
【0085】
(コーデックのスキーマの定義)
このZLibコーデックは、抽象的なCodecTypeタイプ(2.1節を参照のこと)に基づいて、補遺7のコーディングコンテキストのnamespaceの中で説明されたスキーマによって定義されたZLibCodecTypeタイプの新しいコーデックである。
【0086】
(コード化(情報提供))
コーデックの活性化又はインスタンシエーションにおいては、
−FIFOのバッファ構造はクリアであると想定され、そのfillingLevelは0に設定される。
−グローバル変数referencable_chunkは0に初期化される。
このreferencable_chunkは、エンコーダが保持しなければならない参照可能なビットのチャンクを含むべきである。その理由は、その値がコード化工程の間に後で知られるからである。通信関数signal_reference_chunk_known()は、このチャンクが知られた場合には呼び出すことができる。
全てのゼロでないチャンクのバイトの大きさは、[1]で定義されたように、標準的な符号無しの無限の整数4+1コーディング(infinite integer 4+1 coding)を用いて、flush_output_bytes()呼出しの間にチャンク自身の前に書き込まれるべきである。
入力リーフ(input leaf)は、その基本のタイプに関連したテキストのリーフのコード化された値である。このリーフのバイトの長さは、フィールドleaf.lengthによって与えられる。一例[1]を挙げれば、stringリーフは、ストリングのバイトの大きさが前に来る(無限整数のコーディング[1]を用いてコード化された)UTF−8のコードであり、doubleリーフは、対応するIEEE754規格の64ビット値である。
【0087】
下記のencode_leaf関数は、出力バイトのチャンク内のリーフをコード化することができる。
chunk encode_leaf(chunk leaf) [
while (leaf is not empty) [
if (fillingLevel + leaf.length < bufferSize) [
feed_input_bytes(leaf,leaf.length)
fillingLevel = fillingLevel + leaf.length
if (referencable_chunk is null) [
referencable_chunk = new chunk
return referencable_chunk
] else [
return nil_size_chunk
]
] else [
remaining_bytes = bufferSize - fillingLevel - leaf.length
feed_input_bytes(leaf,remaining_bytes)
referencable_chunk = flush_output_bytes()
signal_reference_chunk_known()
fillingLevel = 0
leaf = leaf.remove_beginning_bytes(remaining_bytes)
referencable_chunk = null
]
]
]
【0088】
(デコーディング)
string_fifoをストリングFIFOとする。
下記の方法get()及びput()は、それぞれ、FIFOから要素を取り出し、FIFOに要素を置く。
FIFOが空かどうかを知る方法はEmpty()信号である。
subをサブストリングを取り出す関数とする。
concatを連結関数とする。
getData()を、リーフからのde-gzipデータを保持するchar[]を戻す関数とする。
split(char[] , char sep, Fifo, char[] remainder)を各セパレータ「sep」において文字のアレイを分割し、この分割されたストリング要素をFIFOに保管し残りを戻す方法とする。
[
if (data==null) return;
int BEGIN=0;
for (int I=0;I<data.length;I++)
[
if (data[I]==sep)
[
char[] str= concat(remainder, sub(data,BEGIN,I));
put(string_fifo, str);
BEGIN=I+1;
]
]
if(BEGIN!=data.length)
[
//there's a remainder.
remainder = sub(data,BEGIN,data.length);
]
]
String decode()
[
if (isEmpty(string_fifo)
[
data = getData();
split(data,0x00,string_fifo,remainder);
]
return get(string_fifo);
]
初期化されたとき、string_fifoは空である。
コーデックの活性化又はインスタンシエーションにおいては、
−FIFOの構造はクリアであると想定され、そのnumberOfLeavesは0に設定される。
−変数first_chunkは真に設定される。
セパレータのバイトを0x00とする。
下記のdecode_leaf関数は、ビットストリームからの圧縮されたリーフをデコードすることができる。
string decode_leaf() [
if (numberOfLeaves == 0) [
read_and_decompressed_byte()
numberOfLeaves = count_number_of_leave_in_buffer()
] else [
]
]
【0089】
デコーディングは、下記により定義される。
1.FIFOが空の場合には、
a.コード化データをデコードする。
b.0x00により分離された全ての要素をFIFOの中にスタックする。
c.最後の文字が0x00でない場合は、未完成のストリングを一時的に保管する。
d.「last_element」が空でない場合は、それをFIFO内の第1の要素の先頭に挿入する。
e.このラウンドの未完成のストリングをlast_elementの中に入れる。
f.第1の要素を取り除き戻す。
【0090】
2.FIFOが空でない場合には、第1の要素を取り除き戻す。
これは、「FIFOは空ではない」及び「現在のリーフにはコード化されたデータはない」と言うのに等しい。
【0091】
(実施例(情報提供))
補遺8で与えられた説明は、string及びanyURIタイプでマッピングされたZLibCodecTypeのコーデックを使用する場合の例である。
【0092】
(結果(情報提供))
下記の図面は、記述(string及びanyURIのXMLスキーマの基本のタイプから得られた記述)のテキストのリーフを圧縮するためにZLibCodecを使用する場合の性能を示す。bufferSize=256バイトのバッファは、コード化工程の間に使用された。使用されたファイルは、MPEG−7のMDSサブグループにより提供された。
【表7】

階層化ツリーのリーフの内容を圧縮するために、本発明に基づいて実行されたステップを、ここで手早く説明する。
【0093】
ステップ1は、圧縮コード化技術をあるコンテントタイプに対応付ける工程から成る。例えば、線形の量子化を、浮動小数点の値に対応付けることができる。
【0094】
ステップ2では、あるサブツリーが検討されたXML文書の構造に対応する階層化ツリーの中で識別される。
【0095】
ステップ3は、圧縮コード化技術を識別されたサブツリーに割り当てる工程から成る。
【0096】
そして、ステップ4は、圧縮コード化技術を実行しているコーデックが起動されているかどうかを検査する工程から成る。起動されていない場合には、サブツリーのリーフの圧縮(ステップ5)は行われない。
【0097】
起動されている場合には、本発明は、その内容が(ステップ1において)圧縮コード化技術に対応付けられたコンテントタイプであるような、サブツリーのリーフの内容の圧縮を実行する(ステップ6)。
【0098】
[補遺1]
【表8】

【0099】
[補遺2]
【表9A】

【表9B】

【0100】
[補遺3]
【表10】

【0101】
[補遺4]
【表11A】

【表11B】

【0102】
[補遺5]
【表12】

【0103】
[補遺6]
【表13】

【0104】
[補遺7]
【表14】

【0105】
[補遺8]
【表15A】

【表15B】

【0106】
[補遺9]
【表16】

【図面の簡単な説明】
【0107】
【図1】コーディングコンテキストの概念を説明する図である。
【図2】BiM技術に基づいてコーディングされた要素の構造を説明する図である。
【図3】階層化ツリーのリーフの内容を圧縮するために、本発明に基づいて実行される幾つかのステップを示す図である。

【特許請求の範囲】
【請求項1】
マルチメディア信号を記述する階層化ツリーを圧縮する方法であって、
該ツリーが、データタイプと呼ばれる少なくとも2つの明確な特徴を有するデータに関連付けることができ、ノードとリーフとを含み、
それぞれが前記データタイプの少なくとも1つに選択的に関連付けられる少なくとも2つの圧縮コード化技術によって、前記リーフの少なくとも幾つかに対してデータ圧縮を実行するものである方法。
【請求項2】
少なくとも1つのサブツリーを識別するステップと、該サブツリーに対して前記圧縮コード化技術の1つを割り当てるステップとを含む請求項1に記載の方法。
【請求項3】
前記圧縮コード化技術に関連したタイプのデータをもつ前記サブツリーのリーフに対してのみ、該サブツリーに割り当てられた前記圧縮コード化技術を実行するステップを含み、前記サブツリーの他のリーフはどのような圧縮コード化も受けることはないものである請求項2に記載の方法。
【請求項4】
前記圧縮コード化技術のパラメータ記述を実行する請求項1から請求項3のいずれかに記載の方法。
【請求項5】
前記ツリーの構造を圧縮するステップをさらに含む請求項1から請求項4のいずれかに記載の方法。
【請求項6】
前記ツリーがMPEG7規格によるBiM(2進MPEG)タイプである請求項1から請求項5のいずれかに記載の方法。
【請求項7】
前記圧縮コード化技術の1つが線形の量子化を実行する請求項1から請求項6のいずれかに記載の方法。
【請求項8】
前記圧縮コード化技術の1つが統計的圧縮アルゴリズムを実行する請求項1から請求項7のいずれかに記載の方法。
【請求項9】
前記アルゴリズムがGZipタイプである請求項8に記載の方法。
【請求項10】
前記アルゴリズムが少なくとも2つのリーフのデータに対応するデータの集合に対して同時に実行されるものである請求項8及び請求項9のいずれかに記載の方法。
【請求項11】
前記ツリーがXML(拡張マークアップ言語)タイプの文書の構造を示すものである請求項1から請求項10のいずれかに記載の方法。
【請求項12】
前記階層化ツリーをデコーディングする間に前記サブツリーをスキップできるようにする幾つかの情報を含む少なくとも1つのコーディングコンテキストを前記サブツリーに関連付けるステップをさらに含む請求項1から請求項11のいずれかに記載の方法。
【請求項13】
前記幾つかの情報が、
使用された圧縮コード化技術を示す1つの情報、及び/又は、
対応するサブツリーが圧縮されているかどうかを示す1つの情報、及び/又は、
対応するサブツリーがスキップ可能かどうかを示す1つの情報、及び/又は、
使用された圧縮コード化技術の少なくとも1つのパラメータが修正されているかどうかを示す1つの情報
を含むものである請求項12に記載の方法。
【請求項14】
請求項1から請求項13のいずれかの方法に従って圧縮されたマルチメディア信号をデコーディングする方法。
【請求項15】
前記信号によって送られたコード化コンテキストの情報に基づいて、現在のデコーディングコンテキストをリフレッシュするステップを実行する請求項14に記載の方法。
【請求項16】
前記現在のコンテキストが少なくとも1つのデータタイプを定義し、該データタイプのデータを含むリーフに対して該データタイプに関連した圧縮デコーディング技術を実行するステップを含む請求項15に記載の方法。
【請求項17】
請求項1から請求項13のいずれかの方法によって生成された信号。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate


【公開番号】特開2009−43267(P2009−43267A)
【公開日】平成21年2月26日(2009.2.26)
【国際特許分類】
【出願番号】特願2008−215480(P2008−215480)
【出願日】平成20年8月25日(2008.8.25)
【分割の表示】特願2003−513248(P2003−513248)の分割
【原出願日】平成14年7月12日(2002.7.12)
【出願人】(591034154)フランス テレコム (290)
【出願人】(504015263)
【出願人】(504014691)
【Fターム(参考)】