図面を説明する際、これらの図中のいくつかにおいて発生する要素は各図面において同一の参照番号によって示され、機能性に関する限りこれらの要素の反復説明は不要な反復を避けるために省略していることに留意されたい。しかるに、そうでない場合の記述が特にされていない限り、1つの図に関して提供される機能性および説明は他の図にも当てはめることができる。
本発明の実施形態によるエンコーダを図1に示す。このエンコーダは、ソースシンボル1のストリームを2つ以上の部分的ビットストリーム12の集合へ可逆的に変換する。本発明の好ましい実施形態において、各ソースシンボル1は1以上のカテゴリの集合のカテゴリに関連付けられる。一例として、カテゴリはソースシンボルのタイプを指定することができる。ハイブリッドビデオ符号化のコンテクストにおいて、個別のカテゴリはマクロブロック符号化モード、ブロック符号化モード、基準画像インデックス、動きベクトル差、分割フラグ、符号化されたブロックフラグ、量子化パラメータ、変換係数レベルなどに関連付けられる。オーディオ、音声、テキスト、文書、または汎用データ符号化などの他のアプリケーション分野において、ソースシンボルのさまざまな分類が可能である。
一般に、各ソースシンボルは有限または可算無限集合の値を取ることができ、可能なソースシンボル値の集合は、異なるソースシンボルカテゴリごとに異ならせることができる。符号化および復号化アルゴリズムの複雑さを低減するとともに異なるソースシンボルとソースシンボルカテゴリに対する一般の符号化および復号化の設計を可能にするため、ソースシンボル1はバイナリディシジョンの順序付けられた集合に変換され、これらのバイナリディシジョンは単純なバイナリ符号化アルゴリズムによって処理される。よって、バイナライザ2は各ソースシンボル1の値をビン3の列(またはストリング)へ全単射マッピングする。ビン3の列は順序付けられたバイナリディシジョンの集合を表す。各ビン3またはバイナリディシジョンは、たとえば、0と1の組合せなどの2つの値の組合せから1つの値を取ることができる。2値化方式は異なるソースシンボルカテゴリ別に異なっていてよい。特定のソースシンボルカテゴリに対する2値化方式は、その特定のカテゴリに対する可能なソースシンボル値および/またはソースシンボルの他の特性の集合に依存することができる。表1は、可算無限集合のための3つの例示的な2値化方式を示す。これらの可算無限集合の2値化方式は、シンボル値の有限集合に適用することもできる。シンボル値の大きな有限集合の場合は特に、(未使用のビン列から生じる)非効率性を無視することができるが、このような2値化方式の普遍性は複雑さとメモリ要件の面で利点を提供する。シンボル値の小さな有限集合の場合、可能なシンボル値の数に対して2値化方式を適応することが(符号化効率の点から)好ましいことが多い。表2は、8つの値から成る有限集合に対する3つの例示的な2値化方式を示している。有限集合に対する2値化方式は、ビン列の有限集合が冗長度のないコードを表す(かつ潜在的にビン列を並び換える)ようにビン列の一部を変更することによって可算無限集合に対する普遍的2値化方式から得ることができる。たとえば、表2の切り捨て単項2値化方式は、普遍的単項2値化のソースシンボル7に対するビン列を変更することによって作られた(表1参照)。表2の次数0の、切り捨てられかつ並べ換えられた指数ゴロム2値化は、普遍的指数ゴロム次数0の2値化のソースシンボル7に対するビン列を変更することによって(表1参照)、およびビン列を並び換えることによって(シンボル7の切捨てられたビン列はシンボル1に割り当てられた)作られた。シンボルの有限集合の場合、表2の最後の列に例示されるように、非系統的/非普遍的な2値化方式を使用することも可能である。
バイナライザ2によって作成されたビン列の各ビン3はパラメータ割当部4に順に送られる。パラメータの割当部は各ビン3に1以上のパラメータの集合を割り当て、パラメータの関連付けられた集合を有するビン5を出力する。パラメータの集合は、エンコーダとデコーダにおいて全く同じ方法で判定される。パラメータの集合は、以下のパラメータの1以上から成る場合がある。
・現在のビンに対する2つの可能なビン値の1つに対する確率の予測に対する測度、
・現在のビンに対する確率の低いまたは確率の高いビン値に対する確率の予測に対する測度、
・2つの可能なビン値のうちどちらが現在のビンに対する確率の低いまたは確率の高いビン値を表すかの予測を指定する識別子、
・関連付けられたソースシンボルのカテゴリ、
・関連付けられたソースシンボルの重要度の測度、
・関連付けられたシンボルのロケーションの測度(たとえば、時間的、空間的、または量的なデータ集合における)、
・ビンまたは関連付けられたソースシンボルに対して伝送路コード保護を指定する識別子、
・ビンまたは関連付けられたソースシンボルに対して暗号化方式を指定する識別子、
・関連付けられたシンボルに対する等級を指定する識別子、
・関連付けられたソースシンボルに対するビン列内のビン数。
本発明の好ましい実施形態において、パラメータ割当部4は、各ビン3、5を、現在のビンに対する2つの可能なビン値のうちの1つに対する確率の予測のための測度に関連付ける。本発明の更なる好ましい実施形態において、パラメータ割当部4は、各ビン3、5を、現在のビンに対して確率の低いまたは確率の高いビン値に対する確率の予測に対する測度と、2つの可能なビン値のうちどちらが現在のビンに対する確率の低いまたは確率の高いビン値を表すかの予測を指定する識別子と、に関連付ける。確率の低いまたは確率の高いビン値に対する確率と、2つの可能なビン値のうちどちらが確率の低いまたは確率の高いビン値であるかを指定する識別子とは、2つの可能なビン値のうちの1つの確率に対する等しい測度であることに留意されたい。
本発明の更なる好ましい実施形態において、パラメータ割当部4は、各ビン3、5を、現在のビンに対する2つの可能なビンのうちの1つに対する確率の予測のための測度と、1以上の更なるパラメータ(上記に挙げたパラメータの1以上であり得る)と、に関連付ける。本発明の更なる好ましい実施形態において、パラメータ割当部4は、各ビン3、5を、現在のビンに対する確率の低いまたは確率の高いビン値の確率の予測に対する測度と、2つの可能なビン値のうちどちらが現在のビンに対して確率の低いまたは確率の高いビン値を表すかの予測を指定する識別子と、1以上のパラメータ(上記に挙げたパラメータのうちの1以上であり得る)と、に関連付ける。
本発明の好ましい実施形態において、パラメータ割当部4は、すでに符号化されたシンボルの1以上の集合に基づいて、上述した確率測度(現在のビンに対する2つの可能なビン値のうちの1つに対する確率の予測に対する測度、現在のビンに対して確率の低いまたは確率の高いビン値の確率の予測に対する測度、および2つの可能なビン値のうちどちらが現在のビンに対する確率の低いまたは確率の高いビン値を表すかの予測を指定する識別子)の1以上を算定する。確率測度を算定するために使用される符号化されたシンボルは、同じシンボルカテゴリの1以上のすでに符号化されたシンボル、(現在のソースシンボルに関連付けられたデータ集合に関して)隣り合って配設されている空間的および/または時間的なロケーションの(たとえばサンプルのブロックや群など)データ集合に対応する同じシンボルカテゴリの1以上のすでに符号化されたシンボル、または、(現在のソースシンボルに関連付けられたデータ集合に関して)同じおよび/または隣り合って配設されている空間的および/または時間的なロケーションのデータ集合に対応する異なるシンボルカテゴリの1以上のすでに符号化されたシンボルを含むことができる。
パラメータ割当部4の出力であるパラメータの関連付けられた集合を有する各ビン5は、ビンバッファ選択部6に送られる。ビンバッファ選択部6は、入力されたビン値とこれに関連付けられたパラメータ5に基づいて、入力されたビン5の値を潜在的に変更し、この潜在的に変更された値を有する出力ビン7を2つ以上のビンバッファ8のうちの1つに送る。出力ビン7が送られるビンバッファ8は、入力ビン5の値および/または関連付けられたパラメータ5の値に基づいて、決定される。
本発明の好ましい実施形態において、ビンバッファ選択部6はビンの値を変更しない。すなわち、出力ビン7は入力ビン5と常に同じ値を有する。
本発明の更なる好ましい実施形態において、ビンバッファ選択部6は、入力ビン値5と、現在のビンに対する2つの可能なビン値のいずれか1つに対する確率の予測に対する関連付けられた測度と、に基づいて、出力ビン値7を求める。本発明の好ましい実施形態において、出力ビン値7は、現在のビンに対する2つの可能なビン値のいずれか1つに対する確率に対する測度が特定のしきい値未満(またはしきい値以下)の場合、入力ビン値5と同等に設定され、現在のビンに対する2つの可能なビン値のいずれか1つに対する確率に対する測度が特定のしきい値以上の(またはしきい値より大きい)場合、出力ビン値7は変更される(すなわち入力ビン値の逆に設定される)。本発明の更なる好ましい実施形態において、出力ビン値7は、現在のビンに対する2つの可能なビン値のいずれか1つに対する確率に対する測度が特定のしきい値より大きい(またはしきい値以上の)場合、入力ビン値5と等しい値を設定され、現在のビンに対する2つの可能なビン値のいずれか1つに対する確率に対する測度が特定のしきい値以下(またはしきい値未満)の場合、出力ビン値7は変更される(すなわち入力ビン値の逆に設定される)。本発明の好ましい実施形態において、しきい値は、両方の可能なビン値の予測される確率に対して値0.5に一致する。
本発明の更なる好ましい実施形態において、ビンバッファ選択部6は、入力ビン値5と、2つの可能なビン値のうちどちらが現在のビンに対する確率の低いまたは確率の高いビン値を表すかの予測を指定する関連付けられた識別子と、に基づいて、出力ビン値7を求める。本発明の好ましい実施形態において、識別子が2つの可能なビン値の第1のビン値が現在のビンに対する確率の低い(または確率の高い)ビン値を表すことを指定する場合、出力ビン値7は入力ビン値5と等しい値を設定され、識別子が2つの可能なビン値の第2のビン値が現在のビンに対する確率の低い(または確率の高い)ビン値を表すことを指定する場合、出力ビン値7は変更される(すなわち、入力ビン値の逆に設定される)。
本発明の好ましい実施形態において、ビンバッファ選択部6は、現在のビンに対する2つの可能なビン値のいずれか1つに対する確率の予測に対する関連付けられた測度に基づいて、出力ビン7が送られるビンバッファ8を決定する。本発明の好ましい実施形態において、2つの可能なビン値のいずれか1つに対する確率の予測に対する測度としての可能な値の集合は有限であり、ビンバッファ選択部6は、2つの可能なビン値の1つに対する確率の予測に対する各可能な値に1つだけのビンバッファ8を関連付けるテーブルを含み、2つの可能なビン値の1つに対する確率の予測に対する測度に対して異なる値を同じビンバッファ8に関連付けることができる。本発明の更なる好ましい実施形態において、2つの可能なビン値の1つに対する確率の予測に対する測度として可能な値の範囲は多数のインターバルに分割され、ビンバッファ選択部6は2つの可能なビン値の1つに対する確率の予測に対する現在の測度に対するインターバルインデックスを決定し、また、ビンバッファ選択部6は1つだけのビンバッファ8をこのインターバルインデックスに対する各可能な値に関連付けるテーブルを含み、インターバルインデックスに対して異なる値を同じビンバッファ8に関連付けることができる。本発明の好ましい実施形態において、2つの可能なビン値の1つに対する確率の予測に対する逆の測度を有する入力ビン5(逆測度は確率予測Pおよび1−Pを表す測度である)は同じビンバッファ8へ供給される。本発明の更なる好ましい実施形態において、現在のビンに対する2つの可能なビン値の1つに対する確率の予測に対する測度を特定のビンバッファに関連付けることは、たとえば、作成された部分的ビットストリームが同様のビットレートを有することを確実にするために、経時的に適応される。
本発明の更なる好ましい実施形態において、ビンバッファ選択部6は、現在のビンに対して確率の低いまたは確率の高いビン値の確率の予測に対する関連付けられた測度に基づいて出力ビン7が送られるビンバッファ8を決定する。本発明の好ましい実施形態において、確率の低いまたは確率の高いビン値に対する確率の予測に対する測度として可能な値の集合は有限であり、ビンバッファ選択部6は、1つだけのビンバッファ8を確率の低いまたは確率の高いビン値に対する確率の予測の各可能な値に関連付けるテーブルを含み、確率の低いまたは確率の高いビン値に対する確率の予測に対する測度に対して異なる値を同じビンバッファ8に関連付けることができる。本発明の更なる好ましい実施形態において、確率の低いまたは確率の高いビン値に対する確率の予測に対する測度として可能な値の範囲は多数のインターバルに分割され、ビンバッファ選択部6は確率の低いまたは確率の高いビン値に対する確率の予測に対する現在の測度に対するインターバルインデックスを決定し、また、ビンバッファ選択部6は1つだけのビンバッファ8をこのインターバルインデックスに対する各可能な値に関連付けるテーブルを含み、このテーブルにおいて、インターバルインデックスに対して異なる値を同じビンバッファ8に関連付けることができる。本発明の更なる好ましい実施形態において、現在のビンに対する確率の低いまたは確率の高いビン値に対する確率の予測に対する測度を特定のビンバッファに関連付けることは、たとえば、作成された部分的ビットストリームが同様のビットレートを有することを確実にするために、経時的に適応される。
2つ以上のビンバッファ8のそれぞれは1つだけのビンエンコーダ10に連結され、各ビンエンコーダは1つのビンバッファ8だけに連結されている。各ビンエンコーダ10は、関連付けられているビンバッファ8からビンを読み出し、ビン列9をビットの列を表す符号語11に変換する。ビンバッファ8は先入れ先出しバッファを表し、後から(順に)ビンバッファ8に送られるビンはビンバッファ8に先に(順に)送られるビンより前に符号化されない。特定のビンエンコーダ10の出力である符号語11は特定の部分的ビットストリーム12に書き込まれる。全体の符号化アルゴリズムは、ソースシンボル1を2つ以上の部分的なビットストリーム12へ変換し、この場合、部分的ビットストリームの数はビンバッファとビンエンコーダの数と等しい。本発明の好ましい実施形態において、ビンエンコーダ10は、ビン9の可変数をビットの可変数の符号語11に変換する。上記および下記に概説される本発明の実施形態の1つの利点は、ビンの符号化は(たとえば、確率測度の異なる群に対して)並行して行うことができる点にあり、これによっていくつかのインプリメンテーションに対する処理時間が短縮される。
本発明の実施形態の他の利点は、ビンエンコーダ10によって行われるビン符号化がパラメータ5の異なる集合に対して具体的に設計できる点にある。特に、ビン符号化と符号化は、予測確率の異なる群ごとに(符号化効率および/または複雑さに関して)最適化することができる。一方で、これは、同様の符号化効率を有する最先端のエントロピー符号化アルゴリズムに対して符号化/復号化の複雑さの低減を可能にする。他方では、同様の符号化/復号化の複雑性を有する最先端のエントロピー符号化アルゴリズムに対して符号化効率の向上を可能にする。本発明の好ましい実施形態において、ビンエンコーダ10は、現在のビンに対する2つの可能なビン値5の1つに対する確率の予測に対する測度の異なる群ごとに異なる符号化アルゴリズムを実施する(すなわち、ビン列を符号語にマッピングする)。本発明の更なる好ましい実施形態において、ビンエンコーダ10は、現在のビンに対する確率の低いまたは確率の高いビン値に対する確率の予測に対する測度の異なる群ごとに、異なる符号化アルゴリズムを実施する。更なる好ましい実施形態において、ビンエンコーダ10は、異なる伝送路保護コードごとに異なる符号化アルゴリズムを実施する。更なる好ましい実施形態において、ビンエンコーダ10は、異なる暗号化方式ごとに異なる符号化アルゴリズムを実施する。更なる好ましい実施形態において、ビンエンコーダ10は、伝送路保護コードと、現在のビンに対する2つの可能なビン値5のいずれか1つに対する確率の予測に対する測度の群との様々な組み合わせに対して、異なる符号化アルゴリズムを実施する。更なる好ましい実施形態において、ビンエンコーダ10は、伝送路保護コードと、現在のビンに対して確率の低いまたは確率の高いビン値5の確率の予測に対する測度の群と、の様々な組み合わせに対して、異なる符号化アルゴリズムを実施する。更なる好ましい実施形態において、ビンエンコーダ10は、暗号化方式と、現在のビンに対する2つの可能なビン値5のいずれか1つに対する確率の予測に対する測度の群と、の様々な組み合わせに対して、異なる符号化アルゴリズムを実施する。更なる好ましい実施形態において、ビンエンコーダ10は、暗号化方式と、現在のビンに対する確率の低いまたは確率の高いビン値5に対する確率の予測に対する測度の群と、の様々な組み合わせに対して、異なる符号化アルゴリズムを実施する。
本発明の好ましい実施形態において、複数のビンエンコーダ10、またはビンエンコーダの1つ以上、はバイナリ算術符号化エンジンを表している。本発明の更なる好ましい実施形態において、ビンエンコーダの1つ以上がバイナリ算術符号化エンジンを表し、ここで、所与のビンバッファの代表的LPS/LPB確率pLPSから対応するコードインターバル幅RLPSへのマッピング、すなわち、たとえば、符号インターバルの下限を識別する現在のインターバル幅Rと現在のインターバルオフセットLとによって画定されるバイナリ算術符号化エンジンの内部状態のインターバル分割、は、テーブルルックアップを使用することによって実現される。更なる好ましい実施形態において、所与のビンバッファに関連付けられる各テーブルベースのバイナリ算術符号化エンジンに対して、K個の代表的インターバル幅の値{Q0、...、QK−1}がRLPSを表すために使用され、その際、Kの選択および代表的インターバル幅の値{Q0、...、QK−1}はビンバッファに依存している。K>1を選択した場合、ビンの算術符号化は、現在のインターバル幅Rを{0、...、K−1}の値を有する量子化インデックスqにマッピングし、qをインデックスとして使用することによってルックアップテーブルから対応する部分的インターバル幅の値のQqにアクセスすることによってインターバル分割を実行するサブステップを含む。K=1を選択する場合、すなわち、代表的インターバル幅の値Q0だけが付与されている場合、この値Q0は、単一の繰込みサイクル内の対応するビンバッファに入る複数のMPS/MPB値の復号化を可能にするために2の指数として選択される。各算術符号化エンジンの得られる符号語は個別に転送され、パケット化され、または格納されるか、あるいは、以下に説明されるように、転送または格納するためにインターリーブされる。
すなわち、バイナリ算術符号化エンジン10は、そのビンバッファ8内の複数のビンを符号化する際に、以下のステップを実行する。
1.ビンバッファからvalLPS、ビンを受信するステップ:(p_state[bin]などの確率分布予測はバイナリ算術符号化エンジン10に関連付けられたので、ここで考慮されるそれぞれのバイナリ算術符号化エンジン10は「ビン」を受け取るように選択されている(言い換えれば、「ビン」はそれぞれのバイナリ算術符号化エンジン10に関連付けられた)ことを想起されたい。)
2.Rを量子化するステップ:
q_index=Qtab[R>>q](または他の形態の量子化)
3.RLPSおよびRを決定するステップ:
RLPS=Rtab[q_index](p_stateは、考慮されているバイナリ算術符号化エンジン10に対して固定されており、すなわち、p_state[encoder]であるので、ここでは、p_stateについて述べていない。そして、Rtabはp[p_state[encoder]]・Q[q_index]に対して予備計算された値を格納している。)
R=R−RLPS[すなわち、Rは「ビン」がMPSであるかのように予め事前更新される。]
4.新しい部分的インターバルを計算するステップ:
5.LとRを繰込み、ビットを書き込むステップ
ここで、
q_index Qtabから読み出された量子化値のインデックスを記述
p_state (バイナリ算術符号化エンジン10に対して固定された)現在の状態を記述
RLPS LPSに対応するインターバル幅を記述
valMPS MPSに対応するビットの値を記述。
したがって、バイナリ算術復号化エンジン22は、ビン出力をビンバッファ20へ復号化する際、以下のステップを実行しうる。
1.ビンに対するリクエストを受信するステップ:(p_state[bin]などの確率分布予測はバイナリ算術復号化エンジン22に関連付けられたので、ここで考慮されるそれぞれのバイナリ算術復号化エンジン22は「ビン」を復号化するように選択されている(言い換えれば、「ビン」はそれぞれのバイナリ算術復号化エンジン22に関連付けられた)ことを想起されたい。)
2.Rを量子化するステップ:
q_index=Qtab[R>>q](または他の形態の量子化)
3.RLPSとRを決定するステップ:
RLPS=Rtab[q_index](p_stateは、考慮されているバイナリ算術復号化エンジン22に対して固定されており、すなわち、p_state[encoder]であるので、ここでは、p_stateについて述べていない。そして、Rtabはp[p_state[encoder]]・Q[q_index]に対して予備計算された値を格納している。)
R=R−RLPS[すなわち、Rは「ビン」がMPSであるかのように予め事前更新される。]
4.部分的インターバルの位置に応じたビンを決定するステップ:
5.Rを繰込み、1つのビットを読み出し、Vを更新するステップ
ここで、
q_index Qtabから読み出された量子化値のインデックスを記述
p_state (バイナリ算術復号化エンジン22に対して固定された)現在の状態を記述
RLPS LPSに対応するインターバル幅を記述
valMPS MPSに対応するビットの値を記述
V 現在の部分的インターバルの内部から値を記述。
本発明の更なる好ましい実施形態において、複数のビンエンコーダ10、またはビンエンコーダの1つ以上、が入力ビン列9を符号語10に直接マッピングするエントロピーエンコーダを表している。このようなマッピングは、効率的に実施することができ、複雑な算術符号化エンジンを必要としない。ビン列への符号語の逆マッピングは(デコーダで行われているように)、入力列の完全な復号化を保証するために一意である必要があるが、ビン列9の符号語10へのマッピングは、必ずしも一意である必要はない。つまり、特定のビン列は1以上の符号語の列へマッピングすることも可能である。本発明の好ましい実施形態において、入力ビン列9の符号語10へのマッピングは全単射である。本発明の更なる好ましい実施形態において、複数のビンエンコーダ10−またはビンエンコーダの1つ以上−は入力ビンの可変長列9を可変長符号語10に直接マッピングするエントロピーエンコーダを表している。本発明の好ましい実施形態において、出力された符号語は、一般的なハフマン符号または基準のハフマン符号などの冗長度のないコードを表している。
冗長度のないコードにビン列を全単射マッピングするための2つの例を表3に示す。本発明の更なる好ましい実施形態において、出力符号語は、エラー検出とエラー回復のために適切な冗長度のあるコードを表している。本発明の更なる好ましい実施形態において、出力符号語は、ソースシンボルを暗号化するための適切な暗号化コードを表す。
本発明の更なる好ましい実施形態において、複数のビンエンコーダ10―またはビンエンコーダの1つ以上―は、入力ビンの可変長列9を固定長の符号語10に直接マッピングするエントロピーエンコーダを表している。本発明の更なる好ましい実施形態において、複数のビンエンコーダ10―またはビンエンコーダの1つ以上―は、可変長符号語10に入力ビンの固定長列9を直接マッピングするエントロピーエンコーダを表している。
本発明の一実施形態によるデコーダを図2に示す。基本的にデコーダはエンコーダの逆演算を実行し、これによって(前に符号化された)ソースシンボル27の列が2つ以上の部分的ビットストリーム24の集合から復号化される。デコーダは、エンコーダのデータフローを複製するデータリクエストのためのフローと、エンコーダデータフローの逆を表わすデータフローと、の2つの異なる処理フローを含む。図2において、破線の矢印はデータリクエストフローを表し、実線の矢印はデータフローを表す。デコーダのビルディングブロックは、基本的にエンコーダのビルディングブロックを複製するが、逆演算を実行する。
ソースシンボルの復号化はバイナライザ14へ送られる新しい復号化されたソースシンボルに対するリクエスト13によってトリガされる。本発明の好ましい実施形態において、新しい復号化されたソースシンボルに対する各リクエスト13は、1つ以上のカテゴリの集合のカテゴリに関連付けられる。ソースシンボルに対するリクエストに関連付けられているカテゴリは、符号化中に対応するソースシンボルに関連付けされたカテゴリと同じである。
バイナライザ14は、ソースシンボルに対するリクエスト13をパラメータ割当部16へ送られるビンに対する1つ以上のリクエスト内へマッピングする。バイナライザ14によりパラメータ割当部16へ送られるビンに対するリクエストに対する最終応答として、バイナライザ14はビンバッファ選択部18から復号化されたビン26を受信する。バイナライザ14は、受信した復号化されたビン26の列をリクエストされたソースシンボルに対する特定の2値化方式のビン列と比較して、受信した復号化されたビン26の列がソースシンボルの2値化と整合した場合、バイナライザはそのビンバッファを空にして新しく復号化されたシンボルに対するリクエストへの最終応答として復号化されたソースシンボルを出力する。既に受信した復号化されたビンの列がリクエストされたソースシンボルに対する2値化方式に対するビン列のいずれとも整合しない場合、バイナライザは、復号化されたビンの列がリクエストされたソースシンボルに対する2値化方式のビン列の1つに整合するまで、ビンに対する他のリクエストをパラメータ割当部へ送信する。ソースシンボルに対するリクエストごとに、デコーダは、対応するソースシンボルを符号化するために使用されたものと同じ2値化方式を使用する。2値化方式は、異なるソースシンボルカテゴリごとに異なっていてよい。特定のソースシンボルカテゴリに対する2値化方式は、可能なソースシンボル値および/または特定のカテゴリに対するソースシンボルの他の特性の集合に依存しうる。
パラメータ割当部は、ビンに対する各リクエストへ1つ以上のパラメータの集合を割り当て、関連付けられたパラメータの集合を有するビンに対するリクエストをビンバッファ選択部へ送信する。パラメータ割当部によってリクエストされたビンへ割り当てられたパラメータの集合は、符号化している間に対応するビンへ割当てられたものと同じである。このパラメータの集合はエンコーダ記述において述べられているパラメータの1つ以上から成りうる。
本発明の好ましい実施形態において、パラメータ割当部16は、ビンに対する各リクエスを、現在リクエストされているビンに対する2つの可能なビン値のうちの1つに対する確率の予測に対する測度に関連付ける。本発明の更なる好ましい実施形態において、パラメータ割当部16は、ビンに対する各リクエストを、現在リクエストされているビンに対する確率の低いまたは確率の高いビン値に対する確率の予測に対する測度と、2つの可能なビン値のうちどちらが現在リクエストされているビンに対する確率の低いまたは確率の高いビン値を表すかの予測を指定する識別子とに関連付ける。
本発明の更なる好ましい実施形態において、パラメータ割当部16は、ビンに対する各リクエスト15、17を、現在リクエストされているビンに対する2つの可能なビン値のうちの1つに対する確率の予測に対する測度と、1以上の更なるパラメータと、に関連付ける。本発明の更なる好ましい実施形態において、パラメータ割当部16は、ビンに対する各リクエスト15、17を、現在リクエストされているビンに対する確率の低いまたは確率の高いビン値に対する確率の予測に対する測度と、2つの可能なビン値のうちどちらが現在リクエストされているビンに対する確率の低いまたは確率の高いビン値を表すかの予測を指定する識別子と、1つ以上の更なるパラメータ(上記に挙げたパラメータの1つ以上でありうる)と、に関連付ける。
本発明の好ましい実施形態において、パラメータ割当部16は、1つ以上の既に復号化されたシンボルの集合に基づいて、上述した確率測度(現在リクエストされているビンに対する2つの可能なビン値のうちの1つに対する確率の予測に対する測度と、現在リクエストされているビンに対する確率の低いまたは確率の高いビン値に対する確率の予測に対する測度と、2つの可能なビン値のうちどちらが現在リクエストされているビンに対する確率の低いまたは確率の高いビン値を表すかの予測を指定する識別子)の1つ以上を決定する。ビンに対する特定のリクエストに対する確率測度の決定は、対応するビンに対するエンコーダにおいて処理を複製する。確率測度を決定するために使用される復号化されたシンボルは、同じシンボルカテゴリの1つ以上の既に復号化されたシンボル、(ソースシンボルに対する現在のリクエストに関連付けられたデータ集合に関連して)近接空間的および/または時間的なロケーションの(サンプルのブロックまたは群などの)データ集合に対応する同じシンボルカテゴリの1つ以上の既に復号化されたシンボル、または(ソースシンボルに対する現在のリクエストに関連付けられたデータ集合に関連して)同一および/または近接空間的および/または時間的なロケーションのデータ集合に対応する異なるシンボルカテゴリの1つ以上の既に復号化されたシンボルを含む。
パラメータ割当部16の出力であるパラメータの関連付けられた集合を有するビンに対する各リクエスト17は、ビンバッファ選択部18内へ送られる。パラメータ17の関連付けられた集合に基づいて、ビンバッファ選択部18は、2つ以上のビンバッファ20のうちの1つへビンに対するリクエスト19を送信し、選択されたビンバッファ20から復号化されたビン25を受信する。復号化された入力ビン25は、潜在的に変更され、復号化された出力ビン26―潜在的に変更された値を有する―は、パラメータの関連付けられた集合を有するビンに対するリクエスト17への最終応答としてバイナライザ14へ送信される。
ビンに対するリクエストが転送される先のビンバッファ20は、エンコーダサイドのビンバッファ選択部の出力ビンが送信されたビンバッファと同様に選択される。
本発明の好ましい実施形態において、ビンバッファ選択部18は、ビンに対するリクエスト19が送信される先のビンバッファ20を、現在リクエストされているビンに対する2つの可能なビン値の1つに対する確率の予測に対する関連付けられた測度に基づいて決定する。本発明の好ましい実施形態において、2つの可能なビン値のうちの1つに対する確率の予測に対する測度に対する可能な値の集合は有限であり、ビンバッファ選択部18は1つだけのビンバッファ20を2つの可能なビン値のうちの1つに対する確率の予測の各可能な値と関連付けるテーブルを含み、ここで、2つの可能なビン値の1つに対する確率の予測に対する測度に対して異なる値を同一のビンバッファ20と関連付けることができる。本発明の更なる好ましい実施形態において、2つの可能なビン値の1つに対する確率の予測に対する測度に対する可能な値の範囲は多数のインターバルに分割され、ビンバッファ選択部18は2つの可能なビン値の1つに対する確率の予測に対する現在の測度に対するインターバルインデックスを決定し、ビンバッファ選択部18は1つだけのビンバッファ20をインターバルインデックスに対する各可能な値と関連付けるテーブルを含み、ここで、インターバルインデックスごとに異なる値を同じビンバッファ20に関連付けることができる。本発明の好ましい実施形態において、2つの可能なビン値の1つに対する確率の予測に対する反対の測度を有するビンに対するリクエスト17(反対測度は確率予測Pと1−Pを表す測度である)は同じビンバッファ20へ転送される。本発明の更なる好ましい実施形態において、現在のビンリクエストに対する2つの可能なビン値の1つに対する確率の予測に対する測度を特定のビンバッファと関連付けることが経時的に適応される。
本発明の更なる好ましい実施形態において、ビンバッファ選択部18は、ビンに対するリクエスト19が送信される先のビンバッファ20を、現在リクエストされているビンに対する確率の低いまたは確率の高いビン値に対する確率の予測に対する関連付けられた測度に基づいて決定する。本発明の好ましい実施形態において、確率の低いまたは確率の高いビン値に対する確率の予測に対する測度に対する可能な値の集合は有限であり、ビンバッファ選択部18は1つだけのビンバッファ20を確率の低いまたは確率の高いビン値に対する確率の予測の各可能な値と関連付けるテーブルを含み、ここで、確率の低いまたは確率の高いビン値に対する確率の予測に対する測度に対する異なる値を同じビンバッファ20と関連付けることができる。本発明の更なる好ましい実施形態において、確率の低いまたは確率の高いビン値に対する確率の予測に対する測度に対する可能な値の範囲は多数のインターバルへ分割され、ビンバッファ選択部18は確率の低いまたは確率の高いビン値に対する確率の予測に対する現在の測度に対するインターバルインデックスを決定し、ビンバッファ選択部18は1つだけのビンバッファ20をインターバルインデックスに対する各可能な値と関連付けるテーブルを含み、ここで、インターバルインデックスに対する異なる値を同じビンバッファ20と関連付けることができる。本発明の更なる好ましい実施形態において、現在リクエストされているビンに対する確率の低いまたは確率の高いビン値に対する確率の予測に対する測度を特定のビンバッファと関連付けることが経時的に適応される。
選択されたビンバッファ20から復号化されたビン25を受信した後、ビンバッファ選択部18は潜在的に入力ビン25を変更し、潜在的に変更された値を有する出力ビン26をバイナライザ14へ送信する。ビンバッファ選択部18の入力/出力ビンマッピングは、エンコーダサイドのビンバッファ選択部の入力/出力ビンマッピングの逆である。
本発明の好ましい実施形態において、ビンバッファ選択部18はビンの値を変更しない。すなわち、出力ビン26は入力ビン25と同じ値を常に有している。
本発明の更なる好ましい実施形態において、ビンバッファ選択部18は、入力ビン値25と、ビンに対するリクエスト17と関連付けられた現在リクエストされているビンに対する2つの可能なビン値のうちの1つに対する確率の予測に対する測度に基づいて、出力ビン値26を決定する。本発明の好ましい実施形態において、現在のビンリクエストに対する2つの可能なビン値のうちの1つに対する確率に対する測度が特定のしきい値未満(またはしきい値以下)である場合、出力ビン値26は入力ビン値25と等しく設定されるが、現在のビンリクエストに対する2つの可能なビン値のうちの1つに対する確率に対する測度が特定のしきい値以上(またはしきい値より大きい)である場合、出力ビン値26は変更される(すなわち、入力ビン値の逆に設定される)。本発明の更なる好ましい実施形態において、出力ビン値26は、現在のビンリクエストに対する2つの可能なビン値のうちの1つに対する確率に対する測度が特定のしきい値より大きい(またはしきい値以上の)場合、入力ビン値25と等しく設定されるが、現在のビンリクエストに対する2つの可能なビン値のうちの1つに対する確率に対する測度が特定のしきい値以下(またはしきい値未満)である場合、出力ビン値26は変更される(すなわち、入力ビン値の逆に設定される)。本発明の好ましい実施形態において、しきい値は両方の可能なビン値に対する予測された確率に対して0.5の値に一致している。
本発明の更なる好ましい実施形態において、ビンバッファ選択部18は、入力ビン値25と、2つの可能なビン値のうちどちらがビンに対するリクエスト17に関連付けられている現在のビンリクエストに対する確率の低いまたは確率の高いビン値を表すかの予測を指定する識別子と、に基づいて、出力ビン値26を決定する。本発明の好ましい実施形態において、識別子が2つの可能なビン値のうちの第1のビン値が現在のビンリクエストに対して確率の低い(または確率の高い)ビン値を表していることを指定する場合、出力ビン値26は入力ビン値25と等しく設定され、識別子が2つの可能なビン値のうちの第2のビン値が現在のビンリクエストに対して確率の低い(または確率の高い)ビン値を表していることを指定する場合、出力ビン値26は変更される(すなわち、入力ビン値の逆に設定される)。
上述したように、ビンバッファ選択部は、2つ以上のビンバッファ20のいずれか1つへビンに対するリクエスト19を送信する。ビンバッファ20は、連結されているビンデコーダ22から復号化されたビンの列21とともに送られる、先入れ先出しバッファを表す。ビンバッファ選択部18からビンバッファ20へ送られるビンに対するリクエスト19への応答として、ビンバッファ20はビンバッファ20に最初に送られたそのコンテンツのビンを取り除き、それをビンバッファ選択部18へ送信する。先にビンバッファ20に送信されるビンは先に取り除かれ、ビンバッファ選択部18へ送信される。
2つ以上のビンバッファ20の各々は1つだけのビンデコーダ22に連結され、各ビンデコーダは1つだけのビンバッファ20に連結されている。各ビンデコーダ22は、分離した部分的ビットストリーム24から、ビット列を表す符号語23を読み出す。ビンデコーダは、符号語23を、連結されているビンバッファ20に送信されるビンの列21に変換する。全体的な復号化アルゴリズムは2つ以上の部分的なビットストリーム24を多数の復号化されたソースシンボルへ変換し、ここで、部分的ビットストリームの数はビンバッファとビンデコーダの数と等しく、ソースシンボルの復号化は新しいソースシンボルに対するリクエストによってトリガされる。本発明の好ましい実施形態において、ビンデコーダ22は、可変数のビットから成る符号語23を可変数のビンの列21へ変換する。本発明の実施形態の1つの利点は、2つ以上の部分的ビットストリームからのビンの復号化が(たとえば、確率測度の異なる群に対して)並列に行うことができ、これによっていくつかのインプリメンテーションの処理時間を短縮できるという点にある。
本発明の実施形態の他の利点は、ビンデコーダ22によって行われるビン復号化がパラメータ17の異なる集合に対して具体的に設計することができる点にある。特に、ビンの符号化と復号化は予測される確率の異なる群ごとに(符号化効率および/または複雑さに関して)最適化することができる。一方で、これは、同様の符号化効率を有する最先端のエントロピー符号化アルゴリズムに対して符号化/復号化の複雑さの低減を可能にする。他方で、これは、同様の符号化/復号化の複雑性を有する最先端のエントロピー符号化アルゴリズムに対して符号化効率の向上を可能にする。本発明の好ましい実施形態において、ビンデコーダ22は現在のビンリクエストに対する2つの可能なビン値17のうちの1つに対する確率の予測に対する測度の異なる群に対して異なる復号化アルゴリズムを実施する(すなわち、ビン列を符号語にマッピングする)。本発明の更なる好ましい実施形態において、ビンデコーダ22は、現在リクエストされているビンに対する確率の低いまたは確率の高いビン値に対する確率の予測に対する測度の異なる群ごとに、異なる復号化アルゴリズムを実施する。更なる好ましい実施形態において、ビンデコーダ22は、異なる伝送路保護コードごとに異なる復号化アルゴリズムを実施する。更なる好ましい実施形態において、ビンデコーダ22は、異なる暗号化方式ごとに異なる復号化アルゴリズムを実施する。更なる好ましい実施形態において、ビンデコーダ22は、伝送路保護コードと、現在リクエストされているビンに対する2つの可能なビン値17のいずれか1つに対する確率の予測に対する測度の群と、の様々な組み合わせに対して、異なる復号化アルゴリズムを実施する。更なる好ましい実施形態において、ビンデコーダ22は、伝送路保護コードと、現在リクエストされているビンに対する確率の低いまたは確率の高いビン値17の確率の予測に対する測度の群と、の様々な組み合わせに対して、異なる復号化アルゴリズムを実施する。更なる好ましい実施形態において、ビンデコーダ22は、暗号化方式と、現在リクエストされているビンに対する2つの可能なビン値17のいずれか1つに対する確率の予測に対する測度の群と、の様々な組み合わせに対して、異なる復号化アルゴリズムを実施する。更なる好ましい実施形態において、ビンデコーダ22は、暗号化方式と、現在リクエストされているビンに対する確率の低いまたは確率の高いビン値17に対する確率の予測に対する測度の群と、の様々な組み合わせに対して、異なる復号化アルゴリズムを実施する。
ビンデコーダ22は、エンコーダサイドの対応しているビンエンコーダの逆マッピングを行う。
本発明の好ましい実施形態において、複数のビンデコーダ22―またはビンデコーダの1つ以上―は、バイナリ算術復号化エンジンを表している。
本発明の更なる好ましい実施形態において、複数のビンデコーダ22―またはビンデコーダの1つ以上―は、符号語23をビンの列21に直接マッピングするエントロピーデコーダを表している。このようなマッピングは、効率的に実施することができ、複雑な算術符号化エンジンを必要としない。ビン列への符号語のマッピングは一意である必要がある。本発明の好ましい実施形態において、符号語23のビンの列21へのマッピングは全単射である。本発明の更なる好ましい実施形態において、複数のビンデコーダ10―またはビンデコーダの1つ以上―は、可変長の符号語23をビンの可変長の列21へ直接マッピングするエントロピーデコーダを表している。本発明の好ましい実施形態において、入力された符号語は、一般的なハフマン符号または基準のハフマン符号などの冗長度のないコードを表している。冗長度のないコードをビン列に全単射マッピングするための2つの例を表3に示す。本発明の更なる好ましい実施形態において、入力された符号語は、エラー検出とエラー復元のために適切な冗長度のあるコードを表している。本発明の更なる好ましい実施形態において、入力された符号語は暗号化コードを表している。
本発明の更なる好ましい実施形態において、複数のビンデコーダ22―またはビンデコーダの1つ以上―は、固定長の符号語23をビンの可変長の列21上へ直接マッピングするエントロピーデコーダを表している。本発明の更なる好ましい実施形態において、複数のビンデコーダ22―またはビンデコーダの1つ以上―は、可変長の符号語23を固定長のビンの列21へ直接マッピングするエントロピーデコーダを表している。
したがって、図1および図2は、シンボル3の列を符号化するためのエンコーダと同シンボル3の列を復元するためのデコーダについての実施の形態を示す。エンコーダは、シンボル列の各シンボルへ多数のパラメータ5を割り当てるように構成された割当部4を含む。この割当ては、現在のシンボルが属しており、シンタックス要素1のシンタックス構造に応じて、先行のシンタックス要素1およびシンボル3の履歴からどの予想が推定可能であるかが現在予想されている、―2値化などの―表現に対してシンタックス要素1のカテゴリなどのシンボル列の先行シンボル内に含まれる情報に基づいて、行われる。また、エンコーダは、それぞれのエントロピーエンコーダへ転送されたシンボル3をそれぞれのビットストリーム12へ変換するように各々が構成されている複数のエントロピーエンコーダ10と、その選択がそれぞれのシンボル3に割り当てられたパラメータ5の数に依存する、複数のエントロピーエンコーダ10の選択された1つに各シンボル3を転送するように構成されている選択部6と、を含む。シンボル列を復元するためのデコーダは、それぞれのビットストリーム23をシンボル21に変換するように各々が構成されている複数のエントロピーデコーダ22と、シンボル列のうちの前に復元されたシンボル(図2の26および27参照)に含まれる情報に基づいて復元されるシンボル列の各シンボル15へ多数のパラメータ17を割り当てる割当部16と、その選択がそれぞれのシンボルに対して定義づけられているパラメータの数に依存する、複数のエントロピーデコーダ22のうちの選択された1つから復元されるシンボル列の各シンボルを検索するように構成されている選択部18と、を含む。割当部16は各シンボルに割り当てられたパラメータの数が、それぞれのシンボルが想定し得る可能なシンボル値の中から分布の確率の予測に対する測度を含むかまたはこれに対する測度であるように構成されていてもよい。復元されるシンボル列はバイナリアルファベットから作成され、割当部16は、確率分布の予測が、バイナリアルファベットの2つの可能なビン値の確率の低いまたは確率の高いビン値の確率の予測に対する測度と、2つの可能なビン値のうちどちらが確率の低いまたは確率の高いビン値を表すかの予測を指定する識別子と、から成るように構成されていてもよい。割当部16はさらに、関連付けられたそれぞれの確率分布予測を有する各コンテクストによって復元されるシンボル列の、前に復元されたシンボル内に含まれる情報に基づいて復元されるシンボル15の列の各シンボルへコンテクストを内的に割り当てるとともに、それぞれのコンテクストが割り当てられる、前に復元されたシンボルのシンボル値に基づいて各コンテクストに対する確率分布予測を実際のシンボル統計値に適応させるように構成されていてもよい。このコンテクストはビデオまたは画像符号化においてまたは財政的アプリケーションの場合に表においてシンタックス要素が属する空間的関係または位置の近接性を考慮に入れてもよい。次いで、シンボルごとの確率分布の予測に対する測度は、確率分布の予測に対する測度を得るために、たとえば、それぞれのシンボルに割り当てられたコンテクストと関連付けられた確率分布予測を複数の確率分布予測の代表値の1つに対して量子化することによって、それぞれのシンボルに割り当てられたコンテクストと関連付けられた確率分布予測に基づいて、決定されてもよい。選択部は、複数のエントロピーエンコーダと複数の確率分布予測の代表値との間で全単射関連付けが定義付けられるように構成することができる。選択部18は、シンボル列の、前に復元されているシンボルに依存する所定の決定論的な方法において量子化マッピングを確率分布予測の範囲から複数の確率分布予測の代表値へ経時的に変化させるように構成されていてもよい。すなわち、選択部18は、量子化ステップの大きさ、すなわち、個別のエントロピーデコーダと全単射で関連付けられている個別の確率インデックスにマッピングされた確率分布のインターバルを変更することができる。次いで、複数のエントロピーデコーダ22は量子化マッピングの変化に応答してシンボルをビットストリームへ変換する方法を適応させるように構成されていてもよい。たとえば、各エントロピーデコーダ22は、それぞれの確率分布予測の量子化インターバル内のある確率分布予測に対して最適化され、すなわち、最適な圧縮率を有することができ、それぞれの確率分布予測量子化インターバル内のこのある確率分布予測の位置を適応させるために、後者を最適化するための変更時にその符号語/シンボル列マッピングを変更することができる。選択部はシンボルが複数のエントロピーデコーダから検索される速度のばらつきが少なくなるように量子化マッピングを変化させるように構成されていてもよい。バイナライザ14に関しては、シンタックス要素がすでに2値である場合はそのままにされる。さらに、デコーダ22のタイプによっては、バッファ20は不要である。また、バッファはデコーダ内で統合されてもよい。
有限のソースシンボル列の終了
本発明の好ましい実施形態において、符号化と復号化は、ソースシンボルの有限集合に対して行われる。多くの場合、静止画、ビデオシーケンスのフレームやフィールド、画像のスライス、ビデオシーケンスのフレームまたはフィールドのスライス、または連続的オーディオサンプルの集合などのデータのある一定量が符号化される。ソースシンボルの有限集合の場合、一般に、エンコーダサイドで作成された部分的ビットストリームを終了させる必要がある。すなわち、すべてのソースシンボルを送信されたまたは格納された部分的なビットストリームから復号化できることを確実にする必要がある。最後のビンが対応するビンバッファ8内へ挿入された後、ビンエンコーダ10は、完全な符号語が部分的なビットストリーム12に書き込まれることを確実にする必要がある。ビンエンコーダ10がバイナリ算術符号化エンジンを表す場合、算術符号語を終了する必要がある。ビンデコーダ10がビン列を符号語に直接マッピングするエントロピーエンコーダを表す場合、最後のビンをビンバッファに書き込んだ後にビンバッファに格納されるビン列は、符号語に関連付けられているビン列を表さない場合がある(すなわち、符号語に関連付けられている2つ以上のビン列の接頭語を表す場合がある。このような場合、ビンバッファに接頭語としてビン列を含むビン列に関連付けられているどのような符号語も、部分的なビットストリームに書き込まれる必要がある(ビンバッファをフラッシュする必要がある)。これは、特定のまたは任意の値を有するビンを、符号語が書き込まれるまで、ビンバッファへ挿入することによって行うことができる。本発明の好ましい実施形態において、ビンエンコーダは、(関連付けられたビン列がビンバッファ内に接頭語としてビン列を含む必要がある特性に加えて)最短長を有する符号語の1つを選択する。デコーダサイドでは、ビンデコーダ22は、部分的なビットストリーム内の最後の符号語に要求されるより多くのビンを復号化することができ、これらのビンはビンバッファ選択部18によってリクエストされずに破棄されかつ無視される。シンボルの有限集合の復号化は、復号化されたソースシンボルのリクエストによって制御され、データの量に対してこれ以上のソースシンボルがリクエストされない場合、この復号化は終了する。
部分的ビットストリームの送信と多重化
エンコーダによって作成される部分的ビットストリーム12は別個に送信されることができるか、単一のビットストリーム内へ多重化することができるか、または部分的ビットストリームの符号語が単一のビットストリーム内へインターリーブすることができる。
本発明の好ましい実施形態において、データ量に対する各部分的ビットストリームは1つのデータパケットへ書き込まれる。データ量は、静止画、ビデオシーケンスのフィールドやフレーム、静止画のスライス、ビデオシーケンスのフィールドまたはフレームのスライス、またはオーディオサンプルのフレームなどのソースシンボルの任意の集合であってよい。
本発明の他の好ましい実施形態において、データ量に対する部分的ビットストリームの2つ以上またはデータ量に対する全ての部分的ビットストリームは1つのデータパケット内へ多重化される。多重化された部分的なビットストリームを含むデータパケットの構造を図3に示す。
データパケット100は、ヘッダと、(データの考えられる量に対する)各部分的ビットストリームのデータの一分割から成る。データパケットのヘッダ100は、ビットストリームデータ102のセグメント内へのデータパケット(の残り)を分割するための表示を含む。分割に対する表示のほかに、ヘッダは更なる情報を含みうる。本発明の好ましい実施形態において、データパケットの分割に対する表示はビットやバイトまたはビットの倍数またはバイトの倍数といった単位で表されるデータセグメントの開始部分である。本発明の好ましい実施形態において、データセグメントの開始部分は、データパケットの開始に対する、またはヘッダの終わりに対する、または前のデータパケットの開始部分に対する、データパケットのヘッダ内の絶対値として、符号化される。本発明の更なる好ましい実施形態において、データセグメントの開始部分は差動的に符号化され、すなわち、データセグメントの実際の開始とデータセグメントの開始に対する予測との間の差のみが符号化される。この予測は、データパケットの全体のサイズ、ヘッダのサイズ、データパケット内のデータセグメントの数、先行するデータセグメントの開始部分などの既に知られているかまたは送信された情報に基づいて求められ得る。本発明の好ましい実施形態において、第1のデータパケットの開始部分は符号化されないが、データパケットヘッダの大きさに基づいて推測される。デコーダサイドにおいて、送信されたパーティション表示はデータセグメントの開始を導出するために使用される。次いで、データセグメントは部分的ビットストリームとして使用され、データセグメントに含まれるデータは対応するビンデコーダに順に供給される。
データパケット内へ部分的ビットストリームを多重化するためのいくつかの代替手段がある。一つには、部分的ビットストリームのサイズが非常に近い場合は特に、要求されるサイド情報を削減することができる方法が図4に示されている。データパケットのペイロード、すなわちそのヘッダ111なしのデータパケット110は所定の定義づけられている方法でセグメント112内へ分割される。一例として、データパケットのペイロードは同一サイズのセグメントへ分割することができる。次に、各セグメントは、部分的ビットストリームまたは部分的ビットストリーム113の第1の部分と関連付けられる。部分的ビットストリームが関連付けられたデータセグメントよりも大きい場合、その残部114は他のデータセグメントの終わり部分の未使用スペースへ配置される。これはビットストリームの残部が逆の順序(データセグメントの終わりから開始する)で挿入する方法で行うことができ、これによってサイド情報が削減される。部分的ビットストリームの残部のデータセグメントへの関連付け、および、1より多い残部がデータセグメントへ追加される場合、残部の1以上に対する開始点はビットストリームの内部、たとえば、データパケットヘッダ内で、シグナリング(情報伝達)される必要がある。
可変長符号語のインターリービング
一部のアプリケーションにおいて、1つのデータパケット内の(ソースシンボルの量に対する)部分的ビットストリームの上記した多重化は、下記のような欠点を有しうる:一方では、小さいデータパケットに対して、分割をシグナリングするために必要とされるサイド情報に対するビット数が部分的ビットストリーム内の実際のデータに対して有意になりうるため、最終的に符号化効率を低下させる。他方では、多重化は、(たとえば、ビデオ会議アプリケーションなどの)低遅延が要求されるアプリケーションには不向きであることがある。説明されている多重化の場合、分割の開始部分がそれより前に知られていないので、エンコーダは部分的ビットストリームが完全に作成される前にデータパケットの送信を開始することができない。さらに、一般に、デコーダは、データパケットの復号化を開始する前に、最後のデータセグメントの開始を受信するまで待機する必要がある。ビデオ会議システムのようなアプリケーションにおいて、これらの遅延は、(送信ビットレートに近いビットレートに対して、および画像を符号化/復号化するための2つの画像間の時間インターバルに近い要求をするエンコーダ/デコーダに対して特に)、複数のビデオ画像のシステムの更なる全体遅延に加算される可能性があり、このようなアプリケーションには致命的である。特定のアプリケーションに対するこのような欠点を克服するために、本発明の好ましい実施形態のエンコーダは、2つ以上のビンエンコーダによって生成される符号語が単一のビットストリームにインターリーブされるように構成することができる。インターリーブされた符号語を有するビットストリームは、デコーダに直接送信することができる(小さなバッファ遅延を無視する場合は以下を参照)。デコーダサイドにおいて、2つ以上のビンデコーダは復号化順にビットストリームから直接符号語を読み出し、復号化は最初に受信したビットから開始される。更に、部分的ビットストリームの多重化(またはインターリーブ)をシグナリングするためにサイド情報は必要とされない。
符号語のインターリーブを有するエンコーダの基本構造を図5に示す。ビンエンコーダ10は、部分的ビットストリームに符号語を直接書き込まないが、単一符号語バッファ29に連結されており、そこから符号語が符号化順にビットストリーム34へ書き込まれる。ビンエンコーダ10は、1つ以上の新しい符号語バッファエントリに対するリクエスト28を符号語バッファ29へ送信し、この後、符号語バッファ29へ符号語30を送信し、これらが蓄積されたバッファエントリへ格納される。(一般に可変長の)符号語バッファ29の符号語31は、符号語ライタ32によってアクセスされる。符号語ライタ32は生成されたビットストリーム34へ対応するビット33を書き込む。符号語バッファ29は、先入れ先出しバッファとして演算し、先に蓄積された符号語エントリはビットストリームへ先に書き込まれる。
更なる一般化において、符号語バッファの数がビンエンコーダの数より少ない場合、複数の符号語バッファと部分的なビットストリームが可能である。ビンエンコーダ10は符号語バッファ29内に1以上の符号語を蓄積し、これによって、符号語バッファ内の1つ以上の符号語の蓄積は連結されているビンバッファ8内のある事象によってトリガされる。本発明の好ましい実施形態において、符号語バッファ29は、デコーダがビットストリームを瞬時に復号できるように演算する。符号語がビットストリームに書き込まれる符号化順序は、対応する符号語が符号語バッファに蓄積されている順序と同じである。本発明の好ましい実施形態において、各ビンエンコーダ10は、その蓄積が連結されているビンバッファ内のある事象によってトリガされることによって1つの符号語を蓄積する。本発明の別の好ましい実施形態において、各ビンエンコーダ10はその蓄積が連結されているビンバッファ内のある事象によってトリガされることによって1つより多くの符号語を蓄積する。本発明の更なる好ましい実施形態において、ビンエンコーダ10は異なる量の符号語を蓄積する。ここで、特定のビンエンコーダによって蓄積される符号語の量は、(たとえば、関連する確率測度、すでに書かれたビット数などの)特定のビンエンコーダおよび/または特定のビンエンコーダ/ビンバッファの他の特性に依存しうる。
本発明の好ましい実施形態において、符号語バッファは以下のように演算する。新しいビン7が特定のビンバッファ8に送られ、ビンバッファ内にすでに格納されているビンの数がゼロであり、特定のビンバッファに連結されているビンエンコーダに対する符号語バッファ内には現在符号語が蓄積されていない場合、この連結されているビンエンコーダ10は、それにより1つ以上の符号語エントリが特定のビンエンコーダに対して符号語バッファ29内に蓄積されるリクエストを符号語バッファへ送信する。符号語エントリは可変数ビットを有することができる。バッファエントリにおけるビット数の上限しきい値は通常、対応するビンエンコーダの最大符号語サイズによって付与される。次の符号語または(符号語エントリまたは複数の符号語エントリが蓄積されている)ビンエンコーダによって生成される次の符号語は符号語バッファの蓄積されたエントリまたは複数のエントリ内に格納される。特定のビンエンコーダに対する符号語バッファ内のすべての蓄積されたバッファエントリが符号語で埋め込まれ、次のビンが特定のビンエンコーダに連結されているビンバッファに送信される場合、1つ以上の新しい符号語が特定のビンエンコーダなどに対する符号語バッファ内に蓄積される。符号語バッファ29は、ある方法で、先入れ先出しバッファを表す。バッファエントリは順に蓄積される。対応するバッファエントリが先に蓄積されている符号語は先にビットストリームへ書き込まれる。符号語ライタ32は、連続的にまたは符号語バッファ29へ符号語30が書き込まれた後に、符号語バッファ29の状態をチェックする。第1のバッファエントリが完成した符号語を含む場合(すなわち、バッファエントリは蓄積されていないが符号語を含む場合)、対応する符号語31と対応するバッファエントリは、符号語バッファ20から取り除かれ、符号語33のビットはビットストリームへ書き込まれる。このプロセスは、第1のバッファエントリが符号語を含まなくなるまで(すなわち、蓄積されるかまたはフリーになるまで)反復される。復号化プロセスの終了時、すなわち、考えられるデータの量の全てのソースシンボルが処理された場合、符号語のバッファをフラッシュする必要がある。そのフラッシュプロセスに対して、以下が第1のステップとしてビンバッファ/ビンエンコーダごとに適用される。すなわち、ビンバッファがビンを含む場合、特定のまたは任意の値を有するビンは、得られるビン列が、符号語に関連付けられたビン列を表すまで加算される(上記したように、ビンを加算する1つの好ましい方法は、接頭語としてビンバッファの元のコンテンツを含むビン列に関連付けられた、最短長さの可能な符号語―またはこれらのうちの1つ―を生成するようなビン値を加算することである)。次に、符号語は対応するビンエンコーダに対する次に蓄積されたバッファエントリへ書き込まれ、(対応する)ビンバッファは空になる。複数のバッファエントリが1つ以上のビンエンコーダに対して蓄積されている場合、符号語のバッファは蓄積された符号語エントリを未だに含む場合がある。その場合、これらの符号語エントリには任意であるが、対応するビンエンコーダに対して有効な符号語が埋め込まれている。本発明の好ましい実施形態において、最短の有効な符号語または最短の有効な符号語(複数ある場合)の1つが挿入される。最後に、符号語バッファ内の残留している全ての符号語はビットストリームに書き込まれる。
符号語バッファの状態に対する2つの例を図6に示す。この例(a)において、符号語バッファは、符号語と5個の蓄積されたエントリが埋め込まれている2個のエントリを含む。更に、次の空きバッファエントリはマークされている。第1のエントリには、符号語が埋め込まれている(すなわち、ビンエンコーダ2が前に蓄積されたエントリへ符号語を書き込んだばかりである)。次のステップにおいて、この符号語は符号語バッファから除去され、ビットストリームへ書き込まれる。次に、ビンエンコーダ3の第1の蓄積された符号語は第1のバッファエントリであるが、このエントリは蓄積されているだけでこのエントリに符号語が全く書き込まれていないので、このエントリを符号語のバッファから取り除くことができない。例(b)において、符号語バッファは、符号語と4個の蓄積されたエントリが埋め込まれている3個のエントリを含む。第1のエントリは蓄積されているとしてマークされ、したがって、符号語ライタは符号語をビットストリームに書き込むことはできない。3個の符号語が符号語バッファに含まれているが、符号語ライタは、符号語がビンエンコーダ3に対する最初に蓄積されたバッファエントリに書き込まれるまで、待機しなければならない。符号語は、デコーダサイドでプロセスを逆転することが可能であるように、蓄積されている順に書き込む必要があることに留意されたい(下記参照)。
符号語インターリーブを有するデコーダの基本的な構造を図7に示す。ビンデコーダ10は、個別の部分的ビットストリームから直接符号語を読み出さないが、符号語37が符号化順に読み出されるビットバッファ38に連結されている。符号語もビットストリームから直接読み出すことができるので、ビットバッファ38が必ずしも必要とされないことに留意されたい。プロセッシングチェーンの異なる態様を明確に区別するためにビットバッファ38を主としてこの図に含めた。インターリーブされた符号語を有しているビットストリーム40のビット39はビットバッファ38に順に挿入され、これが先入れ先出しバッファを表している。特定のビンデコーダ22が1つ以上のビン列に対するリクエスト35を受信した場合、ビンデコーダ22は、ビットに対するリクエスト36を介して、ビットバッファ38から1つ以上の符号語37を読み出す。デコーダはソースシンボルを瞬時に復号化することができる。(上記のように)エンコーダは、符号語バッファを適切に演算させることによって、符号語がビンデコーダによってリクエストされるのと同じ順序でビットストリームへ書き込まれることを確実にする必要があることに留意されたい。デコーダにおいて、全体の復号化プロセスは、ソースシンボルに対するリクエストによってトリガされる。特定のビンエンコーダによってエンコーダサイドで蓄積された符号語の数と対応するビンデコーダによって読み出される符号語の数としてのパラメータは同じでなければならない。
更なる一般化において、ビットバッファの数がビンデコーダの数より少ない場合、複数の符号語バッファと部分的なビットストリームが可能である。ビンデコーダ22は、ビットバッファ38から1つ以上の符号語を1回だけ読み出し、これによって、ビットバッファからの1つ以上の符号語の読み出しが連結されているビンバッファ20におけるある事象によってトリガされる。本発明の好ましい実施形態において、デコーダは、1以上の符号語が、ビンに対するリクエスト19が特定のビンバッファ20に送信されたときに読み出され、ビンバッファはビンを含まないように演算する。しかし、たとえば、ビンバッファ内のビン数が所定のしきい値より少ない場合などの他の事象によっても、符号語の読み出しをトリガすることが可能である。本発明の好ましい実施形態において、各ビンデコーダ22は、読み出しが連結されているビンバッファにおけるある事象によってトリガされることによって、1つの符号語を読み出す。本発明の別の好ましい実施形態において、各ビンデコーダ22は、読み出しが連結されているビンバッファ内のある事象によってトリガされることによって1つより多くの符号語を読み出す。本発明の更なる好ましい実施形態において、ビンデコーダ22は、異なる量の符号語を読み出し、ここで、特定のビンデコーダによって読み出される符号語の量は、(関連付けられた確率測度、既に読み出されたビット数などの)特定のビンデコーダおよび/または特定のビンデコーダ/ビンバッファの他の特性に依存することができる。
本発明の好ましい実施形態において、ビットバッファからの符号語の読み出しは以下のように演算される。新しいビンリクエスト19はビンバッファ選択部18から特定のビンバッファ20へ送信され、ビンバッファ内のビンの数がゼロである場合、連結されているビンデコーダ22は、ビットバッファ38に対するビットリクエスト36を介して、ビットバッファ38から1つ以上の符号語37を読み出す。ビンデコーダ22は、読み出された符号語37をビンの列21へ変換し、これらのビン列を連結されているビンバッファ20内へ格納する。ビンに対するリクエスト19への最終応答として、最初に挿入されたビンはビンバッファ20から取り除かれ、ビンバッファ選択部18へ送られる。更なるビンリクエストに対する応答として、ビンバッファ内に残っているビンは、ビンバッファが空になるまで除去される。更なるビンリクエストは、ビットバッファなどから1つ以上の新しい符号語を読み出すためにビンデコーダをトリガする。ビットバッファ38は、事前に定義付けられたサイズの先入れ先出しバッファを表しかつビットストリーム40からのビット39が連続的に埋め込まれる。符号語が復号化プロセスによってリクエストされたときと同じ方法でビットストリームに書き込まれることを確実にするために、エンコーダサイドの符号語バッファは上記に説明した方法と同様に演算することができる。
したがって、複数のエントロピーデコーダの各々は、可変長のシンボル列に固定長の符号語をマッピングするように構成されている可変長デコーダであってよく、符号語バッファ43の出力などの符号語エントリはインターリーブされた符号語の単一ストリームを受け取るために提供されうる。複数のエントロピーデコーダ22は、複数のエントロピーデコーダから選択部18によって検索された時に復元されるシンボル列のシンボルによってそれぞれのエントロピーデコーダにおいて新しい符号語からマッピングされる新しいシンボル列を得られる順序に応じて順に符号語のエントリから符号語を検索するように構成することができる。
低遅延制約のある可変長符号語のインターリービング
記載される符号語インターリービングは、任意の分割情報がサイド情報として送信されることを必要としない。そして、符号語はビットストリーム内でインターリーブされるので、遅延も一般的に小さい。しかしながら、これは、(たとえば、符号語バッファに格納される最大ビット数によって指定される)特定の遅延制約が遵守されることを保証するものではない。また、符号語バッファに必要とされるバッファのサイズが理論的には非常に大きくなる可能性がある。図6(b)における例を考慮した場合、これ以上のビンがビンバッファ3へ送信されず、したがって、データパケットの最後にフラッシュプロセスが適用されるまで、ビンエンコーダ3が任意の新しい符号語を符号語バッファへ送信しない可能性がでてくる。よって、ビンエンコーダ1および2に対する全ての符号語は、それらがビットストリームへ書き込むことができるようになる前にデータパケットの最後まで待機する必要がでてくる。この欠点は、更なるメカニズムを符号化するプロセス(また、後述する復号化プロセス)に追加することにより、回避することができる。この追加メカニズムの基本的な概念は、遅延または遅延の上限(以下を参照)に関連した測度が指定したしきい値を超える場合、最初に蓄積されたバッファエントリは、(データパケットの最後に使用したものと同様のメカニズムを用いて)対応するビンバッファをフラッシュすることによって埋め込まれる、というものである。このようなメカニズムによって、関連付けられた遅延測度が指定されたしきい値を下回るまで、待機するバッファエントリの数が削減される。デコーダサイドにおいて、遅延制約を遵守するために、エンコーダサイドで挿入されていたビンを破棄する必要がある。ビンを廃棄するために、基本的に、エンコーダサイドと同様のメカニズムを使用することができる。このような遅延制御に対する2つの好ましい実施形態が以下に記載される。
本発明の好ましい一実施形態において、遅延(または遅延の上限)の測度は、符号語バッファ内のアクティブなバッファエントリの数であり、ここで、アクティブなバッファエントリの数は蓄積されたバッファエントリの数と符号語を含むバッファエントリの数との合計である。最初のバッファエントリが符号語を含む場合、この符号語がビットストリームに書き込まれるので、最初のバッファエントリは常に蓄積されたバッファエントリまたは空きのバッファエントリであることに留意されたい。たとえば、最大許容バッファ遅延が(アプリケーションにより決定されるが)D個のビットであり、全てのビンエンコーダに対する最大符号語サイズがLとすると、遅延の制約を犯さずに、符号語バッファ内に含むことができる符号語の最大数に対する下限はN=D/Lによって算出することができる。ビット内の遅延測度Dはシステムによって必要とされないが、符号語の最大数Nはエンコーダとデコーダの両方に既知である必要がある。本発明の好ましい実施形態において、符号語バッファエンントリの最大数Nはアプリケーションによって固定される。本発明の他の好ましい実施形態において、符号語バッファエントリの最大数Nはビットストリームの内部、たとえば、ビットストリームに含まれる、データパケットのヘッダ(またはスライスヘッダ)またはビットストリームに含まれるパラメータ集合内でシグナリングされる。ビンエンコーダ10が、符号語バッファ29へ1以上の新しいバッファエントリの蓄積に対するリクエストを送信する場合、新しい符号語バッファエントリが蓄積される前に、以下のプロセスが実行される(すなわち、複数の符号語バッファエントリが1つのリクエストによって蓄積される場合は、複数回実行される)。現在アクティブなバッファエントリ数プラス1(次に蓄積されるバッファエントリを考慮して)が符号語バッファエントリの最大数Nより大きい場合、(蓄積された)最初のバッファエントリは、現在アクティブなバッファエントリ数プラス1が符号語バッファエントリの最大数Nと等しいかこれより少なくなるまで、以下に記載されるプロセスによってフラッシュされる。蓄積されたバッファエントリのフラッシュはデータパケットの最後におけるフラッシュに類似している。対応している最初のバッファエントリを蓄積したビンエンコーダ10は、得られるビン列が符号語と関連付けられたビン列を表すまで、連結されているビンバッファ8へ特定のまたは任意のビン値を有するビンを加算することによってフラッシュされる。次に、符号語は蓄積されたバッファエントリに書き込まれ、それが最終的に(ビンバッファを空にし、前に蓄積されたバッファエントリを削除しつつ)ビットストリームへ追加される。前述したように、ビンバッファにビンを追加するための1つの好ましい方法は、最短の可能な符号語を生成するビンを追加することである。デコーダサイドでは、遅延制約を遵守するために追加されたビンを破棄するために同様のプロセスが実行される。これにより、デコーダはビットバッファから読み出された符号語をカウントするカウンタCを維持する(このカウンタはビットバッファ内で維持することができる)。カウンタCはデータパケットの復号化の開始時に(たとえば、ゼロに)初期化され、符号語の読み出し後に1増加される。加えて、各ビンデコーダ22はカウンタCxを含み、このカウンタCxは、最後の符号語が対応するビンデコーダ22によって読みだされる前に符号語カウンタCの値を格納する。すなわち、特定のビンデコーダ22が新しい符号語を読み出す場合、最初のステップとしてそのカウンタCxはCと等しく設定され、次に、符号語がビットバッファから読み出される。ビンに対するリクエスト19が特定のビンバッファ20へ送信され、全体符号語カウンタCと連結されているビンデコーダ22のカウンタCxとの差(C−Cx)が符号語バッファエントリの最大数Nよりも大きい場合、特定のビンバッファ20に現在格納されている全てのビンが破棄され、無視される。この追加ステップ以外に、復号化は、上記のように演算される。ビンに対するリクエスト19が送信される先のビンバッファ20が(すべてのビンがすでに除去されていたため、またはビンリクエストが受信された後に低遅延メカニズムが第1のステップにおいてすべてのビンを破棄したため)空の場合、連結されているビンデコーダ22はビットバッファ38などから1以上の新しい符号語を読み出す。
本発明の別の好ましい実施形態において、遅延に対する測度(または遅延の上限)は符号語バッファ内のアクティブなバッファエントリに対する最大符号語長の合計であり、ここで、特定のバッファエントリの最大符号語長はそのバッファエントリと関連付けられる復号化されたビンに依存する。バッファエントリの最大符号語長は6個として例示されている。最初のバッファエントリが符号語を含む場合、この符号語がビットストリームに書き込まれるので、最初のバッファエントリが常に蓄積されたバッファエントリまたは空きのバッファエントリであることに改めて留意されたい。最大許容バッファ遅延(アプリケーションにより決定される)がD個のビットとする。この最大バッファ遅延Dはエンコーダとデコーダの両方に既知である必要がある。本発明の好ましい実施形態において、最大バッファ遅延Dはアプリケーションによって固定される。本発明の別の好ましい実施形態において、最大バッファ遅延Dは、たとえば、ビットストリームに含まれる、データパケットのヘッダ(またはスライスヘッダ)またはパラメータ集合内で、ビットストリーム内部でシグナリングされる。ビット、またはバイト、またはビットの倍数、またはバイトの倍数の単位でシグナリングできる。ビンエンコーダ10が、符号語バッファ29へ1以上の新しいバッファエントリの蓄積に対するリクエストを送信する場合、新しい符号語バッファエントリが蓄積される前に以下のプロセスが実行される(すなわち、複数の符号語バッファエントリが1リクエストによって蓄積される場合は、複数回実行される)。
現在アクティブなすべてのバッファエントリに対する最大符号語長と蓄積されるバッファエントリの最大符号語長との合計が最大バッファ遅延Dよりも大きい場合、すべてのアクティブなバッファエントリに対する最大符号語長と蓄積されるバッファエントリに対する最大符号語長との合計が最大バッファ遅延Dと等しいかそれより小さくなるまで、(蓄積された)最初のバッファエントリは、上記したプロセスによってフラッシュされる。一例として、図6(b)を参考にする。現在アクティブなすべてのバッファエントリの最大符号語長の合計は29である。最大バッファ遅延Dが32と等しくなるように設定されていると仮定する。次のバッファエントリが、最大符号語長が3と等しいビンエンコーダ2によって蓄積される場合、29+3は32より大きくないので、最初のバッファエントリはフラッシュされない。しかし、次のバッファエントリが、最大符号語長が7と等しいビンエンコーダ1によって蓄積される場合、29+7が32より大きいので、最初のバッファエントリはフラッシュされる。蓄積されたバッファエントリのフラッシュは(対応するビンバッファに特定または任意の値を有するビンを追加することによって)上記のように行われる。
デコーダサイドにおいて、遅延の制約に従うために追加されたビンを破棄するために同様のプロセスが実行される。これによって、デコーダはビットバッファから読み出された符号語に対する最大符号語長をカウントするカウンタCを維持する(このカウンタはビットバッファ内で維持することができる)。異なるビンデコーダと関連付けられる最大符号語長は異なる場合があることに留意されたい。カウンタCはデータパケットの復号化の開始時に(たとえば、ゼロに)初期化され、符号語の読み出し後に増加される。このカウンタは読み出された符号語の実際の長さではなく、その最大長さ分増加される。すなわち、符号語が特定のビンデコーダによって読み出され、特定のビンデコーダによって使用される符号語テーブルと関連付けられる最大符号語長がLx(異なるビンデコーダは異なる最大符号語長に関連付けることができる)である場合、カウンタCはLxだけ増加される。全体的なカウンタCに加えて、各ビンデコーダ22はカウンタCxを含み、このカウンタCxは、最後の符号語が対応するビンデコーダ22によって読み出される前に符号語カウンタCの値を格納する。すなわち、特定のビンデコーダ22が新しい符号語を読み出す場合、最初のステップとしてそのカウンタCxはCと等しく設定され、次に、符号語がビットバッファから読み出される。ビンに対するリクエスト19が特定のビンバッファ20へ送信され、全体的なカウンタCと連結されているビンデコーダ22のカウンタCxとの差(C−Cx)が最大バッファ遅延Dよりも大きい場合、特定のビンバッファ20に現在格納されている全てのビンが破棄され、無視される。この追加ステップ以外に、復号化は、上記のように演算される。ビンに対するリクエスト19が送信される先のビンバッファ20が(すべてのビンがすでに除去されていたため、またはビンリクエストが受信された後に低遅延メカニズムが第1のステップにおいてすべてのビンを破棄したため)空の場合、連結されているビンデコーダ22はビットバッファ38などから1以上の新しい符号語を読み出す。
したがって、複数のエントロピーデコーダ22と選択部18は、復元されるシンボル列の形成に参加しないようにシンボル列の接尾語を断続的に破棄するように構成することができる。29。断続的破棄は、符号語エントリからのそれぞれのエントロピーデコーダの2つの連続した符号語検索間の複数のエントロピーデコーダによって符号語エントリから既に検索されている多数の符号語が所定基準を満たしている事象において実行することができる。次いで、複数のエントロピーエンコーダと符号語バッファは、現在転送されているがまだマッピングされていないシンボルを接頭語として有するドント―ケアシンボルによって、現在転送されているがまだマッピングプされていないシンボルを有意シンボル列へ断続的に拡張し、これによって拡張されたシンボル列を符号語へマッピングし、これによって得られた符号語を蓄積された符号語エントリへ入力し、符号語エントリをフラッシュするように構成されてもよい。断続的拡張、入力、フラッシュは、多数の蓄積された符号語エントリと入力された符号語を有する多数の符号語エントリとの合計が所定基準を満たす事象において発生する。所定基準は複数のエンコーダ/デコーダペアの最大符号語長を考慮に入れることができる。
いくつかのアーキテクチャにおいて、符号語のインターリービングに対する上記した好ましい実施形態によって、復号化の複雑さの点において欠点が生じる可能性がある。図7に示すように、すべてのビンデコーダ22は、単一ビットバッファ38から符号語(一般的な場合、可変長符号語)を読み出す。符号語は正しい順序で読み出される必要があるので、符号語の読出しは並列に実行することができない。これは、特定のビンデコーダは、他のビンデコーダが符号語の読み出しを終了するまで待機する必要があることを意味する。そして、可変長符号語の読出しの複雑さが(部分的に並列化された)復号化プロセスの残部との関係で重要である場合、可変長符号語のこのアクセスが全体の復号化プロセスに対する障害になり得る。単一ビットバッファからのアクセスの複雑さを低減するために用いることができる、記載されている本発明の実施形態のいくつかの変形があり、いくつかを以下に説明する。本発明の好ましい一実施形態において、(たとえば、冗長度のない接頭語符号を表している)符号語の単一集合が存在し、ビンデコーダ22ごとに使用される符号語の集合は、単一符号語集合の部分集合である。異なるビンデコーダ22は単一符号語集合の異なる部分集合を使用できることに留意されたい。ビンデコーダ22の一部によって使用される符号語集合が同じでも、ビン列との関連付けは異なるビンデコーダ22ごとに異なる。本発明の特定の実施形態において、符号語の同一集合はすべてのビンデコーダ22に対して使用される。全てのビンデコーダに対する符号語の集合を含む単一符号語集合を部分集合として有して場合、符号語の解析はビンデコーダ外で行うことができることから、符号語アクセスの複雑さが低減できる。符号化プロセスは上記のプロセスに関して変更されない。改良された復号化プロセスを図8に示す。単一符号語リーダはビットストリーム40からビット46とともに供給され―一般的に可変長の―符号語を解析する。読み出された符号語44は、先入れ先出しバッファを表す、符号語バッファ43内へ挿入される。ビンデコーダ22は、符号語バッファ43へ1以上の符号語に対するリクエスト41を送信し、このリクエストへの応答として1以上の符号語が符号語バッファから(順に)取り除かれ、対応するビンデコーダ22へ送信される。本発明の本実施形態によれば、潜在的に複雑な符号語の解析は裏処理で行うことができ、ビンデコーダを待機する必要がないことに留意されたい。ビンデコーダは既に解析された符号語へアクセスし、潜在的に複雑な符号語の解析はもはや全体的なバッファに対するリクエストの一部ではない。寧ろ、既に解析された符号語はビンデコーダへ送信されるが、符号語のインデックスだけをビンデコーダに送信されるように実施することもできる。
固定長のビット列のインターリービング
ビンデコーダ22が、グローバルビットバッファ38から可変長符号語を読み出さない代わりに、グローバルビットバッファ38から固定長のビット列を常に読み出しこれらの固定長のビット列をローカルビットバッファへ追加する場合に、デコーダの複雑さを低減するための更なる方法が得られる。ここで、各ビンデコーダ22は分離したローカルビットバッファと連結されている。次いで、可変長符号語はローカルビットバッファから読み出される。これにより、可変長符号語の解析は、並行に実行することができ、ビットの固定長列のアクセスのみが同期的な方法で行われる必要があるが、ビットの固定長列のこのようなアクセスは通常は非常に迅速であり、これにより、全体的な復号化の複雑さは一部のアーキテクチャに対して低減され得る。特定のローカルビットバッファへ送信されるビンの固定数は異なるローカルビットバッファごとに異なる場合があり、ビンデコーダ、ビンバッファ、またはビットバッファにおける事象としてのあるパラメータに応じて、経時的に変化しうる。しかしながら、特定のアクセスによって読み出されるビット数は特定のアクセス中に読み出される実際のビットに依存しない。これは可変長の符号語の読み出しに対する重要な違いである。ビットの固定長列の読み出しはビンバッファ、ビンデコーダ、またはローカルビットバッファにおけるある事象によってトリガされる。一例として、連結されているビットバッファ内に存在しているビット数が所定のしきい値を下回った場合、新しい固定長のビット列の読み出しをリクエストすることが可能である。ここでは、異なるしきい値を異なるビットバッファに対して使用することができる。エンコーダでは、固定長のビン列が同じ順序でビットストリーム内へ挿入されることを確実とすること必要があり、ここでは、デコーダサイドでビットストリームから読み出される。この固定長列のインターリービングと、上で説明したものと同様の低遅延コントロールと、を組み合わせることも可能である。固定長のビット列のインターリービングのための好ましい実施形態を以下に説明する。
図9は、2つ以上のビンエンコーダに対する固定長のビット列をインターリーブする、本発明の実施形態に対する基本的なエンコーダ構造を示す図である。図5に示された実施例とは対照的に、ビンエンコーダ10は単一の符号語バッファに連結されていない。その代わり、各ビンエンコーダ10は、対応する部分的ビットストリームに対するビットを格納する、個別のビットバッファ48と連結されている。すべてのビットバッファ48はグローバルビットバッファ51に連結されている。グローバルビットバッファ51はビットライタ53に連結されており、このビットライタ53は、グローバルビットバッファから符号化/復号化の順序でビット52を除去し、除去されたビット54をビットストリーム55へ書き込む。特定のビットバッファ48または連結されているビンエンコーダ10またはビンバッファ8におけるある事象において、ビットバッファ48はそれによりいくつかのビット数がグローバルビットバッファ51内に蓄積されるグローバルビットバッファ51へリクエスト49を送信する。固定長のビット列の蓄積に対するリクエスト49は順に処理される。グローバルビットバッファ51はある方法で先入れ先出しバッファを表す。すなわち、先に蓄積されたビットは先にビットストリームに書き込まれる。異なるビットバッファ48は、既に符号化されたシンボルに基づいて経時的に変化することもできる異なる量のビットを蓄積することができるが、特定のリクエストによって蓄積されたビット数は、リクエストがグローバルビットバッファに送信される時点で知られていることに留意されたい。
本発明の特定の実施形態において、ビットバッファ48とグローバルビットバッファ51は以下に説明されるように演算する。特定のビットバッファ48によって蓄積されたビットの量は、Nxと表記される。このビットの数Nxは異なるビットバッファ48ごとに異ならせることができ、また、経時的に変化し得る。本発明の好ましい実施形態において、特定のビットバッファ48によって蓄積されたNx個のビット数は経時的に固定される。ビット49のNx個の固定数に対する蓄積はビットバッファ48内のビット数Mx個、蓄積リクエストに対するビットNx個、および関連付けられた最大符号語長Lxに基づいてトリガされる。各ビンエンコーダ10は異なる最大符号語長Lxと関連付けることができることに留意されたい。ビン7が特定のビンバッファ8へ送られ、特定のビンバッファ8が空であり、Nx個のビットの列の1つ以下が(ビンエンコーダを介して)特定のビンバッファに連結されているビットバッファ48に対するグローバルビットバッファ内に蓄積され、(ビンエンコーダを介して)特定のビンバッファ8に連結されているビットバッファ48の蓄積リクエストによって蓄積されたビットの数Nxとこのビットバッファ48内に現在あるビットの数Mxとの差(Nx−Mx)が対応するビンエンコーダ10と関連付けられた最大符号語長Lxより小さい場合、連結されているビットバッファ49は、Nx個のビットの蓄積に対するリクエスト49をグローバルビットバッファ51へ送信する。グローバルビットバッファ51は特定のビットバッファ48に対してNx個のビットを蓄積し、次の蓄積のためにそのポインタを増加させる。Nx個のビットがグローバルビットバッファに蓄積された後、ビン7はビンバッファ8に格納される。この単一ビンが符号語に関連付けられたビン列を既に表している場合、ビンエンコーダ10は、ビンバッファ8からこのビンを取り除いて、連結されているビットバッファ48へ対応する符号語47を書き込む。そうでない場合(この単一ビンは符号語に関連付けられたビン列を表している)、ビンバッファ8が符号語に関連付けられたビン列を含むまで、更なるビン7が特定のビンバッファ8によって受容される。この場合、連結されているビンエンコーダ10はビンバッファ8からビン列9を取り除いて、対応する符号語47を連結されているビットバッファ48に書き込む。ビットバッファ48において得られるビット数Mx個が蓄積されたビットの数Nxより大きいかまたはこれと等しい場合、ビットバッファ48に最初に書き込まれたNx個のビットはグローバルビットバッファ51内で前に蓄積されたスペースへ挿入される。特定のビンバッファ8へ送信される次のビン7として、上記したのと同じプロセスが実行される。すなわち、新しいNx個のビット数がグローバルビットバッファ内に蓄積される必要があるかが最初にチェックされ(Nx−MxがLxより小さい場合)、次に、ビンはビンバッファ8等に挿入される。ビットライタは、グローバルビットバッファの固定長のビット列をそれらが蓄積された順に書き込む。グローバルビットバッファ51における最初の固定長エントリがグローバルビットバッファに実際に挿入された固定長ビット列を含む場合(すなわち、蓄積だけではない場合)、ビットライタ53はグローバルビットバッファ51からこのビット列52に対するビットを除去し、ビット54をビットストリームに書き込む。このプロセスは、グローバルビットバッファにおける最初の固定長エントリが蓄積されたまたは空きのエントリを表すまで、繰り返される。グローバルビットバッファにおける最初の固定長のエントリが蓄積されたエントリを表す場合、ビットライタ53は、このエントリがビットストリーム55へ更なるビット54を書き込む前に実際のビットで埋め込まれるまで、待機する。
データパケットの最後に、ビンバッファは上記したようにフラッシュされる。更に、ビットバッファは、グローバルビットバッファ内のすべての蓄積されたバッファエントリが埋まり、ビットストリームに書き込まれるまで、特定のまたは任意の値を有するビットを追加することによってフラッシュする必要がある。
図10に、グローバルビットバッファ51の可能な状態の2つの例が示されている。この例(a)において、異なるビットバッファ/ビンエンコーダが異なる数のビットを蓄積しているケースが図示されている。グローバルビットバッファは、実際に書き込まれた固定長のビット列を有する3つのエントリと蓄積された固定長のビット列を有する4つのエントリを含む。最初の固定長エントリは(ビットバッファ/ビンエンコーダ2によって挿入されたばかりであるはずの)実際のビットを既に含む。このエントリ(すなわち、対応する8ビット)は除去されかつビットストリームに書き込むことができる。次のエントリはビンエンコーダ3に対して10個のビットを蓄積するが、実際のビットはまだ挿入されていない。このエントリはビットストリームに書き込むことはできず、実際のビットが挿入されるまで待機する必要がある。第2の例(b)において、すべてのビットバッファ/ビンエンコーダが同一個数のビット(8ビット)を蓄積した。グローバルビットバッファは、8ビット列に対して4個の蓄積と、3個の実際に書き込まれた8ビット列を含む。最初のエントリはビンエンコーダ3に対して8ビットの蓄積を含む。任意の新しいビットをビットストリームに書き込むことができる前に、ビットライタは、ビットバッファ/ビンエンコーダ3がこの蓄積されたエントリに8ビットの実際の値を書き込むまで、待機する必要がある。
図11は、固定長ビット列をインターリーブする本発明の実施形態に対する基本的なデコーダ構造を示す図である。図7に示される実施形態とは対照的に、ビンデコーダ22は、単一ビットバッファに連結されていない。その代わり、各ビンデコーダ22は分離したビットバッファ58に連結されており、このビットバッファ58は対応する部分的ビットストリームからビットを格納する。全てのビットバッファ58はグローバルビットバッファ61に連結されている。ビットストリーム63からのビット62はグローバルビットバッファ61内へ挿入される。特定のビットバッファ58または連結されているビンデコーダ22またはビンバッファ20内のある事象が発生すると、ビットバッファ58は、それによりビットの固定長列60がグローバルビットバッファ61から除去され、特定のビットバッファ58へ挿入される、グローバルビットバッファ61へリクエスト59を送信する。固定長ビット列に対するリクエスト59は順に処理される。グローバルビットバッファ61は先入れ先出しバッファを表し、グローバルビットバッファへ先に挿入されたビットは先に除去される。異なるビットバッファ58は異なるビット量をリクエストすることができ、この量は既に復号化されているシンボルに基づいて経時的に変化し得るが、特定のリクエストによってリクエストされるビット数はリクエストがグローバルビットバッファへ送られる時点で知られることに留意されたい。符号語はビットストリームから直接読み出すこともできるので、グローバルビットバッファ61は必ずしも必要とされないことに留意されたい。グローバルビットバッファ61は、主として、プロセッシングチェーンの異なる態様をはっきり分けるために図示されている。
本発明の特定の実施形態において、ビットバッファ58とグローバルビットバッファ61は以下に説明されるように演算する。特定のビットバッファ58によってリクエストされ読み出されるビットの量はNxと表記され、エンコーダサイドで対応するビットバッファによってグローバルビットバッファへ書き込まれるビット量と等しい。このビットの数Nxは異なるビットバッファ58ごとに異ならせることができ、また、経時的に変化し得る。本発明の好ましい実施形態において、特定のビットバッファ58によってリクエストされかつ読み出されるNx個のビット数は経時的に固定される。Nx個のビットの固定数60の読み出しは、ビットバッファ58内のビット数Mx個と、関連付けられた最大符号語長Lxとに基づいてトリガされる。各ビンデコーダ22は異なる最大符号語長Lxと関連付けることができることに留意されたい。ビンに対するリクエスト19が特定のビンバッファ20へ送られ、特定のビンバッファ20が空であり、(ビンデコーダを介して)特定のビンバッファ20に連結されているビットバッファ58内のビット数Mxが対応するビンデコーダ22と関連付けられた最大符号語長Lxより小さい場合、連結されているビットバッファ58は、新しいNx個のビットの列に対するリクエスト59をグローバルビットバッファ61へ送信する。このリクエストへの応答として、最初のNx個のビットがグローバルビットバッファ61から除去され、このNx個のビットの列60はこのリクエストが送信された元のビットバッファ58へ送信される。最終的に、このNx個のビットの列は対応するビットバッファ58へ加算される。次に、次の符号語57がこのビットバッファから読み出され、連結されているビンデコーダ22は関連付けられたビン列21を連結されているビンバッファ20内へ挿入する。ビンに対する元のリクエスト19に対する最終応答として、最初のビンはビンバッファ20から除去され、この復号化されたビン25はビンバッファ選択部18へ送られる。次のビンリクエスト19が特定のビンバッファ20へ送られ、このビンバッファが空でない場合、次のビットはビンバッファ20から除去される。ビンバッファが空であるが、連結されているビットバッファ58内のビット数Mxが関連付けられた最大符号語長Lxより大きいかまたはこれと等しい場合、次の符号語がビットバッファから読み出され、新しいビン列が、最初のビットが除去されかつビンバッファ選択部へ送信されるビンバッファ内へ挿入される。ビットバッファが空であり、連結されているビットバッファ58内のビット数Mxが関連付けられた最大符号語長Lxより小さい場合、Nx個のビットの次の列がグローバルビットバッファ61から読み出され、連結されているローカルビットバッファ58内へ挿入され、次の符号語がビットバッファから読み出され、新しいビン列がビンバッファへ挿入され、列の最初のビンが除去されビンバッファ選択部へ送信される。このプロセスは、全てのソースシンボルが復号化されるまで反復される。
データパケットの最後において、リクエストされたソースシンボルを復号化するために必要とされる以上のビンおよび/またはビットがビンバッファおよび/またはビットバッファに挿入されることもある。ビンバッファ内の残留ビンとビットバッファ内の残留ビットは破棄され、無視される。
低遅延制約を有する固定長のビット列のインターリービング
固定長のビット列のインターリービングによるエントロピーエンコーダおよびデコーダに対する記載されている実施形態は、上記されているエンコーダバッファ遅延を制御するための方式と組み合わせることもできる。基本的な概念は、上記の遅延制御を有する実施形態と同じである。遅延または遅延の上限に関連した測度(以下参照)が指定されたしきい値を超えた場合、最初に蓄積されたバッファエントリは、(データパケットの最後に使用したものと同様のメカニズムを用いて)対応するビンバッファをフラッシュし、蓄積された固定長のバッファエントリの全てのビットを埋めるために更なるビットを潜在的に書き込むことによって、埋められる。このようなメカニズムによって、関連付けられた遅延測度が指定されたしきい値を下回るまで、待機するバッファエントリの数が削減される。デコーダサイドにおいて、遅延制約を遵守するために、エンコーダサイドで挿入されていたビンおよびビットを破棄する必要がある。ビンおよびビットを廃棄するために、基本的に、エンコーダサイドと同様のメカニズムを使用することができる。
本発明の好ましい実施形態において、遅延(または遅延の上限)の測度は、グローバルビットバッファ内のアクティブなバッファエントリにおけるビット数であり、ここで、アクティブなバッファエントリの数は、蓄積された固定長バッファエントリの数と、既に書き込まれたビットを含む固定長のバッファエントリの数と、の合計である。最初のバッファエントリが書き込まれたビットを含む場合、これらのビットはビットストリームへ書き込まれるので、最初のバッファエントリは常に蓄積された固定長のバッファエントリまたは空きのバッファエントリであることに留意されたい。最大許容バッファ遅延(アプリケーションにより決定されるが)をD個のビットとする。この最大バッファ遅延Dはエンコーダとデコーダの両方に知られている必要がある。本発明の好ましい実施形態において、最大バッファ遅延Dはアプリケーションによって固定される。本発明の他の好ましい実施形態において、最大バッファ遅延Dはビットストリームの内部、たとえば、ビットストリームに含まれる、データパケットのヘッダ(またはスライスヘッダ)またはパラメータ集合内でシグナリングされる。ビット、またはバイト、またはビットの倍数、またはバイトの倍数の単位でシグナリングできる。ビンエンコーダ10がグローバルビットバッファ51へ新しい固定長のビット列の蓄積に対するリクエストを送信する場合、新しい固定長のバッファエントリが蓄積される前に、次のプロセスが実行される。
グローバルビットバッファ内のアクティブなバッファエントリ内のビット数と現在の蓄積リクエストによって蓄積されたビット数との合計が最大バッファ遅延Dより大きい場合、(蓄積された)最初のバッファエントリは、グローバルビットバッファ内のアクティブなバッファエントリ内のビット数と、現在の蓄積リクエストによって蓄積されたビットの数との合計が最大バッファ遅延Dと等しいかまたはこれより少なくなるまで、以下に記載されるプロセスによってフラッシュされる。蓄積された固定長バッファエントリのフラッシュはデータパケットの最後におけるフラッシュに類似している。対応している最初のバッファエントリを蓄積したビットバッファ48に連結されているビンエンコーダ10は、得られるビン列が符号語と関連付けられたビン列を表すまで、連結されているビンバッファ8へ特定のまたは任意のビン値を有するビンを加算することによってフラッシュされ、次に、符号語は対応するビットバッファ48へ挿入される。前述したように、ビンバッファにビンを追加するための1つの好ましい方法は、最短の可能な符号語を生成するビンを追加することである。符号語の連結されているビットバッファへの書き込みと、グローバルビットバッファへの固定長のビット列の潜在的な挿入との後で、ビットバッファ内にビットがまだある場合(すなわち、書き込まれた符号語が蓄積された固定長のビット列を完全に埋め込まなかった場合)、特定のまたは任意の値を有する更なるビットが、全てのビットがビットバッファから除去され蓄積されたバッファエントリに書き込まれるまで、ビットバッファへ加算される。最終的に、このプロセスの最後では、完成されたバッファエントリ(グローバルビットバッファ内の最初の固定長エントリ)がグローバルビットバッファから除去されてビットストリームへ書き込まれる。
デコーダサイドでは、遅延制約を遵守するために追加されたビンおよびビットを破棄するために同様のプロセスが実行される。これにより、デコーダはグローバルビットバッファから読み出されたビットをカウントするカウンタCを維持する(このカウンタはグローバルビットバッファ内で維持することができる)。カウンタCはデータパケットの復号化の開始時に(たとえば、ゼロに)初期化され、固定長の列が読み出された後に増加される。Nx個のビットの固定長列がグローバルビットバッファ61から読み出される場合、カウンタCはNxだけ増加される。全体的なカウンタCに加え、各ビットバッファ58はカウンタCxを含み、このカウンタCxは、最後の固定長ビット列が対応するビットバッファ58内へ読み込まれる前にビットカウンタCの値を格納する。特定のビットバッファ58が新しい固定長ビット列を読み出す場合、そのカウンタCxは最初のステップとしてCと等しく設定され、次に、固定長ビット列がグローバルビットバッファ61から読み出される。ビンに対するリクエスト19が特定のビンバッファ20へ送信され、全体のカウンタCと連結されているビットバッファ58のカウンタCxとの差(C−Cx)が最大バッファ遅延Dより大きい場合、特定のビンバッファ20に現在格納されている全てのビンと連結されているビットバッファ58内に格納されている全てのビットが破棄され、無視される。この追加のステップ以外に、復号化は上記のように演算される。ビンに対するリクエスト19が送信される先のビンバッファ20が、(すべてのビンがすでに除去されていたため、またはビンリクエストが受信された後に低遅延メカニズムが第1のステップにおいてすべてのビンを破棄したため)空である場合、連結されているビンデコーダ22は連結されているビットバッファ58から新しい符号語を読み出すことを試みる。ビットバッファ58内のビット数が最大符号語長より少ない場合、符号語が読み出される前に、グローバルビットバッファ61などから新しい固定長ビット列が読み出される。
このように、上記の実施形態は各々、ハフマン符号化の複雑さのレベルにおいて算術符号化の効率とシンプルなモデリングの能力を提供するエントロピー符号化への新規なアプローチを示している。離散的なシンボルの入力列の事象スペースはバイナリ確率インターバルの小集合へマッピングされる。確率のインターバルを用いたエントロピー符号化は固定されたままでありモデリングステージからデカップリングされているが、ソースシンボルに対する確率モデルは固定されまたは適応することができる。確率インターバルの各々はハフマン符号の複雑さのレベルを有する非常にシンプルなエントロピーコードを用いて符号化される。事象空間投影式エントロピー符号化(ESPEC)の過剰率は算術符号化の場合と同様である。
したがって、上記実施形態は、エントロピー符号化の効率を高めるための見込みのある方法を可能にする。一般に、エントロピー符号化は、データの可逆圧縮の最も一般的な形態だと考えられる。可逆圧縮は、元のデータ表現が必要とするより少ないビット数で、情報を損なわずに、離散的データを表現することを目的としている。離散的データは、テキスト、図形、画像、ビデオ、オーディオ、音声、ファクシミリ、医用データ、気象データ、財務データの形態、または他の形態のデジタルデータの形態で付与することができる。多くの符号化アプリケーションにおいて、元のソースデータは、最初に、いわゆる符号化シンボルにマッピングされ、次に、これらの符号化シンボルはエントロピー符号化される。符号化シンボルへのマッピングは量子化を含みうり、この場合、全体的な符号化方式は非可逆的である。符号化シンボルsは、M変数(M≧2)アルファベットA={a0、...、aM−1}の任意の値を取ることができる。このシンボルsを符号化するために、アルファベットは予測された確率の質量関数(pmf){ps(a0)、...、ps(aM−1)}と関連付けられ、このpmf内で考慮されない符号化シンボル間の全ての依存関係は無視される。これらの抽象的な設定に対してエントロピー
は、シンボルsを符号化するためにシンボルあたりのビットにおいて予想される符号語長さに対する最大下限であり、これは、エントロピー符号化技術を用いて達成することができる。何十年もの間、ハフマン符号化と算術符号化が実用的なエントロピー符号化を支配してきた。これらは、(ある意味で)エントロピーの限界を近似することが可能である実用符号の周知の例である。
固定された確率分布に対して、ハフマン符号を構築することは比較的容易である。ハフマン符号の最も魅力的な特性はそのインプリメンテーションが可変長コード(VLC)テーブルを使用することで効率的に実現できることである。しかしながら、時変するソースの統計を扱う場合、すなわち、シンボル確率を変える場合、ハフマン符号とこれに対応するVLCテーブルの適応は、アルゴリズムの複雑さのみならずインプリメンテーションコストの両方に鑑みて要求が多すぎる。さらに、ps(ai)>0.5である支配的なアルファベット値を有する場合、対応するハフマン符号の冗長度(たとえば、ランレングス符号化などの任意のアルファベットの拡張子を使用しなければ)は実に大きい。ハフマン符号のもう1つの欠点は、高次の確率モデリングを扱う場合、VLCテーブルの複数の集合が必要とされるという事実によってもたらされる。
一方、算術符号化は、実質的にVLCより複雑であるが、適応型および高次数の確率モデリングだけでなく、かなり偏った確率分布に対処する時により一貫性のある適切な処理を行うことができるという利点を提供する。実際に、この特徴は、基本的には、算術符号化は、少なくとも概念的には、多かれ少なかれ直接的な方法で確率予測の任意の所与の値を得られる符号語の一部にマッピングするためのメカニズムを提供する事実に起因する。このようなインターフェイスを具備することによって、算術符号化は、一方では、確率モデリングと確率予測のタスクを互いに明確に区別し、他方では、実際のエントロピー符号化、すなわち、シンボルの符号語へのマッピングを可能にする。
今説明した従来のエントロピー符号化方式とは異なり、上述した本発明の実施形態の一部は一種の事象空間投影を使用しており、その数学的背景を以下により詳細に説明する。
符号化シンボルの列{s0、...、sN−1)}を考える。各シンボルは、アルファベット
から引き出される。アルファベット
は、それぞれが確率予測
と関連付けられている2つ以上の文字を含む。確率予測
は、エンコーダとデコーダに知られており、固定または可変とされる。変数の確率がエンコーダとデコーダにおいて同時に予測されると仮定される。アルファベットAiは、シンボル列に対して同一であるかまたは異なるシンボルタイプが異なるアルファベットと関連付けられるかのいずれかである。後者の場合、デコーダが列内の各シンボルのアルファベットを知っていると仮定される。この仮定は、実用的なソースのコーデックの説明はシンボルとそのアルファベットの順序を定めているシンタックスを含むとして正当化される。
シンボルの列{s0、...、sN−1}は、ビンとも呼ばれるバイナリシンボルの列に変換される。シンボルsiごとに、2値化
は、ビン
の順序付けられた集合へのアルファベット文字
の全単射マッピングを表している。2値化マッピング
は異なるシンボルsiごとにまたはシンボルカテゴリごとに異ならせることができる。特定のシンボルsiに対する各ビン列iは、1つ以上のビン
からなる。デコーダサイドにおいて、シンボルsiは、ビン列biが与えられている場合、逆マッピング
によって復元することができる。2値化の結果として、ソースシンボルの列{s0、...、sN−1}を表すビン列{b0、...、bB−1}が取得される。
すべてのビンbjが同じバイナリアルファベットB={0、1}と関連付けられるが、
である場合、対応するバイナリpmf
は通常は異なる。バイナリpmf
は確率の低いビン(LPB)値bj LPBとその確率pj LPB(pj LPB≦0.5である場合)によって記述することができる。このバイナリ確率記述{bj LPB、pj LPB}は、2値化マッピング
が与えられた場合、シンボルアルファベットに対する確率予測
から直接導出することができる。エンコーダサイドとデコーダサイドにおいて{bj LPB、pj LPB}を同時に直接予測することが可能である(そして、しばしば好ましい)。したがって、ビンは、シンタックスと前に符号化されたシンボルまたはビンに基づく確率モデル(また、コンテクストとも呼ばれる)と関連付けることができる。確率モデルごとに、確率の記述{bj LPB、pj LPB}は、確率モデルによって符号化されたビンの値に基づいて予測される。このようなバイナリ確率モデリングの例を、H.264のCABACとして説明する。
バイナリエントロピー関数
はp=0.5周辺で左右対称であり、同じバイナリコーダは、bj LPBの値とは無関係に、同一のLPB確率pj LPBと関連付けられたすべてのビンを符号化するために使用することができる。したがって、ビン列{b0、...、bB−1}は、符号化ビン
の列へ変換される。ビンbjごとに、対応する全単射マッピング
は、
で表される。ここで、プラス記号を円で囲んだ演算子は、排他論理和演算子を表す。デコーダサイドにおいて、ビンbjは符号化ビン
と対応するLPB値bj LPBが与えられている場合、逆マッピング
によって、復元することができる。符号化ビン
は対応するビンbjの値がLPB値bj LPBと等しくなることを指定し、符号化ビン
は対応するビンbjの値が確率の高い値(MPB)値1−bj LPBと等しくなることを指定する。
符号化ビンの列
は一意にソースシンボルの列{s0、...、sN−1}を表し、エントロピー符号化に用いることができる対応する確率予測はLPB確率pj LPB(pj LPB≦0.5である場合)によって完全に記述することができる。したがって、半開インターバル(0、0.5]において1つだけの確率は符号化ビン
に対するバイナリエントロピーコーダを設計するために考慮する必要がある。
実際のバイナリエントロピー符号化については、符号化ビン列
が少数の確率インターバルIkへ投影される。LPBの確率インターバル(0、0.5]はKインターバルIk=(pk、pk+1]に分割される。
Kインターバルの集合はk=1、...、K−1であるとき、K−1インターバルの境界pkで特徴づけられる。一般性を失うことなく、k=0、...、Kであるときpk<pk+1であると仮定する。外のインターバルの境界は固定され、p0=0およびpk=0.5が付与されている。単純な非適応バイナリエントロピーコーダがインターバルIkごとに設計される。関連づけられたLPBの確率
を有する全ての符号化ビン
はインターバルIkに割り当てられ、対応する固定エントロピーコーダによって符号化される。
以下の説明において、すべてのビンは、符号化ビン
を表し、すべての確率pはLPB確率pj LPBである。
符号化効率の確率インターバルの離散化の影響を調べる際、われわれはエントロピー限界を達成する固定確率のために最適なエントロピーエンコーダを設計できることを前提としている。各確率インターバルIk=(pk、pk+1]は代表確率
と関連付けられており、対応する最適なエントロピーコーダは、この代表的な確率のエントロピー限界を達成すべきである。これらの仮定の下で、インターバル代表値pIkに対して最適なエントロピーコーダを用いて確率pでビンを符号化する速度は、
で与えられる。
この場合、H(p)はバイナリエントロピー関数3を表し、
は、その最初の導関数である。さらに、インターバルにおける確率分布(0、0.5]が、
のとき、f(p)で与えられることを前提とする。次に、ビンあたりのビットで予測される速度は、対応する代表的な確率{pIk}を有する所与のKインターバル{Ik}の集合に対して、
で表される。
k=0、...、K−1であるとき、任意の代表的な確率pIkに対する最初の部分的導関数は、
で与えられる。
等式
は、定義Ikのドメイン内の代表的確率pIkに対して、単一の解
を有している。この解に対する第2の部分的導関数
は、
の場合、常にゼロより大きい。
したがって、条件B12が満たされた場合、等式B10において付与された値
は、インターバル境界pkおよびpk+1であるとき、予測全体速度Rを最小とするインターバルIkに対する代表的確率である。それ以外の場合、ビンはインターバルIkに全く投影されることなく、代表的確率
が、全体速度Rに影響を与えずに、任意に選択されるが、このような構成は、インターバルIkがエントロピー符号化に用いるものではないため、回避すべきである。
最適なインターバル境界に対する条件を見つけるために、われわれは、k=1、...、K−1であるとき、インターバル境界pkに関して予測される全体速度Rの最初の導関数を検討する。全ての
に対してf(p)>0である場合、
は、定義[pIk−1、pIk)のドメイン内部のインターバル境界pkに対して単一の解
を有しており、この解に対する第2の部分的導関数
はゼロより常に大きく、これによって、インターバル代表値pIk−1およびpIkが与えられたとき、
は、予測全体速度Rを最小にするインターバル境界
である。f(p)=0であるとき、確率
が存在する場合、等式
は複数の解を有するが、等式B13で付与されている
は、更なる最適解が存在しても依然として最適である。
インターバルKの数および確率分布f(p)が与えられているとき、予測全体速度Rを最小にするk=1、...、K−1であるインターバル境界pkおよびk=0、...、K−1であるインターバル代表値pIkは、k=0、...、K−1に対して、条件B12を受けることになっている等式B10とB13によって付与される等式システムを解くことによって得ることができる。これは、以下の反復アルゴリズムによって得ることができる。
アルゴリズム1:
1)条件B12が全てのk=0、...、K−1対して満たされるように、インターバル(0、0.5]をp0=0、pk=0.5、であり、全てのk=0、...、K−1対してpk<pk+1であるK個の任意のインターバル、Ik=(pk、pk+1]へ分割する。
2)等式B10に基づいて、k=0、...、K−1である代表値pIkを更新する。
3)等式B13に基づいて、k=1、...、K−1であるインターバル境界値pkを更新する。
4)収束まで、前の2つのステップを繰り返す。
図12は上記のアルゴリズムを用いた最適なインターバル離散化の例を示している、この例において、われわれは、0<p≦0.5であるとき、均一な確率分布f(p)=2を仮定し、確率インターバル(0、0.5]をK=4のインターバルに分割した。確率インターバルの離散化が、すべての
対してA(p)≧H(p)である、バイナリエントロピー関数H(p)の区分的な線形近似A(p)につながることが示されている。
符号化効率上のインターバルの離散化の影響に対する測度として、エントロピー限界に相対して予測される全体的な速度増加
を使用することができる。図12の特定の例において、エントロピーの予測値
は、ビンあたりの1/(21n2)ビットと等しく、速度オーバーヘッド
は1.01%と等しい。表4は、選択されたインターバルK個に対して、均一な確率分布および、
のとき、f(p)=8pである、線形に増加する確率分布に対する速度オーバーヘッド
および
をそれぞれ、挙げている。
このセクションでの検討は、一定の確率(たとえば、8〜10個のインターバル)を有する少数インターバルへのLPBの確率インターバル(0、0.5]の離散化が符号化効率に与える影響がきわめて小さいことを示した。
確率インターバルに対する上述したエントロピー符号化は、固定確率を用いた個別のコーダを有用にする。
以下において、われわれはまず、簡単なコードは固定確率に対してどのように設計することができるかを示す。これらの結果によって、われわれは結合してコードの設計とLPB確率インターバル(0、0.5]の分割を最適化するアルゴリズムを展開する。
固定確率p=pIkに対するエントロピー符号化は、算術符号化または可変長符号化を使用して実行することができる。後者の場合は、以下のアプローチがシンプルで非常に効率的であるように思われる。
われわれは、ビンの可変数が可変長符号語にマッピングされるバイナリエントロピー符号化方式を検討する。一意的な復号化性に関して、ビン列への符号語の逆マッピングは一意である必要がある。そして、われわれはできるだけエントロピー限界に接近するコードを設計したいので、われわれの考えを全単射マッピングに制約する。図13に示すように、このような全単射マッピングは、すべてのリーフノードが符号語と関連付けられているバイナリツリーによって表することができる。ツリーエッジはバイナリ事象を表している。図13の例において、下方エッジはLPBビン値を表し、上方エッジはMPBビン値を表している。バイナリツリーが完全なバイナリツリーの場合、すなわち、すべてのノードがリーフであるか2つの子孫をもっている場合、バイナリツリーはビンに対する接頭語符号を表している。各リーフノードは、与えられたLPBの確率pに基づいて確率と関連付けられる。ルートノードは確率proot=1を有している。他のすべてのノードに対する確率は、対応する先祖の確率にLPBの子孫に対するpとMPBの子孫に対するq=1−pを乗算することによって得られる。各リーフノードLlは、ルートノードからリーフノードまでのLPBエッジの数alとMPBエッジの数blによって特徴づけられる。特定のLPBの確率pに対して、リーフノードL={al、bl}に対する確率plは、
と等しい。
バイナリツリーTは、リーフノードLの数と、l=0、...、L−1である、関連付けられたペア{al、bl}と、によって完全に特徴付けられる。
完全なバイナリツリーTとLPBの確率pが与えられた場合、リーフノードへの符号語の最適な割当ては、ハフマンアルゴリズムによって得ることができる。可変長符号語(VNB2VLC)マッピングCに対して得られる可変数のビットは、リーフノードの数と同一である符号語Lの数、および、llが対応するリーフノードLl={al、bl}と関連付けられた符号語長を表す、l=0、...、L−1に対するタプル{al、bl、ll}によって特徴付けられる。符号語長{ll}が与えられたとき、符号語割り当てに対して複数の可能性があり、実際の符号語の割当ては、符号語が一意に復号可能な接頭語符号を表している限りは重要ではないことに留意されたい。所与のコードCとLPBの確率pに対するビンあたりのビットにおける予測された速度R(p、C)は、予測された符号語長と符号語あたりのビンの予測数の割合である。
大抵の場合、コード設計は符号語Lの最大数、符号語あたりのビンの最大数、または最大符号語長などの要因によって制限されるか、または、特定の構造のコードへ制約される(たとえば、最適化された解析を可能にするために)。特定のアプリケーションのために利用可能なコードの集合Scが与えられたと仮定した場合、特定のLPB確率pに対する最適コード
は、予測レートR(p、C)を最小にすることによって求められる。
他の迅速な代替として、最小化はバイナリツリーSTの所与の集合に対して進めることができ、ツリーごとに、ハフマンアルゴリズムによって得られる1つだけのVNB2VLCコードCが考えられている。一例として、リーフノードLの数が所与の最大数Lmより少ないかまたはこれと等しい全てのバイナリツリーTを考慮することによって、様々なLPBの確率pに対してVNB2VLCコードを設計した。図14において、相対速度の増加ρ(p、C*(p))=R(p、C*(p))/H(p)は、選択した最大テーブルサイズLmに対してLPBの確率pにプロットされる。速度増加ρ(p)は、通常、より大きなテーブルサイズを可能にすることによって減少される。より大きなLPB確率の場合、通常、8〜16個の符号語から成る小テーブルサイズLが速度増加ρ(p)を合理的に小さめに維持するために十分であるが、より小さいLPB確率(たとえば、p<0.1)に対しては、より大きなテーブルサイズLが必要とされる。
前のセクションで、われわれは、最適なコードと固定されたLPBの確率に対するコード設計を想定して最適な確率離散化を検討した。しかし、一般に、限定されたテーブルサイズの現実のVNB2VLCコードではエントロピー限界を達成することはできないので、最適化されたエントロピー符号化設計を得るためにコードの設計とLPB確率インターバル(0、0.5]の分割を同時に考える必要がある。
所与のインターバルIk=(pk、pk+1]に対して、この所与のインターバルに対する予測速度
を最小とする場合、最適なコード
における所与の集合SCのコードCkは以下のように表す。
実用的な設計の場合、等式B19における積分の最小化は、等式B10に基づいてインターバルIkに対する最適代表確率
を最初に決定し、次に等式B18に基づいて代表確率
に対する所与の集合SCの最適なコード
を選択することによって、符号化効率にほとんど影響を与えずに、簡略化することができる。
k=0、...、K−1であるコードの集合Ckが与えられたとき、k=1、...、K−1である最適なインターバル境界値pkは、予想される全体的な速度
を最小とすることによって求められる。
最初の導関数を、k=1、...、K−1である、ゼロと等しいインターバル境界
に関して設定すると、
となる。
等式B13と同様に、
が常に最適解であることが示されているが、確率分布f(p)によっては、さらに最適な解が存在する可能性がある。これにより、所与の関連付けられたコードCk−1およびCkをそれぞれ有する、2つのインターバルIk−1とIk間の最適なインターバル境界
は、関数R(p、Ck−1)とR(p、Ck)の交点である。
これによって、以下のインタラクティブアルゴリズムは、
である、確率インターバルの数K、可能なコードの集合SC、および確率分布f(p)が付与された時、確率インターバル分割と関連付けられたコードを同時に求めるために使用することができる。
アルゴリズム2:
1)セクション3で指定されたアルゴリズム1を使用して、k=0、...、Kであるとき、初期の確率インターバル境界値pkを求める。
2)等式B10に基づいて、k=0、...、K−1であるとき、確率インターバルIkに対して、代表値pIkを求める。
3)等式B18に基づいて、k=0、...、K−1であるとき、インターバル代表値pIkに対して、コード
を求める。
4)等式B21に基づいて、k=1、...、K−1であるとき、インターバル境界値pkを更新する。
5)収束するまで上記の3ステップを繰り返す。
アルゴリズム2におけるステップ2および3は、等式B19に応じて、k=0、...、Kである、インターバル境界pkに基づいて、k=0、...、K−1である、コード
の直接導出によって置き換えることができる。そして、セクション4.1に述べたように、ステップ3の最小化は、バイナリツリーTごとに、ハフマンアルゴリズムによって得られる1つだけのVNB2VLCコードCkが考慮される、バイナリツリーSTの所与の集合に対して展開することもできる。
一例として、われわれは、アルゴリズム2を使用して、K=12の確率インターバルへの分割と、対応するVNB2VLCコードを同時に導き出した。このとき、アルゴリズムのステップ3における最小化を、ツリーTごとに評価されたコードCがハフマンアルゴリズムによって得られたバイナリツリーSTの所与の集合に対する等価の最小化と置き換えた。われわれは、最大数Lm=65個のリーフノードを有するツリーT、よって、最大65個のテーブルエントリを有するコードCを考えた。最大16個のリーフノードを有するすべてのバイナリツリーTは最小化において評価されていたが、われわれは、16個より多くのリーフノードをもつツリーに対して、より少数のリーフノードを有するツリーに対して最良の結果をもたらす、その次に最適な検索を採用した。
図15において、コード設計例として、エントロピー限界ΔR(p)=R(p)−H(p)に対して予測される速度増加が、LPBの確率pに対してプロットされる。比較として、われわれは、(セクション3で展開されるように)理論的に最適な確率インターバルの離散化に対して予測速度増加ΔRと、図中、更なる制約pIK−1=0.5を有する理論的に最適な確率インターバルの離散化と、をプロットした。確率インターバルの同時離散化とVNB2VLCコード設計によって、インターバルの境界線のシフトにつながる(k=1、...、K−1であるインターバル境界pkがΔR(p)曲線の極大値によって与えられる)ことが分かる。均一な確率分布f(p)を仮定した場合、本物のVNB2VLCコードを有する設計例に対するエントロピー限界に対する相対的に予測される全体的速度の増加は、
である。理論的に最適な確率インターバルの離散化および更なる制約pIK−1=0.5を有する理論的に最適な確率の離散化のそれぞれに対応する相対的速度増加はそれぞれ、
と
である。
符号語の終了は以下のように実行できる。シンボルの有限列{s0、...sN−1}を符号化する時、K個のバイナリエンコーダの各々がk=0、...、K−1のとき、符号化ビンの有限列
を処理する。そして、K個のバイナリエンコーダの各々に対して、符号語または符号語の列
が付与された時、列の全ての符号化ビン
が復元できることが確かになった。
算術符号化を採用する場合、符号化ビンの列に対する算術符号語は、すべての符号化ビンが符号語を与えられて復号化されるように終了する必要がある。上記のVNB2VLCコードに対して、列
の最後のビンは、符号語に関連付けられたビン列を表していない可能性がある。このような場合、残留するビン列を接頭語として含む任意の符号語が書き込むことができる。最短長(またはこれらの符号語の1つ)を有している対応する符号語が選ばれた場合、オーバーヘッドを最小にすることができる。デコーダサイドにおいて、ビットストリームシンタックスと2値化方式によって識別することができるビン列の最後における更なる読み出しビンは破棄される。
簡単なコード設計の例が以下に提供される。図示目的のために、われわれは、3文字と、ps(a0)=0.7、ps(a1)=0.18、およびps(a2)=0.12の固定された関連確率を有するソース{s}の簡単な例を考える。図15に示すように、対応する3項の選択ツリーは完全なバイナリツリーに変換することができる。
図15における、完全なバイナリツリーの2値化が表5に示されている。3項シンボルpmfp
sは、2つのバイナリpmf:p
b0=(0.7,0.3)とp
b1=(0.6,0.4)に変換される。ビットストリーム内のシンボルsごとに、ビンb
0が存在している。ビンb
0が0と等しいとき、b
1も存在している。表2に提供された2値化はソースsに対する最適な1文字ハフマン符号と同じであることに留意されたい。
ソースsのエントロピーは、
H(0.7、0.18、0.12)=H(0.7、0.3)+0.3H(0.6、0.4)
=1.1726bit/symbol (B22)
1文字ハフマン符号の平均符号語長は、次式で与えられる:
これは、ρHC=0.1274ビット/シンボルの冗長度または10.87%の予測速度オーバーヘッドに対応する。
固定されたpmfを有する特定の2値化の例に対して、ビンb0とb1は、両ビンに対してLPBの値bj LPBが0と等しいので、既に、符号化ビンを表している。LPBの確率の分布f(s)は、p=0.3とp=0.4の場合を除いて、f(p)=0で離散的である。これによって、最適な確率離散化は、代表値がpI0=0.3とpI1=0.4である、K=2のインターバルにつながる。これらのインターバル間のインターバル境界p1は(0.3、0.4]において任意に選択することができる。
ソースを符号化するために、ソースシンボルの列は、ビン列へ2値化される。ビンb0は、すべてのソースシンボルのために送信される。ビンb1は、b0=0の場合に限って送信される。ビンb0とb1は、一定のLPBの確率pI0=0.3とpI1=0.4それぞれによって個別に符号化される。
固定した確率を有するバイナリアルファベットの効率的な符号化はシンプルなVNB2VLCマッピングによって達成することができる。LPBの確率p
LPB=0.3とp
LPB=0.4に対する小さい符号化テーブルとのVNB2VLCマッピングの例を表6と表7にそれぞれ示す。p
LPB=0.3に対するVNB2VLCマッピングの冗長度は0.0069bit/bin、すなわち0.788%であり、LPBの確率p
LPB=0.4に対しては、冗長度は0.0053bit/bin、すなわち0.548%である。
新しい符号化方法によってもたらされる全体予測速度は、
全体の冗長度はエントロピー限界に対して0.73%であり、これは1文字ハフマン符号と比較して、重要な改良点を示している。
同様の符号化効率の改良はランレングスコードを作成することによって得ることができることが主張できる。上記の例において、われわれは最大2つのシンボルまでの実行を考慮することによって最大確率シンボルに対するランレングスコードを構築することができる。事象の各々{a0a0、a0a1、a0a2、a1a2}は別個の符号語に関連付けられる。このようなコードは、エントロピー限界に相対する冗長度1.34%をもたらす。実際に、VNB2VLCコードは、バイナリシンボルに対するランレングスコードの一般化としてみなすことができる(表3のVNB2VLCコードはランレングスコードを効果的に表している)。固定確率を有する単一のシンボルアルファベットの場合、提示されたアプローチに関して同様の符号化効率を、可変長符号語に対して可変数のソースシンボルをマッピングするコードを作成することによって達成することができる。この提示されているアプローチの主な利点は、固定または適合確率予測を有する任意のソースシンボル列を、固定したLPB確率で演算する少数のシンプルなバイナリコーダへマッピングする際の、そのフレキシビリティである。
一意の決定可能性を達成する方法を次に考える。
提供されているエントロピー符号化方式によって、ソースシンボル列s={s0、...sN−1}の符号化は以下の3つの基本的なステップから成る。
・シンボル2値化b={b0、...bB−1}=γb(s)がビン列b={b0、...bB−1}をもたらすステップ。
・ビン列を符号化ビン列
へ変換するステップ。
・確率インターバル離散化とK個の固定バイナリコーダを用いて、符号化ビン列
をバイナリエントロピー符号化するステップ。
符号化ビン列
が一意に復号可能であり、γbとγcのマッピングが可逆である場合、シンボル列s={s0、...sN−1}は一意に復号可能である。
γeに、1つ以上の符号語c(bc)={c0、...}の列への1以上の符号化ビンの列
のエンコーダマッピングを通知させる。
c(bc)=γe(bc) (B25)。
符号化ビン列bcの一意的な復号可能性に対して、符号語c(bc)の列が付与されているとき、エンコーダマッピングγeは、一意の符号語c(bc)が各々の可能な符号化ビン列bcに割り当てられるという特性を有する必要がある。
この特性は、算術コードまたは接頭語符号が使用されている場合、常に満たされる。VNB2VLCコードがビンの可変数に対する接頭語符号を表しているので、(セクション4.3において説明した符号語終了を含む)セクション4.1に説明されているVNB2VLCコードに対して、特に、満たされる。
しかしながら、提示されているエントロピー符号化のアプローチにおいては、符号化ビンの列bcはk=0、...、K−1であるK個のサブシーケンス
に分割され、
{b0 c、...、bK−1 c}=γp(bc) (B27)
サブシーケンス
のそれぞれに対して、符号語ck(bk c)の列は、特定のエンコーダマッピング
を使用して割り当てられる。これによって、一意的な復号可能性の条件は拡張する必要がある。符号化ビンbcの列は、符号化ビンbk cの各サブシーケンスが対応する符号語ck(bk c)が付与されて一意に復号可能でありかつ分割ルールγpがそのデコーダに知られている場合、k=0、...、K−1である、K個の符号語ck(bk c)の列が付与されて、一意に復号可能となる。分割ルールγpは、LPB確率インターバルの離散化{Ik}と、j=0、...、B−1のとき、符号化ビン
と関連付けられるLPB確率pj LPBとによって付与される。したがって、LPB確率インターバルの離散化{Ik}は、デコーダサイドで知られている必要があり、j=0、...、B−1のとき、符号化ビン
ごとのLPB確率pj LPBはエンコーダサイドとデコーダサイドにおいて同様に求められる必要がある。
符号化ビン列cへのビン列のマッピングγcは、j=0、...、B−1のとき、各単一のbjが、バイナリマッピング
によって変換される。デコーダサイドでは、ビン列は、j=0、...、B−1のとき、バイナリマッピング
によって求めることができる。各ビンbjに対するLPB値bj LPBが、エンコーダとデコーダサイドで同じように得られる場合、
なので、これらのマッピング
は、対応するエンコーダマッピング
の逆を表しており、これによって、ビン列bの符号化ビン列bcへの変換γbは可逆である。
最後に、われわれは、i=0、...、N−1のときの各シンボルsiがビン列
にマッピングされる2値化b=γb(s)の可逆性を調べる。シンボルsiは、2値化マッピング
がシンボルsiに対するアルファベットAiの各文字
へ異なるビン列
を割り当てる場合、対応するビン列biが与えられて一意に復号化することができる。しかしながら、この条件は、ビン列b={b0、...bB−1}の、i=0、...、N−1のときのシンボルsiに対応するビン列biへの分割がデコーダに知られていないので、不十分である。十分な条件は、シンボルsiごとに、対応するアルファベットAiの文字
に関連付けられるビン列
が接頭語符号を形成しかつi=0、...、N−1のとき、シンボルsiごとの2値化マッピング
が、デコーダサイドで知られているときに与えられる。
提示されているエントロピー符号化のアプローチのための一意的な復号可能性の条件は次のようにまとめることができる。
・2値化マッピング
は、接頭語符号を表しかつ(シンボル符号化順に)デコーダに知られている。
・すべてのビンbjに対する確率モデル(bj LPB、pj LPB)はエンコーダとデコーダサイドで同様に得られる。
・LPB確率インターバル(0、0.5]が、k=0、...、K−1のとき、K個のインターバルIkへ分割されることがデコーダに知られている。
・k=0、...、K−1のとき、各確率インターバルIkに対するマッピング
が一意に復号可能なコードを表している。
以下において、われわれは、全体的なエンコーダとデコーダの設計例をより詳細に説明する。われわれは、ビンの確率モデル{bLPB、pLPB}がエンコーダおよびデコーダサイドで直接予測され、K個のバイナリコーダがセクション4.1で説明されたVNB2VLCマッピングを使用する、符号化方式に集中する。各ソースシンボルsは、その値の範囲を含むシンボルのタイプを決定するシンボルカテゴリcsと関連付けられる必要がある。シンボルと、関連付けられたシンボルカテゴリの順序は、エンコーダとデコーダサイドで知られていることが仮定されるシンタックスによって付与される必要がある。
エンコーダおよびデコーダの設計例のブロック図を図17に示す。エンコーダサイドにおいて、関連付けられたシンボルカテゴリcsを有するシンボルsはバイナライザへ供給され、バイナライザは各シンボルsをビン列
へ変換する。
使用される2値化方式
はシンボルカテゴリcsに基づいて決定される。さらに、バイナライザは、ビン列sの各ビンbを、このビンbを符号化するために使用される確率モデルを指定する、確率モデル表示cbと関連付ける。確率モデル表示cbは、シンボルカテゴリcs、ビン列s内部の現在のビンのビン数、および/または既に符号化されたビンおよびシンボルの値に基づいて、得ることができる。
確率予測割当部は、値の対{bLPB、pLPB}によって特徴付けられる、複数の確率モデルを維持している。それは、バイナライザからビンbと、関連付けられる確率モデル表示cbを受信し、LPB値bLPBと表示された確率モデルのLPB確率pLPBとを符号化ビン導出子部と確率量子化部にそれぞれ転送する。その後、対応する確率モデル{bLPB、pLPB}は受信したビンbの値を用いて更新される。
符号化ビン導出子部はバイナライザと確率予測子と割当部から、ビンbと関連付けられたLPB値bLPBとをそれぞれ受け取り、bc=b[EXOR]bLPBによって求められる符号化ビンbcを確率量子化部へ送信する。この確率量子化部は、各符号化ビンbcをK個のバイナリエンコーダの1つへ転送する。確率量子化部は、LPB確率インターバルの量子化{Ik}に関する情報を含む。符号化ビンbcに関連付けられかつ確率予測割当部から受信されるLPB確率pLPBは、インターバル境界{pk}と、
が求められる確率インターバルインデックスkと比較される。次に、符号化ビンbcは関連付けられたバイナリエンコーダへ転送される。
K個のバイナリエンコーダの各々は、ビンバッファおよびビンエンコーダから成る。ビンバッファは、確率量子化部から符号化ビンbcを受け取り、これらを符号化順に格納する。ビンエンコーダは特定のVNB2VLCマッピングを実施し、ビンバッファ内のビン列を符号語に関連付けられるビン列と比較する。ビンバッファ内のビン列がこれらのビン列の1つと等しい場合、ビンエンコーダはこのビン列{bc}をビンバッファから取り出し、関連した符号語({bc})を対応する符号語ストリームに書き込む。シンボル列に対する符号化プロセスの終わりに、セクション4.3で説明したように、ビンバッファが空になってない全てのバイナリエンコーダに対して終了符号語が書き込まれる。
K個の得られた符号語ストリームは個別に送信され、パケット化され、もしくは格納され、あるいは、送信または格納を目的としてインターリーブされる(セクション6.2参照)。
デコーダサイドで、ビンデコーダとビンバッファから成るK個のバイナリデコーダの各々は、1符号語のストリームを受信する。ビンデコーダは、符号語のストリームからの符号語({bc})を読み出し、符号化順に、関連付けられたビン列{bc}をビンバッファに挿入する。
シンボル列の復号化は、基礎となるシンタックスによって駆動される。シンボルsに対するリクエストは、シンボルカテゴリcsと一緒にバイナライザへ送信される。バイナライザはこれらのシンボルリクエストをビンに対するリクエストに変換する。ビンに対するリクエストは、エンコーダと同様に求められる確率モデル表示cbに関連付けられ、確率予測子と割当部へ送信される。確率予測子と割当部は、エンコーダサイドで相方と同様に演算される。確率モデル表示cbに基づいて、確率モデルを識別し、そのLPB値bLPBとLPB確率pLPBをビン導出子と確率量子化部のそれぞれへ送信する。
確率量子化部は、バイナリエンコーダがエンコーダサイドで決定されるのと同様に、LPB確率pLPBに基づいて、K個のバイナリデコーダの1つを決定し、対応するビンバッファから、最初の符号化ビンbcを符号化順に取り除き、それをビン導出子へ転送する。ビン導出子は符号化ビンbcと関連付けられたLPB値bLPBとを、確率量子化部、確率予測割当部のそれぞれから受け取り、ビン値b=bc[EXOR]bLPBを求める。バイナライザから送信されたビンリクエストへの最終応答として、ビン導出子は、復号化されたビン値bを、バイナライザ、確率予測割当部へ送信する。
確率予測子と割当部において、復号化されたビンbの値は、エンコーダサイドでと同じように、関連付けられた値cbによって選択された確率モデル{bLPB、pLPB}を更新するために使用される。最後に、バイナライザは、受信したビンbをシンボルリクエストのために既に受信されているビン列sへ加算し、このビン列sを、2値化方式
によってシンボル値と関連付けられるビン列と比較する。ビン列sがこれらのビン列の1つと一致する場合、対応する復号化されたシンボルsがシンボルリクエストへの最終応答として出力される。それ以外の場合、バイナライザは、シンボルsが復号化されるまで、更なるビンリクエストを送る。
シンタックスによって駆動される更なるシンボルリクエストが受信されなくなった場合、シンボル列の復号化は終了する。(終了符号語の結果として、)エントロピー復号化プロセスの終わりに、ビンバッファ内に含まれている可能性のある符号化ビンbcは破棄される。
以上の実施形態をまとめると、どれもエントロピー符号化へ新規なアプローチを表している。シンボル列のビットストリームへのマッピングと逆マッピングが記載されている。各シンボルはエンコーダとデコーダにとって同時に既知の関連付けられているパラメータを持っている。エントロピーコーデックは、各々がシンボルに関連付けられているパラメータのサブセットに割り当てられている複数の先入れ先出し(FIFO)バッファを含む。シンボルの所与のパラメータに対して、エンコーダがシンボルを対応するFIFOバッファへ割り当てる。エンコーダ割当てルールはデコーダサイドにおいて知られているので、デコーダはエンコーダがこのシンボルを割り当てたFIFOバッファから読み出す。
シンボルへパラメータを割り当てるための一例はその確率の予測である。確率予測はエンコーダとデコーダにおいて同時に行うことができる測定から求められる。特定のFIFOバッファは、選択されている確率の部分集合に含まれる予測された確率値を有するシンボルを含み、これによってエントロピー符号化が改良される。この改良は、ビットレートの低減、複雑さの緩和、遅延の低下、またはエラー回復に関連しうる。
シンボルへのパラメータ割当ての他の例としては、シンボルの確率の予測と、以下の1つ以上を含む他のパラメータが挙げられる:シンボルの意味、その重要性、そのロケーション(時間的、空間的、体積など)、その伝送路コードの保護。特定のFIFOバッファは選択される確率の部分集合に関連するシンボルを含み、これによって、エントロピー符号化を改良できるとともに他のパラメータに対する有利性が達成できる。
一部の実施形態は一般的に圧縮されたデータに関して説明してきたが、上述した符号化が圧縮ビデオデータに使用され、すなわち、ビデオおよび/または画像の符号化に用いられる実施形態が説明される。
第1の実施形態は、画像および/またはビデオコーダおよびデコーダにおける符号化変換係数に係り、たとえば、H.264/AVCにおけるCABACの対応する部分を置き換える、ビデオ符号化の分野の符号化変換係数に対して、新規な効率的な方法として特に用いることができる変換係数の符号化について記載する。
MPEG―2、H.263、およびMPEG―4などのビデオ符号化に対する初期のハイブリッドブロックベースの規格では、量子化された変換係数(レベル)のブロックは、定義付けられたスキャンプロセスによって、ランレングス符号化とその後のマッピングを使用して可変長を有する符号語に符号化されたベクトルへ、マッピングされる。
MPEG―2において、可変長を有する符号語は、2次元の事象(RUN、LEVEL)に関連付けられ、ここで、LEVELは、ゼロに量子化されない(有意)変換係数の量子化された値を表し、ランレングスRUNは、ゼロに量子化される後続の(非有意)変換係数の数を示し、これらは、変換係数のベクトルにおいて、現行の有意変換係数の直前にある。さらに、可変長を有する符号語は2つの特別な事象EOBとESCAPEに対して定義づけられる。EOB事象がブロック内にこれ以上有意変換係数がないことを示しているのに対し、ESCAPE事象は既存の事象(RUN、LEVEL)は可変長を有する符号語の定義づけられたアルファベットによって表すことができないことを示す。この場合、シンボルRUNとLEVELは固定長の符号語によって符号化される。
さらに新しい符号化規格のH.263およびMPEG―4において、可変長を有する符号語の関連付けは、3次元の事象(LAST、RUN、LEVEL)に基づいて行われ、ここで、バイナリシンボルLASTは、現在の有意変換係数がブロック内の最新の有意係数であるかどうか、または更なる有意変換係数が後に続くかどうかを示す。これらの3次元の事象を使用することによって、更なるEOB事象は必要とされないが、ESCAPE事象がMPEG―2と同様に使用される。この場合、バイナリシンボルLASTはRUNとLEVELに対して追加的に符号化される。
MPEG―2、H.263、およびMPEG―4において実現される変換係数の符号化は以下の欠点を有している:
・各符号化事象に対して、整数長さを有する符号語のみが関連付けられることができ、0.5より大きい確率を有する事象の効率的な符号化は行えない。
・符号化事象をブロック内のすべての変換係数に対する可変長を有する符号語へマッピングするための固定テーブルの使用は、位置または頻度に依存するシンボル統計を考慮していない。
・実際に存在するシンボルの統計への適応は不可能である。
・存在しているインターシンボルの冗長度からは利用できない。
H.263規格のAnnex Eは、異なる所定のモデル確率分布が使用されている任意の非適応算術符号化を指定する。
・第1、第2、第3の事象(LAST、RUN、LEVEL)ごとに1つ/ESCAPE
・全ての以下の事象(LAST、RUN、LEVEL)に対して他の1つ/変換係数のブロックのESCAPE、および、
・ESCAPE事象の後に符号化されたシンボルLAST、RUN、およびLEVELごとに1つ。
しかしながら、以下の理由から、符号化効率のかなりの増加は、任意の算術符号化によって得ることができない:
・非整数の長さを有する符号語を符号化事象に関連付けることができるという算術符号化の利点は形態(LAST、RUN、LEVEL)の結合した事象を用いることによって符号化効率に殆ど効果をもたない。
・異なる確率分布を使用するという利点が実際に存在するシンボル統計への適応が可能ではないという事実によって消される。
H.264/AVCにおいて、変換係数を符号化するための可変長を有する符号語に基づくコンテクスト適応方法は、エントロピー符号化するための標準的な方法として指定される。ここで、変換係数のブロックの符号化は以下の特性によって決定される:
・ブロック内の有意係数の数と、変換係数のベクトルの終わりの1つに量子化された以降の係数の数と、の両方がシンボルCOEFF_TOKENによって決定される。ブロックタイプと近接ブロックに対して既に符号化/復号化されたシンボルCOEFF_TOKENとに基づいて、5個の定義付けられた符号語テーブルの1つが符号化のために選択される。
・係数のベクトルの終わりの1つに量子化された変換係数に対して、単一ビットだけが符号を指定するために転送されるのに対し、残っている有意変換係数の値(レベル)の符号化は結合された接頭および接尾符号語によって逆のスキャン順に行われる。
・有意変換係数の数が対応するブロックに対する変換係数の数より小さい場合、シンボルTOTAL_ZEROSが符号化され、これは、係数ベクトルにおいて、最後の有意係数の前にあるゼロに量子化された変換係数の数を表している。このため、18個の符号語のテーブルが指定され、これらのテーブルは、有意係数の数とブロックタイプに基づいて、切り替えられる。
・有意係数の前のゼロ(RUN)に量子化された(非有意)係数のランレングスは、すでに符号化されているRUNの合計がTOTAL_ZEROSより小さい限り、有意変換係数ごとに、逆のスキャン順で、符号化される。既に符号化/復号化されたTOTAL_ZEROSとRUNに基づいて、7個の符号語テーブル間で切り替えが行われる。
このいわゆる、CAVLC方式(CAVLC:コンテクスト適応型可変長符号化)は、コンテクストに応じたス符号語テーブルの切り替えにより、MPEG―2、H.263、およびMPEG―4で指定される方法よりもはるかに効率的な変換係数の符号化を可能にするが、基本的に以下の欠点がある:
・既に符号化/復号化されたシンボルに基づいて異なる符号語テーブル間で切り替えが行われても、これらの符号語テーブルは、実際のシンボル統計に対して調整することができない。
・可変長を有する符号語を使用した場合、0.5より大きいシンボル確率を有する事象を効率的に符号化することはできない。この制約によって、異なるモデルの確率分布間を切り替えるために適切なコンテクストを構築することを可能にするかもしれないより小さな値の範囲を有するシンボルの符号化が特に妨げられる。
ブロックベースの画像とビデオのコーダにおいて、変換係数を符号化する周知の方法の説明された欠点を回避することができる解決方法は、適応型エントロピー符号化と、シンボル間の冗長度を使用するために適切なコンテクストの生成と、の結合である。
上述の符号化方式と比較して、次に説明されるアプリケーション例は、画像および/またはビデオコーダおよびデコーダにおいて変換係数を符号化するための方式を表し、これが、上述した欠点を克服し、特に、符号化に必要とされる計算量を少なく保つことができる。この符号化を図1〜17を参照して実施形態に記載されたエントロピー符号化方式と結合することによって、きわめて効果的な符号化効率を得ることができる。
第1の態様によれば、以下に説明する符号化方式は、画像および/またはビデオコーダおよびデコーダにおいて変換係数を符号化する方法を提供し、ここで、有意変換係数を含む(ビデオ)画像のブロックに対して、変換係数の符号化が、各ブロックに対して、
・スキャンプロセスにおいて、ブロック内の有意変換係数の位置、次に、
・逆スキャン順序―ブロック内の最後の有意変換係数から開始される―で有意変換係数の値(レベル)が決定されかつ符号化されるように、実行される。
1つの好ましい実施形態は、ブロックの最後の変換係数以外のブロックの各有意変換係数が1ビットのシンボルによって特徴付けられることによって、特徴付けられる。
また、有意変換係数ごとの符号が1ビットのシンボル(SIGN)によって表されかつ大きさがバイナリ符号化シンボル(ABS)によって表される場合に有利である。
1つの好ましい実施形態において、有意変換係数を含むブロックは、たとえば、CBPまたはマクロブロックモードなどの他のシンタックス要素に関連して1ビットのシンボルCBP4によって特徴付けられる。
ブロックの係数ごとに1ビットのシンボルSIGと、ブロックの有意係数ごとに1ビットのシンボルLASTを転送することによって、有意性マッピングが符号化されるという点がこの方法の特に有利な点であり、ここで、転送はスキャン順に行われ、SIGは有意係数を識別するために機能し、LASTはブロック内にこれ以上有意変換係数があるかどうかを示す。
他の好ましい実施形態において、有意性マッピングを符号化するためにおよび/または係数の大きさを符号化するために、1ビットのシンボルCBP4に対するモデリングはコンテクストに依存した方法で行われる。したがって、これに匹敵する統計値を有する変換係数のブロックタイプはブロックカテゴリに集約される。
本発明の方法の特別な実施形態において、有意情報(SIG、LAST)はブロックの最後のスキャン位置に転送されない、という点も利点である。
好ましい実施形態において、大きさ(ABS)は、単項2値化内のシンボルによって、または接頭部分と接尾部分とを有するシンボルによって、表され、ここで、接頭部分は1から成り、接尾部分は0番目の次数の指数ゴロムコードで符号化される。
第2の態様によれば、本実施形態は、画像および/またはビデオコーダおよびデコーダにおいて変換係数を符号化する方法を実行するように形成された少なくとも1つのプロセッサおよび/またはチップを有する構成を提供し、有意変換係数を含む(ビデオ)画像のブロックに対して、今述べた方法で変換係数の符号化が実行される。
第3の態様によれば、現在のアプリケーション例は、コンピュータのメモリにロードされた後、コンピュータが、画像および/またはビデオコーダおよびデコーダにおいて変換係数を符号化するための方法を実行することを可能にするコンピュータプログラムを提供し、有意変換係数を含む(ビデオ)画像のブロックに対して、変換係数の符号化は上で説明した方法で行われる。
このようなコンピュータプログラムは、たとえば、(有料または無料で、自由にアクセスできるか、パスワードで保護されて)ダウンロード用のデータや通信ネットワークにおいて提供される。このようにして提供されるコンピュータプログラムは、請求項11に記載のコンピュータプログラムが、たとえば、インターネットなどの転送用ネットワークからこのネットワークに接続されているデータ処理手段へダウンロードされる方法によって利用することができる。
第4の態様によれば、本実施形態は、コンピュータのメモリにロードされた後、コンピュータが、画像および/またはビデオコーダおよびデコーダにおいて変換係数を符号化するための方法を実行することを可能にする、プログラムが格納されているコンピュータ読出し可能な記憶媒体を提供し、有意変換係数を含む(ビデオ)画像のブロックに対して、変換係数の符号化が説明された方法で行われる。
変換係数を符号化する方法は、特に、以下の特徴によって特に特徴付けられる:
変換係数の2次元ブロックは、スキャンプロセスによって1次元ベクトルにマッピングされる。
・周知の方法で使用されているEOBシンボル、LASTシンボルまたは係数カウンタ(有意係数の数)ならびにRUN(スキャン順序における非有意係数の数)のシンタックス要素は1ビットのシンボルCBP4と有意性マッピングによって置き換えられる。
・レベル(有意係数の大きさ)は、逆スキャン順に符号化される。
・コンテクストモデリングは新規な方法で行われる。
図18は、符号化方法を示す図である。変換係数の各ブロックに対して、高次のシンタックス要素(CBPまたはマクロブロックモード)が対象となるブロックが有意変換係数を含まないことをすでに表示していない限り、1ビットのシンボルCBP4が最初に転送される。ブロック内に有意係数が存在しない場合、CBP4シンボルはゼロになる。1つの場合、有意変換係数の(スキャン順の)位置を指定する有意性マッピングが符号化される。これに続いて、有意係数の大きさと符号が逆スキャン順に転送される。符号化プロセスの詳細な説明は以下の1で行う。その後、バイナリエントロピー符号化のためのコンテクストモデリングを2で説明する。ここでは、ビンのエントロピー符号化がエントロピー符号化のための上記の実施形態のいずれかによって実行される。
1.変換係数の符号化の説明
1.1.スキャン変換係数
各ブロックの変換係数は(たとえば、ジグザグスキャンなどの)スキャンプロセスによってベクトルにマッピングされる。
1.2.CBP4シンボル
CBP4は、有意変換係数(変換係数がゼロに等しくない)がブロック内にあるかどうかを示す1ビットのシンボルである。CBP4シンボルがゼロである場合、対応するブロックに対する更なる情報は転送されない。
1.3.有意性マッピング
CBP4シンボルが、対応するブロックが有意係数を含むことを示している場合、有意性マッピングは符号化される。これは、スキャン順に係数ごとに1ビットのシンボル(SIG)を転送することによって行われる。対応する有意シンボルが1つ(有意係数)である場合、他の1ビットのシンボル(LAST)が転送される。このシンボルは、現在の有意係数がブロック内の最後の有意係数であるかどうかまたはさらなる有意係数が後に続くかどうかを示す。図19は、有意性マッピングを符号化するための方法を示す2つの例を示す。有意情報(SIG、LAST)は、ブロックの最後のスキャン位置に対して転送されない。有意性マッピングの転送が1つのLASTシンボルによってまだ終了されていない場合、最後のスキャン位置における係数が有意であることが明らかである(図19の黄色でマークされた位置を参照されたい)。
1.4.レベルの情報
ブロック内の有意変換係数の位置が有意性マッピングによって明確に指定される。係数(レベル)の正確な値の符号化は、2つの符号化シンボル:ABS(係数の大きさ)とSIGN(係数の符号)によって行われる。SIGNは1ビットのシンボルを表すが、図20による2値化は係数(ABS)の大きさを符号化するために使用される。インターバル[1;14]の係数の大きさに対して、この2値化は単項2値化に対応している。14より大きい係数の大きさに対する2値化は、14個の1から成る接頭部分と、シンボル(ABS−15)に対する0次数の指数ゴロムコードを表す接尾部分と、から成る。2値化は、有意係数(ゼロに等しくない係数)は常に1と等しいまたはこれより大きい大きさ(ABS)を有するので、0と等しい係数の大きさ(ABS)に対する表現を含まない。
14より大きい係数の大きさに対する0次数の指数ゴロムコードから成る接頭部分と接尾部分から形成される2値化は、シンボル確率0.5を有する特別な非適応コンテクストが接尾部分の全てのバイナリ決定に対する符号化効率を犠牲にすることなく使用できるという利点を有し、これによって符号化および復号化の計算量を削減することができる。
これらのレベルは、(ブロック内の最新の有意係数で始まる)逆スキャン順に符号化される。これはバイナリエントロピー符号化に対して適切なコンテクストを形成することを可能とする。
2.コンテクストモデリング
有意性マップの上記の符号化および値の2値化によって、割当部がコンテクストと関連付けられた確率に基づいて部分的なビットストリーム選択のためのパラメータを割り当てる、上記の実施形態のいずれかにより復号化/符号化されるシンボル列が生じ、これは以下のように決定される。
一般に、画像および/またはビデオ符号化システムを考えた時、異なるタイプの変換係数ブロックが分化される。これにより、H.264/AVC規格の現在の最終草案国際規格において異なる統計(図21の表の左列)を有する、たとえば、12種類の変換係数ブロックが存在している。大部分の画像列と符号化条件に対して、統計の一部は非常に類似している。使用するコンテクスト数を少なく保ち、よって、符号化される画像列の統計への迅速な適応を確実とするために、ブロックタイプは、H.264/AVCの規格において、たとえば、5つのカテゴリに分類することができる(図21の表の右列を参照)。他の画像および/またはビデオ符号化システムに対しても同様の分類が可能である。H.264/AVC規格における5つのカテゴリの各々に対して、コンテクストの個々の量がシンボルCBP4、SIG、LASTおよびABSに対して使用される。
2.1.CBP4シンボルのためのコンテクストモデリング
1ビットのシンボルCBP4を符号化するために、4つの異なるコンテクストが個別の変換ブロックのカテゴリごとに使用される(図21参照)。符号化されるブロックCのコンテクスト番号は、
ctx_number_cbp4(C)=CBP4(A)+2×CBP4(B)
によって決定される。ここで、同じブロックタイプに関連付けられると見なされるブロックCのそれらの近接ブロック(左と上)はAとBで指定される。H.264/AVC規格に関して、以下の6つのブロックの種類:Luma―DC、Luma―AC、Chroma―U―DC、Chroma―U―AC、Chroma―V―DCおよびChroma―V―ACは、この条件づけに応じて区別されている。変換係数の関連するブロックX(AまたはB)が、近接するマクロブロック内に存在しない場合(これは、たとえば、現在のブロックがINTRA16×16モードで符号化されるが、近接ブロックがINTERモードで転送された場合である)、CBP4(X)は近接ブロックXに対してゼロに設定される。近接ブロックX(AまたはB)が画像領域の外にあるかまたは他のスライスに属している場合、対応する値CBP4(X)はデフォルト値に置き換えられる。デフォルト値1はINTRA符号化ブロックに使用され、デフォルト値0はINTER符号化ブロックに使用される。
2.2.有意性マッピングを符号化するためのコンテクストモデリング
有意性マッピングを符号化するために、max_koeff−1の異なるコンテクストがシンボルSIGとLASTを符号化するためにブロックカテゴリごとに使用される(図21を参照)。よって、max_koeffは、対応するブロックカテゴリの変換係数の数を指定する(H.264/AVCついては、図21を参照)。コンテクスト番号は常に、考慮される係数の対応するスキャン位置によって表される。i番目の係数としてスキャンされた係数koeff[i]のコンテクスト番号はしたがって以下のようになる:
ctx_number_sig(koeff[i])=ctx_number_last(koeff[i])=i
2*max_koeff−2のコンテクストは有意性マッピングを符号化するためのブロックタイプのカテゴリごとに使用される。
2.3.係数の大きさを符号化するためのコンテクストモデリング
図20に示した2値化は、有意変換係数の大きさを符号化するために使用される。ブロックカテゴリごとに2つの異なるコンテクストの量が使用される。すなわち、1つは、2値化の最初のバイナリ決定ビン:bin=1(図20でオレンジ色にマーキング)を符号化するもの、他の1つは、2値化のバイナリ決定ビン:bin=2..14(図20で緑色にマーキング)を符号化するものである。よって、コンテクスト番号は以下のように関連付けられる:
ctx_number_abs_1bin
=(koeff with ABS>1 coded ? 4:
max(3、ABS=1の符号化された係数の数))、
ctx_number_abs_rbins
=max(4、ABS>1の符号化された係数の数))。
変換係数の大きさは逆スキャン順に転送される。最初のバイナリ決定に対するコンテクストは、ABS=1の大きさを有する既に(逆スキャン順に)転送された係数の数によって決定される。大きさがABS=1の3つより多い係数が既に転送された場合、コンテクスト番号3が常に選択される。大きさがABS>1の係数が転送されるやいなや、ブロック内のすべての残留有意係数に対してコンテクスト4が使用される。
bin=2..14を有するすべてのバイナリ決定は1および同じコンテクストを用いて符号化される。したがって、コンテクスト番号は大きさがABS>1の既に(逆スキャン順に)既に符号化された係数の数によって決定され、ここで、最大のコンテクスト番号は4に制限される。例を説明するため、有意変換係数の大きさABSを符号化するときのコンテクスト選択の2つの例を図23に示す。係数の大きさおよび符号SIGNに対して、バイナリ決定bin>14を符号化するために、シンボル確率P0=P1=0.5である個別の非適応コンテクストが使用される。
したがって、図18〜23に示す応用実施形態は画像および/またはビデオコーダおよびデコーダにおいて変換係数を符号化することに関しており、ここで、有意変換係数を含む(ビデオ)画像のブロックに対して、変換係数の符号化は、ブロックごとに、スキャンプロセスにおいて、ブロック内の有意変換係数の位置、次に、ブロック内の最後の有意変換係数から開始される逆スキャン順に有意変換係数の値(レベル)が求められ符号化されるように実行される。ブロックの最後の変換係数以外のブロックの各々の有意変換係数は、1ビットのシンボルによって特徴づけられる。また、有意変換係数ごとに、符号は1ビットのシンボル(SIGN)によって示されてもよいし、大きさはバイナリ符号化シンボル(ABS)によって示される。大きさは単項2値化でシンボル(ABS)によってまたは接頭部分と接尾部分を有するシンボル(ABS)によって示されてもよく、ここで、接頭部分は1から成り、接尾部分は0次数の指数ゴロムコードで符号化される。有意変換係数を含むブロックは、たとえば、CBPまたはマクロブロックモードなどのさらなるシンタックス要素との関係において1ビットのシンボルCBP4によって特徴付けられる。さらに、ブロックの係数ごとに1ビットのシンボル(SIG)とブロックの有意係数ごとに1ビットのシンボル(LAST)を転送することによって有意性マッピングが符号化されうり、ここで、転送はスキャン順に行われ、(SIG)は有意係数を識別し、(LAST)はブロック内に更なる有意変換係数があるかどうかを示す。1ビットのシンボルCBP4に対して、有意性マッピングを符号化するためおよび/または係数の大きさを符号化するためのモデリングをコンテクストに依存する方法で行うことができる。有意情報(SIG、LAST)はブロックの最後のスキャン位置に対して転送されない。比較可能な統計を有する変換係数のブロックタイプはブロックカテゴリへ集約することができる。
言いかえれば、変換係数レベルの符号化は3つのステップに分割することができる。第1のステップにおいて、変換ブロックごとにバイナリシンタックス要素coded_block_flagが送信され、変換ブロックが有意変換係数レベル(すなわち、非ゼロである変換係数)を含むかどうかを通知する。このシンタックス要素が、有意変換係数レベルが存在していることを示す場合、バイナリ値の有意性マップが符号化され、どの変換係数レベルが非ゼロ値を有しているかを指定する。次に、逆スキャン順に、非ゼロ変換係数レベルの値が符号化される。有意性マップは以下のように符号化される。スキャン順で係数ごとに、バイナリシンタックス要素significant_coeff_flagが符号化され、対応する変換係数レベルがゼロと等しくないかどうかを指定する。significant_coeff_flagビンが1と等しい場合、すなわち、非ゼロの変換係数レベルがこのスキャン位置に存在する場合、更なるバイナリシンタックス要素last_significant_coeff_flagが符号化される。このビンは、現在の有意変換係数レベルがブロック内部で最後の有意変換係数レベルであるかどうかまたは更なる有意変換係数レベルがスキャン順に続くかどうかを示す。last_significant_coeff_flagが更なる有意変換係数が続いていないことを示す場合、ブロックに対する有意性マップを指定するための更なるシンタックス要素は符号化されない。次のステップにおいて、ブロック内のロケーションが有意性マップによって既に決定されている有意変換係数レベルの値が符号化される。有意変換係数レベルの値は以下の3つのシンタックス要素を使用して逆スキャン順に符号化される。バイナリシンタックス要素coeff_abs_greater_oneは、有意変換係数レベルの絶対値が1より大きいかどうかを示す。バイナリシンタックス要素coeff_abs_greater_oneが絶対値が1より大きいことを示す場合、さらなるシンタックス要素coeff_abs_level_minus_oneが送信され、これは変換係数レベルの絶対値マイナス1を指定する。最後に、変換係数値の符号を指定する、バイナリシンタックス要素coeff_sign_flagは有意変換係数レベルごとに符号化される。ここでも、有意性マップに関連しているシンタックス要素はスキャン順に符号化される一方、変換係数レベルの実際の値に関連しているシンタックス要素は逆スキャン順に符号化され、より適切なコンテクストモデルの使用を可能にすることに留意されたい。
H.264のCABACエントロピー符号化において、変換係数レベルに対する全てのシンタックス要素はバイナリ確率モデリングを用いて符号化される。非バイナリシンタックス要素coeff_abs_level_minus_oneは最初に2値化され、すなわち、それはバイナリ決定(ビン)列にマッピングされ、これらのビンは順に符号化される。バイナリシンタックス要素significant_coeff_flag、last_significant_coeff_flag、coeff_abs_greater_one、およびcoeff_sign_flagは直接符号化される。(バイナリシンタックス要素を含む)各符号化されたビンはコンテクストと関連付けられる。コンテクストは符号化されたビンの等級ごとの確率モデルを表す。2つの可能なビン値の1つに対する確率に関連する測度は、対応するコンテクストで既に符号化されているビンの値に基づいてコンテクストごとに予測される。変換符号化に関連したいくつかのビンに対して、符号化するために使用されるコンテクストはすでに送信されたシンタックス要素に基づいてまたはブロック内の位置に基づいて選択される。
有意性マップはスキャン位置に対する(変換係数レベルがゼロとは異なる)有意性に関する情報を指定する。H.264規格のCABACエントロピー符号化において、4×4のブロックサイズの場合、バイナリシンタックス要素significant_coeff_flagとlast_significant_coeff_flagを符号化するためのスキャン位置ごとに分離したコンテクストが使用され、ここで、スキャン位置のsignificant_coeff_flagとlast_significant_coeff_flagに対して異なるコンテクストが使用される。8×8のブロックの場合、同じコンテクストモデルが4つの連続スキャン位置に対し使用され、significant_coeff_flagに対して16個のコンテクストモデルが生じ、last_significant_coeff_flagに対して更なる16個のコンテクストモデルが生じる。
有意性マップを符号化した後、ブロックは逆スキャン順に処理される。スキャン位置が有意である場合、すなわち、係数がゼロと異なる場合、バイナリシンタックス要素coeff_abs_greater_oneが送信される。初めに、対応するコンテクストモデルの集合の2番目のコンテクストモデルがcoeff_abs_greater_oneシンタックス要素に対して選択される。ブロック内の任意のcoeff_abs_greater_oneシンタックス要素の符号化された値が1にと等しい場合(すなわち、絶対的な係数が2より大きい場合)、コンテクストモデリングは集合の最初のコンテクストモデルにスイッチバックされかつブロックの最後までこのコンテクストモデルを使用する。そうでない場合(ブロック内coeff_abs_greater_oneのすべての符号化された値がゼロでありかつ対応する絶対値係数レベルが1と等しい場合)、コンテクストモデルは、考えられるブロックの逆スキャン順に既に符号化/復号化されているゼロと等しいcoeff_abs_greater_oneシンタックス要素の数に基づいて、選択される。シンタックス要素coeff_abs_greater_oneに対するコンテクストモデル選択は以下の等式によって要約される。ここで、現在のコンテクストモデルインデックスCt+1は、前のコンテクストモデルインデックスCtと、等式においてbintで表される前に符号化されたシンタックス要素coeff_abs_greater_oneの値に基づいて選択される。ブロック内の最初のシンタックス要素coeff_abs_greater_oneの場合、コンテクストモデルインデックスはCt=1にと等しく設定される。
同じスキャン位置に対するcoeff_abs_greater_oneシンタックス要素が1と等しいとき、絶対変換係数レベルを符号化するための2番目のシンタックス要素である、coeff_abs_level_minus_oneのみが符号化される。非バイナリシンタックス要素coeff_abs_level_minus_oneはビン列内およびこの2値化の最初のビンに対して2値化される。コンテクストモデルインデックスは以下に説明するように選択される。2値化の残留ビンは固定コンテクストで符号化される。2値化の最初のビンに対するコンテクストは次のように選択される。最初のcoeff_abs_level_minus_oneシンタックス要素について、coeff_abs_level_minus_oneシンタックス要素の最初のビンに対するコンテクストモデルの集合の最初のコンテクストモデルが選択され、対応するコンテクストモデルインデックスは、Ct=0と等しく設定される。coeff_abs_level_minus_oneシンタックス要素の更なる最初のビンごとに、コンテクストモデリングは、集合内のコンテクストモデルの数が5に制限される、集合の次のコンテクストモデルに切り替わる。コンテクストモデルの選択は、現在のコンテクストモデルインデックスCt+1が前のコンテクストモデルインデックスCtに基づいて選択される、次の式によって表すことができる。上述のように、ブロック内の最初のシンタックス要素coeff_abs_level_minus_oneに対して、コンテクストモデルインデックスはCt=0と等しく設定される。コンテクストモデルの異なる集合がシンタックス要素coeff_abs_greater_oneとcoeff_abs_level_minus_oneに対して使用されることに留意されたい。
Ct+1(ct)=min(Ct+1、4)。
先に説明したエントロピー符号化の実施形態に今説明した応用実施形態を組み合わせた場合、個々のコンテクストに割り当てられた確率は、たとえば、エントロピーエンコーダ(上述した、確率を確率の部分的ビットストリームのより小さい集合に量子化した後などの、複数の部分的ビットストリームパスの中のエントロピーデコーダ)を選択するために使用されるパラメータとしてまたはパラメータの少なくとも1つとして使用することができる。換言すれば、シンボル列の復元が有意性マッピングの連続的な定義付けかつこれに続く逆スキャン順にゼロと等しくない変換係数の値の符号化は以上に説明した実施形態のいずれかによるデコーダを使用して行うことができる。
上に概略的に述べられたエントロピー符号化の実施形態のアプリケーションについての実施例2によれば、より高い圧縮効率を有する改良されたエントロピー符号化設計が達成される。
エントロピー符号化された情報シンボルを得るために情報シンボルのシンボル列をエントロピー符号化するための装置であって、シンボル列はスタートシンボルを有している装置は、このシンボルに対する確率情報に基づいてシンボル列のシンボルをエントロピー符号化するためのエントロピーエンコーダであって、このシンボルはシンボル集合の一部であり、エントロピー符号化された情報シンボルを生成するエントロピーエンコーダと、このシンボルのコンテクストに基づいてこのシンボルの確率情報を導出するためのコンテクストモデラと、を含み、このコンテクストはこのシンボルを処理する前にエントロピーエンコーダによって処理された1以上のコンテクストシンボルを含み、コンテクストモデラは初期化確率情報を判定しかつこれをエントロピーエンコーダへ提供することによってコンテクストモデラを初期化するための初期化部を含み、この初期化確率情報はスタートシンボルを処理するためにエントロピーエンコーダによって使用され、初期化部は、初期化確率分布がシンボルの集合の全てのシンボルに対する等確率分布とは異なるように、スタートシンボルに関連したシンボル統計の予測に基づいて、初期化確率情報を決定するために動作可能である。エントロピーエンコーダは、前述した実施形態のいずれかに基づいて具現化することができる。
エントロピー符号化された情報シンボルをエントロピー復号化するためのデコーダであって、エントロピー符号化された情報シンボルはシンボルに対する確率情報に基づいてシンボル列のシンボルをエントロピー的に符号化することによって生成され、このシンボルはシンボル集合の一部であり、このシンボルに対する確率情報はシンボルのコンテクストに基づいて求められ、このコンテクストは先に処理された1以上のコンテクストシンボルを含み、スタートシンボルをエントロピー的に符号化するために初期化確率情報が使用されており、この初期化確率情報はスタートシンボルに関連しているシンボル統計の予測に基づいておりかつ初期化確率分布がシンボルの集合の全てのシンボルに対する等確率分布とは異なるように決定される、デコーダは、スタートシンボルを有する情報シンボルのシンボル列を得るためにエントロピー符号化された情報シンボルをエントロピー復号化するためのエントロピーデコーダと、この情報シンボル列をエントロピー符号化するときに使用される確率情報を得るためのコンテクストモデラトを含み、このコンテクストモデラはスタートシンボルをエントロピー符号化する時に使用される初期化確率情報を取得するための初期化部を含む。このエントロピーデコーダは前述した実施形態のいずれかに基づいて具現化することができる。
改良された圧縮効率は、初期化確率情報が該当するシンボル集合のすべてのシンボルに対する等確率分布とは異なるように、コンテクストモデラを初期化することによって得ることができる。特に、初期化部は、少なくともスタートシンボルに関連しているシンボルの統計の予測に基づくシンボル列のスタートシンボルに対して使用される初期化確率情報を決定するために動作可能であることから、初期化確率情報はシンボル集合のすべてのシンボルに対する等確率分布とは異なる。
特に、この「インテリジェント」初期化は、異なるビデオソースからの多用に変化するコンテンツを有するビデオ素材を符号化するために有利である。本発明の好ましい実施形態において、初期確率情報は符号化された情報を量子化するために使用される量子化パラメータに基づいて導出することができることが分かっている。ビデオ符号化アプリケーションにおいて、および、特に、H.264/AVCビデオ圧縮規格に関連しているビデオ符号化アプリケーション用において、エントロピー符号化される情報シンボルのシンボル列は、たとえば、時間/空間的なインター/イントラフレーム予測モードによって得られる変換された残留値から求められる。
さらに、インテリジェントな初期化をビデオソース素材についての事前知識に基づいて有利に行うことができる。特に、圧縮効率は、初期化値のいくつかの集合を定義付けることによって向上することが分かっている。いわゆるI―またはSI―スライスに対しては、たとえば、初期化値の単一集合で十分間に合う。いわゆるP―、SP―またはB―スライスなどの時間的に予測符号化されるスライスに対して、1つより多くの、好ましくは、3つの異なる初期化値の集合を定義付けることができる。これらのスライスに対して、初期化値の選択された集合はエンコーダ出力ビットストリームにおいてあるシンタックス要素によって指定され、これによって、符号化された出力ビットストリームを処理するデコーダが正確にそれ自体を初期化することが可能である。好ましくは、このシンタックス要素はスライスヘッダの一部として送信される。ここで、エンコーダはスライスごとのシンボル統計に対して最も適切な値である初期化値の集合を選択する自由度を有している。
好ましくは、初期化値が、エントロピーエンコーダによって処理されるシンボル列がどのデータタイプまたはサブデータタイプに属しているかを検出することによって、さらに多様化する。この特定のタイプはコンテクストインデックス変数によって表示される。このコンテクストインデックス変数は、好ましくは、対応する数の初期化確率情報を導出することができる最大399個の異なるコンテクストモデルから1つをシグナリングできるように設計され、これにより、各々がスタートシンボルを有する多数の異なるシンボル列に対して、最適に適応された初期化が決定される。
エントロピー符号化されるシンボルは異なるコンテクストモデルを帰属させているということに留意しなければならない。好ましくは、複数のシンボルまたはビットは複数のコンテクストモデルのうち1つのコンテクストモデルを使用して符号化される。これらの複数のシンボルやビットはシンボル列を形成し、ここで、シンボル列の最初に符号化されるシンボル、すなわち、コンテクストモデルを帰属させたシンボル列はスタートシンボルである。コンテクストモデルは、1つまたは1つより多い確率モデルを含むことができる。1つより多くの確率モデルを有するコンテクストモデルの場合、確率モデルが変化するたびに、新しい初期化が行われる。
以下において、エントロピー符号化装置またはエントロピー符号化方法の構造および機能を示す図24を参照されたい。特に、図24は、エントロピー符号化された情報シンボルを取得するために情報シンボルのシンボル列をエントロピー符号化するための装置を示し、ここで、シンボル列はスタートシンボルを有している。シンボル列は、エントロピーエンコーダ1112のシンボル列入力へ入力される。エントロピー符号化された情報シンボルは、エントロピーエンコーダ1112にも接続されているエントロピーエンコーダ出力1114で出力される。エントロピーエンコーダは、シンボルの確率情報に基づいてシンボル列のシンボルをエントロピー符号化するよう演算する。確率情報は、確率情報入力16を介して、エントロピーエンコーダ1112へ入力される。シンボルは、バイナリの場合、2つの異なるシンボル、すなわち、バイナリ「0」とバイナリ「1」のみを含む、指定されたシンボル集合の一部であるので、シンボルの集合の1つのシンボルに対してのみ確率情報を提供するには十分である。本発明によれば、この数が最大確率シンボルに対する確率よりも必然的に小さいので、最小確率シンボル(LPS)の確率情報を提供することが好ましいとされる。さらに、確率情報入力1116を介してエントロピーエンコーダに与えられる確率情報は、最小確率シンボルの値またその逆の値を容易に求めることができる、最大確率シンボルの値を含む。
エンコーダは、シンボルのコンテクストに基づいてシンボルに対する確率情報を得るためのコンテクストモデラ1118を更に含む。このコンテクストは、コンテクスト入力1120によってコンテクストモデラへ入力された1以上のコンテクストシンボルを含み、これらのコンテクストシンボルは実際のシンボルを処理する前にエントロピーエンコーダ1112によって処理されている。
コンテクストモデラ1118は、初期化確率情報がスタートシンボル、すなわち、コンテクストシンボルが全く存在しないシンボル列のシンボル、すなわち、スタートシンボルに先行してエントロピーエンコーダ1112によって処理されたシンボル、を処理するためにエントロピーエンコーダ1112によって使用される時、初期化確率情報を決定しこれをエントロピーエンコーダ1112へ提供することによってコンテクストモデラを初期化するために初期化部1120を含む。これは、エントロピー符号化方式が連続方式であるので、スタートシンボルがシンボル列の最初のシンボルであることを意味する。
初期化部は、初期化確率がスタートシンボルが属するシンボル集合のすべてのシンボルに対して等確率分布とは異なるように、スタートシンボルに関連するシンボル統計の予測に基づいて初期化確率情報を判定するように動作可能である。
コンテクストモデラ、よって、エントロピーコーダが、エントロピーエンコーダによってシンボル列が符号化されることが予想されるシンボル統計の予測に基づいてインテリジェントに初期化されるので、エントロピー符号化装置は改良されたスタートアップ性能を示す。言い換えれば、エントロピー符号化装置は、スタートシンボルに対して、スタートシンボルが最初のシンボル列ではないが中間のシンボル列であるかのように振舞う。よって、初期化により、スタートシンボルに対してエントロピー符号化装置の事前適応が既に得られることになる。初期化確率情報が等確率分布に設定される、単純なアプローチとは対照的に、エントロピーエンコーダはすぐにコンテクスト事前適応となる。単純なアプローチの場合、コンテクスト適応は、コンテクストシンボルを形成する先行して符号化されたシンボルの数に対応するいくつかのステップを必要とする。
コンテクストモデラとエントロピーエンコーダの本発明の初期化は、単にインテリジェント初期化確率情報を提供することにより、これ以上のアクションを取らずして、単純な等確率分布と比較すると、3%程度までのビットレートの節約になることが分かっている。
図25は、図24に示した初期化部1020の好ましい実施形態を示す。初期化部1120は、スライスヘッダからシンボル列への量子化パラメータを検索するための検索部を含む。また、スライスヘッダも、スライスデータのデータタイプを検出するための検出部へ入力される。更に、スライスデータのサブデータタイプを検出するための検出部1204が提供されている。検出部1204は更に、検出されたサブデータのタイプに基づいて様々な初期化テーブルにアクセスするため動作可能である。後述するように、様々な初期化テーブルへのアクセスは一方でコンテクストインデックスによって、好ましくは、他方で初期化インデックスによって、制御される。スライスデータに応じて、I―およびSI―スライスに対するあるコンテクストインデックスを有する初期化テーブルが1つだけ存在する。P―およびB―スライスに対して、少なくとも2つ、好ましくは3つの、ここでもコンテクストインデックスによってアドレスされる初期化テーブルが存在しており、ここで、実際に使用される少なくとも2つのテーブルうちのテーブルが初期化インデックスによってアドレスされる。
算出部1206は、一方で検索部1200、他方で検出部1204に接続されている。算出部1206は、実際の初期化確率、あるいは、好ましい実施形態によれば、確率状態のインデックス、すなわち、最小確率シンボルに対する確率情報を含む初期化確率情報テーブルに対する基準値となり得る、初期化確率に関する情報を計算するように動作可能である。発明者によって、スライスデータを量子化するために使用される量子化パラメータからの初期化確率の線形依存から改良された圧縮効率、すなわち、最適初期化に近いものを得ることができることが見出された。したがって、図25の算出部1206は線形計算を適用するために動作可能であり、ここで、パラメータmは線形依存の勾配を示すが、他の初期化パラメータ、すなわち、nは、y―軸のオフセットを示す。図25における算出部1206によって処理される基本的な等式はブロック206では、
m×QP+n
と表され、ここで、QPは量子化パラメータであるが、mとnは、あるコンテクストインデックスによってアドレスされる異なる初期化テーブルから取り出された初期化パラメータである。
好ましい実施形態において、図25の算出部1206は、図26に示すような一連のステップを実行する。最初のステップにおいて、式m×sliceQP+nが計算される。ここで、図26の好ましい実施形態において、m×sliceQPの値Fが4桁右にシフトされていることに留意されたい。当然のことながら、ここでは、すべての値がバイナリストリングであることに留意されたい。4桁のシフトは、2つの相補的なプレゼンテーションにおける積m×sliceQPの表示に関連している。次に、このシフト後の結果が他の初期化パラメータnに加算される。次いで、一方でこの結果の最小値、他方で整数値1126が選択される。この最小値が1より大きい場合、この最小値が選択され補助変数preCtxStateに割り当てられる。次に、この補助変数が63より小さいかまたはこれと等しいかどうかが判定される。この判定が肯定された場合、確率状態インデックス変数pStateIdxは63と補助変数との差として計算される。さらに、最大確率シンボル(valMPS)の値がゼロと等しいと判定される。他のケースの場合、すなわち、補助変数が63より大きい場合、確率状態インデックスpStateIdxは補助変数と値64の差として計算される。さらに、最大確率シンボルの値が1に設定される。
確率状態インデックスが最小確率シンボルに対する確率情報を含む初期化確率情報テーブルへの基準であることに留意されたい。確率状態インデックスの値は確率情報テーブル内で64個の異なる確率情報値をアドレスすることができる。最初に確率状態インデックスを計算してから次にこの確率状態インデックスを用いてテーブルをアドレスする理由は、実際のエントロピーエンコーダコアの改良された設計部分である。当然ながら、適切なマッピングによって、図26に示される一連のステップもこの初期化確率情報を直接計算することができる。
量子化パラメータSliceQPは、変換係数の量子化を決定するために使用される。パラメータは52個の値をとる。これらの値は、量子化パラメータが1つ増加すれば、量子化ステップサイズが約12%大きくなることを意味する(6増加すれば、2の因数分、量子化ステップサイズが大きくなることを意味する)ように配置することができる。約12%のステップサイズの変化が大まかに約12%のビットレートの減少を意味することが分かる。
以下において、本発明のエントロピーデコーダを示す図27を参照する。従来技術のエントロピー符号化/復号化において既知であるように、エントロピーデコーダは、送信されたインターバル(いうまでもなくバイナリ形式で表される)を復号化されたビット、すなわち、スタートシンボルを有する情報シンボル列へ分解するために、エンコーダによってそれぞれの符号化ステップに対して使用される同一の確率分布を必要とする。このため、本発明のエントロピーデコーダは、エントロピーデコーダ1160と、初期化部1164を含むコンテクストモデラ1162と、を含む。ここで、図27に示されるデコーダが図24のエンコーダと同様に構築されていることが分かる。ここでも、コンテクストモデラ1162は、確率情報、すなわち、列のスタートシンボルに関しては、初期化確率情報を提供する。この情報は、図24に関して説明した方法と同様の方法、すなわち、それぞれのスライス量子化パラメータを決定すること、あるコンテクストインデックスを決定すること、および、エントロピーデコーダがスタートシンボルを処理するために演算可能であるときに初期化確率情報を算出するための対応する初期化パラメータm、nを決定することによって、生成される。エンコーダ内のシンボル列のスタートシンボルは符号化される最初のシンボルでありかつ復号化される最初のシンボルでもあるので、エントロピー符号化/復号化チェーンは一種の先入れ先出しのパイプラインであることに留意されたい。したがって、図27に示したエントロピーデコーダには、図24に示したエントロピーエンコーダに関連して説明されたものと同じ初期化プロセスを使用することができる。
正規のコンテクスト適応モードに関して、コンテクストモデラもまた、図24に関連して説明されたものと同じ演算ステップを実行することができる。
図24と図27の両図において、エントロピーエンコーダ/デコーダは、以前の図1〜図17に示したものと同様に実施可能である。
実施例3において、以上に記載された実施形態のいくつかの拡張が記載される。
これは、符号化または復号化されるシンボルの基礎にある確率予測がインデックスp_stateを使用して確率状態Pnに関連付けられている場合に特に有利である。
たとえば、N個の異なる代表的確率状態がある。同じく、遷移ルールが付与されうり、ここで、遷移ルールは、現在符号化または復号化されたシンボルに基づいて、符号化または復号化される次のシンボルに対して、どの新しい状態が使用されるかを示している。したがって、現在付与されている確率状態Pnのインデックスnのほかに最小確率シンボル(LPS)が出現するときに新しい確率状態Pmのインデックスmを含むテーブルNext_State_LPSが作成される場合、および/または、現在付与されている確率状態Pnのインデックスnのほかに最大確率シンボル(MPS)が出現するときに新しい確率状態Pmのインデックスmを含むテーブルNext_State_MPSが作成される場合に有利である。
符号化の1つの特別なインプリメンテーションは以下のステップを含む:
1.LPSを決定するステップ
2.量子化するステップ
p=quantize[p_state]
3.符号化/復号化するステップ
部分的ビットストリームを選択するためのパラメータとしてpを使用してビットを符号化/復号化する
4.p_stateを適応するステップ:
ここで、
bit 復号化/符号化される現在のビット、
p_state ビットに割り当てられたコンテクストの現在の確率状態、
valMPS MPSに対応するビットの値
である。
さらに、確率モデルの初期化が量子化パラメータSliceQPとプリセットされたモデルパラメータmとnに応じて実行される場合に有利であることが分かる。ここで、SliceQPはスライスの初めにプリセットされた量子化パラメータを記述し、mとnはモデルパラメータを記述している。
確率モデルの初期化が以下のステップを含む場合にも有利である:
1.preState=min(max(1、((m*SliceQP)>>4)+n)、2 *(N−1))
2.if(preState<= N−1)then、
p_state=N−1−preState
valMPS=0
else
p_state=preState−N
valMPS=1
ここで、valMPSはMPSに対応するビットの値を記述し、SliceQPはスライスの初めにプリセットされた量子化パラメータを記述し、mとnはモデルパラメータを記述している。
理論的背景をより詳細に説明する。
テーブルを利用した確率予測
既に上述したように、符号化されるシンボルの出現確率の予測はできるだけ良好であるべきである。非定常ソース統計への適応を可能にするために、この予測は、符号化プロセスの過程で更新される必要がある。一般に、これには符号化された結果値のスケーリングされた頻度カウンタを使用して演算する通常の方法が用いられる。CLPSとCMPSがLPSおよびMPSの出現頻度に対するカウンタを示している場合、これらのカウンタを用いて予測
が実行され、次に、エントロピー符号化/復号化はこの確率を用いて実行される。実用的な用途に対して、等式(C1)において必要とされる分割は不利である。しかしながら、全体カウンタCTotal=CMPS+CLPSの所定のしきい値Cmaxが超えた場合のカウンタの読み値の再スケーリングを実行するために、しばしば、便利であり必要とされる。Cmaxの適切な選択によって、CTotalの逆数の値を集計することができ、これによって等式(C1)に必要とされる分割はテーブルアクセスおよび乗算とシフト演算に置き換えることができる。しかしながら、これらの算術演算を回避するために、本発明においては、確率予測のために完全に表支援された方法が使用される。
このため、トレーニングフェーズにおいて、代表的確率状態{PK|0≦k<Nmax}が前もって選択され、ここで、状態の選択は一方で符号化されるデータの統計に依存し、他方で状態のデフォルト最大数Nmaxのサイド条件に依存する。さらに、現在符号化されたシンボルに基づいて符号化される次のシンボルに対してどの新しい状態が使用されるべきかを示す遷移ルールが定義付けられる。これらの遷移ルールは、2つのテーブルの形態:{Next_State_LPSk|0≦k<Nmax}と{Next_State_MPSk|0≦k<Nmax}で付与され、ここで、現在与えられている確率状態のインデックスnに対して、LPSまたはMPSがそれぞれ出現する場合、テーブルは新しい確率状態Pmのインデックスmを提供する。ここで、本明細書で提案されるエントロピーエンコーダまたはデコーダのそれぞれにおける確率予測に対して、確率状態の明示的な集計が不要であることに留意されたい。寧ろ、これらの状態は、次のセクションに記載されているように、それぞれのインデックスを使用して暗黙にアドレスされるにすぎない。遷移ルールに加えて、どの確率状態においてLPSおよびMPSの値を交換すべきかが指定される必要がある。一般に、そのインデックスp_stateを用いて識別できるこのような優良状態は1つだけにすぎない。
次に、確率状態p_stateの更新が、符号化されたビットの値に応じて、どのように実行されるかを説明する:
if(bit=1−valMPS)then、
p_state←Next_State_LPS[p_state]
if(p_state=0)then valMPS←1−valMPS
else
p_state←Next_State_MPS[p_state]
セクション「表支援確率予測」において既に上述した遷移テーブルNext_State_LPSとNext_State_MPSが使用される。
均等確率分布による符号化
たとえば、確率分布がゼロを中心に左右対称に配置されている符号付きの値が符号化されるアプリケーションにおいて、符号情報を符号化するために、一般的に、等しい分布が想定されうる。この情報は一方でエントロピー符号化されたビットストリーム内へ埋め込まれるが、他方では、表支援確率予測とインターバル分離の比較的コンパクトな装置をほぼ0.5の確率に使用することは理にかなってないので、以下に例示されうる特別なエンコーダ/デコーダ手順を任意に使用する、提案された特殊なケースのためのものである。
この特殊なケースにおいて、ビンのエントロピー符号化は、すべてのシンボルの値が同じ確率である確率分布を使用して実行される。
確率モデルのアドレスと初期化
使用されている全ての確率モデルは、2つのパラメータ:1)LPSの確率状態を特徴づけるインデックスp_stateと、2)MPSの値valMPS、とを使用して表される。これらの2つの変数の各々は、(1つのスライスのビデオ符号化のアプリケーションにおいて)完成した符号化単位の符号化または復号化のそれぞれの初めにおいて初期化される必要がある。したがって、初期化値は、たとえば、以下によって例示される、(スライスの)量子化パラメータなどのコントロール情報から求めることができる。
1.preState=min(max(1、((m*SliceQP)>>4)+n)、2*(N−1))
2.if(preState<=N−1)then
p_state=N−1−preState
valMPS=0
else
p_state=preState−N
valMPS=1
フォワード制御初期化プロセス
モデルのスタート分布の適応の更なる可能性は以下の方法によって提供される。モデルの初期化のより良好な適応を保証するために、エンコーダにおいて、モデルの所定のスタート値の選択が提供されうる。これらのモデルはスタート分布の群へ結合されかつ複数のインデックスを用いてアドレスされうり、これによって、エンコーダにおいて、スタート値の群の適応性選択が実行されかつ頁情報としてのインデックスの形態でデコーダに送信される。この方法は、フォワード制御初期化プロセスと呼ばれる。
次の実施例はビデオフレーム符号化に係り、より詳細には、近接するシンタックス要素に基づくコンテクスト割当てを使用した符号化方式に関する。以下のアプリケーション例は、より高い圧縮効果を可能にする上記の実施形態を用いたビデオ符号化方式を提供する。
この利点は、画像サンプルから成る少なくとも1つのビデオフレームを表すビデオ信号を符号化することによって達成される。この画像サンプルは異なる時刻でキャプチャされる第1または第2のフィールドのいずれかに属している。ビデオフレームは、トップおよびボトムのマクロブロックと関連付けられる、マクロブロック対領域内へ空間分割される。符号化は、マクロブロック対領域ごとに、同マクロブロック対領域が第1または第2の分布タイプのいずれのタイプであるかを決定するステップと、マクロブロック対領域ごとにそれぞれのマクロブロック対領域のトップおよびボトムマクロブロックのそれぞれの1つにそれぞれのマクロブロック対領域内の画素サンプルの各々を割り当てるステップと、ビデオ信号をプリコードされたビデオ信号へプリコードするステップと、を含み、プリコードステップはマクロブロック対領域の現在のマクロブロック対領域に関連付けられたトップおよびボトムのマクロブロックの現在マクロブロックをプリコードして現在のシンタックス要素を取得するサブステップを含む。その後、現在のシンタックス要素に対して、近接マクロブロックが、現在のマクロブロック対領域が第1の分布であるかまたは第2の分布タイプであるかに少なくとも基づいて、決定される。少なくとも2つのコンテクストモデルの1つが近接マクロブロックの所定の属性に基づいて現在のシンタックス要素に割り当てられ、ここで、各コンテクストモデルは異なった確率予測と関連付けられている。最終的に、少なくとも1つのシンボルがシンタックス要素の表示に関連している、上記の実施形態のいずれかに基づいてシンボル列の符号化が行われる。割当部は、それぞれのシンボルに割り当てられたコンテクストに関連付けられた確率分布予測に基づいて、それぞれのシンボルに対する確率分布の予測に対する測度を決定するように構成される。したがって、選択部は、それぞれのエントロピーコーダとそれぞれの部分的ビットストリームを選択する。
符号化されたビットストリームからシンタックス要素を復号化することも記載されている。符号化されたビットストリームはプリコードされたビデオ信号のエントロピー符号化されたバージョンであり、プリコードされたビデオ信号はビデオ信号のプリコードされたバージョンであり、このビデオ信号は画像サンプルから成る少なくとも1つのビデオフレームを表し、これらの画像サンプルは異なる時刻でキャプチャされる第1または第2のフィールドのいずれかに属し、ビデオフレームはマクロブロック対領域へ空間分割され、各マクロブロック対領域はトップおよびボトムマクロクロックに関連付けられかつ第1または第2の分布のいずれかの分布タイプであり、ここで、各マクロクロック対領域に対して、それぞれのマクロブロック対領域内の画素サンプルの各々が、それぞれのマクロブロック対領域の分布タイプに基づいて、それぞれのマクロブロック対領域のトップおよびボトムのマクロブロックの各々に割り当てられ、ここで、シンタックス要素はマクロブロック対領域の現在のマクロブロック対領域のトップおよびボトムのマクロブロックの現在のマクロブロックに関連している。この方法は、現在のシンタックス要素に対して、近接マクロブロックを、少なくとも現在のマクロブロック対領域が第1の分布であるかまたは第2の分布タイプであるかに基づいて、判定するステップと、各々が異なる確率予測と関連付けられる、少なくとも2つのコンテクストモデルのうちの1つを近接マクロブロックの所定の属性に基づいて現在のシンタックス要素に割り当てるステップと、各コンテクストモデルは異なる確率予測に関連付けられ、上記の実施形態のいずれかに基づいて少なくとも1つのシンボルがシンタックス要素の表示に関連しているシンボル列を復元するステップと、を含む。割当部は、それぞれのシンボルに割り当てられたコンテクストに関連付けられた確率分布予測に基づいて、それぞれのシンボルに対する確率分布の予測測度を決定するように構成される。したがって、選択部は、それぞれのエントロピーデコーダとそれぞれの部分的ビットストリームをそれぞれ選択する。
以下に概略的に述べるアプリケーション例は、どのような理由であれ、たとえば、非移動領域と移動領域を有するビデオフレームを符号化するときのより良好な効果などの、第1および第2の分布タイプのマクロブロック対領域、すなわち、フィールドおよびフレーム符号化されたマクロブロック対、がビデオフレームで同時に使用される、すなわち、MBAFF符号化が使用される場合、画素サンプルの連続ブロック間の近接部分を、各マクロブロック対がコンテクストモデリングのためのフレームマクロブロック対とみなされることとは異なる方法において、定義付ける必要があることと、近接ブロックと現在のブロックによってカバーされる領域の距離が、各マクロブロック対をフレームマクロブロック対として考えた時に、非常に大きくなるという発見を利用する。これはまた、現在のブロックの近接に配列されていない近接ブロックを選択することは条件となる確率モデルの適応に影響を与えるので、符号化効率を低下させる可能性がある。
さらに、以下に概略的に述べるアプリケーション例は、画像サンプルのブロックの間の近接部分、すなわち、符号化または復号化されるシンタックス要素が関連する近接ブロックおよびその属性に基づいてコンテクストモデルの割り当てが行われる現在のブロックをより良好に定義付けるために、および近接ブロックが現在のブロックを含む現在のマクロブロックの境界または周囲を超えて配置される場合、現在のブロックを含む現在のマクロブロック対領域が、第1または第2の分布のタイプのいずれのタイプであるか、すなわち、フレーム符号化されているかまたはフィールド符号化されているか、に基づいて、近接ブロックを含むマクロブロックの判定を行うことが重要であるということを利用する。
これらのブロックはマクロブロックであるかまたはそのサブパートであってよい。どちらの場合も、近接ブロックの判定は、少なくとも、近接ブロックが現在のマクロブロックの境界を超えて配置されている限り、近接マクロブロックを決定することを含む。
図28は、本発明が適用されうるビデオエンコーダ環境を一般的に示す図である。ビデオフレーム2010の画像はビデオプリコーダ2012へ供給される。ビデオプリコーダは画像2010をいわゆるマクロブロック10aの単位で取り扱う。各マクロブロックは画像2010のいくつかの画像サンプルを含む。マクロブロックごとに変換係数への変換が実行され、次に変換係数レベルへの量子化が実行される。また、イントラフレーム予測または動き補正は、画素データ上でなく予測される画素値に対するその差分に対して上記のステップを直接実行しないように使用され、これによって、より簡単に圧縮される少数値が得られる。
プリコーダ2012は、結果値、すなわち、プリコードされたビデオ信号を出力する。変換係数レベルまたはスキップされた変換係数レベルを表す有意マップなどの変換係数の符号化に関連している、プリコードされたビデオ信号における全ての残留データ要素は、残留データシンタックス要素と呼ばれる。残留データシンタックス要素以外に、プリコーダ2012によって出力されるプリコードされたビデオ信号は、各マクロブロックがどのようにして符号化されたかおよび復号化される必要があるかのそれぞれに関するコントロール情報を含むコントロール情報シンタックス要素を含む。言い換えれば、シンタックス要素は、2つのカテゴリに分割可能である。第1のカテゴリにおいて、制御情報のシンタックス要素は、たとえば、マクロブロックタイプ、サブマクロブロックタイプ、空間的および時間的の両タイプの予測モードに対する情報だけでなく、スライスベースおよびマクロブロックベースのコントロール情報に関連する要素を含む。第2のカテゴリにおいて、量子化された変換係数のブロック内のすべての有意係数のロケーションを表す有意マップなどの全ての残留データ要素、および量子化ステップに対応するレベルの単位で表される有意係数の値は結合され、すなわち、残留データシンタックス要素となる。
画像2010が分割されるマクロブロックはいくつかのスライスにグループ化される。すなわち、画像2010はスライスに再分割される。このような再分割の例を図43に示す。図中、各ブロックまたは矩形はマクロブロックを表している。スライスごとに、多数のシンタックス要素が、それぞれのスライスのマクロブロックの符号化されたバージョンを形成する、プリコーダ2012によって生成される。
プリコーダ2012は、図1〜17のいずれかに関して上述の実施形態のいずれかによる、図29により詳細に説明されているエントロピーコーダを含む、最終コーダステージ2014へシンタックス要素を転送する。最終コーダステージ2014はスライスごとに符号語ストリームを生成する。スライスに対して符号語ストリームを生成する場合、最終コーダステージ2014は、各シンタックス要素がエントロピーコーダ2014に渡されたビデオ信号のビットストリーム内のある意味をもつデータ値であるという事実を利用する。エントロピーコーダ2014は画像2010のスライスに対する符号語を含む圧縮された最終の符号化されたビデオビットストリームを出力する。
図29は、最終コードビットストリーム内へシンタックス要素を符号化するための全体的に参照番号2100が付された配置を示す。符号化配置2100は3段:2100a、2100b、および2100cに分かれている。
第1のステージ2100aは2値化ステージであって、バイナライザ2102を含む。バイナライザ2102の入力は、スイッチ2106を介して、ステージ2100aの入力2104に接続されている。同時に、入力2104は、符号化配置2100の入力を形成する。バイナライザ2102の出力はステージ2100aの出力2108に接続され、同時に、ステージ2100bの入力を形成する。スイッチ2106は入力2104に到達するシンタックス要素をバイナライザ2102または2値化ステージ出力2108のどちらかに渡すことが可能であり、よって、バイナライザ2102をバイパスする。
スイッチ2106の機能は、シンタックス要素が要求する2値化形式内に既にある場合、入力2104で実際のシンタックス要素を2値化ステージ出力2108へ直接渡すことである。非バイナリ値シンタックス要素と呼ばれる、正確な2値化形式にないシンタックス要素の例は、動きベクトルの差および変換係数レベルである。すでにバイナリ値であるので、2値化する必要がないシンタックス要素の例としては、より詳細に後述する、MBAFF(MBAFF=マクロブロック適応型フレーム/フィールド)符号化モードフラグまたはmb_field_decoding_flag、mb_skip_flag、coded_block_flagがある。2値化でないので2値化される必要があるシンタックス要素の例は、シンタックス要素mb_type、coded_block_pattern、ref_idx_l0、ref_idx_l1、mvd_l0、mvd_l1、とintro_chroma_pred_modeを含む。
異なる2値化方式は2値化されるシンタックス要素に使用される。たとえば、固定長の2値化プロセスはシンタックス要素の値のLビットの符号なし整数ビンストリングを使用して構成されており、ここで、Lは、cMAXがシンタックス要素の最大可能値である、合計と等しいかこれより大きい最も近い整数まで切り上げられたlog2(cMax+1)と等しい。flの2値化のためのビンのインデックス付けは、ゼロのビンインデックスが、最上位ビットに向けてビンのインデックスの値が増加するにつれて、最下位ビットに関係するように行われる。他の2値化方式は、切り捨て単項2値化方式であり、最大可能値cMaxより小さいシンタックス要素値Cは、1と等しいCより小さいビンインデックスを有するビンと0と等しいCのビンインデックスを有するビンとを有する長さC+1のビットまたはビンストリングにマッピングされるが、最大可能値cMaxと等しいシンタックス要素は、対応するビンストリングは全てのビットが後にゼロが続かない1と等しい、長さcMaxのビットストリングである。他の2値化方式は、k番目の指数ゴロム2値化方式であり、ここで、シンタックス要素は、接頭語ビットストリングと、最終的に接尾語ビットストリングから構成されるビンストリングにマッピングされる。
非バイナリ値をもつシンタックス要素は、スイッチ2106を介してバイナライザ2102へ渡される。バイナライザ2102は非バイナリ値のシンタックス要素を符号語またはいわゆるビンストリングへマッピングすることで、これらのシンタックス要素はバイナリ形式になる。用語「ビン」は、符号化ツリーのルートノードから2値化される非バイナリシンタックス要素の非バイナリ値に対応している符号化ツリーのリーフへ遷移する時、ビットストリングまたは符号語へ非バイナリ値の2値化マッピングを定義付ける符号化ツリーのノードで作成する必要のあるバイナリ決定を意味する。したがって、ビンストリングは、ビンまたはバイナリ決定の列であり、各ビットがバイナリ決定の結果である、同じビット数を有する符号語に対応している。
バイナライザ2102によって出力されるビンストリングは、バイナライザ2102によって出力されたビンストリングとバイナライザ2102をバイパスする既に2値化されたシンタックス要素とを2値化ステージ出力2108において単一ビットストリームへ併合するために、2値化ステージ出力108へ直接は渡されないが、バイナライザ2102の出力と出力2108の間に配置されたビンループオーバー手段2110によって出力2108へ制御可能に渡される。
したがって、2値化ステージ2108はシンタックス要素を適切な2値化された表現に転送するために使用される。バイナライザ2102における2値化手順は、好ましくは、非常に効率的なバイナリエントロピー符号化を可能にするためにシンタックス要素の確率分布に適応される2値化表現を得ることができる。
ステージ2100bは、コンテクストモデリングステージであり、コンテクストモデラ2112およびスイッチ2113を含む。コンテクストモデラ2112は、入力、出力、および任意のフィードバック入力を含む。コンテクストモデラ2112の入力は、スイッチ2113を介して、2値化ステージ出力2108に接続されている。コンテクストモデラ2112の出力はステージ2100cの正規の符号化入力端子2114に接続されている。スイッチ2113の機能は、コンテクストモデラ2112またはステージ2100cのバイパス符号化入力端子2116のいずれかへの2値化ステージ出力2108におけるビン列のビットまたはビンを渡すことであり、これによりコンテクストモデラ2112をバイパスする。
スイッチ2113の目的は、ステージ100cで行われる後続のバイナリエントロピー符号化を容易にすることである。より正確には、バイナライザ2102により出力されたビンストリング内のビンのいくつかはヒューリスティックにほぼ等しい等確率分布を示す。これは、対応するビットがほぼ50%の確率で1であり、ほぼ50%の確率で0であり、または、言い換えれば、ビンストリング内のこのビンに対応しているビットは1または0になる確率が50/50であることを意味する。これらのビンはバイパス符号化入力端子2116へ送られ、一定であることからオーバーヘッドの適応または更新を必要としない等しい確率の確率予測の使用によりバイナリエントロピー符号化される。すべての他のビンに対して、これらのビンの確率分布がステージ2100aによって出力される他のビンに依存しており、これによって、この確率分布は、例示的なシンタックス要素に関して以下に例としてより詳細に説明するそれぞれのビンのバイナリエントロピー符号化に使用される確率予測を適応または更新するだけの価値があるようにヒューリスティックに決定される。よって、後者のビンはスイッチ2113によりコンテクストモデラ2112の入力端子へ供給される。
コンテクストモデラ2112は、コンテクストモデルの集合を管理する。コンテクストモデルごとに、コンテクストモデラ2112は実際のビットまたはビン値の確率分布予測を格納している。コンテクストモデラ2112の入力に到達するビンごとに、コンテクストモデラ2112はコンテクストモデルの集合の1つを選択する。すなわち、コンテクストモデラ2112はコンテクストモデルの集合の1つにビンを割り当てる。ビンのコンテクストモデルへの割当ては、同じコンテクストモデルに属しているビンの実際の確率分布が同じまたは同様の挙動を示すことで、あるコンテクストモデルに対するコンテクストモデラ2112内に格納された実際のビットまたはビン値の確率分布予測は、このコンテクストモデルに割り当てられるすべてのビンに対して、実際の確率分布の良好な近似となる。本発明による割り当てプロセスは近接ブロックのシンタックス要素間の空間的な関係を利用する。この割り当てプロセスを以下に詳細に説明する。
入ってくるビンにコンテクストモデルを割り当てた場合、コンテクストモデラ2112は、このビンが割り当てられているコンテクストモデルの確率分布予測と一緒に、さらに、エントロピー符号化ステージ2100cへビンを渡す。この測度によって、コンテクストモデラ2112はエントロピー符号化ステージ2100cを駆動して、コンテクストモデラ2112によって示される切り替えられたビット値の確率分布予測に基づいてスイッチ2113によってコンテクストモデラ2112のビン入力の符号化された表現としてビット列を生成する。
また、コンテクストモデラ2112は、シンタックス要素とビンが派生した画像またはビデオフレームの特性または属性へコンテクストモデルごとに確率分布予測を適応させるために、コンテクストモデルごとに確率分布予測を連続的に更新する。予測適応あるいは予測更新は、コンテクストモデラ2112がステージ2100cからフィードバックライン2117に渡ってフィードバック入力において受信するかまたはこれを一時的に格納する過去または先行のビットまたはビンの値に基づいて行われる。よって、言い換えれば、コンテクストモデラ2112はエントロピー符号化ステージ2100cに渡されたビン値に応答して確率予測を更新する。より正確には、コンテクストモデラ2112は、このビン値のコンテクストモデルに関連付けられた確率予測の適応または更新に対してのみ、あるコンテクストモデルに割り当てられたビン値を使用する。
同じビンまたは同じシンタックス要素がステージ2100aから渡されたビンにおいて何回か出現する場合、シンタックス要素のいくつかは、例示的なシンタックス要素に関して以下に詳細に説明するように、これらが出現するたびに、前に入ってきたまたは前にエントロピー符号化されたビンに応じて、および/または、近接ブロックの前に符号化されたシンタックス要素などの他の状況に応じて、異なるコンテクストモデルへ割り当てられることができる。
バイナリエントロピー符号化に使用される確率予測が最初にコードとその効率を決定するとともに確率予測が符号化中に常に実際の確率分布を非常に効果的に近似化するようにかなりの程度までシンタックス要素とビンの統計的依存を利用する適切なモデルを有することが最も重要であることは、上記から明らかである。
符号化配置100の第3のステージ2100cは、エントロピー符号化ステージである。この第3のステージ2100cは、正規の符号化エンジン2118、バイパス符号化エンジン2120、およびスイッチ2122を含む。正規の符号化エンジン2118は入力および出力端子を備えている。正規の符号化エンジン2118の入力端子は正規の符号化入力端子2114に接続されている。正規の符号化エンジン2118は、コンテクストモデラ2112から渡されたコンテクストモデルを使用して、コンテクストモデラ2112から渡されたビン値をバイナリエントロピー符号化し、符号化されたビットを出力する。また、正規の符号化エンジン2118は、フィードバックライン2117に渡って、コンテクストモデラ2112のフィードバック入力へ、コンテクストモデル更新に対するビン値を渡す。正規の符号化エンジンは図1〜17の上述の実施形態のいずれかに対応している。但し、それぞれのビンと、対応する確率インデックスに対するコンテクストの設定については、上述の実施形態の割当部はコンテクストモデラ内に部分的に組み込まれる。上述したように、割当部は、このようにして得られたパラメータを選択部18へ転送する前に確率インデックスを量子化しうり、この選択部18はそれぞれのエントロピーエンコーダを選択する。
バイパス符号化エンジン2112も入力および出力端子を有し、入力端子はバイパス符号化入力端子2116に接続されている。バイパス符号化エンジン2120は、静的な所定の確率分布予測を使用してスイッチ2113を介して2値化ステージ出力2108から直接渡されたビン値をバイナリエントロピー符号化するために使用され、また、符号化されたビットを出力する。バイパス符号化エンジンは任意の数のシンボルの単位における1:1のマッピングを使用し得る。
正規の符号化エンジン2118とバイパス符号化エンジン2120から出力された符号化されたビットはスイッチ2122によって符号化配置2100の出力2124において単一ビットストリームへ併合され、ビットストリームは入力端子2104の入力としてシンタックス要素のバイナリエントロピー符号化されたビットストリームを表している。よって、正規の符号化エンジン2118とバイパス符号化2120は、適応型または静的確率分布モデルのいずれかに基づいてエントロピー符号化をビット単位に実行するように協働する。
符号化配置2100の演算について図28と図29に関して概して説明したが、近接ブロックのシンタックス要素に基づいてコンテクスト割当てプロセスが使用される例示的なシンタックス要素の取り扱いに関して、実施形態に沿って、その機能を以下により詳細に説明する。このため、まず図30〜図31Bに関して、現在ブロックと、MBAFFの場合に現在ブロックに関するシンタックス要素へのコンテクストモデルの割当て中に使用される近接ブロックとの間の近接性の定義付けをより良好に理解することを可能にするために、MBAFF符号化の意味が説明される。
図30は、画像または復号化されたビデオフレーム2010を示す。ビデオフレーム2010はマクロブロック対10bに空間分割されている。マクロブロック対は行2200と列2202のアレイで配置されている。各マクロブロック対は2つのマクロブロック2010aから成る。
各マクロブロック10aをアドレスできるようにするために、マクロブロック2010aに対して列が定義付けられる。このために、各マクロブロック対において、マクロブロック対の1つはトップマクロブロックとして指定されるのに対し、他の1つはボトムマクロブロックとして指定され、トップおよびボトムマクロブロックの意味は、図31Aと図31Bに沿って説明されるプリコーダ2012(図28)によってマクロブロック対が符号化されるモードに依存する。したがって、各マクロブロック対の行2200は2つのマクロブロック行:マクロブロック対のライン2200のマクロブロック対におけるトップマクロブロックから成るトップマクロブロック行2200aと、マクロブロック対のボトムマクロブロックを含むボトムマクロブロック行200bから成る。
本実施例によれば、左上のマクロブロック対のトップマクロブロックはアドレスゼロに存在する。次のアドレス、すなわち、アドレス1は、左上のマクロブロック対のボトムマクロブロックに割り当てられる。同じく、すなわち、トップマクロブロック行2200aにおけるマクロブロック対のトップマクロブロックのアドレスは、2、4、...、2i−2であり、アドレスが左から右に上昇しており、iはマクロブロックまたはマクロブロック対の単位で画像幅を表している。トップマクロブロック対の行2200のマクロブロック対のボトムマクロブロックにはアドレス1、3、...、2i−1が割り当てられ、アドレスは左から右へ上昇する。マクロブロック2010aを表すボックスに書き込まれた数字および弓状の行によって図30において示されるように、2iから4i−1までの次の2iアドレスは、上部から順に次のマクロブロック対の行のマクロブロック対のマクロブロックに割り当てられる。
図30はマクロブロックよりむしろ、マクロブロック対の単位で画像2010の空間的な再分割を示していることを強調する。各マクロブロック対2010bは画像の空間的矩形領域を表している。具体的なマクロブロック対2010bの空間的な矩形領域内にある画像2010のすべての画像サンプルまたは画素(図示しない)はこのマクロブロック対に属している。具体的な画素または画像サンプルがマクロブロック対のトップまたはボトムマクロブロックに属しているかどうかはプリコーダ2012が、以下に詳細に説明するように、そのマクロブロック対のマクロブロックを符号化した際のモードに依存する。
図31Aは、その左側に、マクロブロック対2010bに属している画素または画像サンプルの配置を示している。示されるように、画素は行および列のアレイ内に配置される。図示されている各画素は、図31Aの以下の説明を簡単にするために数字で示されている。図31Aに示されるように、画素の一部はxで示され、他はΥで示されている。xで示される全ての画素は画像の第1のフィールドに属しており、Υで示される他の画素は画像の第2のフィールドに属している。同じフィールドに属する画素は画像の他の行内に配置される。画像またはビデオフレームは2つのインターリーブされたフィールド:トップフィールドとボトムフィールドを含むとみなすことができる。トップフィールドは、Υで示される画素を含み、偶数行、2n+2、2n+4、2n+6、...を含み、2nは1つの画像またはビデオフレームの行の数であり、nは0と等しいかこれより大きい整数である。ボトムフィールドはフレームの第2のラインから開始される奇数行を含む。
マクロブロック対2010bが属しているビデオフレームは、たとえば、ボトムフィールド前にトップフィールドが来るような、2つのフィールドが異なる時刻でキャプチャされたインターレースフレームであると想定される。マクロブロック対の画素または画像サンプルは、それぞれのマクロブロック対がプリコーダ2012(図28)によってプリコードされるモードに応じて、マクロブロック対のトップまたはボトムマクロブロックに異なって割り当てられる。理由を以下に示す。
図28に関して上述したように、輝度、すなわち、ルマと、色度、すなわち、クロマのサンプルであってよい、マクロブロックの画像サンプルは、プリコーダ2012によって空間的または時間的に予測されうり、得られる予測残留値は残留データのシンタックス要素を得るために変換符号化を使用して符号化される。動く物体やカメラの動きの領域をもつ、インターレースフレーム(および現在のビデオフレームがインターレースフレームであることが想定される)において、画素の2つの隣り合う行は、両方のフィールドが同じ時刻にキャプチャされるプログレッシブなビデオフレームと比較した場合に削減された統計的依存度を示す傾向がある。したがって、このような動く物体やカメラの動きの場合、上述したように、マクロブロック上で動作するプリコーダ2012によって実行されたプリコードは、マクロブロック対がマクロブロック対の上半分領域を表すトップマクロブロックとマクロブロック対の下半分領域を表すボトムマクロブロックへ空間的に再分割された時に、圧縮効率が低下させる可能性があるにすぎない。というのは、この場合、両方のマクロブロック:トップおよびボトムマクロブロックは、トップフィールドとボトムフィールドの画素を含むからである。この場合、プリコーダ2012が、フィールドを個別に符号化すること、すなわち、トップフィールド画素をトップマクロブロックへ割り当て、ボトムフィールド画素をボトムフィールドマクロブロックへ割り当てることがより効率的であろう。
マクロブロック対の画素がトップおよびボトムマクロブロックにどのように割り当てられているかを説明するために、図31A、31Bは、フレームとフィールドモードのそれぞれの場合に得られるトップおよびボトムマクロブロックを右手側に示している。
図31Aは、フレームモード、すなわち、各マクロブロック対が空間的に上半分と下半分のマクロブロックに分割されている場合を示している。図31Aは、フレームモードで符号化される場合に定義付けられる場合のトップマクロブロックを2250で、ボトムマクロブロックを2252で示す。フレームモードは両方向矢印2254で示されている。図に示すように、トップマクロブロック250はマクロブロック対2010bの画素サンプルの半分を含み、他の画像サンプルはボトムマクロブロック2252へ割り当てられる。より具体的には、上半分行の2n+1〜2n+6とナンバリングされた画像サンプルはトップマクロブロック2250に属しているが、マクロブロック対10bの行2n+7〜2n+12を含む下半分の画像サンプル91〜96、01〜06、11〜16はボトムマクロブロック2252に属する。このように、フレームモードで符号化される場合、マクロブロック2250と2252の両方は、xで示される最初の時刻でキャプチャされた第1のフィールドの画像素子と、Υで示される第2の異なる時刻でキャプチャされた第2のフィールドの画像サンプルと、の両方を含む。
カメラなどによって出力される時の画素のトップまたはボトムマクロブロックへの割り当ては、フィールドモードによって若干異なる。図31Bにおいて両方向矢印2256により示されるように、フィールドモードで符号化される場合、マクロブロック対2010bのトップマクロブロック2252はxで示されるトップフィールドの全ての画像サンプルを含むが、ボトムマクロブロック2254はΥで示されるボトムフィールドの全ての画像サンプルを含む。したがって、フィールドモード2256に基づいて符号化される場合、マクロブロック対内の各マクロブロックは、トップおよびボトムフィールドの画像サンプルの混合というより、単に、トップフィールドの画像サンプルまたはボトムフィールドの画像サンプルのいずれかを含む。
ここで、画像のマクロブロック対への空間的分割およびマクロブロック対内の画像サンプルのマクロブロック対のトップまたはボトムのマクロブロックのいずれかへの割当てについて説明してきたが、この割当ては、マクロブロック対またはマクロブロック対のマクロブロックがプリコーダ2012によって符号化されるモードに依存している。プリコーダ2012によって出力されるプリコードされたビデオ信号に含まれるシンタックス要素mb_field_decoding_flagの機能と意味を説明すると同時に、単にフィールドまたはフレーム符号化されたフレームに対するMBAFF符号化されたフレームの利点を説明するために、ここでもまた、図28を参照されたい。
プリコーダ2012がインターレースされたビデオフレームを表すビデオ信号を受信すると、プリコーダ2012は、ビデオフレーム2010を符号化する時に以下の決定を自在に行うことができる:
―プリコーダは、1つの単一符号化フレームとしてこれらを符号化するために2つのフィールドを結合し、これにより、各マクロブロック対と各マクロブロックはフレームモードで符号化されうる。
―あるいは、2つのフィールドを結合して、これらを個別の符号化されたフィールドとして符号化し、これにより各マクロブロック対と各マクロブロックはフィールドモードで符号化されうる。
―最後のオプションとして、2つのフィールドを結合してこれらを単一フレームとして圧縮するが、このフレームを符号化する際、マクロブロック対を符号化する前に、マクロブロック対を2つのフィールドマクロブロックの対かまたは2つのフレームマクロブロックの対のいずれかに分割する。
3つのオプションからの選択は列内のフレームごとに適応可能に行うことができる。最初の2つのオプションからの選択は画像適応型フレーム/フィールド(PAFF)符号化と呼ばれる。フレームが2つのフィールドとして符号化される場合、各フィールドはマクロブロックに分割され、フレームに非常に類似した方法で符号化される。
フレームが、いくつかの領域が移動するが、他が移動しない混合領域から成る場合、一般に、フレームモードでは非移動領域を符号化し、移動領域をフィールドモードで符号化することがより効率的である。したがって、フレーム/フィールド符号化はフレーム内のマクロブロックの縦の対ごとに個別に決定することができる。これは、上に示した選択肢の第3の符号化の選択肢である。この符号化オプションはマクロブロック適応型フレーム/フィールド(MBAFF)符号化と呼ばれている。以下に、プリコーダ2012がこのオプションだけを使用する決定をしたと想定する。上述のように、MBAFF符号化は、符号化モードタイプ(フィールドまたはフレームモード)をシーンの各領域へより良好に適応させることを可能にする。たとえば、プリコーダ2012は、フレームモードにおいてビデオシーンの固定領域に配置されているマクロブロック対を符号化する一方、フィールドモードにおいて速い動きを示すシーンの領域内のマクロブロック対を符号化する。
上述のように、フレームモードで符号化されたマクロブロック対に対して、各マクロブロックはフレームラインを含む。フィールドモードで符号化されたマクロブロック対に対して、トップマクロブロックはトップフィールドラインを含み、ボトムマクロブロックはボトムフィールドラインを含む。マクロブロック対ごとのフレーム/フィールドは、プリコーダ2012によってマクロブロック対レベルで決定される。すなわち、トップマクロブロックがフィールド符号化される場合、これが、同じマクロブロック対内にあるボトムマクロブロックにも適用される。この測度によって、基本的なマクロブロック処理構造がそのまま維持されており、動き補正領域はマクロブロックと同サイズにすることが許可される。
フィールドマクロブロック対の各マクロブロックはPAFF符号化のフィールド内のマクロブロックに非常に同様に処理される。しかし、フィールドとフレームのマクロブロック対の混合がMBAFFフレーム内で出現することもあるので、この混合を説明にするためにPAFF符号化と比較した場合、動きベクトルの予測、イントラ予測モードの予測、イントラフレームサンプル予測、エントロピー符号化におけるデブロックフィルタリングおよびコンテクストモデリング、および変換係数のジグザグスキャンなどの、プリコーダ2012におけるプリコード手順のいくつかの工程が変更される。
要約すると、プリコーダ2012によって出力されるプリコードされたビデオ信号は、使用を決定した符号化プリコーダ2012のタイプに依存する。本明細書で想定されるように、MBAFF符号化の場合、プリコードされたビデオ信号は、スキップされなかったマクロブロック対の各々に対して、フラグmb_field_decoding_flagを含む。フラグmb_field_decoding_flagは、各マクロブロック対に対して、対応するマクロブロックがフレームまたはフィールド符号化モードのいずれで符号化されるかということに属していることを示す。デコーダサイドにおいて、このフラグはプリコードされたビデオ信号を正確に復号化するために必要とされる。マクロブロック対のマクロブロックがフレームモードで符号化される場合、フラグmb_field_decoding_flagはゼロであり、他の場合においてこのフラグは1である。
さて、図29の元のデコーダの配置の一般的な演算モードを特別なビンに言及せずに説明したが、図32では、MBAFF符号化モードがアクティブである間に近接ブロックのシンタックス要素間の空間的な関係性が使用される、例示的なシンタックス要素のビンストリングのバイナリエントロピー符号化に関して、この配置の機能性を説明する。
図32に示したプロセスはコンテクストモデラ2112の入力でのシンタックス要素のビン値の到達時にスタートする。すなわち、最終的に、シンタックス要素は、必要に応じて、すなわち、シンタックス要素がすでにバイナリ値でない場合、バイナライザ2102において2値化される必要があった。最初のステップ2300において、コンテクストモデラ2112は、入ってくるビンが、近接シンタックス要素、すなわち、近接ブロック内のシンタックス要素に基づくコンテクスト割当て専用のビンであるかを判定する。図32の説明は、MBAFF符号化がアクティブであることを想定することが想起される。ステップ2300で、入ってくるビンが近接するシンタックス要素に基づくコンテクスト割当て専用のビンではないと判定された場合、ステップ2304において、他のシンタックス要素のハンドリングが実行される。第2の場合において、コンテクストモデラ2112は入ってくるビンのシンタックス要素が関連している現在ブロックの近接ブロックを判定する。ステップ2306の判定プロセスは例示的なシンタックス要素とこれらのビンのそれぞれに関して以下に詳細に説明される。いずれの場合でも、ステップ2306における判定は、該当する近接ブロックが現在ブロックを含むマクロブロックの外部ブロックであれば、現在のビンのシンタックス要素が関連しているフレームまたはフィールド符号化される現在マクロブロックに依存する。
次に、ステップ2308において、コンテクストモデラ2112は、近接ブロックの所定の属性に基づいてビンへコンテクストモデルを割り当てる。割り当てステップ2308によって、現在のシンタックス要素の現在のビンのバイナリエントロピー符号化のために使用される、確率モデルへ各コンテクストインデックスを割り当てるテーブル内のそれぞれのエントリを指し示す、コンテクストインデックスctxIdxを得る。
ctxIdxの決定後、コンテクストモデラ2112は、現在のビン自体と一緒に、ctxIdxによりインデックス付けされた変数ctxIdxまたは確率予測状態を正規の符号化エンジン2118へ渡す。これらの入力に基づいて、正規の符号化エンジン2118は、ステップ2322において、ctxIdxによりインデックス付けされたコンテクストモデルの現在の確率状態を用いて、ビンをエントロピー符号化する。具体的には、たとえば、インデックスは、それぞれの部分的ビットストリーム2012を選択するために使用される。
その後、正規の符号化エンジン2118は、パス2117を介してビン値をコンテクストモデラ2112へ戻し、これによって、コンテクストモデラ2112は、ステップ2324において、その確率予測状態に対して、ctxIdxによりインデックス付けされたコンテクストモデルを適応させる。次に、出力2124でビットストリームへシンタックス要素を符号化するプロセスは、2326において終了する。
ステップ2310の前にその中にシンタックス要素が2値化され得るビンストリングが、符号化され、すなわち、それぞれの部分的なビットストリーム2012に割り当てられ、続いてステップ2322のコンテクストモデルctxIdxの現在確率状態を使用することによって符号化されたビンと、図32には示さないが、等しい確率の確率予測を使用してバイパス符号化エンジン2120において符号化されるビンと、の両方から成りうることを強調する。寧ろ、図32は単にシンタックス要素の1つのビンの例示的な符号化に関する。
図32の点線2327で囲まれたステップ2322および2324は、図33に関してより詳細に説明される。
図33の左側は、プロセス2327の流れ図を示す。図33の右側は、コンテクストモデラ2112および正規の符号化エンジン2118の両方が、具体的な変数をロードし、書き込み、更新するためにアクセスするメモリ2328を示している。これらの変数は、バイナリエントロピーコーダ2100cの現在の状態または現在の確率インターバルを定義付けるRとLを含む。
メモリ2328は、たとえば、0から2398までのctxIdxの各可能な値と、それぞれのコンテクストインデックスctxIdxによりインデックス付けされたそれぞれのコンテクストモデルの現在の確率予測状態を定義付ける確率状態対のインデックスσ□とMPS値ωとを関連付けるテーブル2329を含む。確率状態σは、可能な確率値pσの集合の1つを一意に識別するインデックスである。確率値pσはこのコンテクストモデルの次のビンが最小確率シンボル(LPS)になる確率の予測である。可能なビン値のどちらか、すなわち、LPSがヌルまたは1かどうかはMPSωの値によって示される。ωが1の場合、LPSは0であり、逆も同じである。したがって、状態インデックスとMPSは共に、それぞれのコンテクストモデルの実際の確率状態または確率予測を一意に定義付ける。
ステップ2334において、実際のビン値は正規の符号化エンジン2118へ送信される。
ステップ2336において、正規の符号化エンジン2118は、実際のビンの値が、すなわち、現在のシンタックス要素から得られた既に2値化されたシンタックス要素またはビンストリングの1つのビンのいずれかが、ωiによって示される最大確率シンボルと等しいかどうかをチェックする。現在のビンがMPSである場合、コンテクストモデラ2112は、σiを更新することによって現在のコンテクストモデルの確率予測状態を更新する。具体的には、コンテクストモデラ2112は、実際のシンボルやビンが最大確率シンボル、すなわち、σがtransIdxMPS(σi)であった場合に各確率状態インデックスσを更新された確率状態インデックスと関連付けるテーブル2340を使用する。
ステップ2338の後、プロセスは、正規の符号化エンジン2118に送信されるビンがその選択部によってそれぞれの部分的ビットストリームエンコーダへ送られる2340において終了する。
ステップ2336において、現在のビンが最小確率シンボルLPSであると判定された場合、ステップ2344において、σiが0と等しいかどうか、すなわち、確率状態インデックスが1と0の両方に対して等しい確率を示しているかどうかが判定される。次に、値MPSはωi=1−ωiを計算することによって更新される。次に、ステップ2346において、確率状態インデックスがテーブル2340を使用して実際化される。このテーブル2340は、実際のビン値が最小確率シンボルである場合、各現在の確率状態インデックスを更新された確率状態インデックスと関連付ける、すなわち、σiをtransIdxLPS(σi)になるように補正する。確率状態インデックスのσiとωiがステップ2344とステップ2346において適応された後、プロセスは既に述べたステップ2340へ進む。
コンテクストモデル割り当てに対する近接ブロックのシンタックス要素間の空間的関係性を利用することによってシンタックス要素の符号化プロセスを説明してきたが、現在のブロックと近接ブロックとの間のコンテクストモデルの割り当てと近接性の定義付けは、プリコーダ2012による出力としてプリコードされたビデオ信号内に含まれる以下のシンタックス要素に関して、以下に詳細に説明する。これらのシンタックス要素を以下に列挙する。
上記の表からわかるように、これらのシンタックス要素のいくつかは全体として現在のマクロブロックに関しており、他は、サブパート、すなわち、現在マクロブロックのサブマクロブロックまたはそのパーティションに関している。同様に、コンテクストモデルのこれらのシンタックス要素への割り当ては、近接マクロブロック、近接サブマクロブロック、またはその近接パーティションのいずれかのシンタックス要素に依存している。図36は、マクロブロック(上行)とサブマクロブロック(下行)のパーティションを示す。図36に示すように、これらのパーティションはインター予測に対してスキャンされる。図36の外側の矩形はそれぞれマクロブロックまたはサブマクロブロックにおけるサンプルを示す。内側の矩形はパーティションを示す。各内側の矩形の数字は、マクロブロックパーティション逆スキャンまたはサブマクロブロックパーティション逆スキャンのインデックスを特定している。
近接ブロックのシンタックス要素についてコンテクストモデルの割り当ての依存関係を詳細に説明する前に、図34では、符号化される現在シンタックス要素を含む現在ブロックの左および上のブロック内にシンタックス要素を含む可能な候補であるので、現在マクロブロック対の左と上のマクロブロック対のトップマクロブロックのアドレスがどのように計算されるかが示されている。空間的な関係を説明するために、図34は、ビデオフレームの6個のマクロブロック対の一部を示し、ここで、図34の各矩形領域は、1つのマクロブロックに対応し、各列の第1と第2の2つの縦に隣接するマクロブロックは、マクロブロック対を形成する。
図34において、CurrMbAddrは、現在のシンタックス要素が関連付けられているかまたは関係している、現在のマクロブロック対のトップマクロブロックのマクロブロックアドレスを示している。現在のマクロブロック対は、太線で囲まれている。言い換えれば、これらは、マクロブロック対の境界付けをしている。mbAddrAとmbAddrBはそれぞれ、現在のマクロブロック対の左側と上側に対するマクロブロック対のトップマクロブロックのアドレスを示している。
現在のマクロブロック対の左および上方に対する近接するマクロブロック対のトップマクロブロックのアドレスを計算するために、コンテクストモデラ2112は以下式を計算する。
MbAddrA=2・(CurrMbAddr/2−1)
MbAddrB=2・(CurrMbAddr/2−PicWidthInMbs)
ここで、PicWidthInMbsはマクロブロックの単位内の画像を指定する。上記に付与されている等式は図30を参照することによって理解される。図30においてマクロブロック単位の画像幅はiで示されていることに留意されたい。上に与えられている等式は、上の等式において、「/」が結果のトランザクションがゼロに向かう整数除算を示すので、現在のマクロブロックアドレスCurrMbAddressが現在のマクロブロック対のボトムマクロブロックの奇数番号が付されたマクロブロックアドレス、すなわち、CurrMbAddress+1と交換されたときに真であることにさらに留意されたい。たとえば、7/4と−7/−4が1に切り捨てられ、−7/4と7/−1は−1に切り捨てられる。
さて、近接マクロブロックをどのように計算するかを説明したが、各マクロブロックが16×16のルマサンプルを含むことが単に想起される。これらのルマサンプルは、4つの8×8のルマブロックに分割されている。これらのルマブロックは4×4のルマブロックにさらに分割することもできる。また、以下の説明のために、各マクロブロックは、8×8のルマサンプルをさらに含み、すなわち、ルマサンプルと比較してクロマサンプルの画素幅は倍増している。マクロブロックのこれらの8×8のクロマサンプルは4つの4×4ルマブロックに分割されている。マクロブロックのブロックは番号付けされている。したがって、4つの8×8ルマブロックは各々、マクロブロック内の各8×8ブロックを一意に示すそれぞれのブロックアドレスを有している。次に、マクロブロック内の各ピクセルサンプルは位置(x、y)に属しており、(x、y)はマクロブロックの左上のルマまたはクロマサンプルに対して現在のブロックの左上のサンプルのルマまたはクロマロケーションを示している。たとえば、図31Bのトップマクロブロック2252内の画素2023は、ルマサンプルに対して、画素位置(2、1)、すなわち、3列目、2行目を有しうる。
これを説明したが、上記の表に記載されたシンタックス要素のビンの少なくともいくつかに対するctxIdxの導出プロセスを説明する。
シンタックス要素mb_skip_flagに関して、コンテクストモデラの割当ては近接マクロブロックに関連するシンタックス要素に依存する。したがって、コンテクストインデックスctxIdxを決定するために、アドレスmbAddrAとmbAddrBは上記のように決定される。次に、condTermN(NはAまたはBのいずれかである)を次のように設定されている変数であるとする。
・mbAddrNが利用できない、または、マクロブロックmbAddrNのためのmb_skip_flagが1と等しい場合、conTermNは0に設定される。
・それ以外の場合、condTermNは1に設定される。
・ctxIdxは、コンテクストインデックス増分子ctxIdxInc=conTermA+condTermBに基づいて得られる。
シンタックス要素mb_field_decoding_flagに対して、ctxIdxは次のように決定される:
condTermN(NはAまたはBのいずれかである)は次のように設定されている変数であるとする。
・次の条件のいずれかが真である場合、condTermNが0に設定され、
・mbAddrNは利用できない。
・マクロブロックmbAddrNはフレームマクロブロックである。
・それ以外の場合、condTermNは1に設定される。
ctxIdxはコンテクストインデックス増分子ctxIdxInc=condTermA+condTermBに基づいて得られる。
ここで、(((CurrMbAddr/2)%(PicWidthInMbs))=0)であれば、mbaddrNは利用できない。
シンタックス要素Mb_typeの場合、ctxIdxは、マクロブロックmbAddrN(NはAまたはBのいずれかである)の利用可能性とこの近接マクロブロックのシンタックス要素Mb_typeに依存して決められる。
上記の表に記載されている他のシンタックス要素に対して、コンテクストモデラ割当ての依存度が定義づけられる。ここで、マクロブロックより小さいブロックに関連するシンタックス要素の場合、この割当てはマクロブロックより小さいこのようなより小さなブロックに関連しているシンタックス要素に依存している。たとえば、シンタックス要素coded_block_patternの場合、コンテクストインデックスの割り当ては、マクロブロックMbAddrNの利用可能性とマクロブロックMbAddrNのシンタックス要素Mb_typeだけでなく、近接ブロックのシンタックス要素Coded_block_patternに依存する。また、上記のシンタックス要素がすべて近接ブロックのそれぞれのシンタックス要素に依存していることは注目に値する。これとは別に、シンタックス要素mvd_l0、mvd_l1、ref_idx_l0とref_idx_l1のコンテクストモデル割り当ては、近接ブロックのそれぞれのシンタックス要素に依存しない。intra_chroma_pred_modeに対するコンテクストモデラ割り当ては、mbAddrNの利用可能性、マクロブロックmbAddrNがインター予測モードで符号化されるか否か、マクロブロックmbAddrNに対するMb_type、およびマクロブロックMbAddrNに対するシンタックス要素intra_chroma_pred_modeに依存する。シンタックス要素coded_block_flagコンテクストモデル割り当ては、MbAddrNの利用可能性、インター予測モードで符号化された現在のマクロブロック、マクロブロックmbAddrNに対するMb_type、および近接ブロックのシンタックス要素coded_block_flagに依存する。
以下において、近接ブロックがどのように決定されるかを説明する。具体的には、これは、mbAddrNとマクロブロックMbAddrNのサブパートをインデックス付けするブロックインデックスの計算を含み、このサブパートは現在のブロックの近接ブロックである。
本発明の一実施形態によれば、以下に説明するように、マクロブロック適応型フレーム/フィールド符号化を使用するスライスに対する近接性は、MBAFFフレーム内部のコンテクスト適応型バイナリエントロピー符号化におけるコンテクストモデリングに使用される近接ブロックによってカバーされる領域が現在のブロックでカバーされる領域と隣り合うことを保証するように定義付けられる。一般に、これは、符号化プロセス中に予測される条件的確率の方がより信頼できるので、各マクロブロック対を本明細書の導入部分で説明したコンテクストモデリングのためのフレームのマクロブロック対と見なした場合に比較して、MBAFFスライスの符号化に関連してここで使用するコンテクスト適応型エントロピー符号化方式の符号化効率を改良させる。
現在のブロックと基準ブロックとの間の近接性を定義付ける一般概念は次のセクション1.1に説明されている。セクション1.2では、現在のブロック、マクロブロック、またはパーティションの左および上方に対する近接ブロック、マクロブロック、またはパーティションがコンテクスト適応型バイナリエントロピー符号化のコンテクストモデリングを目的としていかにして取得されるかを明記する詳細な説明がなされる。
1.1.一般的な概念による近接性の定義
(x、y)を、画像CurrPicの左上のルマまたはクロマサンプルに関して現在のブロックの左上のサンプルのルマまたはクロマロケーションを示すとする。変数CurrPicは、現在のブロックがフレームモード(mb_field_decoding_flagが0と等しい)で符号化されたマクロブロック対の一部である場合、トップおよびボトムフィールドをインターリーブすることによって得られる、現在のフレームを指定する。現在のブロックが、トップフィールドマクロブロックであるかその一部である場合、CurrPicは、現在のフレームのトップフィールドを指定し、現在のブロックが、ボトムフィールドマクロブロックであるかその一部である場合、CurrPicは、現在のフレームのボトムフィールドを指定する。
(xA、yA)と(xB、yB)を画像CurrPic内部のロケーション(x、y)の左および上方に対するルマまたはクロマロケーションをそれぞれ示すとする。ロケーション(xA、yA)と(xB、yB)は次のように指定される。
(xA、yA)=(x−1、y)
(xB、yB)=(x、y−1)
現在のブロックの左側のブロックは、画像CurrPicの左上のルマまたはクロマサンプルに対するロケーション(xA、yA)でルマまたはクロマサンプルを含むブロックとして定義付けられ、現在のブロックの上のブロックは、画像CurrPicの左上のルマまたはクロマサンプルに対するロケーション(xB、yB)でルマまたはクロマサンプルを含むブロックとして定義付けられる。ロケーション(xA、yA)または(xB、yB)が現在のスライスの外側のロケーションを指定する場合、対応するブロックは利用できないとマークされる。
1.2.近接性の定義の詳細な説明
セクション1.2.1で説明されているアルゴリズムは、現在のマクロブロックの左上のルマサンプルに関連して表現されているルマサンプルのロケーションが、マクロブロックアドレスへどのようにマッピングされるかを説明するMBAFFスライスの一般的な概念を特定している。このマクロブロックのアドレスは対応するルマサンプルをカバーするマクロブロック、およびこのマクロブロックの左上のルマサンプルに関して表現されるルマ度サンプルロケーションを特定している。この概念は、以下のセクション1.2.2〜1.2.6で使用される。
セクション1.2.2〜1.2.6は、近接マクロブロック、8×8のルマブロック、4×4のルマブロック、4×4のクロマブロック、現在のマクロブロックの左上のパーティション、8×8のルマブロック、4×4のルマブロック、4×4のクロマブロック、またはパーティションがどのように指定されるかを説明する。これらの近接マクロブロック、ブロック、またはパーティションが以下のシンタックス要素に対するCABACのコンテクストモデリングのために必要とされる:mb_skip_flag、mb_type、coded_block_pattern、intra_chroma_pred_mode、coded_block_flag、ref_idx_l0、ref_idx_l1、mvd_l0、mvd_l1。
1.2.1.近接サンプルのロケーションの指定
(xN、yN)が、マクロブロックアドレスCurrMbAddrを有する現在のマクロブロックの左上のルマサンプルに関して表された所与のルマサンプルロケーションを示すとする。本実施形態によれば、各マクロブロックが16×16のルマサンプルを含むことが想起される。xN、yNは、−1...16の範囲内にある。mbAddrNを(xN、yN)を含むマクロブロックのマクロブロックアドレスとし、(xW、yW)を(現在のマクロブロックの左上のルマサンプルに対してではなく)マクロブロックmbAddrNの左上のルマサンプルに関して表現されるロケーション(xN、yN)であるとする。
mbAddrAとmbAddrBが現在のマクロブロック対の左側のマクロブロック対のトップマクロブロックと現在のマクロブロック対の上のマクロブロック対のトップマクロブロックのマクロブロックアドレスをそれぞれ指定するものとする。PicWidthInMbsをマクロブロック単位の画像幅を指定する変数であるとすると、mbAddrAとmbAddrBは次のように指定される。
mbAddrA=2*(CurrMbAddr/2−1)
mbAddrAが0より少ないか、(CurrMbAddr/2)%PicWidthInMbsが0と等しいか、またはアドレスmbAddrAを有するマクロブロックが現在のスライスとは異なるスライスに属している場合、mbAddrAは利用できないとマークされる。
mbAddrB=2*(CurrMbAddr/2−PicWidthInMbs)
mbAddrBが0より小さい場合、またはアドレスmbAddrBを有するマクロブロックが現在のスライスとは異なるスライスに属している場合、mbAddrBは利用できないとマークされる。
図35の表は、次の2つの順序付けられたステップにおいてマクロブロックのアドレスmbAddrNと変数yMを指定している:
1.(xN、yN)(最初と2番目の列)と以下の変数に基づくマクロブロックアドレスmbAddrX(5番目の列)の指定:
・アドレスCurrMbAddrを有する現在のマクロブロックがフレームマクロブロック対の一部分である場合、変数currMbFrameFlag(3番目の列)は1に設定され、それ以外の場合、0に設定される。
・CurrMbAddr%2が0と等しい場合、変数mb1sTopMbFlag(4番目の列)は1に設定され、それ以外の場合、0に設定される。
2.mbAddrX(5番目の列)の利用可能性によっては以下が適用される:
・mbAddrX(mbAddrAまたはmbAddrBのいずれでもよい)が利用できないとマークされている場合、mbAddrNは利用できないとマークされる。
・それ以外の場合(mbAddrXが利用可能である場合)、mbAddrNは利用可能であるとマークされ、表1は、mbAddrNとyMを、(xN、yN)(最初と2番目の列)、currMbFrameFlag(3番目の列)、mblsTopMbFlag(4番目の列)、および以下のように得られる変数mbAddrXFrameFlag(6番目の列)に基づいて指定する:
・mbAddrXFrameFlagは、マクロブロックmbAddrXがフレームマクロブロックである場合、1に設定され、それ以外の場合は、0に設定される。
表1の上記のフラグの未指定の値は、対応するフラグの値が現在の表の行とは無関係であることを示している。
要約すると、最初の4つの列に、入力値xN、yN、currMbFrameFlagおよびMblsTopMbFlagが入力される。具体的には、パラメータxN、yNに対して可能な入力値は−1〜16(−1と16を含む)である。これらのパラメータは5番目の列に記載のmbAddrX、すなわち、所望されるルマサンプルを含むマクロブロック対を決定する。次の2つの列、すなわち、6番目と7番目の列は、最終出力mbAddrNとyNを取得するために必要とされる。これらの更なる入力パラメータは、mbAddrXによって示されるマクロブロック対がフレームまたはフィールド符号化されるかを示すMbAddrXFrameFlag、および、yNが偶数か奇数か否かまたは8より大きいか8であるか否かに関するいくつかの更なる条件である。
図に示すように、xN、yNが共に正またはゼロである場合、すなわち、所望される画素サンプルが、xN、yNが定義付けられる現在のマクロブロック内にある場合、出力されたマクロブロックアドレスは変化しない。すなわち、それは、CurrMbAddrと等しい。また、yMはyMと等しい。入力xMとyMが現在のマクロブロックの外、すなわち、全てが現在のマクロブロックの上部(yN<0)の左側(xN<0)にある画素サンプルを示す場合、これは変化する。
図35の表の結果からすると、マクロブロックmbAddrNの左上のルマサンプルに対する近接ルマロケーション(xW、yW)は、
xW=(xN+16)%16
yW=(yM+16)%16
として指定される。
上述の考えは単にルマサンプルを例示することに関係するものであることを強調する。マクロブロックは単に8×8のクロマサンプルを含むので、クロマサンプルを考慮する場合、この考えは若干異なる。
1.2.2.近接マクロブロックの指定
現在のマクロブロックの左および上方の近接マクロブロックの指定は、以下のシンタックス要素に対してCABACのコンテクストモデリングに使用される。
mb_skip_flag、mb_type、coded_block_pattern、intra_chroma_prediction_mode、とcoded_block_flag
mbAddrAを現在のマクロブロックの左側のマクロブロックのマクロブロックアドレスとし、mbAddrBを現在のマクロブロックの上方のマクロブロックのマクロブロックアドレスとする。
mbAddrA、mbAddrB、およびそれらの利用可能性の状態は以下のように求められる:
・ルマロケーションが(xN、yN)=(−1、0)である場合、セクション1.2.1で説明したように、mbAddrAとその利用可能性の状態が得られる。
・ルマロケーションが(xN、yN)=(0、−1)である場合、セクション1.2.1で説明したように、mbAddrBとその利用可能性の状態が得られる。
1.2.3.近接8×8ルマブロックの指定
現在の8×8ルマブロックの左および上方の近接8×8のルマブロックの指定は、シンタックス要素coded_block_patternに対するCABACのコンテクストモデリングに使用される。
luma8×8BlkIdxを、現在のマクロブロックCurrMbAddr内の現在の8×8ルマブロックのインデックスとする。ブロックインデックスluma8×8BlkIdxのマクロブロック内のそれぞれのブロックへの割当ての実施形態を図9に示す(右上角)。
mbAddrAを現在の8×8ルマブロックの左側に8×8のルマブロックを含むマクロブロックのマクロブロックアドレスとし、mbAddrBを現在の8×8ルマブロックの上方に8×8のルマブロックを含むマクロブロックのマクロブロックアドレスとする。さらに、luma8×8BlkIdxAを現在の8×8ルマブロックの左側の8×8ルマブロックの8×8ルマブロックインデックス(マクロブロックmbAddrAの中)とし、luma8×8BlkIdXBを現在の8×8ルマブロックの上方の8×8ルマブロックの8×8ルマブロックインデックス(マクロブロックmbAddrBの中)とする。
mbAddrA、mbAddrB、luma8×8BlkIdxA、luma8×8BlkIdxB、およびそれらの利用可能性の状態は、次のように得られる:
・(xC、yC)を現在のマクロブロックの左上のルマサンプルに対する現在の8×8ルマブロックの左上のサンプルのルマロケーションとする。
・ルマロケーション(xN、yN)=(xC−1、yC)の場合、mbAddrA、その利用可能性の状態、およびルマロケーション(xW、yW)はセクション1.2.1に説明されているように得られる。mbAddrAが利用可能な場合、luma8×8BlkIdxAが、ルマロケーション(xW、yW)をカバーするマクロブロックmbAddrAの内部の8×8ルマブロックを指すように設定される。それ以外の場合、luma8×8BlkIdAは利用できないとマークされる。
・ルマロケーション(xN、yN)=(xC、yC−1)の場合、mbAddrB、その利用可能性の状態、およびルマロケーション(xW、yW)はセクション1.2.1に説明されているように得られる。mbAddrBが利用可能な場合、luma8×8BlkIdxBが、ルマロケーション(xW、yW)をカバーするマクロブロックmbAddrBの内部の8×8ルマブロックを指すように設定される。それ以外の場合、luma8×8BlkIdxBは利用できないとマークされる。
1.2.4.近接4×4のルマブロックの指定
現在の4×4ルマブロックの左および上方の近接4×4ルマブロックの指定は、シンタックス要素coded_block_flagに対するCABACのコンテクストモデリングに使用される。
luma4×4BlkIdxを現在のマクロブロックCurrMbAddr内部の現在の4×4ルマブロックのインデックス(復号化順に)とする。たとえば、luma4×4BlkIdxは、図9の右下角に示すように、4を乗じた4×4blockとパーティション番号を含む8×8ブロックのluma8×8BlkIdxとして定義できる。
mbAddrAを現在の4×4ルマブロックの左側に4×4のルマブロックを含むマクロブロックのマクロブロックアドレスとし、mbAddrBを現在の4×4ルマブロックの上方に4×4のルマブロックを含むマクロブロックのマクロブロックアドレスとする。さらに、luma4×4BlkIdxAを現在の4×4ルマブロックの左側の4×4ルマブロックの4×4ルマブロックインデックス(マクロブロックmbAddrAの中)とし、luma4×4BlkIdxBを現在の4×4ルマブロックの上方の4×4ルマブロックの4×4ルマブロックインデックス(マクロブロックmbAddrBの中)とする。
mbAddrA、mbAddrB、luma4×4BlkIdxA、luma4×4BlkIdxB、およびそれらの利用可能性の状態は次のように得られる:
・(xC、yC)を現在のマクロブロックの左上のルマサンプルに対する現在の4×4ルマブロックの左上のサンプルのルマロケーションとする。
・ルマロケーション(xN、yN)=(xC−1、yC)の場合、mbAddrA、その利用可能性の状態、およびルマロケーション(xW、yW)はセクション1.2.1に説明されているように得られる。mbAddrAが利用可能な場合、luma4×4BlkIdxAが、ルマロケーション(xW、yW)をカバーするマクロブロックmbAddrAの内部の4×4ルマブロックを指すように設定される。それ以外の場合、luma4×4BlkIdxAは利用できないとマークされる。
・ルマロケーション(xN、yN)=(xC、yC−1)の場合、mbAddrB、その利用可能性の状態、およびルマロケーション(xW、yW)はセクション1.2.1に説明されているように得られる。mbAddrBが利用可能な場合、luma4×4BlkIdxBが、ルマロケーション(xW、yW)をカバーするマクロブロックmbAddrBの内部の4×4ルマブロックを指すように設定される。それ以外の場合、luma4×4BlkIdxBは利用できないとマークされる。
1.2.5近接4×4のクロマブロックの指定
現在の4×4クロマブロックの左および上方の近接4×4クロマブロックの指定は、シンタックス要素coded_block_flagに対するCABACのコンテクストモデリングに使用される。
chroma4×4BlkIdxを現在のマクロブロックCurrMbAddr内部の現在の4×4クロマブロックのインデックス(復号化順に)とする。
mbAddrAを現在の4×4クロマブロックの左側に4×4のクロマブロックを含むマクロブロックのマクロブロックアドレスとし、mbAddrBを現在の4×4クロマブロックの上方に4×4のクロマブロックを含むマクロブロックのマクロブロックアドレスとする。さらに、chroma4×4BlkIdxAを現在の4×4クロマブロックの左側の4×4クロマブロックの4×4クロマブロックインデックス(マクロブロックmbAddrAの中)とし、chroma4×4BlkIdxBを現在の4×4クロマブロックの上方の4×4クロマブロックの4×4クロマブロックインデックス(マクロブロックmbAddrBの中)とする。
mbAddrA、mbAddrB、chroma4×4BlkIdxA、chroma4×4BlkIdxB、およびそれらの利用可能性の状態は次のように得られる:
・luma8×8BlkIdx=chroma4×4BlkIdxの場合、変数mbAddrA、mbAddrB、luma8×8BlkIdxA、luma8×8BlkIdxB、およびそれらの利用可能性の状態は、セクション1.2.3に記載されるように得られる。
・luma8×8BlkIdxAが利用可能であれば、chroma4×4BlkIdxAはluma8×8BlkIdxAと等しくなるように設定される。それ以外の場合、chroma4×4BlkIdxAは利用できないとマークされる。
・luma8×8BlkIdxBが利用可能であれば、chroma4×4BlkIdxBはluma8×8BlkIdxBと等しくなるように設定される。それ以外の場合、chroma4×4BlkIdxBは利用できないとマークされる。
1.2.6.近接パーティションの指定
現在のパーティションの左および上方の近接パーティションの指定は、以下のシンタックス要素に対するCABACのコンテクストモデリングに使用される。
ref_idx_l0、ref_idx_l1、mvd_l0、mvd_l1
mbPartIdxとsubMbPartIdxを、現在のマクロブロックCurrMbAddr内の現在のパーティションを指定するマクロブロックパーティションとサブマクロブロックパーティションのインデックスとする。このようなパーティションインデックスの例を図36に示す。
mbAddrAを現在のパーティションの左側にパーティションを含むマクロブロックのマクロブロックアドレスとし、mbAddrBを現在のパーティションの上方にパーティションを含むマクロブロックのマクロブロックアドレスとする。さらに、mbPartIdxAとsubMbPartIdxAを現在のパーティションの左側のパーティションのマクロブロックパーティションおよびサブマクロブロックパーティションのインデックス(マクロブロックmbAddrAの中)とし、mbPartIdxBとsubMbPartIdxBを現在のパーティションの上方のパーティションのマクロブロックパーティションおよびサブマクロブロックパーティションのインデックス(マクロブロックmbAddrBの中)とする。
mbAddrA、mbAddrB、mbPartIdxA、subMbPartIdxA、mbPartIdxB、subMbPartIdxB、およびそれらの利用可能性の状態は次のように得られる:
・(xC、yC)を現在のマクロブロックの左上のルマサンプルに対するmbPartIdxとsubMbPartIdxによって与えられる現在のパーティションの左上のサンプルのルマロケーションとする。
・ルマロケーション(xN、yN)=(xC−1、yC)の場合、mbAddrA、その利用可能性の状態、およびルマロケーション(xW、yW)はセクション1.2.1に説明されているように得られる。mbAddrAが利用不可能である場合、mbPartIdxAとsubMbPartIdxAは利用できないとマークされる。それ以外の場合、mbPartIdxAが、ルマロケーション(xW、yW)をカバーするマクロブロックmbAddrAの内部のマクロブロックパーティションを指すように設定され、subMbPartIdxAが、ルマロケーション(xW、yW)をカバーする(マクロブロックmbAddrA内の)マクロブロックパーティションmbPartIdxAの内部のサブマクロブロックパーティションを指すように設定される。
・ルマロケーション(xN、yN)=(xC、yC−1)の場合、mbAddrB、その利用可能性の状態、およびルマロケーション(xW、yW)はセクション1.2.1に記載されているように得られる。mbAddrBが利用不可能である場合、mbPartIdxBとsubMbPartIdxBは利用できないとマークされる。それ以外の場合、mbPartIdxBが、ルマロケーション(xW、yW)をカバーするマクロブロックmbAddrBの内部のマクロブロックパーティションを指すように設定され、subMbPartIdxBが、ルマロケーション(xW、yW)をカバーする(マクロブロックmbAddrB内の)マクロブロックパーティションmbPartIdxBの内部のサブマクロブロックパーティションを指すように設定される。
上記のシンタックス要素またはビンストリングまたはそれらのビンの部分をどのようにエントロピー符号化ビットストリームへ符号化するかを説明したが、このビットストリームの復号化およびビンの検索は図37から39に関して説明する。
図37は、本発明が適用されうるビデオデコーダ環境を示す一般的な図である。エントロピーデコーダ400は、上記のようにエントロピー符号化されたビットストリームを受信し、それを図38〜39に関して下記により詳細に示すように扱う。具体的には、エントロピーデコーダ2400は、プリコードされたビデオ信号、特に、そこに含まれているシンタックス要素を得るために、バイナリエントロピー復号化によってエントロピー符号化されたビットストリームを復号化し、これを、プリコードデコーダ2402へ渡す。プリコードデコーダ2402は、マクロブロックごとに、次に、スライスごとに、ビデオフレーム2010の画素の画像のサンプルを検索するために、上記のシンタックス要素などの動きベクトル成分やフラグなどのシンタックス要素を使用する。
次に、図38は、ビンが復号化されるたびにエントロピーデコーダ2400によって実行される復号化プロセスを示す。どのビンが復号化されるかはエントロピーデコーダ2400によって現在予測されているシンタックス要素に依存している。この知識はそれぞれの解析規制から得られる。
復号化プロセスにおいて、まず、ステップ2500において、デコーダ2400は、復号化する次のビンが近接シンタックス要素に基づくコンテクストモデルの割り当てに対応しているタイプのシンタックス要素のビンであるかどうかをチェックする。そうでない場合、デコーダ2400はステップ2504の他のシンタックス要素のハンドリングへ進む。しかし、ステップ2500のチェック結果が肯定された場合、デコーダ2400は、ステップ2506とステップ2508において、復号化する現在のビンが属する現在のブロックの近接ブロックの決定を実行し、ステップ2506で決定された近接ブロックの所定の属性に基づいてコンテクストモデルをビンへ割り当てる。ここで、ステップ2506と2508は図32の符号化プロセスのステップ2306と2308に対応している。これらのステップによって、コンテクストインデックスctxIdxが得られる。したがって、ctxIdxの決定は、以下のエントロピー復号化に使用されるコンテクストモデルを決定するためのステップ2306および2308における図32の符号化プロセスと同様に、ステップ2506とステップ2508で行われる。
次に、ステップ2522において、エントロピーデコーダ2400は、ステップ2510〜2520において得られたctxIdxによりインデックス付けされたコンテクストモジュールの実際の確率状態を使用して、エントロピー符号化されたビットストリームから、実際のビンをエントロピー復号化する。つまり、エントロピーデコーダ2400は、各々がそれぞれの部分的ビットストリームに関連付けられている、内部に複数のエントロピーデコーダを有する上記のエントロピーデコーダのいずれかに対応している正規の復号化エンジンを含む。ステップ2522において、ビンは、確率インデックスによってまたは少なくとも確率インデックスに基づいてインデックス付けされた部分的ビットストリームからリクエストされる。このステップの結果は実際のビンの値である。
その後、ステップ2524において、ctxIdx確率状態は、ステップ2224と同様に、適応または更新される。その後、ステップ2526においてプロセスは終了する。
言うまでもなく、図38に示したプロセスによって得られる個々のビンは、シンタックス要素がバイナリタイプである場合のみにおいてシンタックス要素の値を表す。それ以外の場合、2値化に対応するステップは、ビンストリングからシンタックス要素の実際の値を得るために逆の方法で実行する必要がある。
図39において、左側のステップ2522とステップ2524を点線2527で囲むことでより詳細に示す。右側は2564で示している。図38は、エントロピーデコーダ2400が、変数をロード、格納、そして更新するためにアクセスできるメモリとそのコンテンツを示している。図示したように、エントロピーデコーダ2400は、以下に説明されるように、符号化プロセスをエミュレートするので、エントロピーデコーダはエントロピーコーダ2014と同じ変数を操作し管理する。
最初のステップ2566において、デコーダ2400は、それぞれのコンテクストに関連付けられた確率インデックスによりインデックス付けされた部分的ビットストリームから現在のビンの値を取得する。
しかし、値はまだ値MPSとLPSとの相対的な用語で示されている。したがって、ステップ2570において、デコーダ2400はエントロピー符号化されたビットストリームにおけるエントロピー符号化符号語の値がωIによって示される最大確率シンボルであったかどうかをチェックする。そうである場合、ステップ2572において、デコーダ2400はビン値をωiの値へ設定する。そうでない場合、ステップ2574において、デコーダ2400はシンボルを1−ωiになるように設定する。
ステップ2572の後、ステップ2576において、デコーダ2400は、図36においてステップ2338に関して既述されているように確率状態インデックスωiを遷移させることによって、ωiとωiによって定義付けされている現在のコンテクストモデルiの確率状態を適応させるか更新する。その後、プロセス2527はステップ2578で終了する。
ステップ2574の後、デコーダ2400は、ステップ2582において、ωiが0と等しい場合、ωi=1−ωiを計算することによって、次に、図36においてステップ2346に関して説明したように確率状態インデックスωiを新しい確率状態インデックスへ遷移することによって、ステップ2582および2584において、確率状態を適応させるか更新する。その後、プロセスはステップ2578において終了する。
具体的な実施形態を説明してきたが、これら実施形態に限定されないことに留意されたい。特に、ステップ2308と2408に基づく割当ては、近接ブロックのシンタックス要素、すなわち、プリコーダ2012によって出力されたプリコードされたビデオ信号に含まれるシンタックス要素、に依存する必要はない。この割当ては、寧ろ、近接ブロックの他の属性に依存しうる。また、図35のテーブルに関連して説明されている近接ブロック間の近接性の定義は変化しうる。さらに、2つのインターレースされたフィールドの画素サンプルは上記した方法以外の他の方法で配置することができる。
また、4×4のブロック以外のブロックサイズを変換の基礎として使用することができ、上記実施形態において、変換が予測に対する画像サンプルの差に対して適用されたが、変換は予測を実行せずに画像サンプル自体に適用することもできる。また、変換のタイプは重要ではない。DCTはFFTやウェーブレット変換と同様に使用することができる。さらに、説明した実施例は、バイナリのエントロピー符号化/復号化に限定されない。むしろ、マルチシンボルエントロピー符号化にも同様に適用することができる。さらに、スライス、マクロブロック対、マクロブロック、画像素子などへのビデオフレームの分割は例示目的のためになされ、実施例の範囲を制限するものではない。
以下において、図28よりも詳細に、近接シンタックス要素に基づくコンテクスト割り当てを使用したシンタックス要素の上記エントロピー符号化が使用されるブロック2800で図40に示されるように、エントロピーエンコーダを含むビデオエンコーダエンジンの完成したセットアップを示している図40を参照されたい。具体的には、図40は、マクロブロック用の新しいH.264/AVC規格に対する基本的な符号化構造を示している。入力ビデオ信号は、各マクロブロックが16×16のルマピクセルを有しているマクロブロックへ分割される。次に、スライス群およびスライスへのマクロブロックの関連付けが選択され、次に、各スライスの各マクロブロックは、図40における演算ブロックのネットワークによって処理される。ここで、画像内に様々なスライスがある場合でもマクロブロックの効率的な並列処理が可能であることに留意されたい。スライス群およびスライスへのマクロブロックの関連付けは、図40のコーダコントロール2802と称されるブロックによって実行される。以下のように定義付けられるいくつかのスライスが存在している:
・Iスライス:スライスの全てのマクロブロックがイントラ予測を用いて符号化されるスライス。
・Pスライス:さらに、Iスライスの符号化タイプに対して、Pスライスのいくつかのマクロブロックも予測ブロック当たり多くとも1つの動き補正された予測信号を有するインター予測を用いて符号化できる。
・Bスライス:さらに、Pスライスにおいて利用可能な符号化タイプに対して、Bスライスのいくつかのマクロブロックも予測ブロック当たり2つの動き補正された予測信号を有するインター予測を用いて符号化できる。
上記の3つの符号化のタイプは、以下に説明されるような基準画像の使用を除いて、前の規格のものと非常に類似している。スライスに対する以下の2つの符号化タイプは新しい:
・SPスライス:異なるプリコードされた画像間の効率的なスイッチングが可能になるように符号化されている、いわゆるスイッチングPスライス。
・SIスライス:ランダムアクセスとエラー回復の目的のためにSPスライスにおけるマクロブロックの正確な一致を可能にするいわゆるスイッチングIスライス。
スライスは、フレキシブルなマクロブロックオーダー(FMO)を使用しない場合にラスタスキャン順に処理されるマクロブロック列である。図42に示すように、画像は1つまたはいくつかのスライスへ分割されうる。したがって、画像は1つ以上のスライスの集合である。スライスは、アクティブな列と画像パラメータ集合が与えられた場合、それらのシンタックス要素はビットストリームから解析され、スライスが表現する画像の領域内のサンプルの値は、使用される基準画像がエンコーダおよびデコーダにおいて一致していることを前提として、他のスライスからのデータを使用せずに正確に復号化されるという意味で、自己完結的である。他のスライスからのいくつかの情報がスライス境界を横切ってデブロッキングフィルタを適用するために必要とされる場合がある。
FMOは画像がスライスグループの概念を使用することによってスライスおよびマクロブロックに分割される方法を変更する。各スライスグループは、画像パラメータ集合のコンテンツとスライスヘッダからのいくつかの情報によって指定される、マクロブロックからスライスグループへのマッピングによって定義づけられるマクロブロックの集合である。このマクロブロックからスライスグループへのマッピングは画像内のマクロブロックごとのスライスグループ識別番号から成り、関連付けられたマクロブロックがどのスライスグループに属しているかを指定する。各スライスグループは、1スライスが、特定のスライスグループのマクロブロックの集合内のラスタスキャン順に処理される同じスライスグループ内のマクロブロックの列であるように、1つ以上のスライスに分割することができる(FMOが使用されていない場合は全体画像が単一のスライスグループから成るFMOのシンプルな特殊なケースと見なすことができる。)。
FMOを使用して、画像は、インターリーブされたスライス、分散したマクロブロックの割り当て、1つ以上の「前景」スライスグループ、「残留」スライスグループ、またはチェッカーボードタイプマッピングなどの多くのマクロブロックスキャンパターンに分けることができる。
各マクロブロックを、スライス符号化のタイプによって、いくつかの符号化タイプの1つへ送信することができる。すべてのスライス符号化タイプにおいて、クロマ予測とI_PCM予測モードと共にIntra_4×4またはIntra_16×16と示される以下のタイプのイントラ符号化がサポートされる。
Intra_4×4モードは、各4×4ルマブロックを個別に予測することに基づき、有意な細部を有する画像の部分の符号化によく適している。他方、Intra_16×16モードは、全体的な16×16ルマブロックの予測をし、画像の非常に平滑な領域を符号化するのにより適している。
更に、これらの2タイプのルマ予測に対して個別のクロマ予測が行われる。Intra_4×4とIntra_16x16に代わるものとして、I_PCM符号化タイプはエンコーダが予測および変換符号化プロセスを単にバイパスして、その代わりに、符号化されたサンプルの値を直接送信することを可能にする。I_PCMモードには、以下の目的を果たす:
1.I_PCMモードは、エンコーダがサンプルの値を正確に表すことを可能にする。
2.I_PCMモードは、データを大きく拡張せずに変則的な画像コンテンツの値を正確に表す方法を提供する。
3.I_PCMモードは、符号化効率に影響を与えずに、デコーダがマクロブロックに対して処理する必要があるビットの数を厳密に制限することを可能にする。
イントラ予測が変換ドメインで行われてきた従来のビデオ符号化規格(すなわちH.263+およびMPEG−4 Visual)とは対照的に、H.264/AVC規格のイントラ予測は、予測されるブロックの左および/または上の前に符号化されたブロックの近接サンプルのビンを参照することによって、空間ドメインにおいて常に実行される。これは、動き補正によりインター符号化されたマクロブロックへ伝搬する送信エラーにより環境にエラー伝搬をもたらすおそれがある。したがって、イントラ符号化された近接マクロブロックのみからの予測を可能とする制約されたイントラ符号化モードがシグナリングできる。
Intra_4×4モードを使用する場合、図43の左側に示すように、各4×4ブロックは、空間的に近接するサンプルから予測される。a〜pでラベル付けされた4×4ブロックの16個のサンプルは、A〜Qでラベル付けされた隣り合うブロック内の先に復号化されたサンプルを用いて予測される。各4×4ブロックに対して、9個の予測モードの1つを利用することができる。更に、(1つの値が4×4ブロック全体を予測するために使用される)「DC」予測に対して、図41の右側に示すように、8つの方向性予測モードが指定される。これらのモードは、様々な角度のエッジなどの画像の方向性のある構造を予測するために適している。
また、イントラマクロブロック符号化タイプに対して、様々な予測のまたは動き補正された符号化タイプは、Pマクロブロックタイプとして指定される。各Pマクロブロックタイプは、動き補正された予測に使用されるブロック形状へのマクロブロックの特定のパーティションに対応する。16×16、16×8、8×16、および8×8のサンプルのルマブロックサイズを有するパーティションはシンタックスでサポートされる。8×8のサンプルを使用するパーティションを選択した場合、8×8のパーティションごとに1つの更なるシンタックス要素が送信される。このシンタックス要素は、対応する8×8のパーティションが、8×4、4×8、または4×4のルマサンプルおよび対応するクロマサンプルのパーティションに、更に分割されるかを指定する。
各予測符号化されたM×Nのルマブロックの予測信号は、並進運動ベクトルと画像基準インデックスによって指定される、対応する基準画像の領域を移動させることによって取得される。このように、マクロブロックが4個の8×8のパーティションを使用して符号化され、各8×8のパーティションが4個の4×4のパーティションにさらに分割される場合、16個の動きベクトルの最大値を単一のPマクロブロックに対して送信することができる。
量子化パラメータSliceQPは、H.264/AVC規格の変換係数の量子化を決定するために使用される。このパラメータは52個の値を取ることができる。これらの値は、量子化パラメータが1つ増えると、量子化ステップサイズが約12%増加することを意味する(6の増加はちょうど2の因数による量子化ステップサイズの増加を意味する)ように構成される。約12%のステップサイズの変化は、おおまかに、約12%のビットレートの減少を意味することが分かる。
ブロックの量子化変換係数は一般にジグザグ方式でスキャンされ、エントロピー符号化方式を使用して送信される。クロマ成分の2×2DC係数は、ラスタスキャン順にスキャンされる。H.264/AVC規格のすべての逆変換演算は16ビット整数値の加算とビットシフト演算をのみ使用して実施することができる。同様に、16ビットのメモリアクセスだけがエンコーダにおける順方向変換と量子化プロセスの良好なインプリメンテーションに必要とされる。
図29に関して上に説明した符号化配置による図40のエントロピーエンコーダ2800。コンテクストモデラは、正規の符号化エンジンとも呼ばれるエントロピーエンコーダへコンテクストモデル、すなわち、確率情報を送信する。符号化されるビット、すなわち、ビンは、コンテクストモデラから正規の符号化エンジンへ転送される。このビン値も、コンテクストモデルの更新が得られるようにコンテクストモデラへフィードバックされる。バイパス符号化エンジンとも呼ばれるエントロピーエンコーダを含むバイパスブランチが提供される。バイパス符号化エンジンは、入力ビン値をエントロピー符号化するために演算可能である。正規の符号化エンジンに相対して、バイパス符号化エンジンは適応型符号化エンジンではなく、好ましくは、コンテクスト適応せずに一定の確率モデルとともに機能する。2つのブランチの選択はスイッチによって取得される。バイナライザデバイスは、ビンストリング、すなわち、バイナリ値のストリングを取得するために非2値化されたシンタックス要素を2値化するように演算可能である。シンタックス要素がすでにバイナリ値のシンタックス要素である場合、バイナライザはバイパスされる。
いわゆる正規の符号化モードにおいて、実際のエントロピー符号化プロセスに先立って、これもビンと称する、所与のバイナリ決定が、確率モデルが対応する選択が前に符号化されたシンタックス要素またはビンに依存しうるように選択される、コンテクストモデリングステージに入る。次に、コンテクストモデルの割当て後、ビン値はその関連するモデルとともに正規の符号化エンジンへ渡され、ここで、これに続くモデル更新とともにエントロピー符号化の最終ステージが行われる(図29を参照)。
あるいは、バイパス符号化モードが、明示的に割り当てられたモデルを使用せずに、簡素化した符号化エンジンを用いて符号化(および復号化)プロセス全体の高速化を可能にするために、選択されたビンに対して選択される。このモードは、動きベクトルや変換係数レベルの差の成分に関して、これらのシンタックス要素の1次接尾語のビンを符号化する時に特に効果的である。
以下において、3つの主要な機能的組立ブロック:2値化、コンテクストモデリング、図40のエンコーダにおけるバイナリエントロピー符号化がそれらの....とともに。
この実施例では、実施例4がさらに拡張され、図34、35、46〜49。本実施例によれば、データ値の2値化が、1次的接頭語をもたらすように、第1の2値化方式によってデータ値と所定のカットオフ値の最小値を2値化することによって実行され、データ値がカットオフ値より大きい場合、第2の2値化方式によってデータ値マイナス所定のカットオフ値の差を2値化してバイナリ接尾語を得て、ここで、第1の2値化方式は第2の2値化方式とは異なり、次に、1次接尾語を1次接頭語に付記する。
データ値はデータ値の2値化された表現から復元され、データ値の2値化された表現は第1の2値化方式によるデータ値と所定のカットオフ値の最小値の2値化である1次接頭語を有する符号語であり、データ値が所定のカットオフ値より大きい場合、1次接尾語が1次接頭語に付記され、この1次接尾語は第2の2値化方式による、データ値マイナス所定のカットオフ値の差の2値化である。この方法は、1次接頭語から最小値を抽出するステップと、最小値がカットオフ値と等しい場合は、1次接尾語からデータ値マイナス所定のカットオフ値の差を抽出するステップと、を含む。次に、所定のカットオフ値がこの差に追加されてデータ値を取得し、最小値がカットオフ値より小さい場合、この最小値がデータ値として扱われる。
符号化ビットストリームへのデータ値の符号化は、1次接頭語を得るために、第1の2値化方式によってデータ値と所定のカットオフ値の最小値を2値化するステップと、データ値がカットオフ値より大きい場合、バイナリ接尾語を得るために、第2の2値化方式によってデータ値マイナス所定のカットオフ値の差を2値化するステップと、ここで、第1の2値化方式と第2の2値化方式は異なり、次に、1次接尾語を1次接頭語に付記するステップと、を含む。次に、符号語のビットごとに、符号語のビットが1次接頭語の一部である場合、適応型可変ビット値確率予測によるビットのバイナリエントロピー符号化が、確率予測依存型の部分的ビットストリーム選択を有する上記の実施形態のいずれかによって、実行されるか、または、符号語のビットが1次接尾語の一部であれば、静的ビット値確率予測によってビットのバイナリ符号化が実行され、これによって、符号化されたビットストリームが得られる。
データ値の2値化された表現を表す符号化されたビットストリームの復号化を説明する。データ値の2値化された表現は、1次接頭語を有する符号語であり、かつ第1の2値化方式によるデータ値と所定のカットオフ値の最小値の2値化である。データ値が所定のカットオフ値より大きい場合、1次接尾語が1次接頭語に付記される。1次接尾語は、第2の2値化方式による、データ値マイナス所定のカットオフ値の差の2値化である。この方法は、符号語のビットごとに、符号語のビットが1次接頭語の一部である場合、適応型可変ビット値確率予測によって符号化されたビットストリームをバイナリエントロピー復号化することによって、すなわち、確率予測に関連付けられた部分的ビットストリームを介してビットを検索することによって、ビットを決定するステップと、符号語のビットが1次接尾語の一部である場合、静的ビット値確率予測によってビットをバイナリ復号化することによってビットを決定するステップとを含み、これにより符号語を得る。次に、最小値が1次接頭語から抽出される。最小値がカットオフ値と等しい場合、データ値マイナス所定のカットオフ値の差が1次接尾語から抽出され、所定のカットオフ値がこの差に加算されて、データ値が得られる。最小値がカットオフ値より小さい場合、この最小値がデータ値とされる。
ビデオ信号においてシンタックス要素を形成する、データ値と、特に、動きベクトル差の成分または変換係数レベルの値と、の非常に効果的な圧縮は、エントロピー符号化のためにシンタックス要素を用意するための2値化方式―この2値化方式は実質的に2つの異なる2値化方式の組合せである―を使用して、および、2値化されたシンタックス要素を符号化するためのm変数のエントロピー符号化ではなくバイナリエントロピー符号化を使用して、達成される。
元のm変数のソースアルファベットで演算するm変数のエントロピーコーダの代わりにバイナリエントロピー符号化エンジンを使用することの利点は、2つの可能なビット値に対する確率の判定がちょうど1つの確率予測値によって定義できるので、確率予測の複雑さが軽減されることである。適応型のm変数のエントロピー符号化は、m>2の場合、一般的に、確率予測の更新を行うために非常に複雑な多くの動作を必要とする計算的に複雑な演算になる。
具体的な実施形態によれば、切り捨て単項2値化方式とk番目の次数の指数ゴロム2値化方式の連結が使用される。単項/k番目の次数の指数ゴロム(UEGk)2値化と呼ばれるこの連結方式は、動きベクトル差と、変換係数レベルの絶対値と、に適用される。これらの連結された2値化方式の設計は以下の観察によって動機付けされる。まず、単項コードは実施コストの面で最もシンプルな接頭語なしのコードである。第2に、対応するツリーのノード配列が一般に、ルートノードからの内部ノードの距離が大きくなるにつれて、対応するバイナリ確率にあまり偏りが発生しないような配列なので、以降のコンテクストモデリングステージにおける個々のシンボル確率の迅速な適応を可能にする。これらの観察結果は、動きベクトルの絶対差と変換係数レベルの小さな値に対して精度が高い。大きな値に対しては、接頭語としての適応された切り捨て単項ツリーと接尾語としての静的指数ゴロム符号化ツリーを連結させるアイデアに達した適応型モデリングをあまり使用しない。一般に、上述したように、大きい値の場合、EGk接尾語部分が、観察された確率分布に対してかなり良好な適合を既に表している。
一方で、バイナライザ2102がシンタックス要素をマッピングする符号語の「ビット」またはビン間の関係、他方で「ビン」間の関係を説明するために、図44は、図46に関して後述する2値化方式に対応するバイナリ符号化ツリーを示している。全体的に参照番号3150で示される符号化ツリーは、ルートノード3152といくつかの内部ノード3154を含み、ルートノード3152と内部ノード3154は、インデックスiが対応するノードに関連付けられた整数であるCiによって指定される。これらのノードの各々は、左ブランチがビン値0に対応し、右ブランチがビン値1に対応している「ビン」と呼ばれる条件ブランチまたはバイナリ決定を定義付ける。
ツリー3150は、終端ノード3156も含む。図44において終端ノード3156に割り当てられた番号はシンタックス要素のデータ値に対応し、このデータ値は、図46の2値化方式に基づいて、ルートノード3152からそれぞれの終端ノード3156までのパスをたどるときのビットまたはビン値から得られる符号語またはビットストリングに対応している。たとえば、データ値17は、図46に示すように、符号語ビットストリング11111111111111101に対応する。パスは、ルートノード3152と内部ノード3154C2〜C17を含む。各ノード3152または3154は、「ビン」と呼ばれるバイナリ決定と見なされうる。ルートノード3152からそれぞれの終端ノード3156までのツリー3150を横断するためのバイナリ決定の連結は、対応するシンボル値またはシンタックス要素値の「ビンストリング」を表している。
各バイナリ決定は、決定がバイナリゼロ(図44において左ブランチ)とバイナリ1(図44において右ブランチ)が得られるかについての確率を示す実際の確率分布を有している。言い換えれば、バイナリ決定の実際の確率分布は、このバイナリ決定時に、シンタックス要素パスがゼロまたは1ブランチを取ることの確率を定義付ける。したがって、あるデータ値を仮定するためのシンタックス要素に対する実際の確率は、ルートノード3152から各終端ノード3156までのパスに沿って配置されたノードにおけるそれぞれの確率の積と等しい。
バイナリエントロピー符号化の場合、ツリー3150の各バイナリ決定またはノード3152、3154、すなわち、各ビンは、ビット値確率予測またはコンテクストモデルすなわちCiに関連付けられている。以下により詳細に記載されているように、ノードまたはビンの全てが適応確率予測モデルに関連付けられているわけではなく、静的な確率予測に関連付けられてもよいことから、コンテクストモデリングオーバーヘッド、すなわち、圧縮率を高めるために過去のビンに応じて予測を適応させるための管理が削減される。
次に、図45では、本発明の一実施形態による2値化方式の実施形態を説明する。図45は、バイナライザ3102が非バイナリ値化されたシンタックス要素上で実行するステップを概略的に示している。具体的には、図45は、変換係数レベルの絶対値、すなわち、変換係数値の計算のためのスケーリングに先立つ復号化プロセスにおける特に2次元の頻度インデックスに関連付けられた値を表す整数量、を2値化するための実施形態である。
図45の2値化方式は、一方で切り捨て単項2値化方式、他方でk番目の次数の指数ゴロム2値化方式を連結したものである。切り捨て単項2値化方式は単項2値化方式を基礎としている。単項2値化方式に基づいて、ゼロと等しいかゼロより大きい各符号なしの整数値シンボルxに対して、xがマッピングされる単項符号語は、x個の「1」のビットプラス終端「0」ビットから成る。単項2値化方式とは異なり、切り捨て単項(TU)コードは、x<Sに対してコードが単項コードによって与えられる、0≦X≦Sのxに対してのみ定義付けられ、x=Sの場合、x=SのTUコードが終端ビット「0」なしのx個の「1」ビットのみから成る符号語により付与されるように、終端「0」ビットは無視される。指数ゴロム2値化方式によれば、一般に、データ値xは接頭語と接尾語から成る符号語にマッピングされる。より正確には、k番目の次数の指数ゴロム2値化方式によれば、データ値は、少なくとも接頭語を有し、データ値によっては接尾語も有する符号語にマッピングされる。EGk符号語の接頭部は、
である値l(x)に対応する単項コードから成り、kはコードの次数を示し、
は実値rより小さいかこれと等しい最大整数である。EGkの接尾部は、k+l(x)の有意ビットを使用して、x+2k(1−2l(x))のバイナリ表現として計算される。
図45からわかるように、2値化される絶対データ値xは、xとSの最小値を決定するために、3200において、カットオフ値Sと比較される。Sは、排他的に、すなわち残留値に対してゴロム2値化方式を使用せずに、切り捨て単項符号を使用して、絶対データ値xを定義付けるカットオフ値である。言い換えれば、カットオフ値S未満の全ての絶対データ値xに対して、絶対データ値xを符号語にマッピングするために、切り捨て単項2値化が専ら使用され、この符号語はしたがって1次接頭語のみから成る。絶対データ値xがSより大きいまたはSと等しい場合、1次接尾語が1次接頭語に付記される。後述するように、1次接尾語はx−Sからのゼロ次数の指数ゴロム2値化方式に基づいて作成される。
3202においてxとSの間の最小値は切り捨て単項2値化方式に基づいて2値化される。結果は、xがマッピングされる最終符号語3206の少なくとも一部を構成する、1次接頭語204である。1次接頭語はこのようにMin(S、Abs(x))の値の単項2値化からなり、ここで、Min(a、b)は値aとbの最小値を示し、Abs(x)はxの絶対値を示している。言い換えれば、1次接頭語は、xがSより大きいかまたはこれと等しい場合、S個の1から成り、xがSより小さい場合、終端ゼロが後に続くx個の先頭の1から成る。
3208において絶対データ値xはカットオフ値Sと比較される。この比較によってxがSより小さい場合、2値化は3210で終了し、したがって、絶対データ値xが図45の2値化方式に基づいてマッピングされる符号語3206は1次接頭語3204のみからなる。それ以外の場合、すなわち、xがSと等しいかまたはSより大きい場合、3212において、カットオフ値Sは絶対データ値xから減算される。xマイナスSによって得られる差分値は、残留値と呼ばれることもあり、3214において、kがゼロと等しい、k番目の次数の指数ゴロム2値化方式に基づいて処理される。k番目の次数の指数ゴロム2値化方式は、図48に関してより詳細に後述される。
「xマイナスS」の差の2値化3214の結果は、1次接尾語3208として1次接頭語3204に付記される。したがって、絶対データ値xがカットオフ値Sより大きいかまたはこれと等しい場合、得られる符号語206は、1次接尾語3208が後に続く1次接頭語3204から成り、ここで、1次接尾語3208は、x−Sのk番目の次数の指数ゴロム2値化である。以下の説明から明らかなように、1次接尾語3208自体は、これ以降、2次接頭語3218と2次接尾語3220と呼ばれる、接頭語と接尾語から成っている。
実験的研究は、変換係数レベルの絶対値に対して、S=14、k=0が、1次接頭語の一部である符号語3206のビットだけが適応型確率モデルを用いてエントロピー符号化されても、このような2値化された変換係数レベル値をバイナリエントロピーコーダへ渡す場合、相対的に良好な圧縮比率を提供し、よって、符号化オーバーヘッドを削減することができることを示した。
図46は、左列3215内の変換係数レベルの絶対値を、S=14およびk=0であるときの図45の3252の右側の2値化に基づく対応する符号語とともに一覧にした表を示す。ゼロ値化された、すなわち、非有意変換係数レベルが上述した有意性マップを用いて符号化されるので、2値化とこれに続く符号化プロセスはシンタックス要素「変換係数レベル値マイナス1」に適用されることに留意されたい。したがって、図45に関して、図46の表の3250には、xプラス1の値が一覧にされている。図46の表は、値S=14、k=0であるときの図45の2値化方式の結果を示している。
図に示すように、絶対値がマッピングされる符号語またはビンストリングは、少なくともTU接頭語を含み、符号語またはビンストリングのTU接頭部分は、図46の3254において強調されている。図示したように、15(=x+1)未満の絶対値は3256で示すようにEG0接尾語を有さない。また、点線3258で示すように、各EG0接尾語3256は、点線3258の左側にある2次接頭語を含み、絶対値15に属する符号語の1つを除いて、すべてのEG0接尾語3256は、点線3258の右側に配置された2次接尾語を含む。
図46と同様に、図47は、k=3、S=9であるときに図45の2値化方式に基づいて取得される絶対値とビンストリングのペアの表を示している。図46の要素と同じ図47の表の要素には図46と同じ参照番号が付され、これらの要素の反復説明は省略する。符号ビットは図47の表に示されていない。
図47に基づく2値化方式によるkおよびSに対する値は、動きベクトルの差分の絶対成分に適用された場合、良好な圧縮効果を示した。動きベクトルの差分に対して、図47に示すUEGk2値化は以下のように構成される。動きベクトル成分の値mvdが与えられるとする。UEGkビンストリングの接頭部に対して、TU2値化(図45の3202)は、カットオフ値S=9を有するmvdの絶対値を使用して引き出される。mvdがゼロと等しい場合、ビンストリングは接頭語符号語「0」、270のみから構成される。条件|mvd|≧9に従う場合(図45の3208)、接尾語は、符号mvdが負のmvdに対しては符号ビット「1」(図示しない)を用いて付記され、それ以外の場合は符号ビット「0」(図示しない)が付記される、|mvd|−9の値に対するEG3符号語として構成される(図45の3214)。0<|mvd|<9ときのmvd値に対して、接尾語は符号ビットのみから構成される。
動きベクトル差の成分が4分の1のサンプル精度における予測誤差を表すと仮定すると、接頭部分は+/−2のサンプルの最大誤差成分に常に対応している。指数ゴロムパラメータk=3を選択した場合、接尾符号語は、2つのサンプルの単位で予測誤差の幾何学的な増加が対応する接尾符号語長さの線形増加によってキャプチャされるように、与えられる。
図45〜図47に関して図29におけるバイナライザ3102の機能性を大まかに説明してきたが、図45におけるk番目の次数の指数ゴロム2値化3214に対する可能なインプリメンテーションを図48に関してより詳細に説明する。図48は、図45の2値化方式に基づいて絶対データ値xの2値化を表す符号語の1次接尾部分を構成するプロセスを示す擬似Cコードを示す。まず、ステップ3300において、補助パラメータkが、使用される指数ゴロム2値化の次数に初期化される。図47に基づく動きベクトル差の成分の2値化の場合、たとえば、ステップ3300において、kは3の値に初期化される。
動きベクトル差(mvd)の絶対値とここでは9のカットオフ値との比較をライン3302において行い、mvdの絶対値が9より大きいかまたは9と等しいことが分かった場合、ステップ3304において、sufSに取得するためにmvdの絶対値からカットオフ値S=9が減算される。また、ステップ3306において、パラメータstopLoopがゼロの値に初期化される。次に、3308において、stopLoopパラメータは、ライン310においてチェックされるように、その値を0より大きい正の値へ変更しない限り、条件ifの演算が実行される。条件ifの演算によってsufSがk番目の2の指数(312d)より大きいかこれと等しいことが分かった場合、3312において、ビット値1を有するビットが出力され(3312a)、k番目の2の指数がsufSから減算され(3312b)、kが増分される(3312c)。それ以外の場合、つまりsufSがk番目の2の指数より小さい場合(3312e)、ゼロのビット値を有するビットが出力され(3312f)、kの実際の値(3312g)と等しい多数のビットを使用したsufSのバイナリ表現が出力され(3312h)、パラメータstopLoopが1の値に設定され(3312e)、これにより、条件if演算3308の反復実行3308を停止する結果になる。
3304〜3312の全ステップは、ステップ3302の比較によってmvdの絶対値が9より大きいかこれと等しいことが分かった場合に、実行される。3302の比較とは無関係に、3314において、mvdがゼロより大きい場合、ゼロの符号ビットが出力され、mvdがゼロより小さい場合、1の符号ビットが出力される。符号ビットは図47に示されていない。
図48の擬似Cコードから明らかであるように、3番目の次数の指数ゴロム2値化方式の場合、図47にも示されるように、接尾部分は、1つが3312fのゼロビットであり、他の3つが3312hにおけるバイナリ表現出力のビットである4ビットを少なくとも含み、各符号語の末尾の符号ビットは無視される。
本発明の実施形態によるエンコーダサイドにおける2値化とエントロピー符号化について説明してきたが、図49は、エントロピー符号化されたビットストリームを復号化するためにデコーダサイドで実行される本発明の一実施形態にとしてのステップを示す。
まず、ステップ3400において、エントロピー符号化されたビットストリームを受信するデコーダは、符号化されたビットストリームから判定される次のビンまたはビットが1次接頭語ビットまたは1次接尾語ビットであるかどうかを決定する。デコーダは、予想される次のビンまたはビットが、2値化されたシンタックス要素の1次接頭語または1次接尾語のビットであるかどうかについて、エントロピー符号化されたビットストリームの所定のシンタックスやり方から知っている。
ステップ3400で、予想されるビットが1次接頭語のビットであると判定された場合、デコーダは適応可能に変化する確率予測またはコンテクストモデルに基づくバイナリエントロピー復号化によってこのビットに対するビット値を決定する。つまり、デコーダは、選択するためにそれぞれの確率予測を使用して、上に説明したそれぞれの部分的ビットストリームを選択する。デコーダは、それぞれのコンテクストモデルタイプによって示される過去の復号化されたビンに基づいてこの適応可能に変化する確率予測を更新する。
ビットが1次接尾語のビットである場合、3403において、次のビットまたはビン値が静的な確率モデルに基づくエントロピー復号化を行うことによって決定される。これは、実際のビットを含むビンに対して符号語を1:1でマッピングすることを含みうる。
符号語全体のビットに対してビット値を達成するためのビットが残っている場合、デコーダは、3408において、ステップ3400から3404を反復する。ステップ3408においてビットが残っていない場合、復号化プロセスはステップ3410において終了する。シンタックス要素が絶対変換係数レベルマイナス1である場合に図44に示した符号化ツリーなどのそれぞれの2値化符号ツリーの後に続くことによって、デコーダは、シンタックス要素のバイナリ表現が終了した時、すなわち、復号化されたビットが実際のシンタックス要素の最後のビットであるか、を知ることができる。
図50は、図49のプロセスによって取得される符号語から、符号語に2値化されたデータ値を復元するプロセスを示している。図49のプロセスによって取得されるビット値はビットストリーム3450を形成する。上に説明したように、デコーダは、新しい符号語がビットストリーム3450上にくる時を知ることができ、新しい符号語のインスタンスは信号3452によって表わされる。
ステップ3454の最小値抽出ステップにおいて、値mが符号語の1次接頭語の先頭の符号語をカウントすることによりバイナリ符号語から抽出される。このカウントはmと等しい。ステップ3456においてmとSがチェックされ、mがSと等しい場合(デコーダはどのシンタックス要素がどの2値化方式によって符号化されるかを知っているので、Sの値をデコーダは知っている)、ステップ3458の差分抽出ステップにおいて、ビットストリーム3450からの1次接頭語のビットに続くビットを受信し、これらのビットは符号語の1次接尾部分を形成する。ステップ3458の差分抽出ステップにおいて、復元されるデータ値xとカットオフ値Sとの差は、ビットストリーム3450の符号語の1次接尾語から復元される。
ステップ3460において、Sはステップ3358で復元された差x−Sに加算され、実際に符号化されたシンタックス要素に対する値である、値xを得る。
最小値抽出ステップ454を示す擬似Cコードの例は次のようになる:
m=−1; /計数パラメータを初期化し
for(b=0;(b−1);m++){ /の先頭ビットをビット単位で読み出し
b=read_bits(1); /符号語、各読出しの前に
if(m=S) /実際までに、kを増分し
b=0; /読出したビットがゼロまたはm=S
}
差分抽出ステップ3458によって実行されるサブステップは、図51に示されている。ステップ3500において、差分抽出部は、値mを取得するために1次接尾語の先頭ビットをカウントする。次に、ステップ3502において、モーデョンベクトルの差が3であり、変換係数レベルの値が0である、kが、ゼロと比較される。ステップ3504において、kがゼロと等しい場合、ステップ3504において、mはゼロと比較される。この比較において、m=0の場合、ステップ3506において、データ値xが、モーションベクトルの差の場合に9であり、変換係数レベルの場合に14である、カットオフ値Sと等しいことが推測される。
kはゼロと等しくないおよび/またはmがゼロと等しくない場合、ステップ3508において、次のkプラスmの後続ビットがビットストリーム3450、すなわち、2次接頭語の終端ビットに続くビットから、読み出される。よって、バイナリ(k+m)ビット長さの表現として、A=x−S+2k(1−2m)が達成される。この等式から容易に求められるように、m=0の場合、A=x−Sである。
ステップ3510においてmを0と比較し、m=0であることが判明した場合、バイナリ表現Aから2k(1−2m)の値を減算してx−Sの値を得る。
この例において、実施例4はさらに拡張され、図34、35、36、37a、b、39、45、46〜49が適用される。本実施例において、プリコードされたビデオ信号に含まれるシンタックス要素に対する符号化方式が提供され、この方式はより高い圧縮効果を可能にする。
プリコードされたビデオ信号に含まれるシンタックス要素を符号化ビットストリームへ符号化するための方法が説明される。プリコードされたビデオ信号は少なくとも1つのビデオフレームを表し、このシンタックス要素はビデオフレームの所定の部分に関連付けられかつこのビデオフレームの所定の部分が1次または2次のいずれの方法でプリコードされたビデオ信号へプリコードされるかを示しており、この方法は、バイナリ値を取得するために、所定の部分に近接するビデオフレームの近接部分が第1の方法でプリコードされるかまたは第2の方法においてプリコードされるかを調査するステップと、このバイナリ値に基づいてビデオフレームの所定の部分へ少なくとも2つのコンテクストモデルの1つを割り当てるステップを含み、各コンテクストモデルは異なる確率予測に関連付けられる。最終的に、シンボル列の符号化は上記の実施形態のいずれかに基づいて行われ、少なくとも1つのシンボルはシンタックス要素の表現に関連している。この割当部は、それぞれのシンボルに割り当てられたコンテクストに関連付けられた確率分布予測に基づいてそれぞれのシンボルに対して確率分布の予測に対する測度を求めるように構成されている。これによって、選択部はそれぞれのエントロピーコーダを選択する。
本発明の第2の態様によれば、この態様は、符号化されたビットストリームからシンタックス要素を復号化するための方法によって達成される。このシンタックス要素はプリコードされたビデオ信号内に含まれており、このプリコードされたビデオ信号は少なくとも1つのビデオフレームを表し、このシンタックス要素はビデオフレームの所定の部分に関連付けられかつこのビデオフレームの所定の部分が第1または第2のいずれの方法でプリコードされたビデオ信号へプリコードされるかを示しており、この方法は、バイナリ値を取得するために、所定の部分に近接するビデオフレームの近接部分が第1の方法でプリコードされるかまたは第2の方法でプリコードされるかを調査するステップと、このバイナリ値に基づいてビデオフレームの所定の部分へ少なくとも2つのコンテクストモデルの1つを割り当てるステップを含み、各コンテクストモデルは異なる確率予測に関連付けられ、上記実施形態のいずれかに基づいて少なくとも1つのシンボルがシンタックス要素の表現に関連しているシンボル列の復元が実行される。この割当部は、それぞれのシンボルに割り当てられたコンテクストに関連付けられた確率分布予測に基づいてそれぞれのシンボルに対して確率分布の予測に対する測度を求めるように構成されている。これによって、選択部はそれぞれのエントロピーデコーダを選択する。
本実施例は、プリコードされたビデオ信号の符号化圧縮率がより高いであろうという発見に基づいている。ビデオフレームや画像の所定の部分に関連付けられかつビデオフレームの所定部分が第1または第2の方法のいずれによってプリコードされるかを示すシンタックス要素、すなわち、コントロール情報シンタックス要素が少なくとも2つのコンテクストモデルの1つに割り当てられる時、この割当ては、第1または第2の方法でプリコードされたビデオフレームの近接する部分に依存している。次に、シンタックス要素は、1つのコンテクストモデルが関連付けられた確率予測に基づいて符号化されたビットストリームへエントロピー符号化されうる。この測度によって、シンタックス要素の実際のまたは真の確率分布が同じタイプであるがビデオフレームの近接部分に関連付けられるシンタックス要素に依存することが利用され、実際の確率分布がより正確に近似され得る。
したがって、より正確に調整可能な確率予測によって、プリコードされたビデオ信号に対する符号化されたビットストリームの圧縮率を上昇させることができうることは本発明の利点である。
言い換えれば、本発明の一実施形態によれば、特定のタイプのシンタックス要素は、これがプリコードされたビデオ信号において出現するたびに少なくとも2つのコンテクストモデルのうちの異なる1つずつに割り当てられる。このコンテクストモデルの選択は、シンタックス要素が出現するたびに実行され、ビデオフレームの近接する部分が第1または第2のいずれの方法でプリコードされるかに依存している。実際には、この測度によって、プリコードされたビデオ信号に出現するこのタイプのすべてのシンタックス要素はいくつかのコンテクストモデルのグループにグループ化され、各シンタックス要素は1つのコンテクストモデルグループに属しており、各コンテクストモデルグループはコンテクストモデルの異なる1つに割り当てられ、かつ各コンテクストモデルは異なる確率予測に関連付けられる。したがって、各グループは、異なる確率予測に基づいてエントロピー符号化され、すなわち、その確率予測が割り当てられるコンテクストモデルに属している。
本発明の他の実施形態によれば、各コンテクストモデルの確率予測は前に符号化されたシンタックス要素に適応され、この適応はコンテクストモデルごとに個別に実行される。言い換えれば、エントロピー符号化されたばかりの各シンタックス要素が、このシンタックス要素が割り当てられるコンテクストモデルの確率予測を適応させるために使用される。したがって、同じタイプでありかつ同じコンテクストモデルに割り当てられた後に続くシンタックス要素は、適応された確率予測によってエントロピー符号化される。この測度によって、コンテクストモデルは互いから独立して適応されまたは管理されるので、適応に撚り実際のまたは真の確率予測に対するより良好な近似が得られ、これによってより良好な圧縮率が得られる。
本発明の具体的な実施形態によれば、空間依存性コンテクストモデルの選択はプリコードされたビデオ信号においてフレーム/フィールド符号化モードのフラグを符号化するために使用される。このフレーム/フィールド符号化モードのフラグは、それぞれのビデオフレーム部分がフレームまたはフィールド符号化のいずれのモードで符号化されるかどうかを示している。より正確には、本実施形態によれば、ビデオフレームはインターレースされたフレームであり、その画像サンプルの一部は1つの時刻でキャプチャされるが他の画像サンプルは他の時刻でキャプチャされ、この第1の画像サンプルは第1のフィールドと称され、第2の画像サンプルは第2のフィールドと称される。また、ビデオフレームは各々が2つのマクロブロックから成る、複数のマクロブロック対のアレイへ空間的に分割される。フィールドモードで符号化される場合、マクロブロック対内の1つのマクロブロックは第1のフィールドの画像サンプルまたは第2のフィールドの画像サンプルを含むのみであるが、そのマクロブロック対の他のマクロブロックはマクロブロック対内の他のフィールドの画像サンプルを含むかまたは表している。フレームモードで符号化される場合、マクロブロックは第1と第2のフィールド画像サンプルの両方、具体的には、マクロブロック対内に空間的にトップまたはボトムマクロブロックを含むが、同じマクロブロック対の他のマクロブロックはマクロブロック対内の他の画像サンプルを表している。
シンタックス要素mb_field_decoding_flagに関して、以下により詳細に説明するように、ステージ2100aから渡されたビンにおいて同じビンまたは同じシンタックス要素が数回出現する場合、このシンタックス要素は前に入ってくるかまたは前にエントロピー符号化されたビンに基づいて異なるコンテクストモデルに割り当てられる。
符号化配置2100の演算について説明してきたが、以下では、本発明の実施形態によるシンタックス要素mb_field_decoding_flagの取り扱いに関してその機能についてより詳細に説明する。このため、まず、図30〜31bに関して、このフラグの意味を説明する。
さて、割当ては、マクロブロック対またはマクロブロック対のマクロブロックがプリコーダ2012によって符号化されるモードに依存しており、プリコータ4012によって出力されるプリコードされたビデオ信号に含まれるシンタックス要素mb_field_decoding_flagの機能および意味を説明するために、ここでも、図28を参照する。
―プリコーダ4012がインターレースされたビデオフレームを表すビデオ信号を受信すると、プリコーダ4012は、ビデオフレーム4010を符号化する時に以下の決定を自在に行うことができる。
―プリコーダは、1つの単一符号化フレームとしてこれらを符号化するために2つのフィールドを結合し、これにより、各マクロブロック対と各マクロブロックはフレームモードで符号化されうる。
―あるいは、2つのフィールドを結合して、これらを個別の符号化されたフィールドとして符号化し、これにより各マクロブロック対と各マクロブロックはフィールドモードで符号化されうる。
最後のオプションとして、2つのフィールドを結合してこれらを単一フレームとして圧縮するが、このフレームを符号化する際、マクロブロック対を符号化する前に、マクロブロック対を2つのフィールドマクロブロックの対かまたは2つのフレームマクロブロックの対のいずれかに分割する。
3つのオプションからの選択は列内のフレームごとに適応可能に行うことができる。最初の2つのオプションからの選択は画像適応型フレーム/フィールド(PAFF)符号化と呼ばれる。フレームが2つのフィールドとして符号化される場合、各フィールドはマクロブロックに分割され、フレームに非常に類似した方法で符号化される。
フレームが、いくつかの領域が移動するが、他が移動しない混合領域から成る場合、一般に、フレームモードでは非移動領域を符号化し、移動領域をフィールドモードで符号化することがより効率的である。したがって、フレーム/フィールド符号化はフレーム内のマクロブロックの縦の対ごとに個別に決定することができる。これは、上に示したオプションの第3の符号化のオプションである。この符号化オプションはマクロブロック適応型フレーム/フィールド(MBAFF)符号化と呼ばれている。以下に、プリコーダ4012がこのオプションだけを使用する決定をしたと想定する。上述のように、MBAFF符号化は、符号化モードタイプ(フィールドまたはフレームモード)をシーンの各領域へより良好に適応させることを可能にする。たとえば、プリコーダ4012は、フレームモードにおいてビデオシーンの固定領域に配置されているマクロブロック対を符号化する一方、フィールドモードにおいて速い動きを示すシーンの領域内のマクロブロック対を符号化する。
上述のように、フレームモードで符号化されたマクロブロック対に対して、各マクロブロックはフレームラインを含む。フィールドモードで符号化されたマクロブロック対に対して、トップマクロブロックはトップフィールドラインを含み、ボトムマクロブロックはボトムフィールドラインを含む。マクロブロック対ごとのフレーム/フィールドは、プリコーダ4012によってマクロブロック対レベルで決定される。すなわち、トップマクロブロックがフィールド符号化される場合、これが、同じマクロブロック対内にあるボトムマクロブロックにも適用される。この測度によって、基本的なマクロブロック処理構造がそのまま維持されており、動き補正領域はマクロブロックと同サイズにすることが許可される。
フィールドマクロブロック対の各マクロブロックはPAFF符号化のフィールド内のマクロブロックに非常に同様に処理される。しかし、フィールドとフレームのマクロブロック対の混合がMBAFFフレーム内で出現することもあるので、この混合を説明にするためにPAFF符号化と比較した場合、動きベクトルの予測、イントラ予測モードの予測、イントラフレームサンプル予測、エントロピー符号化におけるデブロックフィルタリングおよびコンテクストモデリング、および変換係数のジグザグスキャンなどの、プリコーダ4012におけるプリコード手順のいくつかの工程が変更される。
要約すると、プリコーダ4012によって出力されるプリコードされたビデオ信号は、使用を決定した符号化プリコーダ4012のタイプに依存する。本明細書で想定されるように、MBAFF符号化の場合、プリコードされたビデオ信号は、スキップされなかったマクロブロック対の各々に対して、フラグmb_field_decoding_flagを含む。フラグmb_field_decoding_flagは、各マクロブロック対に対して、対応するマクロブロックがフレームまたはフィールド符号化モードのいずれで符号化されるかということに属していることを示す。デコーダサイドにおいて、このフラグはプリコードされたビデオ信号を正確に復号化するために必要とされる。マクロブロック対のマクロブロックがフレームモードで符号化される場合、フラグmb_field_decoding_flagはゼロであり、他の場合においてこのフラグは1である。
さて、図29の元のデコーダの配置の一般的な動作モードを特別なビンに言及せずに説明したが、図52では、フラグmb_field_decoding_flagのバイナリエントロピー符号化に関して、この配置の機能性を説明する。
図52に示すプロセスは、フラグmb_field_decoding_flagがコンテクストモデラ4112の入力に到達した時点でスタートする。第1のステップ4300において、コンテクストモデラ4112は、入ってくるシンタックス要素またはビンがmb_field_decoding_flagであるかどうかを判定する。そうでない場合は、コンテクストモデラ4112は、ステップ302において手順またはサブルーチンを取り扱う別のシンタックス要素へ切り替える。入ってくるビンがmb_field_decoding_flagである場合、ステップ304において、コンテクストモデラ4112はフラグがどのコンテクストモデルに属するかを判定する。
ステップ4304を図53においてより詳細に示す。現在のmb_field_decoding_flagに対応するコンテクストモデルを決定するとき、コンテクストモデラ4112は、ステップ4306において、現在のマクロブロック対の左と上のマクロブロック対のトップマクロブロックのアドレスを最初に計算する。
次のステップ4308および4309において、コンテクストモデラ4112は、現在のマクロブロック対の左と上のマクロブロック対それぞれのトップマクロブロックの利用可能性を判断する。ステップ4308において、mbAddrAが0より小さい場合、左の近接するマクロブロックAは利用可能であるとマークされる。これは、ステップ4309のmbAddrBについても同様に適用される。したがって、NがAまたはBのいずれかであるMbAddrNは、マクロブロック対が実際に存在する場合、それぞれの近接するマクロブロック対のトップマクロブロックのアドレスであると同時に、それぞれの近接マクロブロック対AおよびBそれぞれの利用可能性の状態を示す。
代替実施形態において、上記の条件のほかに以下:「アドレスmbAddrNを有するマクロブロックが現在のスライスと同じスライスに属する」の条件が真である場合、マクロブロックAまたはBは利用可能であるとマークされるのみである。
ステップ4308/4309において、NがAまたはBのいずれかであるマクロブロックNが利用可能であるとマークされた場合、ステップ4310とステップ4311のそれぞれにおいて、マクロブロックN(NはAまたはBと等しい)がフィールドモードで符号化されたマクロブロックであるかまたはフレームモードで符号化されたマクロブロックであるかが判定される。マクロブロックAがフィールドモードで符号化される場合、ステップ4312においてフラグcondTermflagAは1に設定される。これはマクロブロックBにも同様に適用され、マクロブロックBがフィールドモードで符号化される場合、ステップ4313においてcondTermflagBは1に設定される。全ての他のケースにおいて、すなわち、mbAddrAが0より小さい(4308)またはマクロブロックAがフレームモードで符号化される場合(4310)、ステップ4314において、フラグcondTermFlagAは0に設定される。したがって、mbAddrBが0より小さい(4309)またはマクロブロックBがフレームモードで符号化される場合(4311)、ステップ4315において、フラグcondTermFlagBは0に設定される。
ステップ4316において、condTermFlagAとcondTermFlagBがコンテクストモデラ4112によって使用されて、mb_field_decoding_flagのバイナリエントロピー符号化に使用される確率モデルを示すコンテクストインデックスctxIdxMbFieldを計算する。具体的には、コンテクストモデラは、
ctxIdxMbField=condTermFlagA+condTermFlagB
を計算し、多数の{0、1、2}が得られる。
図52に戻って、ステップ4304の判定の後、コンテクストモデラ4112は、正規の符号化エンジン4118へmb_field_decoding_flagと共にctxIdxMbFieldによってインデックス付けされた変数ctxIdxMbField(コンテクストインデックスマクロブロックフィールド)または確率予測状態を渡し、次に、上記した実施形態のいずれかに基づいて構築される。すなわち、上記の実施形態の割当部は、ステップ4304において決定されたコンテクストを介して決定された確率に基づいて部分的ビットストリームを選択するためのパラメータを設定すると、選択部はそれぞれの部分的ビットストリームパスへctxIdxMbFieldのビンを送る。ステップ4318において、フラグmb_field_は、次に、ctxIdxMbFieldによりインデックス付けされるコンテクストモデルの現在の確率状態に基づいて選択されたそれぞれの部分的ビットストリームに符号化される。
その後、正規の符号化エンジン4118は、パス4117を経由してmb_field_decoding_flagのビン値をパスしてコンテクストモデラ4112へ戻す。そして、コンテクストモデラ4112は、ステップ4320において、その確率予測状態に関して、ctxIdxMbFieldによりインデックス付けされたコンテクストモデルを適応させる。その後、出力4124におけるフラグmb_field_decoding_flagのビットストリームへの符号化のプロセスは、4322で終了する。
図54はエントロピーデコーダ4400によって実行される復号化プロセスをより詳細に示す。まず、ステップ4500において、デコーダ4400は、復号化する次のビンがmb_field_decoding_flagであるかどうかをチェックする。そうでない場合、ステップ4502において、デコーダ400は、他のビンハンドリングプロセス(図示しない)へ切り替える。肯定の場合、ステップ4504において、デコーダ4400は、フラグが属するコンテクストモデルを決定する。ステップ4504は、符号化プロセスにおけるステップ4304と同様に、または図53に示すように実行される。
次に、ステップ4506において、実際のビン、すなわち、mb_field_decoding_flagは、ステップ4504で得られたctxIdxMbFieldによってインデックス付けされたコンテクストモデルの実際の確率状態を使用してインデックス付けすることによってそれぞれの部分的ビットストリームエントロピーデコーダから得られる。このステップの結果は、mb_field_decoding_flagに対する値である。その後、ステップ4508において、ctxIdxMbField確率状態は、ステップ4320と同様に、適応または更新される。その後、ステップ4510においてプロセスは終了する。
ステップ4504における判定により、マクロブロックがマクロブロックAとBのフラグmb_field_decoding_flag(図22)が既に前にプリコードされていることを保証する適切な順でプリコードされたビデオ信号を介してステップ実行されるので、同じインデックスctxIdxMbFieldが得られる。したがって、コンテクストモデルは、ステップ4504において、エンコーダサイドのケースと同じく、近接マクロブロックの前に復号化されたフラグmb_field_decoding_flagに基づいて推論される。
上記の実施例は、マクロブロックまたはマクロブロック対のフレーム/フィールドモード符号化を示すフラグに限定されないことに留意されたい。むしろ、上記の説明は、他のシンタックス要素にも適用することができる。
ステップ4310に関して、以下に留意されたい。通常、マクロブロックはプリコードされたビデオ信号に符号化される。にもかかわらず、たとえば、このマクロブロックの対応する変換係数レベルはすべてある量子化しきい値よりも小さいので、マクロブロックは符号化またはスキップされないということがある。したがって、いくつかのマクロブロックに対して、利用可能なmb_field_decoding_flagが存在しない。よって、後者がスキップされたものである場合、ステップ4310は、それぞれの近接マクロブロックのmb_field_decoding_flagを単に調査しただけでは実行できない可能性がある。mb_field_decoding_flagが(図22のAまたはBを含む)近接マクロブロック対のいずれかのマクロブロックに対して存在しない場合(ボトムマクロブロックがmb_field_decoding_flagを有する場合、このマクロブロックがAまたはBのmb_field_decoding_flagとなるように選択される)、以下が適用される(Aを含むマクロブロック対が欠落していると想定される):
・同じスライス内の(Aの)左に近接マクロブロック対が存在する場合、(Aの)mb_field_decoding_flagの値は(Aを含む)現在のマクロブロック対の左の近接マクロブロック対に対するmb_field_decoding_flagの値と等しいと推論されるべきである。
・同じスライス内の(Aの)左に近接マクロブロック対が存在しないが、同じスライス内の(Aの)上に近接マクロブロック対が存在する場合、(Aの)mb_field_decoding_flagの値は(Aを含む)現在のマクロブロック対の上の近接マクロブロック対のmb_field_decoding_flagの値と等しいと推論されるべきである。
・それ以外の場合((Aを含む)現在のマクロブロック対の左にも上にも近接マクロブロック対が存在しない場合)、(Aの)mb_field_decoding_flagの値はゼロと等しいと推論されるべきである。
言うまでもなく、上記のステップは単にAからBに切り替えることによって、トップマクロブロックBにも適用される。
さらに、mb_field_decoding_flagをエントロピー符号化するためのコンテクストモデルを決定するために、図22および34に関して説明した近接関係以外の近接関係を使用してもよい。
さらに、すでに述べたように、上記実施形態はまた、他のコントロールシンタックス要素や他のビンにも適用可能である。また、本発明はバイナリエントロピー符号化に限定されず、他のシンボルエントロピー符号化にも適用できる。さらに、スライス、マクロブロック対、マクロブロック、画像素子等へのビデオフレームへの分割は例示目的のためだけになされており、本発明の範囲をこの特殊なケースに限定することを意図していない。
この例において、実施例4はさらに拡張され、図34、35、36、37a、b、39、45、46〜49が適用される。実施例7によれば、ビデオフレームや画像を符号化する方法は、第1のタイプの部分および第2のタイプの部分においてビデオフレームや画像を分割するステップであって、第1のタイプの部分は第1のスキャンパターンに関連付けられ、第2のタイプの部分は第1のスキャンパターンとは異なる第2のスキャンパターンに関連付けられるステップと、ビデオフレームや画像の所定の部分に対応するデータを変換係数の2次元アレイへ変換するステップであって、スキャン順序は所定部分のスキャンパターンによって変換係数の中で定義づけられ、スキャン順序は各変換係数を一意のスキャン位置を割り当てるステップと、変換データユニットを得るために所定の変換係数をプリコードするステップと、所定の部分が第1または第2のスキャンパターンに関連付けられるタイプの部分であるかどうかに従って、コンテクストモデルの第1及び第2の集合の1つを選択するステップであって、第1と第2の集合は互いに異なっている、ステップと、所定の変換係数に割り当てられたスキャン位置に基づいてコンテクストモデルの第1および第2の集合の選択された1つのコンテクストモデルを変換データユニットへ割り当てるステップであって、各コンテクストモデルは異なる確率予測に関連付けられるステップと、割り当てられたコンテクストモデルが上記の実施形態のいずれかを使用して関連付けられる確率予測に基づいて変換データユニットまたはこのサブユニットを符号化されたビットストリームへ符号化するステップと、を含む。
実施例7によれば、符号化されたビットストリームから変換データユニットまたはそのサブユニットを復号化することを説明しており、この変換データユニットは、ビデオフレームまたは画像の複数の部分のうちの所定の部分に対応するデータの変換の結果である変換係数の所定の変換係数のプリコードされたバージョンであり、これらの部分は第1のスキャンパターンに関連付けられた第1のタイプの部分または第2のスキャンパターンに関連付けられた第2のタイプの部分のいずれかであり、この方法は、所定の部分が第1または第2のいずれのスキャンパターンに関連付けられているタイプの部分であるかに基づいて、コンテクストモデルの第1と第2の集合のいずれか1つを選択するステップであって、第1の集合と第2の集合は互いに異なっているステップと、所定の変換係数に割り当てられたスキャン位置に基づいてコンテクストモデルの第1の集合または第2の集合の選択されたいずれか1つの集合のコンテクストモデルを変換データユニットまたはそのサブユニットに割り当てるステップであって、各コンテクストモデルは異なる確率予測に関連付けられている、ステップと、上記実施形態のいずれかを使用して、割り当てられたコンテクストモデルが関連付けられる確率予測に基づいて、符号化されたビットストリームから変換データユニットまたはそのサブユニットを復号化するステップと、を含む。
コンテクストモデルの異なる集合が、コンテクストモデルの異なる集合が異なるスキャンパターンに関連付けられたビデオフレームまたは画像の部分に関連する変換データユニットまたはそのサブユニットを符号化するために使用される場合と比較した際、第1のスキャンパターンに関連付けられたビデオフレームまたは画像の部分に関連している変換データユニットまたはそれらのサブユニットを符号化するために使用される場合、ビデオフレームや画像から得られる変換データユニットまたはそれらのサブユニットがより圧縮された方法で符号化され得ることは有利であることを見出した。この測度によって、コンテクストモデルが、異なるスキャンパターンであることによる同一のスキャン位置に属している変換データユニット間で異なる可能性のある実際のシンボル統計へより高い精度で適応することができる。実際の確率分布をより高精度に近似させることができるので、符号化されたビットストリームの圧縮率を向上させることができる。さらに、異なるコンテクストモデルが異なるスキャンパターンに関連付けられた画像部分に関連した変換データユニットに使用されるので、そのコンテクストモデルの確率予測の更新に貢献する変換データユニットはより均一な実際の確率分布を示すことから、更新された確率予測は実際の確率分布をより高精度に近似させる。同様に、異なるコンテクストモデルの集合を提供することによって、コンテクストモデルの確率予測を実際の確率分布に対してより高精度に初期化することができる。したがって、符号化されたビットストリームの圧縮率をさらに上昇させることができる。
マクロブロック適応型フレーム/フィールド符号化を説明してきたが、本発明の実施形態による符号化方式の実施中のフレームおよびフィールドマクロブロックの一般的な取り扱いを、図55を参照して、説明する。図55は、図28のプリコーダ2012とエントロピーコーダ2014によって実行されるフレームおよびフィールドマクロブロックを符号化するステップを示している。
図55は、図34に関して説明されたように、マクロブロック対5010b1および5010b2に既に分割されているビデオフレームまたは画像5010を符号化するプロセスを示している。図55において、マクロブロック対5010b1と5010b2の2つのみが例示されている。マクロブロック対5010b1がフィールド符号化されるが、マクロブロック対5010b2はフレーム符号化されると想定される。マクロブロック対5010b1と5010b2に属している画素サンプルはプリコーダ5012へ渡され、ステップ5270において処理される。ステップ5270は、マクロブロック対5010b1と5010b2の画像サンプルから予測される画素サンプルを減算し、空間ドメインからの差分をスペクトルドメインへ変換することを含む。ステップ5220の結果は、各マクロブロック対5010b1および5010b2ごとの変換係数のいくつかの2次元アレイであり、変換係数の各2次元アレイは、4×4の画素サンプルのサブパートまたは画素サンプルの差分などのマクロブロック対5010b1と5010b2のマクロブロックのサブパートに属している。図55は、2572で示される、マクロブロック5010b1から求められる変換係数の1つの2次元アレイと、マクロブロック5010b2から求められる変換係数の他の2次元アレイ5274と、を例示している。たとえば、アレイ5272および5274は4×4のアレイである。これらはマクロブロック対5010b1と5010b2のマクロブロックの1つの予測残の4×4のブロックに適用されるDCTによって取得することができる。たとえば、マクロブロックは16×16の大きさのサンプルである。この場合、予測残の16個の4×4のブロックはマクロブロックごとに16個の4×4の変換係数アレイへ変換されうる。DCTは4×4の離散コサイン変換または同様の特性を有する分離可能な整数変換でありうる。デコーダサイドの逆変換の不整合は変換マトリクスを逆変換が正確な整数演算によって定義されるように定義付けることによって回避されうる。
ここで、以下において、変換係数のアレイ5272を得た画素サンプルの4×4ブロックは、図31Bに示すように、マクロブロック2252内の画素1〜4、21〜24、41〜44、および61〜64のブロックに対応し、アレイ5274が関連している画素サンプルの4×4ブロックは、図31Aに示すように、マクロブロック2250の画素サンプル1〜4、11〜14、21〜24、および31〜34を含むと仮定する。
図示されているように、ステップ5270の変換が適用される4×4ブロック内の画素間の空間的関係は、フィールドマクロブロックとフレームマクロブロックで異なる。具体的には、列に沿った画素ピッチは、フィールドマクロブロックに比べると、フレームマクロブロックの場合は倍になっている。したがって、アレイ5272および5274において同じアレイ位置を想定する2つの変換係数は異なる頻度に関係する。このため、前述したように、異なるスキャンパターンが、アレイ5272および5274における変換係数間のスキャン順を定義するために使用される。この理由は、下位の頻度の変換係数がゼロである可能性が高いためである。したがって、異なるスキャン順序が、それらが関連する頻度に基づいて変換係数をソートするために使用される。
図56は、フレームおよびフィールドマクロブロックに使用されるスキャンパターンの例を示す。5274において、図示したように、変換係数の2次元アレイはフレームマクロブロックから得ることができる。各アレイ位置において0から15までの数字が書きこまれ、この数字はそれぞれの変換係数のスキャン位置を示している。矢印5276はスキャンパターンを表している。図示するように、フレーム符号化されたマクロブロックに関連する変換係数間のスキャン順序を定義するために使用されるスキャンパターン5276は、アレイ5274の1コーナーで開始しこの開始コーナーの正反対に配置されたコーナーに対して斜めに進行するジグザグスキャンにおいて、スキャンされる。図56において、スキャン位置0を有するアレイ5274の左上のコーナーの変換係数が列と行の方向にDC成分を表すが、正反対に配置されたスキャン位置5015を有する変換係数は列と行の方向に最大頻度部分を表すと想定される。
図56の右側において、図示のようにフィールドマクロブロックに関連した変換係数アレイ5272用のスキャンパターン。繰り返しになるが、4×4の変換係数アレイ5272の各配列位置は、スキャン位置番号によって指定されている。フィールドマクロブロックの場合のスキャンパターンは矢印5278で示されている。見て分かるように、フィールド符号化されたマクロブロックに対するスキャンパターン5278は、フレーム符号化されたマクロブロックに対するスキャンパターン5276とは異なる。両方のスキャンパターン5276と5278は、変換係数0から15の間でスキャン順序を定義する。
図55に戻って参照すると、プリコーダ5012はステップ5280に進み、ここで、アレイ5272および5274で変換係数を変換データユニットの列5282および5284へプリコードする。ステップは図57に関してより詳細に説明されており、4つの行を有する表を示している。最初の行において、0から8のスキャン位置が記載されている。2番目の行において、スキャン位置0から8に対して可能な変換係数レベルに対する例が与えられる。8より大きいスキャン位置における変換係数レベルはすべて0であると想定される。
さて、5280のプリコードを実行する場合、プリコーダ5012はスキャン位置0で開始されるスキャン順序で変換係数を実行し、各変換係数において、以下のステップを実行する:
1.変換係数が0でない場合、すなわち、変換係数が有意である場合、プリコーダ5012は、このスキャン位置に対するsignificant_coeff_flagを1に設定する。それ以外の場合、プリコーダ5012はsignificant_coeff_flagをゼロに設定する。図示されているように、スキャン位置0における最初の変換係数レベルは9であり、よって、図57における3番目の行で見られるように、このスキャン位置に対するsignificant_coeff_flagは1である。
2.有意な変換係数に対して、この変換係数がスキャン順における変換係数内の最後の有意変換係数であるかどうかが証明される。そうである場合、創出された現在のスキャン位置に対するlast_significant_coeff_flagは1に設定される。それ以外の場合、現在のスキャン位置に対するlast_significant_coeff_flagは0に設定される。図57の最後の行に示されるように、この実施例において、有意である最後の変換係数レベルはスキャン位置8における変換係数である。したがって、この変換係数に対するlast_significant_coeff_flagは1に設定されるが、スキャン位置0、2、3、および6における他の有意変換係数に対するlast_significant_coeff_flagは0に設定される。
3.すべての有意変換係数について、プリコーダ5012は、これらの変換係数を指定するシンタックス要素を作成する。
要約すると、プリコーダ5012は、最初のスキャン位置から最後の有意変換係数のスキャン位置までの変換係数ごとに、それぞれの変換係数が有意でない場合はsignificant_coeff_flag、または、変換係数が有意である場合はそれぞれの変換係数の値を指定する、significant_coeff_flagと、last_significant_coeff_flagとデータのいずれかから成る変換データユニットを作成する。このように得られた全てのシンタックス要素significant_coeff_flagとlast_significant_coeff_flagは有意である変換係数のスキャン位置を表す有意性マップを形成する。
プリコーダ5012は、シンタックス要素の線形ストリーム、すなわち、プリコードされたビデオ信号5286内へ列5282と5284を組み込む。これらのシンタックス要素の順序を以下に示す。
一般に、まず、有意性マップに対応するシンタックス要素が送信され、これに続いて、有意変換係数を逆スキャン順に示す値が送信される。具体的には、列5282と5284の最初のシンタックス要素は、スキャン位置0のsignificant_coeff_flagである。スキャン位置0の変換係数が有意である場合、スキャン位置0のsignificant_coeff_flagの後にそのスキャン位置に対するlast_significant_coeff_flagが続く。その後、次のスキャン位置のsignificant_coeff_flag、すなわち、スキャン位置1などが送信される。非ゼロ変換係数を有する最後のスキャン位置のlast_significant_coeff_flagを送信した後、非ゼロ変換係数に対する非バイナリ値が逆スキャン順に送信される。図57の例において、シンタックス要素ストリーム286のシンタックス要素は(最初のシンタックス要素から始まって)、1、0、0、1、0、1、0、0、0、1、0、0、1、1、1、−1、3、−5、9である。
更に3個のシンタックス要素5286がシンタックス要素方向を取り扱うエントロピーコーダ5014に送られる。よって、以下の説明は、significant_coeff_flagとlast_significant_coeff_flagの取り扱いに集中している。このようなフラグがエントロピーコーダ5014に到達すると、エントロピーコーダ5014は、ステップ5288において、2次元変換係数マトリクスを、現在のシンタックス要素last_significant_coeff_flagまたはsignificant_coeff_flagが属する変換データユニットの列へマッピングするために使用されたスキャンパターンに基づいて、2つのコンテクストモデルの集合5290と5292のいずれか1つを選択する。ステップ5288を実行するために、エントロピーコーダ5014は、現在のシンタックス要素が属する現在のマクロブロックの前述したmb_field_decoding_flagを調べ、このフラグはスキャンパターン5278が使用されていた場合に現在のマクロブロックがフィールドモードで符号化されるか、または、スキャンパターン5276が使用されていた場合に現在のマクロブロックがフレームモードで符号化されたか、を示す。
次のステップにおいて、エントロピーコーダ5014は、コンテクストモデルの集合5290および5292のうち選択された1つの集合の1つのコンテクストモデルを、そのスキャン位置に基づいて符号化される現在のシンタックス要素へ、割り当てる。この測度によって、たとえば、列5282のスキャン位置2に属しているシンタックス要素significant_coeff_flagは、列5284のスキャン位置2においてsignificant_coeff_flagに割り当てられたコンテクストモデルとは異なるコンテクストモデルの集合5290のコンテクストモデルを得る。これは、列5282および5284のスキャン位置を定義付けるために使用される様々なスキャンパターンによる、これらのスキャン位置におけるシンタックス要素significant_coeff_flagに対する異なる確率分布をもたらす。
最後に、ステップ5296において、現在のシンタックス要素は、選択されたコンテクストモデルの集合から割り当てられたコンテクストのモデルを使用してバイナリエントロピー符号化される。これは上記の実施形態において説明したように行われる。すなわち、選択されたコンテクストの確率予測を用いてそれぞれの部分的ビットストリームを選択することである。
以下において、図58に関して、図55に続いてエントロピーコーダ5014によって実行されるステップ5288、5294、および5296をより詳細に説明する。
図58に示すプロセスは、シンタックス要素がコンテクストモデラ5112の入力に到達した時点でスタートする。最初のステップ5300において、コンテクストモデラ5112は、入ってくるシンタックス要素またはビンがlast_significant_coeff_flagであるかどうかを判定する。否定されれば、ステップ5302において、コンテクストモデラ5112は入ってくるシンタックス要素またはビンが、significant_coeff_flagであるかどうかを判定する。否定されれば、ステップ5304において、コンテクストモデラ5112は、手順またはサブルーチンを取り扱う別のシンタックス要素へ切り替える。現在のシンタックス要素がlast_significant_coeff_flagである場合、ステップ5306において、このフラグがフレーム符号化されたマクロブロックかまたはフィールド符号化されたマクロブロックのいずれに属しているかどうかがチェックされる。ステップ5306は、last_significant_coeff_flagが属している変換係数のスキャン位置がスキャンパターン5276またはスキャンパターン5278のいずれによって判定されるかをチェックすることと等しい。ステップ5302において、シンタックス要素がsignificant_coeff_flagであると判定される場合、同じチェックがステップ5308において実行される。ステップ5300、5302、5306、および5308は、シンタックス要素の到達時に、可能なシナリオを5つのケースに制限する。最初のケースはすでに言及されており、現在のシンタックス要素がlast_significant_coeff_flagでもsignificant_coeff_flagでもないときに存在する。このケースでは、ステップ5304において、別のシンタックス要素の取り扱いが実行される。第2のケースにおいて、シンタックス要素はフィールドコードマクロブロックに属するlast_significant_coeff_flagであり、この場合、ステップ5310において、コンテクストインデックスオフセット値は、値offset1に設定される。第3のケースにおいて、現在のシンタックス要素はフレーム符号化されたマクロブロックに属するlast_significant_coeff_flagであり、ステップ5312において、インデックスctxIdx Offsetはoffset2に設定される。同様に、第4と第5のケースにおいて、シンタックス要素はフィールド符号化またはフレーム符号化されたマクロブロックに属しているsignificant_coeff_flagであり、ステップ5340において、インデックスctxIdx Offsetはoffset3に設定され、ステップ5316においてoffset4にそれぞれ設定される。インデックスctxIdx Offsetはコンテクストモデルの共通の一覧を指し示すためにある。offset1〜offset4までの値は互いに異なる。
ステップ5310〜5316以降、ステップ5318において、インデックス増分子ctxIdxInc(コンテクストインデックス増分子)は、シンタックス要素、すなわち、last_significant_coeff_flagまたはsignificant_coeff_flagが属しているスキャン位置(scanningPos)と等しく設定される。その後、ステップ5320において、コンテクストインデックスは、コンテクストインデックスオフセットctxIdx Offsetおよびインデックス増分子ctxIdx Incとの合計によって求められる。ステップ5300〜5320は、コンテクストモデラ5112によって実行される。ステップ5320の結果は、シンタックス要素のバイナリエントロピー符号化に使用される確率モデルを示すコンテクストインデックスctxIdxである。
ctxIdxの決定後、コンテクストモデラ5112は、そのシンタックス要素自体と一緒に、すなわち、last_significant_coeff_flagまたはsignificant_coeff_flagと一緒に、上記に概述されたように、上記の実施形態のいずれかに基づいて構成される正規の符号化エンジン118に対して、ctxIdxによりインデックス付けされた変数ctxIdxまたは確率予測状態を渡す。これらの入力に基づいて、正規の符号化エンジン5118は、ステップ5322において、ctxIdxによりインデックス付けされたコンテクストモデルの現在の確率状態を使用してシンタックス要素をビットストリーム5124内へエントロピー符号化する。
その後、正規の符号化エンジン5118が、last_significant_coeff_flagまたはsignificant_coeff_flagのビン値をそれぞれ、パス117を経由して、コンテクストモデラ5112へ戻すと、ステップ5324において、コンテクストモデラ5112は、ctxIdxによりインデックス付けされたコンテクストモデルをその確率予測状態に対して適応させる。その後、ステップ5326において、last_significant_coeff_flagまたはsignificant_coeff_flagを出力5124におけるビットストリーム内へ符号化するプロセスが終了する。
以上から明らかであろうように、ステップ5300〜5316は、図55のステップ5288に属しているが、ステップ5318および5320は、ステップ5294に属しており、ステップ5322および5324はステップ5296に属している。
実際の復号化プロセスを詳細に説明する前に、解析プロセスが図59に例示されており、図59は、エントロピーデコーダ5400において実行される解析プロセスに対する擬似Cコードを示している。図59に示されるこの解析プロセスは、有意性マップと係数値が図57に関して上に説明したように符号化されること、すなわち、有意性マップがスキャン順に続くとともに逆スキャン順に順序づけられた有意性変換係数の係数値に先行することを前提に、マクロブロックに対するその対応する係数値とともに有意性マップを解析するために適切である。
図59において、太字で書かれている変数はエントロピーデコーダ5400に到達するエントロピー符号化されたビットストリームから読み出される。読み出しには、バイナリエントロピー復号化が使用される。ビンsignificant_coeff_flagとlast_significant_coeff_flagに対する読み出しプロセスは図60により詳細に示される。解析プロセスは、図59の擬似Cコードの1行目に見られるようにresidual_block_CABACと呼ばれる。このプロセスresidual_block_CABACの出力は、図57に示されるようなスキャン位置ごとに変換係数レベルを示す1次元アレイcoeffLevelである。入力として、プロセスresidual_block_CABACはマクロブロック内の係数の最大数を示す変数maxNumCoeff、本実施例では、16を受信する。
次に、プロセスは、現在のブロックにおいてすべての変換係数レベルがゼロであるかどうかを示すcoded_block_flagと呼ばれるフラグの読み出しから、2行目でスタートする。この場合、coded_block_flagはゼロであり、それ以外の場合、このcoded_block_flagは1である。以下において、coded_block_flagは1であり、よって、少なくとも1つの変換係数レベルはゼロにならないと想定する。よって、4行目において、変数NumCoeffはmaxNumCoeffに設定される。これは、以下の1と等しいwhen―do―loop no last_significant_coeff_flagが読み出される場合、最後の有意変換係数のスキャン位置が係数maxNumCoeffの最大数と等しいことを意味する。5行目において、カウンタiはゼロに初期化される。以下の6行目でスタートするwhile―do―loopにおいて、まず、1つのビンが読み出され、significant_coeff_flagへ入力される。図59に関して、significant_coeff_flagは1次元アレイである。7行目で読み出されるビンは、アレイsignificant_coeff_flag、すなわち、significant_coeff_flag[i]の位置iに置かれる。significant_coeff_flag[i]が1(8行目)である場合、すなわち、スキャン位置iにおける係数が有意である場合、次のビンは、ビットストリーム、すなわち、last_significant_coeff_flag[i]から読み出される。last_significant_coeff_flag[i]が1である場合(10行目)、すなわち、スキャン位置iにおける変換係数がスキャン順において最後の有意変換係数である場合、変数NumCoeffは11行目においてi+1に設定され、これも1次元アレイであるcoeffLevelは、i+1と等しいかこれより大きい全ての位置において、ゼロに設定される(12および13行目)。これは、last_significant_coeff_flagが1であるスキャン位置以降の、全ての後続するスキャン位置の変換係数がゼロであることを意味する。
両方の条件節(14および15行目)の後、カウンタiが16行目において増分される。最後に、17行目において、カウンタiがNumCoeff―1より大きいかこれと等しいかが証明される。これが肯定された場合、while―do―loopが再度、繰り返される。したがって、5行目から17行目において、有意性マップはビットストリームから読み出される。以下、18行目において、最初の有意変換係数レベルマイナス1が読み出され、すなわち、coeff_ups_level_minus1であり、符号フラグcoeff_sign_flagがこれに続く。より具体的には、18行目と19行目において読み出されるシンタックス要素coeff_abs_level_ups_minus1とcoeff_sign_flagの両方はスキャン順に最後の有意変換係数に関わっている。この変換係数の実際値は20行目で計算される。次いで、21〜28行目までのfor―loopにおいて、4〜17行目で受信した有意性マップを使用して残っている有意変換係数がビットストリームから読み出される。for―loopのカウンタiは、NumCoeff―2、すなわち、最後の有意変換係数のスキャン位置の直前で先行するスキャン位置、に初期化される。for―loopのそれぞれの遷移後にこのカウンタは減分される。significant_coeff_flag[i]が1である場合(22行目)、スキャン位置iにおける変換係数の係数レベルが23〜25行目において求められ、これらの行は、事実上、18から20行目に一致している。significant_coeff_flag[i]がゼロである場合(26行目)、スキャン位置の係数レベルは27行目においてゼロに設定される。
次に、図60は、ビンが復号化されるたびにエントロピーデコーダ400によって実行される復号化プロセスを示している。どのビンが復号化されるかは、エントロピーデコーダ5400によって現在予想されているシンタックス要素に依存している。有意性マップおよび対応する非ゼロ変換係数レベルに関して、この知識は、図59の解析プロセスから得られる。
復号化プロセスにおいて、まず、ステップ5500において、デコーダ5400は、復号化する次のビンがlast_significant_coeff_flagであるかをチェックする。これが否定された場合、ステップ5502において、復号化する次のビンがsignificant_coeff_flagであるかをチェックする。復号化する次のビンは、significant_coeff_flagである。復号化する次のビンが、last_significant_coeff_flagまたはsignificant_coeff_flagのいずれかである場合、デコーダ5400は、ステップ5504または5506のそれぞれにおいて、このフラグがフレーム符号化されたマクロブロックまたはフィールド符号化されたマクロブロックのどちらに属するかについてチェックする。復号化する次のビンが、last_significant_coeff_flagでもsignificant_coeff_flagでもない場合、ステップ504において、デコーダ400は他のシンタックス要素ハンドリングへ進む。ステップ5500、5502、5506および5508のチェックは、図58の符号化プロセスのステップ5300、5302、5306、および5308に対応しており、したがって、復号化する次のビンが、last_significant_coeff_flagまたはsignificant_coeff_flagのいずれであるか、および対応するマクロブロックがフレーム符号化されるかまたはフィールド符号化されるかに依存して、ctxIdx Offsetは、ステップ5510、5512、5514、および5516のいずれかのステップにおいて、それぞれoffset1、offset2、offset3、およびoffset4の1に設定され、ここで、ステップ5510〜5516は、図58のステップ5310から3516に対応している。したがって、ctxIdxIncとctxIdxは、以下のエントロピー復号化に使用されるコンテクストモデルを決定するために、ステップ5518および5520において、図8のステップ318と320の符号化プロセスと同様に、判定される。
次に、ステップ5522において、エントロピーデコーダ5400は、ステップ5510から5520において得られたctxIdxによりインデックス付けされたコンテクストモジュールの実際の確率状態を使用してエントロピー符号化されたビットストリームから、実際のビン、すなわち、last_significant_coeff_flagまたはsignificant_coeff_flagをエントロピー復号化する。すなわち、それぞれの部分的なビットストリームは確率インデックスおよびそこから読み出されるビンに基づいて選択される。このステップの結果は、実際のビンに対する値である。その後、ステップ5524において、ステップ5224と同様に、ctxIdx確率状態が適応または更新される。その後、ステップ5526においてプロセスが終了する。
上記の復号化プロセスにおいて、ステップ5527、すなわち、mb_filed_decoding_flagの復号化は、各ビンの復号化の後に行われたように見えるが、そうではない。実際は、このステップは、最高でも、1つのマクロブロック対に対してのみ起こる。
前の符号化もがビデオデータを圧縮するために用いられる実施形態について説明してきたが、一方で圧縮率と、他方でルックアップテーブルおよび計算オーバーヘッドと、の間の良好なトレードオフにおいてインプリメンテーションを特に有効にする本発明の実施形態を実施するための更なる実施形態を説明するために、図61A、Bおよび62を参照する。具体的には、以下の実施形態は、個別のビットストリームをエントロピー符号化しかつ確率予測の部分を効果的にカバーするために計算上あまり複雑でない可変長コードの使用を可能にする。以下で説明する実施形態において、シンボルはバイナリ性質のものであり、以下に提示されるVLCコードは、[0;0.5]内に拡張する、たとえば、RLPSで表される確率予測を効果的にカバーする。
具体的には、以下に概略的に示す実施形態は、図1〜11の個別のエントロピーコーダ10およびデコーダ22の可能なインプリメンテーションを記載している。それらは、画像またはビデオ圧縮アプリケーションにおいて出現する時、ビン、すなわちバイナリシンボルを符号化するために適切である。したがって、これらの実施形態は、このようなバイナリシンボルが符号化されるビン7と復号化されるビットストリーム241つ以上のストリームへそれぞれ分割される、画像またはビデオ符号化に適用可能であり、ここで、各このようなビンストリームはベルヌーイプロセス(Bernoulli process)の実現とみなすことができる。以下に説明される実施形態は、以下で説明する様々ないわゆる、変数間コード(v2v―コード)の1つ以上を使用してビンストリームを符号化する。v2v―コードは、同数の符号語を有する2つの接頭語無し符号:1次接頭語無し符号と2次接頭語無し符号であるとみなすことができる。1次接頭語無し符号の各符号語は2次接頭語無し符号の1つの符号語に関連付けられる。下記に概述する実施形態によれば、エンコーダ10およびデコーダ22の少なくとも一部は以下のように動作する:ビン7の特定の列を符号化するために、1次接頭語無し符号がバッファ8から読み出される時は常に、2次接頭語無し符号の対応する符号語がビットストリーム12へ書き込まれる。同じ手順がこのようなビットストリーム24を復号化するために使用されるが、1次と2次の接頭語無し符号は入れ替えられる。すなわち、ビットストリーム24を復号化するために、2次接頭語無し符号の符号語がそれぞれのビットストリーム24から読み出される時は常に、1次接頭語無し符号の対応する符号語がバッファ20へ書き込まれる。
有利なことに、以下で説明するコードはルックアップテーブル必要としない。これらの符号は有限状態マシンの形態で実施可能である。ここで提示されるv2v―コードは、これらの符号語のために大きなテーブルを格納する必要がないように単純な構築ルールによって生じさせることができる。その代わり、符号化または復号を行うために単純なアルゴリズムは使用することができる。これらの2つがパラメータ化される3つの構築ルールを以下に説明する。上述した確率インターバルの異なる部分または非結合の部分でさえもカバーすることから、並列配置された3つのコード全て(エンコーダ11/デコーダ22の異なる符号ごとに)又はその2つのコードをまとめて使用する場合にとりわけ有利である。以下に説明する構築ルールによれば、任意の確率pを有するベルヌーイプロセスに対して、コードのいずれか1つが過剰なコード長さに関しても良好に実行するようにv2v―コードの集合を設計することが可能である。
前述したように、ストリーム12および24の符号化と復号化はそれぞれ、ストリームごとに独立してまたはインターリーブ方法のいずれかで実行することができる。しかしながら、これは提示されているv2v―コードのクラスに特有のものではなく、したがって、特定の符号語の符号化及び復号化のみが3つの構築ルールの各々に対して以下に説明される。しかしながら、インターリービングソリューションに関する上記の実施形態の全ては、現在説明している符号またはエンコーダ10およびデコーダ22のそれぞれと結合可能であることを強調しておく。
構築ルール1:「単項ビンパイプ」符号またはエンコーダ10/デコーダ22
単項ビンパイプ符号(PIPE=エントロピーを分割する確率インターバル)は、いわゆる「ビンパイプ」符号、すなわち、各々が上述した確率範囲[0;0.5]のある確率のサブインターバルに属しているバイナリシンボル統計のデータを転送する個々のビットストリーム12および24のいずれかの符号化に適している符号、の特別なバージョンである。まず、ビンパイプ符号の構築を説明する。ビンパイプ符号は、少なくとも3つの符号語を有する任意の接頭語無し符号から構築することができる。v2v―符号を形成するために、ビンパイプ符号は1次と2次の符号として接頭語無し符号を使用するが、2次接頭語無し符号の2つの符号語は入れ替えられる。これは、2つの符号語を除いて、ビンが、変更されないビットストリームに書き込まれることを意味する。この方法によれば、1つの接頭語無し符号だけを情報とともに格納するだけで済み、2つの符号語が入れ替えられることから、メモリの消費量が削減される。異なる長さの符号語を入れ替えることに意味があることに留意されたい。そうでない場合、ビットストリームは(ビンストリームの終わりに発生する影響を考慮に入れずに)ビンストリームと同じ長さを有することになるからである。
この構築ルールにより、ビンパイプ符号の顕著な特性は、1次と2次の接頭語無し符号が入れ替えられても(と同時に、符号語のマッピングが保持されている)、得られるv2v―符号は元のv2v―符号と同一である点にある。したがって、符号化アルゴリズムと復号化アルゴリズムはビンパイプ符号に対して同一である。
単項ビンパイプ符号は特殊な接頭語無し符号から構築される。この特別な接頭語無し符号は、以下のように構築される。最初に、n個の単項符号語から成る接頭語無し符号が、‘01’、‘001’、‘0001’からスタートして、n個の符号語が生じるまで生成される。nは単項ビンパイプ符号のパラメータである。最長の符号語から、末尾の1は削除される。これは切り捨て単項符号(ただし、符号語‘0’なし)に対応している。次に、n−1個の単項符号語が‘10’、‘110’、‘1110’からスタートして、n−1個の符号語が生じるまで生成される。最長の符号語から、末尾の0は削除される。これら2つの接頭語無し符号の和集合は単項ビンパイプ符号を生成するための入力として使用される。入れ替えられる2つの符号語は0だけから成る符号語と1だけから成る符号語である。
n=4の場合の例:
番号−1次−2次
1−0000−111
2−0001−0001
3−001−001
4−01−01
5−10−10
6−110−110
7−111−0000
構築ルール2:「単項ライス」符号および単項ライスエンコーダ10/デコーダ22:
単項ライス符号は切り捨て単項符号を1次符号として使用する。すなわち、単項符号語は、‘1’、‘01’、‘001’からスタートして、2n+1個の符号語が生じるまで生成され、最長の符号語から、末尾の1が削除される。nは単項ライス符号のパラメータである。2次接頭語無し符号は、以下のように、1次接頭語無し符号の符号語から構築される。0だけから成る1次符号語に、符号語‘1’が割り当てられる。他のすべての符号語は、1次接頭語無し符号の対応する符号語の0の数のnビットのバイナリ表現を有する符号語‘0’の連結から成る。
n=3の場合の例:
番号−1次−2次
1−1−0000
2−01−0001
3−001−0010
4−0001−0011
5−00001−0100
6−000001−0101
7−0000001−0110
8−00000001−0111
9−00000000−1
これはライスパラメータ2nを有するライス符号に無限の単項符号をマッピングすることと同じであることに留意されたい。
構築ルール3:‘3つのビン’コード
3つのビンコードは次のように与えられる:
番号−1次−2次
1−000−0
2−001−100
3−010−101
4−100−110
5−110−11100
6−101−11101
7−011−11110
8−111−11111。
1次符号(シンボル列)が固定長(常に3つのビン)であり、符号語は1の数の昇順でソートされるという特性を有している。
3つのビンコードの効率的なインプリメンテーション次に説明する。この3つのビンコードに対するエンコーダとデコーダは、テーブルを格納せずに、以下のように実行することができる。
エンコーダ(10のいずれか)において、3つのビンは、ビンストリーム(すなわち、7)から読み出される。これらの3つのビンがたった1つの1を含む場合、この符号語‘1’は(右から00でスタートする)1の位置のバイナリ表現から成る2つのビンが後続するビットストリームに書き込まれる。3つのビンがたった1つの0を含む場合、符号語‘111’は(右から00でスタートする)0の位置のバイナリ表現から成る2つのビンが後続するビットストリームに書き込まれる。残留符号語‘000’と‘111’は、‘0’と‘11111’にそれぞれ、マッピングされる。
デコーダ(22のいずれか)において、1つのビンまたはビットがそれぞれのビットストリーム24から読み出される。1つのビン又はビットが‘0’と等しい場合、符号語‘000’はビンストリーム21に復号化される。‘1’と等しい場合、さらに2つのビンがビットストリーム24から読み出される。これらの2つのビットが‘11’と等しくない場合、これらのビットは、数のバイナリ表現として解釈され、2つの0と1つの1がこの1の位置が数によって決定されるようにビットストリームに復号化される。2つのビットが‘11’と等しい場合、さらに2つのビットが数のバイナリ表現として解釈される。この数が3より小さい場合、2つの1と1つの0が復号化され、この数は0の位置を決定する。3と等しい場合、‘111’はビンストリームに復号化される。
単項ビンパイプ符号の効率的なインプリメンテーションを次に説明する。単項ビンパイプ符号に対するエンコーダとデコーダはカウンタを使用して効率的に実施することができる。ビンパイプ符号の構造により、ビンパイプ符号の符号化と復号化は容易に実施できる。
エンコーダ(10のいずれか)において、符号語の最初のビンが‘0’と等しい場合、ビンは、‘1’が生じるか又はn個の0が読み出されるまで、処理される(符号語の最初の‘0’を含む)。‘1’が生じた場合、読み出されたビンは変更されないビットストリームへ書き込まれる。それ以外の場合(すなわち、n個の0が読み出された場合)、n−1個の1がビットストリームに書き込まれる。符号語の最初のビンが‘1’と等しい場合、ビンは‘0’が生じるかまたはn−1個の1が読み出されるまで、処理される(符号語の最初の‘1’を含む)。‘0’が生じた場合、読み出されたビンは変更されないビットストリームへ書き込まれる。それ以外の場合(すなわち、n−1個の1が読み出された場合)、n個の0がビットストリームへ書き込まれる。
デコーダ(22のいずれか)において、エンコーダに対して同じアルゴリズムが使用される。上に説明したように、ビンパイプ符号に対しても同じであるためである。
単項ライス符号の効率的なインプリメンテーションを次に説明する。単項ライス符号に対するエンコーダとデコーダはここで説明するようにカウンタを使用して効率的に実施することができる。
エンコーダ(10のいずれか)において、ビンは、1が生じるかまたは2n個の0が読み出されるまで、ビンストリーム(すなわち、7)から読み出される。0の数がカウントされる。カウント数が2n個と等しい場合、符号語‘1’がビットストリームへ書き込まれる。それ以外の場合、‘0’が書き込まれ、n個のビットが書き込まれた、カウントされた数のバイナリ表現がこれに続く。
デコーダ(22のいずれか)において、1つのビットが読み出される。このビットが‘1’と等しい場合、2n個の0がビンストリングに復号化される。このビットが‘0’と等しい場合、さらにn個のビットが読み出され、数のバイナリ表現として解釈される。0のこの数は、‘1’が後続するビンストリームに復号化される。
言い換えれば、今述べた実施形態は、シンボル3の列を符号化するためのエンコーダについて説明しており、このエンコーダは、シンボル列の前のシンボル内に含まれる情報に基づいてこのシンボル列の各シンボルに多数のパラメータ5を割り当てるように構成された割当部16と、各々がそれぞれのエントロピーエンコーダ10へ転送されたシンボル7をそれぞれのビットストリーム12へ変換するように構成されている複数のエントロピーエンコーダ10と、各シンボル3を複数のエントロピーエンコーダ10の選択された1つへ転送するように構成されている選択部6であって、この選択はそれぞれのシンボル3に割り当てられたパラメータ5の数に依存している選択部6と、を含む。今概述した実施形態によれば、エントロピーエンコーダの少なくとも第1の部分集合は、シンボル7のストリーム内の可変長のシンボル列を、ビットストリーム12内に挿入される可変長の符号語に、それぞれマッピングするように構成されている可変長エンコーダであり、その際、第1の部分集合のエントロピーコーダ10の各々は全単射マッピングルールを使用し、この全単射マッピングルールに基づいて、(2n−1)≧3の符号語を有する1次接頭語無し符号の符号語が1次接頭語符号と同一である2次接頭語無し符号の符号語にマッピングされて、1次接頭語無し符号の符号語のうち2つを除く全てが、2次接頭語無し符号の同一の符号語にマッピングされるとともに1次と2次の接頭語無し符号の2つの符号語が異なる長さを有しかつ相互に入れ替え可能にマッピングされ、ここで、上述の確率インターバルのインターバルの異なる部分をカバーするためにエントロピーエンコーダは異なるnを使用しうる。第1の接頭語無し符号は、第1の接頭語無し符号の符号語が(a、b)2、(a、a、b)3、...、(a、...、a、b)n、(a、...、a)n、(b、a)2、
(b、b、a)3、...、(b、...、b、a)n−1、(b、...、b)n−1となるように構成され、相互に入れ替え可能にマッピングされた2つの符号語は、b≠aおよび
のとき、(a、...、a)nと(b、...、b)n−1である。しかしながら、これに代わる方法も実行可能である。
言い換えれば、エントロピーエンコーダの第1の部分集合の各々は、それぞれのエントロピーエンコーダへ転送されたシンボルをそれぞれのビットストリームに変換する際、それぞれのエントロピーエンコーダへ転送された第1のシンボルを検討して、(1)第1のシンボルが
と等しいかどうかを判定し、そうである場合、それぞれのエントロピーエンコーダは、それぞれのエントロピーエンコーダへ転送された後に続くシンボルを検討して、(1.1)b≠aおよび
であるbが第1のシンボルに続く次のn−1番目のシンボル内に生じるかどうかを判定し、そうである場合、それぞれのエントロピーエンコーダは、シンボルbに至るまで、それぞれのエントロピーエンコーダへ転送された後続するシンボルによって後続される第1のシンボルと等しい、それぞれのビットストリームへ符号語を書き込むように構成され、(1.2)bが第1のシンボルに後続する次のn−1番目のシンボル内に全く生じないかどうかを判定し、そうである場合、それぞれのエントロピーエンコーダは、(b、...、b)n−1と等しいそれぞれのビットストリームへ符号語を書き込むよう構成され、または、(2)第1のシンボルがbと等しいかどうかを判定し、そうである場合、それぞれのエントロピーエンコーダはそれぞれのエントロピーエンコーダへ転送された後続のシンボルを検討して、(2.1)aが第1のシンボルに後続する次のn−2番目のシンボル内に生じるかを判定し、そうである場合、それぞれのエントロピーエンコーダは、シンボルaに至るまで、それぞれのエントロピーエンコーダへ転送された後続するシンボルによって後続される第1のシンボルと等しいそれぞれのビットストリームへ符号語を書き込むように構成され、または、(2.2)aが第1のシンボルに後続する次のn−2番目のシンボル内に全く生じないかを判定し、そうである場合、それぞれのエントロピーエンコーダは、(a、...、a)nと等しいそれぞれのビットストリームへ符号語を書き込むように構成されている。
これに加えてまたはこれに代えて、エントロピーエンコーダ10の第2の部分集合は可変長のシンボル列を固定長の符号語へそれぞれ、マッピングするように構成された可変長エンコーダであってよく、その際、第2の部分集合のエントロピーコーダの各々は全単射マッピングルールを使用し、この全単射マッピングルールに基づいて、b≠aおよび
であるタイプ{(a)、(ba)、(bba)、...、(b...ba)、(bb...b)}の2n+1個の符号語を有する1次切り捨て単項符号の符号語が2次接頭語無し符号の符号語にマッピングされ、これによって、1次切り捨て単項符号の符号語(bb...b)が2次接頭語無し符号の符号語(c)にマッピングされ、1次切り捨て単項符号のすべての他の符号語{(a)、(ba)、(bba)、...、(b...ba)}が、接頭語としてc≠dおよび
である(d)を有し、接尾語としてnビットのワードを有する、符号語にマッピングされ、エントロピーエンコーダは異なるnを使用する。エントロピーエンコーダの第2の部分集合の各々は、nビットのワードが1次切り捨て単項符号のそれぞれの符号語内の複数のbの数のnビットの表現となるように構成することができる。しかしながら、これに代わる代替方法も実行可能である。
ここでも、それぞれのエンコーダ10の演算モードの観点から、エントロピーエンコーダの第2の部分集合の各々は、それぞれのエントロピーエンコーダへ転送されたシンボルをそれぞれのビットストリームへ変換する際、aが生じるまで、または、それぞれのエントロピーエンコーダへ転送されたシンボル列の数が列のすべての2nのシンボルがbである2nに達するまで、それぞれのエントロピーエンコーダへ転送されたシンボル列内の多数のbをカウントするように構成することができ、(1)複数のbの数が2nと等しい場合、
であるcを2次接頭語無し符号の符号語としてそれぞれのビットストリームへ書き込み、(2)複数のbの数が2nより小さい場合、c≠dおよび
である(d)を接頭語として有し、複数のbの数に応じて決定されたnビットのワードを接尾語として有する、それぞれのビットストリームへ2次接頭語無し符号の符号語を書き込む。
さらに、これに加えてまたはこれに代えて、エントロピーエンコーダ10の所定の1つは、固定長のシンボル列を可変長の符号語にそれぞれマッピングするように構成された可変長エンコーダであってもよく、所定のエントロピーコーダは全単射マッピングルールを使用し、この全単射マッピングルールに基づいて、1次符号の長さ3の23符号語は2次接頭語無し符号の符号語にマッピングされ、これによって、
である1次符号の符号語(aaa)3は、
である符号語(c)にマッピングされ、b≠aおよび
である1つだけのbを有する1次符号の全ての3つの符号語は、接頭語としてc≠dおよび
である(d)を有しかつ接尾語として2ビットのワードの第1の集合のうちそれぞれの第1の2ビットのワードを有する符号語にマッピングされ、1つだけのaを有する1次符号の全ての3つの符号語は、接頭語として(d)を有しかつ接尾語として第1の集合の要素ではない第1の2ビットのワードと2ビットのワードの第2の集合のうち第2の2ビットのワードとの連結を有する符号語にマッピングされ、符号語(bbb)3は、接頭語として(d)を有しかつ接尾語として第1の集合の要素ではない第1の2ビットのワードと第2の集合の要素ではない第2の2ビットのワードとの連結を有する符号語にマッピングされる。1つだけのbを有する1次符号の符号語の第1の2ビットのワードは1次符号のそれぞれの符号語内のbの位置の2ビットの表現でありえ、1つだけのaを有する1次符号の符号語の第2の2ビットのワードは1次符号のそれぞれの符号語内のaの位置の2ビットの表現でありえる。しかしながら、これに代わる方法も実行可能である。
ここでも、エントロピーエンコーダの所定の1つは、所定のエントロピーエンコーダへ転送されたシンボルをそれぞれのビットストリームへ変換する際、トリプレット内の所定のエントロピーエンコーダへのシンボルを検討して、(1)トリプレットは複数のaから成るかが検討され、そうである場合、所定のエントロピーエンコーダはそれぞれのビットストリームへ符号語(c)を書き込むよう構成され、(2)トリプレットが1つだけのbを含むかが検討され、そうである場合、所定のエントロピーエンコーダは(d)を接頭語として有しかつトリプレット内のbの位置の2ビットの表現を接尾語として有する符号語を、それぞれのビットストリームへ、書き込むよう構成され、(3)トリプレットが1つだけのaを含むかが検討され、そうである場合、所定のエントロピーエンコーダは、(d)を接頭語として有しかつ第1の集合の要素ではない第1の2ビットのワードとトリプレット内のaの位置の2ビットの表現との連結を接尾語として有する符号語を、それぞれのビットストリームへ書き込むよう構成され、または、(4)トリプレットが複数のbから成るかが検討され、そうである場合、所定のエントロピーエンコーダは(d)を接頭語として有しかつ第1の集合の要素ではない第1の2ビットのワードと第2の集合の要素ではない第1の2ビットのワードとの連結を接尾語として有する符号語を、それぞれのビットストリームへ書き込むように構成されている。
復号化サイドに関して、今説明した実施形態は、シンボル26の列を復元するためのデコーダであって、各々がそれぞれのビットストリーム24をシンボル21へ変換するように構成されている複数のエントロピーデコーダ22と、シンボル列の前に復元されたシンボル内に含まれる情報に基づいて復元されるシンボル列の各シンボル26へ多数のパラメータを割り当てるように構成されている割当部16と、複数のエントロピーデコーダのうち選択された1つから復元されるシンボル列の各シンボル25を検索するように構成されている選択部18であって、選択はそれぞれのシンボルに対して定義付けられたパラメータの数に応じて行われる、選択部18と、を含むデコーダを開示している。今説明した実施形態によれば、エントロピーデコーダ22の少なくとも第1の部分集合は可変長の符号語を可変長のシンボル列にそれぞれマッピングするように構成された可変長デコーダであり、その際、第1の部分集合のエントロピーデコーダ22の各々は全単射マッピングルールを使用し、この全単射マッピングルールに基づいて、(2n−1)≧3の符号語を有する1次接頭語無し符号の符号語が1次接頭語符号と同一である2次接頭語無し符号の符号語にマッピングされて、1次接頭語無し符号の符号語のうち2つを除く全てが、2次接頭語無し符号の同一の符号語にマッピングされるとともに、1次と2次の接頭語無し符号の2つの符号語が異なる長さを有しておりかつ相互に入れ替え可能にマッピングされ、エントロピーエンコーダは異なるnを使用する。第1の接頭語無し符号は、第1の接頭語無し符号の符号語が(a、b)2、(a、a、b)3、...、(a、...、a、b)n、(a、...、a)n、(b、a)2、(b、b、a)3、...、(b、...、b、a)n−1、(b、...、b)n−1であり、入れ替え可能に相互にマッピングされた2つの符号語は、b≠aおよび
のとき、(a、...、a)nおよび(b、...、b)n−1であるように構築することができる。しかしながら、これに代わる方法も実行可能である。
エントロピーエンコーダの第1の部分集合の各々は、それぞれのビットストリームをシンボルに変換する際、それぞれのビットストリームの第1のビットを検討して、(1)第1のビットがa0{0、1}と等しいかどうかを判定し、そうである場合、それぞれのエントロピーエンコーダはそれぞれのビットストリームの後続するビットを検討するよう構成され、(1.1)第1のビットに後続する次のn−1ビット内に、b≠aおよびb0{0、1}のbが生じるかどうかを判定し、そうである場合、それぞれのエントロピーデコーダは、ビットbに至るまで、それぞれのビットストリームの後続するビットによって後続される第1のビットと等しい、シンボル列を復元するよう構成され、または、(1.2)第1のビットに後続する次のn−1ビット内にbがまったく生じないかどうかを判定し、そうである場合、それぞれのエントロピーデコーダは(b、...、b)n−1と等しいシンボル列を復元するよう構成され、または、(2)第1のビットがbと等しいかどうかを判定し、そうである場合、それぞれのエントロピーデコーダはそれぞれのビットストリームの後続するビットを検討して、(2.1)aが第1のビットに後続する次のn−2ビット内に生じるかどうかを判定し、そうである場合、それぞれのエントロピーデコーダは、シンボルaに至るまで、それぞれのビットストリームの後続するビットによって後続される第1のビットと等しい、シンボル列を復元するよう構成され、または、(2.2)aが第1のビットに後続する次のn−2ビット内にまったく生じないかどうかを判定し、そうである場合、それぞれのエントロピーデコーダは(a、...、a)nと等しいシンボル列を復元するように構成される。
これに加えてまたはこれに代えて、エントロピーデコーダ22の少なくとも第2の部分集合は、固定長の符号語を可変長のシンボル列にそれぞれマッピングするように構成された可変長デコーダであってもよく、その際、第2の部分集合のエントロピーデコーダの各々は全単射マッピングルールを使用し、この全単射マッピングルールに基づいて、2次接頭語無し符号の符号語が、b≠aおよび
であるタイプ{(a)、(ba)、(bba)、...、(b...ba)、(bb...b)}の2n+1個の符号語を有する1次切り捨て単項符号の符号語へマッピングされて、2次接頭語無し符号の符号語(c)が1次切り捨て単項符号の符号語(bb...b)にマッピングされ、c≠dおよび
である(d)を接頭語として有しかつnビットのワードを接尾語として有する符号語が1次切り捨て単項符号の他の符号語{(a)、(ba)、(bba)、...、(b...ba)}の1つのそれぞれにマッピングされ、エントロピーデコーダは異なるnを使用する。エントロピーデコーダの第2の部分集合の各々は、nビットのワードが1次切り捨て単項符号のそれぞれの符号語内の複数のbの数のnビットの表現であるように構成されている。しかしながら、これに代わる方法も実行可能である。
エントロピーデコーダの第2の部分集合の各々は、固定長の符号語を可変長のシンボル列にそれぞれマッピングするように構成された可変長デコーダであってもよく、それぞれのエントロピーデコーダのビットストリームをシンボルに変換する際、それぞれのビットストリームの第1のビットを検討して、(1)このそれぞれのビットストリームの第1のビットが、
であるcと等しいかどうかを判定し、そうである場合、それぞれのエントロピーデコーダは
である(bb...b)2 nと等しいシンボル列を復元するよう構成され、または(2)このそれぞれのビットストリームの第1のビットが、c≠dおよび
であるdと等しいかどうかを判定し、そうである場合、それぞれのエントロピーデコーダは、第1のビットに後続する、それぞれのビットストリームのn個の更なるビットからnビットのワードを決定し、nビットのワードに基づいて、複数のbの数を有するb≠aおよび
であるタイプ{(a)、(ba)、(bba)、...、(b...ba)、(bb...b)}であるシンボル列を復元するように構成されている。
これに加えてまたはこれに代えて、エントロピーデコーダ22の所定の1つは可変長の符号語を固定長のシンボル列にそれぞれマッピングするように構成された可変長デコーダであってもよく、所定のエントロピーデコーダは全単射マッピングルールを使用し、この全単射マッピングルールに基づいて、2次接頭語無し符号の符号語は1次符号の長さ3の23符号語にマッピングされて、
である符号語(c)が
である1次符号の符号語(aaa)3にマッピングされ、c≠dおよび
である(d)を接頭語として有しかつ3つの2ビットのワードの第1の集合のうちのそれぞれの第1の2ビットのワードを接尾語として有する符号語がb≠aおよび
である1つだけのbを有する1次符号の3つの符号語全てにマッピングされ、(d)を接頭語として有しかつ第1の集合の要素ではない第1の2ビットのワードと3つの2ビットのワードの第2の集合のうちの第2の2ビットのワードとの連結を接尾語として有する符号語が1つだけのaを有する1次符号の3つ符号語全てにマッピングされ、(d)を接頭語として有しかつ第1の集合の要素ではない第1の2ビットのワードと第2の集合の要素ではない第2の2ビットのワードとの連結を接尾語として有する符号語が符号語(bbb)3にマッピングされる。1つだけのbを有する1次符号の符号語の第1の2ビットのワードは、1次符号のそれぞれの符号語内のbの位置の2ビットの表現であり、1つだけのaを有する1次符号の符号語の第2の2ビットのワードは1次符号のそれぞれの符号語内のaの位置の2ビットの表現でありうる。しかしながら、これに代わる方法も実行可能である。
エントロピーデコーダの所定の1つは、可変長の符号語を3つのシンボル各々のシンボル列へそれぞれマッピングするように構成された可変長デコーダであってもよく、それぞれのエントロピーデコーダのビットストリームをシンボルへ変換する際、それぞれのビットストリームの第1のビットを検討して、(1)それぞれのビットストリームの第1のビットが
であるcと等しいかどうかを判定し、そうである場合、所定のエントロピーデコーダがa0{0、1}である(aaa)3と等しいシンボル列を復元するよう構成され、または、(2)それぞれのビットストリームの第1のビットがc≠dおよび
であるdと等しいかどうかを判定し、そうである場合、所定のエントロピーデコーダは、第1のビットに後続する、それぞれのビットストリームの2個の更なるビットから第1の2ビットのワードを決定しかつ第1の2ビットのワードを検討するよう構成され、(2.1)第1の2ビットのワードが3つの2ビットのワードの第1の集合の要素でないかどうかを判定し、そうである場合、所定のエントロピーデコーダがそれぞれのシンボル列内のbの位置が第1の2ビットのワードに応じる、b≠aおよびb0{0、1}である1つだけのbを有するシンボル列を復元するよう構成され、または、(2.2)第1の2ビットのワードが第1の集合の要素であるかどうかを判定し、そうである場合、所定のエントロピーデコーダが、第1の2ビットのワードが既に決定されている2つのビットに後続する、それぞれのビットストリームの2個の更なるビットから第2の2ビットのワードを決定しかつ第2の2ビットのワードを検討するよう構成され、(3.1)第2の2ビットのワードが3つの2ビットのワードの第2の集合の要素でないかどうかを判定し、そうである場合、所定のエントロピーデコーダは、それぞれのシンボル列のaの位置が第2の2ビットのワードに応じる、1つだけのaを有するシンボル列を復元するよう構成され、または、(3.2)第2の2ビットのワードが3つの2ビットのワードの第2の集合の要素であるかどうかを判定し、そうである場合、所定のエントロピーデコーダが(bbb)3と等しいシンボル列を復元するように構成されている。
次に、エンコーダ10/デコーダ22の1つまたはいくつかまたはすべてに対して、すなわち、シンボルの分布から個別のパスに対して得られる確率インターバル分割のある確率インターバルを担うこれらのエンコーダ/デコーダのペアの各々に対して使用することができるテーブルベースのバイナリ算術符号化および復号化方式を説明する。
有利なことに、エンコーダ10/デコーダ22に関して以下に説明する実施形態は、バイナリ算術復号化エンジンの単一繰り込みサイクル内の複数のMPSを処理することが可能である。
本発明の実施形態の原理および利点を理解するために、複数のエンコーダ10/デコーダ22のペアが、以下のタイプのバイナリ算術エンコーダ/デコーダであったと想定する。所与のビンバッファ8の代表LPS/LPBの確率pLPSから対応する符号インターバル幅RLPSへのマッピング―すなわち、たとえば、符号インターバルの下限を識別する、現在のインターバル幅Rと現在のインターバルオフセットLによって画定される、バイナリ算術符号化エンジンの内部状態のインターバル分割―はテーブルルックアップを使用して実現される。所与のビンバッファ8に関連付けられている各テーブルベースのバイナリ算術符号化エンジン10に対して、K個の代表的インターバル幅の値{Q0、...、QK−1}がRを表すために使用され、Kの選択と代表的インターバル幅の値{Q0、...、QK−1}はビンバッファ8に依存していると想定する。よって、ビン9の算術的符号化は、現在のインターバル幅Rを{0、...、K−1}の値を有する量子化インデックスqへマッピングし、現在のビンに関連付けられたLPSに対する確率予測pを対応する部分的インターバル幅の値Qqで乗算した積の値と、qをインデックスとして使用して、ルックアップテーブルRtabから、このビンが割当部によって割り当てられたエントロピーエンコーダと、にアクセスすることによって、インターバル分割を実行するサブステップを含むことができる。各算術符号化エンジン10によって得られる符号語は個別に、送信され、パケット化され、または格納されるか、あるいは、図1〜11などの様々な実施形態に関して上記に説明したように、送信または格納を目的として、インターリーブされうる。
すなわち、バイナリ算術符号化エンジン10は、そのビンバッファ8内の複数ビン9を符号化する際に以下のステップを実行する:
1.ビンバッファ8からvalLPS、ビンを受信するステップ(ここで考慮されるそれぞれのバイナリ算術符号化エンジン10は(割当部16と選択部6によって)「ビン」を受けとるように選択されまたは選定され、または、言い換えれば、割当部4によって決定されるp_state[bin]などの確率分布予測は、現在考慮されるこのバイナリ算術符号化エンジン10に関連付けられていたため、「ビン」はここで考えられるそれぞれのバイナリ算術符号化エンジン10に関連付けられていたことを想起されたい。)
2.Rを量子化するステップ:
q_index=Qtab[R>>q](または他の形態の量子化;K個の量子化レベルが利用可能である。)
3.RLPSおよびRMPSを決定するステップ:
RLPS=Rtab[q_index](p_state、すなわち、LPSであるビンの確率は、考慮されているバイナリ算術符号化エンジン10に対して固定されており、すなわち、p_stateは現在のエンコーダ10に対して固定されており、p_state[encoder]と表記されうるので、ここでは述べていない。そして、Rtabはp[p_state[encoder]]・Q[q_index]に対して予備計算された値を格納していることに留意されたい)
RMPS=R−RLPS(すなわち、エンコーダ10はインターバルを2つの部分に分ける)
4.新しい部分的インターバルを計算するステップ:
5.LおよびRを繰込み、ビットを書き込むステップ
ここで、
q_index Qtabから読み出された量子化値のインデックスを記述
p_state (バイナリ算術符号化エンジンに対して固定されかつ同エンジン間で互いに異なる)現在の状態を記述
RLPS LPSに対応するインターバル幅を記述
RMPS MPSに対応するインターバル幅を記述
Rmin Rに対する最小許容値を記述
valMPS MPSに対応するビットの値を記述
である。
したがって、バイナリ算術復号化エンジン22は、ビン出力をビンバッファへ復号化する際、以下のステップを実行することができる:
1.それぞれの部分的ビットストリーム24からビン又はビットに対するリクエストを受信するステップ(p_state[bin]などの確率分布予測は割当部16によってバイナリ算術復号化エンジンに関連付けられていたので、すなわち、割当部16および選択部18によって、ここで考慮されるそれぞれのバイナリ算術復号化エンジン22は、この「ビン」または「ビット」を復号化するために選択された(または、言い換えれば、「ビン」はそれぞれのバイナリ算術復号化エンジン22に関連付けられていた)ことを想起されたい)
2.Rを量子化するステップ:
q_index=Qtab[R>>q](または他の形態の量子化)
3.RLPSとRMPSを決定するステップ:
RLPS=Rtab[q_index](p_stateは、考慮されているバイナリ算術復号化エンジンに対して固定されており、すなわち、p_state[encoder]であるので、ここでは、p_stateについて述べておらず、Rtabはp[p_state[encoder]]・Q[q_index]に対して予備計算された値を格納していることに留意されたい)
RMPS=R−RLPS
4.部分的インターバルの位置に依存するビンを決定するステップ:
5.Rを繰り込み、1ビットを読み出し、Vを更新するステップ
ここで、
q_index Qtabから読み出された量子化値のインデックスを記述、
p_state (バイナリ算術復号化エンジンに対して固定された)現在の状態を記述、
RLPS LPSに対応するインターバル幅を記述、
RMPS MPSに対応するインターバル幅を記述、
Rmin Rに対する最小許容値を記述、
valMPS MPSに対応するビットの値を記述、
V 現在の部分的インターバルの内部からの値を記述。
ビンデコーダ22についての以下に概略的に説明する実施形態は、以下に説明されるように、スループットに関して復号化プロセスの改良を達成する。具体的には、MPSのランの符号化は、Rが単にゆっくり変化している間も、Lを不変なままにしておくことができる。p_stateはエンコーダ10/デコーダ22の対に対して一定しているので、ステップ5の繰り込みチェックを含むステップ1〜5をループすることを必要とせずに必要とされる次の繰り込みまでMPSのランをMPSのランの全てのシンボルに対して個別に復号化することが可能である。以下の説明は、1つの対応するp_stateに関連付けられた1つのエンコーダ/デコーダ対の構築を中心に述べる。しかしながら、これにより、1つより多くのデコーダ22はそれぞれ、異なるp_stateまたはRtabによって構築されうる。
D0、...、DK−1がステップ3(「Rの量子化」)における値Rの範囲から値q_indexを導出するために使用されるKの決定しきい値を示すとする。Rがインターバル[Di、Di+1)内にある場合、iと等しいq_indexの値が求められる。これは、図62に示されている。Rの値範囲は、RminとRmaxの間の定義付けと繰り込みの効果に対して求められる。ここで示すように、D0、...、DK−1は、インターバル[Rmin、Rmax)を実質的と等しい長さのサブインターバルへ分割する。
インターバルインデックスi=0...K−1を有する各インターバルには、集合{Q0、...、QK−1}からの代表的インターバル幅値が属しており、上記に説明したように、{RLPS(0)、...、RLPS(K−1)}からのRLPSに対する値は、したがって、所与の代表的インターバル幅値と、ビンとエントロピーエンコーダ/デコーダのそれぞれに関連付けられたLPSに対する予測確率と、に対する表形式の値RLPSを表している。D0がRminと等しいことに留意されたい。
決定インターバル幅Di+1−Diに関するRLPSの十分に小さな値については、複数のMPSを単一サイクル内で復号化することができる(上に概述したステップ1〜5)。これを図61A、Bに示す。同時に復号化することができるMPSの正確な数は、ビンバッファ選択部18が同じビンバッファ20から複数のビンをリクエストすることを前提にした場合、R、Di、およびVに依存している。複数のMPSの最大数NMPSは以下のように与えられる。
T=max{V+1、Di−RLPS} (1)
とすると、次に、
となる。
式(1)の最初の代入「T=V+1」を図61Aに示し、第2の代入、すなわち、「T=Di−RLPS」を図61Bに示す。
この表記によって、上記に概述したバイナリ算術復号化エンジンのステップ4は以下のように変更することができる:
ビンの決定は部分的インターバルの位置に依存している:
if(V≧RMPS)then[no modification for LPS path]{
bin←1−valMPS(ビンはLPSとして復号化され、ビンバッファ選択部はこのビン情報とvalMPSとの使用によって実際のビン値を取得する。)
V←V−RMPS
R←RLPS}
else{
式(1)と(2)を使用して、NMPSを決定する
R←R−NMPS *RLPS
for i=0 to NMPS−1
bin←valMPS(NMPSビンはMPSとして復号化される。ビンバッファ選択部は、このビン情報とvalMPSとの使用によって実際のビンの値を取得する)}。
RLPSに対して任意の値が認められた場合、これは、変更されたステップ4におけるMPSパスの最初の2つのサブステップにおいて整数除算と乗算演算の適用をリクエストする(「それ以外の場合」ブランチに対応する)。
これらの演算をより簡単にするために、2の指数が、本実施形態による、それぞれのエンコーダ/デコーダの{Q0、...、QK−1}とpLPSとの積のそれぞれの積の代表値に対応しているRtab[q_index]における表形式のされたRLPS値として、使用される。更に、仮定が、RLPSが決定インターバル幅Di+1−Diに相対して小さいことを保っているこれらのビンエンコーダ10/デコーダ22に対して、Kの数は小さく保たれる。一般的には、たとえば、K≦2の選択によって保たれる。
(RLPSに対応する)Rtab[1...K]=2αの選択によって、等式(2)は以下のように簡単化される:
NMPS=(R−T)>>α (3)
変更されたステップ4におけるMPSブランチのサブステップ2におけるRの更新は以下のように簡単化される。
10個の異なるビンエンコーダ/デコーダの対10、22のケースを例として考える。例示したケースに於いて、Rは、Rmin=256となるように9ビットで表されることに留意されたい。表8は、例示的にK=4を選択したときの表形式のRLPS値の例を含み、この場合、本実施形態を使用していない。
表9は、表9の最後の3行、すなわち、最も低いp_state値に対応する行番号8〜10、に対応する少なくとも3つのビンエンコーダ/デコーダに対する表形式のR
LPS値の配置に本実施形態が適用された場合の例を示す。行番号6と7に対応するビンエンコーダ/デコーダに対しては、原理が部分的に適用され、これらの行の各々における少なくとも2つの列に対するR
LPS値は2の指数で表されるという結果が得られた。
表9において、各ラインは、10個の異なるエントロピーエンコーダ/デコーダの対10/22に対する表Rtab[1...4]に対応している。
したがって、図61A〜62に関して説明されている実施形態は、とりわけ、シンボル26の列を復元するためのデコーダを記載しており、このデコーダは、各々がそれぞれのビットストリーム24をシンボル21へ変換するように構成されている複数のエントロピーデコーダ22と、シンボルの列の前に復元されたシンボル内に含まれる情報に基づいて復元されるシンボル列の各シンボル26へ多数のパラメータを割り当てるように構成されている割当部16と、複数のエントロピーデコーダの選択された1つから復元されるシンボル列の各シンボル25を検索するように構成されている選択部18であって、この選択がそれぞれのシンボルに対して定義付けられたパラメータの数に応じて行われる、選択部18と、を含む。エントロピーデコーダの少なくとも1つの部分集合の各々は、現在のインターバル幅Rとこの現在のインターバル幅R内の値Vによって定義付けられる内部状態を有するバイナリ算術復号化エンジンでありえ、このバイナリ算術復号化エンジンは、それぞれのビットストリームをシンボルへ変換する際、(1)i=0...K−1であるKインターバル[Di、Di+1)を使用して、Rがインターバル[Dq_index、Dq_index+
1)の範囲に含まれるように、現在のインターバル幅Rを量子化インデックスq_indexにマッピングし;(2)LPSに対応する部分的インターバル幅RLPS=Rtab[q_index]を取得するために、テーブルRtabと、インデックスとしての量子化インデックスq_indexと、を使用して、テーブルRtabへのインターバル分割を実行し、ここで、Rtab[i]はi=0...K−1に対する2の指数であり、ここで、MPSに対応する部分的インターバル幅RMPSはR−RLPSであり;(3)RMPS≦Vであるかどうかをチェックし、RMPS≦Vである場合、現在のシンボルをLPSと等しくなるように復元し、VをV−RMPSになるように、そして、RをRLPSになるように更新し、RMPS≦Vでない場合、現在のシンボルとNMPS−1個の後続のシンボルを、NMPS=(R−max{V+1、Dq_index−RLPS})/RLPSであるMPSと等しくなるように復元し、RをR−NMPS・RLPSになるように更新し、(4)それぞれのビットストリームを用いてRを繰り込みかつVを更新するように構成されている。エントロピーデコーダの部分集合の各々のバイナリ算術復号化エンジンは、Rを繰り込みかつVを更新する際、(4.1)Rmin=D0のときR<Rminであるかどうかをチェックし、R<Rminの場合、(4.2)RがRminと等しいかこれより大きくなるように最小値yを用いてRがR・2yになるように増分し、(4.3)Vyビット位置を左へシフトすることによってVを更新し、(4.4)ライン整列されたそれぞれのビットストリームの次のy個のビットに基づいてVのy個の最下位ビットを設定するように構成されていてもよい。エントロピーデコーダの部分集合は各々が異なるテーブルRtabを有する複数のエントロピーデコーダを含みうる。その場合、複数のデコーダに対して、Rtab[i]が、エントロピーデコーダごとに、pLPSと、
であるベクトル{Q0、...、QK−1}と、のペアが存在するように選択され、これにより、i=0...Kのとき、0.99・pLPS・Qi<Rtab[i]<1.01・PLPS・Qiになり、pLPSは複数のエントロピーデコーダのなかで相互に異なっている。Kは複数のエントロピーデコーダのなかで相互に異なっている。複数のエントロピーデコーダのうち、i=1...Kのとき、K=1またはQi=Q0の少なくとも1つに対して、エントロピーデコーダのバイナリ算術復号化エンジンは、それぞれのビットストリームをシンボルに変換する際、RLPS=Q0を設定することによってインターバル分割を実行し、RMPS≦Vであるかどうかをチェックし、RMPS≦Vである場合、現在のシンボルをLPSと等しくなるように復元し、VをV−RMPSになるように、RをRLPSになるように更新し、RMPS≦Vでない場合、現在のシンボルとNMPS−1個のこれに続くシンボルを、NMPS=(R−max{V+1、Rmin−RLPS})/RLPSであるMPSと等しくなるように復元し、RをR−NMPS・RLPSになるように更新し、それぞれのビットストリームを用いてRを繰り込みかつVを更新するように構成されていてもよい。エントロピーデコーダの部分集合の各々のバイナリ算術復号化エンジンは、項{R−max{V+1、Dq_index−RLPS})log2(RLPS)ビットの結果を右にシフトすることによって、NMPSを計算するように構成されていてもよい。さらに、エントロピーデコーダの少なくとも1つの部分集合の各々は、現在のインターバル幅Rと現在のインターバル幅R内の値Vによって定義付けられる内部状態を有するバイナリ算術復号化エンジンであってもよく、バイナリ算術復号化エンジンは、それぞれのビットストリームをシンボルに変換する際、LPSに対応する部分的インターバル幅RLPSをQ0と等しくなるように設定することによってインターバル分割を実行し、ここで、MPSに対応する部分的インターバル幅RMPSはR−RLPSであり、RMPS≦Vであるかどうかをチェックし、RMPS≦Vである場合、現在のシンボルをLPSと等しくなるように復元し、VをV−RMPSになるように、RをRLPSになるように更新し、RMPS≦Vでない場合、現在のシンボルとNMPS−1個のこれに続くシンボルを、NMPS=(R−max{V+1、Dq_index−RLPS}/RLPSであるMPSに等しくなるように復元し、RをR−NMPS・RLPSになるように更新し、それぞれのビットストリームを用いてRを繰り込みかつVを更新するように構成されている。
以上、装置に関連していくつかの態様を説明してきたが、これらの態様は、ブロックやデバイスが方法ステップやその特徴に対応する、対応する方法の記載をも表すことは明確である。同様に、方法ステップの関連において説明されている態様は、対応する装置の対応するブロックやアイテムや特徴の記載をも表す。方法ステップの一部またはすべてが、たとえば、マイクロプロセッサ、プログラム可能なコンピュータや電子回路などのハードウェア装置によって(またはこれを使用して)実行されうる。いくつかの実施形態において、最も重要な方法ステップの1以上はこのような装置によって実行可能である。