前述したように、ビデオストリームのコーディングに関連する圧縮方式は、画像を複数のブロックに分割し、1つまたは複数の技術を使用してデジタルビデオ出力ビットストリームを生成して、出力に含まれる情報を制限することを含む。受信した符号化ビットストリームを復号化して、限られた情報からブロックとソース画像を再作成することができる。ビデオストリームまたはその一部(フレームやブロックなど)を符号化することは、ビデオストリームで時間的または空間的な類似性を使用して、コーディング効率を向上させることができる。例えば、ビデオストリームの現在のブロックは、以前にコーディングされたピクセル値と現在のブロック内のピクセル値との間の差(残差)を識別することに基づいて符号化され得る。この方法では、残差と、残差の生成に使用されるパラメーターのみを符号化されたビットストリームに追加する必要がある。残差は、不可逆量子化ステップを使用して符号化され得る。
以下でさらに説明するように、残差ブロックはピクセル領域内にある。残差ブロックは、周波数領域に変換されて、変換係数の変換ブロックが得られる。変換係数は量子化され、その結果、量子化された変換係数の量子化された変換ブロックを得ることができる。量子化された係数は、エントロピー符号化され、かつ符号化されたビットストリームに付加される。復号化器は、符号化されたビットストリームを受信し、量子化された変換係数をエントロピー復号化して、元のビデオフレームを再構築することができる。
エントロピーコーディングは、符号化されたビデオビットストリームで発生する値の分布をモデル化する確率モデルに依存する「ロスレス」コーディングに関する手法である。測定または推定された値の分布に基づく確率モデルを使用することにより、エントロピーコーディングは、ビデオデータを表現するために必要なビット数を理論上の最小値に近くまで低減できる。実際には、ビデオデータを表現するのに必要なビット数における実際の低減は、確率モデルの精度、符号化が実行されるビット数、およびコーディングを実行するために使用される固定小数点演算の計算精度の関数とすることができる。
符号化されたビデオビットストリームでは、ビットの多くは、コンテンツ予測(例えば、インターモード/動きベクトルコーディング、イントラ予測モードコーディングなど)または残差コーディング(例えば、変換係数)の2つのうちの一つに関して使用される。符号化器は、係数コーディングに費やされるビット数/ビット量を減少させる技術を使用することができる。例えば、係数トークンツリー(バイナリトークンツリーとも呼ばれ得る)は、このトークンツリーにおける各ブランチに関する前方適応確率により、値の範囲を指定する。トークンベースの値は、符号化される値から減算されて残差が形成され、次いで、ブロックは固定確率を用いて符号化される。後方適応性を含むわずかなバリエーションを有する同様のスキームも可能である。適応技術は、ビデオストリームが符号化されるときに、データの特性の変化に適応するように確率モデルを変更することができる。いずれにしても、復号化器には、ビデオビットストリームを復号化するために、エントロピーコーディングされたビデオビットストリームを符号化するために使用された確率モデルが通知される(または利用可能となる)。
上記したように、シンボルのシーケンスのエントロピーコーディングは、通常、確率モデルを使用してシーケンスに関する確率pを決定し、バイナリ算術コーディングを使用して符号化器においてシーケンスをバイナリ符号語にマッピングし、復号化器においてそのシーケンスをバイナリ符号語から復号化することにより達成される。符号語長(即ち、ビット数)は、−log(p)によって与えられる。エントロピーコーディングの効率は、確率モデルに直接関係する。本明細書全体を通して、logは、特に指定がない限り、底が2の対数関数を表す。
本明細書で使用されるモデルは、ロスレス(エントロピー)コーディングであるか、またはロスレス(エントロピー)コーディングにおけるパラメーターであり得る。モデルは、エントロピーコーディングの確率推定に影響を与える任意のパラメーターまたは方法であり得る。例えば、モデルは、トークンツリー内の内部ノードにおいて決定を符号化および復号化するために使用される確率を(以下の図7に関して説明するように)定義することができる。そのような場合、現在のフレームに関する確率を学習するための2パスプロセスは、本明細書で説明されるように複数のモデルをミキシングすることにより、シングルパスプロセスに簡略化され得る。別の例では、モデルは、特定のコンテキスト導出方法を定義し得る。そのような場合、本開示による実施形態を使用して、多数のそのような方法によって生成されるコーディング確率を自動的にミキシングすることができる。さらに別の例では、モデルは、完全に新たなロスレスコーディングアルゴリズムを定義し得る。
コンテキストモデリングの目的は、算術コーディング、ハフマンコーディング、その他の可変長から可変長へのコーディングエンジンなど、後続のエントロピーコーディングエンジンの確率分布を取得することである。良好な圧縮パフォーマンスを実現するには、多数のコンテキストが必要となり得る。例えば、一部のビデオコーディングシステムは、変換係数のコーディングのみのために数百または数千ものコンテキストを含むことができる。各コンテキストは、確率分布に対応することができる。
確率分布は、復号化器によって学習されるか、かつ/または復号化されるフレームのヘッダーに含まれる。
学習とは、復号化器のエントロピーコーディングエンジンが、復号化されたフレームに基づいてコンテキストモデルの確率分布(即ち、確率モデル)に適応できることを意味する。例えば、復号化器は、復号化器(例えば、復号化器のエントロピーコーディングエンジン)が追加のフレームを復号化するときに、復号化器が継続的に更新することができる初期確率分布を利用可能にすることができる。確率モデルの更新により、復号化されたフレームの実際の分布を反映するように初期確率分布が確実に更新される。
ヘッダーに確率分布を含ませることにより、対応するコンテキストが与えられたときに、次のフレームの復号化に関して含まれた確率分布を使用するように復号化器に指示することができる。コスト(ビット単位)は、各確率分布をヘッダーに含ませることに関連付けられている。例えば、3000のコンテキストを含み、かつ8ビットを使用して確率分布を符号化する(1〜255の整数値としてコーディングされる)コーディングシステムでは、24,000ビットが符号化されたビットストリームに追加される。これらのビットは、オーバーヘッドビットである。オーバーヘッドビットの数を低減するために、いくつかの手法を使用することができる。例えば、すべてではなく一部のコンテキストに関する確率分布を含むようにすることができる。例えば、予測スキームを使用してオーバーヘッドビットを低減することもできる。これらのオーバーヘッド低減手法を使用しても、オーバーヘッドはゼロではない。
コンテキストモデリングにおける主要な設計上の課題または問題は、以下でさらに説明する2つの相反する目的の間でバランスを取ることである。1)コンテキストをより多く追加することにより圧縮パフォーマンスを向上させること、2)コンテキストに関連するオーバーヘッドコストを低減させることである。この問題は、部分的には、コンテキストに関連するオーバーヘッドがアルファベットサイズが大きくなるにつれて増大するという事実に起因して、マルチシンボルの非バイナリアルファベットが含まれる場合に特に関連する。
本開示による実施形態は、追加されたコンテキストに関連するオーバーヘッドを制限しながら、コンテキストを追加できるように、選択的ミキシングを使用する。コンテキストは、例えば、変換係数の符号化に使用されるトークンのアルファベットに対する確率分布を定義することができる。選択的ミキシングでは、第1のコンテキストモデルを使用してすべてのトークンに関して定義された第1の確率分布を決定し、第2のコンテキストを使用して頻度の高いトークンに関する第2の確率分布を決定することができる。頻度の高いトークンの数は、すべてのトークンの数よりも少なくなる。係数のコーディングでは、選択的ミキシングにより、頻度の高いトークンに関して第1および第2の確率分布がミキシングされ、残りのトークンに関して第1の確率分布が使用される。
本開示による実施形態は、確率モデルの選択的ミキシングを使用することができる。ミキシングモデルは、エントロピーコーディングを使用して符号化された任意の値の符号化に使用することができる。例えば、量子化された変換係数をエントロピーコーディングするために、2つ以上の確率モデルをミキシングすることができる。本開示による実施形態の利点は、コンテキストに関連するオーバーヘッドの低減および圧縮パフォーマンスの向上を含む。さらに、選択的ミキシングを使用することにより、コーディングシステムにおけるコンテキストモデリングは、一部のコンテキストがアルファベットEに亘る全体的な分布に影響を与えるコンテキスト情報から導出される一方で、他のコンテキストがアルファベットEに亘る一部の分布のみに影響を与えるコンテキスト情報から導出されるように設計することができ、これにより、選択的ミキシングを使用しないコーディングシステムと比較して、コンテキストに関連するオーバーヘッドを低減する。
ビデオ圧縮におけるエントロピーコーディングのためのミキシングは、本明細書では最初に、教示が組み込まれ得るシステムに関して説明される。
図1は、ビデオ符号化および復号化システム100の概略図である。送信局102は、例えば、図2に記載されているようなハードウェアの内部構成を有するコンピュータとすることができる。しかしながら、送信局102の他の適切な実施形態も可能である。例えば、送信局102の処理を複数の装置に分散させることができる。
ネットワーク104は、ビデオストリームの符号化および復号化のために、送信局102および受信局106を接続することができる。具体的には、ビデオストリームを送信局102で符号化することができ、符号化されたビデオストリームを受信局106で復号化することができる。ネットワーク104は、例えば、インターネットであってもよい。ネットワーク104は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、仮想プライベートネットワーク(VPN)、携帯電話ネットワーク、または送信局102から、この例では、受信局106にビデオストリームを転送する任意の他の手段とすることができる。
受信局106は、一例では、図2に記載されたようなハードウェアの内部構成を有するコンピュータとすることができる。しかしながら、受信局106の他の適切な実施形態も可能である。例えば、受信局106の処理を複数の装置に分散させることができる。
ビデオ符号化および復号化システム100の他の実施形態も可能である。例えば、実施形態はネットワーク104を省略することができる。別の実施形態では、ビデオストリームを符号化し、後で受信局106またはメモリを有する任意の他の装置に送信するために格納することができる。一実施形態では、受信局106は、符号化されたビデオストリームを(例えば、ネットワーク104、コンピュータバス、および/または何らかの通信経路を介して)受信し、後の復号化のためにビデオストリームを記憶する。一実施形態では、ネットワーク104を介して符号化されたビデオを伝送するためにリアルタイム転送プロトコル(RTP:real−time transport protocol)が使用される。別の実施形態では、例えば、ハイパーテキスト転送プロトコル(HTTP:Hypertext Transfer Protocol)ベースのビデオストリーミングプロトコルなどのRTP以外の転送プロトコルが使用されてもよい。
ビデオ会議システムで使用される場合、例えば、送信局102および/または受信局106は、以下に説明するように、ビデオストリームを符号化および復号化する能力を含むことができる。例えば、受信局106は、ビデオ会議サーバ(例えば、送信局102)から符号化されたビデオビットストリームを受信して復号化および視聴し、さらにそのビデオビットストリームを他の参加者による復号化および視聴のために符号化してビデオ会議サーバに送信するビデオ会議参加者とし得る。
図2は、送信局または受信局を実施することができるコンピューティングデバイス200の一例のブロック図である。例えば、コンピューティングデバイス200は、図1の送信局102および受信局106の一方または両方を実施することができる。コンピューティングデバイス200は、複数のコンピューティングデバイスを含むコンピューティングシステムの形態、または例えば、携帯電話、タブレットコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、デスクトップコンピュータなどの単一のコンピューティングデバイスの形態とすることができる。
コンピューティングデバイス200内のCPU202は、中央処理装置とすることができる。代替的に、CPU202は、現在存在するか、または今後開発される、情報を操作または処理することができる任意の他のタイプのデバイスまたは複数のデバイスであってもよい。開示された実施態様は、図示のような単一のプロセッサ、例えばCPU202で実施することができるが、複数のプロセッサを使用して速度と効率の利点を達成することができる。
コンピューティングデバイス200内のメモリ204は、実施形態では読み出し専用メモリ(ROM)デバイスまたはランダムアクセスメモリ(RAM)デバイスであってもよい。任意の他の適切なタイプの記憶装置をメモリ204として使用することができる。メモリ204は、CPU202がバス212を使用してアクセスするコードおよびデータ206を含むことができる。メモリ204は、オペレーティングシステム208およびアプリケーションプログラム210をさらに含むことができ、アプリケーションプログラム210は、本明細書に記載された方法をCPU202が実行するのを可能にする少なくとも1つのプログラムを含む。例えば、アプリケーションプログラム210は、アプリケーション1〜Nを含むことができ、アプリケーション1〜Nは、本明細書で説明する方法を実行するビデオコーディングアプリケーションをさらに含む。コンピューティングデバイス200はまた、例えば、モバイルであるコンピューティングデバイス200と共に使用されるメモリカードとすることができる二次ストレージ214を含むことができる。ビデオ通信セッションは、かなりの量の情報を含み得るので、それらは、二次ストレージ214に全体的または部分的に記憶され、処理のために必要に応じてメモリ204にロードされる。
コンピューティングデバイス200は、ディスプレイ218などの1つまたは複数の出力デバイスを含むこともできる。ディスプレイ218は、一例では、ディスプレイを、タッチ入力を感知するように動作可能なタッチセンシティブエレメントと組み合わせたタッチセンシティブディスプレイであってもよい。ディスプレイ218は、バス212を介してCPU202に接続することができる。ユーザがコンピューティングデバイス200をプログラムするかまたは他の方法で使用することを可能にする他の出力デバイスが、ディスプレイ218に加えて、またはディスプレイ218に代えて設けられてもよい。出力デバイスがディスプレイであるか、またはディスプレイを含む場合、ディスプレイは、液晶ディスプレイ(LCD)、陰極線管(CRT)ディスプレイ、または有機LED(OLED)ディスプレイなどの発光ダイオード(LED)ディスプレイを含む様々な方法で実施することができる。
コンピューティングデバイス200は、コンピューティングデバイス200を操作するユーザの画像等の画像を検出することができる、例えば、カメラなどの撮像デバイス220、または現在または将来開発される任意の他の撮像デバイス220を含むか、または撮像デバイス220と通信することができる。撮像デバイス220は、コンピューティングデバイス200を操作するユーザの方に向けられるように配置することができる。一例では、撮像デバイス220の位置および光軸は、視野が、ディスプレイ218に直接隣接する領域であって、その領域からディスプレイ218が視認可能な領域を含むように構成することができる。
コンピューティングデバイス200は、コンピューティングデバイス200の近くの音を感知することができる、例えば、マイクロホンなどの音声感知デバイス222、または現在または今後開発される任意の他の音声感知デバイスを含むか、または音声感知デバイス222と通信することができる。音声感知デバイス222は、コンピューティングデバイス200を操作するユーザの方に向けられ、かつユーザがコンピューティングデバイス200を操作している間にユーザによって発せられた例えば音声、他の発話を受信するように構成することができる。
図2は、コンピューティングデバイス200のCPU202およびメモリ204が単一のユニットに統合されていることを示しているが、他の構成を利用することもできる。CPU202の動作は、直接的にまたはローカルエリアネットワークまたは他のネットワークを介して接続することができる複数のマシン(各マシンは1つまたは複数のプロセッサを有する)にわたって分散させることができる。メモリ204は、ネットワークベースのメモリのような複数のマシンに分散されるか、またはコンピューティングデバイス200の動作を実行する複数のマシンにおけるメモリとすることができる。本明細書では単一のバスとして示されているが、コンピューティングデバイス200のバス212は、複数のバスから構成することができる。さらに、二次ストレージ214は、コンピューティングデバイス200の他の構成要素に直接接続されるか、またはネットワークを介してアクセスされ、かつメモリカードなどの単一の統合されたユニットまたは複数のメモリカードなどの複数のユニットを含むことができる。従って、コンピューティングデバイス200は、多種多様な構成で実施することができる。
図3は、符号化され、続いて復号化されるビデオストリーム300の一例の図である。ビデオストリーム300は、ビデオシーケンス302を含む。次のステージでは、ビデオシーケンス302はいくつかの隣接フレーム304を含む。3つのフレームが隣接フレーム304として示されているが、ビデオシーケンス302は任意の数の隣接フレーム304を含むことができる。隣接フレーム304はさらに、個々のフレーム、例えば、フレーム306に細分化することができる。次のステージでは、フレーム306は、一連のセグメント308またはプレーンに分割することができる。セグメント308は、例えば、並列処理を可能にするフレームのサブセットとすることができる。セグメント308は、ビデオデータを別々の色に分離することができるフレームのサブセットとすることができる。例えば、カラービデオデータのフレーム306は、輝度プレーン(luminance plane)および2つの色度プレーン(chrominance plane)を含むことができる。セグメント308は、異なる解像度でサンプリングすることができる。
フレーム306がセグメント308に分割されているか否かにかかわらず、フレーム306は、さらに、フレーム306内の例えば16×16画素に対応するデータを含むことができるブロック310に細分化されてもよい。ブロック310は、1つまたは複数のセグメント308の画素データからのデータを含むように構成される。ブロック310は、4x4画素、8x8画素、16x8画素、8x16画素、16x16画素、またはそれ以上等の任意の他の適切なサイズであってもよい。
図4は、本開示の実施形態による符号化器400のブロック図である。符号化器400は、例えば、メモリ204などのメモリに格納されたコンピュータソフトウェアプログラムを提供するなどして、上述のように送信局102内で実施することができる。コンピュータソフトウェアプログラムは、CPU202等のプロセッサによる実行時に、送信局102に本明細書で説明した方法でビデオデータを符号化させる機械命令を含むことができる。符号化器400は、例えば、送信局102に含まれる専用のハードウェアとして実施することもできる。符号化器400は、ビデオストリーム300を入力として使用してフォワードパス(実線の接続線で示す)において様々な機能を実行して、符号化または圧縮されたビットストリーム420を生成するイントラ予測/インター予測ステージ402、変換ステージ404、量子化ステージ406、およびエントロピー符号化ステージ408を有する。符号化器400は、将来のブロックの符号化のためのフレームを再構成する再構成パス(点線の接続線で示す)をも含む。図4において、符号化器400は、再構成パスにおいて様々な機能を実行する以下のステージ、逆量子化ステージ410、逆変換ステージ412、再構成ステージ414、およびループフィルタリングステージ416を有する。符号化器400の他の構成的な変形例を使用して、ビデオストリーム300を符号化することができる。
ビデオストリーム300が符号化のために提示されるとき、フレーム306はブロックの単位で処理され得る。イントラ予測/インター予測ステージ402において、ブロックは、イントラフレーム予測(イントラ予測とも呼ばれる)またはインターフレーム予測(インター予測とも呼ばれる)、または両方の組み合わせを用いて符号化することができる。いずれの場合でも、予測ブロックを形成することができる。イントラ予測の場合、予測ブロックの全部または一部が、以前に符号化され、かつ再構成された現在のフレーム内のサンプルから形成され得る。インター予測の場合、予測ブロックの全部または一部は、動きベクトルを使用して決定された1つまたは複数の以前に構築された参照フレーム内のサンプルから形成され得る。
次に、引き続き図4を参照して、イントラ予測/インター予測ステージ402において予測ブロックが現在のブロックから減算され、残差ブロック(残差とも呼ばれる)が生成される。変換ステージ404は、ブロックベースの変換を使用して、残差を、例えば周波数領域の変換係数に変換する。このようなブロックベースの変換は、例えば、離散コサイン変換(DCT:Discrete Cosine Transform)および非対称離散サイン変換(ADST:Asymmetric Discrete Sine Transform)を含む。他のブロックベースの変換も可能である。さらに、異なる変換の組み合わせを単一の残差に適用することができる。変換の適用の一例では、DCTは残差ブロックを、変換係数値が空間周波数に基づく周波数領域に変換する。行列の左上の最低周波数(DC)係数、および行列の右下の最高周波数係数。予測ブロックのサイズ、従って結果の残差ブロックは、変換ブロックのサイズと異なり得ることは注目に値する。例えば、予測ブロックは、別々の変換が適用される小さなブロックに分割され得る。
量子化ステージ406は、量子化値または量子化レベルを使用して、変換係数を量子化された変換係数と呼ばれる離散量子値に変換する。例えば、変換係数は、量子化値で除算され、切り捨てられてもよい。次に、量子化された変換係数は、エントロピー符号化ステージ408によってエントロピー符号化される。エントロピーコーディングは、トークンツリーおよびバイナリツリーを含む任意の数の技術を使用して実行されてもよい。例えば、使用される予測のタイプ、変換タイプ、動きベクトルおよび量子化値を含み得る、ブロックを復号化するために使用される他の情報とともに、エントロピー符号化された係数は、圧縮されたビットストリーム420に出力される。ブロックを復号化するための情報は、圧縮ビットストリーム420内のブロック、フレーム、スライス、および/またはセクションヘッダーにエントロピーコーディングされ得る。圧縮されたビットストリーム420は、符号化されたビデオストリームまたは符号化されたビデオビットストリームとも称され、これらの用語は本明細書では互換的に使用される。
符号化器400および復号化器500(以下に説明する)の両方が、圧縮されたビットストリーム420を復号化するために同じ参照フレームを使用することを確実にするために、図4における再構成パス(点線の接続線で示す)が使用される。再構成パスは、逆量子化ステージ410で量子化された変換係数を逆量子化すること、および逆変換ステージ412で逆量子化された変換係数を逆変換して微分残差ブロック(微分残差とも称される)を生成することを含む以下により詳細に説明される復号化プロセス中に行われる機能と同様の機能を実行する。再構成ステージ414において、イントラ予測/インター予測ステージ402で予測された予測ブロックを微分残差に加えて、再構成されたブロックが作成される。ブロック化アーチファクトなどの歪みを低減するために、ループフィルタリングステージ416が再構成されたブロックに適用される。
符号化器400の他の変形例を使用して圧縮されたビットストリーム420を符号化することができる。例えば、非変換ベースの符号化器400は、あるブロックまたはフレームに関して変換ステージ404を使用せずに残差信号を直接量子化することができる。別の実施形態では、符号化器400は、量子化ステージ406と逆量子化ステージ410とを組み合わせて単一のステージにすることができる。
図5は、本開示の実施形態による復号化器500のブロック図である。復号化器500は、例えば、メモリ204に格納されたコンピュータソフトウェアプログラムを提供することによって、受信局106で実施することができる。コンピュータソフトウェアプログラムは、CPU202などのプロセッサによる実行時に、受信局106に、図8および9において以下のように説明した方法でビデオデータを復号化させる機械命令を含む。復号化器500は、例えば、送信局102または受信局106に含まれるハードウェアで実施することもできる。復号化器500は、上述の符号化器400の再構成パスと同様に、一例では、様々な機能を実行して圧縮されたビットストリーム420から出力ビデオストリーム516を生成するための以下のステージ、エントロピー復号化ステージ502、逆量子化ステージ504、逆変換ステージ506、イントラ予測/インター予測ステージ508、再構成ステージ510、ループフィルタリングステージ512、およびデブロッキングフィルタリングステージ514を含む。圧縮されたビットストリーム420を復号化するために復号化器500の他の構造的な変形例を使用することができる。
圧縮されたビットストリーム420が復号化のために提示されると、圧縮されたビットストリーム420内のデータ要素が、エントロピー復号化ステージ502によって復号化されて、一組の量子化された変換係数が生成される。逆量子化ステージ504は、(例えば、量子化された変換係数に量子化値を乗算することにより)量子化された変換係数を逆量子化し、逆変換ステージ506は、選択された変換タイプを使用して逆量子化された変換係数を逆変換して、符号化器400における逆変換ステージ412によって生成されたものと同一である微分残差を生成する。圧縮されたビットストリーム420から復号化されたヘッダー情報を使用して、復号化器500は、イントラ予測/インター予測ステージ508を用いて、例えばイントラ予測/インター予測ステージ402において符号化器400で生成されたのと同じ予測ブロックを作成する。再構成ステージ510において、予測ブロックを微分残差に加えて再構成ブロックが作成される。ループフィルタリングステージ512は、ブロッキングアーチファクトを低減するために再構成されたブロックに適用される。再構成されたブロックに他のフィルタリングを適用することができる。一例では、ブロッキング歪を低減するためにデブロッキングフィルタリングステージ514が再構成ブロックに適用され、その結果が出力ビデオストリーム516として出力される。 出力ビデオストリーム516は、復号化されたビデオストリームとも呼ばれ、用語は本明細書では互換的に使用される。
復号化器500の他の変形例を使用して、圧縮されたビットストリーム420を復号化することができる。例えば、復号化器500は、デブロッキングフィルタリングステージ514を用いずに出力ビデオストリーム516を生成することができる。復号化器500のいくつかの実施形態では、デブロッキングフィルタリングステージ514は、ループフィルタリングステージ512の前に適用される。追加的または代替的に、符号化器400は、ループフィルタリングステージ416に加えて、デブロッキングフィルタリングステージを含む。
図6は、本開示の実施形態による量子化された変換係数を示す図600である。図600は、現在のブロック620、スキャン順序602、量子化された変換ブロック604、非ゼロマップ606、ブロック終了(end−of−block)マップ622、およびサインマップ626を示している。現在のブロック620は、4x4ブロックとして図示されている。しかしながら、任意のブロックサイズが可能である。例えば、現在のブロックは、4x4、8x8、16x16、32x32のサイズ(即ち、寸法)、または任意の他の正方形または長方形のブロックサイズを有することができる。現在のブロック620は、現在のフレームのブロックとすることができる。別の例では、現在のフレームは、ブロックの集合を含むセグメント(図3のセグメント308など)、タイル、または同様のものに分割されてもよく、現在のブロックは、パーティションのブロックである。
量子化された変換ブロック604は、現在のブロック620のサイズに類似したサイズのブロックであり得る。量子化された変換ブロック604は、非ゼロ係数(例えば、係数608)およびゼロ係数(例えば、係数610)を含む。上述したように、量子化された変換ブロック604は、現在のブロック620に対応する残差ブロックに関する量子化された変換係数を含む。また、上述したように、量子化された変換係数は、図4のエントロピーコーディングステージ408などのエントロピーコーディングフェーズによってエントロピーコーディングされる。
量子化された変換係数をエントロピーコーディングすることは、図7に関して以下に説明するように、2値化された変換係数の2値シンボルをコーディングするための条件付き確率の推定値を提供するコンテキストモデル(確率コンテキストモデル、確率モデル、モデル、およびコンテキストとも呼ばれる)の選択を含むことができる。量子化された変換係数をエントロピーコーディングする場合、追加情報が、コンテキストモデルを選択するためのコンテキストとして使用され得る。例えば、以前に符号化された変換係数の大きさは、確率モデルを決定するために少なくとも部分的に使用することができる。
変換ブロックを符号化するために、ビデオコーディングシステムは、スキャン順序で変換ブロックをトラバースし(traverse)、量子化された変換係数が個々にトラバースされる(即ち、アクセスされる)ときに、量子化された変換係数を符号化(例えば、エントロピー符号化)し得る。スキャン順序602などのジグザグスキャン順序では、変換ブロックの左上隅(DC係数とも呼ばれる)が最初にトラバースされて符号化され、スキャン順序の次の係数(即ち、「1」とラベル付けされた位置に対応する変換係数)がトラバースされて符号化される。ジグザグスキャン順序(即ち、スキャン順序602)では、現在の量子化された変換係数(例えば、符号化されるべき変換係数)の上方でかつ左側のいくつかの量子化された変換係数が最初にトラバースされる。他のスキャン順序も可能である。量子化された変換係数の1次元構造(例えば、配列)は、スキャン順序を使用して2次元の量子化された変換ブロックをトラバースすることによって生じたものとすることができる。
いくつかの例では、量子化された変換ブロック604を符号化することは、量子化された変換ブロック604のどの量子化された変換係数がゼロであり、どれが非ゼロであるかを示す非ゼロマップ606を決定することを含むことができる。非ゼロ係数およびゼロ係数は、非ゼロマップにおいて値1および値ゼロ(0)によりそれぞれ示すことができる。例えば、非ゼロマップ606は、係数608に対応するデカルト位置(0,0)における非ゼロ607と、係数610に対応するデカルト位置(2,0)におけるゼロ608とを含む。
いくつかの例では、量子化された変換ブロック604を符号化することは、ブロック終了マップ622を生成すること、およびブロック終了マップ622を符号化することを含むことができる。ブロック終了マップは、量子化された変換ブロック604の非ゼロの量子化された変換係数が、任意のスキャン順序に関して最後の非ゼロ係数であるかどうかを示す。非ゼロ係数が変換ブロックにおける最後の非ゼロ係数でない場合、そのことは、ブロック終了マップにおいてバイナリビット0(ゼロ)によって示すことができる。一方、非ゼロ係数が変換ブロックにおける最後の非ゼロ係数である場合、ブロック終了マップにおいてバイナリ値1によって示すことができる。例えば、スキャン位置11に対応する量子化された変換係数(即ち、最後の非ゼロの量子化された変換係数628)は、量子化された変換ブロック604の最後の非ゼロ係数であるため、それは、1のブロック終了値624によって示され、他のすべての非ゼロの変換係数は、ゼロによって示される。
いくつかの例では、量子化された変換ブロック604を符号化することは、サインマップ626を生成すること、およびサインマップ626を符号化することを含むことができる。サインマップ626は、量子化された変換ブロック604のどの非ゼロの量子化された変換係数が正の値を有し、どの非ゼロの量子化された変換係数が負の値を有するかを示す。ゼロの変換係数は、サインマップで示される必要はない。サインマップ626は、量子化された変換ブロック604に関するサインマップを示している。サインマップでは、負の量子化された変換係数をゼロ(0)で示し、正の量子化された変換係数を1で示すことができる。
図7は、本開示の実施形態に従ってブロックをビデオビットストリームにエントロピーコーディングするために使用することができる係数トークンツリー700の図である。係数トークンツリー700は、ツリーの各ノードにおいて、2つのブランチのうちの1つを取る(即ち、トラバースする)必要があるため、バイナリツリーと呼ばれる。係数トークンツリー700は、AおよびBとラベル付けされたノードにそれぞれ対応するルートノード701およびノード703を含む。
図6に関して上述したように、ブロックに関してブロック終了(EOB)トークンが検出されると、現在のブロックの係数のコーディングは終了し、ブロックにおける残りの係数はゼロであると推測される。そのため、EOB位置のコーディングは、ビデオコーディングシステムにおける係数の重要な部分になる。
いくつかのビデオコーディングシステムでは、現在のトークンが現在のブロックのEOBトークンに等しいか(否か)を決定するバイナリ決定は、非ゼロ係数が復号化された直後または最初のスキャン位置(DC)において符号化される。一例では、サイズMxNの変換ブロックの場合、Mは変換ブロックにおける列の数を示し、Nは行の数を示し、現在のトークンがEOBトークンと等しいかどうかの最大コーディング回数はMxNと等しい。MおよびNは、値2、4、8、16、32、64などの値を取ることができる。以下で説明するように、バイナリ決定は、係数トークンツリー700におけるルートノード701からノード703に移動する決定に対応する「1」ビットのコーディングに対応する。本明細書において、「ビットをコーディングする」とは、符号化される変換係数を表す符号語におけるビットの出力または生成を意味する。同様に、「ビットの復号化」とは、ビットが係数トークンツリー内でトラバースされるブランチに対応するように、復号化される量子化された変換係数に対応する符号語のビットの(符号化されたビットストリームなどからの)読み取りを意味する。
係数トークンツリー700を使用して、量子化された変換ブロック(例えば、図6の量子化された変換ブロック604)の量子化された係数(例えば、図6の係数608、610)に対して2進数列が生成される。
一例では、N×Nブロック(例えば、量子化された変換ブロック604)内の量子化された係数は、所定のスキャン順序(例えば、図6のスキャン順序602)に従って1D(一次元)配列(ここでは、配列u)に編成される。Nは、4、8、16、32、または任意のその他の値にすることができる。1D配列のi番目の位置における量子化された係数は、u[i]として参照される。ここで、i=0,…,N*N−1である。u[i],…,u[N*N−1]における最後の連続のゼロの開始位置は、eobとして表すことができる。u[N*N−1]がゼロでない場合、値N*Nに設定することができる。即ち、1D配列uの最後の係数がゼロでない場合、eobは、値N*Nに設定することができる。図6の例を使用すると、1D配列uは次のエントリu[]=[−6、0、−1、0、2、4、1、0、0、1、0、−1、0、0、0、0]を有することができる。u[i]の各々における値は、量子化された変換係数である。本明細書では、1D配列uの量子化された変換係数は、単に「係数」または「変換係数」と呼ぶこともある。位置i=0における係数(即ち、u[0]=−6)は、DC係数に対応している。この例では、1D配列uの位置12におけるゼロ係数の後に非ゼロ係数がないため、eobは、12に等しくなる。
i=0〜N*N−1に関する係数u[i],…,u[N*N−1]を符号化および復号化するために、トークンt[i]が各位置i<=eobにおいて生成される。i<eobに関して、トークンt[i]は、u[i]における対応する量子化された変換係数のサイズおよび/またはサイズ範囲を示すことができる。eobにおいて量子化された変換係数に関するトークンは、EOB_TOKENとすることができる。EOB_TOKENは、1D配列uがeob位置に続く非ゼロ係数が(包含的に)含まれないことを示すトークンである。即ち、t[eob]=EOB_TOKENは、現在のブロックのEOB位置を示す。以下の表Iは、EOB_TOKENを除くトークン値の例、および本開示の実施形態によるそれらの値と対応する名前のリストを提供する。
一例では、量子化された係数値は、符号付き12ビット整数であると見なされる。量子化された係数値を表すために、12ビットの符号付き値の範囲を11個のトークン(表Iのトークン0−10)とブロック終了トークン(EOB_TOKEN)に分割することができる。トークンを生成して量子化された係数値を表すために、係数トークンツリー700をトラバースすることができる。ツリーをトラバースした結果(即ち、ビット列)は、図4のエントロピー符号化ステージ408に関して説明した符号化器によってビットストリーム(図4のビットストリーム420など)に符号化することができる。
係数トークンツリー700は、EOB_TOKEN(トークン702)、ZERO_TOKEN(トークン704)、ONE_TOKEN(トークン706)、TWO_TOKEN(トークン708)、THREE_TOKEN(トークン710)、FOUR_TOKEN(トークン712)、CAT1(表IのDCT_VAL_CAT1であるトークン714)、CAT2(表IのDCT_VAL_CAT2であるトークン716)、CAT3(表IのDCT_VAL_CAT3であるトークン718)、CAT4(表IのDCT_VAL_CAT4であるトークン720)、CAT5(表IのDCT_VAL_CAT5であるトークン722)、およびCAT6(表IのDCT_VAL_CAT6であるトークン724)のトークンを含む。上記から分かるように、係数トークンツリーは、単一の量子化された係数値を、トークン704、706、708、710、および712のうちの1つなどの単一のトークンにマッピングする。トークン714、716、718、720、722、および724などの他のトークンは、量子化された係数値の範囲を表す。例えば、37の値を有する量子化された変換係数は、トークンDCT_VAL_CAT5(図7のトークン722)によって表すことができる。
トークンに関するベース値は、その範囲の最小値として定義される。例えば、トークン720のベース値は19である。エントロピーコーディングは、各量子化された係数に関するトークンを識別し、トークンが範囲を表す場合、量子化された係数からベース値を減算することにより残差を形成することができる。例えば、20の値を有する量子化された変換係数は、復号化器が元の量子化された変換係数を再構築可能となるように、トークン720に含まれることによって、符号化されたビデオビットストリームにおいて1(即ち、20マイナス19)の残差値によって表される。ブロック終了のトークン(即ち、トークン702)は、変換されたブロックデータにおいてさらに非ゼロの量子化された係数が残っていないことを通知する。
係数コーディングのトークン値の別の例では、表1は2つに分割されている。第1(ヘッド)のセットは、ZERO_TOKEN、ONE_NOEOB、ONE_EOB、TWO_NOEOB、およびTWO_EOBを含み、第2(テール)のセットは、TWO_TOKEN、THREE_TOKEN、FOUR_TOKEN、DCT_VAL_CAT1、DCT_VAL_CAT2、DCT_VAL_CAT3、DCT_VAL_CAT4、DCT_VAL_CAT5、およびDCT_VAL_CAT6を含む。第2(テール)のセットは、第1(ヘッド)のセットのTWO_EOBまたはTWO_NOEOBが符号化または復号化されている場合にのみ、使用される。トークンONE_NOEOBおよびTWO_NOEOBは、係数トークンツリー700のトラバースがノード703で開始されるとき(即ち、checkEob=0のとき)、ONE_TOKENおよびTWO_TOKENにそれぞれ対応する。トークンONE_EOBおよびTWO_EOBは、ONE_TOKENおよびTWO_TOKEN(即ち、ルートノード701において開始される係数トークンツリー700のトラバース)であるか、またはそれらにそれぞれ対応することができる。係数トークンツリー700のツリートラバースおよびcheckEobについては、以下でさらに説明する。
(図4のエントロピー符号化ステージ408によるなど)バイナリ算術符号化エンジンを使用することによりトークンt[i]を符号化または復号化するために、係数トークンツリー700を使用することができる。係数トークンツリー700は、ルートノード701(即ち、Aとラベル付けされたノード)から開始してトラバースされる。係数トークンツリーをトラバースすることにより、例えば、バイナリ算術コーディングを使用してビットストリームに符号化されるビット列(符号語)が生成される。ビット列は、現在の係数(即ち、符号化されている量子化された変換係数)の表現である。
現在の係数がゼロであり、残りの変換係数に非ゼロの値が存在しない場合、トークン702(即ち、EOB_TOKEN)がビットストリームに追加される。これは、例えば、図6のスキャン順序の位置12における変換係数の場合である。一方、現在の係数が非ゼロの場合、または現在のブロックの残りの係数に非ゼロの値がある場合、「1」ビットが符号語に追加され、トラバースがノード703(即ち、Bとラベル付けされたノード)に移る。ノードBでは、現在の係数がテストされて、現在の係数がゼロに等しいかどうかが確認される。現在の係数がゼロに等しい場合、左側のブランチが取られて、値ZERO_TOKENおよびビット「0」を表すトークン704が符号語に追加される。現在の係数がゼロに等しくない場合、ビット「1」が符号語に追加され、トラバースがノードCを通過する。ノードCにおいて、現在の係数が1より大きいかどうかを確認するためにテストされる。現在の係数が1に等しい場合、左側のブランチが取られて、値ONE_TOKENを表すトークン706がビットストリームに追加される(即ち、「0」ビットが符号語に追加される)。現在の係数が1より大きい場合、トラバースはノードDに移って、現在の係数の値を値4と比較してチェックする。現在の係数が4以下の場合、トラバースはノードEに移り、「0」ビットが符号語に追加される。ノードEにおいて、値「2」と等しいかどうかのテストが行われ得る。真の場合、値「2」を表すトークン706がビットストリームに追加される(即ち、ビット「0」が符号語に追加される)。真でない場合、ノードFにおいて、現在の係数が値「3」または値「4」のいずれであるか、ビットストリームに対して適宜トークン710(即ち、ビット「0」が符号語に追加される)またはトークン712(即ち、ビット「1」が符号語に追加される)のいずれであるか等々がテストされる。
基本的に、左の子ノードへのトラバース時に「0」ビットが符号語に追加され、右の子ノードへのトラバース時に符号語に「1」ビットが追加される。圧縮されたビットストリームから符号語を復号化するときに、復号化器によって同様のプロセスが実行される。復号化器はビットストリームからビットを読み取る。ビットが「1」の場合、係数トークンツリーは右にトラバースされ、ビットが「0」の場合、ツリーは左にトラバースされる。復号化器は次のビットを読み取り、ツリーのトラバースがリーフノード(即ち、トークン)に到達するまでプロセスを繰り返す。一例として、トークンt[i]=THREE_TOKENを符号化するには、ルートノード(即ち、ルートノード701)から開始して、111010のバイナリ列が符号化される。別の例として、符号語11100を復号化すると、トークンTWO_TOKENが生成される。
左および右の子ノードへの「0」ビットと「1」ビットとの間の対応は、符号化および復号化のプロセスを記述するために使用される規則に過ぎないことに留意されたい。いくつかの実施形態では、例えば、「1」が左の子ノードに対応し、「0」が右の子ノードに対応する規則など、異なる規則を使用することができる。符号化器および復号化器の両方が同じ規則を導入している限り、本明細書で説明するプロセスが適用される。
EOB_TOKENは非ゼロ係数の後でのみ可能であるため、u[i−1]がゼロである場合(即ち、1D配列uの位置i−1における量子化された変換係数がゼロに等しい場合)、復号化器は、最初のビットが1でなければならないことを推測することができる。ツリーをトラバースする際に、ゼロ変換係数(例えば、図6のジグザグスキャン順序の位置1における変換係数)に続く変換係数(例えば、図6のジグザグスキャン順序の位置2の変換係数)に関して、トラバースは必ずルートノード701からノード703に移動するので、最初のビットは1でなければならない。
そのため、バイナリフラグcheckEobを使用して、係数トークンツリー700におけるルートノードから開始される最初のビットの符号化および復号化をスキップするように符号化器および復号化器に指示することができる。実際には、バイナリフラグcheckEobが0(即ち、ルートノードがチェックされるべきではないことを示す)である場合、係数トークンツリー700のルートノード701はスキップされ、ノード703はトラバースのためにアクセスされる係数トークンツリー700の最初のノードとなる。即ち、ルートノード701がスキップされると、符号化器は符号化をスキップすることができ、復号化器は復号化をスキップして、符号化列の最初のビット(即ち、バイナリビット「1」)を推測することができる。
ブロックの符号化または復号化の開始時に、バイナリフラグcheckEobを1に初期化することができる(即ち、ルートノードをチェックする必要があることを示す)。以下のステップは、NxNブロック内の量子化された変換係数を復号化するプロセスの一例を示す。
ステップ1において、バイナリフラグcheckEobがゼロ(即ち、checkEob=0)に設定され、インデックスもゼロ(即ち、i=0)に設定される。
ステップ2において、(1)バイナリフラグcheckEobが1に等しい場合、フル係数トークンツリー(即ち、係数トークンツリー700のルートノード701から開始)を使用すること、または(2)checkEobが0に等しい場合、EOB_TOKENがスキップされる部分ツリー(例えば、ノード703から開始)を使用することのいずれかによりトークンt[i]が復号化される。
ステップ3において、トークンt[i]=EOB_TOKENである場合、量子化された変換係数u[i],…,u[N*N−1]はすべてゼロになり、復号化プロセスは終了する。それ以外の場合、必要に応じて(即ち、t[i]がZERO_TOKENと等しくない場合)追加ビットが復号化されて、u[i]を再構築する。
ステップ4において、u[i]がゼロに等しい場合、バイナリフラグcheckEobが1に設定され、それ以外の場合、checkEobが0に設定される。即ち、checkEobは、値(u[i]!=0)に設定することができる。
ステップ5において、インデックスiがインクリメントされる(即ち、i=i+1)。
ステップ6において、量子化された変換係数がすべて復号化されるまで(即ち、インデックスi=N*Nまで)、またはEOB_TOKENが復号化されるまで、ステップ2〜5が繰り返される。
上記のステップ2において、トークンt[i]を復号化することは、コンテキストctxを決定するステップと、コンテキストctxからバイナリ確率分布(即ち、モデル)を決定するステップと、決定された確率分布を使用することにより、ブール演算コード(Boolean arithmetic code)を使用して係数トークンツリー700のルートノードからリーフノードへのパスを復号化するステップを含むことができる。コンテキストctxは、コンテキスト導出の方法を使用して決定することができる。コンテキスト導出の方法は、ブロックサイズ、プレーンタイプ(即ち、輝度または色度)、位置i、および以前に復号化されたトークンt[0],…,t[i−1]のうちの1つまたは複数を使用して、コンテキストctxを決定することができる。他の基準を使用して、コンテキストctxを決定することができる。バイナリ確率分布は、checkEOB=1の場合はルートノード701から、checkEOB=0の場合はノード703から開始する、係数トークンツリー700の任意の内部ノードに関して決定することができる。
いくつかの符号化システムでは、コンテキストctxが与えられたときに、トークンt[i]を符号化または復号化するために使用される確率は、固定され、かつ画像(即ち、フレーム)に適応していなくてもよい。例えば、確率は、任意のコンテキストctxに対して定義されたデフォルト値であり得るか、または確率は、そのフレームに関するフレームヘッダーの一部として符号化(即ち、通知)され得る。フレームをコーディングする際に、すべてのコンテキストに関する確率をコーディングすることは、コストがかかる。そのため、符号化器は、各コンテキストに関して、フレームヘッダーでコンテキストに関連する確率をコーディングし、バイナリフラグを使用して復号化器にその決定を通知することが有益かどうかを分析し得る。さらに、コンテキストに関する確率をコーディングすることは、(例えば、ビットレートにおける)コストを低減するために、予測を使用し得る。予測は、以前に復号化されたフレーム内の同じコンテキストの確率から導出され得る。
図8は、本開示の実施形態に従って量子化された変換係数をバイナリ化するためのツリー800の例の図である。ツリー800は、いくつかのビデオコーディングシステムにおいて量子化された変換係数をバイナリ化するために使用することができるバイナリツリーである。ツリー800は、バイナリ化、コンテキストモデリング、および量子化された変換係数の符号化および復号化のためのバイナリ算術コーディングのステップを使用するビデオコーディングシステムによって使用することができる。このプロセスは、コンテキスト適応型バイナリ算術コーディング(CABAC:context−adaptive binary arithmetic coding)として参照され得る。例えば、量子化された変換係数xを符号化するために、コーディングシステムは以下のステップを実行し得る。量子化された変換係数xは、図6の量子化された変換ブロック604の任意の係数(例えば、係数608)とすることができる。
バイナリ化ステップでは、ツリー800を使用することにより係数xがバイナリ列に最初にバイナリ化される。バイナリ化プロセスは、係数xの符号なしの値をバイナリ化し得る。例えば、係数628(即ち、値−1)をバイナリ化する場合、値1がバイナリ化される。これにより、ツリー800をトラバースして、バイナリ列10が生成される。バイナリ列10の各ビットは、ビンと呼ばれる。
コンテキスト導出ステップでは、符号化されるべき各ビンに対して、コンテキストが導出される。コンテキストは、ブロックサイズ、プレーンタイプ(即ち、輝度または色度)、係数xのブロック位置、および以前に復号化された係数(例えば、可能な場合、左方および/または上方に隣接する(neighboring)係数)の1つまたは複数などの情報から導出することができる。他の情報を使用して、コンテキストを導出することができる。
バイナリ算術コーディングステップでは、コンテキストが与えられると、例えば、バイナリ算術コーディングエンジンを使用することにより、ビンは、コンテキストに関連付けられた確率値とともにバイナリ符号語に符号化される。
変換係数をコーディングするステップは、コンテキスト更新と呼ばれるステップを含むことができる。コンテキスト更新ステップでは、ビンが符号化された後、コンテキストに関連付けられた確率がビンの値を反映するように更新される。
次に、長さnのシーケンスxnをコーディング(即ち、符号化または復号化)することに関する確率モデルのミキシングについて説明する。説明を簡略化するために、2つのモデルを使用する。しかしながら、本開示はそれに限定されず、任意の数のモデルをミキシングすることができる。
シンボルのシーケンスxnの確率p(xn)が与えられると、適切に設計されたバイナリ算術コーディングエンジンなどの良好なエントロピーコーディングエンジンは、確率p(xn)から長さ−log(p(xn))のバイナリ列を生成することができる。列の長さは整数であるため、「長さ−log(p(xn))のバイナリ列」は、−log(p(xn))より大きい最小の整数である長さを有するバイナリ列を意味する。本明細書において、シンボルのシーケンスを指す場合、iの上付き文字は、i個のシンボルの長さを有するシーケンスを指し、iの下付き文字は、シーケンス内の位置iにおけるシンボルを指す。例えば、x5は、11010などの、5個のシンボルのシーケンスを指す。一方、x5は、シーケンス11010の最後の0など、5番目の位置のシンボルを指す。そのため、シーケンスxnは、xn=x1x2・・・xnとして表現することができる。
本明細書で使用される場合、サブシーケンスxiの確率p(xi)などの確率値は、浮動小数点または固定小数点表現のいずれかを有することができる。従って、これらの値に適用される演算では、浮動小数点演算または固定小数点演算のいずれかを使用し得る。
p1(xn)<p2(xn)となるような2つの確率p1(xn)およびp2(xn)が与えられると、確率p1(xn)は、確率p2(xn)より短くない符号語を生成する。即ち、通常、より小さい確率は、より大きい確率よりもより長い符号語を生成する。
ビデオコーディングでシンボルが生成される基礎となる確率モデルは、通常、不明であるか、かつ/または完全に記述するには複雑すぎるか、または非常にコストがかかりそうである。そのため、エントロピーコーディングで使用するための適切なモデルを設計することは、ビデオコーディングでは困難な問題となる。例えば、あるシーケンスでうまく機能するモデルは、別のシーケンスではパフォーマンスが低下する場合がある。即ち、第1のモデルと第2のモデルが与えられた場合、一部のシーケンスは第1のモデルを使用した方が圧縮率が高くなり、他のシーケンスは第2のモデルを使用した方が圧縮率が高くなる。
いくつかのビデオシステムでは、シーケンスを符号化するための最適なモデルをコーディング(即ち、符号化されたビットストリームの信号)することが可能である。例えば、符号化されるシーケンスが与えられると、ビデオシステムは、利用可能なモデルのすべてまたはサブセットに従ってシーケンスを符号化し、最適な圧縮結果が得られるモデルを選択する。即ち、シーケンスに関する1以上のモデルのセットの中から特定のモデルの選択を符号化することができる。このようなシステムでは、最適なモデルを決定するための第1のパスと、最適なモデルを使用して符号化するための第2のパスとの2パスプロセスが、暗黙的または明示的に実行され得る。2パスプロセスは、例えば、リアルタイムアプリケーションやその他の遅延に敏感なアプリケーションでは実行できない場合がある。
上述したように、複数のモデル(即ち、モデル1、…、M)がエントロピーコーディングに関して利用可能となり得る。情報の損失なしにシンボルのシーケンスを圧縮するために、算術コーディングに関して有限数のモデルをミキシングすることは、最適な一つのモデルを漸近的に選択するのと同等に良好なことである。これは、log関数が凹関数であり、−log関数が凸関数であるという事実から得られる。
上記から、長さnの有限シーケンスxn=x1x2・・・xnに関して、不等式(1)は、
のとおりである。
不等式(1)では、wkは、k番目のモデルの重み係数を示し、pk(xn)は、モデルkによって与えられるxnの結合確率を示す。上記したように、確率pk(xn)(即ち、シーケンスxnのモデルkによって与えられる確率)および入力としてのxnが与えられ、エントロピーコーディングエンジンは、xnを−logpk(xn)にほぼ等しい長さのバイナリ符号語にマッピングすることができる。
不等式(1)から、利用可能なモデルに関する確率(即ち、
)の線形(即ち、重み付き)和を取得し、次に線形和の対数を取得することは、常に、モデル1,...,Mの確率(logpk(xn))の対数を取得し、次に同じ重み係数{wk}を使用して線形和を実行することと等しいか、またはそれ以下となることが分かる。即ち、不等式の左辺は、常に不等式の右辺以下である。
また、不等式(1)から、M個のモデルが与えられた場合、シンボルをエントロピーコーディングする前に、モデル1、...Mの確率をミキシングする方がより有利であることが分かる。即ち、エントロピーコーディングの前に、複数のモデルの確率をミキシングする方が、確率に従ってモデルを選択し、各モデルを使用してビットのシーケンスを個別にコーディングするよりも有利であり得る。異なるモデルをミキシングすることは、圧縮パフォーマンスが向上する(即ち、圧縮率が低下する)可能性が高くなり、かつ最適なモデルを選択してコーディングしてから、選択したモデルを使用してシーケンスをコーディングするのと同じである。
確率pk(xn)は、シーケンスxnの結合確率である。結合によるコーディングxnは、処理の大幅な遅延と高計算量を招く可能性があるため、ビデオコーディングにおいて、ミキシングの用途は、仮にあったとしても、限られている。
シーケンスxnの長さi(ここで、1≦i≦n)の任意のサブシーケンスに関して、確率pk(xi)は、モデルk(ここで、k=1,2)を使用して推定されたサブシーケンスの確率を示す。各モデルに対して対応する重み係数wkを使用すると、式(2)を使用して2つのモデルをミキシングすることができる。
式(2)では、p〜(xi)は、サブシーケンスxiのミックス済みの確率である。そのため、ミキシングにより、各サブシーケンスxiに関する部分的な(または中間の)結果を生成することができる。サブシーケンスxiは、xi=x1x2x3...xiである。第1のモデル(即ち、k=1)はサブシーケンス確率p1(xi)を生成し、第2のモデル(即ち、k=2)はサブシーケンス確率p2(xi)を生成する。
一例では、どのモデルが優先されるべきかが事前に分かっていない場合があるので、単純なミキシングを使用することができる。例えば、均一な重み付けを使用することができる。即ち、重み係数wkは、wk=1/2のように選択することができる。そのため、式(2)は、
のように書き換えることができる。
ミックス済みの確率p〜(xi)は、サブシーケンスの確率である。しかしながら、算術コーディングはシンボルごとをベースに実行される(即ち、シンボルのシーケンスでは実行されない)。そのため、ミックス済みの確率p〜(xi)をエントロピーコーディングに直接使用することはできない。このことは、以下で説明するように、ミックス済みの確率p〜(xi)を条件付き確率の積に変換することにより対処することができる。また、ミックス済みの確率p〜(xi)自体が条件付き確率であることに留意されたい。前のシンボルがサブシーケンスxi−1の結果であるとすれば、ミックス済みの確率p〜(xi)は、特定の値を有する位置iにおけるシンボルの確率である。即ち、ミックス済みの確率p〜(xi)は、式(4)で与えられる。
基本的な条件付き確率式P(A│B)=P(A∩B)/P(B)を使用して(ここで、P(A∩B)はイベントAとBの両方の確率である)、式(4)は、式(5)のように書き換えることができる。
サブシーケンスxiは、サブシーケンスxi−1を含み、かつシンボルxiを有しているため、xiおよびxi−1の両方が発生するミックス済みの確率は、xi単独のミックス済みの確率と同じであることに留意されたい。
式(5)は、式(3)を使用して書き換えることができる。即ち、式(5)のサブシーケンスのミックス済みの確率の各々(即ち、分子および分母)は、モデル確率に関して書き換えることができる。式(5)は式(6)のように書き換えることができる。
式(6)の第1の量と第2の量にそれぞれ1(即ち、
それぞれ)に等しい係数を乗算すると、式(7)
が得られる。
式(7)は式(8)のように記述することができる。
i番目のシンボルまでのシーケンスの符号化の結果として、p1(xi│xi−1)およびp2(xi|xi−1)の条件付き確率が利用可能であることは注目に値する。エントロピー符号化は、一度に1つのシンボルを符号化し、すべてのシンボルにより符号語(xiまで、およびxiを含む)に関する確率を生成するため、これらの条件付き確率は利用可能である。本開示による実施形態では、条件付き確率がミキシングされ、その後、ミックス済みの確率(即ち、p〜(xi))を使用してシーケンスが符号化(または復号化)される。
式(8)では、wi,1およびwi,2は、それぞれ
に等しい重みであり、p1(xi│xi−1)およびp2(xi│xi−1)は、それぞれ
に等しい。そのため、ミックス済みの確率p〜(xi)は、第1のモデルの条件付き確率(即ち、p1(xi│xi−1))と第2のモデルの条件付き確率(即ち、p2(xi|xi−1)の線形結合として表され、条件付き確率の各々には、個々の重み係数が乗算される。
式(3)を使用して結合分布がミキシングされる場合、均一な重み係数(即ち、1/2)が使用された。しかしながら、(式(8)のように)条件付き確率がミキシングされて使用される場合、重み付け(即ち、第1のモデルに関するwi,1および第2のモデルに関するwi,2)は均一でなくなり得る。第1のモデルの条件付き確率に関する重みwi,1は、第1のモデルによって与えられるxi−1の結合確率を、第1のモデルによって与えられたxi−1の結合確率xi−1と第2のモデルによって与えられた結合確率xi−1との和で除算したものに等しい。重みwi,2についても同様に、式(8)において、サブシーケンスxi−1に関して、第1のモデルは第1の確率を提供し、第2のモデルは第2の確率を提供し、xi−1が与えられたときのxiの条件付き確率に関する重み係数は、第1のモデル及び第2のモデルの各々が与えられたときの確率を、両方のモデルが与えられたときの結合確率の和で除算したものに等しい。即ち、条件付き確率のミキシングにおいて、例えば、第1のモデルがサブシーケンスxi−1に関してより高い確率を提供する場合、第1のモデルは、第2のモデルよりもより高い重み係数(即ち、重みwi,1)を有することになる。
結合確率は、実数であり、重みwi,1およびwi,2の計算は、実数の除算を含む。このため、重みwi,1およびwi,2の計算は、複雑で費用がかかり得る。重みwi,1およびwi,2を固定小数点表現で近似することは、例えば、重みの各々を表す正確なビット数を知ることができ、かつ除算演算を回避できるようにすることが望ましい。
上述したように、符号語の確率と、確率を使用して生成される符号語のビット単位の長さとの間には、相関関係および/または関係が存在する。即ち、符号語長(即ち、ビット数)は、−log2(p)によって与えられる。各モデルによって生成された符号語長lk(xi−1)を使用して、重みwi,1およびwi,2を近似することができる。即ち、−log(pk(x(i−1))は、xi−1を符号化するためにモデルk(k=1,2)を使用した結果生じるビット単位の符号語長lk(xi−1)によって近似することができる。そのため、重みwi,1(および重みwi,2に関して)は、式(9)を使用して近似することができる。
l2(i−1)がl1(i−1)に等しい場合、wi,1=wi,2=0.5となる。一般性を失うことなく、l1(i−1)がl2(i−1)よりも小さいと仮定すると、分母を展開し、分母および分子から
を削除することにより、式(9)が得られる。
長さiのサブシーケンスのモデルkに従って長さlk(xi)を決定するために、仮想的符号化プロセスを使用することができる。仮想的符号化プロセスは、コーディングステップを実行するが、実際の符号語または符号化されたビットストリームへの出力ビットを生成しないプロセスである。目的はlk(xi)を推定することであり、これは、いくつかのアプリケーションでは、ビットレート(または単純にレート)として解釈されるため、仮想的符号化プロセスは、レート推定プロセスと見なされるか、またはレート推定プロセスと呼ばれる。確率モデルを使用した仮想的符号化プロセスは、シーケンスに関する符号語長を計算または推定する。符号語長は、符号語の生成の有無にかかわらず決定(即ち、測定)され得る。例えば、時間インスタンスiで、第1のモデルを使用してシーケンスxi−1をコーディングすることにより、長さl1(i−1)の符号語が生成され、第2のモデルを使用して長さl2(i−1)の符号語が生成される。一例では、複数の仮想的符号化器が使用可能であり、並行して実行できる。例えば、算術符号化器の標準レート推定器を各モデルに対して使用可能とすることができる。各レート推定器は、モデルが与えられたサブシーケンスに対して符号化器によって生成され得る符号語長の推定値を提供することができる(または提供するために使用することができる)。
時間インスタンスiにおいて2つの競合するモデルがあると仮定して、第1のモデルが第2のモデルよりも少ないビットを提供する場合、第1のモデルに(式9を使用して)割り当てられた重みは、位置xi−1のシンボルまでのシーケンスに関して第2のモデルに割り当てられた重みよりも大きくなる。最終的に(即ち、ミックス済みの確率を使用してシーケンスxnの符号化が完了したとき)、獲得モデル(即ち、重みが大きいモデル)は、より少ないビットを生成するモデルであり、これは、所望の圧縮結果である。
重みwi,1は、2の累乗を使用して(式(9)で)近似され、このため、効率的に計算することができる。
重みwi,1をさらに簡素化することができる。式(9)の右辺は、1/(1−r)の形式であり、ここで、
である。これは、共通の比率
を用いて1+r+r2+・・・で与えられる幾何級数として認識することができる。そのため、重みwi,1は、式(10)を使用して近似することができる。
そのため、式(8)のwi,1*p1(xi│x(i−1))を式(11)のように書き換えることができる。
式(11)において、
は、p1(xi|xi−1)が固定小数点表現である場合に、シフトを使用して効率的に計算することができる。さらに、p1(xi|xi−1)が固定小数点表現である場合、式(11)における無限の合計は、有限数の項の合計に切り捨てることができる。例えば、p1(xi|xi−1)が8ビット表現である場合、任意のj≧8に関して、l1(xi−1)−l2(xi−1)≦−1の場合(即ち、それらが少なくとも1ビット異なる場合)、
であるため、合計を切り捨てて、最初の8個の項
のみを残すことができる。l1(xi−1)−l2(xi−1)<−1の場合(即ち、それらが2ビット以上異なる場合)、任意のj≧j*(ここで、j*<8)に関して、
である。このため、wi,1p1(xi│xi−1)を計算するには最初のj*項のみが必要である。
重みwi,2は、式(12)を使用して計算することができる。
式(8)の量wi,2*p2(xi|xi−1)は、式(13)を使用して計算することができる。
式(11)にあるように、式(13)の右辺は、p2(xi|xi−1)が固定小数点表現である場合、無限合計を有限合計に切り捨てることによって簡略化することができる。
上記のように、モデルの結合確率のミキシングは、どのモデルがより良好な圧縮を提供するかは事前に分からない場合があるため、単純な均一ミキシングを使用することができる。結合確率の均一ミキシングでは、条件付き確率を使用して、結果的に獲得モデル(即ち、より高い重みを有するモデル)が選択される。
図9は、本開示の実施形態に従ってシンボルのシーケンスを符号化するプロセス900のフローチャート図である。プロセス900は、サイズnのシンボルのシーケンスを受信することができる。シーケンスはxnで表すことができる。「受信する」とは、生成、決定、または何らかの方法による受信を意味することができる。一例では、シンボルのシーケンスは、図4の量子化ステージ406からエントロピー符号化ステージ408において受信されたものなどの量子化された変換係数を表すことができる。一例では、シンボルのシーケンスは、図7で説明したトークンなどのトークンとすることができる。一例では、シンボルのシーケンスは、図8に関して説明したバイナリ化値などのバイナリ化値とすることができる。シンボルのシーケンスは、確率モデルに基づいて符号化されたシンボルのシーケンスとすることができる。
プロセス900は、図4の符号化器400などの符号化器で実施することができる。プロセス900は、例えば、送信局102などのコンピューティングデバイスによって実行することができるソフトウェアプログラムとして実施することができる。ソフトウェアプログラムは、メモリ204または二次ストレージ214などのメモリに格納された機械可読命令であって、CPU202のようなプロセッサにより実行されて、コンピューティングデバイスにプロセス600を実行させる機械可読命令を含むことができる。少なくともいくつかの実施形態では、プロセス900は、図4の符号化器400のエントロピー符号化ステージ408によって全体的または部分的に実行される。
プロセス900は、少なくとも2つの確率モデルを使用して、シンボルのシーケンスxnを符号化する。プロセス900は、任意の数の確率モデルを使用することができる。しかしながら、単純化のために、2つのモデル(即ち、第1のモデルおよび第2のモデル)のみがプロセス900を説明するために使用される。プロセス900は、第1のモデルおよび第2のモデルの確率をミキシングすることにより、シンボルのシーケンスの各シンボルを符号化する。
902において、プロセス900は、カウンタiを0に初期化し、第1のサブシーケンス長(即ち、第1の長さl1)を0に初期化し、第2のサブシーケンス長(即ち、第2の長さl2)を0に初期化する。カウンタiは、シーケンスxnの各シンボルに関して使用される。第1の長さl1および第2の長さl2は上記の通りである。即ち、第1の長さl1および第2の長さl2は、算術コーディングエンジンによって第1のモデルおよび第2のモデルを使用して生成された符号語長にそれぞれ対応することができる。
904において、プロセス900は、上記したように条件付き確率p1(xi│xi−1)およびp2(xi|xi−1)を決定する。条件付き確率p1(xi│xi−1)は、サブシーケンスxi−1(即ち、シンボルxiまで、かつシンボルxiを除くサブシーケンス)の確率が与えられたときに、シンボルのシーケンスの位置iにおけるシンボルの条件付き確率である。p2(xi|xi−1)に関しても同様である。
906において、プロセス900は、シンボルxiに関するミックス済みの確率p〜(xi│xi−1)を計算する。プロセス900は、上記の式(4)で説明したミックス済みの確率を決定することができる。プロセス900は、式8、11、および13を使用してミックス済みの確率を計算することができる。908において、プロセス900は、計算されたミックス済みの条件付き確率を使用してシンボルxiを符号化する。
910において、プロセス900は、第1の長さl1および第2の長さl2を更新する。上記したように、910において仮想的算術符号化器を使用することができる。第1の長さl1は、シンボルxiを符号化するときに、第1のモデルによって追加された仮想的符号語に追加された追加の符号語長(即ちビット)を含むように更新される。第2の長さl2は、シンボルxiを符号化するときに、第2のモデルによって追加された仮想的符号語に追加された追加の符号語長(即ち、ビット)を含むように更新される。プロセス900は、l1=l1−log(p1(xi|xi−1))およびl2=l2−log(p2(xi|xi−1))をそれぞれ使用して、第1の長さl1および第2の長さl2を更新する。実施形態では、ルックアップテーブルを使用して値−log(p1(xi|xi−1))および−log(p2(xi|xi−1))を計算および/または近似することができる。確率p1(xi│xi−1)およびp2(xi|xi−1)は、ゼロ(0)と1との間の確率であることに留意されたい。p1(xi│xi−1)およびp2(xi|xi−1)がそれぞれ8ビット整数を使用して表現および/または近似される場合(例えば、固定小数点表現である場合)、−log(p1(xi|xi−1))および−log(p2(xi|xi−1))の両方とも、8ビット整数を入力として取り入れるルックアップテーブルを使用して推定することができる。ここで、各入力は、確率値に対応している。一般に、ルックアップテーブルのサイズは、p1(xi│xi−1)およびp2(xi|xi−1)の固定小数点表現の幅に依存する。即ち、幅が大きいほど、−log(p1(xi|xi−1))および−log(p2(xi|xi−1))の推定の精度が高くなる。
912において、次のシンボルxi+1が処理されるように、カウンタiがインクリメントされる。914において、すべてのシンボルが処理された場合(即ち、i=n+1)、プロセスは終了する。それ以外の場合、プロセスは904に戻り、次のシンボルを処理する。
図10は、本開示の実施形態によるシンボルのシーケンスを復号化するためのプロセス1000のフローチャート図である。プロセス1000は、復号化器500などの復号化器において実施することができる。プロセス1000は、受信局によって実施することができる。プロセス900は、例えば、コンピューティングデバイスによって実行することができるソフトウェアプログラムとして実施することができる。ソフトウェアプログラムは、メモリ204または二次ストレージ214などのメモリに格納された機械可読命令であって、CPU202のようなプロセッサにより実行されて、コンピューティングデバイスにプロセス600を実行させる機械可読命令を含むことができる。プロセス900は、特殊なハードウェアまたはファームウェアを使用して実施することができる。いくつかのコンピューティングデバイスは、複数のメモリ、複数のプロセッサ、またはその両方を有することができる。プロセス1000のステップまたは動作は、異なるプロセッサ、メモリ、またはその両方を使用して分散させることができる。本明細書で単数の「プロセッサ」または「メモリ」という用語の使用は、記載されたステップのいくつかまたは全ての実行に使用することができる1つのプロセッサまたは1つのメモリのみを有するコンピューティングデバイスのみならず、複数のプロセッサまたは複数のメモリを有するデバイスを包含する。
プロセス1000は、符号化されたビットストリームからシンボルのシーケンスを復号化するために使用することができる。例えば、プロセス1000は、図5の圧縮ビットストリーム420などの符号化ビットストリームを受信することができる。プロセス1000は、プロセス900のようにステップ902〜906および910〜914と同様のステップを含むことができる。同様のステップの説明は省略する。ステップ908の代わりに、プロセス1000はステップ1002を含む。ステップ1002において、プロセス1000は、計算されたミックス済みの条件付き確率(即ち、p〜(xi│xi−1))を使用して、符号化されたビットストリームからシンボルxiを復号化する。
プロセス900または1000のいくつかの実施形態では、ステップ906は、計算量をさらに節約(例えば、低減)するため、またはスループットを向上するために、すべてのk>1のステップで実行され得る。スループットは、1クロックサイクルで処理(符号化または復号化)されるシンボル数で測定することができる。例えば、k=2の場合、ステップ906は、iが奇数または偶数の場合にのみ実行され、両方では実行されない。プロセス900または1000の別の実施形態では、ステップ906は、iのすべての可能性のあるインデックスの所定のサブセットで実行され得る。
上記では、モデルの均一な重み付けの使用について説明した。しかしながら、本開示による実施形態は、不均一な事前の重みを使用することができる。M個のモデルを使用した不均一な重み付けでは、少なくともいくつかの重みwkを、1/Mとは等しくない(即ち、wk≠1/M)値に設定することができる。
説明を簡単にするために、前述の(例えば、プロセス900および1000)では、2つのモデル(第1のモデルおよび第2のモデル)の使用について説明している。しかしながら、本開示による実施形態は、任意の数のモデルに拡張することができる。例えば、モデルMの数M≧2に関して、均一な重み係数(即ち、wk=1/M)を仮定すると、重みwkを、式(14)を使用して近似することができる。
式14では、lk(xi−1)は、サブシーケンスxi−1を符号化するためにモデルk(1≦k≦M)を使用して結果的に生じるビット単位の符号語長を示す。
3つ以上のモデルがミキシングされる場合、バイナリツリーを使用して、条件付き確率を計算(即ち、決定、生成他)することができる。即ち、式(8)の係数wi,kpk(xi|xi−1)は、上記のプロセスを使用して再帰的に計算することができる。再帰的計算手段は、2つのモデルの確率を一度に結合して、中間条件付き確率を生成することを意味する。次に、中間条件付き確率が一度に2つずつ結合される。モデルMの数が2のべき乗(即ち、M=2m)である場合、式(8)の係数wi,kpk(xi|xi−1)は、図11に関して説明したような完全なバイナリツリー上で上記のプロセスを適用することによって再帰的に計算することができる。
図11は、本開示の実施形態による条件付き確率のバイナリツリー1100の一例の図である。バイナリツリー1100では、8つのモデルがミキシングされる。8つのモデルの確率は、p_1からp_8である。各2つの確率が、最初にミキシングされる。例えば、確率1102と1104が上記のようにミキシングされて中間条件付き確率1106が生成され、中間条件付き確率1106が中間条件付き確率1108と結合されて中間条件付き確率1110が生成され、これが、最終的な条件付き確率1112が計算されるまで続く。最終的な条件付き確率1112は、符号化および/または復号化に使用することができる。例えば、最終的な条件付き確率1112は、プロセス900の908および/またはプロセス1000の1002において使用することができる。
図11に関して説明したプロセスは、例えば、一部のモデルが他のモデルよりも有用であることが分かっている状況で使用することができる。一部のモデルが他のモデルよりも有用であることが分かっている場合、均一な重み付けは望ましくない場合がある。1つのモデルにより多くの重みを割り当てるために、モデルをツリーにおいて複製することができる。
一例として図11を参照すると、モデルp_1〜p_6とp_8は別個であり、p_6は他のモデルよりも有用であることが既知であり得る。p_6の方がより有用であるので、p_6はツリーにおいて複製することができ、p_7はp_6の複製である。そのため、確率p_6のモデルは、エントロピー符号化のミキシングで重みが2回割り当てられる。
別の例として、例えば、モデルAとモデルBの2つのモデルがあり、2つのモデルの事前の重みが(1/4,3/4)であるとする。本開示による実施形態では、モデルのセットを4つのモデルのセットに拡張することができ、第1のモデルはモデルAに対応し、残りの3つのモデルはモデルBに対応し、4つのモデルに関して事前は、(1/4,1/4,1/4,1/4)である。
前述では、固定ソースについて説明した。固定ソースは、シンボルxiに関するミキシングがwi,kを決定するためにサブシーケンスxi−1のすべての履歴を使用することを意味する。そのため、統計はコーディングプロセスのソースに亘って変化しない。しかしながら、ソースが非固定であり得る場合、本開示による実施形態は、スライディングウィンドウを使用して、より良好な圧縮パフォーマンスに関して局所統計に適応することができる。前のビットの数を示すビットの長さLとしてのスライディングウィンドウ(即ち、前のビットの数の確率)が、ミキシングプロセスで使用される。即ち、スライディングウィンドウは、シーケンスにどの程度戻って記憶するかを表し、スライディングウィンドウ内のシンボルのみが、重み係数の推定に使用される。より具体的には、スライディングウィンドウ内のこれらのシンボルの確率のみが、重み係数の推定に使用される。
そのため、xiの符号化にp〜(xi|xi−1)を使用する代わりに、p〜(xi|xi−L・・・xi−1)(個々で、長さL≧1)は、スライディングウィンドウの長さであり、ここで、xi−L・・・xi−1は、ビットi−Lから始まりビットi−1で終わるサブシーケンスである。長さLが分かっている場合、本開示によるプロセスは、2つのモデルに関して以下のステップを実行することができる。
ステップ1において、i=1、l1=0,l2=0を初期化する。ステップ1は、図9の902に関して説明したとおりとすることができる。ステップ1では、プロセスも、l1,−L=0およびl2,−L=0を初期化する。
ステップ2において、プロセスは、第1のモデルと第2のモデルに従ってp1(xi|xi−L・・・xi−1)およびp2(xi|xi−L・・・xi−1)を計算する。
ステップ3において、プロセスは式15および16に従ってミックス済みの確率を計算する。
ステップ4において、プロセスはp〜(xi|xi−L・・・xi−1)を使用してxiを符号化(符号化器によって実施される場合)または復号化(復号化器によって実施される場合)する。
ステップ5において、プロセスはl1をl1=l1−logp1(xi│xi−L・・・xi−1)に更新し、l2をl2=l2−logp2(xi│xi−L・・・xi−1)に更新する。プロセスがウィンドウ外で符号化/復号化している場合(即ち、i>L)、プロセスはl1,−L=l1,−L−logp1(xi−L|xi−2L・・・xi−L−1)およびl2,−L=l2,−L−logp2(xi−L|xi−2L・・・xi−L−1)に更新する。
ステップ6において、iを1だけ増加する(i=i+1)。
ステップ7において、プロセスはシーケンスxnのすべてのビットが処理されるまで(即ち、i=n+1)、ステップ2〜6を繰り返す。
上記のスライディングウィンドウにおいて、l1(xi−1)−l1(xi−L−1)=l1−l1,−Lであり、l2(xi−1)−l2(xi−L−1)=l2−l2,−Lである。そのため、l1(xi−1)−l1(xi−L−1)は、xi−L…xi−1を符号化するために第1のモデルを使用することにより生成される符号語長と見なすことができ、l2(xi−1)−l2(xi−L−1)は、xi−L…xi−1を符号化するために第2のモデルを使用することにより生成される符号語長と見なすことができる。
図12は、本開示の実施形態に従ってシンボルのシーケンスをエントロピーコーディングするためのプロセス1200のフローチャート図である。シーケンスは、シーケンスxnに関して前述したとおりである。プロセス1200は、符号化器または復号化器によって実施することができる。符号化器によって実施される場合、「コーディング」は、図4の圧縮ビットストリーム420などの符号化されたビットストリームにおける符号化を意味する。復号化器によって実施される場合、「コーディング」とは、図5の圧縮ビットストリーム420などの符号化されたビットストリームからの復号化を意味する。
符号化器によって符号化される場合、プロセス1200は、図4の量子化ステージ406などの量子化ステップからシンボルのシーケンスを受信することができる。別の例では、プロセス1200は、符号化されるべき値(例えば、量子化された変換係数)を受信し、受信された値からシンボルのシーケンスを生成することができる。
1202において、プロセス1200は、ミキシングされるべきモデルを選択する。モデルは、第1のモデルおよび第2のモデルを含むことができる。本開示で使用される「選択」とは、あらゆる方法での識別、構築、決定、指定、またはその他の選択を行うことを意味する。
少なくともシンボル(例えば、xi)に関して、シンボルの位置(例えば、i)において、プロセス1200は、ステップ1204〜1208を含むステップを実行して、第1のモデルおよび第2のモデルを使用してミックス済みの確率を決定する。ステップ1204〜1208は、シンボルのシーケンスのすべてのシンボルに対して実行することができる。
1204において、プロセス1200は、第1のモデルを使用して、シンボルを符号化するための第1の条件付き確率を決定する。第1の条件付き確率は、シーケンスのサブシーケンスが与えられたときのシンボルの条件付き確率である。一例では、シーケンスのサブシーケンスは、サブシーケンスxi−1を意味する。別の例では、スライディングウィンドウが使用され、シーケンスのサブシーケンスは、位置の前のシーケンスの所定数のシンボルで構成されている。所定の数のシンボルは、スライディングウィンドウの長さLに関して説明したとおりのものとすることができる。そのため、シーケンスのサブシーケンスは、サブシーケンスxi−L・・・xi−1とすることができる。1206において、プロセス1200は、第2のモデルを使用して、シンボルを符号化するための第2の条件付き確率を決定する。第2の条件付き確率は、1204に関して説明したように、サブシーケンスが与えられたときのシンボルの条件付き確率である。
1208において、プロセス1200は、第1の条件付き確率および第2の条件付き確率を使用して、シンボルを符号化するためのミックス済みの確率を決定する。ミックス済みの確率は、図9の906に関して説明されたものとすることができる。第1の条件付き確率および第2の条件付き確率は、第1の重みおよび第2の重みを使用する線形結合を使用して結合することができる。一実施形態では、少なくとも第1の重みは、シンボルまでのシーケンスのサブシーケンスを符号化するための長さを決定するための仮想的算術コーディングを使用して決定(即ち、近似)することができる。第1の重みは、長さを使用して決定することができる。一例では、重み(例えば、第1の重みおよび/または第2の重み)を決定することは、シンボルまでのシーケンスのサブシーケンスを符号化することから生じるレートを決定すること、決定されたレートを使用して第1の重みを決定することを含むことができる。一例では、レートはレート推定器を使用して決定することができる。一例では、レート推定器は仮想的算術符号化器とすることができる。一例では、レートを決定することは、入力を確率値として用いてテーブル(例えば、ルックアップテーブル)を検索することを含むことができる。
1210において、プロセス1200は、例えば、908(符号化器によって実施される場合)および1002(復号化器によって実施される場合)に関して説明したように、ミックス済みの確率を使用してシンボルをコーディングする。
プロセス1200の実施形態では、モデルは第3のモデルと第4のモデルを含むことができ、第1のモデルと第2のモデルを使用してミックス済みの確率を決定することは、第1のモデルと第2のモデルをミキシングして第1の中間条件付き確率を生成すること、第3のモデルと第4のモデルをミキシングして第2の中間条件付き確率を生成すること、第1の中間条件付き確率と第2の中間条件付き確率をミキシングしてシンボルの符号化に使用される条件付き確率を生成することを含むことができる。一実施形態では、第1のモデルおよび第4のモデルは、同じモデルである。
コンテキストツリー重み付け(CTW:context−tree weighting)として知られる手法は、ミキシングを使用するロスレスデータ圧縮アルゴリズムである。長さnのバイナリシーケンスxnを符号化するために、CTWは、2K確率関数pi(xn)の線形混合として確率関数p(xn)を推定し、その各々は、有限メモリバイナリツリーソースを仮定することにより推定され、かつ同じ重み係数を有する。対照的に、本開示による実施形態は、どのモデルでも機能することができる。さらに、本明細書で説明するシンボルごとの重み係数の計算は、長さ関数を使用して、サブシーケンスの確率を近似することができ、これは、結合確率を維持および計算する既存のソリューションと比較して非常に単純化される。
上記のように、コンテキストモデリングの主要な設計上の課題または問題は、1)より多くのコンテキストを追加することによって圧縮パフォーマンスを向上させること、および2)コンテキストに関連するオーバーヘッドコストを低減すること、という2つの相反する目的の間でバランスを取ることである。
非限定的な例示として係数トークンツリー700を使用して、コーディングシステムにおけるコンテキストの数の影響、およびコンテキストの数とコーディングパフォーマンスとの間の関係の数学的分析がここで与えられる。
コンテキストcに関して、Pc=(pc,0,...,pc,11)がコンテキストから取得した確率分布を示すものとする。ここで、pc,iは、トークンi、i=0、...、10に関する(即ち、表Iにリストされているトークン)の確率を示し、pc,11は、EOB_TOKENの確率を示す。便宜上、EOB_TOKENはトークン11として参照される。ここで、フレーム内にコンテキストcが出現し、nc回使用されるとする。コンテキストは、例えば、コンテキストに関連付けられた条件が満たされた場合、および/またはフレームで利用可能な場合に「出現する(appears)」。例えば、コンテキストに関連付けられた確率分布がフレームの少なくとも1つのブロックのコーディングで使用される場合、コンテキストは「使用」される。Qc=(qc,0,...,qc,11)がコンテキストcの下での係数トークンの経験的(即ち、観測された)分布を示すものとする。即ち、qc,iが、トークンiがコンテキストcの下でフレームに出現する回数を示し、かつqc,i=nc,i/ncによって与えられる(即ち、トークンiがコンテキストcの下でフレームに出現した回数をコンテキストcが出現した回数で除算したもの)。確率分布PcおよびQcは、トークンのコーディングに使用されるコーディング分布および実際の分布としてそれぞれ参照される。
コーディング分布Pcが与えられると、算術コーディングを使用して達成可能な圧縮パフォーマンスは、
によって与えられる。実際の分布Qc、qc,i=nc,i/nc、および対数法則log(分数)=log(分子)−log(分母)を使用して、達成可能な圧縮パフォーマンスは、式(17)のように低減することができる。
式(17)の右辺の第1の項
は、実際の分布QcのエントロピーΗ(Qc)として認識することができる。式(1)の右辺の第2の項
は、同じアルファベット(例えば、係数トークンツリー700のトークン)で定義された、分布PcとQcとの間の相対エントロピーまたはカルバックライブラー(KL:Kullback−Leibler)発散として認識することができる。KL発散は、D(Qc||Pc)として示すことができる。そのため、算術コーディングを使用して達成可能な圧縮パフォーマンスは、式(18)を使用して書き換えることができる。
第2の項(即ち、D(QC||PC))は、最適な確率分布(即ち、実際の分布Qc)を使用する代わりに、最適性の低い別の確率分布(即ち、コーディング分布Pc)を使用した場合に生じる圧縮パフォーマンスの損失を示す。実際の確率分布とコーディング確率分布との間に差異がある場合、圧縮パフォーマンスの損失が生じる。損失は、符号化されるシーケンスの長さに比例して増加する。
式(18)は、圧縮アルゴリズムを設計するためのベースとして使用することができる。即ち、圧縮アルゴリズムは式(18)を使用して分析される。コンテキストモデリングの設計は、圧縮パフォーマンスに直接敵に影響する。そのため、コンテキストモデリングの優れた設計(即ち、コンテキストの最適な選択)は、良好な圧縮アルゴリズムをもたらす。最適なコンテキストモデリングでは、第1の項Η(Qc)と第2の項D(Qc||Pc)が最小化される。
式(18)(即ち、ncΗ(Qc)およびncD(Qc||Pc))の両方の項は、コンテキストcが出現する回数ncに伴って線形に増加する。エントロピーコーディングの圧縮パフォーマンスを向上させるためには、式(18)の2つの項Η(Qc)およびD(Qc||Pc)をできるだけ小さくすべきであることを理解することができる。
第2の項D(Qc||Pc)は、常に、非負の値であり、D(Qc||Pc)=0であるため、実際の分布とコーディング分布が等しい(即ちQc≡Pc)場合にのみ、第1の項(即ち、ncΗ(Qc))は圧縮アルゴリズムの理論上の絶対下限である。別の言い方をすれば、確率分布Qcを持つシーケンスncが与えられると、可能な限り最良の圧縮がncΗ(Qc)により与えられ、他の確率分布はより良好な圧縮を提供することができない。
従って、良好な圧縮パフォーマンスを達成するために、コーディング分布Pcが実際の分布Qcに可能な限り近いことが望ましい。同じコンテキストの場合、実際の分布はフレームごとに変化する。そのため、コーディング分布Pcは、復号化される特定のフレームの実際の分布Qcに適合させる必要がある。フレームはまだ復号化されていないため、復号化器はコーディング分布Pcを調整する方法を知ることができない。
代わりに、調整されたコーディング分布Pcを符号化器で通知することができる。例えば、符号化器は、復号化されるフレームのフレームヘッダーに調整されたコーディング分布Pcを符号化することができる。調整されたコーディング分布Pcを符号化することは、符号化器がコーディング分布Pcのトークン確率pc,iを符号化することを意味する。
トークン確率pc,iを符号化するビット単位(より正確には、部分ビット単位)のコストが、ビットコストε>0によって下限になっているものとする。即ち、ビットコストεは、トークン確率pc,iを符号化するために必要なビットの最小数である。
コンテキストcの場合、表IとEOB_TOKENの12個のトークンの確率を含むコーディング分布Pcのコーディングのフレーム全体で償却された合計ビットコストは、11ε/ncで与えられる。合計ビットコストは、ncに対して反比例し、アルファベットサイズ(例えば、トークンの数)に比例して増加する。コーディング分布Pcは確率分布(即ち、
)であるため、その自由度はアルファベットサイズ(例えば、12個のトークン)から1を減算したものに等しい。従って、ビットコスト11ε/ncにおける12個(トークンの数に対応)ではなく、11個である。
Cは、変換係数コーディングで使用されるすべてのコンテキストのセットを示すものとする。セットCのコンテキストcに関するコーディング確率分布を復号化器に送信するために(復号化器は、例えば図7の係数トークンツリー700のノードに対応するトークンを復号化するために使用することができる)、係数トークンツリー700の各トークンおよびEOB_TOKENは符号化され得る。12個のトークンがあるため、フレーム全体で償却される、セットCのコンテキストから取得されたコーディング確率分布の合計ビットコストは、式(19)で与えられる。
式(19)において、|C|はセットCのカーディナリティー(cardinality)であり、nはフレーム内のトークンの数である。式(19)は、追加の各コンテキストが、トークンごとに少なくとも11ε/nビットの正規化コストを追加することができることを示している。式(19)の右辺表現は、コンテキストの数(即ち、セットCのサイズ)に比例して増加する。従って、コンテキストの数を減らす(即ち、セットCをより小さくする)と、オーバーヘッドを低減することができる。しかしながら、すべてのコンテキストに関して、11個の確率が符号化されるということに変わりはない。11は、トークンの数(12)から1を減算したものに対応する。以下で説明するように、エントロピーコーディングに対して選択的ミキシングを使用することにより、一部のコンテキストに関して符号化される確率の数を低減することができる。例えば、係数トークンツリー700が与えられた場合、11個の確率を符号化する代わりに、11個未満がコーディングされ、それによりフレームヘッダーにおけるコーディング分布に関連するオーバーヘッドビットが低減される。
前述したように、コンテキストの数を低減する(即ち、セットCをより小さくする)と、オーバーヘッドを低減することができる。しかしながら、式(18)の第1の項、即ちエントロピーΗ(Qc)の分析は、コンテキストの数を減らすことは望ましくないことを示している。
エントロピーΗ(Qc)は、凹関数である。これは、不等式(20)で与えられるように、2つの分布MおよびM’の線形結合をとると、2つの分布MおよびM’の線形結合のエントロピー(即ち、不等式の左辺)は、個々の分布のエントロピーの線形和(即ち、不等式の右側)以上であることを意味する。2つの分布MとM’が異なる場合、不等式(20)は厳密な不等式になる。
不等式(20)が与えられると、式(18)の第1の項を最小化するために、個別の分布の数を増加させることが望ましく、これは、個別のコンテキストの数を増加させることを意味すると結論付けることができる。これは、コンテキストの数を増加することにより、不等式(20)の左辺を右辺に分解することができるためである。分解により、全体的な圧縮パフォーマンスを向上させることができる。
要約すると、圧縮パフォーマンスを向上させるために、式(18)および式(19)の第2の項の分析により、コンテキストの数を低減することが望ましいという結論に至る。一方、式(18)および不等式(20)の第1の項の分析により、圧縮パフォーマンスを向上させるためにコンテキストの数を増加することが望ましいという結論に至る。以下で説明するように、エントロピーコーディングに関して選択的ミキシングを使用することにより、コンテキストの数を増加させることができ、すべての追加コンテキストに関連するオーバーヘッドを低減または制限することができる。例えば、図7の係数トークンツリー700を参照すると、コンテキストを追加することは、11個の確率値を追加することにはならない。
次の観察が可能である。
1)変換係数のコーディングでは、コンテキストcが決定されると、コンテキストcに関連付けられたコーディング分布Pcが、変換係数に関するトークンをコーディングするために使用される。
2)式(19)における11個の乗法係数は、係数トークンのアルファベットのサイズから1を減算したものに等しい。
3)コンテキストcが2つの別個のコンテキストc0およびc1に分割される場合、コンテキストc0が出現する回数とコンテキストc1が出現する回数は、コンテキストcが出現する回数に等しい(即ち、nc=nc0+nc1)。
4)コンテキストcが2つの異なるコンテキストc0およびc1に分割される場合、対応する実際の分布Qc0およびQc1は十分に異なる必要がある。
5)与えられたコンテキストcに関して、すべてのiに対して、コンテキストcの下でフレームにトークンiが出現する回数nc,iは、確率推定で十分な精度を確保するために十分に大きくなければならない。
一部のインデックスでのみ異なるが、他のインデックスで類似または同じである2つの分布Qc0およびQc1が与えられると、本開示による実施形態は、コンテキストcを、Qc0およびQc1が異なるトークンインデックスについてのみ、例えば、2つのコンテキストc0およびc1に分割することができる。換言すれば、導入される各新たなコンテキストは、11ε/ncよりも低コストである。例えば、コンテキストが4個のトークンに適している場合、コストは、3ε/ncとなる。
図13は、本開示の実施形態に従って、変換係数トークンのアルファベットを使用して変換係数をコーディングするプロセス1300のフローチャート図である。プロセス1300は、2つ以上の確率分布を使用して、現在の変換係数をコーディング(即ち、符号化または復号化)する。プロセス1300は、現在の変換係数を示すトークンをコーディングすることができる。トークンは、図7の係数トークンツリー700などの係数ツリーを使用して決定または選択することができる。そのため、アルファベットは、係数ツリーのリーフノード(即ち、トークン)を含む。
プロセス1300は、スキャン順序に従って変換ブロックの係数をコーディングするプロセスによって、またはそれと組み合わせて使用することができる。現在の変換係数は、スキャン順序におけるスキャン位置iにあり、かつ変換ブロックにおける係数位置(ri、ci)にある。
プロセス1300は、第1のコンテキストに対応する第1の確率分布を選択し、第2のコンテキストに対応する第2の確率分布を選択し、いくつかの変換係数トークンに関して、第1および第2の確率分布をミキシングして、いくつかの変換係数トークンの変換係数トークンをコーディングするためのミックス済みの確率を生成する。
プロセス1300は、図4の符号化器400などの符号化器で実施することができる。プロセス1300は、例えば、送信局102などのコンピューティングデバイスによって実行され得るソフトウェアプログラムとして実施され得る。ソフトウェアプログラムは、メモリ204または二次ストレージ214などのメモリに格納された機械可読命令であって、CPU202のようなプロセッサにより実行されて、コンピューティングデバイスにプロセス1300を実行させる機械可読命令を含むことができる。少なくともいくつかの実施形態では、プロセス1300は、図4の符号化器400のエントロピー符号化ステージ408によって全体的または部分的に実行される。
プロセス1300は、図5の復号化器500などの復号化器において実施することができる。プロセス1300は、例えば、受信局106などのコンピューティングデバイスによって実行することができるソフトウェアプログラムとして実施され得る。ソフトウェアプログラムは、メモリ204または二次ストレージ214などのメモリに格納された機械可読命令であって、CPU202のようなプロセッサにより実行されて、コンピューティングデバイスにプロセス1300を実行させる機械可読命令を含むことができる。少なくともいくつかの実施形態では、プロセス1300は、図5の復号化器500のエントロピー復号化ステージ502によって全体的または部分的に実行される。
プロセス1300が符号化器によって実施される場合、「コーディング」は、図4の圧縮ビットストリーム420などの符号化されたビットストリームにおける符号化を意味する。復号化器によって実施される場合、「コーディング」とは、図5の圧縮ビットストリーム420などの符号化されたビットストリームからの復号化を意味する。
1302において、プロセス1300は、第1の確率分布を選択する。本開示で使用される「選択」とは、あらゆる方法での取得、識別、構築、決定、指定、またはその他の選択を行うことを意味する。
一例では、プロセス1300は、最初に第1のコンテキストを導出し、第1のコンテキストに対応する第1の確率分布を選択することができる。例えば、コンテキストは、変換ブロックサイズ、変換ブロック形状(例えば、正方形または長方形)、色成分またはプレーンタイプ(即ち、輝度または色度)、現在の変換係数のスキャン位置i、および以前にコーディングされたトークンのうちの1つまたは複数を使用して導出することができる。例えば、図6のスキャン順序602の場合、以前にコーディングされた係数は、現在の変換係数の左方隣接係数および上部隣接係数とすることができる。他の情報を使用して、第1のコンテキストを導出することができる。
一例では、第1の確率分布は、アルファベットのすべてのトークンに亘って定義することができる。即ち、確率分布は、アルファベットのトークンの各々に関する確率値を含む。係数トークンツリー700のトークンを使用して、アルファベットセットEが係数トークンのアルファベットを示すものとする。そのため、アルファベットセットEは、E={EOB_TOKEN、ZERO_TOKEN、ONE_TOKEN、TWO_TOKEN、THREE_TOKEN、FOUR_TOKEN、DCT_VAL_CAT1、DCT_VAL_CAT2、DCT_VAL_CAT3、DCT_VAL_CAT4、DCT_VAL_CAT5、DCT_VAL_CAT6}によって与えられる。第1の確率分布は、アルファベットセットEのトークンの各々に関する確率値を含むことができる。別の例では、確率分布は、アルファベットのトークンのいくつかに関する確率値を含むことができる。一例では、第1の確率分布は、コーディング分布Pcに関して上述したようなコーディング分布とすることができる。
1304において、プロセス1300は、第2の確率分布を選択する。一例では、プロセス1300は、第2のコンテキストを導出し、第2のコンテキストに対応する第2の確率分布を選択することができる。
第2の確率分布は、トークンのパーティションに亘って定義することができる。例示的な例として図7の係数トークンツリー700のトークンを使用して、パーティションはアルファベットセットEの非自明な(non−trivial)パーティションFEに対応することができる。例えば、非自明なパーティションFEは、FE={{EOB_TOKEN}、{ZERO_TOKEN}、{ONE_TOKEN、TWO_TOKEN、THREE_TOKEN、FOUR_TOKEN、DCT_VAL_CAT1、DCT_VAL_CAT2、DCT_VAL_CAT3、DCT_VAL_CAT4、DCT_VAL_CAT5、DCT_VAL_CAT6}}とすることができる。即ち、非自明なパーティションFEは、アルファベットセットEを3つの重複しないサブセット{EOB_TOKEN}、{ZERO_TOKEN}、および全ての他のすべてのトークンを含むセットに分割する。そのため、第2の確率分布は、パーティションの要素に関する確率値を含む。
非自明なパーティションFEの例では、第2の確率分布は、3つの確率値を含むことができる。非自明なパーティションFEには3つの要素しか含まれていないため、第2のコンテキストは、オーバーヘッドの2ε/nビット/トークンを追加し、これは、アルファベットE(即ち、第1のコンテキストなどのコンテキスト)に亘る確率分布を決定する新たなコンテキストによって追加される約11ε/nビット/トークンのものよりもかなり小さい。
第2のコンテキストは、アルファベットEのトークンのサブセットをターゲットとするため、追加された第2のコンテキストに関連するオーバーヘッドの量は制限される。追加された第2のコンテキストは、追加された第1のコンテキストよりもオーバーヘッドがはるかに少なくなる。
一例では、第2のコンテキストは、他のノードよりもより頻繁に使用されるアルファベットセットEのトークンをターゲットとするコンテキストとすることができる。より頻繁に使用されるトークンをターゲットとすることにより、それらのトークンのコーディング(例えば、圧縮)のパフォーマンスを向上させることができる。例えば、図7の係数トークンツリー700を再び参照すると、内部ノード(例えば、ノードA〜K)のうち、ルートノード701およびノード703は、変換係数をコーディングするときに最も頻繁に使用されるノードである。変換係数を符号化するためにツリーをトラバースする際に、ツリーのさらに下方に内部ノードがあるほど、ノードがトラバースされる頻度は低い。即ち、ツリーのさらに下方に内部ノードがあるほど、内部ノードが変換係数のコーディングに使用される回数は少なくなる。そのため、コンテキストの追加(これは、上記したようにオーバーヘッドの点では望ましいが)は、最も頻繁に使用されるトークンのコンテキストの追加に制限することができる。
一例では、第2のコンテキストは、実際の分布Qcに関して説明した実際の分布とすることができる。一例では、第2のコンテキストは、現在の係数(即ち、係数位置(ri、ci)における係数であって、スキャン位置iに対応する係数)がゼロ(即ち、ti=ZERO_TOKEN)であるトークンの確率が、係数位置(ri、ci)の直近の2D(2次元の)近傍(neighborhood)におけるゼロの数と強く相関しているという周知の事実を活用することによって、導出することができる。一例では、第2のコンテキストは、係数位置(ri、ci)に固定された近傍テンプレートを使用して導出することができる。近傍テンプレートは、近傍を構成する係数位置を示したり、含めたり、指定したり、その他同様のことを行うことができる。近傍テンプレートは、スキャン順序に基づくものとすることができる。
図14は、本開示の実施形態に従ってコンテキストを導出するための近傍テンプレート1400および1450の図である。近傍テンプレートは、現在の係数の前にコーディングされた係数の位置(即ち、隣接する位置)を含む。そのため、これらの係数に関する値は、現在の係数をコーディングすることに関して利用可能である。近傍テンプレートは、任意の数の位置を含むことができる。近傍テンプレートは、任意の形状を有することができる。例えば、近傍テンプレートは、連続する位置または隣接する位置を含む必要はない。
近傍テンプレート1400は、前方スキャン順序により使用することができる近傍テンプレートを示している。前方スキャン順序は、図6のスキャン順序602のように、変換ブロックの左上隅から右下隅に進むスキャン順序である。近傍テンプレート1400は、現在の係数1402と、a〜eでマークされた5個の影付き係数の位置を含む近傍テンプレート1404とを示している。近傍テンプレートは、より多くのまたはより少ない係数位置を含むことができる。一例では、値a〜eは、個々の係数がゼロであるか、または非ゼロであるかを示すことができる。そのため、値a〜eは、バイナリ値とすることができる。
近傍テンプレート1450は、逆方向スキャン順序により使用することができる近傍テンプレートを示している。逆方向スキャン順序は、例えば、変換ブロックの右下隅から左上隅に進むスキャン順序である。近傍テンプレート1450は、現在の係数1452と、a〜iとラベル付けされた9個の影付き係数の位置を含む近傍テンプレート1454とを示している。しかしながら、上記したように、近傍テンプレートは、より多くのまたはより少ない係数位置を含むことができる。
一例では、第2のコンテキストは、近傍テンプレート内のゼロ係数の数に基づいて導出することができる。例えば、近傍テンプレート1400を使用して、式(a+b+c+d+e+1)>>1に基づいてコンテキスト値のセット{0、1、2、3}からコンテキスト値を選択することができる。値a−eの各々は、ゼロ(0)または1であり、「>>1」は、合計(a+b+c+d+e+1)の1ビットのビットシフトである。一例では、ゼロ(0)の値は、その位置の係数がゼロ係数であることを示し、1の値は、係数が非ゼロであることを示すことができる。例えば、近傍テンプレートの係数がすべてゼロの場合、0の番号が付けられたコンテキストを選択することができ、正確に1つまたは正確に2つの近傍テンプレートの係数が非ゼロの場合、1の番号が付けられたコンテキストが選択される、などである。他の値およびセマンティクスが可能である。
再び図13を参照すると、1306において、第2の確率分布が変換係数トークンに関する確率を含むと決定したことに応答して、プロセス1300は1308に進む。一実施形態では、プロセス1300は、第2の確率分布が変換係数トークンに関する確率を含まない場合、プロセス1300が1312に進むことを含むことができる。
一例では、第2の確率分布は、変換係数トークンがパーティションのシングルトン要素(singleton element)に含まれる場合の変換係数トークンに関する確率を含む。例えば、上記の非自明なパーティションFEは、含まれているEOB_TOKENが、非自明なパーティションFEのシングルトン要素{EOB_TOKEN}であるため、トークンEOB_TOKENに関する確率を含むように決定される。注意すべきこととして、シングルトン要素は、単一の要素のみを含むアルファベットセットEのサブセットである。そのため、第2の確率分布は、例えば、FOUR_TOKENが非自明なパーティションFEのシングルトン要素に含まれないため、FOUR_TOKENに関する確率を含むように決定されない。
上記したように、第1のコンテキストを使用してアルファベットセットEに亘る確率分布である第1の確率分布を取得することができ、第2のコンテキストを使用して非自明なパーティションFEに亘って定義された第2の確率分布を取得することができる。係数トークンツリー700を参照すると、一例では、第1のコンテキストを使用して、全ての内部ノードにおけるバイナリ決定をコーディングする(即ち、符号化または復号化)ためのバイナリ確率分布を決定することができ、第2のコンテキストを使用して、2つの内部ノード(ルートノード701およびその右側の子ノード(即ち、ノード703))のみにおけるバイナリ分布を決定することができる。
1308において、プロセス1300は、第1の確率分布と第2の確率分布をミキシングして、ミックス済みの確率を生成する。1310において、プロセス1330は、ミックス済みの確率を使用して変換係数トークンをエントロピーコーディングする。
非自明なパーティションFEが与えられた場合、2つの内部ノード(ルートノード701およびノード703)に関するコーディング分布は、第1のコンテキストから取得した分布(即ち、第1の確率分布)と第2のコンテキストから取得した分布(即ち、第2の確率分布)とをミキシングすることにより取得することができる。そのため、トークンをコーディングするための確率分布を事前に選択する必要はなく、むしろ、上記したようにミキシングすることにより、最良の組み合わせが結果的に生じる。
ミキシングは、図9〜12に関して上記で説明したとおりである。一例では、プロセス1300は、第1の確率分布を使用して変換係数トークンを復号化するための第1の条件付き確率を決定すること、第2の確率分布を使用して変換係数トークンを符号化するための第2の条件付き確率を決定すること、第1の条件付き確率および第2の条件付き確率を使用して、ミックス済みの確率を決定することによりミックス済みの確率を生成することができる。
一例としての図7の係数トークンツリー700などのトークンツリーを使用して、第1の条件付き確率分布は、内部ノードにおける条件付き確率分布とすることができる。内部ノードにおける条件付き確率分布とは、符号化履歴(即ち、以前にコーディングされた係数)とサイド情報とから決定された第1のコンテキストが与えられたときの内部ノードの子ノード(即ち、左側の子または右側の子)を選択する確率分布である。サイド情報の例は、プレーンタイプ(例えば、輝度、色度など)、変換サイズ(即ち、変換ブロックサイズ)、および変換タイプ(例えば、DCT、ADSTなど)を含む。他のサイド情報が利用可能である。第2の条件付き確率分布は、コーディングされた履歴およびサイド情報から決定された第2のコンテキストが与えられたときの同じ内部ノードにおける条件付き確率分布である。第1のコンテキストおよび第2のコンテキストは、コーディングされた履歴内の異なる情報および異なるサイド情報を使用して導出することができる。
一例として非自明なパーティションFEを使用すると、第1の条件付き確率分布は、コーディングされた履歴およびサイド情報から決定された第1のコンテキストが与えられたときの非自明なパーティションFEに亘る条件付き確率分布とすることができ、第2の条件付き確率分布は、コーディングされた履歴および他のまたは同じサイド情報から決定された第2のコンテキストが与えられたときのFEに亘る条件付き確率分布とすることができる。
第1のコンテキストがアルファベットセットEに亘る確率分布Pを決定する場合、FEの任意の要素eに関して、要素e,Q(e)の確率が要素e(eはトークンのセット)
内のすべてのトークンの確率の合計によって与えられるように、FEにおける確率分布Qを決定することができる。FEはアルファベットセットEの非自明なパーティションであるため、確率値の選択的ミキシングは、アルファベットセットEの要素eに対して本質的に実行されるか、または行われる。
1312において、第2の確率分布が変換係数トークンの確率を含まないことを条件に、プロセス1300は、第1の確率分布を使用して現在の変換係数トークンをエントロピーコーディングする。即ち、残りの内部ノード(即ち、パーティションEのシングルトンに含まれないノード)に関して、コーディング分布は第1のコンテキストから取得され得る。即ち、第1の確率分布を使用して、残りの係数をエントロピーコーディングすることができる。
要約すると、第1の確率分布と第2の確率分布との選択的ミキシングは、変換係数のコーディングに使用されるトークンのサブセットに関して使用することができる。一例では、トークンは、係数トークンツリーの内部ノードに対応する。例えば、選択的ミキシングは、他の内部ノード(即ち、あまり使用されないノード)よりもより頻繁に使用される内部ノード(即ち、頻繁に使用されるノード)に対してのみ使用することができる。一例では、より頻繁に使用される内部ノードは、それらの内部ノードに対応するトークンのリストとして指定することができる。別の例では、より頻繁に使用される内部ノードが非自明なパーティションFEのシングルトンとすることができる。内部ノードにミキシングが使用されていない場合、第1の確率分布をコーディング分布として使用することができる。そのため、ミキシングは、一部のノードに選択的に適用され、第1および第2の分布は一部の内部ノード(例えば、頻繁に使用されるノード)に関してミキシングされ、第1の分布は、他の内部ノード(例えば、あまり使用されないノード)をコーディングするために使用される。
上記の例では、アルファベットセットEが非自明なパーティションFEに分割された。そのため、アルファベットセットEのトークンは、無関係で別個であると見なされる。即ち、係数トークンツリー700のトークンがプロセス1300を例示するために使用されたとしても、パーティションは、無関係で別個のトークンにおいてトークンを処理する。即ち、パーティションEは、ツリー構造を活用せず、任意のアルファベットセットで使用することができる。
別の例では、トークンのツリー構造が使用可能であれば、第2の確率分布を選択するために使用することができる。ツリー構造(係数トークンツリー700など)は、その階層構造により、あるトークンを別のトークンに関連付けることができる。そのため、第2の確率分布は、係数トークンツリーのいくつかの内部ノードにおいて定義される確率分布とすることができる。
一例では、より頻繁に使用される内部ノードは、他の内部ノードよりもルートノードに近いノードとなる。例えば、係数トークンツリー700において、ルートノードからのトラバースは、Kとラベル付けされたノードに到達するよりもCとラベル付けされたノードに到達するホップ(hops)が少ないため、Cとラベル付けされたノードは、Kとラベルのノードよりもルートノード701により近い。
一例では、選択的ミキシングは、ルートノードからの所定数のホップ内(またはそれ以下)の内部ノードに使用することができる。例えば、所定のホップ数が2の場合、Aとラベル付けされた内部ノード(ルートノード701)、ノード703、Cとラベル付けされたノードに対して選択的ミキシングを使用することができる。このため、内部が「頻繁に使用される」かどうかは、ルートノードに対する内部ノードの近接度に基づいて決定することができる。トークンに対応する内部ノードは、例えば、別のトークンをコーディングするプロセスにおいて、トークンに関連する決定もコーディングされる場合に、「使用」される。
いくつかの内部ノードのトークン(即ち、ツリーのトラバースによって生成されるシーケンスxn)をコーディングする確率は、第1の確率分布と第2の確率分布とをミキシングすることにより、図9に関して説明したように決定することができる。即ち、第1の確率分布および第2の確率分布の両方の分布を有する内部ノードに関して、現在の係数をエントロピーコーディングするためのミックス済みの確率を取得することができる。他のすべての内部ノードに関して、現在の係数をエントロピーコーディングするために第1の確率分布が使用される。
kが第2のコンテキストの影響を受ける内部ノードの数である場合、第2のコンテキストは、ほぼkε/nビット/トークンを追加するが、第1のコンテキストは、係数トークンツリー700のトークンに対して11ε/nビット/トークンを追加する。
選択的ミキシングを使用することにより、コーディングシステムにおいて利用可能なコンテキストCのセットを、第1のセットC0および第2のセットC1に分割することができる。一例として係数トークンのアルファベットEを使用すると、第1のセットC0は、アルファベットEに亘る全体的な分布に影響を与えるコンテキスト情報から導出することができ、セットC1におけるコンテキストは、アルファベットEに亘る分布の一部のみに影響を与えるコンテキスト情報から導出することができる。セットC1における異なるコンテキストは、アルファベットEの異なるパーティションをターゲットとすることができる。係数ツリーが利用可能な場合、セットC1の異なるコンテキストは、ツリーの異なる内部ノードをターゲットとすることができる。例えば、セットC1における一部のコンテキストは、係数トークンツリーにおけるルートノードをターゲットとすることができる。例えば、セットC1における一部のコンテキストは、ZERO_TOKENを他のトークンから分割する内部ノードをターゲットとすることができる。例えば、セットC1における一部のコンテキストは、ONE_TOKENを他のトークンから分割する内部ノードをターゲットとすることができる。従って、コーディングシステムにおいて、アルファベットのすべてのトークンに対して数百または数千のコンテキストを維持する代わりに、すべてのトークンに対してより小さなサブセットを維持することができ、コンテキストの別のセットは、重要な、有意な、またはより頻繁に使用されると考えられるトークンをターゲットとすることができる。
上述の符号化および復号化の態様は、符号化および復号化技術のいくつかの例を示す。しかしながら、符号化および復号化は、これらの用語が特許請求の範囲で使用されているように、データの圧縮、圧縮解除、変換、または任意の他の処理または変更を意味し得ることを理解されたい。
本明細書では、「例」または「実施」という用語は、例、事例、または例示として機能することを意味するために使用される。本明細書において「例」または「実施形態」と記載された任意の態様または設計は、必ずしも他の態様または設計に対して好ましいまたは有利であるとして解釈されるべきではない。むしろ、「例」または「実施形態」という用語の使用は、概念を具体的な方法で表現することを意図している。本出願で使用される場合、用語「または」は、排他的な「または」ではなく、包括的な「または」を意味することが意図される。即ち、他に明記されていない限り、または文脈から明らかでない限り、「XはAまたはBを含む」とは、任意の自然な包含的置換(natural inclusive permutations)を意味することを意図する。即ち、「XはAまたはBを含む」は、以下の場合、XがAを含む場合、XがBを含む場合、またはXがAおよびBの両方を含む場合のいずれにおいても満足される。さらに、本出願および添付の特許請求の範囲で使用される冠詞「a」および「an」は、他に明記されない限り、または単数形に向けられる文脈から明らかでない限り、「1つまたは複数」を意味すると一般に解釈されるべきである。さらに、「実施形態」または「一実施形態」という用語の使用は、そのように記載されない限り、同じ実施形態または実施を意味することを意図するものではない。
送信局102および/または受信局106(ならびに、符号化器400および復号化器500が含む、それに記憶され、かつ/またはそれによって実行されるアルゴリズム、方法、命令など)の実施形態は、ハードウェア、ソフトウェア、またはそれらの任意の組み合わせにおいて実現することができる。ハードウェアは、例えば、コンピュータ、知的財産(IP)コア、特定用途向け集積回路(ASIC:application−specific integrated circuits)、プログラマブル論理アレイ、光プロセッサ、プログラマブル論理コントローラ、マイクロコード、マイクロコントローラ、サーバ、マイクロプロセッサ、デジタル信号プロセッサ、または他の適切な回路を含むことができる。特許請求の範囲において、「プロセッサ」という用語は、前述のハードウェアのいずれかを単独でまたは組み合わせて含むものとして理解されるべきである。用語「信号」および「データ」は、互換的に使用される。さらに、送信局102および受信局106の一部は、必ずしも同じ方法で実施される必要はない。
さらに、一態様では、例えば、送信局102または受信局106は、実行時に、本明細書に記載された個々の方法、アルゴリズム、および/または命令をのうちのいずれかを実行するコンピュータプログラムを備えた汎用コンピュータまたは汎用プロセッサを使用して実施することができる。加えて、または代替的に、例えば、本明細書に記載された方法、アルゴリズム、または命令のいずれかを実行するための他のハードウェアを含むことができる専用コンピュータ/プロセッサを利用することができる。
送信局102および受信局106は、例えば、ビデオ会議システム内のコンピュータ上で実施することができる。あるいは、送信局102はサーバ上で実施することができ、受信局106はサーバとは別のハンドヘルド通信デバイスのようなデバイス上で実施することができる。この場合、送信局102は、符号化器400を使用してコンテンツを符号化されたビデオ信号に符号化し、符号化されたビデオ信号を通信デバイスに送信することができる。通信デバイスは、復号化器500を使用して符号化されたビデオ信号を復号化することができる。あるいは、通信デバイスは、通信デバイス上に局所的に格納されたコンテンツ、例えば、送信局102によって送信されなかったコンテンツを復号化することができる。他の送信局102および受信局106の実施スキームが利用可能である。例えば、受信局106は、ポータブル通信デバイスではなく、一般に固定のパーソナルコンピュータであってもよく、かつ/または符号化器400を含むデバイスは、復号化器500を含んでもよい。
さらに、本開示の実施形態の全部または一部は、例えば有形のコンピュータ使用可能またはコンピュータ可読媒体からアクセス可能なコンピュータプログラム製品の形態を取ることができる。コンピュータ使用可能またはコンピュータ可読媒体は、例えば、任意のプロセッサによって、またはそれに関連して使用するために、プログラムを有形に包含、格納、通信、または輸送することができる任意のデバイスであり得る。媒体は、例えば、電子、磁気、光学、電磁気、または半導体デバイスであり得る。他の適切な媒体も利用可能である。
上述した実施形態、実施例及び態様は、本開示の理解を容易にするために記載されており、本開示を限定するものではない。本開示は、添付の特許請求の範囲内に含まれる様々な改変および均等の構成を包含することを意図しており、その範囲は、法律で許容されるようなすべての改変および均等の構造を包含するように最も広い解釈が与えられる。