図面の説明に関して、これらの図中のいくつかにおいて発生する要素は、各図面において同一の参照番号によって示され、機能性に関する限り、これらの要素の反復説明は、不要な反復を避けるために省略する。とはいえ、そうでない場合の記述が特にされていない限り、1つの図に関して提供される機能性および説明は、他の図にも当てはめることができる。
本発明の実施形態に係るエンコーダを図1に示す。このエンコーダは、ソースシンボル1のストリームを2つ以上の部分的ビットストリーム12の集合へ可逆的に変換する。本発明の好ましい実施形態において、各ソースシンボル1は、1以上のカテゴリの集合のうちの1つのカテゴリに関連付けられる。一例として、これらのカテゴリは、ソースシンボルのタイプを指定することができる。ハイブリッドビデオ符号化の文脈において、個別のカテゴリは、マクロブロック符号化モード、ブロック符号化モード、基準画像インデックス、動きベクトル差、分割フラグ、符号化されたブロックフラグ、量子化パラメータ、変換係数レベルなどに関連付けられる。オーディオ、音声、テキスト、文書、または汎用データ符号化などの他の応用分野において、ソースシンボルの様々な分類が可能である。
一般に、各ソースシンボルは、有限または可算無限集合の値を取ることができ、可能なソースシンボル値の集合は、異なるソースシンボルカテゴリごとに異ならせることができる。符号化および復号化アルゴリズムの複雑さを低減するとともに、異なるソースシンボルとソースシンボルカテゴリに対する一般の符号化および復号化の設計を可能にするため、ソースシンボル1は、二分決定の順序付き集合に変換され、これらの二分決定は、単純な二値符号化アルゴリズムによって処理される。よって、バイナライザ2は、各ソースシンボル1の値を、ビン3のシーケンス(またはストリング)へ全単射マッピングする。ビン3のシーケンスは、順序付き二分決定の集合を表す。各ビン3すなわち二分決定は、たとえば、0と1の組合せなどの2つの値の組合せから、1つの値を取ることができる。二値化方式は、異なるソースシンボルカテゴリ別に異なっていてよい。特定のソースシンボルカテゴリに対する二値化方式は、その特定のカテゴリに対する可能なソースシンボル値および/またはソースシンボルの他の特性の集合に依存することができる。表1は、可算無限集合のための3つの例示的な二値化方式を示す。これらの可算無限集合の二値化方式は、シンボル値の有限集合に適用することもできる。シンボル値の大きな有限集合の場合は特に、(未使用のビンシーケンスから生じる)非効率性を無視することができるが、このような二値化方式の普遍性は、複雑さとメモリ要件の面で利点を提供する。シンボル値の小さな有限集合の場合、可能なシンボル値の数に対して二値化方式を適応することが(符号化効率の点から)好ましいことが多い。表2は、8つの値から成る有限集合に対する3つの例示的な二値化方式を示している。有限集合に対する二値化方式は、ビンシーケンスの有限集合が冗長度のない符号を表す(かつ潜在的にビンシーケンスを並び替える)ようにビンシーケンスの一部を変更することによって、可算無限集合に対する普遍的二値化方式から得ることができる。たとえば、表2の切り捨てユニタリ二値化方式は、普遍的ユニタリ二値化のソースシンボル7に対するビンシーケンスを変更することによって作られた(表1参照)。表2の次数0の、切り捨てられかつ並び替えられた指数ゴロム二値化は、普遍的指数ゴロム次数0の二値化のソースシンボル7に対するビンシーケンスを変更することによって(表1参照)、およびビンシーケンスを並び替えることによって(シンボル7の切り捨てられたビンシーケンスはシンボル1に割り当てられた)作られた。シンボルの有限集合の場合、表2の最後の列に例示されるように、非系統的/非普遍的な二値化方式を使用することも可能である。
バイナライザ2によって作成されたビンシーケンスの各ビン3は、パラメータ割当部4に順に送られる。パラメータ割当部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、ビンの受信:
(想起:ここで考慮されるそれぞれの二値算術符号化エンジン10は、「ビン」を受け取るように選択されている。その理由は、p_state[bin]などの確率分布推定が、二値算術符号化エンジン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.新しい部分的区間の計算:
if(bin=1−valMPS) then
L←L+R
R←RLPS
5.LおよびRの繰り込み、ビット書き込み、
ここで、
q_indexは、Qtabから読み出された量子化値のインデックスを記述し、
p_stateは、(二値算術符号化エンジン10に対して固定された)現在の状態を記述し、
RLPSは、LPSに対応する区間幅を記述し、
valMPSは、MPSに対応するビットの値を記述する。
したがって、二値算術復号化エンジン22は、ビン出力をビンバッファ20へ復号化する際、以下のステップを実行する:
1.ビンに対するリクエストの受信:
((想起:ここで考慮されるそれぞれの二値算術復号化エンジン22は、「ビン」を復号化するように選択されている。その理由は、p_state[bin]などの確率分布推定が、二値算術復号化エンジン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.部分的区間の位置に応じたビンの決定:
if(V≧R) then
bin←1−valMPS(ビンはLPSとして符号化される。ビンバッファ選択肢18はこのビン情報とvalMPSを使用して実際のビン値を取得する。)
V←V−R
R←RLPS
else
bin←valMPS(ビンはMPSとして符号化される。ビンバッファ選択子18はこのビン情報とvalMPSを使用して実際のビン値を取得する。)
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のシーケンスをリクエストされたソースシンボルに対する特定の二値化方式のビンシーケンスと比較して、受信した復号化されたビン26のシーケンスがソースシンボルの二値化と整合した場合、バイナライザはそのビンバッファを空にして新しく復号化されたシンボルに対するリクエストへの最終応答として復号化されたソースシンボルを出力する。既に受信した復号化されたビンのシーケンスがリクエストされたソースシンボルに対する二値化方式に対するビンシーケンスのいずれとも整合しない場合、バイナライザは、復号化されたビンのシーケンスがリクエストされたソースシンボルに対する二値化方式のビンシーケンスの1つに整合するまで、ビンに対する他のリクエストをパラメータ割当部へ送信する。ソースシンボルに対するリクエストごとに、デコーダは、対応するソースシンボルを符号化するために使用されたものと同じ二値化方式を使用する。二値化方式は、異なるソースシンボルカテゴリごとに異なっていてよい。特定のソースシンボルカテゴリに対する二値化方式は、可能なソースシンボル値および/または特定のカテゴリに対するソースシンボルの他の特性の集合に依存することができる。
パラメータ割当部は、ビンに対する各リクエストへ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の履歴からどの予想が推定可能であるかが現在予想されている、―二値化などの―表現に対してシンタックス要素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は、以下に説明されるように動作する。上述したように、図9の実施形態によれば、エントロピーエンコーダは可変長符号器であり、シンボルシーケンスをそれぞれの最大ビット長Lx以下の長さの符号語にマッピングする。どのVLC符号を使用するかは重要ではない。
特定のビットバッファ48によって予約されるビットの量をNxと表記する。このビット数Nxは、異なるビットバッファ48に対して異なる値とすることができ、また、経時的に変化させることができる。本発明の好ましい実施形態では、特定のビットバッファ48によって予約されるビット数Nxは、経時的に固定される。
固定数Nxのビット49の予約は、ビットバッファ48内のビット数Mx、予約リクエストのビット数Nx、ビットバッファ内に格納されることが意図される最小の符号語数Cx、および関連付けられた最大符号語長Lxに基づいてトリガされる。
Cx=0が最高の符号化効率を可能にすることに注意する。その理由は、最新の確率を用いて新しい固定長シーケンスを予約し、これが、さらなる結果においてフラッシュを生じさせる不必要な予約の可能性を低減するからである。とはいえ、ハードウェアベースのデコーダの実施のためには、より上位の値が望ましい。Cx=1の場合、少なくとも1つの完全な符号語がビットバッファ内で利用可能であり、単一ビンリクエストに対して、ビットバッファを補充するためにパイプラインを停止させることなく、常に応答できる。また、各ビンエンコーダ10が異なる最大符号語長Lxに関連付けられ、Nx≦max((Cx+1)*Lx−1,Lx)が満たされなければならないことに注意が必要である。
ビン7が特定のビンバッファ8に送信され、特定のビンバッファ8は空であり、かつ、Nxビットのシーケンスが(ビンエンコーダを介して)特定のビンバッファに連結されているビットバッファ48に対するグローバルビットバッファ内に予約されていない場合、連結されたビットバッファ49は、グローバルビットバッファ51へNxビットの予約に対するリクエスト49を送信する。そうでなければ、ビン7が特定のビンバッファ8へ送信され、特定のビンバッファ8が空であり、唯一のNxビットのシーケンスが(ビンエンコーダを介して)特定のビンバッファに連結されているビットバッファ48に対するグローバルビットバッファ内に予約され、(ビンエンコーダを介して)特定のビンバッファに連結されているビットバッファ48の予約リクエストによって予約されたビット数Nxと、このビットバッファ48内に現在存在しているビット数Mxとの差Nx−Mxが、対応するビンエンコーダ10に関連付けられた最大符号語長Lxに、意図される符号語数Cxを1増分したものが乗算された値より小さい値である場合(Nx−Mx<(Cx+1)*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が(Cx+1)*Lxより小さい場合)、次に、ビンはビンバッファ8等に挿入される。
言い換えれば、グローバルバッファ51は、これらのトランシェエントリに対する予約がトリガされる順に応じた順番で、複数のエントロピーエンコーダに対して、トランシェエントリのシーケンス、すなわち、長さNxのビットシーケンスを予約する。次に、トリガは、上のように行われる。すなわち、複数のエントロピーエンコーダ10とそれぞれの個別のバッファ48が、選択部6により複数のエントロピーエンコーダ10へ転送されたシンボルシーケンスのシンボルがそれぞれのエントロピーエンコーダ10において符号語にマッピングされる新しいシンボルシーケンスの初期部分になるときに、エントロピーエンコーダのそれぞれの1つに対してビット長Nxのトランシェエントリの予約49をトリガするように協働し、その際、(新しいシンボルの初期部分の)それぞれの時点で、それぞれのエントロピーエンコーダ10に対するグローバルバッファ51内に現在予約されているビット数マイナスそれぞれのエントロピーエンコーダ10の個別のバッファ48、または、予約されたNxビットの中間の部分書き込みの場合におけるそれぞれのエントロピーエンコーダに対するグローバルバッファにおいて、現在バッファリングされているビット数Mxが、それぞれのエントロピーエンコーダに対するさらなる符号語の意図される最小数Cxプラス1にそれぞれの最大ビット長Lxを乗算したもの、すなわち、(Cx+1)・Lxを収容するには不十分であることを前提としている。
ビットライタ53は、グローバルビットバッファの固定長のビットシーケンスを、それらが予約された順に書き込む。グローバルビットバッファ51における最初の固定長エントリがグローバルビットバッファに実際に挿入された固定長ビットシーケンスを含む場合(すなわち、予約だけではない場合)、ビットライタ53は、グローバルビットバッファ51からこのビットシーケンス52に対するビットを取り出し、ビット54をビットストリームに書き込む。このプロセスは、グローバルビットバッファにおける最初の固定長エントリが予約されたまたは空きのエントリを表すまで、繰り返される。グローバルビットバッファにおける最初の固定長のエントリが予約されたエントリを表す場合、ビットライタ53は、このエントリがビットストリーム55へさらなるビット54を書き込む前に実際のビットで埋め込まれるまで、待機する。
すなわち、複数のエントロピーエンコーダ10の個別のバッファ48は、ビットストリーム47のバッファリングされた部分を出力して、それぞれの予約されたトランシェエントリをグローバルバッファ51内に満たし、グローバルバッファ51は、満たされたトランシェエントリをシーケンシャルに取り出して、複数のビットストリームの、ビットストリームのトランシェの単一のストリーム52を得る。この単一ストリーム52には、トランシェがインターリーブにより散在する。すなわち、ビットライタ53の機能性は、グローバルバッファ51内に含まれるものとする。
データパケットの最後に、ビンバッファは、上記したようにフラッシュされる。さらに、ビットバッファは、グローバルビットバッファ内のすべての予約されたバッファエントリが埋まり、ビットストリームに書き込まれるまで、特定のまたは任意の値を有するビットを追加することによってフラッシュする必要がある。
図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は、エントロピーデコーダ22に含まれるものとすることもできる。
本発明の特定の実施形態において、ビットバッファ58とグローバルビットバッファ61は以下に説明されるように演算する。特定のビットバッファ58によってリクエストされ読み出されるビットの量はNxと表記され、エンコーダ側で対応するビットバッファによってグローバルビットバッファへ書き込まれるビット量と等しい。このビット数Nxは異なるビットバッファ58ごとに異ならせることができ、また、経時的に変化し得る。本発明の好ましい実施形態において、特定のビットバッファ58によってリクエストされかつ読み出されるNx個のビット数は、経時的に固定される。
ビットの固定数Nx個60の読出しは、ビットバッファ58内のビット数Mx個、ビットバッファ内への格納が意図される最小符号語数Cx、および関連付けられた最大符号語長Lxに基づいてトリガされる。各ビンデコーダ22が異なる最大符号語長Lxに関連付けられ、Nx≦max((Cx+1)*Lx−1,Lx)を満たすべきであることに注目する。
ビン19に対するリクエストが特定のビンバッファ20に送信され、特定のビンバッファ20が空であり、かつ、特定のビンバッファ20に(ビンデコーダを介して)連結されているビンバッファ58内のビット数Mx個が、対応するビンデコーダ22に関連付けられる最大符号語長Lxに意図される符号語数Cx個を1増分した値を乗算したものを下回る場合(Mx<(Cx+1)*Lx)、連結されたビットバッファ58はグローバルビットバッファ61へ新しいNx個のビットシーケンスに対するリクエスト59を送信する。このリクエストへの応答として、最初のNx個のビットがグローバルビットバッファ61から取り出され、このNx個のビットのシーケンス60はこのリクエストが送信された元のビットバッファ58へ送信される。最終的に、このNx個のビットのシーケンスは対応するビットバッファ58へ加算される。次に、次の符号語57がこのビットバッファから読み出され、連結されているビンデコーダ22は関連付けられたビンシーケンス21を連結されているビンバッファ20内へ挿入する。ビンに対する元のリクエスト19に対する最終応答として、最初のビンはビンバッファ20から取り出され、この復号化されたビン25はビンバッファ選択部18へ送られる。次のビンリクエスト19が特定のビンバッファ20へ送られ、このビンバッファが空でない場合、次のビットはビンバッファ20から取り出される。ビンバッファ20が空であるが、連結されたビンバッファ58内のビット数Mx個が、関連付けられる最大符号語長Lxに意図される符号語数Cxを1増分した値を乗算したものに等しいかそれより大きい場合(Mx≧(Cx+1)*Lx)、次の符号語がビットバッファから読み出され、新しいビットシーケンスがビンバッファへ挿入され、そこから第1のビットが取り出されてビンバッファ選択部へ送信される。ビンバッファ20が空でありかつ連結されているビンバッファ58内のビット数Mx個が、関連付けられた最大符号語長Lxに意図される符号語数Cxを1増分した値を乗算したものを下回る場合(Mx<(Cx+1)*Lx)、次のNx個のビットシーケンスがグローバルビットバッファ61から読み出され、連結されたビットバッファ58内へ挿入された場合、次の符号語がビットバッファから読み出され、新しいビンシーケンスがこのビンバッファへ挿入され、このシーケンスの第1のビンが取り出されてビンバッファ選択部へ送信される。このプロセスは、すべてのソースシンボルが復号化されるまで反復される。
言い換えれば、グローバルバッファ61は、複数のビットストリームのビットストリーム60のトランシェの単一ストリーム62を受け取る構成であり、この単一ストリーム62内に、トランシェがインターリーブされて散在している。ここで、グローバルバッファ61は、トランシェに対するリクエスト59が発生する順に依存して、グローバルバッファから複数のエントロピーデコーダにトランシェをシーケンシャルに分配するように構成される。特に、複数のエントロピーデコーダ22の各々が複数のエントロピーデコーダから選択部18によって検索されたときに復元されるシンボルシーケンス25のシンボルのうち、それぞれのエントロピーデコーダによってそれぞれのビットストリーム57内で新しい符号語からマッピングされる新しいシンボルシーケンスの初期部分を形成するシンボルに遭遇するときに、グローバルバッファ61からそれぞれのビットストリームのそれぞれのビット長Nxのトランシェに対してそれぞれのリクエスト56、59をトリガし、それぞれの時点で、グローバルバッファ61によってそれぞれのエントロピーデコーダ22へ分配されているが、それまで、新しい符号語を含めて、エントロピーデコーダ22によって未だにエントロピー復号化されていないそれぞれのビットストリーム57のビット数Mx個が、それぞれのエントロピーデコーダ22に対するさらなる符号語の意図される最小数Cxプラス1にそれぞれの最大ビット長Lxを乗算したもの、すなわち、Cx+1・Lx未満であることを前提としている。
データパケットの最後において、リクエストされたソースシンボルを復号化するために必要とされる以上のビンおよび/またはビットがビンバッファおよび/またはビットバッファに挿入されることもある。ビンバッファ内の残留ビンとビットバッファ内の残留ビットは破棄され、無視される。
[低遅延制約を有する固定長のビットシーケンスのインターリービング]
固定長のビットシーケンスのインターリービングによるエントロピーエンコーダおよびデコーダに対する記載されている実施形態は、上記されているエンコーダバッファ遅延を制御するための方式と組み合わせることもできる。基本的な概念は、上記の遅延制御を有する実施形態と同じである。遅延または遅延の上限に関連した測度(以下参照)が指定されたしきい値を超えた場合、最初に予約されたバッファエントリは、(データパケットの最後に使用したものと同様のメカニズムを用いて)対応するビンバッファをフラッシュし、予約された固定長のバッファエントリのすべてのビットを埋めるためにさらなるビットを潜在的に書き込むことによって、埋められる。このようなメカニズムによって、関連付けられた遅延測度が指定されたしきい値を下回るまで、待機するバッファエントリの数が削減される。デコーダ側において、遅延制約を遵守するために、エンコーダ側で挿入されていたビンおよびビットを破棄する必要がある。ビンおよびビットを廃棄するために、基本的に、エンコーダ側と同様のメカニズムを使用することができる。
本発明の好ましい実施形態において、遅延(または遅延の上限)の測度は、グローバルビットバッファ内のアクティブなバッファエントリにおけるビット数であり、ここで、アクティブなバッファエントリの数は、予約された固定長バッファエントリの数と、既に書き込まれたビットを含む固定長のバッファエントリの数と、の合計である。なお、ビットライタ53にさらなる制約が適用される。グローバルビットバッファ51内の第1の固定長エントリが固定長ビットシーケンスを含む場合はいつでも(すなわち、予約されているだけではない)、ビットライタ53がビットの書き込みを開始する低遅延制約なしの場合とは対照的に、このプロセスは次の固定長予約リクエスト49がトリガされるまで遅延し、その後、そのリクエスト49の直前に実施される。理由は以下の通りである。ビットライタ53がグローバルバッファ51を常に読み出すことが可能になれば、エンコーダおよびデコーダは、ビンレベルで、すなわち、共通のビンシーケンスのビンごとに、低遅延制約をチェックする必要がある。しかしながら、これは、遅延などに関してほとんどペナルティなしで回避できるが、手間のかかる作業である。
最大許容バッファ遅延(応用により決定されるが)をD個のビットとする。この最大バッファ遅延Dは、エンコーダとデコーダの両方に知られている必要がある。本発明の好ましい実施形態において、最大バッファ遅延Dは、応用によって固定される。本発明の他の好ましい実施形態において、最大バッファ遅延Dは、ビットストリームの内部、たとえば、ビットストリームに含まれる、データパケットのヘッダ(またはスライスヘッダ)またはパラメータ集合内で信号伝達される。ビット、またはバイト、またはビットの倍数、またはバイトの倍数の単位で信号伝達できる。ビンエンコーダ10がグローバルビットバッファ51へ新しい固定長のビットシーケンスの予約に対するリクエストを送信する場合、新しい固定長のバッファエントリが予約される前に、次のプロセスが実行される。
グローバルビットバッファ内のアクティブなバッファエントリ内のビット数と現在の予約リクエストによって予約されたビット数との合計が最大バッファ遅延Dより大きい場合、(予約された)最初のバッファエントリは、グローバルビットバッファ内のアクティブなバッファエントリ内のビット数と、現在の予約リクエストによって予約されたビット数との合計が最大バッファ遅延Dと等しいかまたはこれより少なくなるまで、以下に記載されるプロセスによってフラッシュされる。予約された固定長バッファエントリのフラッシュはデータパケットの最後におけるフラッシュに類似している。対応する第1のバッファエントリを予約しているビットバッファ48に連結されているビンエンコーダ10は、フラッシュされる。これは、対応するビンバッファ8が空でない場合、特定のまたは任意の値を有するビンは、得られたビンシーケンスが符号語に関連付けられるビンシーケンスを表すまで、連結されたビンバッファ8に追加され、この符号語は、その後、対応するビットバッファ48内へ挿入されることを意味する。前述したように、ビンバッファにビンを追加するための1つの好ましい方法は、最短の可能な符号語を生成するビンを追加することである。フラッシュされるビットバッファがグローバルビットバッファ61から固定長ビットシーケンスをリクエストしたものと同じである場合には、ビットバッファはリクエスト59をトリガした単一ビンだけを格納し、これはフラッシュされない。対応するビットバッファ48内で得られたビット数Mx個が固定長シーケンスのビット数Nx個より小さい場合、MxがNxに等しくなるまで、できるだけ多くの特定のまたは任意のビットが追加される。その後(ビンが追加されても追加されなくても)、MxがNxに等しいかそれより大きくなり、ビットの1つの固定長シーケンスがグローバルビットバッファ51内の対応する予約されたスロットへ書き込まれる(そして、固定長予約リクエスト49の直前、またはビットストリームの最後のフラッシュ処理プロセスにより、ビットライタ53の次の処理の間、ビットストリーム55へ書き込まれる)。すなわち、それぞれのビンバッファ内に既存のビンを詰め込むことにより、たとえば、新しい符号語の発生の実施が原因で、ビット数がNxを超える場合、それぞれのビットバッファ48を完全にフラッシュする必要はない。むしろ、これらのビットはそれぞれのビットバッファ48内に残り、さもなければ、ビットレートにさらなる歪みをきたすとされるビットの詰め込みは必要ない。
すなわち、換言すれば、グローバルバッファ51は、予約されてから最も時間が経過して既に満たされているトランシェエントリを含めてそのエントリから、予約されてから最も時間が経過してもまだ満たされていないトランシェエントリまで、ただしそのエントリは除いて、複数のエントロピーエンコーダ10とそれぞれの個別のバッファ48のいずれかによってそれぞれの予約のトリガ49のときにトランシェエントリの単位で、順番に、書き込み済みのトランシェエントリの取り出しを実行するように構成される。
グローバルバッファ51は、複数のエントロピーエンコーダとそれぞれの個別のバッファのいずれかによるそれぞれの予約のトリガ49のときに、以下を行うように構成される。
第1に、グローバルバッファ51は、予約されてから最も時間が経過して既に満たされているトランシェエントリを含めてそのエントリから、予約されてから最も時間が経過してもまだ満たされていないトランシェエントリまで、ただしそのエントリは除いて、トランシェエントリのうち書き込み済みトランシェエントリの取り出しを終わらせる。
第2に、グローバルバッファ51は、予約されたトランシェエントリによってカバーされたグローバルバッファ51内のビット数プラスそれぞれの予約−トリガ型エントロピーエンコーダ10に対して、リクエストされたトランシェエントリのビット長Nxが最大バッファ遅延Dより大きいかどうかをチェックする。
第3に、チェック結果が否定されれば、グローバルバッファ51は、それぞれの予約−トリガ型エントロピーエンコーダ22に対して、ビット長Nxのそれぞれの新しいトランシェエントリを予約する。
しかしながら、チェック結果が肯定であれば、予約されてから最も時間が経過してもまだ満たされてないトランシェエントリを予約しているエントロピーエンコーダ10が、グローバルバッファ51により、選択部6によりそのエントロピーエンコーダに転送させ、あれば、未だエントロピー符号化されていないシンボルを有効シンボルシーケンスへ拡張させ、対応する個別のバッファによってバッファリングされるように、有効シンボルシーケンスを符号語にマッピングさせる。その後、予約されてから最も時間が経過してもまだ満たされてないトランシェエントリが、予約されたエントロピーエンコーダ22の個別のバッファ48内で現在バッファリングされているビット数Mx個がこのエントロピーエンコーダ22に対するビット長Nxより小さいかどうかをチェックし、小さい場合、Nx−Mxを現在バッファリングされているMx個のビットへ追加する。有効シンボルシーケンスへの拡張または任意の追加が必要か否かにかかわらず、予約されてから最も時間が経過してもまだ満たされてないトランシェエントリを予約しているエントロピーエンコーダ22の個別のバッファ48からNx個のバッファリングされたビットは、これを書き込むために、予約されてから最も時間が経過してもまだ満たされてないトランシェエントリ内に出力され、その際、出力されたNx個のバッファリングされたビットを上回る可能性のなる付加的にバッファリングされたビットを個別のバッファ内に残す。
その後、トランシェエントリへのリクエストを最終的に処理するために低遅延基準を再度チェックする前に、一方で少なくとも1つの満たされてから最も時間が経過しているトランシェエントリ(少なくともフラッシュによって満たされてから最も時間が経過しているものを含む)がグローバルビットバッファ51から出力され、その後、低遅延基準が再びチェックされ、以下同様に行われる。
デコーダ側では、遅延制約を遵守するために追加されたビンおよびビットを破棄するために、同様のプロセスが実行される。これにより、デコーダは、グローバルビットバッファから読み出されたビットをカウントするカウンタCを維持する(このカウンタは、グローバルビットバッファ内で維持することができる)。カウンタCは、データパケットの復号化の開始時に(たとえば、ゼロに)初期化され、固定長のシーケンスが読み出された後に増加される。Nxビットの固定長シーケンスがグローバルビットバッファ61から読み出された場合、カウンタCはNx増加される。全体カウンタCに加えて、各ビットバッファ58は2つのカウンタCx1とCx2を含み、これらのカウンタは、対応するビットバッファ58へ読み出された最後の2つの固定長ビットシーケンスの前に、ビットカウンタCの値を格納する。2つ未満の固定長ビットシーケンスが特定のビットバッファ58内にあり、Cx1が先に読み込まれていた固定長ビットシーケンスに対応している全体カウンタ値を常に格納することを確かなものにする。これは、ビットがビットバッファ58から除かれたとき、Cx2はCx1になることができ、その後、Cx2は定義付けされないことを示唆している。特定のビットバッファ58が新しい固定長のビットシーケンスを読み出す場合、そのカウンタCx1またはCx2は、ビットバッファ58が空であるかどうか(Cx1)または空でないかどうか(Cx2)に応じて、第1のステップとして、Cに等しく設定され、その後、固定長ビットシーケンスがグローバルビットバッファ61から読み出される。固定長ビットシーケンス59に対するリクエストがグローバルビットバッファ61へ送信され、全体カウンタCと、すべてのビットバッファの最小値Cx1を有するビットバッファ58のカウンタCx1と、の差(C−Cx1)が、最大バッファ遅延Dより大きい場合、対応するビンバッファ20に現在格納されているすべてのビンおよびCx1に関連付けられた固定長シーケンスに由来する連結されたビットバッファ58に格納されるすべてのビットが、切り捨てられ無視される。この追加のステップ以外に、復号化は、上記のように演算される。ビンに対するリクエスト19が送信される先のビンバッファ20が、(すべてのビンが既に取り出されていたため、またはビンリクエストが受信された後に低遅延メカニズムが第1のステップにおいてすべてのビンを破棄したため)空である場合、連結されているビンデコーダ22は、連結されているビットバッファ58から新しい符号語を読み出すことを試みる。ビットバッファ58内のビット数が最大符号語長より少ない場合、符号語が読み出される前に、グローバルビットバッファ61などから新しい固定長ビットシーケンスが読み出される。
言い換えれば、デコーダは、エントロピーデコーダごとに、グローバルバッファ61からそれぞれのエントロピーデコーダ22への分配から最も時間が経過したトランシェについて、グローバルバッファ61から複数のエントロピーデコーダ22へ分配させたビット数を
ロギングする。また、デコーダは、それぞれのビット長Nxのトランシェに対するそれぞれのリクエストがトリガされる度ごとに、一方で、それぞれのリクエストに至るまで、グローバルバッファ61から複数のエントロピーデコーダ22へ分配させたグローバルビット数と、他方で、ロギングされた最小ビット数Cx1と、の差が、最大バッファ遅延Dより大きいかどうかを判断する。大きい場合、グローバルバッファ61からロギングされた最小数がロギングされていたエントロピーデコーダ22まで分配させた予約から最も時間の経過したトランシェと、ロギングされた最小数が選択部18によりロギングされているエントロピーデコーダ22から未だ検索されていない任意のシンボル21と、を切り捨てる。
前述した低遅延の実施形態はCx=0による実行されても好適かつ有利であろうことは言うまでもない。
[低遅延制約を有する固定長ビットシーケンスと削減されたビットレートオーバーヘッドのインターリーブ]
前述の方式は、低遅延操作がもたらすビットレートオーバーヘッドを削減するために、さらに最適化される。同程度に可能性のあるビンに対して適切であり、かつ各ビン7から1ビット長の符号語47を生成する特定のビンエンコーダ10が存在すると想定し、これが他のビンエンコーダ10より高頻度で使用されるとさらに想定する。正確に言えば、このようなより高頻度で使用されるビンエンコーダ10は、ビンバッファ選択部6によって、より高頻度にビン7を設けることができる。さらに、このようなより高頻度で使用されるビンエンコーダ10は、より多くの符号語47を生成し、したがって、グローバルビットバッファ51へ転送されるより多くの固定長ビットシーケンス50を生成することもできる。同程度に可能性あるビンに対してこのようなより高頻度で使用されるビンエンコーダ10を有するコーデック設定において、前のセクションで説明したようなインターリーブ方式への変更は、低遅延制約によって生じるフラッシュ動作に由来するビットレートオーバーヘッドを削減することができる。上記方式に必要とされる変更を以下に説明する。
ビンエンコーダ10が、グローバルビットバッファ51へ、新たな固定長ビットシーケンスの予約に対するリクエストを送信する場合、低遅延基準がチェックされ、この基準を外す限り、フラッシュ動作が実行される。新規発明は、前のセクションの方式と全く同じ手順を使用するが、同程度に可能性のあるビンに対するより高頻度で使用されるビンエンコーダ10が新しい固定長ビットシーケンスの予約に対するリクエストを送信する場合において、さらなる処理ステップをグローバルビットバッファ51に追加する。低遅延基準をチェックする代わりに、グローバルビットバッファ内のアクティブなバッファエントリのビット数プラス現在の予約リクエストにより予約されるビット数が、定義済みの閾値D2より大きいかどうかがチェックされる(D2<D)。
大きい場合、以下の処理ステップが実行される。
・グローバルビットバッファ51内で予約されてから最も時間が経過してもまだ満たされていないトランシェエントリに属しているビンエンコーダ10が決定される(なお、ビンエンコーダ10は1ビットの符号語47しか生成しないので、等しくあり得るビンに対してより高頻度で使用されるビンエンコーダ10であるはずがなく、よって、属しているビットバッファ48は空である必要がある)。グローバルビットバッファ51内で予約されてから最も時間が経過してもまだ満たされていないトランシェエントリに属しているビンバッファ8内のビンは、(符号語、好ましくは、短い符号語を作成するために、任意のまたは特定のビンを追加することによって、)符号語47が生成されるまでに終了し、この符号語が、対応するビットバッファ48に追加される。次のステップにおいて、このビットバッファのコンテンツが同程度に可能性のあるビンに対してより高い頻度で使用されるビンエンコーダ10の空のビットバッファ48へ移動し、グローバルビットバッファ51内の予約されてから最も時間の経過したトランシェエントリの所有権は、同程度に可能性のあるビンに対してより高頻度で使用されるビンエンコーダ10へ移動する。その後、新しい固定長ビットシーケンスを予約することがまだ必要かどうかがチェックされ、必要であれば、手順は前のセクションで説明した方式と全く同様に続行される(低遅延基準のチェック、潜在的バッファのフラッシュ、符号語予約)。
さもなければ、すなわち、グローバルビットバッファのアクティブバッファエントリ内のビット数プラス現在予約リクエストによって予約されるビット数が定義済みの閾値D2より大きくないことが分かった場合(D2<D)、
・手順は前のセクションにおいて説明した方式と全く同様に続行される(低遅延基準のチェック、潜在的バッファのフラッシュ、符号語予約)。
図64〜図68は、すべてのビンエンコーダおよびすべての予約に対して、例としてLx=8とし、バッファ書き込み例による4つのビンコーダの設定の一例を使用して、上記の手順を示している。インデックス1を有するビンエンコーダ10は、より高頻度で使用されるビンエンコーダである必要がある。
第1に、固定長ビットシーケンスの予約に対するリクエストが、インデックス1を有するビンエンコーダによってもたらされる(図64参照)。結果的に、グローバルビットバッファ51内のアクティブバッファエントリ内のビット数プラス現在予約リクエストによって、予約されるビット数が定義済みの閾値D2より大きいかどうかがチェックされる。この実施例では、閾値D2より大きい場合を示しており、よって、予約されてから最も時間が経過してもまだ満たされていないグローバルビットバッファの予約に係るビンエンコーダがフラッシュされる。この実施例において、これはビンエンコーダ3である(図64参照)。フラッシュプロセスによって生成される符号語は、図65に示すように、インデックス3を有するビットバッファへ転送される。これに続いて、ビットバッファ3のコンテンツはビットバッファ1へ移動し(このような状況においては、常に空である。図66参照)、インデックス3を有するビンエンコーダの予約は、インデックス1を有するビンエンコーダへ切り替わる(図67参照)。最後のステップとして、予約のリクエストが必要かどうかの初期チェックが反復される(図68参照)。すなわち、新しく書き込まれたビットバッファ1が、Lx個の予約ビットだけが新しいリクエストが必要であるとされたそれぞれのエントロピーエンコーダへシフトしている間、エントロピーエンコーダ1に対するLx−MxがCxおよびLxに応じて上述の基準を満たすことを意味する、それほど多くのビットを得たかどうかチェックされる。得られていれば、プロセッシングは、前のセクションで説明したように続行される(低遅延基準のチェック、潜在的バッファのフラッシュ、符号語予約)。得られていない場合、ビンエンコーダ1から4のいずれかにおいて次の符号語の準備が整うまで、予約に対する新しいリクエストは発生しない。
上記変形例では、強制符号語終了の数は増加するが、閾値D2が(D、ビンエンコーダ10の特性、およびビンバッファ選択部6がどのようにビンをビンエンコーダ10へ分配させるかの統計に応じて)適切に選択された場合、後に続くトランシェエントリ終了の数は減少し、よって、全体的なビットレートオーバーヘッドが削減される。
デコーダの実施についての変更も、以下のように必要である。固定長ビットシーケンス59に対するリクエストが、同程度に可能性のあるビンに対してより高頻度で使用されるビンデコーダ22によって、グローバルビットバッファ61へ送信された場合、全体的なカウンタCと、すべてのビットバッファのCx1の最小値を有するビットバッファ58のカウンタCx1と、の差(C−Cx1)が評価される:
その値が定義済みの閾値D2より大きい場合、
・対応するビンバッファ20内に現在格納されているすべてのビンは切り捨てられるが、Cx1に関連付けられる固定長シーケンスに由来する連結されたビットバッファ58内に格納されているすべてのまだ消費されないビットが同程度に可能性のあるビットに対するより高頻度で使用されるビンデコーダ22のビットバッファ58へ移動される。すなわち、より高頻度で使用されるビンデコーダ22のビットバッファ58が、今度は、CxとLxに応じて上述基準に基づいて符号語を復号化するために十分な未消費ビットを含んでいるかどうかがチェックされる。含んでいる場合、手順は前のセクションにおいて説明したように続行される(低遅延基準のチェック、ビンとビットの潜在的切り捨て、固定長ビットシーケンスの読出し)。
さもなければ、その値が最大バッファ遅延Dより大きい場合、同様の処理が前のセクションにおけるように続行される(低遅延基準のチェック、ビンとビットの潜在的切り捨て、固定長ビットシーケンスの読出し)。
[インターリーブされた固定長ビットシーケンスの処理最適化]
低遅延制約の有無に応じた、および/または、デコーダに対する最小符号語保証をもつ、固定長ビットシーケンスのインターリーブによるエントロピーエンコーダおよびデコーダに対する図9〜11に記載された実施形態は、デコーダ並列化処理を容易にするための以下の方法で拡張することができる。低遅延制約に関して上述したエンコーダバッファ遅延を制御するための方式に組み合わせた下記の実施形態が特に有利である。
ここで記載した実施形態は、デコーダにおいて最適化された処理のための仕組み(スキーム)を定義付ける。これは、低遅延の場合のみならず、デコーダによって処理されるべき「固定区間」または「チャンク」サイズが存在する他のどのような場合でも適用できる。このプロセスは、「チャンク」に対する処理の仕組みに基づくデコーダでの簡易化処理を可能にし、特別なビットストリーム内信号伝達または帯域外の明示的または暗黙の信号伝達として最も明確に記載される。「トランシェ処理の仕組み」は「チャンク」内でどのくらい多くの特定「パイプ」のトランシェが続くかをデコーダへ示す。この特定の仕組みは、たとえば、ラウンドロビン方式で、「パイプデコーダ」を「書き込む」ために使用される。この仕組みは、「チャンク」の最後まで適用される。これによって、デコーダが処理される次のパイプを検出せずに、符号語の直線的処理を可能にする。これは処理される次のパイプの検出をもはや必要としないので、デコーダの実施を簡易化する。
エンコーダの実施形態を図61に示し、デコーダの実施形態を図62に示す。ほぼすべての要素が図9および図11に示したものと同じであり、よって、これらの図面に関して記載した実施形態の上記説明を参照されたい。ただし、フラグメンタイザ200は、ビットライタ53と、最終的に転送されるビットストリーム55が適用される出力と、の間に配置され、デフラグメンタイザ202は、転送されたビットストリーム63が入力する対応する入力と、グローバルビットバッファ61に代えて個別バッファ58と、の間に配置される。
フラグメンタイザ200は、ビットストリーム62として示すトランシェの単一のストリームを、チャンクへフラグメンタイズ(断片化)する。1つのこのようなチャンク204を図63に示す。各チャンク204は、複数のエントロピーエンコーダ番号、すなわち、それぞれの部分的ビットストリームP番号のトランシェが、ビットストリーム63を形成するチャンクのシーケンスを取得するために、どのようにそれぞれのチャンク204に対して分配されるかについての情報を含むヘッダ206を有するデフラグメンタイザ202を伴う。ヘッダ情報に対する形式例は以下に説明され、参照番号208で例示する。具体的には、以下に説明するように、フラグメンタイザは、トランシェの単一ストリームをチャンクへフラグメンタイズする際、トランシェの単一ストリーム内のそれぞれのチャンクのトランシェの元の順番を、そのトランシェ内のそれぞれのチャンクに付随の情報により示される所望の順番に変更する。
デコーダは、チャンクのヘッダ206内の情報を使用してビットストリーム63が表すチャンクのシーケンスのチャンク内のトランシェを分配する構成のデフラグメンタイザ202を備える。個別のチャンクを形成する際に、符号化側が各個別の部分的ビットストリーム60に対してトランシェの間で順序を維持したように、デフラグメンタイザ202は、エントロピーデコーダおよび部分的ビットストリーム60のそれぞれとのトランシェの関連付けに応じて、チャンク内のトランシェを、VLC符号語がビンデコーダ22によるリクエスト56によってフェッチされるビットバッファ58に分配させる必要がある。
したがって、3種類の情報:それぞれのチャンク内のトランシェ位置、トランシェのエントロピーデコーダとの関連付け、および各部分的ビットストリームが個別に関わっているトランシェの間での正確な順序、をデフラグメンタイザに知らしめる必要がある。第1の種類の情報は、例えば、すべてのエントロピーデコーダに等しいNxを使用し、チャンクのサイズを所定のNxの倍数に設定することによって、デフォルトによりデコーダに知らしめられるが、トランシェのエントロピーデコーダとの関連付けおよび正確な順序に対する部分的ビットストリームの個別の並び替えは、ヘッダに示されるか、または、ストリーム外のサイド情報として示される。いうまでもなく、フラグメンタイザは、この並び替えを、正確な順序に対する部分的ビットストリームの個別の並び替えが部分的ビットストリームごとに維持されるような並び替えに限定してもよい。
したがって、エンコーダ側に並び替えが適用された場合、デフラグメンタイザは、情報が並び替えられた順序でそれぞれのエントロピーデコーダに属しているトランシェの位置を示したときに、これに応じて行動する。
仕組みの一例として、以下のような想定数4個のパイプに対する「チャンク」のトランシェ体系について説明する:
パイプ番号 チャンク数
0 4
1 3
2 2
3 1
デコーダは、実施例において、「チャンク」のすべてのデータが消費されるまで、以下のようにデータを処理する。デコーダはトランシェを消費し、例えばラウンドロビン方式で、P0の4つのトランシェ、P1の3個のチャンク、P2の2個のチャンク、およびP3の1個のチャンクを処理する。
図63は、参照番号208において、各「チャンク」の前にヘッダ206を含むビットストリーム内信号伝達方式の一例を含む実施例を示す。
ヘッダは、この実施例では、チャンクN個の最後の絶対的トランシェ位置から、それぞれの「部分的ビットストリーム」に対してトランシェの数の違いを示す。
エンコーダ側において、ビット書き込みプロセスが、「チャンク」のサイズに達する時間まで遅延する。すなわち、すべての符号語は、「チャンク」のサイズの限界まで、「部分的ビットストリーム」あたりキャッシュされる。チャンクのサイズはD、すなわち遅延制約に等しい。これは、ヘッダサイズを含んでも良く、含まなくてもよい。フラグメンタイザ200内の「処理方式」評価部は、選択された「処理方式」、すなわち、ラウンドロビン方式で、「チャンク」内で処理されるトランシェの数を定義付けることができる。
その後、書き込みプロセスがフラグメンタイザ200に適用され、選択された「トランシェ処理方式」でビットストリーム内に「チャンク」の「トランシェ」を配置する。書き込みプロセスは、選択された「トランシェ処理方式」のための信号伝達をさらに含む。
デコーダでは、ビットストリーム内または、あるいはビットストリーム外、で使用可能な暗黙的または明示的な信号伝達を識別する必要がある。最も単純なケースでは、「チャンク」に先行するヘッダ206を読み出し、信号伝達された処理方式に基づいて、ビットストリームリーダが、信号伝達された「トランシェ処理方式」が識別されるように、部分的ビットストリームごとにトランシェの数に達するまで、ラウンドロビン方式で部分的ビットストリームトランシェに関して書き込む。
「トランシェ処理方式」はビットストリーム内信号伝達である。「トランシェ処理方式」を信号伝達するために必要とされるオーバーヘッドを削減するために、信号伝達ヘッダは、信号伝達された「チャンク」内の特定のパイプに対するトランシェ値の存在を、パイプごとに示すことができる。それぞれの部分的ビットストリームのトランシェが存在している場合、フラグがセットされ、その後に位置の信号伝達が続く。位置信号伝達は以下のように動作する。フラグ表示された「部分的ビットストリーム」ごとに、ヘッダは、最後のトランシェ位置N−1から離間されたそれぞれの部分的ビットストリームの最後のトランシェの位置を示し、ここで、Nは「チャンク」内のすべてのトランシェの数に等しい。
別の位置の信号伝達は、ラウンドロビン間隔の数に基づいて決定されてよく、ここでは、フラグ表示された「部分的ビットストリーム」に対して、特定のパイプからの部分的ビットストリームごとの差、すなわち、「チャンク」処理が終了した最後のパイプに相対するラウンドロビン間隔の差としての「チャンク」の初期部分からのラウンドロビン間隔の数を指す。
図62の説明に代えて、デフラグメンタイザを、伝送されたビットストリーム63が入力される対応入力と、グローバルビットバッファ61との間に配置することができる。デフラグメンタイザ202は、チャンクのヘッダ206の情報を使って、図11のビットストリーム63が示すチャンクシーケンスから、ビットストリーム62が図11のグローバルバッファ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}を考える。各シンボルは、アルファベットSi∈Aiから引き出される。アルファベットAi={ai 0,ai 1,…}は、それぞれが確率推定ps(ai m)と関連付けられている2つ以上の文字を含む。確率推定ps(ai m)は、エンコーダとデコーダに知られており、固定または可変とされる。変数の確率がエンコーダとデコーダにおいて同時に推定されると仮定される。アルファベットAiは、シンボルシーケンスに対して同一であるかまたは異なるシンボルタイプが異なるアルファベットと関連付けられるかのいずれかである。後者の場合、デコーダがシーケンス内の各シンボルのアルファベットを知っていると仮定される。この仮定は、実用的なソースのコーデックの説明はシンボルとそのアルファベットの順序を定めているシンタックスを含むとして正当化される。
シンボルのシーケンス{s0,...,sN−1}は、ビンとも呼ばれる二値シンボルのシーケンスに変換される。シンボルsiごとに、二値化
は、アルファベット文字ai mのビンbi mの順序付けられた集合への全単射マッピングを表している。二値化マッピングγi bは異なるシンボルsiごとにまたはシンボルカテゴリごとに異ならせることができる。特定のシンボルsiに対する各ビンシーケンスiは、1つ以上のビンbi kからなる。デコーダ側において、シンボルsiは、ビンシーケンスiが与えられている場合、逆マッピングSi=(γi b)−1(i)によって復元することができる。二値化の結果として、ソースシンボルのシーケンス{s0,...,sN−1}を表すビンシーケンス{b0,...,bB−1}が取得される。
すべてのビンbjが同じ二値アルファベットB={0,1}と関連付けられるが、対応する二値pmf{pj 0,pj 1}は、pj 1=pj 0であり、通常は異なる。二値pmf{pj 0,pj 1}は、確率の低いビン(LPB)値bj LPBとその確率pj LPB(pj LPB≦0.5である場合)によって記述することができる。この二値確率記述{bj LPB、pj LPB}は、二値化マッピングγi bが与えられた場合、シンボルアルファベットに対する確率推定ps(ai m)から直接導出することができる。エンコーダ側とデコーダ側において{bj LPB、pj LPB}を同時に直接推定することが可能である(そして、しばしば好ましい)。したがって、ビンは、シンタックスと前に符号化されたシンボルまたはビンに基づく確率モデル(また、コンテクストとも呼ばれる)と関連付けることができる。確率モデルごとに、確率の記述{bj LPB,pj LPB}は、確率モデルによって符号化されたビンの値に基づいて推定される。このような二値確率系列化の例は、CABACに示される。
二値エントロピー関数
はp=0.5周辺で左右対称であり、同じ二値コーダは、bj LPBの値とは無関係に、同一のLPB確率pj LPBと関連付けられたすべてのビンを符号化するために使用することができる。したがって、ビンシーケンス{b0,...,bB−1}は、符号化ビンのシーケンス{bc 0,...,bc B−1}へ変換される。ビンbjごとに、対応する全単射マッピングγj cは、
で表される。ここで、プラス記号を円で囲んだ演算子は、排他論理和演算子を表す。デコーダ側において、ビンbjは、符号化ビンbc jと対応するLPB値bj LPBが与えられている場合、逆マッピング
によって復元することができる。符号化ビンbc j=0は、対応するビンbjの値がLPB値bj LPBと等しくなることを指定し、符号化ビンbc j=1は、対応するビンbjの値が確率の高い値(MPB)値1−bjLPBと等しくなることを指定する。
符号化ビンのシーケンス{bc 0,...,bc B−1}は、一意にソースシンボルのシーケンス{s0,...,sN−1}を表し、エントロピー符号化に用いることができる対応する確率推定はLPB確率pj LPB(pj LPB≦0.5である場合)によって完全に記述することができる。したがって、半開区間(0,0.5]において、1つだけの確率は、符号化ビンbc iに対する二値エントロピーコーダを設計するために考慮する必要がある。
実際の二値エントロピー符号化については、符号化ビンシーケンス{bc 0,...,bc B−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の確率pj LPB∈Ikを有するすべての符号化ビンbc jは区間Ikに割り当てられ、対応する固定エントロピーコーダによって符号化される。
以下の説明において、すべてのビンが符号化ビンbc jを表し、すべての確率pはLPB確率pj LPBである。
符号化効率の確率区間の離散化の影響を調べる際、われわれはエントロピー限界を達成する固定確率のために最適なエントロピーエンコーダを設計できることを前提としている。各確率区間Ik=(pk、pk+1]は、代表確率pIk∈Ikと関連付けられており、対応する最適なエントロピーコーダは、この代表的な確率のエントロピー限界を達成すべきである。これらの仮定の下で、区間代表値pIkに対して最適なエントロピーコーダを用いて確率pでビンを符号化するレートは、
で与えられる。
この場合、H(p)は二値エントロピー関数3を表し、
は、その一次導関数である。さらに、区間における確率分布(0,0.5]がf(p)で与えられ、
であるものとする。このとき、ビンあたりのビットで期待されるレートは、対応する代表的な確率{pIk}を有する所与のK区間{Ik}の集合に対して、
で表される。
k=0,...,K−1であるとき、任意の代表的な確率pIkに対する一次偏導関数は、
で与えられる。
等式
は、定義Ikのドメイン内の代表的確率pIkに対して、単一の解
を有している。この解に対する二次偏導関数
は、
の場合、常にゼロより大きい。
したがって、数式(B12)の条件が満たされた場合、等式(B10)において付与された値p* Ikは、与えられた区間境界pkおよびpk+1で期待される全体のレートRを最小にする区間Ikに対する代表的確率である。それ以外の場合、ビンは区間Ikに全く投影されることなく、代表的確率pIk∈Ikが全体レートRに影響を与えずに任意に選択されるが、このような構成は、区間Ikがエントロピー符号化に用いるものではないため、回避すべきである。
最適な区間境界に対する条件を見つけるために、k=1,...,K−1であるとき、区間境界pkに関して期待される全体レートRの一次導関数を検討する。すべてのp∈[pIk−1,pIk)に対してf(p)>0である場合、
は、定義[pIk−1,pIk)のドメイン内部の区間境界pkに対して、単一の解単一の解
を有しており、この解に対する二次偏導関数
は常にゼロより大きく、これによって、p* kは、与えられた区間代表値pIk−1およびpIkでで、期待される全体レートRを最小にする区間境界pk∈[pIk−1,pIk)である。f(p)=0であるとき、確率p∈[pIk−1,pIk)が存在する場合、数17に示す等式は複数の解を有するが、等式B13で付与されているp* kは、さらなる最適解が存在しても依然として最適である。
区間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の区間に分割した。確率区間の離散化が、すべてのp∈(0,0.5]に対してA(p)≧H(p)である、二値エントロピー関数H(p)の区分的な線形近似A(p)につながることが示されている。
符号化効率上の区間の離散化の影響に対する測度として、エントロピー限界に相対して期待される全体的なレートの増加
を使用することができる。図12の特定の例において、エントロピーの期待値
は、ビンあたり1/(21n2)ビットと等しく、レートオーバーヘッド
は、1.01%と等しい。表4は、選択された区間数Kに対する、均一な確率分布とp∈(0,0.5]で線形に増加する確率分布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を乗算することによって得られる。各リーフノードLiは、ルートノードからリーフノードまでのLPBエッジの数aiとMPBエッジの数biによって特徴付けられる。特定のLPBの確率pに対して、リーフノードL={ai,bi}に対する確率piは、
と等しい。
二値ツリーTは、リーフノード数Lと、l=0,...,L−1に関連付けられたペア{ai、bi}とによって、完全に特徴付けられる。
完全な二値ツリーTとLPB確率pが与えられた場合、リーフノードへの符号語の最適な割当ては、ハフマンアルゴリズムによって得ることができる。可変長符号語(VNB2VLC)マッピングCに対して得られる可変数のビットは、ノードの数と同一の符号語数Lと、l=0,...,L−1に対するタプル{ai,bi,li}とによって特徴付けられる。ここで、liは、対応するリーフノードLi={ai、bi}と関連付けられた符号語長を表す。符号語長{li}が与えられたとき、符号語割り当てに対して複数の可能性があり、実際の符号語の割り当ては、符号語が一意に復号可能な接頭語符号を表している限りは重要ではない。所与の符号CとLPBの確率pに対するビンあたりのビットにおける期待されるレートR(p、C)は、期待される符号語長と符号語あたりのビンの期待数の割合である。
大抵の場合、符号設計は符号語Lの最大数、符号語あたりのビンの最大数、または最大符号語長などの要因によって制限されるか、または、特定の構造の符号へ制約される(たとえば、最適化された解析を可能にするために)。特定の応用のために利用可能な符号の集合Scが与えられたと仮定した場合、特定のLPB確率pに対する最適符号C*∈Scは、期待レート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]に対して、この所与の区間に対する期待レート
を最小とする場合、最適な符号C* kにおける所与の集合SCの符号Ckは、以下のように表される。
を最小とすることによって求められる。
区間境界に関する一次導関数をゼロに等しく設定する数17は、
を生じる。
等式B13と同様に、p* kが常に最適解であることが示されているが、確率分布f(p)によっては、さらに最適な解が存在する可能性がある。これにより、所与の関連付けられた符号Ck−1およびCkをそれぞれ有する2つの区間Ik−1とIk間の最適な区間境界p* kは、関数R(p、Ck−1)とR(p、Ck)の交点である。
この結果として、以下のインタラクティブアルゴリズムを、確率区間の数K、可能な符号の集合SC、および確率分布f(p)、ただしp∈(0,0.5]を与えて、確率区間分割と演練する符号とを連結して導き出すために使用することができる。
アルゴリズム2:
1)セクション3で指定されたアルゴリズム1を使用して、初期の確率区間境界値pk、ただしk=0,...,K、を導出する
2)等式B10に基づいて、確率区間Ik、ただしk=0,...,K−1、に対して代表値pIkを導出する
3)等式B18に基づいて、区間代表値pIk、ただしk=0,...,K−1、に対して符号Ck∈Scを 導出する
4)等式B21に基づいて、区間境界値pk、ただしk=1,...,K−1、を更新する
5)収束するまで上記の3ステップを繰り返す。
アルゴリズム2におけるステップ2および3は、等式B19に応じて、区間境界pk、ただしk=0,...,K、に基づいて、符号Ck∈Sc、ただしk=0,...,K−1、の直接導出によって置き換えることができる。そして、セクション4.1に述べたように、ステップ3の最小化は、二値ツリーSTの所与の集合に対して展開し、二値ツリーTごとに、ハフマンアルゴリズムによって得られる1つだけのVNB2VLC符号Ckを考慮することができる。
一例として、我々は、アルゴリズム2を使用して、K=12の確率区間への分割と、対応するVNB2VLC符号を同時に導き出した。このとき、アルゴリズムのステップ3における最小化を、ツリーTごとに評価された符号Cがハフマンアルゴリズムによって得られた二値ツリーSTの所与の集合に対する等価の最小化と置き換えた。我々は、最大数Lm=65個のリーフノードと、そして最大65個のテーブルエントリを有する符号Cとを有するツリーTを考慮した。最大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個の二値エンコーダの各々が、符号化ビンの有限シーケンスc k={bc 0,...,bc Bk−1}k、ただしk=0,...,K−1、を処理する。そして、K個の二値エンコーダの各々に対して、シーケンスの全ての符号化ビンc k={bc 0,...,bc Bk−1}kが再構築され、符号語または符号語のシーケンスk(c k)が与えられることが確認された。
算術符号化を採用する場合、符号化ビンのシーケンスに対する算術符号語は、すべての符号化ビンが符号語を与えられて復号化されるように終了する必要がある。上記のVNB2VLC符号に対して、シーケンスc kの最後のビンは、符号語に関連付けられたビンシーケンスを表していない可能性がある。このような場合、残留するビンシーケンスを接頭語として含む任意の符号語が書き込むことができる。最短長(またはこれらの符号語の1つ)を有している対応する符号語が選ばれた場合、オーバーヘッドを最小にすることができる。デコーダ側において、ビットストリームシンタックスと二値化方式によって識別することができるビンシーケンスの最後におけるさらなる読出しビンは破棄される。
簡単な符号設計の例が以下に提供される。図示目的のために、3文字と、ps(a0)=0.7、ps(a1)=0.18、およびps(a2)=0.12の固定された関連確率を有するソース{s}の簡単な例を考える。図15に示すように、対応する3項の選択ツリーは、完全な二値ツリーに変換することができる。
図15における、完全な二値ツリーの二値化が表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に提供された二値化がソースsに対する最適な1文字ハフマン符号と同じであることに留意されたい。
ソースsのエントロピーは、
である。1文字ハフマン符号の平均符号語長は、次式で与えられる:
これは、ρHC=0.1274ビット/シンボルの冗長度または10.87%の期待レートオーバーヘッドに対応する。
固定されたpmfを有する特定の二値化の例に対して、ビン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)において任意に選択することができる。
ソースを符号化するために、ソースシンボルの列は、ビン列へ二値化される。ビン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確率で演算する少数のシンプルな二値コーダへマッピングする際の、そのフレキシビリティである。
一意の決定可能性を達成する方法を次に考える。
提供されているエントロピー符号化方式によって、ソースシンボルのシーケンス={s0,...,sN−1}の符号化は、以下の3つの基本的なステップ:
・ビンシーケンス={b0,...,bB−1}を生成するすシンボル二値化={b0,...,bB−1}=γb()
・ビンシーケンスの符号化ビンシーケンスc={bc 0,...,bc B−1}=γc()へ の0変換
・確率区間離散化とK個の固定二値コーダを用いた符号化ビンシーケンスc={bc 0,...,bc B−1}の二値エントロピー符号化
を有する。
符号化ビンシーケンスc={bc 0,...,bc B−1}が一意に復号可能であり、γbとγcのマッピングが可逆である場合、シンボルシーケンス={s0,...,sN−1}は一意に復号可能である。
γeに、1以上の符号化ビンのシーケンスc={bc 0,...}の1つ以上の符号語(c)={c0,...}のシーケンスへのエンコーダマッピングを通知させる。
符号化ビンシーケンスcの一意的な復号可能性に対して、符号語(c)のシーケンスが付与されているとき、エンコーダマッピングγeは、一意の符号語c(bc)が各々の可能な符号化ビンシーケンスbcに割り当てられるという特性を有する必要がある。
この特性は、算術コードまたは接頭語符号が使用されている場合、常に満たされる。VNB2VLCコードがビンの可変数に対する接頭語符号を表しているので、(セクション4.3において説明した符号語終了を含む)セクション4.1に説明されているVNB2VLCコードに対して、特に、満たされる。
しかしながら、提示されているエントロピー符号化のアプローチにおいては、符号化ビンのシーケンスcは、K個のサブシーケンスc k、ただしk=0,...,K−1、
に分割され、サブシーケンスc kのそれぞれに対して、符号語k(c k)のシーケンスが、特定のエンコーダマッピングγk eを使用して割り当てられる。これによって、一意的な復号可能性の条件は拡張する必要がある。符号化ビンcのシーケンスは、符号化ビンc kの各サブシーケンスが、対応する符号語k(c k)が付与されて一意に復号可能であり、かつ分割ルールγpがそのデコーダに知られている場合、K個の符号語k(c k)のシーケンスが付与されて、一意に復号可能となる。ここで、k=0,...,K−1である。分割ルールγpは、LPB確率区間の離散化{Ik}と、符号化ビンbc jと関連付けられるLPB確率pj LPB、ただしj=0,...,B−1、とによって付与される。したがって、LPB確率区間の離散化{Ik}は、デコーダ側で知られている必要があり、符号化ビンbc j、ただしj=0,...,B−1、ごとのLPB確率pj LPBは、エンコーダ側とデコーダ側とで同じ方法で導出する必要がある。
ビンシーケンスの符号化ビンシーケンスcへのマッピングγcは、各単一のbj、ただしj=0,...,B−1、が、二値マッピング
によって変換される。デコーダ側では、ビンシーケンスが、二値マッピング
によって求めることができる。ここで、j=0,...,B−1である。各ビンbjに対するLPB値bj LPBが、エンコーダとデコーダ側で同じように得られる場合、
なので、これらのマッピング(γj c)−1は、対応するエンコーダマッピングγj cの逆を表す。したがって、ビンシーケンスの符号化ビンシーケンスbcへの変換γbは、可逆である。
最後に、われわれは、各シンボルsi、ただしi=0,...,N−1、がビンシーケンスi=γi b(si)にニマッピングされる二値化γb()の可逆性を調べる。シンボルsiは、二値化マッピングγi bがシンボルsiに対するアルファベットAiの各文字ai mへ異なるビンシーケンスj mを割り当てる場合、対応するビンシーケンスiが与えられて一意に復号化することができる。しかしながら、この条件は、ビンシーケンス={b0,...,bB−1}の、i=0,...,N−1のときのシンボルsiに対応するビンシーケンスiへの分割がデコーダに知られていないので、不十分である。十分な条件は、シンボルsiごとに、対応するアルファベットAiの文字ai mに関連付けられるビンシーケンスj m、ただしi=0,...,N−1、が接頭語符号を形成し、各シンボルsi、ただしi=0,...,N−1、に対する二値化マッピングγi bが、デコーダ側で知られているときに与えられる。
提示されているエントロピー符号化のアプローチのための一意的な復号可能性の条件は、次のようにまとめることができる:
・二値化マッピングγi bは、接頭語符号を表しかつ(シンボル符号化順に)デコーダに知られている、
・すべてのビンbjに対する確率モデル(bj LPB、pj LPB)は、エンコーダとデコーダ側で同様に導かれる、
・LPB確率区間(0、0.5]が、K個の区間Ik、ただしk=0,...,K−1に分割されることが、デコーダに知られている、
・各確率区間Ik、ただしk=0,...,K−1、に対するマッピングγk eが、一意に復号可能なコードを表している。
以下において、われわれは、全体的なエンコーダとデコーダの設計例をより詳細に説明する。われわれは、ビンの確率モデル{bLPB、pLPB}がエンコーダおよびデコーダ側で直接推定され、K個の二値コーダがセクション4.1で説明されたVNB2VLCマッピングを使用する、符号化方式に集中する。各ソースシンボルsは、その値の範囲を含むシンボルのタイプを決定するシンボルカテゴリcsと関連付けられる必要がある。シンボルと、関連付けられたシンボルカテゴリの順序は、エンコーダとデコーダ側で知られていることが仮定されるシンタックスによって付与される必要がある。
エンコーダおよびデコーダの設計例のブロック図を図17に示す。エンコーダ側において、関連付けられたシンボルカテゴリcsを有するシンボルsはバイナライザへ供給され、バイナライザは各シンボルsをビンシーケンスs=γcs b(s)へ変換する。
使用される二値化手法γcs bは、シンボルカテゴリcsに基づいて決定される。さらに、バイナライザは、ビンシーケンスsの各ビンbを、このビンbを符号化するために使用される確率モデルを指定する、確率モデル表示cbと関連付ける。確率モデル表示cbは、シンボルカテゴリcs、ビンシーケンスs内部の現在のビンのビン数、および/または既に符号化されたビンおよびシンボルの値に基づいて、得ることができる。
確率推定割当部は、値の対{bLPB、pLPB}によって特徴付けられる、複数の確率モデルを維持している。それは、バイナライザからビンbと、関連付けられる確率モデル表示cbを受信し、LPB値bLPBと表示された確率モデルのLPB確率pLPBとを符号化ビン導出子部と確率量子化部にそれぞれ転送する。その後、対応する確率モデル{bLPB、pLPB}は受信したビンbの値を用いて更新される。
符号化ビン導出部は、バイナライザと確率推定割当部から、ビンbと関連付けられたLPB値bLPBとをそれぞれ受け取り、
によって求められる符号化ビンbcを確率量子化部へ送信する。この確率量子化部は、各符号化ビンbcをK個の二値エンコーダの1つへ転送する。確率量子化部は、LPB確率区間の量子化{Ik}に関する情報を含む。符号化ビンbcに関連付けられかつ確率推定割当部から受信されるLPB確率pLPBは、区間境界{pk}と、pLPB∈Ikが求められる確率区間インデックス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を、バイナライザ、確率推定割当部へ送信する。
確率推定割当部において、復号化されたビンbの値は、エンコーダ側でと同じように、関連付けられた値cbによって選択された確率モデル{bLPB、pLPB}を更新するために使用される。最後に、バイナライザは、受信したビンbをシンボルリクエストのために既に受信されているビンシーケンスsへ加算し、このビンシーケンスsを、二値化手法γcs bによってシンボル値と関連付けられるビンシーケンスと比較する。ビンシーケンス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)は、単項二値化内のシンボルによって、または接頭部分と接尾部分とを有するシンボルによって、表され、ここで、接頭部分は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による二値化は係数(ABS)の大きさを符号化するために使用される。区間[1;14]の係数の大きさに対して、この二値化は単項二値化に対応している。14より大きい係数の大きさに対する二値化は、14個の1から成る接頭部分と、シンボル(ABS−15)に対する0次数の指数ゴロムコードを表す接尾部分と、から成る。二値化は、有意係数(ゼロに等しくない係数)は常に1と等しいまたはこれより大きい大きさ(ABS)を有するので、0と等しい係数の大きさ(ABS)に対する表現を含まない。
14より大きい係数の大きさに対する0次数の指数ゴロムコードから成る接頭部分と接尾部分から形成される二値化は、シンボル確率0.5を有する特別な非適応コンテクストが接尾部分の全ての二値決定に対する符号化効率を犠牲にすることなく使用できるという利点を有し、これによって符号化および復号化の計算量を削減することができる。
これらのレベルは、(ブロック内の最新の有意係数で始まる)逆スキャン順に符号化される。これは二値エントロピー符号化に対して適切なコンテクストを形成することを可能とする。
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つの異なるコンテクストの量が使用される。すなわち、1つは、二値化の最初の二値決定ビン:bin=1(図20でオレンジ色にマーキング)を符号化するもの、他の1つは、二値決定ビン: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)によって示される。大きさは単項二値化でシンボル(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は最初に二値化され、すなわち、それは二値決定(ビン)シーケンスにマッピングされ、これらのビンは順に符号化される。二値シンタックス要素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はビンシーケンス内およびこの二値化の最初のビンに対して二値化される。コンテクストモデルインデックスは以下に説明するように選択される。二値化の残留ビンは固定コンテクストで符号化される。二値化の最初のビンに対するコンテクストは次のように選択される。最初の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を適応するステップ:
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]
ここで、
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は二値化ステージであって、バイナライザ2102を含む。バイナライザ2102の入力は、スイッチ2106を介して、ステージ2100aの入力2104に接続されている。同時に、入力2104は、符号化配置2100の入力を形成する。バイナライザ2102の出力はステージ2100aの出力2108に接続され、同時に、ステージ2100bの入力を形成する。スイッチ2106は入力2104に到達するシンタックス要素をバイナライザ2102または二値化ステージ出力2108のどちらかに渡すことが可能であり、よって、バイナライザ2102をバイパスする。
スイッチ2106の機能は、シンタックス要素が要求する二値化形式内に既にある場合、入力2104で実際のシンタックス要素を二値化ステージ出力2108へ直接渡すことである。非二値のシンタックス要素と呼ばれる、正確な二値化形式にないシンタックス要素の例は、動きベクトルの差および変換係数レベルである。すでに二値の値であるので、二値化する必要がないシンタックス要素の例としては、より詳細に後述する、MBAFF(MBAFF=マクロブロック適応型フレーム/フィールド)符号化モードフラグまたはmb_field_decoding_flag、mb_skip_flag、coded_block_flagがある。二値化でないので二値化される必要があるシンタックス要素の例は、シンタックス要素mb_type、coded_block_pattern、ref_idx_l0、ref_idx_l1、mvd_l0、mvd_l1、とintro_chroma_pred_modeを含む。
異なる二値化方式は二値化されるシンタックス要素に使用される。たとえば、固定長の二値化プロセスはシンタックス要素の値のLビットの符号なし整数ビンストリングを使用して構成されており、ここで、Lは、cMAXがシンタックス要素の最大可能値である、合計と等しいかこれより大きい最も近い整数まで切り上げられたlog2(cMax+1)と等しい。flの二値化のためのビンのインデックス付けは、ゼロのビンインデックスが、最上位ビットに向けてビンのインデックスの値が増加するにつれて、最下位ビットに関係するように行われる。他の二値化方式は、切り捨て単項二値化方式であり、最大可能値cMaxより小さいシンタックス要素値Cは、1と等しいCより小さいビンインデックスを有するビンと0と等しいCのビンインデックスを有するビンとを有する長さC+1のビットまたはビンストリングにマッピングされるが、最大可能値cMaxと等しいシンタックス要素は、対応するビンストリングは全てのビットが後にゼロが続かない1と等しい、長さcMaxのビットストリングである。他の二値化方式は、k番目の指数ゴロム二値化方式であり、ここで、シンタックス要素は、接頭語ビットストリングと、最終的に接尾語ビットストリングから構成されるビンストリングにマッピングされる。
非二値の値をもつシンタックス要素は、スイッチ2106を介してバイナライザ2102へ渡される。バイナライザ2102は非二値のシンタックス要素を符号語またはいわゆるビンストリングへマッピングすることで、これらのシンタックス要素は二値形式になる。用語「ビン」は、符号化ツリーのルートノードから二値化される非二値シンタックス要素の非二値に対応している符号化ツリーのリーフへ遷移する時、ビットストリングまたは符号語へ非二値の二値化マッピングを定義付ける符号化ツリーのノードで作成する必要のある二値決定を意味する。したがって、ビンストリングは、ビンまたは二値決定のシーケンスであり、各ビットが二値決定の結果である、同じビット数を有する符号語に対応している。
バイナライザ2102によって出力されるビンストリングは、バイナライザ2102によって出力されたビンストリングとバイナライザ2102をバイパスする既に二値化されたシンタックス要素とを二値化ステージ出力2108において単一ビットストリームへ併合するために、二値化ステージ出力108へ直接は渡されないが、バイナライザ2102の出力と出力2108の間に配置されたビンループオーバー手段2110によって出力2108へ制御可能に渡される。
したがって、二値化ステージ2108はシンタックス要素を適切な二値化された表現に転送するために使用される。バイナライザ2102における二値化手順は、好ましくは、非常に効率的な二値エントロピー符号化を可能にするためにシンタックス要素の確率分布に適応される二値化表現を得ることができる。
ステージ2100bは、コンテクストモデリングステージであり、コンテクストモデラ2112およびスイッチ2113を含む。コンテクストモデラ2112は、入力、出力、および任意のフィードバック入力を含む。コンテクストモデラ2112の入力は、スイッチ2113を介して、二値化ステージ出力2108に接続されている。コンテクストモデラ2112の出力はステージ2100cの正規の符号化入力端子2114に接続されている。スイッチ2113の機能は、コンテクストモデラ2112またはステージ2100cのバイパス符号化入力端子2116のいずれかへの二値化ステージ出力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を介して二値化ステージ出力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において二値化される必要があった。最初のステップ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の前にその中にシンタックス要素が二値化され得るビンストリングが、符号化され、すなわち、それぞれの部分的なビットストリーム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は、実際のビンの値が、すなわち、現在のシンタックス要素から得られた既に二値化されたシンタックス要素またはビンストリングの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に示したプロセスによって得られる個々のビンは、シンタックス要素が二値タイプである場合のみにおいてシンタックス要素の値を表す。それ以外の場合、二値化に対応するステップは、ビンストリングからシンタックス要素の実際の値を得るために逆の方法で実行する必要がある。
図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つのブランチの選択はスイッチによって取得される。バイナライザデバイスは、ビンストリング、すなわち、二値ストリングを取得するために非二値化されたシンタックス要素を二値化するように演算可能である。シンタックス要素がすでに二値シンタックス要素である場合、バイナライザはバイパスされる。
いわゆる正規の符号化モードにおいて、実際のエントロピー符号化プロセスに先立って、これもビンと称する、所与の二値決定が、確率モデルが対応する選択が前に符号化されたシンタックス要素またはビンに依存しうるように選択される、コンテクストモデリングステージに入る。次に、コンテクストモデルの割当て後、ビン値はその関連するモデルとともに正規の符号化エンジンへ渡され、ここで、これに続くモデル更新とともにエントロピー符号化の最終ステージが行われる(図29を参照)。
あるいは、バイパス符号化モードが、明示的に割り当てられたモデルを使用せずに、簡素化した符号化エンジンを用いて符号化(および復号化)プロセス全体の高速化を可能にするために、選択されたビンに対して選択される。このモードは、動きベクトルや変換係数レベルの差の成分に関して、これらのシンタックス要素の1次接尾語のビンを符号化する時に特に効果的である。
以下では、3つの主要な機能的組立ブロック、すなわち、図40のエンコーダ内の二値化、コンテクストモデリングおよび二値エントロピー符号化について説明する。
この実施例では、実施例4がさらに拡張され、図34、35、46〜49。本実施例によれば、データ値の二値化が、1次的接頭語をもたらすように、第1の二値化方式によってデータ値と所定のカットオフ値の最小値を二値化することによって実行され、データ値がカットオフ値より大きい場合、第2の二値化方式によってデータ値マイナス所定のカットオフ値の差を二値化して二値接尾語を得て、ここで、第1の二値化方式は第2の二値化方式とは異なり、次に、1次接尾語を1次接頭語に付記する。
データ値はデータ値の二値化された表現から復元され、データ値の二値化された表現は第1の二値化方式によるデータ値と所定のカットオフ値の最小値の二値化である1次接頭語を有する符号語であり、データ値が所定のカットオフ値より大きい場合、1次接尾語が1次接頭語に付記され、この1次接尾語は第2の二値化方式による、データ値マイナス所定のカットオフ値の差の二値化である。この方法は、1次接頭語から最小値を抽出するステップと、最小値がカットオフ値と等しい場合は、1次接尾語からデータ値マイナス所定のカットオフ値の差を抽出するステップと、を含む。次に、所定のカットオフ値がこの差に追加されてデータ値を取得し、最小値がカットオフ値より小さい場合、この最小値がデータ値として扱われる。
符号化ビットストリームへのデータ値の符号化は、1次接頭語を得るために、第1の二値化方式によってデータ値と所定のカットオフ値の最小値を二値化するステップと、データ値がカットオフ値より大きい場合、二値接尾語を得るために、第2の二値化方式によってデータ値マイナス所定のカットオフ値の差を二値化するステップと、ここで、第1の二値化方式と第2の二値化方式は異なり、次に、1次接尾語を1次接頭語に付記するステップと、を含む。次に、符号語のビットごとに、符号語のビットが1次接頭語の一部である場合、適応型可変ビット値確率推定によるビットの二値エントロピー符号化が、確率推定依存型の部分的ビットストリーム選択を有する上記の実施形態のいずれかによって、実行されるか、または、符号語のビットが1次接尾語の一部であれば、静的ビット値確率推定によってビットの二値符号化が実行され、これによって、符号化されたビットストリームが得られる。
データ値の二値化された表現を表す符号化されたビットストリームの復号化を説明する。データ値の二値化された表現は、1次接頭語を有する符号語であり、かつ第1の二値化方式によるデータ値と所定のカットオフ値の最小値の二値化である。データ値が所定のカットオフ値より大きい場合、1次接尾語が1次接頭語に付記される。1次接尾語は、第2の二値化方式による、データ値マイナス所定のカットオフ値の差の二値化である。この方法は、符号語のビットごとに、符号語のビットが1次接頭語の一部である場合、適応型可変ビット値確率推定によって符号化されたビットストリームを二値エントロピー復号化することによって、すなわち、確率推定に関連付けられた部分的ビットストリームを介してビットを検索することによって、ビットを決定するステップと、符号語のビットが1次接尾語の一部である場合、静的ビット値確率推定によってビットを二値復号化することによってビットを決定するステップとを含み、これにより符号語を得る。次に、最小値が1次接頭語から抽出される。最小値がカットオフ値と等しい場合、データ値マイナス所定のカットオフ値の差が1次接尾語から抽出され、所定のカットオフ値がこの差に加算されて、データ値が得られる。最小値がカットオフ値より小さい場合、この最小値がデータ値とされる。
ビデオ信号においてシンタックス要素を形成する、データ値と、特に、動きベクトル差の成分または変換係数レベルの値と、の非常に効果的な圧縮は、エントロピー符号化のためにシンタックス要素を用意するための二値化方式―この二値化方式は実質的に2つの異なる二値化方式の組合せである―を使用して、および、二値化されたシンタックス要素を符号化するためのm変数のエントロピー符号化ではなく二値エントロピー符号化を使用して、達成される。
元のm変数のソースアルファベットで演算するm変数のエントロピーコーダの代わりに二値エントロピー符号化エンジンを使用することの利点は、2つの可能なビット値に対する確率の判定がちょうど1つの確率推定値によって定義できるので、確率推定の複雑さが軽減されることである。適応型のm変数のエントロピー符号化は、m>2の場合、一般的に、確率推定の更新を行うために非常に複雑な多くの動作を必要とする計算的に複雑な演算になる。
具体的な実施形態によれば、切り捨て単項二値化方式とk番目の次数の指数ゴロム二値化方式の連結が使用される。単項/k番目の次数の指数ゴロム(UEGk)二値化と呼ばれるこの連結方式は、動きベクトル差と、変換係数レベルの絶対値と、に適用される。これらの連結された二値化方式の設計は以下の観察によって動機付けされる。まず、単項コードは実施コストの面で最もシンプルな接頭語なしのコードである。第2に、対応するツリーのノード配列が一般に、ルートノードからの内部ノードの距離が大きくなるにつれて、対応する二値確率にあまり偏りが発生しないような配列なので、以降のコンテクストモデリングステージにおける個々のシンボル確率の迅速な適応を可能にする。これらの観察結果は、動きベクトルの絶対差と変換係数レベルの小さな値に対して精度が高い。大きな値に対しては、接頭語としての適応された切り捨て単項ツリーと接尾語としての静的指数ゴロム符号化ツリーを連結させるアイデアに達した適応型モデリングをあまり使用しない。一般に、上述したように、大きい値の場合、EGk接尾語部分が、観察された確率分布に対してかなり良好な適合を既に表している。
一方で、バイナライザ2102がシンタックス要素をマッピングする符号語の「ビット」またはビン間の関係、他方で「ビン」間の関係を説明するために、図44は、図46に関して後述する二値化方式に対応する二値符号化ツリーを示している。全体的に参照番号3150で示される符号化ツリーは、ルートノード3152といくつかの内部ノード3154を含み、ルートノード3152と内部ノード3154は、インデックスiが対応するノードに関連付けられた整数であるCiによって指定される。これらのノードの各々は、左ブランチがビン値0に対応し、右ブランチがビン値1に対応している「ビン」と呼ばれる条件ブランチまたは二値決定を定義付ける。
ツリー3150は、終端ノード3156も含む。図44において終端ノード3156に割り当てられた番号はシンタックス要素のデータ値に対応し、このデータ値は、図46の二値化方式に基づいて、ルートノード3152からそれぞれの終端ノード3156までのパスをたどるときのビットまたはビン値から得られる符号語またはビットストリングに対応している。たとえば、データ値17は、図46に示すように、符号語ビットストリング11111111111111101に対応する。パスは、ルートノード3152と内部ノード3154C2〜C17を含む。各ノード3152または3154は、「ビン」と呼ばれる二値決定と見なされうる。ルートノード3152からそれぞれの終端ノード3156までのツリー3150を横断するための二値決定の連結は、対応するシンボル値またはシンタックス要素値の「ビンストリング」を表している。
各二値決定は、決定が二値ゼロ(図44において左ブランチ)と二値1(図44において右ブランチ)が得られるかについての確率を示す実際の確率分布を有している。言い換えれば、二値決定の実際の確率分布は、この二値決定時に、シンタックス要素パスがゼロまたは1ブランチを取ることの確率を定義付ける。したがって、あるデータ値を仮定するためのシンタックス要素に対する実際の確率は、ルートノード3152から各終端ノード3156までのパスに沿って配置されたノードにおけるそれぞれの確率の積と等しい。
二値エントロピー符号化の場合、ツリー3150の各二値決定またはノード3152、3154、すなわち、各ビンは、ビット値確率推定またはコンテクストモデルすなわちCiに関連付けられている。以下により詳細に記載されているように、ノードまたはビンの全てが適応確率推定モデルに関連付けられているわけではなく、静的な確率推定に関連付けられてもよいことから、コンテクストモデリングオーバーヘッド、すなわち、圧縮率を高めるために過去のビンに応じて推定を適応させるための管理が削減される。
次に、図45では、本発明の一実施形態による二値化方式の実施形態を説明する。図45は、バイナライザ3102が非二値化されたシンタックス要素上で実行するステップを概略的に示している。具体的には、図45は、変換係数レベルの絶対値、すなわち、変換係数値の計算のためのスケーリングに先立つ復号化プロセスにおける特に2次元の頻度インデックスに関連付けられた値を表す整数量、を二値化するための実施形態である。
図45の二値化方式は、一方で切り捨て単項二値化方式、他方でk番目の次数の指数ゴロム二値化方式を連結したものである。切り捨て単項二値化方式は単項二値化方式を基礎としている。単項二値化方式に基づいて、ゼロと等しいかゼロより大きい各符号なしの整数値シンボルxに対して、xがマッピングされる単項符号語は、x個の「1」のビットプラス終端「0」ビットから成る。単項二値化方式とは異なり、切り捨て単項(TU)コードは、x<Sに対してコードが単項コードによって与えられる、0≦X≦Sのxに対してのみ定義付けられ、x=Sの場合、x=SのTUコードが終端ビット「0」なしのx個の「1」ビットのみから成る符号語により付与されるように、終端「0」ビットは無視される。指数ゴロム二値化方式によれば、一般に、データ値xは接頭語と接尾語から成る符号語にマッピングされる。より正確には、k番目の次数の指数ゴロム二値化方式によれば、データ値は、少なくとも接頭語を有し、データ値によっては接尾語も有する符号語にマッピングされる。EGk符号語の接頭部は、
である値l(x)に対応する単項コードから成り、kはコードの次数を示し、
は実値rより小さいかこれと等しい最大整数である。EGkの接尾部は、k+l(x)の有意ビットを使用して、x+2k(1−2l(x))の二値表現として計算される。
図45からわかるように、二値化される絶対データ値xは、xとSの最小値を決定するために、3200において、カットオフ値Sと比較される。Sは、排他的に、すなわち残留値に対してゴロム二値化方式を使用せずに、切り捨て単項符号を使用して、絶対データ値xを定義付けるカットオフ値である。言い換えれば、カットオフ値S未満の全ての絶対データ値xに対して、絶対データ値xを符号語にマッピングするために、切り捨て単項二値化が専ら使用され、この符号語はしたがって1次接頭語のみから成る。絶対データ値xがSより大きいまたはSと等しい場合、1次接尾語が1次接頭語に付記される。後述するように、1次接尾語はx−Sからのゼロ次数の指数ゴロム二値化方式に基づいて作成される。
3202においてxとSの間の最小値は切り捨て単項二値化方式に基づいて二値化される。結果は、xがマッピングされる最終符号語3206の少なくとも一部を構成する、1次接頭語204である。1次接頭語はこのようにMin(S、Abs(x))の値の単項二値化からなり、ここで、Min(a、b)は値aとbの最小値を示し、Abs(x)はxの絶対値を示している。言い換えれば、1次接頭語は、xがSより大きいかまたはこれと等しい場合、S個の1から成り、xがSより小さい場合、終端ゼロが後に続くx個の先頭の1から成る。
3208において絶対データ値xはカットオフ値Sと比較される。この比較によってxがSより小さい場合、二値化は3210で終了し、したがって、絶対データ値xが図45の二値化方式に基づいてマッピングされる符号語3206は1次接頭語3204のみからなる。それ以外の場合、すなわち、xがSと等しいかまたはSより大きい場合、3212において、カットオフ値Sは絶対データ値xから減算される。xマイナスSによって得られる差分値は、残留値と呼ばれることもあり、3214において、kがゼロと等しい、k番目の次数の指数ゴロム二値化方式に基づいて処理される。k番目の次数の指数ゴロム二値化方式は、図48に関してより詳細に後述される。
「xマイナスS」の差の二値化3214の結果は、1次接尾語3208として1次接頭語3204に付記される。したがって、絶対データ値xがカットオフ値Sより大きいかまたはこれと等しい場合、得られる符号語206は、1次接尾語3208が後に続く1次接頭語3204から成り、ここで、1次接尾語3208は、x−Sのk番目の次数の指数ゴロム二値化である。以下の説明から明らかなように、1次接尾語3208自体は、これ以降、2次接頭語3218と2次接尾語3220と呼ばれる、接頭語と接尾語から成っている。
実験的研究は、変換係数レベルの絶対値に対して、S=14、k=0が、1次接頭語の一部である符号語3206のビットだけが適応型確率モデルを用いてエントロピー符号化されても、このような二値化された変換係数レベル値を二値エントロピーコーダへ渡す場合、相対的に良好な圧縮比率を提供し、よって、符号化オーバーヘッドを削減することができることを示した。
図46は、左列3215内の変換係数レベルの絶対値を、S=14およびk=0であるときの図45の3252の右側の二値化に基づく対応する符号語とともに一覧にした表を示す。ゼロ値化された、すなわち、非有意変換係数レベルが上述した有意性マップを用いて符号化されるので、二値化とこれに続く符号化プロセスはシンタックス要素「変換係数レベル値マイナス1」に適用されることに留意されたい。したがって、図45に関して、図46の表の3250には、xプラス1の値が一覧にされている。図46の表は、値S=14、k=0であるときの図45の二値化方式の結果を示している。
図に示すように、絶対値がマッピングされる符号語またはビンストリングは、少なくとも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の二値化方式に基づいて取得される絶対値とビンストリングのペアの表を示している。図46の要素と同じ図47の表の要素には図46と同じ参照番号が付され、これらの要素の反復説明は省略する。符号ビットは図47の表に示されていない。
図47に基づく二値化方式によるkおよびSに対する値は、動きベクトルの差分の絶対成分に適用された場合、良好な圧縮効果を示した。動きベクトルの差分に対して、図47に示すUEGk二値化は以下のように構成される。動きベクトル成分の値mvdが与えられるとする。UEGkビンストリングの接頭部に対して、TU二値化(図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番目の次数の指数ゴロム二値化3214に対する可能なインプリメンテーションを図48に関してより詳細に説明する。図48は、図45の二値化方式に基づいて絶対データ値xの二値化を表す符号語の1次接尾部分を構成するプロセスを示す擬似Cコードを示す。まず、ステップ3300において、補助パラメータkが、使用される指数ゴロム二値化の次数に初期化される。図47に基づく動きベクトル差の成分の二値化の場合、たとえば、ステップ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番目の次数の指数ゴロム二値化方式の場合、図47にも示されるように、接尾部分は、1つが3312fのゼロビットであり、他の3つが3312hにおける二値表現出力のビットである4ビットを少なくとも含み、各符号語の末尾の符号ビットは無視される。
本発明の実施形態によるエンコーダ側における二値化とエントロピー符号化について説明してきたが、図49は、エントロピー符号化されたビットストリームを復号化するためにデコーダ側で実行される本発明の一実施形態にとしてのステップを示す。
まず、ステップ3400において、エントロピー符号化されたビットストリームを受信するデコーダは、符号化されたビットストリームから判定される次のビンまたはビットが1次接頭語ビットまたは1次接尾語ビットであるかどうかを決定する。デコーダは、予想される次のビンまたはビットが、二値化されたシンタックス要素の1次接頭語または1次接尾語のビットであるかどうかについて、エントロピー符号化されたビットストリームの所定のシンタックスやり方から知っている。
ステップ3400で、予想されるビットが1次接頭語のビットであると判定された場合、デコーダは適応可能に変化する確率推定またはコンテクストモデルに基づく二値エントロピー復号化によってこのビットに対するビット値を決定する。つまり、デコーダは、選択するためにそれぞれの確率推定を使用して、上に説明したそれぞれの部分的ビットストリームを選択する。デコーダは、それぞれのコンテクストモデルタイプによって示される過去の復号化されたビンに基づいてこの適応可能に変化する確率推定を更新する。
ビットが1次接尾語のビットである場合、3403において、次のビットまたはビン値が静的な確率モデルに基づくエントロピー復号化を行うことによって決定される。これは、実際のビットを含むビンに対して符号語を1:1でマッピングすることを含みうる。
符号語全体のビットに対してビット値を達成するためのビットが残っている場合、デコーダは、3408において、ステップ3400から3404を反復する。ステップ3408においてビットが残っていない場合、復号化プロセスはステップ3410において終了する。シンタックス要素が絶対変換係数レベルマイナス1である場合に図44に示した符号化ツリーなどのそれぞれの二値化符号ツリーの後に続くことによって、デコーダは、シンタックス要素の二値表現が終了した時、すなわち、復号化されたビットが実際のシンタックス要素の最後のビットであるか、を知ることができる。
図50は、図49のプロセスによって取得される符号語から、符号語に二値化されたデータ値を復元するプロセスを示している。図49のプロセスによって取得されるビット値はビットストリーム3450を形成する。上に説明したように、デコーダは、新しい符号語がビットストリーム3450上にくる時を知ることができ、新しい符号語のインスタンスは信号3452によって表わされる。
ステップ3454の最小値抽出ステップにおいて、値mが符号語の1次接頭語の先頭の符号語をカウントすることにより二値符号語から抽出される。このカウントはmと等しい。ステップ3456においてmとSがチェックされ、mがSと等しい場合(デコーダはどのシンタックス要素がどの二値化方式によって符号化されるかを知っているので、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つのマクロブロック対に対してのみ起こる。
上記説明および以下の特許請求の範囲は、それぞれの記載または請求の範囲に基づいてエンコーダまたはデコーダの動作中に実行されるステップを含む方法を包含するものとして理解されたい。
以上、装置に関連していくつかの態様を説明してきたが、これらの態様は、ブロックやデバイスが方法ステップやその特徴に対応する、対応する方法の記載をも表すことは明確である。同様に、方法ステップの関連において説明されている態様は、対応する装置の対応するブロックやアイテムや特徴の記載をも表す。方法ステップの一部またはすべてが、たとえば、マイクロプロセッサ、プログラム可能なコンピュータや電子回路などのハードウェア装置によって(またはこれを使用して)実行され得る。いくつかの実施形態において、最も重要な方法ステップの1以上はこのような装置によって実行可能である。
本発明の符号化/圧縮された信号は、デジタル記憶媒体に記憶され、または、インターネットなどの無線伝送媒体または有線伝送媒体などの伝送媒体へ転送することができる。
一定の実施要件に応じて、本発明の実施形態は、ハードウェアまたはソフトウェアにおいて実現することができる。実施は、電子的に可読なコントロール信号を記憶したフレキシブルディスク、DVD、ブルーレイ(登録商標)、CD、ROM、PROM、EPROM、EEPROM(登録商標)またはフラッシュメモリなどのデジタル記憶媒体を用いて実行され、これらは、それぞれの方法が実行できるようにプログラマブルコンピュータシステムと協働する(または協働することができる)。したがって、デジタル記憶媒体はコンピュータ可読媒体であってよい。
本発明による一部の実施形態は、本明細書に記載の方法の1つが実行されるように、プログラマブルコンピュータシステムと協働することができる電子的に可読なコントロール信号を有するデータキャリアを含む。
一般に、本発明の実施形態は、プログラムコードを有するコンピュータプログラムプロダクトとして実現され得て、プログラムコードはコンピュータプログラムプロダクトがコンピュータ上で実行されるときに方法の1つを実行するためにオペラブル(動作可能)である。プログラムコードは、たとえば、マシン可読キャリアに記憶されてもよい。
他の実施形態は、機械可読媒体に記憶された本明細書に記載の方法の一つを実行するためのコンピュータプログラムを含む。
換言すれば、本発明の方法の実施形態は、コンピュータプログラムがコンピュータ上で実行される際、本明細書中で記載されている方法の1つを実行するためのプログラムコードを有するコンピュータプログラムである。
したがって、本発明の方法のさらなる実施形態は、本明細書中に記載されている方法の1つの実行するためのコンピュータプログラムを記録したデータキャリア(またはデジタル記憶媒体またはコンピュータ可読媒体)である。
したがって、本発明の方法のさらなる実施形態は、本明細書中に記載されている方法の1つを実行するためのコンピュータプログラムを表す信号のデータストリームまたはシーケンスである。たとえば、信号のデータストリームまたはシーケンスは、たとえば、インターネットを介して、データ通信接続によって転送される。
さらなる実施形態は、本明細書中に記載されている方法の1つを実行するように構成されたまたは適応された、たとえば、コンピュータ、またはプログラマブル論理デバイスなどのプロセッシング手段を含む。
さらなる実施形態は、本明細書に記載した方法の1つを実行するためのコンピュータプログラムをインストールしたコンピュータを含む。
いくつかの実施形態において、プログラマブル論理デバイス(たとえば、フィールドプログラマブルゲートアレイ)は、本明細書に記載された方法の一つを実行するために、マイクロプロセッサと協働することができる。一般に、これらの方法は、好ましくは、任意のハードウェア装置によって実行される。
上記した実施形態は本発明の原理を例示しているにすぎない。なお、本明細書に記載されている構成および細部の変更および変形は他の当業者には明確であることが理解されよう。したがって、本発明は、添付の特許請求の範囲を逸脱しない限りにおいて本明細書中の実施形態の記載および説明によって提示される具体的な詳細によって限定されないことを意図する。