添付図面と共に以降の詳細な説明を参照することによって、本発明の完全な理解及びその優位性の多くが容易に理解される。
次に各図面を参照すると、図1〜図4には、以下に説明する各実施形態に係る圧縮装置及び/又は解凍装置を利用する装置又はシステムが概略的に示されている。
以下に説明する全てのデータ圧縮装置及び/又はデータ解凍装置は、ハードウェアで実現されてもよいし、例えば、特定用途向け集積回路(ASIC:application specific integrated circuit)又はフィールドプログラマブルゲートアレイ(FPGA:field programmable gate array)、あるいはこれらの組み合わせ等のようなプログラム可能なハードウェアとして、汎用コンピュータ等の汎用データ処理装置上で動作するソフトウェアで実現されてもよい。ソフトウェア及び/又はファームウェアで実現される実施形態の場合、このようなソフトウェア及び/又はファームフェア、並びに、このようなソフトウェア及び/又はファームウェアが記憶又は提供される非一時的な機械可読データ記録媒体が、本発明の実施形態であると考えられることが理解されよう。
図1は、ビデオデータ圧縮及びビデオデータ解凍を行うオーディオ/ビデオデータ送受信システムを示す概略図である。
入力オーディオ/ビデオ信号10は、少なくともオーディオ/ビデオ信号10のビデオ要素を圧縮するビデオデータ圧縮装置20に供給され、例えば、ケーブル、光ファイバ、無線リンク等の送信ルート30に沿って送信される。圧縮された信号は、解凍装置40によって処理され、これにより、出力オーディオ/ビデオ信号50が提供される。リターンパスでは、圧縮装置60がオーディオ/ビデオ信号を圧縮し、当該オーディオ/ビデオ信号は送信ルート30に沿って解凍装置70に送信される。
したがって、圧縮装置20及び解凍装置70は、送信リンクにおける1つのノードを構成することができる。また、解凍装置40及び圧縮装置60は、送信リンクにおける他の1つのノードを構成することができる。もちろん、送信リンクが単方向である場合は、一方のノードのみが圧縮装置を要求し、他方のノードのみが解凍装置を要求することになる。
図2は、ビデオデータ解凍を行うビデオ表示システムを示す概略図である。具体的には、圧縮されたオーディオ/ビデオ信号100は解凍装置110によって処理され、これにより、表示装置120上で表示することができる解凍信号が提供される。解凍装置110は、例えば、表示装置120と同じケーシング内に設けることにより、表示装置120と一体的に形成してもよい。あるいは、解凍装置110は、(例えば、)いわゆるセットトップボックス(STB:Set Top Box)として提供されてもよい。なお、「セットトップ」という表現は、当該ボックスを表示装置120に対して特定の方向又は位置に配置する必要があることを意味するわけではない。この用語は、単に、周辺機器として表示部に接続可能なデバイスを示すために当該技術分野において使用しているに過ぎない。
図3は、ビデオデータ圧縮及びビデオデータ解凍を行うオーディオ/ビデオ記憶システムを示す概略図である。入力オーディオ/ビデオ信号130は、圧縮信号を生成する圧縮装置140に供給され、例えば、磁気ディスク装置、光ディスク装置、磁気テープ装置、又は半導体メモリやその他の記憶装置等の固体記憶装置等の記憶装置150に記憶される。再生時においては、圧縮データが記憶装置150から読み出され、解凍装置160に渡されて解凍される。これにより、出力オーディオ/ビデオ信号170が提供される。
圧縮信号又は符号化信号、及び当該信号を記憶する記憶媒体又はデータキャリアは、本発明の実施形態であると考えられることが理解されよう。
図4は、ビデオデータ圧縮を行うビデオカメラを示す概略図である。図4において、CCD(Charge Coupled Device)イメージセンサ及びそれに付随する制御・読出電子機器等の画像キャプチャ装置180は、圧縮装置190に渡されるビデオ信号を生成する。1つのマイクロフォン(あるいは複数のマイクロフォン)200は、圧縮装置190に渡されるオーディオ信号を生成する。圧縮装置190は、記憶及び/又は送信される(図4においては、ステージ220として包括的に表されている)圧縮オーディオ/ビデオ信号210を生成する。
以下に説明する技術は、主に、ビデオデータ圧縮に関する。オーディオデータ圧縮を行うために、以降に説明するビデオデータ圧縮技術とともに多くの既存の技術を用いて圧縮オーディオ/ビデオ信号を生成してもよいことが理解されよう。したがって、オーディオデータ圧縮について別途説明は行わない。また、特に、放送品質ビデオデータにおいて、ビデオデータに関連するデータレートは、(圧縮及び非圧縮を問わず)一般的に、オーディオデータに関連するデータレートよりもはるかに高いことも理解されよう。したがって、非圧縮オーディオデータは、圧縮ビデオデータに追加することができ、これにより、圧縮オーディオ/ビデオ信号を形成できることが理解されよう。さらに、本発明の実施形態(図1〜図4参照)はオーディオ/ビデオデータに関するものであるが、以下に説明する技術は、単にビデオデータを扱う(すなわち、圧縮、解凍、記憶、表示、及び/又は送信する)システムに使用してもよいことが理解されよう。すなわち、これらの実施形態は、必ずしもオーディオデータ処理と関連している必要はなく、ビデオデータ圧縮に適用することができる。
図5は、ビデオデータ圧縮・解凍装置を示す概略図である。
連続画像の入力ビデオ信号300は、加算部310及び画像予測部320に供給される。画像予測部320については、図6を参照して後で詳述する。加算部310は、「+」入力上で入力ビデオ信号300を受信し、「−」入力上で画像予測部320の出力を受信する事実上の減算(負の加算)動作を実行する。これにより、入力画像から予測画像が減算される。この結果、実画像と予測画像との差を表すいわゆる残差画像信号330が生成される。
残差画像信号を生成する理由の1つは次の通りである。説明を行うデータ符号化技術、すなわち、残差画像信号に適用される技術は、符号化される画像において「エネルギー」が少ない場合に、より効率的に作用する傾向がある。ここで、「効率的」という用語は、生成した符号化データの量が少ないことを指す。特定の画像品質レベルにおいては、生成するデータができるだけ少ないことが望ましい(かつ、「効率的」と考えられる)。残差画像における「エネルギー」は、残差画像に含まれる情報量に関連する。仮に、予測画像と実画像とが同一だとすると、これら2つの画像の差(すなわち、残差画像)は、ゼロの情報(ゼロエネルギー)を含み、非常に容易に少量の符号化データに符号化できる。一般的に、予測処理をある程度良好に実行できる場合、残差画像データは、入力画像よりも情報が小さく(エネルギーが少ない)、容易に少量の符号化データに符号化することができると予想される。
残差画像データ330は、残差画像データの離散コサイン変換(DCT:Discrete Cosine Transform)表現を生成する変換部340に供給される。このDCT技術自体は広く知られており、ここでの詳細な説明は行わない。しかしながら、特に、DCT動作が適用されるデータの様々なブロックの選択に関して、以降で詳細に説明する装置で用いられる技術の側面が存在する。これらについては、図7〜図12を参照して以降で説明する。
なお、いくつかの実施形態では、DCTの代わりに、離散サイン変換(DST:discrete sine transform)を用いる。他の実施形態においては、変換を実行しなくてもよい。この変換は選択的に行うことができ、例えば、「変換スキップ」コマンド/モードの制御により、変換ステージが事実上バイパスされる。
変換部340の出力、すなわち、画像データにおける各変換ブロックに対する一連の変換係数は、量子化部350に供給される。量子化スケーリング要素による単純な乗算から、量子化パラメータの制御下における複雑なルックアップテーブルの応用に至るまで、様々な量子化技術がビデオデータ圧縮の分野において広く知られている。その目的として一般的なものには2つある。1つ目は、変換データが取り得る値を量子化処理により減少させることである。2つ目は、変換データの値がゼロである可能性を量子化処理により増加させることである。これらにより、少量の圧縮ビデオデータの生成において、以下に説明するエントロピー符号化処理をより効率的に行うことができる。
スキャン部360により、データスキャン処理が適用される。スキャン処理の目的は、非ゼロの量子化変換係数をできるだけひとまとめにするため、また、もちろん、これにより、ゼロ値の係数をできるだけひとまとめにするために、量子化変換データを再整理することである。これらの機能により、いわゆるランレングス符号化、又は同様の技術を効率的に適用することができる。したがって、スキャン処理は、(a)スキャンの一部として全ての係数が一度は選択されるように、かつ、(b)スキャンにより所望の再整理を行うことができるように、「スキャン順」に従って、量子化変換データ、及び、特に、変換及び量子化された画像データのブロックに対応する係数のブロックから係数を選択することを含む。スキャン順を選択する技術について以下に説明する。有効な結果をもたらすスキャン順の1つの例は、いわゆるジグザグスキャン順である。
スキャンされた係数は、その後、エントロピーエンコーダ(EE)370に渡される。この場合もやはり、各種のタイプのエントロピー符号化を実行してもよい。以下に説明する2つの例は、いわゆるCABAC(Context Adaptive Binary Coding)システムの変形、及び、いわゆるCAVLC(Context Adaptive Variable-Length Coding)システムの変形である。一般的に、CABACは効率がよいと考えられている。ある研究では、CABACにおける符号化出力データの量は、同等の画像品質に対して、CAVLCよりも10〜20%少ないことが示されている。しかしながら、CAVLCが示す(実行する上での)複雑性のレベルは、CABACの複雑性のレベルよりもはるかに低いと考えられている。CABAC技術については、図17を参照して以降に説明し、CAVLC技術については、図18及び図19を参照して以降に説明する。
なお、スキャン処理及びエントロピー符号化処理は、別々の処理として示されているが、実際には、組み合わせるか、又は、一緒に扱うことができる。すなわち、エントロピーエンコーダへのデータの読み出しは、スキャン順で行うことができる。これと同様の事は、以下に説明する各逆処理にも当てはまる。
エントロピーエンコーダ370の出力により、例えば、予測部320が予測画像を生成する方法を定義する(上述及び/又は後述の)追加データと共に、圧縮出力ビデオ信号380が提供される。
一方、予測部320自身の動作は解凍された圧縮出力データに依存するため、リターンパスも提供される。
この機能の理由は以下の通りである。解凍処理(後述)における適切なステージで、解凍された残差データが生成される。この解凍残差データは、出力画像を生成するために、予測画像に追加する必要がある(なぜなら、元の残差データは、入力画像と予測画像との差であったため)。圧縮側と解凍側との間でこの処理が同等となるように、予測部320によって生成される予測画像は、圧縮処理中及び解凍処理中において、同一であるべきである。もちろん、装置は、解凍時において元の入力画像にアクセスすることができない。装置がアクセスできるのは、解凍画像のみである。したがって、圧縮時において、予測部320は、解凍された圧縮画像に基づいて(少なくとも、インター画像符号化について)その予測を行う。
エントロピーエンコーダ370により実行されるエントロピー符号化処理は、「無損失(lossless)」であると考えられる。すなわち、エントロピーエンコーダ370に最初に供給されたデータと全く同じデータに置き換えることができる。したがって、リターンパスは、エントロピー符号化ステージよりも前に実装することができる。実際、スキャン部360によって実行されるスキャン処理も無損失であると考えられるが、本実施形態では、リターンパス390は、量子化部350の出力から、補足逆量子化部420の入力までとされている。
一般的には、エントロピーデコーダ(ED)410、逆スキャン部400、逆量子化部420、逆変換部430は、それぞれ、エントロピーエンコーダ370、スキャン部360、量子化部350、及び変換部340の逆機能を提供する。ここでは、圧縮処理について説明を続け、入力圧縮ビデオ信号を解凍するための処理については、これとは別に後述する。
圧縮処理において、量子化された係数は、リターンパス390により量子化部350から、スキャン部360の逆動作を実行する逆量子化部420に渡される。逆量子化処理及び逆変換処理がユニット420、430により実行され、圧縮−解凍残差画像信号440が生成される。
画像信号440は、加算部450で予測部320の出力に追加され、再構築出力画像460が生成される。これにより、以下に説明するように、画像予測部320への1つの入力が構成される。
受信した圧縮ビデオ信号470に適用される処理について説明する。圧縮ビデオ信号470は、まず、エントロピーデコーダ410に供給され、そこから逆スキャン部400、逆量子化部420、及び逆変換部430の順に供給される。その後、加算部450により画像予測部320の出力に追加される。単刀直入に言うと、加算部450の出力460は、出力解凍ビデオ信号480を形成する。実際には、信号の出力の前に、さらにフィルタリングを施してもよい。
図5(及び図6)に示す構成の動作(及び後述する他の動作)は、制御部345によって制御することができる。
図6は、予測画像の生成を示す概略図であり、特に、画像予測部320の動作を示している。
いわゆるイントラ画像予測、及びいわゆるインター画像予測又は動き補償(MC:Motion-Compensated)予測という2つの基本的な予測モードが存在する。
イントラ画像予測は、同一画像内から得られるデータにおける画像ブロックの内容の予測を基礎としている。これは、他のビデオ圧縮技術における、いわゆるIフレーム符号化に対応する。画像全体がイントラ符号化されるIフレーム符号化とは対照的に、本実施形態では、イントラ符号化及びインター符号化の選択を、ブロック毎に行うことができる。他の実施形態では、当該選択が依然として画像毎に行われる。
動き補償予測においては、他の隣接画像又は近接画像において、現在の画像において符号化される画像詳細のソースを定義しようとする動き情報が用いられる。したがって、理想的な例では、予測画像における画像データのブロックの内容は、隣接画像における同じ位置もしくはわずかに異なる位置にある対応ブロックを示す参照(動きベクトル)として、非常に容易に符号化することができる。
図6に戻る。図6には(イントラ画像予測及びインター画像予測に対応する)2つの画像予測構成が示されており、その予測結果が、加算部310及び450に供給するための予測画像のブロックを提供するように、モード信号510の制御下において乗算部500によって選択される。当該選択は、どちらを選択すれば最小の「エネルギー」(上述のように、符号化を要求する情報量と考えてもよい)となるかに基づいて行われ、また、当該選択は、符号化出力データストリーム内でエンコーダに通知される。これに関して、例えば、入力画像から、2つのバージョンの予測画像の領域を試行減算し、差分画像の各ピクセル値を2乗し、乗算値を合計し、当該2つのバージョンのうち、その画像領域に関連する差分画像の平均乗算値が低いのはどちらのバージョンかを特定することによって、画像エネルギーを検出することができる。
イントラ予測システムにおいて、実際の予測は、信号460の一部として受信された画像ブロックに基づいて行われる。すなわち、予測は、解凍装置において全く同じ予測を行うことができるように、符号化−復号化画像ブロックに基づいて行われる。しかしながら、データを入力ビデオ信号300から抽出して、イントラモード選択部520により、イントラ画像予測部530の動作を制御することもできる。
インター画像予測では、動き補償(MC)予測部540は、例えば、動き推定部550によって入力ビデオ信号300から抽出された動きベクトル等の動き情報を用いる。これら動きベクトルは、インター画像予測のブロックを生成する動き補償予測部540によって、処理された再構築画像460に適用される。
ここで、信号460に適用される処理について説明する。まず、信号460は、フィルタ部560によってフィルタリングされる。この処理では、変換部340により実行されるブロックに基づく処理及び後続の動作に対する影響を除去するか、少なくとも低減させるために「非ブロック化(deblocking)」フィルタが適用される。また、再構築信号460及び入力ビデオ信号300を処理することによって得られた係数を使用して、適応ループフィルタが適用される。この適応ループフィルタは、公知の技術を使用して、フィルタリング対象のデータに対して適応フィルタ係数を適用するフィルタの一種である。すなわち、フィルタ係数は、各種要素に基づいて変化し得る。どのフィルタ係数を用いるかを定義するデータは、符号化出力データストリームの一部に挿入される。
フィルタ部560からのフィルタリングされた出力は、実際には、出力ビデオ信号480を形成する。この信号は、1つ又は複数の画像記憶部570に記憶される。連続画像の記憶は、動き補償予測処理、特に、動きベクトルの生成において要求される。必要メモリを確保するため、画像記憶部570内の記憶画像は、圧縮形式で保持され、その後、動きベクトルの生成に用いるために解凍されてもよい。この特定の目的のために、公知のいかなる圧縮/解凍システムを用いてもよい。記憶画像は、より高い解像度の記憶画像を生成する補間フィルタ580に渡される。この例では、補間フィルタ580によって出力される補間画像の解像度が、画像記憶部570に記憶された画像の8倍(各寸法)となるように、中間サンプル(サブサンプル)が生成される。補間画像は、動き推定部550及び動き補間予測部540への入力として渡される。
いくつかの実施形態では、乗算部600を使用して、入力ビデオ信号のデータ値に因数4を乗算し(効率的には、単にデータ値を2ビット左にシフトさせる)、除算部又は右シフト部610を使用して、装置の出力で、対応する除算動作(2ビット右にシフト)を適用する任意のステージがさらに提供される。したがって、左へのシフト及び右へのシフトにより、単に装置の内部動作に対して、データが変更される。この方法により、あらゆるデータ丸め誤差の影響も低減されるので、装置内における高い計算精度を提供することができる。
ここで、圧縮処理のために画像を分割する方法について説明する。基本的なレベルでは、圧縮される画像はサンプルブロックの配列として考えることができる。検討されているこのようなブロックの中で最大のものは、便宜的に、64×64サンプルの正方形配列を表すいわゆる最大符号化ユニット(LCU:largest coding unit)700とする(図7参照)。ここで、輝度サンプルについて説明する。4:4:4、4:2:2、4:2:0、又は4:4:4:4(GBR+キーデータ)等のクロミナンスモードによって、輝度ブロックに対応する、対応クロミナンスサンプルの数が異なる。
符号化ユニット、予測ユニット、及び変換ユニットという基本的な3つの種類のブロックについて説明する。一般的には、LCUの再帰的な分割により、例えば、ブロックサイズ及びブロック符号化パラメータ(予測又は残差符号化モード等)が、符号化される画像の特定の特徴に応じて設定されるといった方法で、入力画像が分割される。
LCUは、いわゆる符号化ユニット(CU)に分割されてもよい。符号化ユニットは、常に正方形であり、また、8×8サンプルから最大サイズのLCU700までのサイズを有している。符号化ユニットは、ある種のツリー構造として配置されてもよい。その結果、例えば、第1の分割が図8に示すように行われて、32×32サンプルの符号化ユニット710が与えられる。続いて行われる分割は、16×16サンプルの符号化ユニット720(図9)及び潜在的な8×8サンプルの符号化ユニット730(図10)が与えられるように、選択的な基準に基づいて行われてもよい。全体としては、この処理により、LCUと同じ大きさ、あるいは、8×8サンプルと同じ大きさを有するCUブロックの容量適応符号化ツリー構造を提供することができる。出力ビデオデータの符号化は、符号化ユニット構造に基づいて行われる。
図11は、予測ユニット(PU)の配列を示す概略図である。予測ユニットは、画像予測処理に関連する情報を伝達するための基本的なユニットであり、換言すると、図5の装置からの出力ビデオ信号を形成するためのエントロピー符号化された残差画像データに追加される追加データである。一般的に、予測ユニットの形状は、正方形に限られない。これらは、最小(8×8)サイズより大きい限り、特に、1つの正方形符号化ユニットの半分を形成する長方形等、他の形状を採ることができる。その目的は、隣接する予測ユニットの境界が画像内の実オブジェクトの境界に(できるだけ近くに)合わせられるようにすることであり、その結果、様々な予測パラメータを異なる実オブジェクトに適用することができる。各符号化ユニットは、1つ又は複数の予測ユニットを含んでいてもよい。
図12は、変換ユニット(TU)の配列を示す概略図である。変換ユニットは、変換・量子化処理における基本的なユニットである。変換ユニットは、常に正方形であり、4×4サンプルから32×32サンプルまでのサイズを採ることができる。各符号化ユニットは1つ又は複数の変換ユニットを含むことができる。図12における頭字語SDIP−Pは、いわゆる短距離イントラ予測分割を示している。この配列では、1次元の変換のみが行われる。したがって、4×NブロックがN回の変換により渡され、変換における入力データは、現在のSDIP−P内の既に復号化されている隣接ブロック及び既に符号化されている隣接線に基づく。
ここで、イントラ予測処理について説明する。一般的に、イントラ予測には、同一画像内における既に符号化及び復号化されたサンプルから、サンプルの現在のブロック(予測ユニット)を予測することが含まれる。図13は、部分的に符号化された画像800を示す概略図である。ここで、画像800は、LCU基準で、左上から右下へと符号化されている。画像全体の処理により部分的に符号化されたLCUの一例がブロック810として示されている。ブロック810の上部及び左側の陰影領域820は既に符号化されている。ブロック810の内容のイントラ画像予測においては、いずれの陰影領域820も利用することができるが、その下部の陰影が付されていない領域を利用することはできない。
ブロック810は、上述のように、イントラ画像予測処理を行うためのLCUを表しており、より小さな一連の予測ユニットに分割されてもよい。予測ユニット830の一例がLCU810内に示されている。
イントラ画像予測においては、現在のLCU810の上部及び/又は左側に位置するサンプルが考慮される。要求されるサンプルは、ソースサンプルから予測される。当該ソースサンプルは、LCU810内の現在の予測ユニットに対して異なる位置又は方向に位置していてもよい。現在の予測ユニットに対してどの方向が適切であるかを決定するために、候補とされる各方向に基づく試行予測の結果を比較して、どの方向が入力画像の対応ブロックに最も近い結果をもたらすかを確認する。
画像は、「スライス」基準で符号化されてもよい。1つの例では、スライスは、水平隣接グループのLCUである。しかしながら、より一般的には、残差画像全体でスライスを構成することができ、あるいは、スライスを単一のLCU又はLCUの行等とすることもできる。スライスは、独立ユニットとして符号化されるので、誤差に復元性をもたらすことができる。エンコーダ及びデコーダの状態は、スライス境界で完全にリセットされる。例えば、イントラ予測はスライス境界をまたいで実行されない。このため、スライス境界は、画像境界として扱われる。
図14は、考えられる(候補となる)一連の予測方向を示す概略図である。8×8、16×16、又は32×32サンプルの予測ユニットに対して、全部で34の方向候補を利用可能である。予測ユニットサイズが、4×4サンプル又は64×64サンプルである特殊なケースでは、数を減らした一連の方向候補(それぞれ、17つの方向候補及び5つの方向候補)を使用することができる。方向は、現在のブロック位置に対する水平及び垂直移動により決定されるが、予測「モード」として符号化される。当該一連の方向を図15に示す。なお、いわゆるDCモードは、周囲にある上部及び左側のサンプルの単純算術平均を表す。
図16は、スキャンパターンであるジグザグスキャンを示す概略図である。当該スキャンパターンは、スキャン部360により適用されてもよい。図16においては、DC係数がブロックの左上の位置840に位置し、増加する水平及び垂直空間周波数が左上の位置840の下側及び右側への距離を増加させる係数により表される、8×8変換係数のブロックの例についてのパターンが示されている。
なお、いくつかの実施形態では、当該係数を逆順(図16の順番表記を利用すると右下から左上)にスキャンしてもよい。また、いくつかの実施形態では、最上段からいくつか(例えば、1から3)の水平行をまたいで左から右にスキャンを実行して、その後、残りの係数のジグザグスキャンを実行してもよい。
図17は、CABACエントロピーエンコーダの動作を示す概略図である。
いくつかの実施形態に係る本機能のコンテキスト適応符号化において、データビットが1又は0である可能性の期待値又は予測値を表す確率モデル、すなわち、コンテキストに関してわずかなデータを符号化することがある。このため、入力データビットには、様々なコード値の2つ(又は、より一般的には、複数)の補足サブレンジのうち選択した1つのサブレンジ内のコード値が割り当てられ、サブレンジのそれぞれのサイズ(いくつかの実施形態では、一連のコード値に対するサブレンジそれぞれの比率)は、コンテキスト(入力値に関連付けられ、そうでなければ関連のあるコンテキスト変数により順に定義される)により定義される。次のステップで、選択されたサブレンジの割り当てコード値及び現在のサイズに応答して、全範囲、すなわち、(次の入力データビット又は値に対して使用される)一連のコード値が修正される。その後、修正した範囲が所定の最小サイズ(例えば、元の範囲サイズの半分)を表す閾値よりも小さい場合、例えば修正した範囲を2倍(左にシフト)することによりサイズを増加させる。この倍増処理は、必要があれば、当該範囲が少なくとも当該所定の最小サイズになるまで連続して(2回以上)行うことができる。この時点で、出力符号化データビットが生成され、これにより、(複数の場合、それぞれの)倍増動作、すなわち、サイズ増加動作が行われたことが示される。別のステップにおいて、次の入力データビット又は値と共に使用するために、又は当該入力データビット又は値に関して(いくつかの実施形態では、符号化されるデータビット又は値の次のグループに関して)、当該コンテキストが修正される(すなわち、いくつかの実施形態では、コンテキスト変数が修正される)。これは、現在のコンテキスト及び現在の「最も可能性の高いシンボル」の識別子(コンテキストによりどちらが現在0.5より高い確率を有するかが示されていたとしても、1又は0)を新しいコンテキスト値のルックアップテーブルへの指数又は新しいコンテキスト変数を得られる適切な数式への入力として用いて実行してもよい。いくつかの実施形態においては、コンテキスト変数の修正により、現在のデータ値のために選択されたサブレンジにおける一連のコード値の比率が増加する。
CABACエンコーダは、バイナリデータ、すなわち、0及び1の2つのシンボルのみで表されるデータに関して動作する。当該エンコーダは、既に符号化されたデータに基づいて、次のデータに対する「コンテキスト」、すなわち、確率モデルを選択するいわゆるコンテキストモデリング処理を実行する。コンテキストの選択は、既に復号化されたデータに基づいて、デコーダに渡される符号化データストリームに追加される(コンテキストを特定する)別のデータを必要とすることなく、デコーダにおいて同じ決定が行われるように決定論的な方法で実行される。
図17を参照して、符号化される入力データは、既にバイナリ形式でない限りバイナリコンバータ900に渡してもよい。データが既にバイナリ形式である場合、コンバータ900は(図のスイッチ910により)バイパスされる。本実施形態では、バイナリ形式への変換は、実際には、量子化変換係数データを一連のバイナリ「マップ」として表現することにより行う。バイナリマップについては後述する。
バイナリデータは、その後、(別々の経路として概略的に示されているが、後述するいくつかの実施形態では、わずかに異なるパラメータを用いるだけで同じ処理ステージで実際に実行することができる)「正規」経路及び「バイパス」経路の2つの処理経路のうちの1つにより処理してもよい。バイパス経路では、必ずしも正規経路と同じ形式のコンテキストモデリングを利用しないいわゆるバイパスコーダ920が用いられる。CABAC符号化のいくつかの例では、一連のデータを特に急速に処理する必要がある場合、当該バイパス経路を選択することができる。しかしながら、本実施形態では、いわゆる「バイパス」データの2つの特徴について言及する。1つ目の特徴は、バイパスデータは、50%の確率を表す固定コンテキストモデルを利用するだけでCABACエンコーダ(950,960)により処理されることである。2つ目の特徴は、バイパスデータは、一定のカテゴリーのデータに関するということである。当該データの特定例は、係数符号データである。バイパス経路を選択しない場合、図に示すスイッチ930,940により正規経路が選択される。これには、コンテキストモデラ950によって処理され、続いて符号化エンジン960によって処理されるデータが含まれる。
図17に示すエントロピーエンコーダは、ブロック全体が0値のデータから構成される場合、データのブロック(すなわち、例えば、残差画像のブロックに関する係数のブロックに対応するデータ)を単一値として符号化する。このカテゴリーに含まれない各ブロック、すなわち、少なくともいくつかの非ゼロのデータを含むブロックに対しては、「重要性マップ(significance map)」を作成する。重要性マップは、符号化されるデータのブロックにおける各位置に対して、ブロック内の対応する係数が非ゼロであるか否かを示す。バイナリ形式である重要性マップデータ自体は、CABAC符号化される。重要性マップを利用することは、重要性マップによってゼロであると示される大きさの係数に対してデータを符号化する必要はないため、圧縮に役立つ。また、重要性マップには、ブロックにおける最後の非ゼロ係数を示す特別なコードを含めることもできる。これにより、最後の高周波数/後置ゼロ(トレーリングゼロ)係数の全てを符号化から省略することができる。符号化ビットストリームにおいて、重要性マップの後には、重要性マップにより規定される非ゼロ係数の値を定義するデータが続く。
また、別のレベルのマップデータも作成され、CABAC符号化される。その一例としては、重要性マップによって「非ゼロ」であると示されたマップ位置における係数データが実際には「1」の値を有するか否かをバイナリ値(1=yes,0=no)として定義するマップがある。他のマップは、重要性マップによって「非ゼロ」であると示されたマップ位置における係数データが実際には「2」の値を有するか否かを規定する。さらに別のマップは、重要性マップによって当該係数データが「非ゼロ」であると示されたこれらマップ位置に対し、当該データが「3以上の」値を有するか否かを示す。また、さらに別のマップは、「非ゼロ」として特定されたデータに対して、(+に対して1、−に対して0、あるいはその逆、等の所定のバイナリ表記を用いて)データ値の符号を示す。
いくつかの実施形態では、重要性マップ及びその他のマップは、例えば、スキャン部360により量子化変形係数から生成され、ジグザグスキャン処理(又はイントラ予測モードに係るジグザグ、水平ラスター、及び垂直ラスタースキャンから選択されたスキャン処理)を受け、その後、CABAC符号化される。
いくつかの実施形態では、HEVC CABACエントロピーコーダは、以下の処理によりシンタックス要素を符号化する。
TU内において(スキャン順に)最後の重要係数の位置を符号化する。
各4×4係数グループ(これらグループは逆スキャン順に処理される)に対して、当該グループが非ゼロ係数を含むか否かを示す重要係数グループフラグを符号化する。このフラグは、最後の重要係数を含むグループには必要なく、(DC係数を含む)左上のグループに対して1であると仮定される。当該フラグが1である場合、そのグループに関する以下のシンタックス要素をそれに続いて直ちに符号化する。
重要性マップ:
グループにおける各係数に対して、当該係数が重要である(非ゼロ値を有する)か否かを示すフラグを符号化する。最後の重要位置で示される係数に対して、フラグは必要ない。
2以上マップ:
重要性マップの値が1である(グループの終端から逆に数えて)8つまでの係数に対して、その大きさが2以上であるか否かを示す。
3以上マップ:
2以上マップの値が1である(グループの終端に最も近い)1つの係数に対して、その大きさが3以上であるか否かを示す。
符号ビット:
全ての非ゼロ係数に対して、確率が等しいCABACビンとして符号ビットを符号化する。(逆スキャン順における)最後の符号ビットは、場合により、隠れている符号ビットを用いる際にパリティから推測される。
エスケープコード:
初期のシンタックス要素により大きさが完全には表せない係数に対して、残りの係数をエスケープコードとして符号化する。
一般的に、CABAC符号化は、既に符号化されている他のデータに基づいて、符号化対象の次のビットに対して、コンテキスト、すなわち、確率モデルを予測することを含む。次のビットが、確率モデルにより「最も確率が高い」と特定されたビットと同じである場合、「次のビットは確率モデルと一致する」という情報は、非常に効率よく符号化することができる。それと比較して、「次のビットは確率モデルと一致しない」という情報を符号化するのは効率的ではない。したがって、エンコーダの良好な動作のために、コンテキストデータの由来は重要である。「適用可能(adaptive)」という用語は、(まだ符号化されていない)次のデータに良好に適合させようとして、そのコンテキスト、すなわち、確率モデルを適用、又は符号化の間に変更することを意味する。
簡単な例示として、書き言葉の英語において、「U」という文字は比較的珍しい。しかしながら、「Q」という文字の直後に位置する文字では、「U」は実際、一般的に用いられる。したがって、確率モデルは「U」の確率を非常に低い値に設定する可能性があるが、現在の文字が「Q」であれば、次の文字としての「U」に対する確率モデルは、非常に高い確率値に設定することができる。
本構成では、少なくとも重要性マップ及び非ゼロ値が1又は2であるか否かを示すマップに対してCABAC符号化を行う。これらの実施形態においてバイパス処理はCABAC符号化と同一であるが、確率モデルは1及び0の等しい(0.5:0.5)確率分布で固定されるという事実に対しては、少なくとも符号データ及び値が2を超えるか否かを示すマップに対して用いられる。2を超える値として特定されたこれらデータ位置に対して、いわゆるエスケープデータ符号化を個別に実行して、そのデータの実際の値を符号化することができる。この符号化は、ゴロムライス符号化技術を含んでもよい。
CABACコンテキストモデリング及び符号化処理は、WD4:Working Draft 4 of High-Efficiency Video Coding, JCTVC-F803_d5, Draft ISO/IEC 23008-HEVC; 201x(E) 2011-10-28に詳細に記載されている。
ここで、CABAC処理についてより詳細に説明する。
少なくとも提案されているHEVCシステムで使用される限り、CABACは、符号化対象の次のビットに関する「コンテキスト」、すなわち確率モデルを得ることを含む。コンテキスト変数(CV:context variable)で定義されるコンテキストは、当該ビットを符号化する方法に影響を与える。一般的に、CVによって高確率予測値と定義される値と次のビットとが同一である場合、そのデータビットを定義するのに必要な出力ビットの数を低減する観点で利点がある。
符号化処理には、符号化対象のビットをコード値の範囲にある位置にマッピングすることが含まれる。コード値の範囲は、図18Aに、下限のm_Lowから上限のm_highまでの一連の隣接整数として概略的に示されている。これら上限値と下限値との差はm_rangeであり、m_range=m_high−m_Lowである。以下に説明する様々な技術により、基本的なCABACシステムにおいて、m_rangeは128から254の間に制限される。より大きなビット数でm_rangeを表す別の実施形態では、m_rangeは256から510の間に制限されてもよい。m_Lowはいかなる値も取り得る。(例えば、)ゼロからスタートすることもできるが、後述の符号化処理の一部として変化し得る。
コード値m_rangeの範囲は、コンテキスト変数に関して定義される境界1100により2つのサブレンジに分割される。当該境界の定義は次の通りである。
境界=m_Low+(CV*m_range)
したがって、コンテキスト変数により、全範囲は2つの補足サブレンジ、すなわち、一連のコード値のサブ位置に分割される。各サブレンジに割り当てられた一連のコード値の比率は、変数CVによって決定され、1つのサブレンジは、ゼロの(次のデータビットの)値と関連付けられ、他のサブレンジは、1の(次のデータビットの)値と関連付けられる。範囲の分割は、符号化対象の次のビットに対する2つのビット値のCVの生成により仮定される確率を表す。したがって、ゼロの値に関連するサブレンジが全範囲の半分より小さい場合、これは、次のシンボルとしてのゼロの可能性が1の可能性よりも少ないと考えられることを示す。
考えられるデータビット値にサブレンジがどの方法を適用するかを定義するために、様々な確率が存在する。1つの例では、範囲の下側の領域(すなわち、m_Lowから境界まで)が、従来、ゼロのデータビット値に関連があるとして定義される。
2以上のビットが単一の動作で符号化される場合、符号化対象の入力データの考えられる各値に対応するサブレンジをもたらすように3以上のサブレンジを提供することができる。
エンコーダ及びデコーダは、どのデータビット値の確率が低いか(多くの場合、「最小確率シンボル(LPS:least probable symbol)と称される)についての記録を維持する。CVはLPSを指す。したがって、CVは常に0から0.5の値を表す。
ここで、次のビットは、境界により分割される時に、範囲m_rangeにマッピングされる。これは、以下に詳細に説明する技術を用いてエンコーダ及びデコーダにおいて確定的に行われる。次のビットが0である場合、m_Lowから境界までのサブレンジ内の位置を表す特定のコード値がそのビットに割り当てられる。次のビットが1である場合、境界1100からm_highまでのサブレンジにおける特定のコード値がそのビットに割り当てられる。これは、いくつかの実施形態において現在の入力データビットの値に係る一連のコード値の複数のサブレンジの1つを選択する技術の一例、及びいくつかの実施形態において現在の入力データ値を選択されたサブレンジの範囲内のコード値に割り当てる技術の一例を表している。
下限m_Low及び範囲m_rangeは、その後、割り当てられたコード値(例えば、割り当てられたコード値がどのサブレンジに入るか)及び選択されたサブレンジのサイズに基づいて、一連のコード値を修正するように再定義される。符号化されたばかりのビットがゼロである場合、m_Lowは変化しないが、m_rangeはm_range*CVと等しくなるように再定義される。符号化されたばかりのビットが1である場合、m_Lowは、境界位置に移動させられ(m_Low+(CV*m_range))、m_rangeは、境界とm_highとの差分(すなわち、(1−CV)*m_range)として再定義される。
このような修正を行った後、一連のコード値が所定の最小サイズより小さい(例えば、m_rangeが少なくとも128)か否かを検出する。
これら変形例は、図18B及び図18Cに概略的に示されている。
図18Bにおいて、データビットは1であり、そのため、m_Lowは以前の境界の位置に移動している。これにより、次のビット符号化配列で使用するための修正した一連のコード値が提供される。なお、いくつかの実施形態では、CVの値は、符号化されたばかりのビットの値に関して次のビット符号化のために少なくとも部分的に変えられる。これが、本技術が「適用可能」コンテキストを指す理由である。CVの修正値を利用して、新しい境界1100'を生成する。
図18Cにおいて、0の値が符号化される。したがって、m_Lowは変化しないが、m_highは、以前の境界の位置に移動させられる。値m_rangeは、m_high−m_Lowの新しい値として再定義又は修正される。
これにより、本例において、m_rangeが(128等の)最小可能値を下回ることになる。この結果が検出されたとき、値m_rangeは再正規化又はサイズ増加される。これは、本実施形態において、128から256の必要な範囲にm_rangeを修復するのに必要な限り何度でも倍増、すなわち、左に1ビットシフトされたm_rangeで表される。この一例を、図18Dに示す。図18Dは、必要な制限に準拠するように倍増した図18Cの範囲を表す。新しい境界1100''は、CVの次の値及び修正したm_rangeに由来する。なお、m_rangeが再正規化される場合、m_Lowも同様に再正規化又はサイズ増加される。これは、m_Lowとm_rangeとの比率を同一に維持するために行われる。
このようにして範囲を倍増する必要があるときはいつでも、出力符号化データビットを各再正規化ステージに対して1つずつ生成する。
このようにして、間隔m_range及び下限m_Lowは(デコーダで再生できる)CV値及び符号化ビットストリームの適応に基づいて、連続して修正され、再正規化される。一連のビットが符号化された後、得られた間隔及び再正規化ステージの数により、符号化ビットストリームは一意に定義される。このような最後の間隔を識別しているデコーダは、原理上、符号化データを再構築することができる。しかしながら、基本的な計算により、実際には、デコーダに間隔を定義する必要はないが、その間隔内にある1つの位置を定義する必要があることが実証されている。これが、エンコーダで維持されデータ符号化の終了時にデコーダに渡される、割り当てコード値の目的である。
簡単な例を示すために、100の間隔に分割された確率空間について考える。この場合、m_Lowは確率空間の下部を表し、0及びm_Rangeは、そのサイズ(100)を表す。便宜的に、コンテキスト変数が(バイパス経路に関して)0.5に設定されると仮定すると、確率空間は50%の固定確率でバイナリビットを符号化するために用いられることになる。しかしながら、コンテキスト変数の適用可能値を用いる場合、エンコーダ及びデコーダにおいて同じ適応処理が行われるように、同じ原理が適用される。
第1のビットに対して、各シンボル(0又は1)は50のシンボル範囲を有する。入力符号0は(例えば、)0から49(49を含む)までの値を割り当てられ、入力シンボル1は(例えば、)50から99(99を含む)までの値を割り当てられる。1が符号化対象の第1のビットである場合、ストリームの最後の値は50から99までの範囲に入る必要がある。したがって、m_Lowは50となり、m_Rangeも50となる。
第2のビットを符号化するために、当該範囲は25のシンボル範囲にさらに分割される。0の入力シンボルは50から74の値を取り、1の入力シンボルは75から99の値を取る。以上のように、第2のビットとしてどのシンボルが符号化されても、最後の値は50から99までの範囲の値であり、第1のビットが保存される。しかしながら、第2のビットは同一の数字に符号化されている。同様に、第2のビットが第1のビットと異なる確率モデルを用いた場合でも、分割される範囲は50から99であるので、第1のビットの符号化に影響を及ぼさない。
この処理は、各入力ビットに対して、エンコーダ側で続行され、必要なときはいつでも、例えば、m_Rangeが50を下回ったことに応答して、m_Range及びm_Lowを再正規化(例えば、倍増)する。符号化処理の終了時(ストリームが終了するとき)までに、最後の値がストリームに書き込まれる。
デコーダ側では、最後の値がストリームから読み出される(したがって、m_Valueと呼ぶ)。例えば、その値は68である。デコーダは、最初の確率空間に分割された同一のシンボル範囲を適用し、どのシンボル範囲にあるか確認するため、その値を比較する。68は50から99までの範囲にあるため、1を第1のビットに対するシンボルとして復号化する。エンコーダと同一の方法により分割された第2の範囲を適用し、68は50から74までの範囲にあるので、例えば、0を第2のビットとして復号化する。
実際の処理においては、エンコーダがm_Valueから各復号化シンボルの範囲の最小値を減算する(この場合、m_Valueから50が減算され、差が18となる)ことによりm_Lowを維持するので、デコーダはm_Lowを維持しなくてもよい。このシンボル範囲は、その後、常に0から(m_range−1)範囲の細分区分となる(したがって、50から74までの範囲は0から24となる)。
このように、たとえ2ビットのみが符号化されたとしても、エンコーダは50から74までの範囲のあらゆる最終値を取ることができ、当該2ビットは同じ2ビットの「10」(1の後に0)に復号化されることが重要である。別のビットを符号化する場合にのみ、より高い精度が求められ、実際には、HEVCエンコーダは常に当該範囲の最小値の50を取る。本願において説明される実施形態は、残りのビットの値が何であるかに関わらず、適切に設定されたときに最終値が正確に復号化されることを保証する一定のビットを発見し、他の情報を伝達するために当該残りのビットを解放することにより未使用の範囲を利用しようとする。例えば、上述のサンプル符号化において、第1の数字が6(又は5)に設定された場合、第2の数字に関わらず、最終値は常に50から74までの範囲にある。したがって、第2の数字を使用して、他の情報を伝達することができる。
以上のように、終わりのないビットのストリームを、同じ確率範囲(所与の無限精度比)を用いて繰り返し分割することにより符号化することができる。しかしながら、実際には無限精度は不可能であり、非整数は避けられる。このため、再正規化を行う。50から74までの範囲で第3のビットを復号化する場合、当該シンボル範囲は、通常、それぞれ12.5間隔を有する必要がある。しかしながら、その代わりに、m_Range及びm_Lowを倍増(そうでなければ、公約数で乗算)して、それぞれ、50及び100とすることができ、当該シンボル範囲は、100から149までの範囲の細分区分、すなわち、それぞれ25間隔となる。この動作は、最初の確率空間のサイズを遡及的に100から200に倍増することと等しい。デコーダは同一のm_Rangeを維持するので、エンコーダと同時に再正規化を適用することができる。
コンテキスト変数CVは、CV=63における(1%等の)下限値からCV=0における50%の確率まで、様々な確率を連続的に示す(一実施形態では)64通りの考えられる状態を有するものとして定義される。
適用可能システムにおいて、CVは、符号化対象のデータのブロックサイズによって異なる様々な周知の因子に従って、1ビットから次のビットに変更又は修正される。いくつかの例では、近隣及び以前の画像ブロックの状態を考慮してもよい。したがって、本明細書に記載の技術は、現在のデータ値に対して選択されたサブレンジにおける一連のコード値の比率を増加させるように、次の入力データ値に対して使用するためのコンテキスト変数を修正する例を示す。
サブレンジを選択し、コード値に現在のビットを割り当て、一連のコード値を修正し、当該一連のコード値が最小サイズより小さいか否かを検出し、コンテキスト変数を修正する機能は、全て、一緒に動作するコンテキストモデラ950及び符号化エンジン960により実行されてもよい。したがって、それらは図17において説明を容易にするために別々の要素として記載されているが、協働してコンテキストモデリング及び符号化機能を提供してもよい。しかしながら、さらに明確にするため、これらの動作及び機能をより詳細に示す図19を参照する。
割り当てコード値は、考えられるCVの値並びにm_rangeのビット6及びビット7の考えられる値それぞれに対して(なお、m_rangeのビット8は、m_rangeのサイズが限られるため、常に1である)、新しく符号化されたビットが関連するサブレンジにおけるコード値を割り当てられるべき位置又は位置のグループを定義するテーブルから生成される。
図19は、上述の技術を用いたCABACエンコーダを示す概略図である。
CVは、CV抽出部1120により、(第1のCVの場合)開始又は(それ以後のCVの場合)修正される。コード生成部1130は、CVに従って現在のm_rangeを分割し、サブレンジを選択し、例えば、上述のテーブルを用いて、適切なサブレンジの割り当てデータコードを生成する。範囲リセット部1140は、上述のように一連のコード値を修正するように、選択されたサブレンジのm_rangeにm_rangeをリセットする。正規化部1150は、得られたm_rangeの値が最小許容値を下回っているか否かを検出し、必要に応じて、m_rangeを1回又は2回以上、再正規化する。このような再正規化動作に対して、各出力符号化データビットが出力される。上述のように、処理の終了時に、割り当てコード値も出力される。
図20に概略的に示すデコーダでは、CVは、エンコーダにおけるCV抽出部1120と同様に動作するCV抽出部1220により、(第1のCVの場合)開始又は(それ以後のCVの場合)修正される。コード適用部1230は、CVに従って、現在のm_rangeを分割し、当該データコードがどのサブレンジにあるかを検出する。範囲リセット部1240は、割り当てコード値及び選択されたサブレンジのサイズに基づいて一連のコード値を修正するように、選択されたサブレンジのm_rangeにm_rangeをリセットする。必要に応じて、正規化部1250は、受信したデータビットに応答して、m_rangeを正規化する。
いくつかの実施形態では、CABACストリームを終了させる技術が提供される。これらの実施形態については、コード値の範囲が(上述の128ではなく)最大値である512を有し、そのため、当該範囲の上半分、すなわち、256から510に制限される1つ例のシステムに関連して説明する。
当該技術により引き起こされる損失は、平均1.5ビットである(すなわち、従来のストリーム終了技術が引き起こす損失よりもはるかに少ない)。平均損失が1ビットである第2の変形例に係る方法も提案される。これらの技術の適用には、IPCM(非周波数分離)データの送信前のCABACストリームの終了、及びスライス毎の行のためのストリームの終了が含まれることが示唆されている。当該技術は、ストリームの終了の際にCABAC変数を正確な範囲のあらゆる値に設定できるという認識に基づいている。したがって、CABAC変数は、多くの後置(最下位ビット)ゼロを有する値に設定される。その結果、当該値がデータストリームに流れていく際、ゼロは無視できるので効率的である。
現在の技術では、CABACストリームを終了させると、8ビットがデータ・ストリームに流れる(すなわち、当該8ビットが損失又は無駄になる)。この技術は、各LCU又は画像スライスの後(すなわち、特定の各画像サブ領域に関する1群のデータ値を符号化した後)で、イントラフレームを終了し、係数バイパスデータ(符号ビット/エスケープコード)がRAW形式でビットストリームに配置される例として示される。
CABACストリームを終了させる処理は、各スライスの終端においてIPCMデータに先立ち適用される。いくつかの実施形態では、(便宜的に)この処理は、当該ストリームが終了される確率が平均0.54%で固定されると仮定する(データ値(1又は0)を符号化する場合、現在のm_rangeは、1又は0の確率をそれぞれ示す2つのシンボル範囲に分割される。特別な「終端ストリームフラグ」値について、1に対するシンボル範囲は常に2である。したがって、1であるデータ値の確率は、現在のm_rangeの値に依存する。いくつかの実施形態では、上述のように、m_rangeは256から510までの範囲で変化してもよいので、終了確率は、2/510=0.3922%及び2/256=0.7813%の範囲で変化する)。
エンコーダに対して、この処理は、以下のように行われる。
・ストリームが終了されない場合、CABAC範囲m_rangeは2ずつ減らされ、CABACエンジンは、必要に応じて、1つの場所で再正規化され(すなわち、m_Low及びm_rangeが再正規化される)、現在のCABACストリームにおける処理が続行される。
・ストリームが終了される場合、CABAC「m_Low」は、「範囲−2」ずつ増やされ、当該範囲は2に設定され、CABACエンジンは、7カ所で再正規化され、それに続いて、バイナリ「1」を出力する。この処理は、8カ所の再正規化と等しく、再正規化された値は奇数にさせられる。
上記処理が理想的でない、すなわち、ストリームの確率が変化し、又はより高い確率で固定され、又は確実(1の確率)である場合もある。
いくつかの実施形態によれば、たった2回の再正規化で、CABACストリームを速やかに終了できる方法が提供される。この方法における損失は(平均で)1.5ビットであり、デコーダ及びエンコーダの複雑性への影響は無視できるほど小さい。CABACデコーダの複雑性は増加するものの、オーバーヘッドをたった1ビットに減らすことができる変形例の方法も示されている。当該2つの方法は、終了の変数確率がある場合、一般的な適用可能コンテキスト変数とともに用いることができる。また、当該2つの方法は、(非適用可能コンテキスト変数と類似した)固定確率メカニズムとともに用いることもできる。
なお、上述のように、m_Low及びm_Rangeは一緒に再正規化される。
1 アルゴリズム
1.1 方法
エンコーダのステップは次の通りである。
m_Low=(m_Low+128)&〜127{又はm_Low=(m_Low+127)&〜127}
m_Lowの再正規化を2ステージ強制的に行い、test_write_out()を呼び出す[その値をストリームに書き込む]。
次のCABACストリームの符号化に先立ち、m_Rangeを510,m_Lowを0に設定する。
注記:&はAND操作であり、〜はバイナリ反転を示す(したがって、〜127は10進法の127に対応するバイナリ値をバイナリ反転させたものである。その結果、(最下位ビット又は1に等しいLSBを複数有する)10進法における127等の数字のバイナリ反転を伴うAND操作は、得られる値のLSBの数をゼロに設定することと等しくなる)。test_write_out()関数は、m_Lowの先端(MSB終端)の任意のビットが出力ストリームに送信されるのに適しているか否かを確認し、適している場合、それらを書き込む。上述の擬似コードに関連して、「強制再正規化」により作成された新しいビットが、この操作により書き込まれる。
デコーダのステップは次の通りである。
入力ストリームを7ビット戻す(すなわち、読み込み位置を7ビット移動させる)。
次のCABACストリームの復号化に先立ち、m_Rangeを0に設定し、ビットストリームからm_Valueを読み込む。
この方法は、デコーダ及びエンコーダに対する処理の影響が少ない。
なお、m_Lowに関して、繰り返しm_Lowに追加することで、エンコーダはストリームを生成する。デコーダは、エンコーダの最終結果で開始し、それから繰り返し減算することで、当該ストリームを読み出す。デコーダは、m_Lowではなくストリーム「m_uiValue」(又は、本明細書の注記にあるm_Value)から読み出したビットを呼び出す。当該ビットは、ビットストリームから読み込むべきものである。これは、いくつかの実施形態において、デコーダがm_uiValueと同様にm_Lowを保持する必要があり、エンコーダの動作を把握している場合に関連する。この場合、エンコーダのm_Lowと全く同じ方法で、m_Lowはデコーダで生成される。
変形例に係る方法
この方法では、デコーダがm_Lowを保持する必要があるので、現在のデコーダの複雑性が増加する。m_Lowの維持が他の提案で必要になる場合、複雑性の増加量は最小になる。
エンコーダのステップは次の通りである。
test256を(m_Low+255)&〜255とする。
(test256+256<m_Low+m_Range)の場合、
m_Low=m_test256
m_Lowの再正規化を1ステージ強制的に行い、test_write_out()を呼び出す。
それ以外の場合(上述のように)
m_Low=(m_Low+128)&〜127{又はm_Low=(m_Low+127)&〜127}
m_Lowの再正規化を2ステージ強制的に行い、test_write_out()を呼び出す。
次のCABACストリームの符号化に先立ち、m_Rangeを510,m_Lowを0に設定する。
デコーダのステップは次の通りである。
test256を(m_Low+255)&〜255にする。
(test256+256<m_Low+m_Range)の場合、
ストリームを8ビット戻す
それ以外の場合(上述のように)
ストリームを7ビット戻す
次のCABACストリームの復号化に先立ち、m_Rangeを0,m_Lowを0に設定し、ビットストリームからm_Valueを読み出す。
理論
CABACエンコーダについて、m_Lowに連結されるストリームに書き込まれ(又は記憶され)るデータは、最終出力が取ることができる最小値を示すnビット値のlowである。最大値highは、low及びm_Rangeの合計であり、エンコーダによって256(256を含む)から511(511を除く)までの範囲に維持される変数である。ストリームの終端において、low(lowを含む)からhigh(highを除く)のあらゆる値を、復号化に影響することなく、最終出力値として選択することができる。復号化がn個のLSBの値に依存することなく行われる場合、当該n個のLSBは、ビットストリームの次のセクションから得られるデータで置き換えることができる。
vをlowからhighの値とすると、n個のLSBは0であり、最後のn個のLSBが1の場合、得られる値Vは、依然としてhighより小さい。「high−low」は少なくとも256なので、値vは、常に、0である少なくとも7個のLSBを有するlowからhighまでの範囲にある。すなわち、値vは、128で割り切れるlowからhighまでの範囲にある第1の値である。
これを実現する最も単純な方法は、一般的な2の累乗配列ルーチンである。例えば、v=(low+127)&〜127である。しかしながら、範囲は少なくとも256なので、v=(low+128)&〜127でも十分である(その結果、エンコーダは、わずかに小さくなる)。
ビットストリームの現在の部分について、エンコーダは、下位7ビットを除いて、値「v」を出力する。これは、m_Lowを2箇所で再正規化することで実現される。ビットストリームの終端において、デコーダは、ビットストリームの次のセクションから7ビット読み込み、したがって、当該ビットストリームを7ビット「戻す」必要がある。
ストリームを完全に復号化するために、下位8ビットが必要ない場合もある。最も簡単な実例は、「m_Low=0」であり、これらは代替アルゴリズムにより調査される。当該代替アルゴリズムにおいて、0のLSBを8個有するlowからhighまでの範囲にある値vが計算され、対応する値Vが存在するか否かを確認するためにtestが適用される。この決定処理には、low及びhighにおけるテストが必要である。また、デコーダも同じ決定をしなければならないので、当該デコーダはm_Lowを追跡する必要がある。
エンコーダアルゴリズムの両方のバージョンにおいて、7ビットパスに対して異なるビットストリームをもたらす選択があるが、当該選択は同じデコーダで復号化することができる。
上述の図19を参照して、ユニット1120及び1130は、一連のコード値の複数の補足サブレンジの1つを選択するいくつかの実施形態のセレクタ及び現在の入力値をコード値に割り当てるデータ割り当て部を指す。ユニット1140は、一実施形態のデータ修正部を表す。ユニット1150は、一連のコード値が最小サイズより小さいか否かを検出する一実施形態の検出部を表し、これにより当該検出部の他の機能を実行する。また、ユニット1150は、上述及び下記のデータ終了機能を実行し、特に、いつストリームを終了するかに関する決定を行うことで、一実施形態のデータ終了部を表す。
上述の図20を参照して、ユニット1220、1230、1240、及び1250は、これらのユニットに関して上述の機能を実行するよう動作可能である点で、まとめていくつかの実施形態のポインタコントローラ及び設定部を表す。
適用例
上記構成について考えられる適用例は、以下のものを含む。
1.特に、確率が0.54%よりも著しく高いことがある「スライス毎の行(row-per-slice)」スタイルの構成におけるスライスに対する最後の符号化LCUの終了。
この構成において、いくつかの実施形態では、ビデオデータを表す連続入力データ値を符号化するデータ符号化方法が提供される。当該方法は、現在の入力データ値に係る一連のコード値の複数の補足サブレンジの1つを選択し(当該一連のコード値に関連するサブレンジの比率は、当該入力データ値と関連するコンテキスト変数によって定義される)、現在の入力データ値を選択されたサブレンジ内のコード値に割り当て、割り当てられたコード値及び選択されたサブレンジのサイズに基づいて一連のコード値を修正し、一連のコード値が所定の最小サイズより小さいか否かを検出し、小さい場合、少なくとも当該所定の最小サイズとなるまで一連のコード値のサイズを連続的に増加させ、各サイズ増加動作に応答して符号化データビットを出力し、現在のデータ値について選択されたサブレンジ内の一連のコード値の比率を増加させるように次の入力データビット又は値に対して使用するためにコンテキスト変数を修正し、他のビデオデータを参照することなく符号化されたビデオデータのスライス内にあるビデオデータの一連のブロックに対応する1群の入力データ値を符号化した後、一連のコード値の終端を定義する値をゼロに等しい複数の最下位ビットを有する値に設定し、一連のコード値のサイズを増加させ、一連のコード値の終端を定義する値を出力データに書き込むことで、出力データを終了することを含む。
2.考えられる最後のスライスのLCUが確実になった後の、スライスに対する考えられる最後のLCUの終了。
この構成において、いくつかの実施形態では、ビデオデータを表す連続入力データ値を符号化するデータ符号化方法が提供される。当該方法は、現在の入力データ値に係る一連のコード値の複数の補足サブレンジの1つを選択し(一連のコード値に関連するサブレンジの比率は、入力データ値に関連するコンテキスト変数で定義される)、現在の入力データ値を選択されたサブレンジ内のコード値に割り当て、割り当てコード値及び選択されたサブレンジのサイズに基づいて一連のコード値を修正し、一連のコード値が所定の最小サイズより小さいか否かを検出し、小さい場合、少なくとも当該所定の最小サイズまで一連のコード値のサイズを連続的に増加させ、各サイズ増加動作に応答して符号化データビットを出力し、現在のデータ値について選択されたサブレンジにおける一連のコード値の比率を増加するように、次の入力データビット又は値に対して使用できるようにコンテキスト変数を修正し、他のビデオデータを参照することなく符号化されるビデオデータのスライス全体を表す1群の入力データ値を符号化した後、一連のコード値の終端を定義する値をゼロに等しい複数の最下位ビットを有する値に設定し、一連のコード値のサイズを増加させ、一連のコード値の終端を定義する値を出力データに書き込むことにより、出力データを終了させることを含む。
3.可能であればコンテキスト変数とともに行うIPCMデータに先立つ終了。
この構成において、いくつかの実施形態では、周波数分離ビデオデータを表す連続入力データ値を符号化するデータ符号化方法が提供される。当該方法は、現在の入力データ値に係る一連のコード値の複数の補足サブレンジの1つを選択し(一連のコード値に関連するサブレンジの比率は、当該入力データ値と関連するコンテキスト変数によって定義される)、現在の入力データ値を選択されたサブレンジ内のコード値に割り当て、割り当てられたコード値及び選択されたサブレンジのサイズに基づいて、一連のコード値を修正し、一連のコード値が所定の最小サイズより小さいか否かを検出し、小さい場合、当該一連のコード値のサイズが少なくとも当該所定の最小サイズとなるまで連続的に増加させ、各サイズ増加動作に応答して符号化データビットを出力し、現在のデータ値について選択されたサブレンジ内の一連のコード値の比率を増加させるように、次の入力データビット又は値に対して使用するために、コンテキスト変数を修正し、符号化対象の次のグループのデータ値が非周波数分離ビデオデータを表すように1群の入力データ値を符号化した後、一連のコード値の終端を定義する値をゼロに等しい複数の最下位ビットを有する値に設定し、一連のコード値のサイズを増加させ、一連のコード値の終端を定義する値を出力データに書き込むことによって、出力データを終了することを含む。
4.「未処理ビット」メカニズムが長くなるのを防ぐためのストリームの終了。
この構成において、いくつかの実施形態では、連続入力データ値を符号化するデータ符号化方法が提供される。当該方法は、現在の入力データ値に係る一連のコード値の複数の補足サブレンジから1つを選択し(一連のコード値に関連するサブレンジの比率は、当該入力データ値と関連するコンテキスト変数によって定義される)、現在の入力データ値を選択されたサブレンジ内のコード値に割り当て、割り当てられたコード値及び選択されたサブレンジのサイズに基づいて、一連のコード値を修正し、一連のコード値が所定の最小サイズより小さいか否かを検出し、小さい場合、一連のコード値のサイズを少なくとも当該所定の最小サイズとなるまで連続的に増加させ、各サイズ増加動作に応答して符号化データビットを出力し、現在のデータ値について選択されたサブレンジにおける一連のコード値の比率を増加させるように、次の入力データビット又は値に対して使用するためにコンテキスト変数を修正し、異なる符号化技術により符号化される一連のデータ値が所定のサイズを超えているか否かを検出し、超えている場合、一連のコード値の終端を定義する値をゼロに等しい複数の最下位ビットを有する値に設定し、一連のコード値のサイズを増加させ、一連のコード値の終端を定義する値を出力データに書き込むことにより、出力データを終了することを含む。
本明細書の以降の説明は、上述したエンコーダ及びデコーダ等の動作を、よりビデオ解像度が高く、それに応じて(負のQPを含む)QPが低い動作に発展させることに関する。コーデックが高いビット深さを正確にサポートする場合、動作QPは、場合により、低い必要がある。HEVCにより定義されるエンコーダ及びデコーダ等に存在する内部の精度制限により引き起こされる可能性がある、考えられる誤差源について説明する。これら精度に変化を与えることで、誤差を緩和することができ、これにより、HEVCの動作範囲が拡張される。また、エントロピー符号化における変化も提示される。
本願の出願時点において、HEVCバージョン1は、8ビット及び10ビットのコーデックを表す。バージョン2は、12ビット及び14ビットの動作を含むことになっている。入力データビット深さを14まで可能にするために試験ソフトウェア又は実証ソフトウェアが書き込まれているが、14ビットを符号化するコーデックの能力は、コーデックが8ビット又は10ビット解像度データを処理する方法に対応するとは限らない。いくつかの例では、内部処理により、解像度の事実上の損失を招くノイズが発生することがある。例えば、14ビットの入力データに対するピーク信号対雑音比(PSNR:peak signal to noise ratio)が非常に低ければ、最下位2ビットはノイズに対して事実上低減され、コーデックは12ビットの解像度でのみ事実上動作する。したがって、出力データの事実上の(有効な)解像度を著しく減少させることに関して多くのノイズ、誤差、又は他の副作用を発生させることなしに、高解像度入力データ(例えば、12ビット又は14ビット解像度入力データ)を使用できるようにする内部動作機能をシステムに持たせようとすることは適切である。
「ビットデプス」という用語及び変数bitDepthは、ここでは、入力データ及び/又はコーデック内で実行されるデータ処理の(文字に係る)解像度を示すために使用される(後者は、HEVCソフトウェア実証モデル用語を用いた「内部ビットデプス」としても知られている)。例えば、14ビットのデータ処理に対して、bitDepthは14である。
8ビット及び10ビットのコーデックに関連して、正の範囲(0より大きい)の量子化パラメータ(QP)について説明する。しかしながら、入力データの解像度における(8を超える)各追加ビットに対して、最小可能QP(minQP)は、0よりも6小さくてもよい。すなわち、minQP=−6*(bitDepth−8)である。
変数「PSNR」又はピークSNRは、平均2乗誤差(MSE)及びビットデプスの関数として以下のように定義される。
PSNR=10*log10(((2bitDepth)−1)2/MSE)
以下に説明する図23から分かるように、コーデック実行例の内部処理ビットデプスがどのような値を取っても、一般的な傾向として、PSNR曲線は90dB付近でピークを迎える。(PSNR曲線のピークに対応するQPよりも)負のQPに対しては、実際、PSNRパフォーマンスが低下する。
PSNRの式を用いて、以下のような、所与のビットデプス及びMSEに対するPSNRの表が得られる。
14ビットのコーデックが、72.2dBのPSNRを実現できるのみである場合、各出力値は、対応する元の値の±4の範囲でのみ正確となる。したがって、2つの最下位ビットは、事実上のノイズであり、コーデックは、出力に2つの追加ランダムビットを追加した12ビットのコーデックと同等のものとなる(なお、この分析は、平均に基づくものであり、実際には、画像のいくつかの部分において、平均よりも良好又は低質のものが得られることがある)。
この議論を拡張して、純粋に数字上の方法でPSNRを比較すると、最善のシステムは、実際には、無損失な符号化を実行でき、無限のPSNR(MSE=0)を実現する8ビットシステムであると考えられる。しかしながら、これは最初にnビット(nはもともと、8ビットより大きい)から8ビットにビデオを丸める損失、あるいは切り取る損失を考慮していない。この手法は、以下の例によって一般化できる。
・無損失な(n−1)ビットシステムをnビットのデータを符号化するのに利用できる場合、出力において、観察されるnビットのMSEは(0+12)/2=0.5となる。
・無損失な(n−2)ビットシステムをnビットのデータを符号化するのに利用できる場合、出力において、観察されるnビットのMSEは(0+12+22+12)/4=1.5となる。
・無損失な(n−3)ビットシステムをnビットのデータを符号化するのに利用できる場合、出力において、観察されるnビットのMSEは(0+12+22+32+42+32+22+12)/8=5.5となる。
・無損失な(n−4)ビットシステムをnビットのデータを符号化するのに利用できる場合、出力において、観察されるnビットのMSEは(0+12+22+32+42+52+62+72+82+72+62+52+42+32+22+12)/16=21.5となる。
したがって、前述の例に戻ると、14ビットシステムが21.5又はそれより少ない(71.0dBに等しい)MSEを実現しない場合、及び無損失な10ビットシステムのビットレートが類似している場合、数字的に言って、10ビットのみが事実上符号化される。
「m」のMSEを有する損失の多い、低いビットデプスの(n−r)ビットシステムを考慮する。このシステムを用いてより高いビットデプスのnビットのデータを符号化する場合、(2r)2mのMSEが与えられる。
例えば、損失の多い(n−1)ビットシステムに対して、nビットシステムにおけるMSEは4m。損失の多い(n−2)ビットシステムに対して、nビットシステムにおけるMSEは16m。損失の多い(n−3)ビットシステムに対して、nビットシステムにおけるMSEは64m。損失の多い(n−4)ビットシステムに対して、nビットシステムにおけるMSEは256m。
したがって、損失の多い低いビットデプスのシステムがより高い(n−ビット)ビットデプスのデータを符号化する場合について、一般的にnビットドメインにおいて観察されるMSEに影響を与えるのは、主にその損失である。したがって、単純なPSNR図を用いて、確実に品質を比較することができる。
(本願の出願時における)HEVCエンコーダの実行は、(図23に示すように)90dBでピークを迎える。これは、11ビットデータの符号化には適切であると考えられる。この動作点において、これ以上の改善が得られるか否かについての問題については、以下に説明する。
最初に、誤差の原因について説明する。
コアHEVCシステム(バージョン1)は、8ビット及び10ビット動作に対して設計されている。ビット数が増えるにつれ、システムの部分の内部精度が、誤差、ノイズ、又は全解像度の事実上の損失につながる副作用の誤差の原因に関連性を有することがある。
図21は、HEVCエンコーダ等の上述のタイプのエンコーダを通過するデータのフローを簡単に示す概略図である。図21に示す形式で、この処理を要約する目的は、システムにおける動作解像度の制限の可能性を示すことである。なお、このため、全てのエンコーダの機能性を図21に示しているわけではない。なお、図21もデータセットの入力データ値(ビデオデータ値でもよい)を符号化する装置の例を示す。さらに、(上述のように)図21に示したもの等の転送符号化経路で使用される技術をエンコーダの補足逆復号化経路及びデコーダの転送復号化パスに用いてもよい。
一定のビットデプスの入力データ1300は、イントラ予測又はインター予測を実行して実際の入力画像から予測画像を減算する予測ステージ1310に供給され、これにより、一定のビットデプスの残差データ1320が生成される。したがって、ステージ1300は、一般的に、図5に示すユニット320及び310に対応する。
残差データ1320は、2D変換式における左右の行列乗算に対応する(ステージ1及びステージ2として表される)変換処理の複数のステージを含み、一定の解像度を有する1つ又は複数の組の変換行列1340に従って動作する変換ステージ1330により周波数変換される(変換は行列乗算処理により実行される)。MAX_TR_DYNAMIC_RANGEと称される変換処理の最大ダイナミックレンジ1350は、本処理において実行される計算に適用される。変換ステージの出力は、MAX_TR_DYNAMIC_RANGEに係る一連の変換係数1360である。変換ステージ1330は、一般的に、図5に示す変換部340に対応する。
係数1360は、その後、一般的に図5に示す量子化部350に対応する量子化ステージ1370に渡される。当該量子化ステージは、(いくつかの実施形態では、MAX_TR_DYNAMIC_RANGEと同じ)最大ダイナミックレンジENTROPY_CODING_DYNAMIC_RANGEのクリッピングを含む量子化係数・スケーリングリスト1380の制御のもと、乗算シフトメカニズムを用いてもよい。当該量子化ステージの出力は、(図示しないフルエンコーダにおいて)図5に示すスキャンユニット360及びエントロピーエンコーダ370によって表されたもの等のエントロピー符号化ステージに渡されるENTROPY_CODING_DYNAMIC_RANGEに係る一連の量子化係数1390である。
図21に関して記載された表記を用いて、様々な予測及びRQT(残差四分木)によって引き起こされるノイズ形成及びレート歪み最適化による量子化(RDOQ:rate distortion optimized quantisation)決定処理を(便宜的に)無視して、HEVCにおける計算ノイズの主な原因について以下に説明する。
[変換行列係数値]
理想的には、変換係数に適用される逆変換により、元の入力値を再生する。しかしながら、これは計算上の整数の機能により制限される。HEVCにおいて、変換行列係数は6つの分数ビットを有する(すなわち、これらは既に6の左シフトを有する)。
[各変換ステージ後のMAX_TR_DYNAMIC_RANGEへのシフト結果]
先の変換により、bitDepth+log2(size)ビットのサイズの値が得られる。第1ステージの変換後、ビットにおける係数の幅は、(追加ビットにより精度をより高く維持できるものの)少なくともbitDepth+log2(size)である。しかしながら、HEVCにおいて、これら中間物は、MAX_TR_DYNAMIC_RANGEを超えないように先の(エンコーダのみ)変換においてシフトされる。第2ステージにおいても同様である。逆変換において、各ステージの出力における値は、MAX_TR_DYNAMIC_RANGEにクリップされる。
MAX_TR_DYNAMIC_RANGEがbitDepth+log2(size)より小さい場合、先の変換により得られる値は、実際には、量子化ステージにおいて(右ではなく)左にシフトされ、15ビット(ENTROPY_CODING_DYNAMIC_RANGE)にクリップされる。実際には、ENTROPY_CODING_DYNAMIC_RANGEがbitDepth+log2(size)+1より小さい場合、クリッピングはQPが(4−(6*(bitDepth−8)))より小さい場合に実行される。
HEVCにおいて、32×32ブロックの係数はQP<−8のためにクリップされることもあるが、15のMAX_TR_DYNAMIC_RANGE(及びENTROPY_CODING_DYNAMIC_Range)が10ビットまでの動作に用いられる。また、内部精度のための上部空間が欠乏していると、低いQPに対して誤差が発生することもある。
[量子化の際に追加されるノイズ]
エンコーダ及びデコーダの量子化部及び逆量子化部は、量子化の際にノイズを追加させるものの、追加ノイズはスケーリングリストが適用される際に気付かずに追加されることがあり、また、アレイ「quantScales」及び「invQuantScales」において定義される量子化係数は必ずしも完全な逆数ではないので、気付かずに追加されることもある。
変換行列の精度及びMAX_TR_DYNAMIC_RANGEの効果について以下に説明する。
経験的データは、いわゆるSVTテストセット(4Kビデオからスケールダウンした16ビットで1920x1080 50p)からの5つのビデオシーケンスの符号化の(いわゆるイントラ符号化プロファイルに従った)分析により得られた。これらのシーケンスの中で、最初の150フレームのみが試験において使用された。Traffic_RGB(12ビットにおいて2560x1600 30p)と称される6番目の配列は、本願の出願時点でHEVCに適用可能な、一般的な範囲拡張(Range Extension)試験の条件によって定義される。
経験的テストにおいて、ファイル(入力データ)ビットデプスが試験中の内部ビットデプス(コーデックの入力ビットデプス)よりも小さかった場合、サンプルにパディングをした(LSBを0に設定した)。ファイルビットデプスが内部ビットデプスより大きい場合、サンプルを縮小し、丸めた。
以下の説明では、bitDepthを用いて入力データのビットデプスではなく内部ビットデプスについて記載している。16までの内部ビットデプス(bitDepth)を有するシステムについて考える。
図22は、図21に示すエンコーダシステムの経験的性能を内部ビットデプスの数で概略的に示す量子化パラメータ(QP)に対するビットレートのグラフである。図23は、QPに対するグリーンチャンネル(1つのチャンネルについて経験的データを収集する方が簡単であり、グリーンチャンネルは、視聴者にとって出力ビデオを最も視認し易いチャンネルであるため)のPSNRのグラフである。図22のグラフは、16ビット(QPは−48〜−26)、14ビット(QPは−24〜−14)、12ビット(QPは−12〜−2)、10ビット(QPは0〜10)及び8ビット(QPは12〜22)の処理に対するデータの合成により形成される。垂直ライン1400は、ビットデプスが変化する点を概略的に示す。図22における複数の曲線は、異なるテストシーケンスで得られる結果に対応する。
図22は、ビットレートが一般的にQPに対して単調に変化することを示している。
図23を参照して、bitDepth=8及びbitDepth=10に対するPSNRは、4以下(各曲線における1番右から3つのデータ点)のQPで明確に増加する。QP4において、8ビットに対する量子化約数は1(10ビットに対してQPは−8)であり、考えられる唯一の誤差源としてDCT及びIDCT並びに量子化及び逆量子化係数の間の不整合をもたらす。システムが無損失処理に向かうと、MSEはゼロに接近し、SNRは急上昇する。図24は、一連の異なる内部ビットデプス(8,10,12,14,16)における1つのテストシーケンスについてのビットレートに対するPSNRのグラフである。5つの曲線は、そのほとんどの範囲において相互にほぼ正確に重なっており、そのため、容易に区別することができない。
同様の動作点における10ビットシステムは、主に2つの最下位ビットにおいて誤差を有し、8ビットの精度のみを考慮すると無損失な処理に近づいていることを示す。しかしながら、本明細書において示すように、10ビットビデオを8ビットビデオに変換する動作についても考慮しなければならない。これは、低い精度を考慮すると隠れている(すなわち、経験テストにおける結果として明確に示されていないが、依然としてより高い全SNRをもたらす)1.5のMSEを追加することになる。
ピークSNRに対する内部精度に制限されないシステムにおいて、無損失処理に向かう増加は、QPが(4−(6*(bitDepth−8)))未満に減少する際の各bitDepthについて確認することができる。これは、MAX_TR_DYNAMIC_RANGE=21,ENTROIPY_CODING_DYNAMIC_RANGE=21ビット及び14ビット変換行列、RDOQ無効、及び変換スキップ無効のビットデプス(8,10,12,14,16)の範囲のビットレートに対するグリーンチャンネルのPSNRのグラフである図25に示されている。5つのカーブは、(8ビット曲線の)部分1420、(10ビット曲線の)部分1430、(12ビット曲線の)部分1440、(14ビット曲線の)部分1450、及び(16ビット曲線の)部分1460を除いて相互に重なっている。同じ数のビットについて、図24に示すものよりも著しく高いSNRが得られることが分かる。
経験的結果により、本発明のいくつかの実施形態では、変換行列の精度は、少なくともbitDepth−2であることが示された。図26は、様々な精度DCT行列と比較する、bitDepth=10及びMAX_TR_DYNAMIC_RANGE=17の1つのテストシーケンスのグリーンチャンネルのビットレートに対するPSNRのグラフである。
いくつかの実施形態では、MAX_TR_DYNAMIC_RANGEは、bitDepthよりも少なくとも(log2(size)の最小値である)5大きくすべきである。符号化効率をさらに改善するための追加精度について示した。
いくつかの実施形態では、ENTROPY_CODING_DYNAMIC_RANGEは、少なくともbitDepth(log2(size)の最大値に対して(4−(6*(bitDepth−8)))+5より小さいQPによって適用された「量子化因子」について1)よりも6大きくすべきである。最小QP値に対するクリッピングと関係ない他の実施形態では、ENTROPY_CODING_DYNAMIC_RANGEは、少なくともbitDepthよりも5(log2(size)の最小値)大きくすべきである。
16ビットシステムに対して、変換行列精度は、14に設定すべきであり、MAX_TR_DYNAMIC_RANGEは21に設定すべきであり、ENTROPY_CODING_DYNAMIC_RANGEは22に設定すべきである。より高い内部精度を有することが有害とは考えにくいので、これらパラメータについても異なるbitDepthsで試験し、同じ数のビットについては著しく高いSNRが得られ、精度を上昇させたシステムは16までのbitDepthsに適したPSNR/MSE動作点を有することを実証する結果を得た。
範囲拡張(Range Extensions)が全てのビットデプスに対する単一の新しいプロファイルの生成を意図している場合、上述のシステムは適切である。しかしながら、異なるプロファイルを異なる最大bitDepthsについて記載しようとする場合、異なるパラメータ値を有することは、最も高いプロファイルを必要としないシステムにおけるハードウェアの複雑性を低減するのに有用である可能性がある。いくつかの実施形態では、異なるプロファイルが変換行列精度、MAX_TR_DYNAMIC_RANGE及びENTROPY_CODING_DYNAMIC_RANGEについて異なる値を定義することがある。
他の実施形態では、プロファイルは、いくつか又は全ての変換行列精度、MAX_TR_DYNAMIC_RANGE及びENTROPY_CODING_DYNAMIC_RANGEの値を(選択基準となる実行コストを有する)エンコーダ、又はbitDepth等のサイド情報の機能によって可能値のリストから選択することを可能にする。しかしながら、変換行列精度が変化し、そのため別の実施形態においてたった1つの変換行列精度がプロファイルに対して定義される場合、これは、複数組の変換行列を必要とすることがある。その変換行列精度は、プロファイルが設計される最大ビットデプスに対する最大ビットデプスの推奨値に対応する。考えられる一連のプロファイルを図28を参照して以下に示す。
変換行列精度、MAX_TR_DYNAMIC_RANGE、ENTROPY_CODING_DYNAMIC_RANGE、及びbitDepthの値の例を以下の表に示す。
このテーブルにおいて、「*」が付された値は、現在のHEVCの記述に一致して、15の最小値にクリップされる。「†」及び「‡」が付された値は、現在のHEVCの記述について規定されたものより大きく、それぞれ15及び6である。
異なるプロファイルを用いようとする場合、本発明のいくつかの実施形態では、これら仕様を最小値として用いることができる(なお、HEVCバージョン1の10ビットシステムは、これら標的に全く適合しない)。より高いビットレート(低いQP)についてPSNRを劣化させるものの、これら表示された最小値よりも低い値を用いることもできる。
CABACシステムの説明に戻る。上述のように、CABACシステムは、現在の入力データ値に従って範囲変数により定義される一連のコード値の複数の補足サブレンジのうちの1つを選択し、現在の入力データ値を選択されたサブレンジ内のコード値に割り当て、割り当てられたコード値及び選択されたサブレンジのサイズに基づいて一連のコード値を修正し、一連のコード値を定義する範囲変数が所定の最小サイズより小さいか否かを検出し、小さい場合、一連のコード値のサイズが少なくとも所定の最小サイズになるまで範囲変数を連続的に増加させ、各サイズ増加動作に応答して符号化データビットを出力することに関わる符号化技術の例を提供する。いくつかの実施形態では、一連のコード値い関連するサブレンジの比率は、入力データ値に関連付けられたコンテキスト変数により定義される。いくつかの実施形態におけるCABAC構成は、入力データ値を符号化した後、現在の入力データ値に対して選択されたサブレンジ内の一連のコード値の比率を増加させるように次の入力データ値に対して使用するためにコンテキスト変数を修正し、
ことを含む。
上述のCABACシステムの説明に戻り、いくつかの実施形態では、HEVC CABACエントロピーコーダは、以下の処理によりシンタックス要素を符号化する。
TU内の(スキャン順において)最後の重要係数の位置が符号化される。
各4×4係数グループ(グループは逆スキャン順で処理される)に対して、当該グループが非ゼロ係数を含むか否かを示す重要係数グループフラグが符号化される。このフラグは、最後の重要な係数を含むグループについては必要とされず、(DC係数を含む)左上のグループについては1であると仮定される。フラグが1である場合、当該グループに関する重要性マップ、2以上マップ、3以上マップ、シンボルビット、及びエスケープコードのシンタックス要素は、それに続いて即座に符号化される。
この構成は、図29に概略的に示されている。ステップ1500では、現在のグループが最後の重要係数を含むか否かをCABACエンコーダが確認する。現在のグループが最後の重要係数を含む場合、処理は終了する。現在のグループが最後の重要係数を含まない場合、処理はステップ1510に進み、エンコーダは、現在のグループがDC係数を含む左上のグループか否かを確認する。現在のグループがDC係数を含む左上のグループである場合、処理はステップ1530に進む。現在のグループがDC係数を含む左上のグループでない場合、ステップ1520において、エンコーダは、現在のグループが非ゼロ係数を含むか否かを検出する。現在のグループが非ゼロ係数を含まない場合、処理は終了する。現在のグループが非ゼロ係数を含む場合、ステップ1530で、重要性マップが生成される。ステップ1540において、重要性マップの値が1である、当該グループの終端から逆に数えて8までの係数について、その大きさが1より大きいか否かを示す2以上マップが生成される。ステップ1550において3以上マップが生成される。(グループの終端に最も近い)2以上マップの値が1である1つの係数に対して、これは、大きさが2より大きいか否かを示す。ステップ1560において、符号ビットが生成され、ステップ1570において、初期のシンタックス要素により大きさが完全には記載されなかったあらゆる係数(すなわち、ステップ1530〜1560のいずれかにおいて生成されたデータ)に対するエスケープコードが生成される。
MSEが1より小さい動作点における16ビット、14ビット、又は12ビットシステム(QPは、典型的には、−34、−22、及び−10)に対して、当該システムでは、典型的には、ほとんど圧縮が行われない(16ビットに対して、実際には、ソースデータを膨張させる)。係数は、一般的に大きな数字であり、したがって、ほぼエスケープ符号化される。このため、各係数に対してビットストリーム内に固定数のLSB,BFを配置することでより高いビットデプスを可能にするために、エントロピーコーダに対して2つの変更が提案されている。基本的に、当該スキームにより、8ビット及び10ビット動作のために開発された現在のHEVC CABACエントロピーコーダは、16ビット等のより高いビットシステムを追加精度に対する代替パスを用いて10ビット等の低いビットシステムに事実上変換することにより、そのために設計された元のbitDepthで動作することができる。低いビットシステムの値は容易に予測でき、より複雑な符号化スキームを用いた符号化に適しているので、採用する分割方法の有効性が改善される。一方、より高いビットシステムに必要とされる追加精度は予測が難しく、したがって、圧縮が難しく、複雑な符号化スキームは有効でない。例えば、16ビットシステムは、BFが8となるような構成を有することができる。
固定ビットスキームを用いることは、ビットストリーム内においてエンコーダにより示される。固定ビットの数の判定方法は、スキームを用いる場合、デコーダに対するエンコーダにより示される。これらの方法は、その数を直接符号化すること、又は、ビットストリームにおいて既に符号化された(QP、ビットデプス、及び/又はプロファイルを含む)ビットストリームに存在するパラメータから値BFを得る方法を示すこと、又はそれらの組み合わせを示す。エンコーダは、同じ方法を用いて、又はシーケンス、画像、スライス、又は先行のCUについて得られるBF値に対するΔ値を示すことにより、異なる画像、スライス、及びCuに対して異なるBF値を示す選択肢も有する。BFの値は、異なる変換ユニットのブロックサイズ、異なる予測タイプ(インター/イントラ)、及び異なる色チャンネル毎に異なるように構成することもできる。そこでは、ソースビデオの機能により、異なるパラメータの選択においてエンコーダが操作される。
QPに基づくBFの取得例は、次の通りである。
BF=max(0,int(QP/−6))
ビットデプスに基づくBFの取得例は、次の通りである。
BF=bitDepth−8
変換ユニットのブロックサイズ及びQPに基づくBFの取得例は、次の通りである。
BF=max(0,int(QP/−6)+2−log2(size))
様々な値のBFを、エンコーダにおいてプリコーダ(試行)構成を用いて決定、又は予め決まったルールに従うよう構成することができる。
[エントロピー符号化の実施形態1]
より高いビットデプスでの処理を可能にするために、bitDepthより少ない数の固定ビットBFに対するHEVCエントロピーコーダの処理を以下のように変更した。
TUにおける(スキャン順で)最後の重要係数の位置を符号化する。
各4×4係数グループ(グループは逆スキャン順で処理される)に対して、各係数Cを最高重要部分CMSB及び最下位部分CLSBに分割する。なお、CMSB=abs(C)>>BF、CLSB=abs(C)−(CMSB<<BF)であり、BFは、ビットストリームから決定される、使用する固定ビットの数である。
上述のCMSB及びCLSBの生成により、値の最上位データ部分が当該値の複数の最上位ビットを表し、値の最下位データ部分が当該値の残りの最下位ビットを表すように、入力データ値から各補足の最上位データ部分及び最下位データ部分を生成する(データ値のシーケンスを符号化する技術に関する)例が提供される。
グループがCMSBの非ゼロ値を含有するか否かを示す重要係数グループフラグを符号化する。このフラグは、最後の重要係数を含むグループに必要であり、(DC係数を含む)左上のグループに対して1であると仮定される。フラグが1である場合、当該グループに関連する以下のシンタックス要素は、それに続いて即座に符号化される。
重要性マップ:
当該グループにおける各係数に対して、CMSBの値が重要か否か(非ゼロ値を有するか否か)を示すフラグを符号化する。このフラグは、最後の重要位置によって示される係数に対して符号化される。
2以上マップ:
重要性マップの値が1である(グループの終端から後ろにカウントして)8までの係数に対して、このマップはCMSBが1より大きいか否かを示す。
3以上マップ:
2以上マップの値が1である(グループの終端に最も近い)1つの係数に対して、このマップはCMSBが2より大きいか否かを示す。
固定ビット:
グループにおける各係数に対して、等確率のCABACビンを用いて、CLSBの値をバイパスデータとして符号化する。
符号ビット:
全ての非ゼロ係数に対して、確率が等しいCABACビンとして符号ビットを符号化する。(逆スキャン順における)最後の符号ビットは、場合により、隠れている符号ビットを用いる際にパリティから推測される。
エスケープコード:
初期のシンタックス要素によってその大きさが完全には記載されないあらゆる係数に対して、残りのビットをエスケープコードとして符号化する。
しかしながら、重要係数グループフラグが0である場合、当該グループに関連する固定ビット、符号ビットのシンタックス要素が、それに続いて即座に符号化される。
固定ビット:
グループにおける各係数に対して、CLSBの値は等確率CABACビンとして符号化される。
符号ビット:
全ての非ゼロ係数に対して、符号ビットが等確率CABACビンとして符号化される。(逆スキャン順で)最後の符号ビットは、場合により、隠れている符号ビットを用いる際にパリティから推測される。
1つ又は複数のマップ及びフラグの生成により、値の配列に対する所定の大きさの最上位データ部分の位置を示す1つ又は複数のデータセットを生成する例が提供される。CABACを用いて1つ又は複数のマップを符号化することにより、バイナリ符号化によって出力データストリームに対してデータセットを符号化する例が提供される。等確率CABACビンを用いて他のデータを符号化することにより、出力データストリームに低重要部分を定義するデータを挿入する例が提供され、また、(他の用語を用いて)出力データストリームに下位データ部分を定義するデータを挿入する例は、コード値範囲の比率に従って最下位データ部分を表すシンボルを符号化する算術符号化により最下位データ部分を符号化することを含む。最下位データ部分を表す各シンボルに対するコード値範囲の比率は同等のサイズである。しかしながら、等確率CABAC符号化の変形例として、出力データストリームに低重要部分を定義するデータを挿入することは、出力データストリームに最下位データ部分をRAWデータとして直接挿入することを含むことができる。
本発明の実施形態によれば、係数が非ゼロ(単にCMSBと同等ではない)であるか否かを示すために、重要係数グループフラグの解釈を変えることができる。この場合、逆スキャン順で最後の係数を含む係数グループは、(1となるから)示される必要はない。重要係数グループフラグが0である場合、追加シンタックス要素があったとしても符号化する必要はない。これにより、値の配列の所定の順番に従って、非ゼロ値を有する最後の最上位データ部分の位置を示すデータフラグを含む重要性マップの例が提供される。
図30に後者の構成を概略的に示す。図30は多くの点で図29に対応する。2つの図面を比較すると、図30には図29のステップ1500に該当するものが記載されていないことが分かり、当該処理が最後の重要係数を含むグループに対しても実行されるという事実と一致する。ステップ1610及び1620は、一般的に、図29のステップ1510及び1520と対応する。新しく導入されたステップ1625において、係数は上述のようにMSB及びLSB部分に分割される。ステップ1630、1640、及び1650は、分割された係数のMSB部分でのみ作用する点を除いて、一般的に、図29のステップ1530、1540、及び1550にそれぞれ対応する。新たに導入したステップ1655は、分割された係数の上述の固定ビットとしてのLSB部分を符号化することに関与する。ステップ1660及び1670は、図29のステップ1560及び1570に対応する。
この修正により、CABACエントロピーコーダがそのために設計された元のbitDepthで動作するシステムを、バイパス符号化されたより高いビットデプスのLSB(最も予測できないので、最も圧縮が難しい)を用いて、エンコーダの設計ビットデプスに等しい多くのMSBをCABAC符号化を通して渡せるようにBFを選択することにより効果的に生成することができる。例えば、エンコーダが8ビット又は10ビットデプスエンコーダである場合、BFは8又は10と等しい。これにより、データ値のシーケンスが画像データビットデプスを有する画像データを表すシステムの例が提供され、当該方法は、画像データビットデプスと等しい各最上位データ部分において使用するビット数を複数の最上位ビットとして設定することを含む。
上述のように、(いくつかの実施形態では)データ値のシーケンスが周波数変換画像係数のシーケンスを含む構成に当該技術を適用してもよい。しかしながら、(音声データ又は単に数字データ等の)他の種類のデータを用いることもできる。この提案の結果は、図27で確認することができる。図27は、バイパス固定ビット符号化を行う場合(曲線1680)と行わない場合(曲線1690)で同等の動作を示す、ビットデプスに係るDCT行列精度及びMAX_TR_DYNAMIC_RANGEの組を用いた1つのテストシーケンスについてのQPに対するPSNRのグラフである。(固定ビットを有しないシステムと関連する)固定ビットを有するシステムに対するビットレートの節約量は、QPが0における5%からQPが−48における37%まで変化する。BFの最良値は、シーケンス依存する。BFの1つの例は、上述のように8又は10である。
[エントロピー符号化実施形態2]
他の実施形態において、同様のスキームが同様の処理ステップの多くに適用される。しかしながら、当該スキームは、重要性マップの元の機能を保持し、0のフラグ値は(エントロピー符号化実施形態1のように、係数のMSB部分に対する0の値ではなく)0の係数値を示す。これは、(典型的にはスムーズ)コンピュータにより生成されたビデオ(ゼロはより頻度が高いと予測される)を考慮する際に、より有用である。本実施形態は、bitDepthより小さい多くの固定ビットBFに対する以下の処理ステップを含む。
TUにおける(スキャン順において)最後の重要係数の位置が符号化される。
各4×4係数グループ(グループは逆スキャン順で処理される)に対して、グループが非ゼロ係数か否かを示す重要係数グループフラグが符号化される。このフラグは、最後の重要係数を含むグループには必要なく、(DC係数を含む)左上のグループに対しては1であると仮定される。フラグが1である場合、各係数Cは、最上位部分CMSB及び最下位部分CLSBに分割される。なお、CMSB=(abs(C)−1)>>BF、CLSB=(abs(C)−1)−(CMSB<<BF)である。
上述のCMSB及びCLSBの生成により、値の最上位データ部分が当該値の複数の最上位ビットを表し、各最下位データ部分が当該値の残りの最下位ビットを表すように、入力データ値から各補足の最上位データ部分及び最下位データ部分を生成する(データ値のシーケンスを符号化する技術に関する)例が提供される。
当該グループに関連する以下のシンタックス要素が、それに続いて即座に符号化される。
重要性マップ:
グループの各係数に対して、係数Cが重要である(非ゼロ値を有する)か否かを示すフラグが符号化される。最後の重要位置によって示される係数については、フラグは必要ない。
2以上マップ:
重要性マップの値が1である(グループの終端から後ろにカウントして)8までの係数に対して、CMSBが1以上か否かを示す。
3以上マップ:
2以上マップの値が1である(グループの終端に最も近い)1つの係数に対して、CMSBが2以上か否かを示す。
符号ビット:
全ての非ゼロ係数に対して、確率が等しいCABACビンとして符号ビットを符号化する。(逆スキャン順における)最後の符号ビットは、場合により、隠れている符号ビットを用いる際にパリティから推測される。
固定ビット:
グループにおける各非ゼロ係数に対して、CLSBの値が符号化される。
エスケープコード:
初期のシンタックス要素によってその大きさが完全には記載されないあらゆる係数に対して、残りのビットがエスケープコードとして符号化される。
1つ又は複数のマップ及びフラグを生成することにより、値の配列に対する所定の大きさの最上位データ部分の位置を示す1つ又は複数のデータセットを提供する例が提供される。CABACを用いて1つ又は複数のマップを符号化することで、バイナリ符号化によって出力データストリームに対してデータセットを符号化する例が提供される。等確率CABACビンを用いて他のデータを符号化することにより、出力データストリームに下位部分を定義するデータを挿入する例が提供される。
なお、出力ストリームにおけるデータの様々な要素の順番については様々な選択肢がある。例えば、符号ビット、固定ビット、及びエスケープコードに関して、1群の(例えば)n(nは例えば16である)個の係数についての順番は、
n×符号ビット、n×固定ビットの組、n×エスケープコード、あるいは
n×符号ビット、n×(1つの係数についてのエスケープコード及び固定ビット)とすることができる。
この構成を図31のフローチャートに概略的に示す。ここで、ステップ1700〜1770は、違いが特定されない限り、以下のように図31及び図32の各ステップに対応する。なお、ステップ1755は、図31のステップ1760(同様のステップ1655は、図30のステップ1660に先行する)に続く。
ステップ1700は、一般的に、図29のステップ1500に対応する。これが最後の重要係数を含むグループでない場合、処理はステップ1710に移行する。ステップ1710及び1720は、図30のステップ1610及び1620にそれぞれ対応する。係数は、図30のステップ1625に対応するステップ1725で分割される。しかしながら、ステップ1730において、上述のステップ1630の構成とは対照的に、重要性マップの抽出に係数全体(ステップ1725で実行される分割は当面の間無視する)が用いられる。ステップ1740及び1750は、分割係数のMSB部分でのみ作用し、その機能はステップ1640及び1650に対応する。ステップの順番は図32と図33でわずかに異なるように(一例として)示されているという事実以外は、ステップ1755、1760、及び1770は、ステップ1655、1660、及び1670の機能に対応する。
これら2つのエントロピー符号化実施形態を比較した結果を、図28に示す。図28は、6つのテストシーケンスについて、エントロピー符号化実施形態1で得られる結果に対して(同一のパラメータにも関わらず)エントロピー符号化実施形態2で得られるビットレート%の改善を示すグラフである。
エントロピー符号化実施形態2は、負のQPに対して、エントロピー符号化実施形態1よりもいくつかの原因物質に対する効果が平均で1%低いことが示されている。正のQPに対しては約3%上昇する。しかしながら、いくつかの軟らかい原因物質に対して、係数におけるゼロの数が増えることにより、その逆の現象が観察される。一実施形態では、エンコーダは、エントロピー符号化方法を選択し、当該選択をデコーダに通知することができる。
正のQPに対する節約量は負のQPに対する節約量と比較して小さいので、エントロピー符号化の修正は、QPが負であるときにのみ有効とする。エントロピー符号化実施形態1が負のQPに対して37%までのビットの節約量を示すことを考慮して、エントロピー符号化変形を有しないシステムと比較すると、これらの動作点において2つのエントロピー符号化実施形態にほとんど違いはない。
したがって、周波数変換入力画像係数が利用可能な様々な量子化パラメータから選択された変数量子化パラメータに従って量子化された周波数変換入力画像係数である実施形態において、当該技術は、利用可能な量子化パラメータの第1の所定のサブレンジにおける量子化パラメータを用いて生産された係数、及び利用可能な量子化パラメータの第1の所定のサブレンジ内にない量子化パラメータを用いて生産された係数について、最上位データ部分及び最下位データ部分に従って周波数変換入力画像係数を符号化すること、並びに各最上位データ部分のビット数が当該係数のビット数と等しくなり、各最下位データ部分がビットを含まないように周波数変換入力画像係数の配列を符号化することを含むことができる。
符号化されるデータの量は一般的なHEVCバージョン1の動作点について観察されるものよりやや高いので、提案された両システムに適用可能な追加ステージ及び実際には既に提案されたシステムを有効にできない又は有効でないシステムについて、本発明の別の実施形態に関連して説明する。
当該追加ステージは、各係数グループに対してバイパスデータを符号化するに先立ち、CABACストリームをビット配列させる。これにより、値をストリームから直接読むことができるので、バイパスデータの復号化をより早く(並列して)実行することができ、バイパスビンを復号化する際の長い除算の必要性がなくなる。
これを実現する1つのメカニズムは、上述のCABAC終了方法を適用することである。
しかしながら、本実施形態では、ビットストリームを終了する代わりに、CABAC状態をビット境界に配列する。
いくつかの実施形態において、一連のCABACコード値は、0から範囲変数により定義される上限値までの範囲の値を含む。当該上限値は、所定の最小サイズ(例えば、256)から第2の所定の値(例えば、510)までの範囲にある。
ストリームをビット配列するために、エンコーダ及びデコーダにおいて、m_Rangeは単純に256に設定される。これにより、符号化及び復号化処理は著しく容易になり、バイナリデータをRAW形式のm_Valueから直接読むことが可能となる。したがって、デコーダにより、多くのビットを同時に処理することができる。いくつかの例において、値256は範囲変数m_Rangeの所定の最小値の一例と考えてもよい。
なお、m_Rangeを256に設定する動作は、平均で、0.5ビットの損失を招く(m_Rangeが既に256であれば、損失はない。m_Rangeが510であれば、約1ビットの損失がある。したがってm_Rangeの有効値全ての平均は0.5ビットである)。
多くの方法を用いて、これらの技術により引き起こされる損失又は考えられるコストを緩和することができる。図33〜図35は、CABACエンコーダにより実行されるCABA処理の終了ステージのバージョンを概略的に示すフローチャートである。
図33によれば、バイパス符号化データの予測量の推定値(例えば、2以上フラグの数が1に等しいこと)に応じて、ビット配列するか否かを選択することができる。予測されるバイパス符号化データがほとんどない場合、ビット配列するには(配列につき平均0.5ビット無駄にするので)コストがかかり、ビットレートが低くなる可能性が高いので不必要である。したがって、図33において、ステップ1800は、設定された2以上フラグの数を検出することでバイパス符号化データの推定量を検出し、並びにその数を閾値Thrと比較することに関する。推定値が閾値Thrを超えた場合、処理はステップ1810に移行する。ステップ1810では、ビット配列モードが選択される。推定値が閾値Thr以下である場合、処理はステップ1820に移る。ステップ1820において、非ビット配列モードが選択される。図34に示すステップは、例えば、各TUにおける各サブグループにおいて繰り返すことができる。
図34を参照して、各係数グループの終端におけるコードバイパスデータではなく、TUに対するCABACビンデータの後にTUに対する全てのバイパスデータを合わせて符号化することができる。したがって、損失は、係数グループにつき0.5ビットではなく符号化TUにつき0.5ビットである。したがって、図34におけるステップ1830において、現在のグループがTU符号化の終端にあるか否かを検出するためにテストを適用する。現在のグループがTU符号化の終端になければ、ビット配列は適用されず(ステップ1840で概略的に示されている)、処理はステップ1830に戻る。しかしながら、現在のグループがTU符号化の終端にある場合、ビット配列はステップ1850で適用される。これにより、入力データ値が画像データを表し、当該画像データが係数の複数の配列を含む変換ユニットとして符号化される構成の例が提供され、当該方法は、上記設定を変換ユニットの符号化の終了時に適用することを含む。
この配列メカニズムは、効率を低下させる可能性があるがストリームの符号化を単純化することもある等確率のメカニズムで符号化されるストリーム内の他のデータ又は全てのデータに先立って用いてもよい。
図35を参照し、変形例としての配列として、m_Rangeを単に256とするのではなく所定の値の数Nの1つに設定することができる(例えば、384は半ビットに配列する)。配列値は(再正規化を除いて範囲は増加することができないので)m_Rangeの元の値以下である必要があるので、配列毎損失は定期的に間隔をあけた値に対して(0.5/N)である。この方法は、依然として256以外の値に対して除算を必要とする。しかしながら、分母は予め知られており、したがって、当該除算はルックアップテーブルを用いて評価することができる。したがって、(ビット配列状態で適用される)ステップ1860において、m_rangeの値が検出され、ステップ1870において、ビット配列処理において使用するために、m_rangeに従って配列値が選択される。
この変形例の配列方法に対するさらなる改良として、配列の直後の(1つ又は複数の)ビンを2の累乗の(同等でない)シンボル範囲を用いて符号化することができる。このようにして、次のビンに対する除算の全ての必要性を、ビット効率において(0.5/N)を超えるさらなる損失を招くことなく除去することができる。
例えば、384に配列する際、次のビンに対する[0,1]のシンボル範囲は[256,128]とすることができる。
0を符号化する場合、m_Rangeは256に設定され、ビンを符号化するコストを0.5ビットとなる。
1を符号化する場合、m_Rangeは128に設定され(さらに、256がm_Valueに追加され)、システムは再正規化され(m_Rangeは再び256となる)、ビンを符号化するコストは1.5ビットとなる。
0及び1は等しい確率で予測されるので、配列直後のビンを符号化する平均コストは、依然として1ビットである。N=2であり、2つの配列点が256及び384である場合に対して、当該方法を用いれば、現在のm_Range以下の最大配列点を取得できる。配列点が256の場合、CABACエンジンを配列するために、m_Rangeはちょうど256に設定される。配列点が384の場合、上記処理が必要となり、1つのシンボルの符号化が必要となる。
これは、図32A及び図32Bに示され、N=4の別の例は、図32C〜図32Fに示されている。
CABACエンジンを配列する利点を示すために、当該配列ステージなしに等確率(EP:equiprobable)ビンを復号化する方法を次のように表すことができる。
(m_Value>=m_Range/2)の場合、
復号化EP値は1である。m_Range/2ずつm_Valueを減少させる。
それ以外の場合
復号化 EP値は0である。
ビットストリームから次のビットを読み込む。
m_Value=(m_Value*2)+ストリーム内の次のビット
この変形例は次の通りである。
m_Range=458、m_Value=303とし、ビットストリームにおける次のビットは1である。
サイクル1
m_Value>=229。したがって、次の符号化EP値は1である。m_Value=74
ビットストリームから次のビットを読み込む。m_Value=74*2+1=149
サイクル2
m_Value<229。したがって、EP値は0である(m_Value変化なし)。
ビットストリームから次のビットを読み込む。m_Value=149*2+1=299
復号化等確率ビンは、長い除算の1つのステージに等しく、不等をテストするには計算が必要である。2つのビンを復号化するために、本例の処理は2回実行され、2段階の長い除算処理が実行される。
しかしながら、m_Rangeを2の最大有効累乗(9ビットHEVC CABACに対して256等)とする配列ステージを適用する場合、上記処理が簡略化される。
符号化EP値は、m_Valueの最上位ビットである。
シフトレジスタとして処理することにより、ストリーム内の次のビットを最下位位置にシフトして、m_Valueを更新する。
したがって、m_Valueは基本的にシフトレジスタとなり、EPビンは最上位位置から読み込まれる。一方、ビットストリームは最下位位置にシフトされる。したがって、単にm_Valueの上端からさらに複数ビットシフトすることで、複数のEPビットを読み込むことができる。
この配列例の変形例は以下のように示される。
m_Range=256、m_Value=189とし、ビットストリームの次の2ビットは1である。
サイクル1
次の符号化EP値は、m_Valueのビット7であり、1である。
ビット7をシフトし、ビットストリームから最下位位置に1をシフトすることでm_Valueを更新する。m_Valueは123となる。
サイクル2
次の符号化EP値は、0であるm_Valueのビット7である。
ビット7をシフトし、ビットストリームから最下位位置に1をシフトすることでm_Valueを更新する。m_Valueは247となる。
選択された配列点の数Nは、実行の複雑性と配列のビットコストとのトレードオフとして確認することができる。配列点毎に多くのEPビンが存在する動作点については、損失はそれほど重要でなく、動作点が少ない配列システムでも十分である。逆に、配列点毎のEPビンが少ない動作点については、損失がより重要になり、動作点の多い配列システムが好ましい可能性がある。いくつかの動作点に対しては、配列アルゴリズムを完全に無効にするのが好ましいことがある。エンコーダ及びビットストリームは、データストリームのセクションの動作点に従って選択可能な、デコーダに使用される配列点の数を示すことができる。あるいは、当該示された数は、プロファイル及びレベル等のビットストリームに存在する他の情報から推測されてもよい。
配列位置がちょうど256及び384である単純なケースでは、複数の配列位置を用いて、以下のように配列する。
m_Range<384の場合、m_Rangeを256に設定し、復号化のために上述の変更例を参照する。
それ以外の場合、m_Range=384に設定し、以下の処理を次のEPビンを符号化するために実行する。
m_Range=384=256+128
256のシンボル範囲を0の値に割り当て、128のシンボル範囲を次の符号化対象のEPビンに対して1の値に割り当てる。
m_Value>=256の場合、(MSBビットテスト動作)
次のEP値は1である。
m_Value−=256(実際には、ビットクリア動作)
m_Range=128
再正規化(m_Range<256なので)
m_Range=256
m_Value=(m_Value*2)+ストリーム内の次のビット
それ以外の場合、
次のEP値は0である。
m_Range=256。
m_Range=256であり、上記単純な処理を次のEPビンの全てに対して実行することができる。
上述のCABACビット配列メカニズムを有するエントロピー符号化実施形態1の結果を、図27に示す。図27は、N=1に対するビット配列メカニズムを有する又は有しない6つのシーケンスについてのQPに対するビットレートの違いを表すグラフである。正のビットレートの違い(垂直軸)は、ビット配列を有するシステムにより、ビット配列メカニズムを有しないスキームより高いビットレートが生成されることを示している。各シーケンスに対するビットレートの違いは、1秒につき1000の係数グループの数の約0.5倍である(トラフィックは、2560×1600 30p=11520、その他は1920×1080 50p=9720)。
上述の配列技術は、1群の入力データ値を符号化した後、ゼロに等しい少なくとも1つの最下位ビットを含む利用可能な範囲変数値の所定のサブセットから選択された値に範囲変数を設定する例である。サブセットは、最小サイズ(例えば、256)を含んでもよい。サブセットは、所定の最小サイズ(256等)から第2の所定値(510等)の範囲にある2つ以上の値を含んでもよい。範囲変数の現在の値に従って値を選択してもよい。実施形態は、(例えば、図32A〜図32Fに示すように)範囲変数の現在の値が当該特定の値からサブセットにおける次に高い値より1少ない値までの範囲にある場合、サブセットから特定の値を選択することを含む。特別な例では、利用可能な値のサブセットは、256、320、384、及び448の組を含む。範囲変数を設定することには、範囲変数の現在の値が256から319までの範囲にある場合、範囲変数が256に設定されるように、範囲変数の現在の値が384から447までの範囲にある場合、範囲変数が384に設定されるように、範囲変数の現在の値が448から510までの範囲にある場合、範囲変数が448に設定されるように、範囲変数の現在の値に従ってサブセットから値を選択することが含まれる。他の例では、範囲変数を設定することには、範囲変数の現在の値が256から383までの範囲にある場合、範囲変数が256に設定されるように、範囲変数の現在の値が384から510までの範囲にある場合、範囲変数が384に設定されるように、範囲変数の現在の値に従ってサブセットから値を選択することが含まれる。
図30で設定される選択肢はプロファイルとして提案される。
(1つ又は複数の)高いプロファイルが14までのbitDepthsをサポートする必要がある場合、変換行列係数精度、MAX_TR_DYNAMIC_RANGE及びENTROPY_CODING_DYNAMIC_RANGEが12、19、及び20にそれぞれ設定されるよう提案される。
これらプロファイルに加えて、イントラのみメイン(Main)/拡張(Extended)プロファイルを定義することができるが、イントラのみデコーダはイントラ・インターデコーダより著しく複雑性が少ないので、高いイントラプロファイルのみをここでは説明する。
同様に、静止画を符号化するためのExtended/Highプロファイルは、依然として様々なクロマ形式で定義できる。
低いプロファイルは、高いプロファイルで使用されるのと同様に、同じ行列精度、MAX_TR_DYNAMIC_RANGE及びENTROP_CODING_DYNAMIC_RANGEを使用する必要がある。そうでなければ、2つのプロファイルで生産されたビットストリームは適合しない。
ここで、様々な選択肢について説明する。
選択肢1
この選択肢では、ビットデプスが変換行列精度、MAX_TR_DYNAMIC_RANGE及びENTROPY_CODING_DYNAMIC_RANGEに影響する。これは、16までのビットデプスを支持する必要があるデコーダが異なる組の行列で13ビットのデータを処理する必要があり、当該デコーダは21までサポートすることができるものの、MAX_TR_DYNAMIC_RANGEに対して内部精度が18ビットに限定されることを意味する。しかしながら、高いプロファイルを用いて符号化された12ビットデータは、低いプロファイルに準拠したデコーダにより復号化することができる。
選択肢2
この選択肢では、オーバーラップビットデプスに対するビットパラメータが、低いプロファイルにより決定され、これにより、拡張プロファイルに準拠したデコーダを用いて復号可能な高いプロファイルを用いて符号化された12ビットデータを復号化する。また、13ビットデータの内部精度は、16ビットデータに対するものと同じである。また、行列精度は、選択肢1よりもサポートされる必要はない。
この場合、1組の変換行列値を保存することができ、他の値は全てこれから得られる。
なお、変換行列が14ビットの最初の精度を有する場合、一般的に、2で除算されるか丸められることにより低い精度が得られる。
高い精度行列から低い精度行列を得るためにこの一般側を用いると、以下の例が与えられる。
例1
選択肢1:High4:4:4 変換行列精度=14を定義する。
14から変換行列精度=13を得る。
Ext4:4:4 変換行列精度=14を定義する。
14から変換行列精度=10を定義する。
すなわち、「高い(High)」精度で記憶する。
例2
選択肢1:High4:4:4 変換行列精度=10を定義する。
10から変換行列精度=14を得る。
Ext4:4:4 変換行列精度=10を定義する。
14から変換行列精度=10を得る。
すなわち、「拡張された(Extended)」精度で記憶する。
よりよい品質のためには、「例1」が好ましい。しかしながら、例2は記憶必要メモリが少なくて済む。
なお、変形例として、もちろん、各精度について変換行列の組を記憶することもできる。「例1」及び「例2」のルールは、「選択肢2」にも用いることができる。
目的の1つは、品質を増加し、プロファイルに除算することであるので、1つの精度において1つの組から各変換行列の組が得られる場合、スケーリングエラーが生じる。
「例1」の場合、システムは変換行列を14ビットからダウンスケールし、「例2」の場合、システムは、変換行列を10ビットからアップスケール又はダウンスケールする。
選択肢3
すなわち、12ビットビデオのビットデプスは、high4:4:4デコーダのみがhigh4:4:4スキームを用いて符号化されたストリームを復号化できるものの、「High4:4:4」又は「Ext4:4:4」として符号化することができる。
選択肢4
すなわち、「High4:4:4プロファイル」は、低い「Ext4:4:4プロファイル」をサポートする必要がある。この選択肢では、12ビットビデオを符号化するための選択肢は1つしかない。
選択肢5
この選択肢において、行列精度はプロファイルごとの1の値に限られ、エンコーダに対するオーバーヘッドを低減させる。また、MAX_TR_DYNAMIC_RANGE及びENTROPY_CODING_DYNAMIC_RANGEはビットデプスにより決定されるので、13ビットデータを符号化する必要があるエンコーダは、追加の内部計算精度を用いることの実行オーバーヘッドを含むことを必要としない。
選択肢6
選択肢6は、選択肢5と同様であるが、拡張プロファイルのみが12ビットデータの符号化に対して定義される。
まとめると、本発明のいくつかの実施形態に係る提案された変化は、次の通りである。
高い精度に対して設定された少なくとも1つの追加変換行列を用いる。
マルチプロファイルエンコーダ・デコーダを簡略化するために、全ての高い精度のために、単一の組を有するのが好ましい。
提案された変換行列は、変換行列精度7〜14のために提供される。以下の説明を参照する。
14ビット精度変換行列はソフトウェアに対する16ビットデータタイプに適合し、16ビットビデオへの拡張を可能にするのに十分な精度をもたらすので、これらを使用することが示唆される。
変換行列精度の選択は、入力データのビットデプス及びプロファイルにより構成され、あるいは、シーケンス、画像、又はスライスレベルで規定されるパラメータで交互に決定される。
MAX_TR_DYNAMIC_RANGE及びENTROPY_CODING_DYNAMIC_RANGEは、高い精度に対して変更できる。
MAX_TR_DYNAMIC_RANGE及びENTROPY_CODING_DYNAMIC_RANGEの複数の値は、マルチプロファイルエンコーダ・デコーダに対する問題を提起するべきではない。
MAX_TR_DYNAMIC_RANGE=bitDepth+5及びENTROPY_CODING_DYNAMIC_RANGE=bitDepth+6を得ることが示唆されている。
MAX_TR_DYNAMIC_RANGE=bitDepth+5を用いることは、多くの場合及び多くの種類のビデオ素材に対して適切である。しかしながら、これを変更することに関する考えられる必要性について説明する。
経験的なテストにより、いくつかの例において、ビデオシーケンスのサブセット、特に、低ノイズな内容のいくつかのビデオシーケンスに対して、MAX_TR_DYNAMIC_RANGE=bitDepth+5を用いることにより、単調でない(出力ビットレートと量子化パラメータの関係を与える)反応曲線を生じることが分かった。
通常、このような反応曲線は、量子化のレベルが高いほど出力ビットレートが低く、量子化のレベルが低いほど出力ビットレートが高いように、出力ビットレートと量子化パラメータの間で単調である。この単調な関係により、レート制御システムにより量子化パラメータを調整して出力ビットレートを所望の範囲又は所望の閾値に維持するレート制御アルゴリズムの基礎が形成される。
しかし、MAX_TR_DYNAMIC_RANGE=bitDepth+5を用いるいくつかの例では、例えば、量子化のレベルを低くする変更により実際に低い出力ビットレートがもたらされ、この単調な関係が崩れることが発見された。また、特定の出力ビットレートに対して、2つの考えられるピクチャSNRの値が存在することも発見された。このような例外により、レート制御アルゴリズムが所望のビットレートに達するのに苦労し、又は達することができないことがある。
経験的なテストにより、このような問題はMAX_TR_DYNAMIC_RANGE=bitDepth+6を用いることにより解決できることが発見された。したがって、いくつかの実施形態では、このMAX_TR_DYNAMIC_RANGEとbitDepthの関係が用いられる。
32×32 DCT行列の特別な例において、DCT処理を実行するには、bitDepth+5の値が得られる方法であるbitDepthを超えるlog2(32)ビットの精度を必要とする傾向がある。しかしながら、量子化プロセスにより、他のビットの精度の同等物を追加することがある。この追加ビットをDCT処理における追加の精度として提供すれば、少なくともいくつかのビデオ素材に対して、著しく良好な結果を得ることができる。
しかしながら、経験的なテストにより、この問題及びMAX_TR_DYNAMIC_RANGE=bitDepth+6を用いることの解決法は、より大きいDCT行列サイズにのみ関連することも発見されている。MAX_TR_DYNAMIC_RANGEとbitDepthの異なる関係を可能にすることの利点は、追加精度が必要ない例において不必要な処理のオーバーヘッドを避けられることである。
特に、本例において、上記問題及び提案された解決法は、特に32×32 DCT行列サイズと関連する。より小さな行列に対しては、MAX_TR_DYNAMIC_RANGE=bitDepth+5の関係を用いることができる。
より一般的には、オフセット(MAX_TR_DYNAMIC_RANGEを生成するためにbitDepthに追加された値)を行列サイズに従って変更できるように、MAX_TR_DYNAMIC_RANGEとbitDepthの関係の適用可能な変更を用いることができる。したがって、MAX_TR_DYNAMIC_RANGE=bitDepth+offsetであり、offsetは行列サイズの関数である。1つの例では、オフセット値は以下のように選択することができる。
他の例では、低い精度を小さい行列サイズに用いることができる一方、高い精度には大きな行列サイズを用いる必要性を認識できるように、累進的な関係を用いることができる。
オフセットと行列サイズの関係は、エンコーダの逆(復号化)経路とデコーダの復号化経路とで同一とすべきである。したがって、当該技術のこれら3つの領域で、この関係を構築し、又は明らかにする必要がある。
1つの例では、この関係をエンコーダ及びデコーダで所定のハードコードされた関係として構築することができる。
他の例においては、ビデオデータの一部として(又はこれに関連して)、この関係を明確にすることができる。
他の例では、エンコーダ及びエンコーダにおいて、この関係を符号化ビデオデータに関連付けられた「プロファイル」の識別子から推測することができる。ここで、この説明の他の場所で説明したように、プロファイルはビデオデータを符号化又は復号化するために使用される一連のパラメータの識別子である。プロファイル識別子と当該プロファイル識別子により設定される実際のパラメータのマッピングは、エンコーダ及びデコーダに予め記憶される。このプロファイル識別子は、例えば、符号化データの一部として伝達することができる。
しかしながら、一般的に、オフセットの値は、変換行列の行列サイズに依存する。
変換行列精度と同様に、MAX_TR_DYNAMIC_RANGE及びENTROPY_CODING_DYNAMIC_RANGEの選択は、入力データのビットデプス及びプロファイルで構成され、あるいは、シーケンス、画像、又はスライスレベルで規定されるパラメータ(場合により、DCT行列を選択したのと同一のパラメータ)により交互に決定される。
これら構成により、変換データの最大ダイナミックレンジに従って、データ精度を有する変換行列を用いて、並びに入力画像データのビットデプスに従って最大ダイナミックレンジ及び変換行列のデータ精度を選択して、行列乗算処理により周波数変換入力画像係数の配列を生成するための周波数変換入力画像データの例が提供される。
いくつかの実施形態では、変換行列のデータ精度を入力画像データのビットデプスより小さい(2等の)第1のオフセット数のビットに設定することができ、変換データの最大ダイナミックレンジを入力画像データのビットデプスより大きい(5等の)第2のオフセット数のビットに設定することができる
エントロピー符号化は、低いQPでの圧縮を増加させるためにいくつかの固定ビット処理(エントロピー符号化実施形態1及び2を参照)を含むように変更することができる。
固定ビットの有無は、シーケンスレベルで構成することができる。
固定ビットBFの数は、シーケンス、(画像パラメータセットは、シーケンスレベル設定を知らないので難しいものの)画像、スライス、又はCUレベルで(場合により、以前のシーケンス・画像・スライス・CU、ペアレントエンティティ、又はプロファイル定義に対する固定ビットの数からデルタを伝達することにより)構成することができる。
エントロピー符号化は、長い除算を使用することなくバイパスビットをストリームから抽出できるようにCABACビット配列を含むように変更することができる(1つ又は複数の上述のビット損失緩和方法を適用するのも好ましい)。
したがって、本発明のいくつかの実施形態によれば、HEVCを通してより高いビットデプスのための範囲拡張(Range Extensions)権限に必要性を適応させるために、内部精度を上昇させることができる。様々なソースの誤差が研究され、推奨がなされている。また、符号化効率を改善するための変化が提供され、スループットを改善する変化も提供されている。
正確変換行列の増加
以下においては、変換行列を様々なレベルの精度で説明する。
4×4 DST
組み合わせ行列は、以下の形式である。
格子内の値は、以下のテーブルに係る行列係数精度(比較のために含まれる6ビットHEVCバージョン1行列値)により定義される。
組み合わせDCT行列
実行を容易にするために、単一の32×32 DCT行列M32を記載することができる。それからは、(各ソース変換行列からそれぞれ異なる必要なデータ精度で変換行列を得る例として)以下のサブサンプリングを通して各小さいN×N DCT行列MNを得ることができる。
x,y=0..(N−1)に対してMN[x][y]=M32[x][(2(5−log2(N)))y]
組み合わせ行列M32は、以下の形式である。
以下のテーブルに係る行列係数精度で定義される格子の値(比較のために含まれる6ビットHEVCバージョン1行列値)
情報に対して、32×32行列由来のより小さいDCT行列をここに示す。各格子の値は、上記テーブルに係る行列係数精度で定義される。
4×4 DCT
行列M4は、組み合わせ行列M32の8番目の行ごとの第1の4係数として定義される。
8×8 DCT
行列M8は、組み合わせ行列M32の全ての4番目の行の第1の8係数として定義される。
16×16 DCT
行列M16は、組み合わせ行列M32の全ての偶数行の第1の16係数として定義される。
固定ビット符号化の実施形態に関する別の技術又は関連技術について、図36〜図38を参照して説明する。
しかしながら、最初に、エスケープコードを符号化するために使用される技術について説明する。
いわゆるゴロムライス符号化は、値vをα符号化プレフィックスとして符号化する。α符号は、1個の「0」に続く可変数の「1」(又はその逆)で表される。この場合、プレフィックスの「値」は、これら可変数の「1」によって決まる。例えば、プレフィックスの「値」は、その後にkビットのサフィックスが続く「1」の個数に等しい(又は、他の例では、「1」の個数+1に等しい)。なお、代替形態として、α符号を、1個の「1」に続く多数の「0」で表してもよい。この場合、α符号の値は、これら多数の「0」によって決まる。
プレフィックス長をα符号化プレフィックス内の1の総数にする。Kを最下位kビットの値にする。
v=(プレフィックス長<<k)+K
(ただし、<<mは、mビットの左シフトを表し、同様の表記である>>mは、mビットの右シフトを表す)
ビットの総数は、プレフィックス長+1+kと等しい。
次に、いわゆるk次の指数ゴロム符号について説明する。当該符号では、符号化対象の数字が変数長α符号化プレフィックスと変数長サフィックスとに分割される。サフィックスビットの数=プレフィックス長+kである。ここで、プレフィックス長は、またしてもα符号の「1」の個数である。
符号におけるビットの総数=プレフィックス長+1+プレフィックス長+kである。
Kを最後のkビットの値とする。
プレフィックス長が0の場合、vはKと等しくなる。
プレフィックス長が1の場合、vは(1<<k)+Kから(3<<k)+Kまでの範囲にある。
プレフィックス長が2の場合、vは(3<<k)+Kから(7<<k)+Kまでの範囲にある。
プレフィックス長が3の場合、vは(7<<k)+Kから(15<<k)+Kまでの範囲にある。
なお、上記の場合ではそれぞれ、上限値は範囲に含まれないが、下限値は範囲に含まれることとする。
したがって、v=((2^プレフィックス長)−1)<<k)+サフィックスとなる。
HEVCにおいて、ゴロムライス符号及び指数ゴロム符号の両方が使用される。プレフィックス長が3より小さい場合、符号はゴロムライス符号として解釈される。しかしながら、プレフィックス長が3以上の場合、符号はk次の指数ゴロム符号として解釈される。(どちらかのシステムにおける)プレフィックスは、α符号の例である。サフィックスは、非α符号の例である。当該2つのシステムはそれぞれ、2値可変長符号の例である。
この場合、指数ゴロム符号を復号化するために使用されるプレフィックス長の値は3減らされ、復号化動作から得られる値は(3<<k)増加される。なぜなら、これはゴロムライス符号を用いて表すことができない最小の値だからである。
上述したように、エスケープコードは、初期のシンタックス要素により大きさが完全には表せない係数について、エスケープコードのコードフォーマット(値k及び当該値の任意の修正を考慮に入れる)によって許される範囲で、この残りの係数を表す、符号化された値である。エスケープ−エスケープコードは、このエスケープコードが符号化された後に残る任意のさらなる余りを表すコード値である。したがって、1つ又は複数のデータセット(重要性マップ等)は、符号化されたデータ値の第1の部分の一例である。必要な場合、エスケープコードは、パラメータkによって定義されるビット数と、当該値の任意の修正値(modification)とを有する。このエスケープコードは、符号化されたデータ値の第2の部分の一例である。必要な場合、エスケープ−エスケープコードは、同様の技術によって符号化されることができる。このエスケープ−エスケープコードは、符号化されたデータ値の第3の部分の一例である。
HEVC escapeとescape−escapeで使用される「k」の値は変化する。16個の係数から成る各グループのために、値kは0で始まり、(当該グループの順番に並べられた係数シーケンス内の)係数値の大きさが3<<kより大きいときはいつでも増加される。この状態になると、kは最大値の4までインクリメントされる。なお、係数の符号を表す符号ビットは別途伝達されるので、この説明は係数の大きさに関するものである。
図36は、上述のエスケープコードを生成する処理を示す概略フローチャートである。当該フローチャートのステップのいくつかは、上述のものと同様であるため、詳細な説明は省略する。
この方法は、(例えば)周波数変換画像係数のシーケンス又は各データ値の大きさが1減らされた(この場合、重要性マップは1の値から構成されるため、さらなる処理の前に各係数が1減らされるように重要性マップを最初に生成してもよい)当該シーケンスの非ゼロ要素を含む1群のデータ値(例えば、正方形配列の16個のデータ値)に関して動作可能である。
ステップ2000において、kの初期値を設定する。通常のHEVCシステムにおいて、kは最初に0に設定される。ステップ2010、2020、2030、2040、2050、及び2060は図29〜図31のフローチャートにおける同様のステップに対応するため、ここでは説明を行わない。なお、図29〜図31及び図36において、HEVCのいくつかの実行例では、各係数に対してマップの全てを生成する必要はない。例えば、1群の(例えば)16個の係数内において、マップが生成されない1つ又は複数の係数が存在してもよい。
ステップ2070において、エスケープコードが必要な場合、上述の技術を用いてkの現在の値に基づいて生成される。特に、エスケープコードを用いる必要がある係数は、重要性マップ及び任意に1つ又は複数の他のマップを用いて最初に処理される。なお、エスケープ符号化が必要な係数の場合、使用する重要性マップ、2以上マップ、3以上マップのいずれかが「1」としてフラグ化される。これは、エスケープ符号化する必要がある係数は、その係数に関して利用できるどのマップを用いたとしても、当該マップにより符号化できる値より定義上大きいからである。
現在のデータ値が完全には符号化されなかった場合、エスケープコードが必要となる。ここで、「完全に」符号化された、という言葉は、(当該マップ、又は例えばマップ及び固定ビットによって)既に符号化された値より小さいデータ値がゼロであることを意味する。すなわち、既に生成された要素を考慮して、データ値の残りの量がゼロである場合、データ値は当該要素によって完全に符号化される。
したがって、完全には符号化されなかった一例の係数に対して、重要性マップ、2以上マップ、3以上マップを利用できると仮定すると、各マップは当該係数に関して「重要」、「2以上」、及び「3以上」としてフラグ化される。
これは、(本例において)完全には符号化されなかったためにエスケープコードを必要とする当該係数が少なくとも3でなければならないことを示す。
したがって、エスケープ符号化の前に、情報を喪失することなく、3の値を係数から減算することができる。3の値(又は、より一般的には、当該係数に適用されるマップによって定義される数字範囲を示す可変基準レベル)は、復号化において元に戻すことができる。
10進法における15(2進法の1111)の係数値を例にすると、重要性マップは「1」であり、2以上マップは「1」であり、3以上マップは「1」である。基準レベルの値は10進法における3である。基準レベルは係数値から減算され、エスケープ符号化に渡される10進法の12(2進法の1100)の値が提供される。
ここで、値k(上記参照)は、サフィックスビットの数を定義する。サフィックスビットは、基準レベルの減算後、係数値の最下位ビットから得られる。(例えば)k=2の場合、残りの値1100の2つの最下位ビットがサフィックスビットとして処理される。すなわち、本例のサフィックスビットは00である。残りのビット(本例では11)は、プレフィックスとして処理及び符号化される。
したがって、まとめると、係数のエスケープコードに関連する処理は、
(エスケープコードが必要な場合)係数が少なくとも基準レベルの値を有しなければならないように、当該係数の1つ又は複数の最下位ビットを定義する1つ又は複数のマップを生成することと、
当該係数から基準レベルを減算することと、
当該係数の残りの部分の最下位kビットをサフィックスビットとして符号化することと、
当該係数の残りの部分の最上位ビットをプレフィックスとして符号化することとを含む。
そして、上述のテストにより、例えば、処理中の係数の値が3<<kより大きい場合にkの値を変更する必要がある場合、この変更は、ステップ2080で実行され、当該群の、次に処理する係数に対して、ステップ2070の次の動作のためにkの新たな値が提供される。
これと同等の効果を固定ビットの使用(図30及び図31)にもたらすことができるエスケープ符号化技術の変形例は、エスケープコードに用いられるサフィックスビットの数を定義する値kにオフセットを適用することである。
例えば、HEVCシステムにおける値kは0から4の範囲を有し、出発点の0から最大値4まで(1群の係数に関する)推移する。いくつかの実施形態では、kの値にオフセットが追加される。例えば、1群の係数の符号化の過程でkを変更する従来技術により、kを0から4に変更するのではなく、kをparam_offsetから4+param_offsetに変更するように、オフセットを3等の値param_offsetとして予め定めてもよい。
値param_offsetは、エンコーダ及びデコーダの間で予め定めることができる。
あるいは、値param_offsetは、エンコーダ及びデコーダから、例えばストリーム、ピクチャ、スライス、又はブロック(TU等)ヘッダとして伝達することができる。
あるいは、値param_offsetは、エンコーダ及びデコーダから、(例えば)
ビットデプス?10に対してparam_offset=0、
ビットデプス>10に対してparam_offset=ビットデプス−10等、
ビデオデータのビットデプスの所定の関数として得ることができる。
あるいは、値param_offsetはエンコーダ及びデコーダで、係数のブロック又はグループに適用可能な量子化の程度(Qp)の所定の関数として得ることができる。
あるいは、値param_offsetは(例えば、所定の方法で)1つ又は複数のどのビデオ要素が符号化されるか、ブロックサイズ、モード(例えば、無損失又は損失の多い)、ピクチャタイプ等によって決めることができる。
あるいは、値param_offsetはエンコーダ及びデコーダで、所定の出発点、ヘッダ内で伝達できる出発点、又は(例えば)ビットデプスから得られる出発点をとって、所定の適用基準で得ることができる。このような適用処理の例について、図37を参照して以下に説明する。さらなる例については、図38を参照して後で説明する。
あるいは、複数の基準を適用してもよい。特に、値param_offsetが(ブロックサイズ)他のパラメータに依存し、図37に示すように適用可能に変更される場合、適用可能な変更は、param_offsetの各可能値に対して個別に(すなわち、各ブロックサイズに対して個別に)適用することができる。
なお、これらの依存関係のいずれか又は全てを図30及び図31の構成において用いられる固定ビットの数に関して適用することができる。
この変更例の技術と上述の固定ビットの技術を図30及び図31に関して比較すると、
(a)図30及び図31の固定ビット技術において、いずれかのマップの生成前に、係数がより上位の部分とより下位の部分に分割され、その後、より上位の部分から1つ又は複数のマップが生成され、より下位の部分は直接符号化される(そうでなければ、上述のように処理される)が、
(b)param_offsetを用いたエスケープ符号の生成において、1つ又は複数のマップが最初に生成され、その後、残りの部分の係数値(基準レベルを減算した値)がサフィックス又はプリフィックスのどちらかとして処理されることがわかる。サフィックスとプレフィックスとの境界はk+param_offsetによって決まり、サフィックスは残りの部分の最下位ビットを表す。
いずれかの例において、固定ビット符号化に関連するパラメータ、又は値param_offsetは、適用可能な方法により変更することができる。ここで、これを実現する方法の例について、図37を参照して説明する。別の例については、図38を参照して後述する。上述の説明から、図37において、(図37において「NFB」と称され、図30及び図31のステップ1625及び1725で得られる最下位部分のビットの数を指す)固定ビットの数又は(図37では「オフセット」と省略して表される)値param_offsetのどちらかに対して同様の技術を適用することができる。
以下に図37を参照して説明する構成例において、オフセット又はNFB値の適用は、スライス毎に行われると仮定される。なお、スライスはシステムのHEVCファミリー内において1つのLCUからピクチャ全体までのあらゆるものとして定義することができる。しかしながら、スライスの基本的な特徴は、個々のスライスを他のスライスを参照することなく復号化できるように、符号化が他のスライスに適用される符号化と無関係であることである。しかしながら、この適用をブロック毎又はピクチャ毎に実施できるのはもちろんのことである。
なお、図37の処理はエンコーダで実行され、また、オフセット/NFB変数の値がエンコーダとデコーダの間で等しく追跡できるように、補足復号化方式によりデコーダで実行される。
ステップ2100において、スライスの処理が開始される。
ステップ2110において、オフセット/NFB値がリセットされる。この処理には、当該値を0等の固定値にリセットすることが含まれる。変形例の構成において、当該値は1つ又は複数の前のスライスに関するオフセット/NFB変数の最終値から得られる初期値にリセットすることができる。この場合、各スライスを独立して復号化する能力を維持するために、本発明のいくつかの実施形態によれば、スライスヘッダにおけるオフセット/NFB変数の初期値の通知が提供される。なお、このような初期値を取得するための様々な技術を利用することができる。例えば、オフセット/NFB変数の初期値は、前のスライスに対する変数の最終値が2を超えなかった場合、0に設定することができ、その他の場合、1に設定することができる。同様の構成を先行のピクチャに関するすべてのスライスから得られた変数の最終値の平均に適用することができる。当業者であれば、他の様々な可能性を利用できることを理解するであろう。例えば、代替の初期値は、Qp又はビットデプス(あるいはその両方)に基づくこともできる。もちろん、所定の初期値を用いる場合、エンコーダ及びデコーダに適用可能な一般定義によって予めどちらかに同意しておくこともできる。あるいは、所定の初期値をストリーム又はピクチャヘッダに規定することもできる。
ヘッダデータに関して、図37の適用処理がストリーム、ピクチャ、又はスライスに関して実行されるか否かを示すために、当該ストリーム、ピクチャ、又はスライスヘッダ内にフラグを含めてもよい。
ステップ2120において、第1の変換ユニット(TU)の処理を開始する。スライスの処理は、上述のように、TU上でTU毎に実行される。
ステップ2130において、さらに3つの変数を今回は0にリセットする。これら変数はアンダー、オーバー、及びトータルと称される。これら変数の目的について以下に説明する。
TU内において、各係数を順々に符号化する。ステップ2140において、次の係数を符号化する。係数の符号化は、図30/図31のフローチャート又は図36のフローチャートに続いて実施してもよい。各例において、当該処理のステージで利用できるオフセット又はNFB値を利用する。もちろん、符号化される最初の係数に対して、オフセット/NFB値はステップ2110で設定されたものと等しい。後に処理される係数に対しては、オフセット/NFBの現在の値又は優先値を用いる。
ステップ2140の符号化の結果に関して、テストを適用する。テストの結果によって、処理はステップ2150、2160、又は2170に進み、あるいは、直接ステップ2180に進む。まず、当該テストについて説明する。なお、当該テストは図30/図31の固定ビットシステム又は図37及び付随して説明したparam_offsetシステムが用いられるか否かによってわずかに異なる。
[固定ビットテスト]
固定ビットストリームの場合、一連の固定ビットが符号化されるときはいつでも(ステップ1655又はステップ1755を実行するときはいつでも)変数「トータル」がインクリメントされる。これにより、変数が最後にリセットされ、固定ビットが符号化された時から、変数「トータル」は機会の数を指す。図37では、変数「トータル」のインクリメントは、後述するステップ2150、2160、2170の各ステップにおいて行われるものとして概略的に示されている。
このテストにより、
remaining_magnitude=(magnitude−1)>>NFB
(式中、「magnitude」は係数の大きさである)となるように、固定ビットとして符号化されない変数の大きさの一部として定義される変数remaining_magnitudeが得られる。
他の値である基準レベルが(上述のように)エスケープコードを用いずに表現できる最大値として定義される。ここで、特定の係数は、(例えば)1つ、2つ、若しくは3つのフラグ、又は当該係数に関して符号化されたマップエントリを有してもよい。したがって、
係数が3以上フラグを有していた場合、基準レベルは3であり、
係数が2以上フラグを有していた場合、基準レベルは2であり、その他の場合、
基準レベルは1である。
その後、値remaining_magnitudeを基準レベルに対してテストする。
((remaining_magnitude>>1)?基準レベル)の場合、変数「アンダー」をインクリメントする。図37において、これはステップ2150に該当する。このステップの根底にある意味は、固定ビット(NFB)の数が現在の係数を符号化するのに十分でないようないわゆるアンダーシュートが検出されたことである。テストにおける右シフト(>>1)の重要性は、変数NFBが2ビット以上不十分である場合、当該アンダーシュートが、注目すべきアンダーシュートとしてのみフラグ化され(変数「アンダー」がインクリメントされ)ることである。
同様に、((NFB>0)AND((remaining_magnitude<<1)?0))である場合、変数「オーバー」をインクリメントする。図37において、これはステップ2160に該当する。このステップの根底にある意味は、たとえ1ビット少ない固定ビット(上記の式における<<1シフトで検出される)で固定ビット要素が当該係数の全体の大きさを符号化できたとしても、オーバーシュートが検出されることである。換言すると、固定ビットの数は当該係数を符号化するのに必要な数を著しく超えている。
これらのテストで使用される様々なパラメータ、特に適用されるビットシフトの数は、当業者の設計技能に従って変更できることが理解されよう。
アンダーシュートテストもオーバーシュートテストも実行されないが固定ビットが符号化される場合、処理はステップ2170に移り、変数トータルのみがインクリメントされる。
完全を期すために、処理は直接、固定ビット動作が可能でない図37のステップ2180に移り、変数アンダー、オーバー、及びトータルのいずれも変化しない。
[Param_Offsetテスト]
param_offsetに基づくシステムの場合、基本的な原理は同じであるため、同様の概略フローチャートについて説明するが、固定ビットシステムに関しては詳細が上述のものとわずかに異なる。
エスケープ値を符号化するときはいつでも、変数「トータル」をインクリメントする。これは、ステップ2150、2160及び2170の各ステップにおいて行われるものとして概略的に示されている。
上述のようにオフセットparam_offsetの効果を考慮するように定義されるパラメータkに対して係数値(値base_levelを減算したものであり、そのため、図38を参照して後述する変数escapeCodeValueに相当する)をテストする。換言すると、ここで用いられる「k」という値は、上記k(上述したように1群内で0〜4に変化する)にparam_offsetを加算した値に等しい。
(escapeCodeValue>(3<<k))の場合、変数「アンダー」をインクリメントする。これは、図37のステップ2150に該当し、上述のアンダーシュート状態を示す。換言すると、param_offsetを考慮して、変数kはエスケープコードをkという値に依存する2値バイナリ符号(two-part binary code)として符号化するのに不十分であった。この場合、上述したように、エスケープ−エスケープコードは、エスケープコードを符号化した後の任意のさらなる余り又は残りに応じて生成される。
そうでなければ、((escapeCodeValue*3)<(1<<k))の場合、変数「オーバー」をインクリメントする。これは、図37のステップ2160に該当する。これは、param_offsetを考慮して、変数kがエスケープコードを符号化するのに必要とされる数より多いサフィックスビットに基づくフォーマットの2値バイナリ符号を提供したオーバーシュート状態を表す。
アンダーシュートテストもオーバーシュートテストも実行されないがエスケープコードを符号化する場合、処理はステップ2170に移り、変数トータルのみがインクリメントされる。
なお、処理は直接、エスケープコードが符号化されない場合の図37のステップ2180に移り、変数アンダー、オーバー、及びトータルのいずれも変化しない
なお、いずれかの一連のテストにおいて、NFB又はparam_offsetがより高い又は低い場合、アンダーシュート又はオーバーシュートが発生するか否かを確認することにより、アンダーシュート又はオーバーシュートが「重要」であるか否かを確認する。しかしながら、この追加マージンは必要ない。これらのテストは、単に「アンダー(オーバー)シュートが発生した?」とすることができる。
ステップ2180において、TU内で符号化のために利用できる他の係数がある場合、処理はステップ2140に戻る。そうでなければ、処理は各TUの末端であるが、次のTUが符号化される前に実行されるステップ2190に移る。このステップ2190において、変数オフセット/NFBを、変数アンダー、オーバー、及びトータルに従って適用可能に変更する可能性がある。ここで、同様の適用が、
((アンダー*4)>トータルの場合、オフセット/NFB値を(1)インクリメントし、
((オーバー*2)>トータルの場合、オフセット/NFB値を最小値を0として(1)デクリメントするように、オフセット値及びNFB値のどちらかに適用される。
なお、両テストが単一のTUに関して実行される場合、ステップ2190においてNFB又はparam_offsetの値は同じままである。
なお、スライス及びTUによる分割は必須ではない。値のどのセット(ビデオデータ値でなくてもよい)も同様に処理することができ、本明細書におけるTU分割の代わりに、サブセットに再分割することができる。
これは、25%を超えるアンダーシュートを経験する場合、オフセット/NFBのインクリメントに、50%を超えるオーバーシュートの場合オフセット/NFB値のデクリメントに等しい。したがって、アンダーシュートのテストに用いられる比率は、オーバーシュートのテストに用いられる比率よりも低い。この非対称性の理由は、アンダーシュートの場合に用いられるエスケープ符号化法の機能により、アンダーシュートがオーバーシュートよりも非効率なことである。しかしながら、同一の閾値を使用でき、あるいは、異なる値を使用できることが理解されよう。
最後に、ステップ2200において、スライスにおいて他のTUがある場合、処理はステップ2120に戻る。スライス内に他のTUがない場合、処理はステップ2100に戻る。なお、上述のように、オフセット/NFBにたいする出発点は、終了したばかりの符号化処理の間に得られた結果に基づいて、(次のスライス又はその後のスライスのために、ステップ2120の次の過程で使用するために)任意に設定することができる。
デコーダ側(又はエンコーダの復号化経路)で補足ステップを実行する。例えば、復号化方法には、それぞれ所定の大きさの範囲の第1の部分を示し、バイナリ符号化によって入力データストリームに符号化された、1つ又は複数のデータセットから、各データ値の第1の部分を復号化し、少なくともデータセットによって完全には符号化されなかったこれらデータ値の、ビット数が整数である値nに依存し、入力データストリームに挿入されたデータで定義される第2の部分を復号化し、第1の部分及び第2の部分によって完全には復号化されなかったデータ値が存在する場合、入力データストリームからデータ値の残りの第3の部分を復号化し、2以上のデータ値のサブセットに対して、(i)第3の部分が符号化されており、より高い値のnが使用されていた場合にも当該第3の部分の符号化が必要であったとされるデータ値のインスタンスの数及び(ii)第2の部分が符号化されているが、当該データ値は、より低い値のnを使用しても第1の部分及び第2の部分によって完全に符号化されたとされるデータ値のインスタンスの数を検出し、データ値のサブセットを復号化した後、当該検出の結果に従って次のデータ値に対して使用するためにnを変化させることが含まれる。
図38は、(上述したようにkに加算される)param_offset変数に関する上記各技術の別の例を示す概略フローチャートである。上述したように、対応の技術がエンコーダ側及び(エンコーダの復号化経路を含む)デコーダ側で実行される。
ステップ2300において、上記ステップ2100と同様にスライスの処理を開始する。
ステップ2310において、変数current_statを例えば、0の初期値(当該スライスに関して)にリセットする。変数current_statは、下記のように用いられる。
ステップ2320において、現在のスライス内の16個の係数から成る1群に関する処理を開始する。本例では、下記に記載する処理は、係る群つき最高一回行う。しかし、このような特定のサイズの群への分割は単なる例示に過ぎず、64個の係数等、他の群サイズを採用することができることを理解されたい。本例では、1つのグループ(群)が、TUの全体又は一部を成す。
ステップ2330において、当該グループ内の任意の2値データ値を符号化するのに用いるGolomb−RiceParameterを、次のように設定する。
Golomb−RiceParameter=k+INT(current_stat/4)
=k+initialGolombRiceParameter(下記参照)
式中、INTは、括弧内の用語の整数値を示す。つまり、任意のわずかな余りが破棄される。したがって、例えば、INT(5/4)=1である。
なお、上記の式は、値kを含むようなGolomb−RiceParameterの単なる一式である。ステップ2330で設定するGolomb−RiceParameterの別の式は、次のようなものであり得る:
Golomb−RiceParameter=INT(current_stat/4)
=initialGolombRiceParameter(下記参照)
これによって、Golomb−RiceParameterは、2値符号化(two-part encoding)を定義するのに用いる値を導出するためにkに加算される値となる。もちろん、当業者であれば、これが技術上の相違というよりも単に表記の問題だということが理解されるであろう。
したがって、Golomb−RiceParameterは、各係数群(本例では、1つのTUの4×4領域)の始めにおいて初期化される。後述するcurrent_statの修正以外でcurrent_statが使用されるのはこの時のみである。current_statは、現在のグループの処理中に修正されるが、(Golomb−RiceParameterに対する)変更は、次のグループの始めにしか実施されない。しかし、他の例では、次のグループの開始前にGolomb−RiceParameterに対する変更を行うこともできる。
ステップ2340において、次の係数を、ステップ2140を参照して上述したように符号化する。
ステップ2350において、ステップ2340での係数の符号化によって当該グループ内のエスケープコードの第1のインスタンスが生成されたか否かが確かめられる。第1のインスタンスが生成されている場合、処理はステップ2360に移行する。第1のインスタンスが生成されていない場合、処理はステップ2370に移行する。
ステップ2360において、当該グループ内のエスケープコードの生成の第1のインスタンスに関して、値current_statは、次のように変更される(可能性がある)。
initialGolombRiceParameter=INT(current_stat/4)とし、
escapeCodeValue>=(3<<initialGolombRiceParameter)である場合、current_statをインクリメントする。
それ以外の場合
(((escapeCodeValue*2)<(1<<initialGolombRiceParameter))AND(current_stat>0))である場合、current_statをデクリメントする。
ここで、escapeCodeValueは、先のシンタックス要素の符号化後の余りであり、エスケープコードとしての符号化を必要とする。インクリメントは本例では1を加算することであり、デクリメントは本例では1を減算することである。
current_statのインクリメントにつながる上記テストは、効果的には、エスケープ−エスケープコードが必要か否かについてのテストである。エスケープ−エスケープコードが必要な場合、current_statをインクリメントする。エスケープ−エスケープコードが必要でない場合、current_statをインクリメントしない。
current_statのデクリメントにつながる上記テストは、2つの因子を考慮に入れている。1つ目の因子は、(kに加算した場合の)initialGolombRiceParameterの値は、当該エスケープコードを符号化するのに必要とされる量を(少なくとも1だけ)より大きかったか否かである。2つ目は、current_statが、ゼロ(所定の最小値の一例)より大きかったか否かである。これらのテストの両方の答えが「yes」の場合、current_statをデクリメントする。
なお、上述したように、本例では、ステップ2360を、各グループ内のエスケープコードの第1のインスタンスのみに実行する。他の実施形態では、テストは、エスケープコードを生成させる他のコード値に対して実行してもよい。処理は、ステップ2370に進む。ステップ2370において、当該グループ内に他の係数が残っている場合、処理はステップ2340に戻る。当該グループ内に他の係数が残っていない場合、処理はステップ2380に進む。
ステップ2380において、当該スライスに他のグループが残っている場合、処理はステップ2320に戻る。当該スライスに他のグループが残っていない場合、処理はステップ2300に戻る。
なお、図37の構成との類似性として、「INT」値を用いて、4の約数(又は、実際には、1より大きい任意の約数)を用いて、initialGolombRIceParameter及びGolomb−RiceParameterをcurrent_statと関連付けることは、initialGolombRIceParameter及びGolomb−RiceParameterが実際には、エスケープコードによってcurrent_statのインクリメントが引き起こされる第1のグループにおいて変化しないことを意味する。係るエスケープコードが多数検出されることに基づいてinitialGolombRIceParameter及びGolomb−RiceParameterの変更を引き起こすには、2以上の係るインスタンスのサブセットが必要とされる。「INT」機能及び1より大きい約数を使用することは、current_statの値を量子化してinitialGolombRIceParameter及びGolomb−RiceParameterを導出することと等価である。
上述したように、図38に示すステップに対応する処理は、符号化側又は復号化側で行われる。復号化側は、エンコーダの復号化経路を含み得る。これによって、Golomb−RiceParameterの導出及び展開が、符号化及び復号化機能間で正確に行われる(exactly track)。
したがって、デコーダ側で実行する場合、図38の構成によって、一連のデータ値(本例では、4×4グループ)を復号化するデータ復号化方法の別の例を表すが提供される。このデータ復号化方法は、
それぞれ所定の大きさの範囲の第1の部分を示し、バイナリ符号化によって入力データストリームに符号化された、1つ又は複数のデータセットから、各データ値の第1の部分を復号化し(重要性マップ、2以上マップ、3以上マップ等のデータセットが、第1の部分の例であり、係るデータセットの1つ又は複数を用いてもよい)、
少なくともデータセットによって完全には符号化されなかったこれらデータ値の、ビット数が整数である値nに依存し、入力データストリームに挿入されたデータで定義される第2の部分を復号化し、第1の部分及び第2の部分によって完全には復号化されなかったデータ値が存在する場合、入力データストリームからデータ値の残りの第3の部分を復号化し(ここで、この表記においてnと称されるパラメータに依存する2値符号として符号化されるエスケープコードが、第2の部分の一例であり、nに依存する2値符号として符号化され得るエスケープ−エスケープコードが、第3の部分の一例である。なお、表記nを用いて(例を参照して)上述したように導出されるkと変数パラメータとの組合せを示す)、
データ値のサブセット(エスケープコードを有する各グループの第1のデータ値等)に対して、(i)第3の部分(エスケープ−エスケープコード等)が符号化されており、より高い値のnが使用されていた場合にも当該第3の部分の符号化が必要であったとされるデータ値のインスタンス及び(ii)第2の部分が符号化されているが、当該データ値は、より低い値のnを使用しても第1の部分及び第2の部分によって完全に符号化されたとされるデータ値のインスタンスの数を検出し、
当該検出するステップの結果に従って次のデータ値に対して使用するためにn(例えば、ステップ2360、その結果として得られる、次のグループのためにステップ2330で導出されるGolomb−RiceParameterに対する影響)を変化させる。
ステップ2360、及びステップ2330に対するその影響は、上記変化させるステップの一例である。当該ステップは、第3の部分が符号化されており、より高い値のnが使用されていた場合にも当該第3の部分の符号化が必要であったとされるデータ値のインスタンスが2つ以上検出された場合にnをインクリメントすることを含む。INT機能は、このようなインスタンスが一回検出されただけでは、値nに影響がないようになっていることを意味する。
ステップ2360におけるcurrent_statの導出は、上記nを変化させるステップの一例であり、インスタンス(i)及び(ii)の累積カウント(current_stat)を生成することを含む。上述したようにINT機能によるinitialGolombRIceParameterの導出は、累積カウントの量子化された値(quantised version)に応じて値nを導出する一例である。
上記のテスト(ゼロより大きいcurrent_statであり、そうでない場合は、デクリメント不可)は、変化させるステップの一例である。当該変化させるステップは、nが所定の最小値を下回らないようにする。
上記に対応する考察が符号化方法にも適用される。
上述の各ステップを、エントロピーエンコーダ370及びエントロピーデコーダ410(符号化処理の場合)によって、又はエントロピーデコーダ410(復号化処理の場合)のみによって実行することができる。これらの処理は、ハードウェア、ソフトウェア、又はプログラム可能なハードウェア等で実現されてもよい。なお、エントロピーエンコーダ370は、本符号化技術を実現するためのエンコーダ、生成部、検出部及び処理部として機能することができる。エントロピーデコーダ410は、本明細書に記載の復号化技術を実現するための1つ又は複数のデコーダ、検出部、及び処理部として機能することができる。
したがって、上述の構成は、1群(例えば、スライス)のデータ値(例えば、画像データ)を復号化するデータ復号化方法の例を表す。このデータ復号化方法は、
それぞれ所定の大きさの範囲の第1の部分を示し、バイナリ符号化によって入力データストリームに符号化された、1つ又は複数のデータセットから、各データ値の第1の部分を復号化し、
少なくともデータセットによって完全には符号化されなかったこれらデータ値の、ビット数が整数である値nに依存し、入力データストリームに挿入されたデータで定義される第2の部分を復号化し、第1の部分及び第2の部分によって完全には復号化されなかったデータ値が存在する場合、入力データストリームからデータ値の残りの第3の部分を復号化し(ここで、例えば、第2の部分は固定ビット又はサフィックス部分を表してもよく、値nは(ゴロムライス符号化における)固定ビットの数若しくはサフィックス長、又は上述の指数ゴロム符号化の次数を表すことができ、第3の部分は、ゴロムライス又は指数ゴロムシステムにおけるプレフィックス又は固定ビットの例におけるエスケープコードを表すことができる)、
2以上のデータ値のサブセットに対して、(i)第3の部分が符号化されており、より高い値のnが使用されていた場合にも当該第3の部分の符号化が必要であったとされるデータ値のインスタンスの数(例えば、変数「アンダー」)及び(ii)第2の部分が符号化されているが、当該データ値は、より低い値のnを使用しても第1の部分及び第2の部分によって完全に符号化されたとされるデータ値のインスタンスの数(例えば、変数「アンダー」)を検出し、
データ値のサブセットを復号化した後、当該検出するステップの結果に従って次のデータ値に対して使用するためにnを変化(例えば、インクリメント又はデクリメント)させる。
変数「トータル」は、第2の部分が符号化されたデータ値のサブセットに関して検出されたインスタンスの総数の例を表す。
上記実施形態は、データ値の配列をデータセット及びデータセットにより符号化されない値に対するα符号化部分と非α符号化部分とを含むエスケープコードとして符号化するデータ符号化方法の例も表す。このデータ符号化方法は、
(ゴロムライス又は指数ゴロムにおける;kは最小サフィックス長又は次数を示す)非α符号化部分のビットの最小数を定義する0から所定の上限値までの範囲の符号化パラメータ(例えば、param_offset)を設定し、
最下位データ部分サイズの最小値を定義するように1以上のオフセット値(本例ではparam_offset)を符号化パラメータに追加し、
各データ値の少なくとも1つの最下位ビットの値を符号化するように、データ値の配列に対する所定の大きさの範囲のデータ値の位置を示す1つ又は複数のデータセット(例えば、重要性マップ、2以上マップ、3以上マップ)を生成し、
値の最上位データ部分が当該部分の0個以上の最上位ビットを表し、各最下位データ部分が最小の最下位データ部分サイズ以上の当該部分の最下位ビットの数によって決まるように、少なくとも1つ又は複数のデータセットで符号化されない各データ値の部分から、補足の最上位データ部分及び最下位データ部分をそれぞれ生成し、
データセットを出力データストリームに(例えば、バイナリ符号化データとして)符号化し、
最上位データ部分を出力データストリームに(例えば、プレフィックスとして)符号化し、
最下位部分を出力データストリームに(例えば、サフィックスとして)符号化する。
なお、上述の処理は、(いくつかの実施形態では)重要性マップの生成後に実行することができる。これによって、入力値の配列に対する非ゼロの入力値の位置を示す重要性マップであるさらなるデータセットを生成し、各入力値から1を減算して各データ値を生成することによって、各入力値から(処理対象の)データ値を生成することができる。
さらなる実施形態は、以下の番号付けされた項によって定義される。
1. 1群のデータ値を復号化するデータ復号化方法であって、
それぞれ所定の大きさの範囲の第1の部分を示し、バイナリ符号化によって入力データストリームに符号化された、1つ又は複数のデータセットから、各データ値の上記第1の部分を復号化し、
上記データセットによって完全には符号化されなかった少なくとも上記データ値の第2の部分であって、そのビット数が、整数である値nに依存し、上記入力データストリームに挿入されたデータで定義される第2の部分を復号化し、上記第1の部分及び上記第2の部分によって完全には復号化されなかったデータ値が存在する場合、上記入力データストリームから当該データ値の残りの第3の部分を復号化し、
2以上の上記データ値のサブセットに対して、(i)第3の部分が符号化されており、より高い値のnが使用されていた場合にも当該第3の部分の符号化が必要であったとされるデータ値のインスタンスの数及び(ii)第2の部分が符号化されているが、当該データ値は、より低い値のnを使用しても第1の部分及び第2の部分によって完全に符号化されたとされるデータ値のインスタンスの数を検出し、
上記データ値のサブセットを復号化した後、上記検出するステップの結果に従って次のデータ値に対して使用するために上記値nを変化させる
データ復号化方法。
2. 上記1に記載のデータ復号化方法であって、
上記検出するステップは、上記データ値のサブセットに対して、第2の部分が符号化されたインスタンスの総数を検出することを含む
データ復号化方法。
3. 上記1又は2に記載のデータ復号化方法であって、
上記変化させるステップは、第3の部分が符号化されたデータ値のインスタンスの数が、上記データ値のサブセットに対する、第2の部分が符号化された上記インスタンスの総数の第1の所定の比率を超える場合、上記値nを増加させることを含む
データ復号化方法。
4. 上記3に記載のデータ復号化方法であって、
上記変化させるステップは、第2の部分が符号化され、上記データ値が第1の部分及び第2の部分によって完全に符号化されたデータ値のインスタンスの数が、上記データ値のサブセットに対する、第2の部分が符号化された上記インスタンスの総数の第2の所定の比率を超える場合、上記値nを減少させることを含む
データ復号化方法。
5. 上記2に記載のデータ復号化方法であって、
上記変化させるステップは、第3の部分が符号化されており、より高い値のnが使用されていた場合にも当該第3の部分の符号化が必要であったとされるデータ値のインスタンスの数が、上記データ値のサブセットに対する、第2の部分が符号化された上記インスタンスの総数の第1の所定の比率を超える場合、上記値nを増加させることを含む
データ復号化方法。
6. 上記5に記載のデータ復号化方法であって、
上記変化させるステップは、第2の部分が符号化されているが、当該データ値は、より低い値のnを使用しても第1の部分及び第2の部分によって完全に符号化されたとされるデータ値のインスタンスの数が、上記データ値のサブセットに対する、第2の部分が符号化された上記インスタンスの総数の第2の所定の比率を超える場合、上記値nを減少させることを含む
データ復号化方法。
7. 上記6に記載のデータ復号化方法であって、
上記第1の所定の比率は、上記第2の所定の比率より低い
データ復号化方法。
8. 上記7に記載のデータ復号化方法であって、
上記値nを減少させる上記ステップは、上記値nを1だけ減少させることを含み、
上記値nを増加させる上記ステップは、上記値nを1だけ増加させることを含む
データ復号化方法。
9. 上記1〜8のいずれか一項に記載のデータ復号化方法であって、
各データ値に対して、補足の最上位データ部分及び最下位データ部分を、
データ値の上記最上位データ部分が、当該データ値の複数の最上位ビットを表し、上記第1の部分が上記最上位データ部分から導出され、
上記データ値の上記最下位データ部分が、当該データ値の残りのn個の最下位ビットを表し、当該データ値の上記第2の部分を形成するように生成すること
をさらに含む
データ復号化方法。
10. 上記1〜9のいずれか一項に記載のデータ復号化方法であって、
各データ値の上記第1の部分は、当該データ値の1つ又は複数の最下位ビットを表す
データ復号化方法。
11. 上記10に記載のデータ復号化方法であって、
データ値の上記第2の部分及び上記第3の部分は、上記第2の部分が1群のサフィックスビットを表し、上記第3の部分がα符号化プレフィックスを表すように、2値可変長符号によって符号化される
データ復号化方法。
12. 上記10又は11に記載のデータ復号化方法であって、
上記第2の部分は、上記第2の部分を表すシンボルがコード値範囲の各比率に従って符号化され、上記第2の部分を記述する上記シンボルのそれぞれの上記コード値範囲の上記各比率が等しい、算術符号化によって上記入力データストリームから復号化される
データ復号化方法。
13. 上記1〜12のいずれか一項に記載のデータ復号化方法であって、
上記データセットのうちの1つは、上記データ値の配列に対する非ゼロの最上位データ部分の位置を示す重要性マップである
データ復号化方法。
14. 上記1〜12のいずれか一項に記載のデータ復号化方法であって、
上記データセットは、
上記データ値の上記配列に対する1より大きい最上位データ部分の位置を示す2以上マップと、
上記データ値の上記配列に対する2より大きい最上位データ部分の位置を示す3以上マップと
を含む
データ復号化方法。
15. 上記1〜14のいずれか一項に記載のデータ復号化方法であって、
上記1群のデータ値は、周波数変換画像係数のシーケンス、又は上記シーケンスの非ゼロ要素、又は各データ値の大きさが1減らされた上記シーケンスの非ゼロ要素を含む
データ復号化方法。
16. 上記15に記載のデータ復号化方法であって、
上記1群のデータ値は、ビットデプスを有する画像データを表し、
当該データ復号化方法は、
上記画像データの上記ビットデプスに従ってnの初期値を設定すること
をさらに含む
データ復号化方法。
17. 上記15又は16に記載のデータ復号化方法であって、
符号化モード、符号化されるビデオデータ要素、上記データ値のサブセットのサイズ、及びピクチャタイプのうち1つ又は複数に従って、nの初期値を設定することを
をさらに含む
データ復号化方法。
18. 1群のデータ値を符号化するデータ符号化方法であって、
それぞれ所定の大きさの範囲の第1の部分を示す1つ又は複数のデータセットを生成し、上記データセットをバイナリ符号化によって出力データストリームに符号化することによって、各データ値の上記第1の部分を符号化し、
上記データセットによって完全には符号化されなかった少なくとも上記データ値の、そのビット数が、整数である値nに依存する第2の部分を生成し、上記第2の部分を定義するデータを上記出力データストリームに挿入し、
データ値が上記第1の部分及び上記第2の部分によって完全には復号化されなかったか否かを検出し、上記データ値が上記第1の部分及び上記第2の部分によって完全には復号化されなかった場合、上記データ値の残りの第3の部分を上記出力データストリームに符号化し、
2つ以上の上記データ値のサブセットに対して、(i)第3の部分が符号化されており、より高い値のnが使用されていた場合にも当該第3の部分の符号化が必要であったとされるデータ値のインスタンスの数及び(ii)第2の部分が符号化されているが、当該データ値は、より低い値のnを使用しても第1の部分及び第2の部分によって完全に符号化されたとされるデータ値のインスタンスの数を検出し、
上記データ値のサブセットを符号化した後、当該検出するステップの結果に従って次のデータ値に対して使用するために上記値nを変化させる
データ符号化方法。
19. 上記18に記載のデータ符号化方法によって符号化される画像データ。
20. 上記19に記載の画像データを記憶するデータキャリア。
21. コンピュータに、上記1又は18に記載のデータ復号化方法の各ステップを実行させるプログラム。
22. 上記21に記載のプログラムが記録されたコンピュータ可読記録媒体。
23. 1群のデータ値を復号化するデータ復号化装置であって、
それぞれ所定の大きさの範囲の第1の部分を示し、バイナリ符号化によって入力データストリームに符号化された、1つ又は複数のデータセットから、各データ値の上記第1の部分を復号化するように構成される第1のデコーダと、
上記データセットによって完全には符号化されなかった少なくとも上記データ値の第2の部分であって、そのビット数が、整数である値nに依存し、上記入力データストリームに挿入されたデータで定義される第2の部分を復号化し、上記第1の部分及び上記第2の部分によって完全には復号化されなかったデータ値が存在する場合、上記入力データストリームから当該データ値の残りの第3の部分を復号化するように構成される第2のデコーダと、
2つ以上の上記データ値のサブセットに対して、(i)第3の部分が符号化されており、より高い値のnが使用されていた場合にも当該第3の部分の符号化が必要であったとされるデータ値のインスタンスの数及び(ii)第2の部分が符号化されているが、当該データ値は、より低い値のnを使用しても第1の部分及び第2の部分によって完全に符号化されたとされるデータ値のインスタンスの数を検出するように構成される第1の検出部と、
上記データ値のサブセットを符号化した後に動作可能であり、上記検出するステップの結果に従って次のデータ値に対して使用するために上記値nを変化させるように構成される処理部と
を具備する
データ復号化装置。
24. 1群のデータ値を符号化するデータ符号化装置であって、
それぞれ所定の大きさの範囲の第1の部分を示す1つ又は複数のデータセットを生成し、上記データセットをバイナリ符号化によって出力データストリームに符号化することによって、各データ値の上記第1の部分を符号化するように構成されるエンコーダと、
上記データセットによって完全には符号化されなかった少なくとも上記データ値の、そのビット数が、整数である値nに依存する第2の部分を生成し、上記第2の部分を定義するデータを上記出力データストリームに挿入するように構成される生成部と、
データ値が上記第1の部分及び上記第2の部分によって完全には復号化されなかったか否かを検出し、上記データ値が上記第1の部分及び上記第2の部分によって完全には復号化されなかった場合、上記データ値の残りの第3の部分を上記出力データストリームに符号化するように構成される第1の検出部と、
2つ以上の上記データ値のサブセットに対して、(i)第3の部分が符号化されており、より高い値のnが使用されていた場合にも当該第3の部分の符号化が必要であったとされるデータ値のインスタンス及び(ii)第2の部分が符号化されているが、当該データ値は、より低い値のnを使用しても第1の部分及び第2の部分によって完全に符号化されたとされるデータ値のインスタンスを検出するように構成される第2の検出部と、
上記データ値のサブセットを符号化した後に動作可能であり、第2の検出部による検出に従って次のデータ値に対して使用するために上記値nを変化させるように構成される処理部と
を具備する
データ符号化装置。
25. 上記23又は24に記載のデータ復号化装置を具備するビデオデータキャプチャ・送信・表示及び/又は記憶装置。
26. 一連のデータ値を復号化するデータ復号化方法であって、
それぞれ所定の大きさの範囲の第1の部分を示し、バイナリ符号化によって入力データストリームに符号化された、1つ又は複数のデータセットから、各データ値の上記第1の部分を復号化し、
データセットによって完全には符号化されなかった少なくとも上記データ値の、ビット数が整数である値nに依存し、上記入力データストリームに挿入されたデータで定義される第2の部分を復号化し、データ値が上記第1の部分及び上記第2の部分によって完全には復号化されなかった場合、上記入力データストリームから当該データ値の残りの第3の部分を復号化し、
上記データ値のサブセットに対して、(i)第3の部分が符号化されており、より高い値のnが使用されていた場合にも当該第3の部分の符号化が必要であったとされるデータ値のインスタンス及び(ii)第2の部分が符号化されているが、当該データ値は、より低い値のnを使用しても第1の部分及び第2の部分によって完全に符号化されたとされるデータ値のインスタンスを検出し、
当該検出するステップの結果に従って次のデータ値に対して使用するために上記値nを変化させる
データ復号化方法。
27. 上記26に記載のデータ復号化方法であって、
上記変化させるステップは、第3の部分が符号化されており、より高い値のnが使用されていた場合にも当該第3の部分の符号化が必要であったとされるデータ値のインスタンスが2つ以上検出された場合に上記値nを増加させることを含む
データ復号化方法。
28. 上記26又は27に記載のデータ復号化方法であって、
上記変化させるステップは、
上記インスタンス(i)及び(ii)の累積カウントを生成すること、及び
上記累積カウントの量子化された値に応じて上記値nを導出すること
を含む
データ復号化方法。
29. 上記26〜28のいずれか1項に記載のデータ復号化方法であって、
上記変化させるステップは、上記値nが所定の最小値を下回らないようにする
データ復号化方法。
29. 一連のデータ値を符号化するデータ符号化方法であって、
それぞれ所定の大きさの範囲の第1の部分を示す1つ又は複数のデータセットを生成し、上記データセットをバイナリ符号化によって出力データストリームに符号化することによって、各データ値の上記第1の部分を符号化し、
上記データセットによって完全には符号化されなかった少なくとも上記データ値の、そのビット数が、整数である値nに依存する第2の部分を生成し、上記第2の部分を定義するデータを上記出力データストリームに挿入し、
データ値が上記第1の部分及び上記第2の部分によって完全には復号化されなかったか否かを検出し、上記データ値が上記第1の部分及び上記第2の部分によって完全には復号化されなかった場合、上記データ値の残りの第3の部分を上記出力データストリームに符号化し、
上記データ値のサブセットに対して、(i)第3の部分が符号化されており、より高い値のnが使用されていた場合にも当該第3の部分の符号化が必要であったとされるデータ値のインスタンス及び(ii)第2の部分が符号化されているが、当該データ値は、より低い値のnを使用しても第1の部分及び第2の部分によって完全に符号化されたとされるデータ値のインスタンスを検出し、
当該検出するステップの結果に従って次のデータ値に対して使用するために上記値nを変化させる
データ符号化方法。
30. 一連のデータ値を復号化するデータ復号化装置であって、
それぞれ所定の大きさの範囲の第1の部分を示し、バイナリ符号化によって入力データストリームに符号化された、1つ又は複数のデータセットから、各データ値の上記第1の部分を復号化するように構成される第1のデコーダと、
上記データセットによって完全には符号化されなかった少なくとも上記データ値の第2の部分であって、そのビット数が、整数である値nに依存し、上記入力データストリームに挿入されたデータで定義される第2の部分を復号化し、上記第1の部分及び上記第2の部分によって完全には復号化されなかったデータ値が存在する場合、上記入力データストリームから当該データ値の残りの第3の部分を復号化するように構成される第2のデコーダと、
上記データ値のサブセットに対して、(i)第3の部分が符号化されており、より高い値のnが使用されていた場合にも当該第3の部分の符号化が必要であったとされるデータ値のインスタンス及び(ii)第2の部分が符号化されているが、当該データ値は、より低い値のnを使用しても第1の部分及び第2の部分によって完全に符号化されたとされるデータ値のインスタンスを検出するように構成される第1の検出部と、
上記検出するステップの結果に従って次のデータ値に対して使用するために上記値nを変化させるように構成される処理部と
を具備する
データ復号化装置。
31. 一連のデータ値を符号化するデータ符号化装置であって、
それぞれ所定の大きさの範囲の第1の部分を示す1つ又は複数のデータセットを生成し、上記データセットをバイナリ符号化によって出力データストリームに符号化することによって、各データ値の上記第1の部分を符号化するように構成されるエンコーダと、
上記データセットによって完全には符号化されなかった少なくとも上記データ値の、そのビット数が、整数である値nに依存する第2の部分を生成し、上記第2の部分を定義するデータを上記出力データストリームに挿入するように構成される生成部と、
データ値が上記第1の部分及び上記第2の部分によって完全には復号化されなかったか否かを検出し、上記データ値が上記第1の部分及び上記第2の部分によって完全には復号化されなかった場合、上記データ値の残りの第3の部分を上記出力データストリームに符号化するように構成される第1の検出部と、
上記データ値のサブセットに対して、(i)第3の部分が符号化されており、より高い値のnが使用されていた場合にも当該第3の部分の符号化が必要であったとされるデータ値のインスタンス及び(ii)第2の部分が符号化されているが、当該データ値は、より低い値のnを使用しても第1の部分及び第2の部分によって完全に符号化されたとされるデータ値のインスタンスを検出するように構成される第2の検出部と、
第2の検出部による検出に従って次のデータ値に対して使用するために上記値nを変化させるように構成される処理部と
を具備する
データ符号化装置。