【文献】
T. Nguyen, D. Marpe and T. Wiegand,Non-CE11: Proposed Cleanup for Transform Coefficient Coding,Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11,8th Meeting: San Jose, CA, USA,2012年 1月,JCTVC-H0228r1,pp.1-10
【文献】
Marta Karczewicz, Joel Sole and Rajan Joshi,Non-RCE2: Rice Parameter Initialization,Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11,14th Meeting: Vienna, AT,2013年 7月,JCTVC-N0181,pp.1-8
【文献】
Marta Karczewicz et al.,RCE2: Results of Test C1 on Rice Parameter Initialization,Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11,15th Meeting: Geneva, CH,2013年10月,JCTVC-O0219,pp.1-4
【文献】
Marta Karczewicz et al.,RCE2: Results of Test D1 on Rice Parameter Initialization,Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11,15th Meeting: Geneva, CH,2013年10月,JCTVC-O0239_r1,pp.1-7
(58)【調査した分野】(Int.Cl.,DB名)
一連のシンタックス要素を取得するステップであって、前記一連のシンタックス要素の各々のそれぞれのシンタックス要素が、前記TUのそれぞれの係数レベルの絶対値に対するそれぞれの剰余値を示す、ステップと、
前記一連のシンタックス要素の各々のそれぞれのシンタックス要素に対して、
前記第1のライスパラメータ導出方法または前記第2のライスパラメータ導出方法を使用して、前記それぞれのシンタックス要素に対するライスパラメータKを導出するステップと、
前記それぞれのシンタックス要素に対する切替点を(M≪K)に等しく設定するステップであって、
MがKに依存し、
前記それぞれのシンタックス要素が前記切替点より小さい場合、前記それぞれのシンタックス要素がK次のライス符号を使用して二値化され、
前記それぞれのシンタックス要素が前記切替点以上である場合、前記それぞれのシンタックス要素がK次の指数ゴロム符号を使用してプレフィックスおよびサフィックスを使用して二値化される、
ステップと
をさらに備える、請求項1に記載の方法。
前記CUの前記残差ブロックを前記1つまたは複数の変換ブロックに分解するステップが、四分木区分を使用して前記CUの前記残差ブロックを前記1つまたは複数の変換ブロックに分解するステップを備え、
前記TUに対する前記変換ブロックに1つまたは複数の変換を適用して前記TUに対する係数ブロックを生成するステップをさらに備え、前記TUに対する前記係数ブロックが前記TUの前記係数レベルを備える、請求項6に記載の方法。
前記現在のピクチャが複数の4×4のサブブロックを備え、前記テンプレートが前記TUの現在のサンプルの近隣をカバーし、前記現在のサンプルが現在の走査場所にあり、前記第2のライスパラメータ導出方法を使用することの一部として、前記1つまたは複数のプロセッサが、
前記ローカルテンプレートによりカバーされる各々のそれぞれの近隣に対して、前記それぞれの近隣に対するそれぞれの値を決定し、前記それぞれの近隣に対する前記それぞれの値が、前記近隣の絶対値が0より大きい場合は前記近隣の前記絶対値から1を引いたものに等しく、前記近隣が0に等しい場合には0に等しく、
前記近隣に対する値の合計に等しいものとして合計値を決定し、
値Kを決定し、前記TUの係数レベルがK次のライス符号を使用して二値化され、Kの定義が、
Kは、(1 ≪ ( K + 3 ) ) > (sum_absolute_levelMinus1 + M)を満たす最小の整数として定義され、Mは整数であり、sum_absolute_levelMinus1は前記合計値である、および、
Kは、(1 ≪ ( K + 3 ) )≧(sum_absolute_levelMinus1 + M)を満たす最小の整数として定義され、Mは整数であり、sum_absolute_levelMinus1は前記合計値である
からなる群から選択される
ように、前記1つまたは複数のプロセッサが構成され、
Kが閾値に制限される、請求項11に記載のデバイス。
前記複数のカテゴリの各々のそれぞれのカテゴリに対して、前記それぞれのカテゴリに対する前記それぞれの統計値を維持することの一部として、前記1つまたは複数のプロセッサが、
前記それぞれのカテゴリに属する前記現在のピクチャの各々のそれぞれのサブブロックに対して、前記それぞれのサブブロックに対して最初にコーディングされるレベル剰余シンタックス要素を使用して前記それぞれのサブブロックに対して多くて1回前記それぞれのカテゴリに対する前記それぞれの統計値を更新するように、前記1つまたは複数のプロセッサが構成され、前記それぞれのカテゴリに対する前記それぞれの統計値を更新することの一部として、前記1つまたは複数のプロセッサが、
(absCoeffLevel >=3*(1≪(statCoeff/4)))である場合、前記それぞれのカテゴリに対する前記それぞれの統計値をインクリメントし、
((2*absCoeffLevel)<(1≪(statCoeff/4)))である場合、前記それぞれのカテゴリに対する前記それぞれの統計値をデクリメントするように、前記1つまたは複数のプロセッサが構成され、
absCoeffLevelが前記それぞれのサブブロックの絶対係数レベルであり、statCoeffが前記それぞれのカテゴリに対する前記それぞれの統計値であり、
前記複数のサブブロックの各々のそれぞれのサブブロックに対して、前記それぞれのサブブロックが属する前記カテゴリに対する前記それぞれの統計値を使用して、前記それぞれのサブブロックに対するそれぞれのライスパラメータを初期化することの一部として、前記1つまたは複数のプロセッサが、
最大のライスパラメータと、前記それぞれのサブブロックが属する前記カテゴリに対する前記それぞれの統計値を4で割ったものとのうちの小さい方として、前記それぞれのサブブロックに対する前記それぞれのライスパラメータを決定するように、前記1つまたは複数のプロセッサが構成される、請求項13に記載のデバイス。
【発明を実施するための形態】
【0015】
本開示は、ブロックベースのハイブリッドビデオコーディングにおける、特に係数レベルのコーディングのための、エントロピーコーディングモジュールに関し得る技法を説明する。本技法は、HEVC(High Efficiency Video Coding)コーデックなどの既存のビデオコーデックに適用されることが可能であり、または未来のビデオコーディング規格における効率的なコーディングツールになり得る。
【0016】
様々なビデオ符号化技法において、特定のシンタックス要素が、シンタックス要素を表すのに必要なビットの数を減らすために、エントロピー符号化される。シンタックス要素をエントロピー符号化することの一部として、ビデオエンコーダはシンタックス要素を二値化し得る。シンタックス要素を二値化するとは、シンタックス要素を表す可変長のバイナリ符号を決定するプロセスを指す。したがって、二値化されたシンタックス要素は、シンタックス要素を表す決定された可変長のバイナリ符号である。二値化されたシンタックス要素は符号語と呼ばれ得る。ビデオエンコーダは、算術コーディング技法を使用して二値化されたシンタックス要素を符号化し得る。たとえば、ビデオエンコーダは、コンテキスト適応型バイナリ算術コーディング(CABAC)を使用して、二値化されたシンタックス要素を符号化し得る。逆に、ビデオデコーダは、その算術コーディング技法を使用して、二値化されたシンタックス要素を復号し得る。ビデオデコーダは次いで、二値化されたシンタックス要素を非二値化してシンタックス要素の元の値を復元し得る。ビデオデコーダは次いで、ビデオデータの1つまたは複数のピクチャを再構築するためのプロセスの一部として、復元されたシンタックス要素を使用し得る。
【0017】
ビデオエンコーダは、様々な方法でシンタックス要素を二値化し得る。たとえば、ビデオエンコーダは、ライスコーディングまたは指数(Exp)ゴロムコーディングを使用してシンタックス要素を二値化し得る。ライスコーディングはライスパラメータに依存する。より大きなライスパラメータはより大きな値を伴うシンタックス要素を二値化するのにより適しているが、より小さなライスパラメータはより小さな値を伴うシンタックス要素を二値化するのにより適している。
【0018】
HEVCおよび特定の他のブロックベースのビデオコーディングシステムでは、コーディングユニット(CU)のセットを使用してピクチャが符号化される。ピクチャの各CUは、ピクチャ内の1つまたは複数の併置されたコーディングブロックに対応し得る。CUを符号化するために、ビデオエンコーダは、CUの1つまたは複数の予測ユニット(PU)の予測ブロックを決定することができ、CUのPUの予測ブロックの中のサンプルおよびCUのコーディングブロックの中の対応するサンプルに基づいて、CUの残差データを決定することができる。たとえば、CUの残差データの各サンプルは、CUのPUの予測ブロックの中のサンプルとCUのコーディングブロックの中の対応するサンプルとの差分に等しいことがある。CUの残差データは1つまたは複数の変換ブロックへと区分されることがあり、それらの各々がCUの変換ユニット(TU)に対応する。ビデオエンコーダは次いで、離散コサイン変換などの変換をTUの変換ブロックに適用して、係数ブロックを決定し得る。係数ブロックの中の係数の値は「係数レベル」と呼ばれ得る。たとえば、HEVCにおいて、変換係数は、復号プロセスの逆変換部分における特定の一次元または二次元の周波数インデックスと関連付けられる、周波数領域にあると考えられるスカラー量であり、変換係数レベルは、変換係数値の計算のためのスケーリングの前の、復号プロセスにおける特定の二次元周波数インデックスと関連付けられる値を表す整数量であり得る。いくつかの例では、ビデオエンコーダは係数ブロックの中の係数レベルを量子化し得る。
【0019】
さらに、ビデオエンコーダは、各係数ブロックを1つまたは複数の係数グループ(CG)に細分し得る。HEVCでは、各CGは係数ブロックの4×4のサブブロックである。係数ブロックの各々のそれぞれのCGに対して、ビデオエンコーダは、それぞれのCGが1つまたは複数の0ではない係数レベルを含むかどうかを示すシンタックス要素を生成し得る。1つまたは複数の0ではない係数レベルを含む各々のそれぞれのCGに対して、ビデオエンコーダは、それぞれの係数レベルに対する1つまたは複数のシンタックス要素のそれぞれのセットを使用して、それぞれのCGの各々のそれぞれの係数レベルを表し得る。ある係数レベルに対するシンタックス要素のセットは、その係数レベルが0ではないかどうかを示すシンタックス要素(すなわち、有意性フラグシンタックス要素)、係数レベル1が1より大きいかどうかを示すシンタックス要素(すなわち、greater1フラグ)、係数レベルが2より大きいかどうかを示すシンタックス要素(すなわち、greater2フラグ)、係数レベルの正または負の符号を示すシンタックス要素(すなわち、符号フラグ)、および係数レベルに対する剰余値を示すシンタックス要素(すなわち、剰余シンタックス要素)を含み得る。係数レベルが0であることを有意性フラグが示す場合、greater1フラグ、greater2フラグ、符号フラグ、および剰余シンタックス要素は存在しないことがある。係数レベルが0ではないことを有意性フラグが示し、係数レベルが1より大きくないことをgreater1フラグが示す場合、greater2フラグは存在せず、剰余シンタックス要素は係数レベルを示す。係数レベルが0ではないことを有意性フラグが示し、係数レベルが1より大きいことをgreater1フラグが示す場合、greater2フラグは存在する。greater2フラグが存在するが、係数レベルが2より大きくないことを示す場合、剰余シンタックス要素は係数レベル-1を示す。greater2フラグが存在し、係数レベルが2より大きいことを示す場合、剰余シンタックス要素は係数レベル-2を示す。
【0020】
HEVCでは、ビデオエンコーダは、ライス符号を使用して小さな値を有する剰余シンタックス要素を二値化することができ、指数ゴロム符号を使用してより大きな値を有する剰余シンタックス要素を二値化することができる。上で言及されたように、ある値に対するライス符号を決定するプロセスは、ライスパラメータに依存する。HEVCでは、ビデオエンコーダは、いわゆる「振り返りベースの導出方法」を使用して、剰余シンタックス要素を二値化するために使用されるライスパラメータを設定する。HEVC Range Extensionsでは、ビデオエンコーダは、いわゆる「統計ベースの導出方法」を使用して、剰余シンタックス要素を二値化するために使用されるライスパラメータを設定する。「テンプレートベースの導出方法」と呼ばれる別の技法は、ローカルテンプレートによりカバーされる近隣の係数レベルの絶対値に基づいて、剰余シンタックス要素を二値化するためのライスパラメータを決定する。テンプレートは、変換ブロックにおける現在の係数の場所と比較した、いくつかの相対的な場所を含み得る。いくつかの例では、テンプレートは、構文解析または復号の順序において現在の係数レベルより前に現れる、サンプルの連続的なセットである。
【0021】
以下でさらに詳細に説明されるように、HEVC、HEVC Range Extensions、および様々な他の以前の提案においてライスパラメータを導出するための技法が改善され得る。本開示において説明される技法は、そのような技法に対する改善を表し得る。たとえば、本開示の例によれば、ビデオコーダ(たとえば、ビデオエンコーダまたはビデオデコーダ)は、ピクチャの現在のCUの単一のTUの係数レベルを復号するために、第1のライスパラメータ導出方法および第2のライスパラメータ導出方法を使用し得る。この例では、第1のライスパラメータ導出方法は統計ベースの導出方法であり、第2のライスパラメータ導出方法はテンプレートベースの導出方法である。したがって、この例では、ビデオコーダは、TUの中の一部の剰余シンタックス要素に対しては統計ベースの導出方法を使用することができ、同じTUの中の他の剰余シンタックス要素に対してはテンプレートベースの導出方法を使用することができる。本技法は、ビデオコーダがより良好な圧縮をもたらし得るライスパラメータを選択することを可能にし得る。
【0022】
図1は、本開示の技法を利用し得る例示的なビデオコーディングシステム10を示すブロック図である。本明細書で使用される「ビデオコーダ」という用語は、総称的に、ビデオエンコーダとビデオデコーダの両方を指す。本開示では、「ビデオコーディング」または「コーディング」という用語は、ビデオ符号化またはビデオ復号を総称的に指すことがある。
【0023】
図1に示されるように、ビデオコーディングシステム10は、ソースデバイス12および宛先デバイス14を含む。ソースデバイス12は、符号化されたビデオデータを生成する。したがって、ソースデバイス12は、ビデオ符号化デバイスまたはビデオ符号化装置と呼ばれ得る。宛先デバイス14は、ソースデバイス12によって生成された符号化されたビデオデータを復号し得る。したがって、宛先デバイス14は、ビデオ復号デバイスまたはビデオ復号装置と呼ばれ得る。ソースデバイス12および宛先デバイス14は、ビデオコーディングデバイスまたはビデオコーディング装置の例であり得る。
【0024】
ソースデバイス12および宛先デバイス14は、デスクトップコンピュータ、モバイルコンピューティングデバイス、ノートブック(たとえば、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォンなどの電話ハンドセット、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、車載コンピュータなどを含む、広範囲のデバイスを備え得る。
【0025】
宛先デバイス14は、ソースデバイス12からチャネル16を介して符号化されたビデオデータを受信し得る。チャネル16は、符号化されたビデオデータをソースデバイス12から宛先デバイス14に移動することが可能な1つまたは複数の媒体またはデバイスを備え得る。一例では、チャネル16は、ソースデバイス12が符号化されたビデオデータをリアルタイムで宛先デバイス14に直接送信することを可能にする、1つまたは複数の通信媒体を備え得る。この例では、ソースデバイス12は、ワイヤレス通信プロトコルなどの通信規格に従って符号化されたビデオデータを変調することができ、変調されたビデオデータを宛先デバイス14へ送信することができる。1つまたは複数の通信媒体は、高周波(RF)スペクトルまたは1つまたは複数の物理伝送線路などの、ワイヤレスおよび/または有線の通信媒体を含み得る。1つまたは複数の通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはグローバルネットワーク(たとえば、インターネット)などの、パケットベースネットワークの一部を形成し得る。1つまたは複数の通信媒体は、ルータ、スイッチ、基地局、またはソースデバイス12から宛先デバイス14への通信を容易にする他の機器を含み得る。
【0026】
別の例では、チャネル16は、ソースデバイス12によって生成された符号化されたビデオデータを記憶する記憶媒体を含み得る。この例では、宛先デバイス14は、たとえば、ディスクアクセスまたはカードアクセスを介して記憶媒体にアクセスし得る。記憶媒体は、Blu-ray(登録商標)ディスク、DVD、CD-ROM、フラッシュメモリ、または符号化されたビデオデータを記憶するための他の適切なデジタル記憶媒体などの、ローカルにアクセスされる様々なデータ記憶媒体を含み得る。
【0027】
さらなる例では、チャネル16は、ソースデバイス12によって生成された符号化されたビデオデータを記憶するファイルサーバまたは別の中間記憶デバイスを含み得る。この例では、宛先デバイス14は、ファイルサーバまたは他の中間記憶デバイスにおいて記憶された符号化されたビデオデータに、ストリーミングまたはダウンロードを介してアクセスし得る。ファイルサーバは、符号化されたビデオデータを記憶するとともに符号化されたビデオデータを宛先デバイス14へ送信することが可能なタイプのサーバであり得る。例示的なファイルサーバは、(たとえば、ウェブサイト用の)ウェブサーバ、ファイル転送プロトコル(FTP)サーバ、ネットワーク接続ストレージ(NAS)デバイス、およびローカルディスクドライブを含む。
【0028】
宛先デバイス14は、インターネット接続などの標準的なデータ接続を通じて符号化されたビデオデータにアクセスし得る。例示的なタイプのデータ接続は、ファイルサーバに記憶されている符号化されたビデオデータにアクセスするのに適切である、ワイヤレスチャネル(たとえば、Wi-Fi接続)、有線接続(たとえば、DSL、ケーブルモデムなど)、または両方の組合せを含み得る。ファイルサーバからの符号化されたビデオデータの送信は、ストリーミング送信、ダウンロード送信、または両方の組合せであってよい。
【0029】
本開示の技法は、ワイヤレスの用途または設定に限定されない。技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、たとえば、インターネットを介したストリーミングビデオ送信、データ記憶媒体に記憶するためのビデオデータの符号化、データ記憶媒体に記憶されたビデオデータの復号、または他の用途などの様々なマルチメディア用途をサポートするビデオコーディングに適用され得る。いくつかの例では、ビデオコーディングシステム10は、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、および/またはビデオ電話などの用途をサポートするために、単方向または双方向のビデオ送信をサポートするように構成され得る。
【0030】
図1に示されるビデオコーディングシステム10は例にすぎず、本開示の技法は、符号化デバイスと復号デバイスとの間のデータ通信を必ずしも含まないビデオコーディングの設定(たとえば、ビデオ符号化またはビデオ復号)に適用され得る。他の例では、データは、ローカルメモリからの取出し、ネットワークを介したストリーミングなどが行われる。ビデオ符号化デバイスは、データを符号化してメモリに記憶することができ、かつ/またはビデオ復号デバイスはメモリからデータを取り出して復号することができる。多くの例では、互いに通信しないが、単にデータをメモリへと符号化し、かつ/またはメモリからデータを取り出して復号するデバイスによって、符号化および復号が実行される。
【0031】
図1の例では、ソースデバイス12は、ビデオソース18、ビデオエンコーダ20、および出力インターフェース22を含む。いくつかの例では、出力インターフェース22は、変調器/復調器(モデム)および/または送信機を含み得る。ビデオソース18は、ビデオキャプチャデバイス、たとえば、ビデオカメラ、以前キャプチャされたビデオデータを含むビデオアーカイブ、ビデオデータをビデオコンテンツプロバイダから受信するためのビデオフィードインターフェース、および/もしくはビデオデータを生成するためのコンピュータグラフィックスシステム、またはビデオデータのそのようなソースの組合せを含み得る。
【0032】
ビデオエンコーダ20は、ビデオソース18からのビデオデータを符号化し得る。いくつかの例では、ソースデバイス12は、符号化されたビデオデータを宛先デバイス14へ出力インターフェース22を介して直接送信する。他の例では、復号および/または再生のために宛先デバイス14が後でアクセスするために、符号化されたビデオデータはまた、記憶媒体またはファイルサーバへ記憶され得る。
【0033】
図1の例では、宛先デバイス14は、入力インターフェース28、ビデオデコーダ30、およびディスプレイデバイス32を含む。いくつかの例では、入力インターフェース28は、受信機および/またはモデムを含む。入力インターフェース28は、符号化されたビデオデータをチャネル16を通じて受信し得る。ディスプレイデバイス32は、宛先デバイス14と一体であることがあり、または宛先デバイス14の外部にあることがある。一般に、ディスプレイデバイス32は復号されたビデオデータを表示する。ディスプレイデバイス32は、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなどの様々なディスプレイデバイスを備え得る。
【0034】
ビデオエンコーダ20およびビデオデコーダ30は各々、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理回路、ハードウェア、またはそれらの任意の組合せなどの、様々な適切な回路のいずれかとして実装され得る。技法が部分的にソフトウェアで実装される場合、本開示の技法を実行するために、デバイスは、ソフトウェアのための命令を適切な非一時的コンピュータ可読記憶媒体に記憶することができ、1つまたは複数のプロセッサを使用するハードウェアにおいて命令を実行することができる。前述のもののいずれも(ハードウェア、ソフトウェア、ハードウェアとソフトウェアの組合せなどを含む)が、1つまたは複数のプロセッサであると見なされ得る。ビデオエンコーダ20およびビデオデコーダ30の各々は、1つまたは複数のエンコーダまたはデコーダに含まれてよく、それらのいずれかが、それぞれのデバイスの中で複合エンコーダ/デコーダ(コーデック)の一部として一体化されてよい。
【0035】
本開示は全般に、ある情報を別のデバイスへ(たとえば、ビデオデコーダ30へ)「シグナリング」または「送信」することに言及し得る。「シグナリングすること」または「送信すること」という用語は、全般に、シンタックス要素、および/または圧縮されたビデオデータを復号するために使用される他のデータの通信を指し得る。そのような通信は、リアルタイムで、またはほぼリアルタイムで発生し得る。代替的に、そのような通信は、ある時間の範囲にわたって、たとえば、符号化の時点において符号化されたビットストリームの中のシンタックス要素をコンピュータ可読記憶媒体に記憶するときに発生することがあり、次いで、シンタックス要素が、この媒体に記憶された後の任意の時点において復号デバイスによって取り出され得る。
【0036】
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、ビデオ圧縮規格、すなわちビデオコーディング規格に従って動作する。例示的なビデオコーディング規格は、ITU-T H.261、ISO/IEC MPEG-1 Visual、ITU-T H.262またはISO/IEC MPEG-2 Visual、ITU-T H.263、ISO/IEC MPEG-4 Visual、および、そのスケーラブルビデオコーディング(SVC)拡張とマルチビュービデオコーディング(MVC)拡張とを含むITU-T H.264(ISO/IEC MPEG-4 AVCとしても知られる)を含む。加えて、新しいビデオコーディング規格、すなわちHigh Efficiency Video Coding (HEVC)またはITU-T H.265が、そのRange Extensions、マルチビュー拡張(MV-HEVC)およびスケーラブル(SHVC)拡張を含めて、Joint Collaboration Team on Video Coding(JCT-VC)、ならびに、ITU-T Video Coding Experts Group(VCEG)およびISO/IEC Motion Picture Experts Group(MPEG)のJoint Collaboration Team on 3D Video Coding Extension Development(JCT-3V)によって最近開発された。以後HEVC WDまたは「HEVC仕様書」と呼ばれるHEVCの暫定仕様書は、http://phenix.int-evry.fr/jct/doc_end_user/documents/14_Vienna/wg11/JCTVC-N1003-v1.zipから入手可能である。HEVCの別の暫定仕様書は、Bross他、「High Efficiency Video Coding (HEVC) text specification draft 10 (for FDIS & Last Call)」、ITU-T SG16 WP3およびISO/IEC JTC1/SC29/WG11のJoint Collaborative Team on Video Coding(JCT-VC)、第12回会合、ジュネーブ、スイス、2013年1月14〜23日、文書JCTVC-L1003_v34(以後「JCTVC-L1003」)であり、これはhttp://phenix.it-sudparis.eu/jct/doc_end_user/documents /12_Geneva/ wg11/JCTVC-L1003-v34.zipにおいて入手可能であり得る。例として、変換係数のコーディングならびにコンテキスト適応型バイナリ算術コーディング(CABAC)に注目して、HEVCの設計の態様が以下で紹介される。
【0037】
HEVCおよび他のビデオコーディング規格では、ビデオシーケンスは通常、一連のピクチャを含む。ピクチャは「フレーム」と呼ばれることもある。ピクチャは1つまたは複数のサンプルアレイを含み得る。たとえば、ピクチャは、それぞれS
L、S
Cb、およびS
Crと表記されるルーマサンプルのアレイおよびクロマサンプルの2つのアレイを含み得る。S
Lは、ルーマサンプルの2次元アレイ(すなわち、ブロック)である。S
Cbは、Cbクロマサンプルの2次元アレイである。S
Crは、Crクロマサンプルの2次元アレイである。他の事例では、ピクチャはモノクロームであってよく、ルーマサンプルのアレイしか含まないことがある。
【0038】
HEVCでは、スライスの中の最大のコーディングユニットは、コーディングツリーユニット(CTU)と呼ばれる。CTUは、そのノードがコーディングユニットである四分木を含む。CTUのサイズは、HEVCメインプロファイルでは16×16から64×64の範囲にわたり得る(ただし、技術的には8×8のCTUサイズがサポートされ得る)。ピクチャの符号化された表現を生成するために(すなわち、ピクチャを符号化するために)、ビデオエンコーダ20は、コーディングツリーユニット(CTU)のセットを生成し得る。各々のそれぞれのCTUは、ルーマサンプルのコーディングツリーブロック、クロマサンプルの2つの対応するコーディングツリーブロック、およびコーディングツリーブロックのサンプルをコーディングするために使用されるシンタックス構造であり得る。モノクロームピクチャ、または3つの別個のカラープレーンを有するピクチャでは、CTUは、単一のコーディングツリーブロック、およびコーディングツリーブロックのサンプルをコーディングするために使用されるシンタックス構造を備え得る。コーディングツリーブロックは、サンプルのN×Nブロックであり得る。CTUは、「ツリーブロック」または「最大コーディングユニット」(LCU)と呼ばれることもある。スライスは、ラスター走査順序などのある走査順序で連続的に順序付けられた整数個のCTUを含み得る。
【0039】
HEVCにおいて符号化されたCTUを生成するために(すなわち、CTUを符号化するために)、ビデオエンコーダ20は、CTUのコーディングツリーブロック上で四分木区分を再帰的に実行してコーディングツリーブロックをコーディングブロックに分割することができ、したがって、「コーディングツリーユニット」という名前である。コーディングブロックは、サンプルのN×Nブロックである。CUは、ルーマサンプルアレイ、Cbサンプルアレイ、およびCrサンプルアレイを有するピクチャの、ルーマサンプルのコーディングブロックおよびクロマサンプルの2つの対応するコーディングブロック、ならびにそれらのコーディングブロックのサンプルをコーディングするために使用されるシンタックス構造であり得る。モノクロームピクチャ、または3つの別個の色平面を有するピクチャでは、CUは、単一のコーディングブロックと、コーディングブロックのサンプルをコーディングするために使用されるシンタックス構造とを備え得る。CUは、CTUと同じサイズであり得るが、CUは8×8程度の小ささであり得る。
【0040】
ビデオエンコーダ20は、CUの符号化された表現を生成する(すなわち、CUを符号化する)ことができる。CUを符号化することの一部として、ビデオエンコーダ20は、CUのコーディングブロックを1つまたは複数の予測ブロックに区分し得る。予測ブロックは、同じ予測が適用されるサンプルの長方形(すなわち、正方形または非正方形)のブロックであり得る。CUの予測ユニット(PU)は、ピクチャのルーマサンプルの予測ブロック、クロマサンプルの2つの対応する予測ブロック、および予測ブロックサンプルを予測するために使用されるシンタックス構造であり得る。ビデオエンコーダ20は、CUの各PUのルーマ予測ブロック、Cb予測ブロック、およびCr予測ブロックのための、予測ルーマブロック、予測Cbブロック、および予測Crブロックを生成し得る。モノクロームピクチャ、または3つの別個のカラープレーンを有するピクチャでは、PUは、単一の予測ブロックと、その予測ブロックを予測するために使用されるシンタックス構造とを備え得る。
【0041】
ビデオエンコーダ20は、PUの予測ブロックを生成するためにイントラ予測またはインター予測を使用し得る。各CUは、イントラ予測モードまたはインター予測モードのいずれか1つを用いてコーディングされる。ビデオエンコーダ20がPUの予測ブロックを生成するためにイントラ予測を使用する場合、ビデオエンコーダ20は、PUと関連付けられるピクチャの復号されたサンプルに基づいてPUの予測ブロックを生成し得る。ビデオエンコーダ20がPUの予測ブロックを生成するためにインター予測を使用する場合、ビデオエンコーダ20は、PUと関連付けられるピクチャ以外の1つまたは複数のピクチャの復号されたサンプルに基づいて、PUの予測ブロックを生成し得る。CUがインターコーディングされるとき(すなわち、インター予測がCUのPUの予測ブロックを生成するために使用されるとき)、CUは2つまたは4つのPUへと区分されることがあり、または、さらなる区分が適用されないとき、CUは1つだけのPUになることがある。1つのCUの中に2つのPUが存在するとき、2つのPUは、CUの半分のサイズの長方形であることがあり、またはCUのサイズの1/4または3/4のサイズを有する2つの長方形であることがある。さらに、CUがインターコーディングされるとき、各PUに対して動き情報の1つのセットが存在する。加えて、CUがインターコーディングされるとき、CUの各PUは、動き情報のセットを導出するために別々のインター予測モードを用いてコーディングされる。
【0042】
ビデオエンコーダ20がCUの1つまたは複数のPUの予測ブロック(たとえば、予測ルーマブロック、予測Cbブロック、および予測Crブロック)を生成した後、ビデオエンコーダ20は、CUの1つまたは複数の残差ブロックを生成し得る。CUの残差ブロックの中の各サンプルは、CUのPUの予測ブロックの中のサンプルとCUのコーディングブロックの中の対応するサンプルとの差分を示す。たとえば、ビデオエンコーダ20は、CUのルーマ残差ブロックを生成し得る。CUのルーマ残差ブロックの中の各サンプルは、CUのPUの予測ルーマブロックの中のルーマサンプルとCUのルーマコーディングブロックの中の対応するサンプルとの差分を示す。加えて、ビデオエンコーダ20は、CUのCb残差ブロックを生成し得る。CUのCb残差ブロックの中の各サンプルは、CUのPUの予測Cbブロックの中のCbサンプルとCUのCbコーディングブロックの中の対応するサンプルとの差分を示す。ビデオエンコーダ20はまた、CUのCr残差ブロックを生成し得る。CUのCr残差ブロックの中の各サンプルは、CUのPUの予測Crブロックの中のCrサンプルとCUのCrコーディングブロックの中の対応するサンプルとの差分を示し得る。
【0043】
さらに、ビデオエンコーダ20は、(たとえば、四分木区分を使用して)CUの各残差ブロックを1つまたは複数の変換ブロックに分解し得る。変換ブロックは、同じ変換が適用されるサンプルの、長方形(正方形または非正方形)のブロックであり得る。CUの変換ユニット(TU)は、ルーマサンプルの変換ブロック、クロマサンプルの2つの対応する変換ブロック、および変換ブロックサンプルを変換するために使用されるシンタックス構造であり得る。したがって、CUの各TUは、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロックと関連付けられ得る。TUと関連付けられるルーマ変換ブロックは、CUのルーマ残差ブロックのサブブロックであり得る。Cb変換ブロックは、CUのCb残差ブロックのサブブロックであり得る。Cr変換ブロックは、CUのCr残差ブロックのサブブロックであり得る。モノクロームピクチャ、または3つの別個の色平面を有するピクチャでは、TUは、単一の変換ブロックと、変換ブロックのサンプルを変換するために使用されるシンタックス構造とを備え得る。いくつかの例では、ルーマ成分およびクロマ成分のための同じCUの中の残差ブロックは、異なる方法で区分され得る。いくつかの例では、CUサイズがPUサイズおよびTUサイズに等しくなければならない、すなわち、1つのCUが1つのPUおよび1つのTUしか含まないという制約がある。
【0044】
ビデオエンコーダ20は、1つまたは複数の変換をTUの変換ブロックに適用して、TUの係数ブロックを生成し得る。TUの係数ブロックはTUの係数レベルを備え得る。たとえば、ビデオエンコーダ20は、1つまたは複数の変換をTUのルーマ変換ブロックに適用して、TUのルーマ係数ブロックを生成し得る。ビデオエンコーダ20は、1つまたは複数の変換をTUのCb変換ブロックに適用して、TUのCb係数ブロックを生成し得る。ビデオエンコーダ20は、1つまたは複数の変換をTUのCr変換ブロックに適用して、TUのCr係数ブロックを生成し得る。係数ブロックは、変換係数の2次元アレイであり得る。変換係数は、スカラー量であり得る。前に示されたように、変換係数の値は係数レベルと呼ばれ得る。いくつかの例では、ビデオエンコーダ20は変換の適用をスキップする。変換の適用があるブロックに対してスキップされるとき、そのブロック(たとえば、TU)は「変換スキップブロック」である。したがって、そのような例では、ビデオエンコーダ20およびビデオデコーダ30は、変換係数と同じ方法で変換ブロックの中の残差サンプルを扱い得る。
【0045】
係数ブロックを生成した後、ビデオエンコーダ20は係数ブロックを量子化し得る。量子化は一般に、変換係数を表すために使用されるデータの量をできるだけ減らすために変換係数が量子化され、さらなる圧縮をもたらすプロセスを指す。いくつかの例では、ビデオエンコーダ20は係数ブロックを量子化するステップをスキップする。ビデオエンコーダ20が係数ブロックを量子化した後に、ビデオエンコーダ20は、量子化された変換係数を示すシンタックス要素をエントロピー符号化し得る。たとえば、ビデオエンコーダ20は、量子化された変換係数を示すシンタックス要素に対してコンテキスト適応型バイナリ算術コーディング(CABAC)を実行することができる。ビデオエンコーダ20は、エントロピー符号化されたシンタックス要素をビットストリームの中に出力することができる。
【0046】
ビデオエンコーダ20は、エントロピー符号化されたシンタックス要素とエントロピー符号化されていないシンタックス要素とを含み得る、ビットストリームを出力し得る。ビットストリームは、コーディングされたピクチャの表現および関連するデータを形成するビットのシーケンスを含み得る。したがって、ビットストリームは、ビデオデータの符号化された表現を形成し得る。ビットストリームは、一連のネットワーク抽象化レイヤ(NAL)ユニットを備え得る。NALユニットの各々は、NALユニットヘッダを含み、ローバイトシーケンスペイロード(RBSP)をカプセル化する。NALユニットヘッダは、NALユニットタイプ符号を示すシンタックス要素を含み得る。NALユニットのNALユニットヘッダによって指定されるNALユニットタイプ符号は、NALユニットのタイプを示す。RBSPは、NALユニット内にカプセル化されている整数個のバイトを含むシンタックス構造であり得る。いくつかの事例では、RBSPは0個のビットを含む。
【0047】
異なるタイプのNALユニットは、異なるタイプのRBSPをカプセル化し得る。たとえば、第1のタイプのNALユニットはピクチャパラメータセット(PPS)のためのRBSPをカプセル化することがあり、第2のタイプのNALユニットはコーディングされたスライスのためのRBSPをカプセル化することがあり、第3のタイプのNALユニットは補足強化情報(SEI)のためのRBSPをカプセル化することがあり、以下同様である。ビデオコーディングデータのためのRBSPをカプセル化するNALユニットは(パラメータセットおよびSEIメッセージのためのRBSPとは対照的に)、ビデオコーディングレイヤ(VCL)NALユニットと呼ばれ得る。
【0048】
図1の例では、ビデオデコーダ30は、ビデオエンコーダ20によって生成されるビットストリームを受信する。加えて、ビデオデコーダ30は、ビットストリームを構文解析して、ビットストリームからシンタックス要素を取得し得る。ビットストリームからシンタックス要素を取得することの一部として、ビデオデコーダ30は、エントロピー復号(たとえば、CABAC復号)を実行して、ビットストリームから特定のシンタックス要素を取得し得る。ビデオデコーダ30は、ビットストリームから取得されたシンタックス要素に少なくとも一部基づいて、ビデオデータのピクチャを再構築(すなわち、復号)し得る。ビデオデータを再構築するためのプロセスは、全般に、ビデオデータを符号化するためにビデオエンコーダ20によって実行されるプロセスの逆であり得る。たとえば、ビデオデコーダ30は、イントラ予測またはインター予測を使用して、現在のCUのPUの予測ブロックを決定し得る。加えて、ビデオデコーダ30は、現在のCUのTUの係数ブロックを逆量子化し得る。ビデオデコーダ30は、係数ブロックに対して逆変換を実行して、現在のCUのTUの変換ブロックを再構築し得る。ビデオデコーダ30は、現在のCUのPUの予測ブロックのサンプルを、現在のCUのTUの変換ブロックの対応するサンプルに加算することによって、現在のCUのコーディングブロックを再構築し得る。ピクチャのCUごとにコーディングブロックを再構築することによって、ビデオデコーダ30はピクチャを再構築し得る。
【0049】
上で示されたように、ビデオエンコーダ20およびビデオデコーダ30はCABACコーディングを実行し得る。CABACは、H.264/AVCにおいて最初に導入され、今ではHEVCにおいて使用されているエントロピーコーディングの方法である。CABACは、二値化、コンテキストモデル化、および算術コーディングという3つの主要な機能を伴う。二値化は、ビンストリングと呼ばれるバイナリシンボル(ビン)にシンタックス要素をマッピングする。言い換えると、CABAC符号化をシンタックス要素に適用するために、ビデオエンコーダは、シンタックス要素を二値化して、「ビン」と呼ばれる一連の1つまたは複数のビットを形成し得る。コンテキストモデル化は、ビンの確率を推定する。最後に、バイナリ算術コーダが、推定された確率に基づいてビンをビットへと圧縮する。
【0050】
コンテキストモデル化の一部として、ビデオエンコーダは、コーディングコンテキストを特定し得る。コーディングコンテキストは、特定の値を有するビンをコーディングすることの確率を特定し得る。たとえば、コーディングコンテキストは、値0のビンをコーディングすることの0.7の確率、および値1のビンをコーディングすることの0.3の確率を示し得る。コーディングコンテキストを特定した後、ビデオエンコーダ20は、区間を下位の部分区間および上位の部分区間に分割し得る。部分区間の一方は値0と関連付けられることがあり、他方の部分区間は値1と関連付けられることがある。部分区間の幅は、特定されたコーディングコンテキストによって関連する値について示される確率に比例し得る。シンタックス要素のビンが下位の部分区間と関連付けられる値を有する場合、符号化される値は、下位の部分区間の下方の境界に等しいことがある。シンタックス要素の同じビンが上位の部分区間と関連付けられる値を有する場合、符号化される値は、上位の部分区間の下方の境界に等しいことがある。シンタックス要素の次のビンを符号化するために、ビデオエンコーダ20は、符号化されるビットの値と関連付けられる部分区間である区間を用いて、これらのステップを繰り返し得る。ビデオエンコーダが次のビンのためのこれらのステップを繰り返すとき、ビデオエンコーダは、特定されたコーディングコンテキストによって示される確率および符号化されたビンの実際の値に基づいて、修正された確率を使用し得る。
【0051】
ビデオデコーダがCABAC復号をシンタックス要素に対して実行するとき、ビデオデコーダ30は、コーディングコンテキストを特定し得る。ビデオデコーダは、次いで、区間を下位の部分区間および上位の部分区間に分割し得る。部分区間の一方は値0と関連付けられることがあり、他方の部分区間は値1と関連付けられることがある。部分区間の幅は、特定されたコーディングコンテキストによって関連する値について示される確率に比例し得る。符号化された値が下位の部分区間内にある場合、ビデオデコーダ30は、下位の部分区間と関連付けられる値を有するビンを復号し得る。符号化された値が上位の部分区間内にある場合、ビデオデコーダ30は、上位の部分区間と関連付けられる値を有するビンを復号し得る。シンタックス要素の次のビンを復号するために、ビデオデコーダ30は、符号化された値を含む部分区間である区間を用いて、これらのステップを繰り返し得る。ビデオデコーダ30が次のビンのためにこれらのステップを繰り返すとき、ビデオデコーダ30は、特定されたコーディングコンテキストによって示される確率および復号されたビンに基づいて、修正された確率を使用し得る。ビデオデコーダ30は次いで、ビンを非二値化してシンタックス要素を復元し得る。
【0052】
通常のCABAC符号化をすべてのシンタックス要素に対して実行するのではなく、ビデオエンコーダ20は、バイパスCABACコーディングを使用していくつかのビンを符号化し得る。バイパスCABACコーディングをビンに対して実行することは、通常のCABACコーディングをビンに対して実行するよりも、計算的にコストがかからない場合がある。さらに、バイパスCABACコーディングを実行することは、より高度な並列化およびスループットを可能にし得る。バイパスCABACコーディングを使用して符号化されたビンは、「バイパスビン」と呼ばれることがある。バイパスCABACコーディングエンジンは、コンテキストを選択せず両方のシンボル(0および1)に対して1/2の確率を前提とし得るので、バイパスCABACコーディングエンジンはより簡単であり得る。したがって、バイパスCABACコーディングでは、区間はちょうど半分に分割される。バイパスビンを一緒にグループ化することは、ビデオエンコーダ20およびビデオデコーダ30のスループットを増大させ得る。バイパスCABACコーディングエンジンは、いくつかのビンを単一のサイクルの中でコーディングすることが可能であり得るが、通常のCABACコーディングエンジンは、単一のビンしか1つのサイクルの中でコーディングすることが可能ではないことがある。
【0053】
したがって、算術コーディングは、再帰的な区間の分割に基づき得る。従来の算術コーダでは、0から1という初期値を有する範囲が、ビンの確率に基づいて2つの部分区間に分割される。符号化されたビンは、バイナリ小数へと変換されるときに2つの部分区間のうちの1つを選択するオフセットを与え、これが復号されたビンの値を示す。それぞれの復号されたビンの後で、範囲は選択された部分区間に等しくなるように更新され、区間分割のプロセスは繰り返す。範囲およびオフセットはビットの精度が限られているので、アンダーフローを防ぐために、範囲がある値を下回るときは常に、再正規化が必要であり得る。再正規化は、各ビンが復号された後で行われ得る。
【0054】
算術コーディングは、推定される確率を使用して行われる(コンテキストコーディングされる)ことがあり(これは通常コーディングモードと呼ばれる)、または0.5という等しい確率を仮定して行われる(バイパスコーディングされる、これはバイパスモードと呼ばれる)ことがある。バイパスコーディングされるビンに対して、部分区間への範囲の分割はシフトにより行われることがあり、一方、コンテキストコーディングされるビンに対しては、ルックアップテーブルが必要とされることがある。HEVCは、H.264/AVCと同じ算術コーディングを使用する。復号プロセスの例は、JCTVC-L1003のセクション9.3.4.3.2.2に記載されている。
【0055】
単項(U)、切捨て単項(TU)、K次の指数ゴロム(EGk)、および固定長(FL)を含む、いくつかの異なる二値化プロセスがHEVCにおいて使用される。HEVCにおいて使用される二値化プロセスの詳細が、JCTVC-L1003において見出され得る。上で言及されたように、K次の指数ゴロムコーディングは、HEVCにおいて使用される二値化プロセスの1つである。次数Kが0に等しいとき、所与の非負の整数xに対して、指数ゴロムコーディングを使用してビンストリング(たとえば、ビンのストリング)を生成するために、以下のプロセスが使用され得る。
1. x+1を二進数で記録する。
2. 書かれているビットを数え、1を引き、その数の0の開始ビットを、上記のビットストリングの前に記録する(すなわち、x+1のバイナリ表現におけるビットの数を記録し、1を引き、それをx+1のバイナリ表現の先頭に追加する)。
たとえば、xが4に等しいものとする。したがって、ステップ1において、バイナリ値101が記録される。ステップ2において、ビットの数は3であり、3引く1は2である。よって、プレフィックスは2つの0から構成される。したがって、4に対するK次の指数ゴロム符号は00 101である。
【0056】
次数Kの指数ゴロム符号において非負の整数xを符号化するために、
1. 上で説明された0次の指数ゴロム符号を使用して[x/2
k]を符号化し、次いで、
2. kビットの固定長のバイナリ値においてx mod 2
kを符号化する。
これを表現する等価な方法は次の通りである。
1. Eliasのガンマ符号を使用して、0次の指数ゴロム符号を使用してx+2
k-1を符号化し(すなわち、x+2
kを符号化し)、次いで、
2. 符号化の結果からk個の先頭の0のビットを削除する。
たとえば、Kが2に等しいものとし、xが4に等しいものとする。この例では、ステップ1において、[4/2
2]は1に等しい。1に対する0次の指数ゴロム符号は010である。ステップ2において、4 mode 2
2は0である。2ビットという固定長の値を有する、0の符号化されたバージョンは00である。この固定長の値が、前に説明された0次の指数ゴロム符号に付加される。したがって、4に対する最終的な2次の指数ゴロム符号は010 00である。
【0057】
ある例が以下の表において与えられる。
【0061】
Table 2(表2)において、Xの値は0または1のいずれかであり得る。一部の場合、上で列挙された「1」および「0」は入れ替えられ得ることに留意されたい。すなわち、ビンストリングは、「0」の代わりに連続する「1」が先頭にあってもよい。
【0062】
K次のライスコーダに対して、符号語は以下のステップによって生成され得る。
1. パラメータMを整数値(M=(1<<K))に固定する。
2. 符号化されるべき数Nに対して、以下を見つける。
1. 商=q=int[N/M]
2. 剰余=r=N modulo M
3. 符号語を生成する。
1. 符号フォーマット:<商符号><剰余符号>、ここで、
2. (単項コーディングにおける)商符号
1. 1ビットの長さqのストリングを書く
2. 0ビットを書く
3. (切捨てバイナリ符号化における)剰余符号:Kビットが必要である
【0063】
たとえば、Kが2に等しいものとし、Nが5に等しいものとする。したがって、Mは二進数では100(10進数では4)に等しい。この例では、5/4という整数の除算の商qは1に等しく、剰余は1(二進数で1)に等しい。したがって、商符号は10(すなわち、1のビットの長さ1のストリングと、それに続く0のビット)である。剰余符号は01(すなわち、剰余値1を表すKビットの固定長の符号)である。したがって、5に対する2次のライス符号は1001である。
【0064】
15までの数に対する、除数Mが4に等しい場合のライス符号が、以下のTable 3(表3)に示されている。
【0066】
上で簡単に説明されたように、HEVCにおいて使用されるCABACプロセス、および場合によっては他のビデオコーディング規格が、コンテキストモデル化を使用する。コンテキストモデル化は、高いコーディング効率を達成するために必要な、正確な確率推定をもたらす。したがって、コンテキストモデル化は高度に適応的である。異なるコンテキストモデルが異なるビンに対して使用されることがあり、この場合、コンテキストモデルの確率は以前にコーディングされたビンの値に基づいて更新される。同様の分布を伴うビンは、同じコンテキストモデルを共有することが多い。各ビンに対するコンテキストモデルは、シンタックス要素のタイプ、シンタックス要素におけるビンの場所(binIdx)、ルーマ/クロマ、近隣情報などに基づいて選択され得る。
【0067】
いくつかの例では、コンテキストの切替えが各ビンコーディングの後に行われる。さらに、いくつかの例では、確率モデルは、コンテキストメモリに7ビットのエントリー(確率状態に対して6ビットおよび最確シンボル(MPS)に対して1ビット)として記憶され、コンテキスト選択論理によって計算されるコンテキストインデックスを使用してアドレス指定される。
【0068】
上で簡単に説明されたように、HEVCでは、CUは、残差四分木に従ってTUへと区分され得る。したがって、残差ブロックの様々な特性に適合するために、残差四分木(RQT)を使用した変換コーディング構造がHEVCに適用され、これは、以前はhttp://www.hhi.fraunhofer.de/fields-of-competence/image-processing/researchgroups/image-video-coding/hevc-high-efficiency-video-coding/transform-coding-using-the-residual-quadtree-rqt.htmlにおいて入手可能であったが、2016年6月28日現在ではhttp://www.hhi.fraunhofer.de/departments/video-coding-analytics/research-groups/image-video-coding/research-topics/hevc-high-efficiency-video-coding/transform-coding-using-the-residual-quadtree-rqt.htmlにおいて入手可能である、記事「Transform Coding Using the Residual Quadtree (RQT)」、Fraunhofer HHIにおいて簡単に説明されている。
【0069】
上で説明されたように、HEVCでは、各ピクチャは、コーディングツリーユニット(CTU)に分割され、このCTUは、特定のタイルまたはスライスについてラスター走査順序でコーディングされる。CTUは、正方形ブロックであり、四分木すなわちコーディングツリーのルートを表す。CTUサイズは、8×8から64×64のルーマサンプルまでの範囲にわたり得るが、通常は64×64が使用される。各CTUは、コーディングユニット(CU)と呼ばれるより小さい正方形ブロックにさらに分割され得る。CTUがCUに再帰的に分割された後、各CUは、PUおよびTUにさらに分割される。TUへのCUの区分は、四分木手法に基づいて再帰的に実行され、したがって、各CUの残差信号は、木構造すなわちRQTによってコーディングされる。RQTは、4×4ルーマサンプルから32×32ルーマサンプルまでのTUサイズを可能にする。
【0070】
図2は、High Efficiency Video Coding(HEVC)において使用されるものなどの、残差四分木に基づく変換方式を示す概念図である。
図2は、CUが文字aからjによりラベルを付けられた10個のTUおよび対応するブロック区分を含む例を示す。RQTの各ノードは、実際にはTUである。個々のTUは、深度優先の木横断順序で処理され、この深度優先の木横断順序は、図ではアルファベットの順序として図示され、これは深度優先の横断を用いる再帰的なZ走査に従う。四分木手法は、残差信号の変化する空間周波数特性に対する変換の適応を可能にする。通常、空間的なサポートがより大きい、より大きな変換ブロックサイズは、より良い周波数分解能を提供する。しかしながら、空間的なサポートがより小さい、より小さな変換ブロックサイズは、より良い空間分解能を提供する。この2つ、すなわち空間分解能と周波数分解能との間のトレードオフは、たとえばレートひずみ最適化技法に基づいて、エンコーダのモード判断によって選ばれ得る。レートひずみ最適化技法は、コーディングモード(たとえば、特定のRQT分割構造)ごとにコーディングビットと再構築ひずみとの加重和、すなわちレートひずみコストを計算し、最小のレートひずみコストを有するコーディングモードを最良のモードとして選択する。
【0071】
いくつかの例では、RQTにおいて、(1)木の最大深度、(2)最小の許容される変換サイズ、および(3)最大の許容される変換サイズという、3つのパラメータが定義される。HEVCでは、最小変換サイズおよび最大変換サイズは、4×4サンプルから32×32サンプルまでの範囲内で変化することができ、このサイズは、上で言及されたサポートされるブロック変換に対応する。RQTの最大の許容される深度は、TUの個数を制約する。1に等しい最大深度は、各々の含まれるTUが最大の許容される変換サイズ、たとえば32×32に達した場合に、CUがそれ以上分解され得ないことを意味する。
【0072】
これらのパラメータのすべてが、RQT構造と相互作用し、これに影響し得る。たとえば、ルートCUサイズが64×64であり、最大深度が0に等しく、最大変換サイズが32×32に等しい場合を考える。この場合、CUは、少なくとも1回区分されなければならない。それは、そうしなければTUが64×64になり、これは許容されないからである。RQTパラメータ、すなわち、最大RQT深度、最小変換サイズ、最大変換サイズは、シーケンスパラメータセットレベルにおいてビットストリームの中で送信され得る。RQT深度に関して、イントラコーディングされるCUとインターコーディングされるCUに対して、異なる値が指定されシグナリングされ得る。たとえば、第1の最大深度値がイントラモードで符号化されるCUのために指定されることがあり、第2の異なる最大深度値がインターモードで符号化されるCUのために指定されることがある。
【0073】
四分木変換は、イントラ残差ブロックとインター残差ブロックとの両方に対して適用される。通常、現在の残差四分木区分の同一のサイズのDCT-II変換(すなわち、タイプ2離散コサイン変換)が、残差ブロックに対して適用される。しかしながら、現在の残差四分木ブロックが4×4であり、イントラ予測によって生成される場合、4×4のDST-VII変換(すなわち、タイプ7の離散サイン変換)が適用される。HEVCでは、より大きなサイズの変換、たとえば64×64の変換は、主に、利益が限られていることと、相対的により解像度が小さいビデオに対して相対的に複雑さが高くなることとが原因で、採用されない。
【0074】
HEVCでは、TUサイズとは無関係に、TUの残差が重複しない係数グループ(CG)を用いてコーディングされる。CGの各々は、TUの4×4のブロックの係数を含む。たとえば、32×32のTUは全体で64個のCGを有し、16×16のTUは全体で16個のCGを有する。TUの内部のCGは、ある事前に定義された走査順序に従ってコーディングされる。各々のそれぞれのCGをコーディングするとき、それぞれのCGの内部の係数は、4×4のブロックに対するある事前に定義された走査順序に従って走査され、コーディングされる。
図3は、HEVCにおいて使用される、4個のCGを含む8×8のTUに対する係数走査を示す。
【0075】
TUの残差データをシグナリングするためにHEVCにおいて使用されるシンタックス要素テーブルが、次のように定義される。
【0080】
各々のそれぞれの色成分(たとえば、ルーマ、Cb、Cr)に対して、それぞれのフラグが、現在のTUが少なくとも1つの0ではない係数を有するかどうかを示すために、最初にシグナリングされ得る。少なくとも1つの0ではない係数がある場合、TUの中の係数走査順序において最後の有意な係数の場所が次いで、TUの左上の角に対する相対的な座標を用いて明示的にコーディングされる。座標の垂直成分または水平成分は、座標のプレフィックスおよびサフィックスにより表される。プレフィックスは0次の切捨てライス(TR)を用いて二値化され、サフィックスは固定長を用いて二値化される。上のライスコーディングの議論は、切捨てライス(TR)コーディングの実例である。
【0081】
上の表では、last_sig_coeff_x_prefixは、変換ブロック内の走査順序において最後の有意な係数の列の場所のプレフィックスを指定する。last_sig_coeff_x_prefixの値は、両端を含めて0から(log2TrafoSize << 1) - 1までの範囲内になければならない。
【0082】
上の表では、last_sig_coeff_y_prefixは、変換ブロック内の走査順序において最後の有意な係数の行の場所のプレフィックスを指定する。last_sig_coeff_y_prefixの値は、両端を含めて0から(log2TrafoSize << 1) - 1までの範囲内になければならない。
【0083】
上の表では、last_sig_coeff_x_suffixは、変換ブロック内の走査順序において最後の有意な係数の列の場所のサフィックスを指定する。last_sig_coeff_x_suffixの値は、両端を含めて0から(1 << ((last_sig_coeff_x_prefix >> 1) - 1)) - 1までの範囲内になければならない。
変換ブロック内の走査順序において最後の有意な係数の列の場所LastSignificantCoeffXは、次のように導出される。
- last_sig_coeff_x_suffixが存在しない場合には、次があてはまる。
LastSignificantCoeffX = last_sig_coeff_x_prefix
- そうではない(last_sig_coeff_x_suffixが存在する)場合には、次があてはまる。
LastSignificantCoeffX = (1 << ((last_sig_coeff_x_prefix >> 1) - 1)) * (2 + (last_sig_coeff_x_prefix & 1)) + last_sig_coeff_x_suffix
【0084】
上の表では、last_sig_coeff_y_suffixは、変換ブロック内の走査順序において最後の有意な係数の行の場所のサフィックスを指定する。last_sig_coeff_y_suffixの値は、両端を含めて0から(1 << ((last_sig_coeff_y_prefix >> 1) - 1)) - 1までの範囲内になければならない。
変換ブロック内の走査順序において最後の有意な係数の行の場所LastSignificantCoeffYは、次のように導出される。
- last_sig_coeff_y_suffixが存在しない場合には、次があてはまる。
LastSignificantCoeffY = last_sig_coeff_y_prefix
- そうではない(last_sig_coeff_y_suffixが存在する)場合には、次があてはまる。
LastSignificantCoeffY = (1 << ((last_sig_coeff_y_prefix >> 1) - 1)) * (2 + (last_sig_coeff_y_prefix & 1)) + last_sig_coeff_y_suffix
scanIdxが2と等しいとき、座標は次のように交換される。
(LastSignificantCoeffX, LastSignificantCoeffY)=Swap(LastSignificantCoeffX, LastSignificantCoeffY)
【0085】
コーディングされたそのような場所、およびCGの係数走査順序も用いて、最後のCG (走査順序において)を除くCGに対して、最後のCGが0ではない係数を含むかどうかを示す1つのフラグがさらにシグナリングされる。
【0086】
1つのCGが0ではない係数を有するかどうか、すなわちCGフラグ(HEVC仕様書におけるcoded_sub_block_flag)をコーディングするとき、ビデオコーダは近隣のCGの情報を使用してコンテキストを構築し得る。たとえば、HEVCにおいて、CGフラグをコーディングするためのコンテキストの選択は次のように定義される。
(利用可能な右のCG&&右のCGのフラグが1に等しい)||(利用可能な下のCG&&下のCGのフラグが1に等しい)
上の式において、右のCGおよび下のCGは、現在のCGの近くの2つの近隣CGである。たとえば、
図3では、左上の4×4のブロックをコーディングするとき、右のCGは右上の4×4のブロックとして定義され、下のCGは左下の4×4のブロックとして定義される。クロマおよびルーマはコンテキストモデルの異なるセットを使用するが、ビデオコーダは、同じ規則を使用してクロマおよびルーマの各々に対してコンテキストモデルのうちの1つを選択し得る。コンテキストインデックスインクリメント(ctxInc)の導出の詳細は、HEVC仕様書の9.3.4.2.4項において見出され得る。
【0087】
0ではない係数を含むCGに対して、ビデオコーダはさらに、事前に定義された4×4の係数走査順序に従って、各係数に対して有意性フラグ(significant_flagまたはsig_coeff_flag)、係数の絶対値(coeff_abs_level_greater1_flag、coeff_abs_level_greater2_flag、およびcoeff_abs_level_remainingを含む)、および符号情報(coeff_sign_flag)をコーディングし得る。変換係数レベルのコーディングは、複数の走査パスに分離される。
【0088】
第1のビンのコーディングの第1のパスにおいて、1つのCG内の各場所における変換係数の最初のビン(またはビンインデックス0、bin0、これはsignificant_flagシンタックス要素に対応し得る)のすべてがコーディングされるが、ただし、特定の変換係数は0に等しいことが導かれ得る。たとえば、最後の場所に係数を含む最後のCGに対して、復号順序において最後の場所の前に走査されるすべての係数が、0であると導かれ、ビンはコーディングされない。
【0089】
HEVC仕様書の9.3.4.2.5項に記載されるように、有意性フラグのためのコーディングコンテキストを選択する際に使用されるコンテキストインデックスインクリメント変数(ctxInc)の値を導くために、変数sigCtxが使用される。変数sigCtxは、現在のTUの左上の場所に対する相対的な現在の位置、色成分インデックスcIdx、変換ブロックサイズ、およびシンタックス要素coded_sub_block_flagの以前に復号されたビンに依存する。異なる規則がTUサイズに応じて適用される。HEVC仕様書の9.3.4.2.5項は、有意性フラグに対するコンテキストインデックスインクリメントの選択の詳細を与える。
【0090】
第2のビンコーディングの第2のパスにおいて、ビデオコーダはcoeff_abs_level_greater1_flagsをコーディングする。coeff_abs_level_greater1_flagsのためのコンテキストモデル化は、色成分インデックス、現在のサブブロック走査インデックス、および現在のサブブロック内での現在の係数走査インデックスに依存する。HEVC仕様書の9.3.4.2.6項は、coeff_abs_level_greater1_flagsに対するコンテキストインデックスインクリメント変数の選択の詳細を与える。
【0091】
第3のビンコーディングの第3のパスにおいて、ビデオコーダはcoeff_abs_level_greater2_flagsをコーディングする。coeff_abs_level_greater2_flagsのためのコンテキストモデル化は、coeff_abs_level_greater1_flagsによって使用されるものと同様である。HEVC仕様書の9.3.4.2.7項は、コンテキストインデックスインクリメントの選択の詳細を与える。
【0092】
スループットを改善するために、第2のパスおよび第3のパスは、CGの中の係数のすべてを処理しないことがある。むしろ、CGの中の最初の8個のcoeff_abs_level_greater1_flagsは通常モードでコーディングされる。その後、シンタックスcoeff_abs_level_remainingにより第5のパスにおいてバイパスモードでコーディングされるべき値が残る。同様に、大きさが1より大きいCGの中の最初の係数に対するcoeff_abs_level_greater2_flagのみがコーディングされる。CGの大きさが1より大きい残りの係数は、coeff_abs_level_remainingを使用して値をコーディングする。この技法は、係数レベルのための通常のビンの数を、CGごとに最大で9個、すなわち、coeff_abs_level_greater1_flagsに対して8個、およびcoeff_abs_level_greater2_flagsに対して1個に限定し得る。
【0093】
第4のパスは符号情報のためのものである。HEVCでは、各々の0ではない係数の符号は、バイパスモードで第4の走査パスにおいてコーディングされる。各CGに対して、および基準に応じて、(逆走査順序で)最後の0ではない係数の符号を符号化することが、符号データ隠匿(SDH:sign data hiding)を使用するときは単に省略される。代わりに、符号値は、偶数が「+」に対応し、奇数が「-」に対応するという事前に定義された取り決めを使用して、CGのレベルの合計のパリティに埋め込まれる。SDHを使用するための基準は、CGの最初の0ではない係数と最後の0ではない係数との間の、走査順序における距離である。具体的には、HEVCでは、この距離が4以上である場合、SDHが使用される。それ以外の場合、SDHは使用されない。4という値がHEVCのテストシーケンスにおいて最大の利得をもたらすので、HEVCでは4という値が選ばれた。
【0094】
最後のパスにおいて、残りのビンがさらなる走査パスにおいてコーディングされる。係数のbaseLevelが次のように定義されるものとする。
baseLevel = significant_flag + coeff_abs_level_greater1_flag+ coeff_abs_level_greater2_flag (1)
ただし、フラグ(すなわち、significant_flag、coeff_abs_level_greater1_flag、およびcoeff_abs_level_greater2_flag)は、0または1という値を有し、存在しない場合には0であると推測される。次いで、係数の絶対値が単純に次のように定義される。
absCoeffLevel = baseLevel + coeff_abs_level_remaining (2)
HEVCでは、coeff_abs_level_remainingはバイパスコーディングされるので、コンテキストモデル化は不要である。
【0095】
HEVCにおけるシンタックス要素coeff_abs_level_remainingは、係数レベルの絶対値に対する残りの値を示す(係数コーディングのための以前の走査パスにおいてコーディングされたものよりも値が大きい場合)。シンタックス要素coeff_abs_level_remainingは、スループットを上げるためにバイパスモードでコーディングされる。Chien他、「On Coefficient Level Remaining Coding」、JCTVC-I0487、第9回Joint Collaborative Team on Video Coding(JCT-VC)会合、ジュネーブ、スイス、2012年4月〜5月に記載されるように、HEVCは、coeff_abs_level_remainingの小さな値に対してライス符号を利用し、coeff_abs_level_remainingのより大きな値に対して指数ゴロム符号に切り替える。
【0096】
HEVCがcoeff_abs_level_remainingシンタックス要素に対してライス符号を使用することからcoeff_abs_level_remainingシンタックス要素に対して指数ゴロム符号を使用することへと切り替える点は、切替点と呼ばれ得る。切替点は、以下の2つの方法のうちの1つとして定義され得る。
1)切替点は(3<<K)に等しい:coeff_abs_level_remainingが(3<<K)より小さく、K次のライス符号が使用されるとき。それ以外の場合、K次の指数ゴロム符号を使用したプレフィックス(3つの「1」を伴う)およびサフィックスが、バイパスコーディングのために使用される。
2)切替点は(4<<K)に等しい:coeff_abs_level_remainingが(4<<K)より小さく、K次のライス符号が使用されるとき。それ以外の場合、(K+1)次の指数ゴロム符号を使用したプレフィックス(4つの「1」を伴う)およびサフィックスが、バイパスコーディングのために使用される。
【0097】
簡潔にするために、以下の説明では、第1の方法が使用され、すなわち切替点は(3<<K)として定義される。例がTable 4(表5)において与えられる。
【0099】
J.Sole他、「Transform Coefficient Coding in HEVC」、IEEE Transactions on Circuits and Systems for Video Transmission (special issue on HEVC)、2012年12月に記載されているように、HEVCにおいて、ライスパラメータKは各CG(係数グループ、これは4×4のサブブロックである)の初めに0に設定され、Kはパラメータの前の値および現在の絶対的なレベルに応じて次のように条件的に更新される。
absCoeffLevel > 3*2
Kである場合、K = min(K+1, 4) (3)
それ以外の場合、K=K
ただし、Kはライスパラメータであり、関数min()は2つの入力のうちの小さい方の値を返す。したがって、現在の係数レベルに対するabsCoeffLevel値が3*2
Kより大きい場合、ビデオコーダは、K+1と4のうちの小さい方に等しいものとしてKを更新する。現在の係数レベルのabsCoeffLevel値が3*2
Kより大きくない場合、ビデオコーダはKを更新しない。パラメータ更新プロセスは、大きな値が分布において観察されるときに二値化が係数の統計に適応することを可能にする。以下の説明では、ライスパラメータを導出するそのような方法は、「振り返りベースの導出方法」と名付けられる。
【0100】
Karczewicz他、「RCE2: Results of Test 1 on Rice Parameter Initialization」、JCTVC-P0199、ITU-T SG 16 WP 3およびISO/IEC JTC 1/SC 29/WG 11のjoint Collaborative Team on Video Coding(JCT-VC)、第16回会合、サンノゼ、米国、2014年1月9〜17日、(以後「JCTVC-P0199」)において提案された別の技法が、無損失コーディングまたは高ビット深度コーディングにおいて存在し得るはるかに大きな係数レベルをより効率的にコーディングするために、HEVC Range Extensionsにおいてライスパラメータ導出のために利用される。
【0101】
最初に、HEVC Range Extensionsにおいて使用される技法では、4×4のサブブロック(すなわち、CG)が異なるカテゴリ(「sbType」)へと分割される。各サブブロックに対して、初期ライスパラメータが、同じカテゴリの中の以前にコーディングされたサブブロックに基づいて導出される。カテゴリ化は、サブブロック(すなわち、CG)が変換スキップブロックであるかどうか(「isTSFlag」)、およびブロックがルーマ成分のためのものであるかどうかに基づく。
sbType = isLuma*2+ isTSFlag (4)
ビデオコーダは、サブブロックの中の第1の係数のcoeff_abs_level_remainingに応じて、各サブブロックタイプ(sbType)に対する統計statCoeffを維持する。
if (absCoeffLevel >=3*(1<<(statCoeff /4))) statCoeff ++; (5)
else if ((2* absCoeffLevel)<(1<<( statCoeff/4))) statCoeff --;
statCoeffを更新するビデオコーダは、サブブロックの第1のコーディングされたcoeff_abs_level_remainingの値を使用して、4×4のサブブロックごとに多くて1回更新される。ビデオコーダは、スライスの初めにおいて、statCoeffのエントリーを0にリセットする。さらに、ビデオコーダは、各々の4×4のサブブロックの初めにおいて、statCoeffの値を使用してライスパラメータKを次のように初期化する。
cRiceParam = Min(maxRicePara, statCoeff/4) (6)
【0102】
以下の説明では、ライスパラメータ(たとえば、cRiceParam)を導出するそのような方法は、「統計ベースの導出方法」または「統計ベースのライスパラメータ導出方法」と名付けられる。したがって、統計ベースの導出方法では、ビデオコーダは、複数のサブブロックの各サブブロックに対して、それぞれのサブブロックが変換スキップブロックであるかどうかおよびそれぞれのサブブロックがルーマ成分のためのものであるかどうかに基づいてそれぞれのサブブロックがカテゴライズされるように、現在のピクチャの複数のサブブロックを複数のカテゴリへと分割し得る。さらに、複数のカテゴリの各々のそれぞれのカテゴリに対して、ビデオコーダは、それぞれのカテゴリに対するそれぞれの統計値を維持し得る。複数のサブブロックの各々のそれぞれのサブブロックに対して、ビデオコーダは、それぞれのサブブロックが属するカテゴリに対するそれぞれの統計値を使用して、それぞれのサブブロックに対するそれぞれのライスパラメータを初期化し得る。複数のサブブロックの特定のサブブロックの中のcoeff_abs_level_remainingシンタックス要素は、K次のライス符号を使用して二値化され、Kは特定のサブブロックに対するライスパラメータである。
【0103】
複数のカテゴリの各々のそれぞれのカテゴリに対して、それぞれのカテゴリに対するそれぞれの統計値を維持することの一部として、ビデオコーダは、それぞれのカテゴリに属するピクチャの各々のそれぞれのサブブロックに対して、それぞれのサブブロックに対して最初にコーディングされるレベル剰余シンタックス要素を使用して、それぞれのサブブロックに対して多くても1回、それぞれのカテゴリに対するそれぞれの統計値を更新し得る。さらに、それぞれのカテゴリに対するそれぞれの統計値を更新することの一部として、ビデオコーダは、(absCoeffLevel >=3*(1<<(statCoeff /4)))である場合はそれぞれのカテゴリに対するそれぞれの統計値をインクリメントし、((2* absCoeffLevel)<(1<<( statCoeff/4)))である場合はそれぞれのカテゴリに対するそれぞれの統計値をデクリメントし得る。前のように、absCoeffLevelはそれぞれのサブブロックの絶対係数レベルであり、statCoeffはそれぞれのカテゴリに対するそれぞれの統計値である。複数のサブブロックの各々のそれぞれのサブブロックに対して、それぞれのサブブロックが属するカテゴリに対するそれぞれの統計値を使用してそれぞれのサブブロックに対するそれぞれのライスパラメータを初期化することの一部として、ビデオコーダは、最大のライスパラメータと、それぞれのサブブロックが属するカテゴリに対するそれぞれの統計値を4で割ったものとのうちの小さい方として、それぞれのサブブロックに対するそれぞれのライスパラメータを決定し得る。
【0104】
Nguyen他、「Non-CE11: Proposed Cleanup for Transform Coefficient Coding」、JCTVC-H0228、第8回会合、サンノゼ、カリフォルニア州、米国、2012年2月1〜10日(以後「JCTVC-H0228」)は、一走査パスのコーディングを提案しており、すなわち、変換係数レベルのすべての情報が、HEVCのように複数パスのコーディングではなく単一のステップにてコーディングされる。各走査場所に対して、ローカルテンプレートによりカバーされる近隣(すなわち、近隣サンプル)が、HEVCの現在の設計においてbin0(ビンストリングの最初のビンsignificant_coeff_flagまたはcoeff_abs_greater0_flagとも呼ばれる)に対して行われるように、評価される。この評価から、剰余の絶対値の適応的な二値化を制御するコンテキストモデルおよびライスパラメータが導出される。より具体的には、bin0、bin1、bin2、およびライスパラメータに対するコンテキストモデルがすべて、ローカルテンプレートの中に位置する変換係数の大きさに基づいて選択される(bin1およびbin2はcoeff_abs_greater1_flagおよびcoeff_abs_greater2_flagとも呼ばれる)。
【0105】
図4は、例示的なローカルテンプレートを示す概念図である。具体的には、ローカルテンプレートの例が、対角方向の走査を伴う8×8の変換ブロックについて
図4に与えられており、xは現在の走査場所を示し、i∈[0,4]であるx
iはローカルテンプレートによりカバーされる近隣を示す。
【0106】
以下の式では、近隣の絶対値の合計を示すsum_absolute_level、および各レベルの絶対値から1を引いたものの合計を示すsum_absolute_levelMinus1が、bin0、bin1、bin2に対する(すなわちsignificant_flag、coeff_abs_greater1_flag、およびcoeff_abs_greater2_flagに対する)コンテキストインデックスを導出し、ライスパラメータrを決定するために使用される。
【0108】
JCTVC-H0228に記載される技法では、ライスパラメータrは次のように導出される。各走査場所に対して、パラメータは0に設定される。次いで、sum_absolute_levelMinus1が閾値の集合t
R={3, 9, 21}と比較される。言い換えると、ライスパラメータは、sum_absolute_levelMinus1が第1の区間に入る場合には0であり、sum_absolute_levelMinus1が第2の区間に入る場合には1であり、以下同様である。ライスパラメータrの導出は以下において要約される。
【0110】
ただし、xはsum_absolute_levelMinus1に等しい。ライスパラメータの範囲は[0, 3]である。
【0111】
以下の説明では、ライスパラメータを導出するそのような方法は、「テンプレートベースの導出方法」または「テンプレートベースのライスパラメータ導出方法」と名付けられる。したがって、テンプレートベースの導出方法では、現在のピクチャは複数の4×4のサブブロックを備え、ローカルテンプレートはTUの現在のサンプルの近隣をカバーし、現在のサンプルは現在の走査場所にある。さらに、現在のサンプルに対するそれぞれの係数レベルの絶対値のそれぞれの剰余値を示すシンタックス要素(たとえば、coeff_abs_level_remaining syntax element)を、ビデオエンコーダ20がシグナリングすることができ、ビデオデコーダ30が取得することができる。テンプレートベースの導出方法では、ローカルテンプレートによりカバーされる各々のそれぞれの近隣に対して、ビデオコーダ(たとえば、ビデオエンコーダ20またはビデオデコーダ30)は、それぞれの近隣に対するそれぞれの値を決定し得る。この例では、それぞれの近隣に対するそれぞれの値は、近隣の絶対値が0より大きい場合は近隣の絶対値から1を引いたものに等しく、近隣が0に等しい場合には0に等しい。加えて、テンプレートベースの導出方法では、ビデオコーダは、近隣に対する値の合計に等しいものとして合計値(たとえば、sum_absolute_levelMinus1)を決定し得る。さらに、テンプレートベースの導出方法では、ビデオコーダは、ライスパラメータが、合計値が第1の区間に入る(たとえば、xが両端を含めて0と3の間の整数である)場合には0に等しく、合計値が第2の区間に入る(たとえば、xが両端を含めて4と9の間の整数である)場合には1に等しく、合計値が第3の区間に入る(たとえば、xが両端を含めて10と21の間の整数である)場合には2に等しく、合計値が第4の区間に入る(たとえば、x>21である)場合には3に等しいと、決定し得る。シンタックス要素はK次のライス符号を使用して二値化され、Kは決定されたライスパラメータに等しい。上の例で与えられたものとは異なる区間も使用され得る。これらの区間は重複していないことがある。
【0112】
現在のライスパラメータ導出方法には、少なくとも以下の欠点がある。第1に、HEVCの設計では、1つの前のコーディングされた係数レベルしか考慮されず、これは最適ではないことがある。加えて、1つのCG内で、ライスパラメータは変更されないままであり、または増大し続け、このとき、ローカルエリアの中では、より少数のコーディングされるビンに対してより小さなライスパラメータを選好する、より小さな係数レベルが観察されることがある。たとえば、Kが各CGの初めにおいて0に設定されるので、かつKが4未満であるとすると、Kは、係数のabsCoeffLevelが3*2
Kより大きいときはインクリメントされ、またはそれ以外の場合は同じ値に保たれる。しかしながら、この例では、HEVCの設計は、Kをデクリメントすることがより良好な圧縮をもたらすとしても、Kがデクリメントされることを許可しない。
【0113】
第2に、HEVC Range Extensions(JCTVC-P0199参照)において利用される初期化方法は、無損失コーディングまたは高ビット深度コーディングには非常に有益であるが、それでもいくつかの欠点がある。たとえば、1つのCG内で、ライスパラメータは変更されないままであり、より少数のコーディングされるビンに対してより小さなライスパラメータを選好する、より小さな係数レベルが観察されることがある。たとえば、HEVC Range Extensionsの技法では、ライスパラメータはstatCoeff値に基づいて決定され、statCoeff値は4×4のサブブロックごとに多くて1回更新される。無損失コーディングでは、量子化がスキップされ得る。有損失コーディングでは、量子化が実行されることがあり、結果として、元のビデオデータの情報が失われる。
【0114】
第3に、JCTVC-H0228の設計は、複数の近隣を考慮することによって、有損失コーディングではより効率的である。しかしながら、異なるTUの間の相関は、HEVC Range Extensionsのように利用されない。さらに、上の式(8)において述べられたように、JCTVC-H0228において作り出される最大のライスパラメータは3に等しい。予測誤差(すなわち、残差サンプルの値)は、無損失コーディングまたは高ビット深度コーディングでは非常に大きいことがある。この場合、JCTVC-H0228において設定されるような3に等しい最大のライスパラメータは、十分に効率的ではないことがある。加えて、sum_absolute_levelMinus1に基づいてどのようにライスパラメータを設定するかは知られていない。
【0115】
上で言及された問題の一部またはすべてを解決するために、ライスパラメータ導出のための以下の技法、およびより効率的である可能性がある変換係数コンテキストのモデリングが提案される。以下の箇条書きにされる方法は、個別に適用され得る。代替的に、それらの任意の組合せが適用され得る。本開示において説明される技法はまた、2015年5月29日に出願された米国仮特許出願第62/168,571号、2016年5月26日に出願された米国特許出願第15/166,153号、および2016年5月27日に出願されたPCT出願PCT/US2016/034828号において提案される技法と一緒に使用され得る。
【0116】
本開示の例示的な技法によれば、統計ベースのパラメータ導出方法およびテンプレートベースのパラメータ導出方法が、1つのTUにおいて係数レベルを符号化/復号するために別々に使用され得る。たとえば、本技法によれば、ビデオコーダは、ピクチャの現在のCUの単一のTUの係数レベルを復号するために、第1のライスパラメータ導出方法および第2のライスパラメータ導出方法を使用し得る。この例では、第1のライスパラメータ導出方法は統計ベースの導出方法である。さらに、この例では、第2のライスパラメータ導出方法はテンプレートベースの導出方法である。
【0117】
より具体的には、一例では、統計ベースの方法が、デコーダ側において各TUの中の復号/構文解析の順序で最初のcoeff_abs_level_remainingシンタックス要素に適用されるが、他のcoeff_abs_level_remainingシンタックス要素に対しては、テンプレートベースの導出方法が適用される。たとえば、ビデオコーダは、サブブロックの最初のコーディングされるcoeff_abs_level_remainingシンタックス要素の値に基づいて、4×4のサブブロックについて上で説明されたようにstatCoeffの値を更新し得る。さらに、この例では、ビデオコーダは、statCoeffの値に基づいてライスパラメータを初期化し得る。ビデオコーダは次いで、TUの最初のcoeff_abs_level_remainingシンタックス要素をコーディングする際に、このライスパラメータを使用し得る。加えて、この例では、ビデオコーダは、TUの最初のcoeff_abs_level_remainingシンタックス要素以外のTUの各coeff_abs_level_remainingシンタックス要素に対して、上で説明されたようなテンプレートベースの導出方法を実行し得る。
【0118】
代替的に、いくつかの例では、統計ベースの方法が、各TUの中の符号化/復号の順序で最初の数個のcoeff_abs_level_remainingシンタックス要素に適用されるが、他のcoeff_abs_level_remainingシンタックス要素に対しては、テンプレートベースの導出方法が適用される。したがって、いくつかの例では、一連のシンタックス要素(たとえば、coeff_abs_level_remainingシンタックス要素)を、ビデオエンコーダ20がシグナリングすることができ、ビデオデコーダ30が取得することができ、一連のシンタックス要素の各々のそれぞれのシンタックス要素は、TUのそれぞれの係数レベルの絶対値のそれぞれの剰余値を示す。そのような例では、ビデオコーダ(たとえば、ビデオエンコーダ20またはビデオデコーダ30)がTUの係数レベルを復号するために第1のライスパラメータ導出方法(たとえば、統計ベースの導出方法)および第2のライスパラメータ導出方法(たとえば、テンプレートベースの導出方法)を使用することの一部として、ビデオコーダは、復号または構文解析の順序でTUにおいて最初に現れるシンタックス要素に第1のライスパラメータ導出方法を適用することができ、ここでこのシンタックス要素は一連のシンタックス要素の中にある。加えて、この例では、ビデオコーダは、一連のシンタックス要素の各々の他のシンタックス要素に第2のライスパラメータ導出方法を適用することができる。
【0119】
代替的に、いくつかの例では、統計ベースの導出方法が、各TUの中の特定の相対的な場所に位置する係数に対する1つまたは複数のcoeff_abs_level_remainingシンタックス要素に適用されるが、他のcoeff_abs_level_remainingシンタックス要素に対しては、テンプレートベースの導出方法が適用される。たとえば、ビデオコーダは、TUの最初の係数、16番目の係数、...および32番目の係数に対するcoeff_abs_level_remainingシンタックス要素をコーディングするためのライスパラメータを決定するために統計ベースの導出方法を使用し、TUの各々の他のcoeff_abs_level_remainingシンタックス要素をコーディングするためのライスパラメータを導出するためにテンプレートベースの導出方法を使用し得る。
【0120】
代替的に、いくつかの例では、統計ベースの方法が、デコーダ側において各係数グループ(CG)の中の復号/構文解析の順序で最初のcoeff_abs_level_remainingシンタックス要素に適用されるが、CGの中の他のcoeff_abs_level_remainingシンタックス要素に対しては、テンプレートベースの導出方法が適用される。たとえば、ビデオコーダ(たとえば、ビデオエンコーダ20またはビデオデコーダ30)は、TUの各々の4×4のサブブロックに対して、それぞれのサブブロックを復号する際に使用される、構文解析/復号の順序で最初に現れる係数に対するcoeff_abs_level_remainingシンタックス要素をコーディングするためのライスパラメータを決定するために、統計ベースの導出方法を使用し得る。この例では、ビデオコーダは、TUの各々の他の係数に対するcoeff_abs_level_remainingシンタックス要素をコーディングするためのライスパラメータを導出するために、テンプレートベースの導出方法を使用する。
【0121】
代替的に、いくつかの例では、統計ベースの方法が、デコーダ側において各CGの中の復号/構文解析の順序で最初の数個のcoeff_abs_level_remainingシンタックス要素に適用されるが、CGの中の他のcoeff_abs_level_remainingに対しては、テンプレートベースの導出方法が適用される。たとえば、ビデオコーダ(たとえば、ビデオエンコーダ20またはビデオデコーダ30)は、TUの各々の4×4のサブブロックに対して、それぞれのサブブロックを復号する際に使用される、構文解析/復号の順序でたとえば最初の2つまたは3つの場所に現れる係数に対するcoeff_abs_level_remainingシンタックス要素をコーディングするためのライスパラメータを決定するために、統計ベースの導出方法を使用し得る。この例では、ビデオコーダは、TUの各々の他の係数に対するcoeff_abs_level_remainingシンタックス要素をコーディングするためのライスパラメータを導出するために、テンプレートベースの導出方法を使用する。
【0122】
本開示の例示的な技法によれば、統計ベースのライスパラメータ導出方法およびテンプレートベースのライスパラメータ導出方法は、1つの係数レベルを符号化/復号するためのライスパラメータを決定するために、一緒に使用される。このようにして、ビデオコーダは、第1のライスパラメータ導出方法および第2のライスパラメータ導出方法を一緒に使用して変換ユニットの単一の係数レベルをコーディングすることができ、第1のライスパラメータ導出方法は統計ベースの導出方法であり、第2のライスパラメータ導出方法はテンプレートベースの導出方法である。
【0123】
したがって、この例では、ビデオコーダは、TUの現在の係数の係数レベルを復号するためのライスパラメータ値を決定するために、ある関数を使用し得る。この例では、この関数の入力は、記録される値および現在の導出されたライスパラメータ値を含む。記録される値は、現在の係数の前の係数を復号するために使用されたライスパラメータ値に基づき得る。この例では、ビデオコーダは、テンプレートベースの導出方法を使用して現在の導出されたライスパラメータ値を導出し得る。さらに、この例では、関数は最大関数であり得る。
【0124】
たとえば、一例では、現在のcoeff_abs_level_remainingシンタックス要素を符号化/復号するために使用されるライスパラメータは、前の係数を符号化/復号するために使用されたライスパラメータ値に基づく記録される値と、テンプレートベースの方法を使用した現在の導出されたライスパラメータ値とを入力として伴う、関数を使用して決定される。記録される値を決定する例が以下で説明される。
【0125】
現在のcoeff_abs_level_remainingシンタックス要素をコーディング(すなわち、符号化または復号)するために使用されるライスパラメータが関数を使用して決定される一例では、この関数は最大関数であり、たとえば、現在のcoeff_abs_level_remainingシンタックス要素を符号化/復号するために使用されるライスパラメータは、記録されるライスパラメータ値と、テンプレートベースの方法を使用した現在の導出され得た値とのうちの、大きい方の値である。一例では、1つのcoeff_abs_level_remainingシンタックス要素を符号化/復号するために実際に使用されるライスパラメータは、次のcoeff_abs_level_remainingシンタックス要素を符号化/復号するための記録される値となるように設定される。代替的に、いくつかの例では、1つのcoeff_abs_level_remainingシンタックス要素を符号化/復号した後で、次のcoeff_abs_level_remainingシンタックス要素を符号化/復号するための記録されるライスパラメータ値は、実際に使用されたライスパラメータから変数Diffを引いたものに等しく設定される。1つのそのような例では、変数Diffは1に等しく設定される。たとえば、ビデオコーダは、現在の係数の係数レベルを復号するための決定されたライスパラメータ値から1を引いたものに等しく、記録される値を設定し得る。代替的に、変数Diffは、入力/コーディングされる内部のビット深度および/またはコーディングモードに依存する。いくつかの例では、ビデオコーダは、記録される値が0より小さいかどうかを決定し得る。記録される値が0より小さいことに基づいて、ビデオコーダは記録される値を0にリセットし得る。
【0126】
上で説明されたように、記録される値は、coeff_abs_level_remainingシンタックス要素をコーディングするためのライスパラメータとして使用され得る。異なる例では、ビデオコーダは、記録される値を異なる方法で決定し得る。たとえば、一例では、1つの変換ユニットまたはCGを復号することの初めにおいて、記録されるライスパラメータ値は0に等しく設定される。代替的に、いくつかの例では、記録されるライスパラメータ値は、統計ベースの方法に基づいて導出された値に等しく設定される。言い換えると、ビデオコーダは、統計ベースの方法を使用して、記録されたライスパラメータ値を設定し得る。代替的に、いくつかの例では、TUまたはCGの中の最初のcoeff_abs_level_remainingシンタックス要素を復号するとき、統計ベースの方法に基づいて導出されるライスパラメータは、ライスパラメータの前の値を考慮せずに直接使用される。言い換えると、TUの中で最初に(または、いくつかの例では、追加でTUの各CGにおいて最初に)現れるcoeff_abs_level_remainingシンタックス要素を復号するとき、ビデオコーダは、ライスパラメータのいずれの前の値も考慮することなく、統計ベースの方法に基づいて直接導出されたライスパラメータを使用する。代替的に、いくつかの例では、「テンプレートベースの方法」は、上の例では「振り返りベースの方法」により置き換えられ得る。
【0127】
本開示の特定の例示的な技法によれば、テンプレートベースの方法において、sum_absolute_levelMinus1からライスパラメータKを導出するために、汎用関数が提案される。上で示されたように、テンプレートベースの方法では、値sum_absolute_levelMinus1は値の合計を示すことができ、各々のそれぞれの値は、現在の係数に対するローカルテンプレートによりカバーされるそれぞれの係数の0ではないレベルから1を引いたものの絶対値である。したがって、本開示のいくつかのそのような例によれば、ビデオコーダは、複数のレベルの各レベルの絶対値から1を引いたものの合計に等しい値(たとえば、sum_absolute_levelMinus1)を決定することができ、複数のレベルの各々のそれぞれの係数レベルは、テンプレートにより定義される領域の中にある。この例では、ビデオコーダは、値に基づいてライスパラメータを決定し、ライスパラメータに基づいて、TUの現在の係数に対する復号された値を生成し得る。
【0128】
たとえば、ビデオコーダがsum_absolute_levelMinus1からライスパラメータを導出するために汎用関数を使用する一例では、Kは(1 << (K+3)) > (sum_absolute_levelMinus1 + M)を満たす最小の整数として定義され、ここでMは整数、たとえば4である。代替的に、いくつかの例では、「>」は「≧」により置き換えられる。たとえば、Mを4に等しいものとし、sum_absolute_levelMinus1を5に等しいものとすると、(sum_absolute_levelMinus1 + M)は9に等しい。この例では、Kが0に等しい場合、(1 << (K+3))は8に等しく、Kが1に等しい場合、(1 << (K+3))は16に等しい。したがって、この例では、K=1が(1 << (K+3)) > (sum_absolute_levelMinus1 + M)となる最小の整数値であるので、ビデオコーダはKを1に等しく設定する。
【0129】
一例では、Kは(1 << (K+3)) > (sum_absolute_levelMinus1 + M + (1<<K))を満たす最小の整数として定義され、ここでMは整数、たとえば4である。代替的に、いくつかの例では、「>」は「≧」により置き換えられる。たとえば、Mを4に等しいものとし、sum_absolute_levelMinus1を5に等しいものとする。この例では、Kが0に等しい場合、(1 << (K+3))は8に等しく、(sum_absolute_levelMinus1 + M + (1<<K))は10に等しい。さらに、この例では、Kが1に等しい場合、(1 << (K+3))は16に等しく、(sum_absolute_levelMinus1 + M + (1<<K))は11に等しい。したがって、この例では、K=1が(1 << (K+3)) > (sum_absolute_levelMinus1 + M + (1<<K))となる最小の整数値であるので、ビデオコーダはKを1に等しく設定する。
【0130】
代替的に、ビデオコーダがsum_absolute_levelMinus1からライスパラメータを導出するために汎用関数を使用するいくつかの例では、導出されたKは閾値に制限され得る。たとえば、閾値は9、10、または別の値であり得る。一例では、閾値は、1つのシーケンス(たとえば、コーディングされるビデオシーケンス)に対して、および/または1つのピクチャに対して、および/または1つのスライスに対して、事前に定義され、もしくはシグナリングされ得る。たとえば、様々な例において、閾値は、シーケンスパラメータセット、ピクチャパラメータセット、および/またはスライスヘッダにおいて定義され得る。別の例では、閾値は、コーディングモード(無損失コーディングまたは有損失コーディング)および/または入力/コーディングされる内部ビット深度に依存する。たとえば、閾値は、有損失コーディングの場合よりも無損失コーディングの場合に大きいことがある。同様に、閾値は、より大きな内部ビット深度を有する係数をコーディングするときに、より大きいことがある。
【0131】
本開示の例示的な技法によれば、テンプレートベースのパラメータ導出方法において、複数のテンプレート(すなわち、sum_absolute_levelMinus1を計算するための近隣の相対的な位置)が定義され利用される。複数のテンプレートが定義され利用される一例では、テンプレートの選択は走査パターンに基づく。したがって、この例によれば、ビデオコーダは、複数のテンプレートの中から、ライスパラメータを導出するのに使用すべきテンプレートを選択することができ、複数のテンプレートの各々のそれぞれのテンプレートは、現在の係数に対する相対的な近隣の係数の異なる位置を示す。さらに、ビデオコーダは、現在の係数に対する剰余値の絶対的なレベルを示す値に対する符号語を復号するために、ライスパラメータを使用し得る。
【0132】
複数のテンプレートが定義され利用されるいくつかの例では、走査パターンは、
図3の例に示されるパターンなどの、TUの係数を走査するために使用されるパターンであり得る。たとえば、ビデオコーダは、第1の走査パターン(たとえば、
図3の走査パターン)が使用される場合、第1のテンプレート(たとえば、
図4のテンプレート)を選択し得るが、第2の異なる走査パターンが使用される場合、第2の異なるテンプレートを選択し得る。たとえば、第2の走査パターンが
図3の走査パターンの逆である場合、第2のテンプレートは
図4のテンプレートと同様であり得るが、垂直方向および水平方向に反転され得る。
【0133】
複数のテンプレートが定義され利用されるいくつかの例では、テンプレートの選択はイントラ予測モードに基づく。たとえば、ビデオコーダは、CUのPUをイントラ予測するために使用されるイントラ予測モードが水平またはほぼ水平である場合、CUのTUの係数のcoeff_abs_level_remainingシンタックス要素をコーディングするためのライスパラメータを決定する際に使用するために第1のテンプレートを選択することができ、イントラ予測モードが垂直またはほぼ垂直である場合、第2の異なるテンプレートを選択することができる。
【0134】
複数のテンプレートが定義され利用されるいくつかの例では、テンプレートの選択はコーディングモード(たとえば、イントラコーディングモードまたはインターコーディングモード)および/または変換行列に基づく。たとえば、ビデオコーダは、CUがイントラ予測を使用してコーディングされる場合、CUのTUの係数のcoeff_abs_level_remainingシンタックス要素をコーディングするためのライスパラメータを決定する際に使用するために第1のテンプレートを選択することができ、CUがインター予測を使用してコーディングされる場合、第2の異なるテンプレートを選択することができる。
【0135】
複数のテンプレートが定義され利用されるいくつかの例では、テンプレートの選択は現在のTUの量子化パラメータ(QP)に基づく。QPは、変換係数レベルのスケーリングのための復号プロセスによって使用される変数であり得る。たとえば、ビデオコーダは、QPが閾値未満である場合、CUのTUの係数のcoeff_abs_level_remainingシンタックス要素をコーディングするためのライスパラメータを決定する際に使用するために第1のテンプレートを選択することができ、QPが閾値より大きい場合、第2の異なるテンプレートを選択することができる。
【0136】
別の例では、テンプレートの選択は、TUに対する相対的なCGの位置もしくは係数レベルの位置、および/または変換ユニットサイズに基づき得る。たとえば、ビデオコーダは、CUのTUのCGの一番下の行の係数のcoeff_abs_level_remainingシンタックス要素をコーディングするためのライスパラメータを決定する際に使用するために第1のテンプレートを選択することができ、TUの各々の他のCGに対しては第2の異なるテンプレートを選択することができる。
【0137】
上で示されたように、HEVCにおいて使用される振り返りベースの導出方法では、現在の係数レベルに対するabsCoeffLevel値が3*2
Kより大きい場合、ビデオコーダは、K+1と4のうちの小さい方に等しいものとしてKを更新する。現在の係数レベルのabsCoeffLevel値が3*2
Kより大きくない場合、ビデオコーダはKを更新しない。本開示の例示的な技法によれば、振り返りベースの導出方法では、ライスパラメータを計算するために絶対値(absCoeffLevel)を使用する代わりに、コーディングされるべきcoeff_abs_level_remainingシンタックス要素の値が使用される(これは、式(1)において定義されるような(absCoeffLevel - baseLevel)に等しい)。したがって、この例では、現在の係数レベルに対するcoeff_abs_level_remainingシンタックス要素の値が3*2
Kより大きい場合、ビデオコーダは、K+1と4のうちの小さい方に等しいものとしてKを更新する。現在の係数レベルのabsCoeffLevel値が3*2
Kより大きくない場合、ビデオコーダはKを更新しない。この例では、ビデオコーダは次いで、現在の係数レベルに対するcoeff_abs_level_remainingシンタックス要素をコーディングするためのライスパラメータとして、Kの得られる値を使用することができる。
【0138】
たとえば、ビデオコーダは、以前の係数に対するレベル剰余値(たとえば、coeff_abs_level_remaining)を決定することができ、このレベル剰余値は第1の値と第2の値との差に等しく、第1の値は以前の係数の絶対値であり、第2の値は第1のフラグ(たとえば、significant_flag)、第2のフラグ(たとえば、coeff_abs_level_greater1_flag)、および第3のフラグ(たとえば、coeff_abs_level_greater2_flag)の合計に等しい。第1のフラグは以前の係数が0ではないかどうかを示し、第2のフラグは以前の係数が1より大きいかどうかを示し、第3のフラグは以前の係数が2より大きいかどうかを示す。この例では、ビデオコーダは、以前の係数に対するレベル剰余値に基づいて、ライスパラメータを変更するかどうかを決定し得る。さらに、この例では、ビデオコーダは、現在の係数に対する剰余値の絶対的なレベルに対する符号語を復号するために、ライスパラメータを使用し得る。
【0139】
上で示されたように、HEVC Range Extensionsにおいて使用される統計ベースの導出方法では、statCoeff値は、現在の係数レベルのabsCoeffLevelが(3*(1<<(statCoeff / 4)))以上である場合にはインクリメントされ、((2 * absCoeffLevel) < (1 << (statCoeff / 4)))である場合にはデクリメントされる。本開示の例示的な技法によれば、統計ベースの導出方法において、統計statCoeffを更新するために絶対値(absCoeffLevel)を使用する代わりに、コーディングされるべきcoeff_abs_level_remainingシンタックス要素が使用される(これは式(1)において定義される(absCoeffLevel - baseLevel)に等しい)。したがって、この例では、statCoeff値は、現在の係数レベルのcoeff_abs_level_remainingシンタックス要素が(3*(1<<(statCoeff / 4)))以上である場合にはインクリメントされ、((2 * coeff_abs_level_remaining) < (1 << (statCoeff / 4)))である場合にはデクリメントされる。この例では、ビデオコーダは、最大のライスパラメータと(statCoeff/4)とのうちの小さい方に等しくなるようにKを設定し得る。この例では、ビデオコーダは次いで、現在の係数レベルに対するcoeff_abs_level_remainingシンタックス要素をコーディングするためのライスパラメータとしてKを使用し得る。
【0140】
たとえば、この例によれば、ビデオコーダは、以前の係数に対するレベル剰余値(たとえば、coeff_abs_level_remaining)を決定することができ、このレベル剰余値は第1の値と第2の値との差に等しく、第1の値は以前の係数の絶対値(たとえば、absCoeffLevel)であり、第2の値(たとえば、baseLevel)は第1のフラグ(たとえば、significant_flag)、第2のフラグ(たとえば、coeff_abs_level_greater1_flag)、および第3のフラグ(たとえば、coeff_abs_level_greater2_flag)の合計に等しい。第1のフラグは以前の係数が0ではないかどうかを示し、第2の値は以前の係数が1より大きいかどうかを示し、第3のフラグは以前の係数が2より大きいかどうかを示す。この例では、ビデオコーダは、レベル剰余値に基づいて統計を更新し得る。加えて、この例では、ビデオコーダは、統計に基づいてライスパラメータを決定し得る。さらに、この例では、ビデオコーダは、現在の係数に対する剰余値の絶対的なレベルに対する符号語を復号するために、ライスパラメータを使用し得る。
【0141】
本開示の例示的な技法によれば、上で言及された3つの方法(すなわち、テンプレートベースの方法、振り返りベースの方法、および統計ベースの方法)のいずれにおいても、ライス符号およびライス符号+指数ゴロム符号に対する切替点は(M<<K)に等しく設定されることがあり、ここでMはKにも依存するが、異なるKの値に対して異なり得る。一例では、0、1、2に等しいKに対して、Mはそれぞれ、6、5、6に設定される。この例では、他のKの値に対して、Mは3に設定される。別の例では、Kが3より小さいとき、Mは6に設定され、他のKの値に対しては、Mは3に設定される。
【0142】
たとえば、この例では、ビデオコーダは、M<<Kとして切替点を決定することができ、ここでMは1<<Kに等しく、Kは符号語の残りの部分におけるビットの数である。この例では、ビデオコーダは、切替点に基づいて、ライスコーディング方法または指数ゴロムコーディング方法のいずれかを選択することができる。加えて、この例では、ビデオコーダは、現在の係数に対する剰余値の絶対的なレベルに対する符号語を復号するために、選択されたコーディング方法を使用し得る。
【0143】
本開示の例示的な技法によれば、ライスパラメータの導出方法は、入力ビデオのビット深度または内部コーデックのビット深度にさらに依存し得る。一例では、ビット深度が8に等しいとき、テンプレートベースの方法が適用され、ビット深度が8より大きいとき、たとえば10または12であるとき、統計ベースの方法が適用される。
【0144】
したがって、そのような例によれば、ビデオコーダは、入力ビデオのビット深度に基づいて、または内部コーデックのビット深度に基づいて、ライスパラメータを決定することができる。この例では、ビデオコーダは、現在の係数に対する剰余値の絶対的なレベルに対する符号語を復号するために、ライスパラメータを使用し得る。
【0145】
本開示の例示的な技法によれば、有損失コーディングまたは無損失コーディングは、ライスパラメータを導出するために異なる方法を使用し得る。たとえば、ビデオコーダは、ブロックが有損失コーディングを使用して符号化される場合にはテンプレートベースの導出方法を使用することができ、ブロックが無損失コーディングを使用して符号化される場合には統計ベースの導出方法を使用することができる。別の例では、ビデオコーダは、ブロックが有損失コーディングを使用して符号化される場合には統計ベースの導出方法を使用することができ、ブロックが無損失コーディングを使用して符号化される場合にはテンプレートベースの導出方法を使用することができる。
【0146】
したがって、そのような例によれば、ビデオコーダは、有損失コーディングが使用されるか無損失コーディングが使用されるかに応じて、異なる方法を使用してライスパラメータを導出し得る。さらに、この例では、ビデオコーダは、現在の係数に対する剰余値の絶対的なレベルに対する符号語を復号するために、ライスパラメータを使用し得る。
【0147】
代替的に、いくつかの例では、ライスパラメータを導出するための異なる方法が、現在のTUの量子化パラメータ(QP)値に従って適用され得る。たとえば、ビデオコーダは、現在のTUのQP値が閾値より大きい場合にはテンプレートベースの導出方法を使用することができ、現在のTUのQP値が閾値より小さい場合には統計ベースの導出方法を使用することができる。別の例では、ビデオコーダは、現在のCUのQP値が閾値より大きい場合には統計ベースの導出方法を使用することができ、現在のCUのQP値が閾値より小さい場合にはテンプレートベースの導出方法を使用することができる。
【0148】
上で示されたように、いくつかの例では、ビデオコーダは、より小さな値を有するcoeff_abs_level_remainingシンタックス要素に対してライス符号を使用し、より大きな値を有するcoeff_abs_level_remainingシンタックス要素に対して指数ゴロム符号を使用する。ライス符号と指数ゴロム符号の両方が、パラメータKを使用して決定される。本開示の例示的な技法によれば、上の方法は、ライス符号と指数ゴロム符号の両方の順序を決定するために使用され得る。たとえば、ビデオコーダは、特定の係数レベルに対するcoeff_abs_level_remainingシンタックス要素をコーディングする際に使用するための値Kを決定するために上で与えられた例のいずれかを使用し、特定の係数レベルに対するcoeff_abs_level_remainingシンタックス要素に対してK次のライス符号またはK次の指数ゴロム符号のいずれかを決定するためにKの決定された値を使用し得る。代替的に、いくつかの例では、本開示において説明される方法は、ライス符号または指数ゴロム符号の順序を決定するためだけに使用される。言い換えると、そのような例では、ビデオコーダは、K次のライス符号を決定するためだけにパラメータKの値を決定するための本開示において与えられる例を使用することができ、またはビデオコーダは、K次の指数ゴロム符号を決定するためだけにパラメータKの値を決定するための本開示において与えられる例を使用することができる。
【0149】
本開示の例示的な技法によれば、代替的に、いくつかの例では、上の方法は、K次のEG符号などの、順序の決定を必要とする係数レベルをコーディングするための他の種類の二値化方法に適用され得る。
【0150】
本開示の例示的な技法によれば、代替的に、上の方法はまた、テンプレートを変更して、または変更せずに、K次の二値化方法が適用される他のシンタックス要素に適用され得る。一例では、動きベクトル差分のコーディングが上の方法を使用し得る。インターコーディングされるブロックは、予測ブロックを形成する参照サンプルのブロックを指す動きベクトルと、コーディングされたブロックと予測ブロックとの差分を示す残差データとに従って符号化される。動きベクトルを直接シグナリングするのではなく、ビデオエンコーダは動きベクトル候補のセットを特定することができ、これは、ブロックの空間的または時間的な近隣の動きパラメータを指定することができる。ビデオエンコーダは、動きベクトル候補のセットの中の選択された動きベクトル候補のインデックスをシグナリングし、選択された動きベクトル候補の動きベクトルとブロックの動きベクトルとの差分をシグナリングし得る。シグナリングされた差は、「動きベクトル差分」(MVD:motion vector difference)と呼ばれ得る。係数レベルをシグナリングするためのHEVCにおける手法と同様に、MVDは、水平方向の寸法xと垂直方向の寸法yの各々に対して、abs_mvd_greater0_flagシンタックス要素、abs_mvd_greater1_flagシンタックス要素、abs_mvd_minus2シンタックス要素、およびmvd_sign_flagシンタックス要素を使用して、HEVCにおいてシグナリングされ得る。HEVC仕様書の7.4.9.9項において示されるように、abs_mvd_minus2[compIdx]に2を足したものは、動きベクトル成分の差分の絶対値を指定する。HEVC仕様書のTable 9-38は、abs_mvd_minus2が1次の指数ゴロム符号を使用して二値化されることを示す。しかしながら、本開示の例によれば、abs_mvd_minus2シンタックス要素(またはMVDをシグナリングするための他のシンタックス要素)を二値化するために使用されるライス符号または指数ゴロム符号の次数Kは、本開示の他の箇所において与えられる例のいずれかを使用して決定され得る。
【0151】
テンプレートベースのライスパラメータ導出方法を使用する本開示の例によれば、関数sum_template(k)は、次のように、大きさがkより大きい、テンプレートの中の係数の数を返すように定義される。
sum_template(k)=Σδ
j(x
i, k)
ただし、
【0153】
さらに、この例では、関数f(x, y, n, t)は場所情報を扱うように定義され、δ
k(u, v)は次のように成分情報を扱うように定義される。
【0155】
テンプレートが
図4に示されている。現在の変換係数が「X」としてマークされ、その5つの空間的な近隣が「x
i」(iは0から4である)としてマークされる。以下の2つの条件のうちの1つが満たされる場合、x
iは利用不可能であるものとしてマークされ、コンテキストインデックス導出プロセスにおいて使用されない。
- x
iの場所および現在の変換係数Xが同じ変換ユニットの中に位置しない。
- x
iの場所がピクチャの水平方向または垂直方向の境界の外側に位置する。
- 変換係数x
iがまだコーディング/復号されていない。
【0156】
本開示のいくつかの技法によれば、ビデオコーダは、係数レベルのsignificant_flagシンタックス要素(bin0)に対するコンテキスト選択を実行し得る。コンテキスト選択を実行するために、ビデオコーダは、選択されたコンテキストを特定するコンテキストインデックスを決定し、または別様に計算し得る。1つのそのような例によれば、bin0に対するコンテキストインデックスの計算は、次のように定義される。
- bin0に対して、コンテキストインデックスは次のように導出される。
c
0 = min(sum_template(0), 5) + f(x, y, 6, 2) + δ
k(f(x, y, 6, 5), cIdx)
c
0 = c
0 + offset(cIdx, width)
ただし、
【0158】
上の式において、オフセットを加算する前に、c
0はbin0に対するコンテキストインデックスであり、c
0は0から17にわたり得る。オフセットを加算した後で、c
0は0から53にわたり得る。さらに、上の式では、値sum_templateは、上で説明されたように決定され、すなわちsum_template(k) = Σδ
j(x
i, k)であり、ただし
【0160】
いくつかの例では、c
0の範囲に基づいて、ルーマコンテキストの1つのセットは、NumberLumaCtxOneset、すなわち18個のコンテキストモデルを含む。ルーマbin0をコーディングするための異なる変換サイズ(「w」と表記される変換幅を伴う)は、自身の固有のセットを選択し得る。たとえば、ビデオコーダは、第1のサイズの変換ブロックの中のルーマサンプルに対するbin0をコーディングするためにコンテキストの第1のセットを使用することがあり、第2の異なるサイズの変換ブロックの中のルーマサンプルに対するbin0をコーディングするためにコンテキストの第2の異なるセットを使用することがある。
【0161】
加えて、クロマコンテキストおよびルーマコンテキストは、コーディング性能をさらに改善するために分離され得る。たとえば、YCbCr入力に対して、3つの色成分(すなわち、Y、Cb、およびCr)はそれぞれ、0、1、および2に等しい成分インデックスvを用いて表され得る。したがって、この例では、ビデオコーダは、画素のルーマサンプルのbin0の算術コーディングのためにあるコーディングコンテキストを選択し、同じ画素のクロマサンプルのbin0の算術コーディングのために異なるコーディングコンテキストを選択し得る。
【0162】
さらに、いくつかの例では、ビデオコーダは、係数レベルのbin1(たとえば、coeff_abs_level_greater1_flag)およびbin2(たとえば、coeff_abs_level_greater2_flag)の算術コーディングのコンテキストを選択し得る。たとえば、bin1に対して、コンテキストインデックス(c
1)は次のように導出される。
c
1 = min(sum_template(1), 4) + N
c
1 = c
1 + δ
k(f(x, y, 5, 3), cIdx) + δ
k(f(x, y, 5, 10), cIdx)
bin2に対して、コンテキストインデックス(c
2)は次のように導出される。
c
2 = min(sum_template(2), 4) + N
c
2 = c
2 + δ
k(f(x, y, 5, 3), cIdx) + δ
k(f(x, y, 5, 10), cIdx)
上の式では、Nは1に等しく、f(x,y,n,t)は上のように定義される(すなわち、
【0164】
)。最初のbin1またはbin2は0に等しいコンテキストインデックスc
1またはc
2を用いてコーディングされ、他のbin1およびbin2について、それらはそれぞれc
1またはc
2に等しいコンテキストインデックスを用いてコーディングされ、c
1およびc
2は上で定義される。
【0165】
上で示されたように、ビデオコーダは、ライス符号、または存在するときには指数ゴロム符号を用いて、係数レベルに対する剰余ビン(たとえば、coeff_abs_level_remainingシンタックス要素)を二値化し得る。この例によれば、ビデオコーダは、統計ベースのライスパラメータ導出方法とテンプレートベースのライスパラメータ導出方法の両方を使用して、信号TUの係数レベルをコーディングし得る。より具体的には、この例では、ビデオコーダは、統計ベースのライスパラメータ導出方法とテンプレートベースのライスパラメータ導出方法の両方を使用して、信号TUの係数レベルに対する剰余ビンをコーディングし得る。この例では、ライス符号または指数ゴロム符号のライスパラメータ次数Kを決めるために、以下の規則が適用される。
・1つの変換ユニットを復号する前に、変数prevKを0に設定する
・復号されるべき最初の値である場合、変数K
tempがcRicePara
Statisticsに設定される。言い換えると、コーディングされているcoeff_abs_level_remainingシンタックス要素がコーディングされるべき変換ユニットの最初のcoeff_abs_level_remainingシンタックス要素である場合、変数K
tempがcRicePara
Statisticsに設定される。
・それ以外の場合(復号されるべき最初の値ではない場合)、変数K
tempがcRicePara
Templateに設定される。
・Kをmax(prevK, K
temp)に等しく設定する
・prevKを更新する:prevK = K - M
【0166】
したがって、この例では、ビデオコーダは、TUの最初のcoeff_abs_level_remainingシンタックス要素に統計ベースのライスパラメータ導出方法を適用することができ、TUの各々の後続のcoeff_abs_level_remainingシンタックス要素にテンプレートベースのライスパラメータ導出方法を適用することができる。一例では、Mは1に設定される。別の例では、Mは0に設定される。さらに、前の段落において説明された例のいくつかの実例では、cRicePara
Statisticsの導出プロセスは、本開示の他の箇所で説明されるような、cRiceParamを決定するためのプロセスと同じである。前の段落において説明される例のいくつかの実例では、cRicePara
Templateの導出プロセスは、以下のステップに順番に従う。
- 式(7)において使用される方法に従ってsum_absolute_levelMinus1を計算する(すなわち、sum_absolute_levelMinus1 = Σδ
j(x
i)であり、ただし
【0168】
)
- uiValをsum_absolute_levelMinus1に等しく設定する
- 以下の疑似コードを使用してKを選択する:
for ( iOrder = 0; iOrder < MAX_GR_ORDER_RESIDUAL; iOrder ++ )
{
if( (1 << (iOrder + 3)) > (uiVal + 4))
{
break;
}
}
K = (iOrder == MAX_GR_ORDER_RESIDUAL ? (MAX_GR_ORDER_RESIDUAL - 1): iOrder);
【0169】
したがって、この例では、ビデオコーダは、最大の許容される順序と、(1 << (iOrder + 3)) > (uiVal + 4)であるようなiOrderの最小の非負の値とのうちの小さい方に、Kを設定する。一例では、MAX_GR_ORDER_RESIDUALは10に設定される。別の例では、MAX_GR_ORDER_RESIDUALは12に設定される。
【0170】
代替的に、またはさらに、式(7)は次のように変更され得る。
【0172】
一例では、上の式(7)では、Mは入力/内部ビット深度から8を引いたものに等しく設定される。代替的に、上の式(7)において、Mは0に設定される。代替的に、Mの値は、有損失/無損失コーディングモード、ならびに/または入力/内部ビット深度および/もしくはイントラ/インターコーディングモード、ならびに/またはシグナリングされた値もしくは以前にコーディングされた情報から導出された値に、依存する。一例では、オフセットは(1 << (M-1))に設定される。代替的に、いくつかの例では、オフセットは0に設定される。代替的に、関数δ
j(x)は次のように定義される。
【0174】
いくつかの例では、SP(K)は、切替点を決定する際に使用される値(すなわち、それより上では指数ゴロム符号がライス符号の代わりに使用される値)を返す関数である。一例では、SP(0) = SP(2) = 6であり、SP(1) = 5であり、Kの他の値に対しては、SP(K)は3に等しい。代替的に、さらに、SP(K)が、統計ベースの導出方法における式(5)および(6)に対して考慮される。いくつかの例では、coeff_abs_level_remainingシンタックス要素の二値化が次のように定義される。
- coeff_abs_level_remainingシンタックス要素が(SP(K) << K)より小さい場合、K次のライス符号が適用される。
- それ以外の(coeff_abs_level_remainingが(SP(K) << K)以上である)場合、プレフィックスおよびサフィックスが符号語として使用され、プレフィックスはSP(K)個の「1」であり、サフィックスはK次の指数ゴロム符号である。
【0176】
上の表において、*はSP(K)個の「1」の値を表す。たとえば、SP(K)が6である場合、*は6個の連続する1を表す。
【0177】
図5は、本開示の技法を実施することができる例示的なビデオエンコーダ20を示すブロック図である。
図5は説明のために提供され、広く例示されるとともに本開示において説明されるような技法の限定と見なされるべきでない。説明のために、本開示は、HEVCコーディングの文脈においてビデオエンコーダ20を説明する。しかしながら、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
【0178】
図5の例において、ビデオエンコーダ20は、予測処理ユニット100、ビデオデータメモリ101、残差生成ユニット102、変換処理ユニット104、量子化ユニット106、逆量子化ユニット108、逆変換処理ユニット110、再構築ユニット112、フィルタユニット114、復号ピクチャバッファ116、およびエントロピー符号化ユニット118を含む。予測処理ユニット100は、インター予測処理ユニット120およびイントラ予測処理ユニット126を含む。インター予測処理ユニット120は、動き推定ユニットおよび動き補償ユニット(図示せず)を含む。他の例では、ビデオエンコーダ20は、より多数の、より少数の、または異なる機能構成要素を含み得る。
【0179】
ビデオデータメモリ101は、ビデオエンコーダ20の構成要素によって符号化されるべきビデオデータを記憶し得る。ビデオデータメモリ101に記憶されるビデオデータは、たとえば、ビデオソース18から取得され得る。復号ピクチャバッファ116は、たとえば、イントラコーディングモードまたはインターコーディングモードにおいて、ビデオエンコーダ20によってビデオデータを符号化する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ101および復号ピクチャバッファ116は、シンクロナスDRAM(SDRAM)を含むダイナミックランダムアクセスメモリ(DRAM)、磁気抵抗性RAM(MRAM)、抵抗性RAM(RRAM(登録商標))、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ101および復号ピクチャバッファ116は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例では、ビデオデータメモリ101は、ビデオエンコーダ20の他の構成要素とともにオンチップであってもよく、または、これらの構成要素に対してオフチップであってもよい。
【0180】
ビデオエンコーダ20は、ビデオデータを受信する。ビデオエンコーダ20は、ビデオデータのピクチャのスライスの中の各CTUを符号化し得る。CTUの各々は、ピクチャの、等しいサイズのルーマコーディングツリーブロック(CTB)、および対応するCTBと関連付けられ得る。CTUを符号化することの一部として、予測処理ユニット100は、4分木区分を実行して、CTUのCTBを次第に小さくなるブロックに分割し得る。より小さいブロックは、CUのコーディングブロックであり得る。たとえば、予測処理ユニット100は、CTUと関連付けられるCTBを4つの等しいサイズのサブブロックに区分することができ、サブブロックの1つまたは複数を4つの等しいサイズのサブサブブロックに区分することができ、以下同様である。
【0181】
ビデオエンコーダ20は、CTUのCUを符号化して、CUの符号化された表現(すなわち、コーディングされたCU)を生成し得る。CUを符号化することの一部として、予測処理ユニット100は、CUの1つまたは複数のPUの間でCUと関連付けられるコーディングブロックを区分し得る。したがって、各PUは、ルーマ予測ブロックおよび対応するクロマ予測ブロックと関連付けられ得る。ビデオエンコーダ20およびビデオデコーダ30は、様々なサイズを有するPUをサポートし得る。CUのサイズは、CUのルーマコーディングブロックのサイズを指すことがあり、PUのサイズは、PUのルーマ予測ブロックのサイズを指すことがある。特定のCUのサイズが2N×2Nであると仮定すると、ビデオエンコーダ20およびビデオデコーダ30は、イントラ予測に対して2N×2NまたはN×NというPUサイズ、およびインター予測に対して2N×2N、2N×N、N×2N、N×N、または類似の、対称のPUサイズをサポートし得る。ビデオエンコーダ20およびビデオデコーダ30はまた、インター予測に対して、2N×nU、2N×nD、nL×2N、およびnR×2NというPUサイズのための非対称区分をサポートし得る。
【0182】
インター予測処理ユニット120は、インター予測をCUの各PUに対して実行することによって、PUの予測データを生成し得る。PUの予測データは、PUの予測ブロックおよびPUの動き情報を含み得る。インター予測処理ユニット120は、PUがIスライス中にあるか、Pスライス中にあるか、またはBスライス中にあるかに応じて、CUのPUに対して異なる動作を実行し得る。Iスライスの中では、すべてのPUがイントラ予測される。したがって、PUがIスライスの中にある場合、インター予測処理ユニット120は、インター予測をPUに対して実行しない。したがって、Iモードで符号化されるブロックの場合、予測されるブロックは、同じフレーム内の以前符号化された隣接ブロックからの空間予測を使用して形成される。PUがPスライスの中にある場合、インター予測処理ユニット120は、単方向インター予測を使用してPUの予測ブロックを生成することができる。
【0183】
イントラ予測処理ユニット126は、イントラ予測をPUに対して実行することによって、PUの予測データを生成し得る。PUの予測データは、PUの予測ブロックおよび様々なシンタックス要素を含み得る。イントラ予測処理ユニット126は、Iスライス、Pスライス、およびBスライスの中のPUに対して、イントラ予測を実行し得る。
【0184】
イントラ予測をPUに対して実行するために、イントラ予測処理ユニット126は、複数のイントラ予測モードを使用して、PUの予測データの複数のセットを生成し得る。イントラ予測処理ユニット126は、隣接PUのサンプルブロックからのサンプルを使用して、PUの予測ブロックを生成し得る。PU、CU、およびCTUに対して左から右、上から下への符号化順序を仮定すると、隣接PUは、PUの上、右上、左上、または左であってよい。イントラ予測処理ユニット126は、様々な数のイントラ予測モード、たとえば、33個の方向性イントラ予測モードを使用し得る。いくつかの例では、イントラ予測モードの数は、PUと関連付けられる領域のサイズに依存し得る。
【0185】
予測処理ユニット100は、PUのためにインター予測処理ユニット120によって生成される予測データ、またはPUのためにイントラ予測処理ユニット126によって生成される予測データの中から、CUのPUの予測データを選択し得る。いくつかの例では、予測処理ユニット100は、予測データのセットのレート/ひずみの尺度に基づいて、CUのPUの予測データを選択する。選択される予測データの予測ブロックは、選択予測ブロックと本明細書で呼ばれることがある。
【0186】
残差生成ユニット102は、CUのコーディングブロック(たとえば、ルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック)およびCUのPUの選択された予測ブロック(たとえば、予測ルーマブロック、予測Cbブロック、および予測Crブロック)に基づいて、CUの残差ブロック(たとえば、ルーマ残差ブロック、Cb残差ブロック、およびCr残差ブロック)を生成し得る。たとえば、残差生成ユニット102は、残差ブロックの中の各サンプルがCUのコーディングブロックの中のサンプルとCUのPUの対応する選択された予測ブロックの中の対応するサンプルとの間の差分に等しい値を有するように、CUの残差ブロックを生成し得る。
【0187】
変換処理ユニット104は、四分木区分を実行して、CUと関連付けられた残差ブロックをCUのTUと関連付けられた変換ブロックに区分し得る。したがって、TUは、ルーマ変換ブロックおよび2つのクロマ変換ブロックと関連付けられ得る。CUのTUのルーマ変換ブロックおよびクロマ変換ブロックのサイズおよび位置は、CUのPUの予測ブロックのサイズおよび位置に基づいてよく、または基づかなくてもよい。「残差四分木」(RQT)と呼ばれる四分木構造が、領域の各々と関連付けられるノードを含み得る。CUのTUは、RQTのリーフノードに相当し得る。
【0188】
変換処理ユニット104は、1つまたは複数の変換をTUの変換ブロックに適用することによって、CUのTUごとに変換係数ブロックを生成し得る。変換処理ユニット104は、TUと関連付けられた変換ブロックに、様々な変換を適用し得る。たとえば、変換処理ユニット104は、離散コサイン変換(DCT)、方向変換、または概念的に類似の変換を、変換ブロックに適用し得る。いくつかの例では、変換処理ユニット104は、変換ブロックに変換を適用しない。そのような例では、変換ブロックは変換係数ブロックとして扱われてよい。
【0189】
量子化ユニット106は、係数ブロックの中の変換係数を量子化し得る。量子化プロセスは、変換係数の一部またはすべてと関連付けられるビット深度を低減し得る。たとえば、nビットの変換係数は、量子化においてmビットの変換係数に切り捨てられてよく、nはmよりも大きい。量子化ユニット106は、CUと関連付けられる量子化パラメータ(QP)値に基づいて、CUのTUと関連付けられる係数ブロックを量子化し得る。ビデオエンコーダ20は、CUと関連付けられるQP値を調整することによって、CUと関連付けられた係数ブロックに適用される量子化の程度を調整し得る。量子化が情報の損失をもたらすことがあり、したがって、量子化された変換係数の精度は元の精度よりも低いことがある。
【0190】
逆量子化ユニット108および逆変換処理ユニット110は、それぞれ、逆量子化および逆変換を係数ブロックに適用して、係数ブロックから残差ブロックを再構築し得る。再構築ユニット112は、予測処理ユニット100によって生成された1つまたは複数の予測ブロックからの対応するサンプルに、再構築された残差ブロックを加算して、TUと関連付けられる再構築された変換ブロックを生成し得る。このようにしてCUのTUごとに変換ブロックを再構築することによって、ビデオエンコーダ20は、CUのコーディングブロックを再構築し得る。
【0191】
フィルタユニット114は、1つまたは複数のデブロッキング動作を実行して、CUと関連付けられるコーディングブロックにおけるブロッキングアーティファクトを低減し得る。フィルタユニット114が1つまたは複数のデブロッキング動作を再構築されたコーディングブロックに対して実行した後、復号ピクチャバッファ116は、再構築されたコーディングブロックを記憶し得る。インター予測処理ユニット120は、他のピクチャのPUに対してインター予測を実行するために、再構築されたコーディングブロックを含む参照ピクチャを使用し得る。加えて、イントラ予測処理ユニット126は、CUと同じピクチャの中の他のPUに対してイントラ予測を実行するために、復号ピクチャバッファ116の中の再構築されたコーディングブロックを使用し得る。
【0192】
エントロピー符号化ユニット118は、ビデオエンコーダ20の他の機能構成要素からデータを受け取り得る。たとえば、エントロピー符号化ユニット118は、係数ブロックを量子化ユニット106から受け取ることができ、シンタックス要素を予測処理ユニット100から受け取ることができる。エントロピー符号化ユニット118は、エントロピー符号化されたデータを生成するために、1つまたは複数のエントロピー符号化動作をデータに対して実行し得る。たとえば、エントロピー符号化ユニット118は、CABAC動作、コンテキスト適応型可変長コーディング(CAVLC)動作、可変長-可変長(V2V)コーディング動作、シンタックスベースコンテキスト適応型バイナリ算術コーディング(SBAC)動作、確率区間区分エントロピー(PIPE)コーディング動作、指数ゴロム符号化動作、または別のタイプのエントロピー符号化動作を、データに対して実行し得る。ビデオエンコーダ20は、エントロピー符号化ユニット118によって生成された、エントロピー符号化されたデータを含むビットストリームを出力し得る。たとえば、ビットストリームは、CUに対するRQTを表すデータを含み得る。
【0193】
エントロピー符号化ユニット118は、本開示において提案される技法を実行するように構成され得る。たとえば、エントロピー符号化ユニット118は、ピクチャの現在のCUの単一のTUの係数レベルを符号化するために、第1のライスパラメータ導出方法および第2のライスパラメータ導出方法を使用し得る。この例では、第1のライスパラメータ導出方法は統計ベースの導出方法であることがあり、第2のライスパラメータ導出方法はテンプレートベースの導出方法であることがある。この例では、第1のライスパラメータ導出方法と第2のライスパラメータ導出方法のいずれかを使用して係数レベルを符号化することの一部として、エントロピー符号化ユニット118は、K次のライス符号語または指数ゴロム符号語として、係数レベルと関連付けられるシンタックス要素(たとえば、coeff_abs_level_remainingシンタックス要素)を二値化することができ、Kは第1のライスパラメータ導出方法または第2のライスパラメータ導出方法を使用して決定される。さらに、この例では、エントロピー符号化ユニット118は、符号語に対して算術コーディングを実行することができる。
【0194】
図6は、本開示の技法を実施するように構成される例示的なビデオデコーダ30を示すブロック図である。
図6は説明のために提供され、広く例示されるとともに本開示において説明されるような技法を限定するものではない。説明のために、本開示は、HEVCコーディングの文脈においてビデオデコーダ30を説明する。しかしながら、本開示の技法は、他のコーディング規格または方法に適用であり得る。
【0195】
図6の例では、ビデオデコーダ30は、エントロピー復号ユニット150、ビデオデータメモリ151、予測処理ユニット152、逆量子化ユニット154、逆変換処理ユニット156、再構築ユニット158、フィルタユニット160、および復号ピクチャバッファ162を含む。予測処理ユニット152は、動き補償ユニット164およびイントラ予測処理ユニット166を含む。他の例では、ビデオデコーダ30は、より多数の、より少数の、または異なる機能構成要素を含み得る。
【0196】
ビデオデータメモリ151は、ビデオデコーダ30の構成要素によって復号されるべき符号化されたビデオビットストリームなどのビデオデータを記憶し得る。ビデオデータメモリ151に記憶されるビデオデータは、たとえば、チャネル16から、たとえば、カメラなどのローカルビデオソースから、ビデオデータの有線ネットワーク通信もしくはワイヤレスネットワーク通信を介して、または物理データ記憶媒体にアクセスすることによって、取得され得る。ビデオデータメモリ151は、符号化されたビデオビットストリームからの符号化されたビデオデータを記憶するコーディングピクチャバッファ(CPB:coded picture buffer)を形成し得る。復号ピクチャバッファ162は、たとえば、イントラコーディングモードまたはインターコーディングモードにおいて、ビデオデコーダ30によってビデオデータを復号する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ151および復号ピクチャバッファ162は、シンクロナスDRAM(SDRAM)を含むダイナミックランダムアクセスメモリ(DRAM)、磁気抵抗性RAM(MRAM)、抵抗性RAM(RRAM(登録商標))、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ151および復号ピクチャバッファ162は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例では、ビデオデータメモリ151は、ビデオデコーダ30の他のコンポーネントとともにオンチップであってよく、または、それらのコンポーネントに対してオフチップであってよい。
【0197】
ビデオデータメモリ151は、ビットストリームの符号化されたビデオデータ(たとえば、NALユニット)を受信し記憶する。エントロピー復号ユニット150は、符号化されたビデオデータ(たとえば、NALユニット)をCPBから受信し、NALユニットを構文解析して、シンタックス要素を取得し得る。エントロピー復号ユニット150は、NALユニットの中のエントロピー符号化されたシンタックス要素をエントロピー復号し得る。予測処理ユニット152、逆量子化ユニット154、逆変換処理ユニット156、再構築ユニット158、およびフィルタユニット160は、ビットストリームから抽出されたシンタックス要素に基づいて、復号されたビデオデータを生成し得る。エントロピー復号ユニット150は、エントロピー符号化ユニット118のプロセスとは全般に逆のプロセスを実行し得る。
【0198】
ビットストリームを復号することの一部として、エントロピー復号ユニット150は、シンタックス要素をコーディングされたスライスNALユニットから抽出し、エントロピー復号し得る。コーディングされたスライスの各々は、スライスヘッダおよびスライスデータを含み得る。スライスヘッダは、スライスに関係するシンタックス要素を含み得る。エントロピー符号化ユニット118は、本開示において提案される技法を実行するように構成され得る。
【0199】
エントロピー復号ユニット150は、本開示の様々な例の少なくとも一部を実行し得る。たとえば、エントロピー復号ユニット150は、coeff_abs_level_remainingシンタックス要素などの、二値化されたシンタックス要素を非二値化し得る。二値化されたシンタックス要素を非二値化することの一部として、エントロピー復号ユニット150は、本開示の他の箇所において与えられる例において説明される方式でライスパラメータを決定し得る。たとえば、本開示の一例によれば、エントロピー復号ユニット150は、ピクチャの現在のCUの単一のTUの係数レベルを復号するために第1のライスパラメータ導出方法および第2のライスパラメータ導出方法を使用することができ、第1のライスパラメータ導出方法は統計ベースの導出方法であり、第2のライスパラメータ導出方法はテンプレートベースの導出方法である。
【0200】
この例では、第1のライスパラメータ導出方法と第2のライスパラメータ導出方法のいずれかを使用して係数レベルを復号することの一部として、エントロピー復号ユニット150は、係数レベルと関連付けられるシンタックス要素(たとえば、coeff_abs_level_remainingシンタックス要素)に対する符号語を復元するために、算術復号を実行し得る。この例では、エントロピー復号ユニット150は、K次のライス符号語または指数ゴロム符号語として符号語を解釈することができ、Kは第1のライスパラメータ導出方法または第2のライスパラメータ導出方法を使用して決定される。さらに、この例では、エントロピー復号ユニット150は、符号化されていない数へと変換し戻すことによって、ライス符号語または指数ゴロム符号語を非二値化することができる。
【0201】
シンタックス要素をビットストリームから取得することに加えて、ビデオデコーダ30は、区分されていないCUに対して再構築動作を実行し得る。CUに対して再構築動作を実行するために、ビデオデコーダ30は、CUの各TUに対して再構築動作を実行し得る。CUのTUごとに再構築動作を実行することによって、ビデオデコーダ30は、CUの残差ブロックを再構築し得る。
【0202】
CUのTUに対して再構成動作を実行することの一部として、逆量子化ユニット154は、TUと関連付けられる係数ブロックを逆量子化(inverse quantize)、すなわち、逆量子化(de-quantize)し得る。逆量子化ユニット154は、逆量子化ユニット154が適用するべき量子化の程度と、同様に逆量子化の程度とを決定するために、TUのCUと関連付けられるQP値を使用し得る。すなわち、圧縮比、すなわち、元のシーケンスおよび圧縮されたシーケンスを表すために使用されるビット数の比が、変換係数を量子化するときに使用されるQPの値を調整することによって制御され得る。圧縮比はまた、採用されるエントロピーコーディングの方法に依存し得る。
【0203】
逆量子化ユニット154が係数ブロックを逆量子化した後、逆変換処理ユニット156は、TUと関連付けられた残差ブロックを生成するために、1つまたは複数の逆変換を係数ブロックに適用し得る。たとえば、逆変換処理ユニット156は、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT)、逆回転変換、逆方向変換、または別の逆変換を係数ブロックに適用し得る。
【0204】
PUがイントラ予測を使用して符号化されている場合、イントラ予測処理ユニット166は、イントラ予測を実行して、PUの予測ブロックを生成し得る。イントラ予測処理ユニット166は、イントラ予測モードを使用して、空間的に隣接するブロックのサンプルに基づいて、PUの予測ブロックを生成し得る。イントラ予測処理ユニット166は、ビットストリームから取得された1つまたは複数のシンタックス要素に基づいて、PUのイントラ予測モードを決定し得る。
【0205】
PUがインター予測を使用して符号化される場合、エントロピー復号ユニット150は、PUの動き情報を決定し得る。動き補償ユニット164は、PUの動き情報に基づいて、1つまたは複数の参照ブロックを決定し得る。動き補償ユニット164は、1つまたは複数の参照ブロックに基づいて、PUの予測ブロック(たとえば、予測ルーマブロック、予測Cbブロック、および予測Crブロック)を生成し得る。
【0206】
予測処理ユニット152は、ビットストリームから抽出されたシンタックス要素に基づいて、第1の参照ピクチャリスト(RefPicList0)および第2の参照ピクチャリスト(RefPicList1)を構築し得る。さらに、PUがインター予測を使用して符号化される場合、エントロピー復号ユニット150は、PUの動き情報を抽出し得る。動き補償ユニット164は、PUの動き情報に基づいて、PUに対する1つまたは複数の参照領域を決定し得る。動き補償ユニット164は、PUの1つまたは複数の参照ブロックにおけるサンプルブロックに基づいて、PUの予測ルーマブロック、予測Cbブロック、および予測Crブロックを生成し得る。
【0207】
再構築ユニット158は、CUのTUのための変換ブロック(たとえば、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロック)、ならびにCUのPUの予測ブロック(たとえば、ルーマブロック、Cbブロック、およびCrブロック)、すなわちイントラ予測データまたはインター予測データのいずれかを適宜使用して、CUのコーディングブロック(たとえば、ルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック)を再構築し得る。たとえば、再構築ユニット158は、予測ブロック(たとえば、ルーマ予測ブロック、Cb予測ブロック、およびCr予測ブロック)の対応するサンプルに、変換ブロック(たとえば、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロック)のサンプルを加算して、CUのコーディングブロック(たとえば、ルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック)を再構築し得る。
【0208】
フィルタユニット160は、デブロッキング動作を実行して、CUのコーディングブロックと関連付けられるブロッキングアーティファクトを低減し得る。ビデオデコーダ30は、CUのコーディングブロックを復号ピクチャバッファ162に記憶し得る。復号ピクチャバッファ162は、その後の動き補償、イントラ予測、および
図1のディスプレイデバイス32などのディスプレイデバイス上での提示のために、参照ピクチャを提供し得る。たとえば、ビデオデコーダ30は、復号ピクチャバッファ162中のブロックに基づいて、他のCUのPUのためにイントラ予測動作またはインター予測動作を実行し得る。
【0209】
図7は、本開示の技法による、ビデオデータを符号化するための例示的な動作を示すフローチャートである。
図7は、本開示の他のフローチャートのように、例として与えられる。他の例は、より多数の、少数の、または異なるアクションを含むことがあり、または、アクションは異なる順序で実行されることがある。
【0210】
図7の例では、ビデオエンコーダ20は、ビデオデータのピクチャのCUの残差ブロックを生成する(200)。残差ブロックの中の各サンプルは、CUのPUの予測ブロックの中のサンプルとCUのコーディングブロックの中の対応するサンプルとの差分を示し得る。さらに、ビデオエンコーダ20は、CUの残差ブロックを1つまたは複数の変換ブロックに分解し得る(202)。CUのTUは、1つまたは複数の変換ブロックのうちのある変換ブロックを備える。いくつかの例では、ビデオエンコーダ20は、四分木区分を使用して、CUの残差ブロックを1つまたは複数の変換ブロックに分解し得る。さらに、いくつかの例では、ビデオエンコーダ20は、1つまたは複数の変換をTUの変換ブロックに適用して、TUの係数レベルを備えるTUの係数ブロックを生成する(204)。たとえば、ビデオエンコーダ20は、離散コサイン変換(DCT)を変換ブロックに適用し得る。他の例では、ビデオエンコーダ20は変換の適用をスキップする。したがって、TUの係数レベルは残差値であり得る。
【0211】
加えて、ビデオエンコーダ20は、TUの係数レベルを符号化するために、第1のライスパラメータ導出方法および第2のライスパラメータ導出方法を使用し得る(206)。この例では、第1のライスパラメータ導出方法は統計ベースの導出方法であり、第2のライスパラメータ導出方法はテンプレートベースの導出方法である。
【0212】
図8は、本開示の技法による、ビデオデータを復号するための例示的な動作を示すフローチャートである。
図8の例では、ビデオデコーダ30は、ピクチャの現在のCUの単一のTUの係数レベルを復号するために、第1のライスパラメータ導出方法および第2のライスパラメータ導出方法を使用する(250)。この例では、第1のライスパラメータ導出方法は統計ベースの導出方法であり、第2のライスパラメータ導出方法はテンプレートベースの導出方法である。さらに、この例では、ビデオデコーダ30は、現在のCUの1つまたは複数の予測ユニットのサンプルをTUの変換ブロックの対応するサンプルに加算することによって、現在のCUのコーディングブロックを再構築し得る(252)。たとえば、ビデオデコーダ30は、イントラ予測またはインター予測を使用して、現在のCUの1つまたは複数のPUの予測ブロックを決定し得る。加えて、ビデオデコーダ30は、現在のCUのTUの係数レベルに逆変換を適用して、現在のCUのTUの変換ブロックのサンプルを決定し得る。いくつかの例では、ビデオデコーダ30は、逆変換を適用する前に、変換ブロックのサンプルを逆量子化し得る。
【0213】
図9は、本開示の技法による、ビデオデータを復号するための例示的な動作を示すフローチャートである。
図9の例では、ビデオデコーダ30は、ピクチャの現在のCUの単一のTUの係数レベルを復号するために、第1のライスパラメータ導出方法および第2のライスパラメータ導出方法を使用し得る(300)。この例では、第1のライスパラメータ導出方法は統計ベースの導出方法であり、第2のライスパラメータ導出方法はテンプレートベースの導出方法である。さらに、ビデオデコーダ30は、TUの係数レベルを逆量子化し得る(302)。加えて、ビデオデコーダ30は、TUの係数レベルに逆変換を適用して、TUの変換ブロックを再構築し得る(304)。ビデオデコーダ30は、現在のCUの1つまたは複数の予測ユニットのサンプルをTUの変換ブロックの対応するサンプルに加算することによって、現在のCUのコーディングブロックを再構築し得る(306)。たとえば、ビデオデコーダ30は、イントラ予測またはインター予測を使用して、現在のCUの1つまたは複数のPUの予測ブロックを決定し得る。加えて、ビデオデコーダ30は、現在のCUのTUの係数レベルに逆変換を適用して、現在のCUのTUの変換ブロックのサンプルを決定し得る。いくつかの例では、ビデオデコーダ30は、逆変換を適用する前に、変換ブロックのサンプルを逆量子化し得る。
【0214】
図10は、本開示の技法による、ビデオデータをコーディングするための例示的な動作を示すフローチャートである。
図10の動作は、
図7〜
図9の例示的な動作の一部として使用され得る。
【0215】
図10の例では、ビデオコーダは、一連のシンタックス要素を取得し(たとえば、ビデオコーダがビデオデコーダ30などのビデオデコーダである場合)、または生成する(たとえば、ビデオコーダがビデオエンコーダ20などのビデオエンコーダである場合)(350)。一連のシンタックス要素の各々のそれぞれのシンタックス要素は、TUのそれぞれの係数レベルの絶対値に対するそれぞれの剰余値を示す。一般に、シンタックス要素を生成することは、シンタックス要素の値を決定することと、シンタックス要素の値をコンピュータ可読記憶媒体に記憶することとを備え得る。さらに、
図10の例では、(たとえば、
図7のアクション204、
図8のアクション250、および
図9のアクション300において)単一のTUの係数レベルを復号するために第1のライスパラメータ導出方法および第2のライスパラメータ導出方法を使用することの一部として、ビデオコーダは、復号または構文解析の順序でTUの中で最初に現れるシンタックス要素に第1のライスパラメータ導出方法を適用することができ、シンタックス要素は一連のシンタックス要素の中にある(352)。一般に、構文解析の順序は、コーディングされたバイナリビットストリームからプロセスがシンタックス値を設定する順序である。
【0216】
加えて、(たとえば、
図7のアクション204、
図8のアクション250、および
図9のアクション300において)単一のTUの係数レベルを復号するために第1のライスパラメータ導出方法および第2のライスパラメータ導出方法を使用することの一部として、ビデオコーダは、一連のシンタックス要素の各々の他のシンタックス要素に第2のライスパラメータ導出方法を適用することができる(354)。いくつかの例では、一連のシンタックス要素の各々の他のシンタックス要素に第2のライスパラメータ導出方法を適用することの一部として、ビデオコーダは、TUの現在の係数の係数レベルをコーディングするためのライスパラメータ値を決定するために、ある関数を使用することができる(356)。この関数の入力は、記録される値および現在の導出されたライスパラメータ値を含み得る。記録される値は、現在の係数の前の係数を復号するために使用されたライスパラメータ値に基づき得る。さらに、現在の導出されるライスパラメータ値は、テンプレートベースの導出方法を使用して導出され得る。関数は最大関数であり得る。
【0217】
図11は、本開示の技法による、統計ベースの導出方法が使用される例示的な動作を示すフローチャートである。ビデオエンコーダ20またはビデオデコーダ30などのビデオコーダは、
図7〜
図9のいずれかの動作を実行することの一部として、
図11の動作を実行し得る。
図11の例では、現在のピクチャは複数の4×4のサブブロックを備え、ビデオコーダは、現在のピクチャのTUの係数レベルの絶対値に対するそれぞれの剰余値を示すシンタックス要素を取得し(たとえば、ビデオコーダがビデオデコーダ30などのビデオデコーダである場合)、または生成する(たとえば、ビデオコーダがビデオエンコーダ20などのビデオエンコーダである場合)ように構成される(400)。加えて、本開示の他の箇所で論じられるように、ビデオコーダは、TUの係数レベルを復号するために、第1のライスパラメータ導出方法および第2のライスパラメータ導出方法を使用し得る。この例では、第1のライスパラメータ導出方法は統計ベースの導出方法であり、第2のライスパラメータ導出方法はテンプレートベースの導出方法である。
【0218】
第1のライスパラメータ導出方法を使用することの一部として(402)、ビデオコーダは、複数のサブブロックのそれぞれのサブブロックに対して、それぞれのサブブロックが変換スキップブロックであるかどうかおよびそれぞれのサブブロックがルーマ成分のためのものであるかどうかに基づいてそれぞれのサブブロックがカテゴライズされるように、現在のピクチャの複数のサブブロックを複数のカテゴリへと分割し得る(404)。
【0219】
加えて、複数のカテゴリの各々のそれぞれのカテゴリに対して、ビデオコーダは、それぞれのカテゴリに対するそれぞれの統計値(たとえば、statCoeff)を維持し得る(406)。いくつかの例では、それぞれのカテゴリに対するそれぞれの統計値を維持することの一部として、ビデオコーダは、複数のカテゴリの各々のそれぞれのカテゴリに対して、かつ、それぞれのカテゴリに属するピクチャの各々のそれぞれのサブブロックに対して、それぞれのサブブロックに対して最初にコーディングされるレベル剰余シンタックス要素を使用して、それぞれのサブブロックに対して多くて1回、それぞれのカテゴリに対するそれぞれの統計値を更新し得る。それぞれのカテゴリに対するそれぞれの統計値を更新することの一部として、ビデオコーダは、(absCoeffLevel >=3*(1<<(statCoeff /4)))である場合はそれぞれのカテゴリに対するそれぞれの統計値をインクリメントし、((2* absCoeffLevel)<(1<<( statCoeff/4)))である場合はそれぞれのカテゴリに対するそれぞれの統計値をデクリメントすることができ、absCoeffLevelはそれぞれのサブブロックの絶対的な係数レベルであり、statCoeffはそれぞれのカテゴリに対するそれぞれの統計値である。
【0220】
複数のサブブロックの各々のそれぞれのサブブロックに対して、ビデオコーダは、それぞれのサブブロックが属するカテゴリに対するそれぞれの統計値を使用して、それぞれのライスパラメータを初期化し得る(408)。ビデオコーダは、K次のライス符号を使用してシンタックス要素を二値化することができ、Kは決定されたライスパラメータである。いくつかの例では、それぞれのサブブロックが属するカテゴリに対するそれぞれの統計値を使用してそれぞれのサブブロックに対するそれぞれのライスパラメータを初期化することの一部として、ビデオコーダは、複数のサブブロックの各々のそれぞれのサブブロックに対して、最大のライスパラメータと、それぞれのサブブロックが属するカテゴリに対するそれぞれの統計値を4で割ったものとのうちの小さい方として、それぞれのサブブロックに対するそれぞれのライスパラメータを決定し得る。
【0221】
図12は、本開示の技法による、テンプレートベースの導出方法が使用される例示的な動作を示すフローチャートである。ビデオエンコーダ20またはビデオデコーダ30などのビデオコーダは、
図7〜
図9のいずれかの動作を実行することの一部として、
図12の動作を実行し得る。
【0222】
図12の例では、現在のピクチャは複数の4×4のサブブロックを備え、ローカルテンプレートは現在のピクチャのCUのTUの現在のサンプルの近隣をカバーし、現在のサンプルは現在の走査場所にある。
図12の例では、ビデオエンコーダ20またはビデオデコーダ30などのビデオコーダは、現在のサンプルに対するそれぞれの係数レベルの絶対値に対するそれぞれの剰余値を示すシンタックス要素(たとえば、coeff_abs_level_remaining)を取得し(たとえば、ビデオコーダがビデオデコーダ30などのビデオデコーダである場合)、または生成する(たとえば、ビデオコーダがビデオエンコーダ20などのビデオエンコーダである場合)ことができる(450)。
【0223】
本開示の他の箇所で論じられるように、ビデオコーダは、TUの係数レベルを復号するために、第1のライスパラメータ導出方法および第2のライスパラメータ導出方法を使用し得る。この例では、第1のライスパラメータ導出方法は統計ベースの導出方法であり、第2のライスパラメータ導出方法はテンプレートベースの導出方法である。第2のライスパラメータ導出方法を使用することの一部として(452)、ビデオコーダは、ローカルテンプレートによりカバーされる各々のそれぞれの近隣に対して、それぞれの近隣に対するそれぞれの値(たとえば、δ
j(x))を決定し得る(454)。この例では、それぞれの近隣に対するそれぞれの値は、近隣の絶対値が0より大きい場合は近隣の絶対値から1を引いたものに等しく、近隣が0に等しい場合には0に等しい。加えて、ビデオコーダは、近隣に対する値の合計に等しいものとして合計値(たとえば、sum_absolute_levelMinus1)を決定し得る(456)。さらに、
図12の例では、ビデオコーダは、ライスパラメータが、合計値が第1の区間に入る場合には0に等しく、合計値が第2の区間に入る場合には1に等しく、合計値が第3の区間に入る場合には2に等しく、合計値が第4の区間に入る場合には3に等しいと、決定し得る(458)。シンタックス要素はK次のライス符号を使用して二値化され、Kは決定されたライスパラメータに等しい。
【0224】
図13は、本開示の技法による、汎用関数に基づいてライスパラメータを決定するための例示的な動作を示すフローチャートである。
図13の動作は、本開示の他の例とは別々に、またはそれと連携して使用され得る。
図13の動作は、本開示の他のフローチャートにおいて説明されるテンプレートベースのライスパラメータ導出プロセスを実行することの1つの方法であり得る。
【0225】
図13の例では、現在のピクチャは複数の4×4のサブブロックを備え、ローカルテンプレートは現在のピクチャのCUのTUの現在のサンプルの近隣をカバーし、現在のサンプルは現在の走査場所にある。テンプレートベースのライスパラメータ導出方法を使用することの一部として、ビデオコーダは、ローカルテンプレートによりカバーされる各々のそれぞれの近隣に対して、それぞれの近隣に対するそれぞれの値を決定し得る(500)。それぞれの近隣に対するそれぞれの値は、近隣の絶対値が0より大きい場合は近隣の絶対値から1を引いたものに等しく、近隣が0に等しい場合には0に等しい。さらに、ビデオコーダは、近隣に対する値の合計に等しいものとして合計値を決定し得る(502)。加えて、ビデオコーダは値Kを決定し得る(504)。TUの係数レベルは、K次のライス符号を使用して二値化される。たとえば、ビデオエンコーダ20は係数レベルを二値化することができ、ビデオデコーダ30は係数レベルを非二値化することができる。
【0226】
この例では、Kの定義は、以下からなる群から選択され得る。
・Kは、(1 << ( K + 3 ) ) > (sum_absolute_levelMinus1 + M)を満たす最小の整数として定義され、Mは整数であり、sum_absolute_levelMinus1は合計値である。
・Kは、(1 << ( K + 3 ) ) > (sum_absolute_levelMinus1 + M)を満たす最小の整数として定義され、Mは整数であり、sum_absolute_levelMinus1は合計値である。
・Kは、(1 << ( K + 3 ) ) ≧ (sum_absolute_levelMinus1 + M)を満たす最小の整数として定義され、Mは整数であり、sum_absolute_levelMinus1は合計値である。
【0227】
図14は、本開示の技法による、一連のシンタックス要素を二値化または非二値化するための例示的な動作を示すフローチャートである。
図14の動作は、本開示の他の例とは別々に、またはそれと連携して使用され得る。
図14の例では、ビデオコーダ(たとえば、ビデオエンコーダ20またはビデオデコーダ30)は、一連のシンタックス要素(たとえば、abs_coeff_level_remainingシンタックス要素)を生成または取得する(550)。
図14の例では、一連のシンタックス要素の各々のそれぞれのシンタックス要素は、TUのそれぞれの係数レベルの絶対値に対するそれぞれの剰余値を示し得る。
【0228】
さらに、
図14の例では、ビデオコーダは、一連のシンタックス要素の各々のそれぞれのシンタックス要素のためにアクション552〜560を実行し得る(551)。
図14の例では、ビデオコーダは、第1のライスパラメータ導出方法(たとえば、統計ベースのライスパラメータ導出方法)または第2のライスパラメータ導出方法(たとえば、テンプレートベースのライスパラメータ導出方法)を使用して、それぞれのシンタックス要素に対するライスパラメータKを導出し得る(552)。さらに、ビデオコーダは、それぞれのシンタックス要素に対する切替点を(M<<K)に等しく設定し得る(554)。MはKに依存する。たとえば、ビデオコーダは、0、1、および2にそれぞれ等しいKの値に対して、6、5、および6に等しくMを設定することができ、すべての他のKの値に対してMを3に設定することができる。
【0229】
さらに、
図14の例では、ビデオコーダは、それぞれのシンタックス要素が切替点より小さいかどうかを決定し得る(556)。それぞれのシンタックス要素が切替点より小さいと決定したことに応答して(556の「Yes」の分岐)、ビデオコーダは、K次のライス符号を使用してそれぞれのシンタックス要素を二値化または非二値化し得る(558)。そうではなく、それぞれのシンタックス要素が切替点より小さくない場合(556の「No」の分岐)、ビデオコーダは、K次の指数ゴロム符号を使用してそれぞれのシンタックス要素を二値化または非二値化し得る(560)。
【0230】
本明細書において説明される技法のすべてが、個別に、または組み合わせて使用され得ることを理解されたい。例に応じて、本明細書で説明される技法のいずれかのいくつかの行為またはイベントは異なる順序で実行されてもよく、一緒に追加され、統合され、または省略されてもよい(たとえば、説明される行為またはイベントのすべてが技法の実施のために必要とは限らない)ことを認識されたい。さらに、いくつかの例では、行為またはイベントは、順次的にではなく、たとえばマルチスレッド処理、割り込み処理またはマルチプロセッサを通じて同時に実行されることがある。加えて、明快のために本開示のいくつかの態様は単一のモジュールまたはユニットによって実行されるものとして説明されるが、本開示の技法がビデオコーダと関連付けられるユニットまたはモジュールの組合せによって実行され得ることを理解されたい。
【0231】
本開示の特定の態様は、説明を目的にHEVC規格に関して説明されている。しかしながら、本開示で説明される技法は、まだ開発されていない他の標準的なまたは独自のビデオコーディングプロセスを含む、他のビデオコーディングプロセスにとって有用であり得る。
【0232】
上で説明された技法は、ビデオエンコーダ20(
図1および
図5)および/またはビデオデコーダ30(
図1および
図6)によって実行されることがあり、それらの両方が一般にビデオコーダと呼ばれることがある。同様に、ビデオコーディングは、適用可能なとき、ビデオ符号化またはビデオ復号を指すことがある。さらに、本開示はcoeff_abs_level_remainingシンタックス要素に言及したが、本開示の技法は、coeff_abs_level_remainingシンタックス要素と同じセマンティクスを有する異なる名称のシンタックス要素に、または変換ユニットの他のシンタックス要素に適用可能であり得る。
【0233】
技法の様々な態様の特定の組合せが上で説明されたが、これらの組合せは単に本開示において説明される技法の例を示すために与えられている。したがって、本開示の技法は、これらの例示的な組合せに限定されるべきではなく、本開示において説明される技法の様々な態様の考えられる組合せを包含し得る。
【0234】
1つまたは複数の例では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、1つまたは複数の命令またはコードとして、コンピュータ可読媒体上に記憶されるか、またはコンピュータ可読媒体を介して送信されてよく、ハードウェアベースの処理ユニットによって実行されてよい。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に相当するコンピュータ可読記憶媒体、または、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む通信媒体を含み得る。このようにして、コンピュータ可読媒体は、一般に、(1)非一時的である有形コンピュータ可読記憶媒体、または(2)信号もしくは搬送波などの通信媒体に相当し得る。データ記憶媒体は、本開示で説明される技法の実施のための命令、コードおよび/またはデータ構造を取り出すために1つまたは複数のコンピュータまたは1つまたは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。コンピュータプログラム製品はコンピュータ可読媒体を含み得る。
【0235】
限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気記憶デバイス、フラッシュメモリ、または、命令もしくはデータ構造の形態の所望のプログラムコードを記憶するために使用され得るとともにコンピュータによってアクセスされ得る任意の他の媒体を備えることができる。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。たとえば、命令が、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用してウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は媒体の定義に含まれる。しかしながら、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時的媒体を含まず、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用されるディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)、およびBlu-ray(登録商標)ディスク(disc)を含み、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、レーザーを用いてデータを光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲に含まれるべきである。
【0236】
命令は、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、または、他の等価な集積論理回路構成もしくは個別論理回路構成などの、1つまたは複数のプロセッサによって実行され得る。したがって、本明細書で使用される「プロセッサ」という用語は、上記の構造、または本明細書で説明された技法の実施に適した任意の他の構造のいずれかを指すことがある。加えて、いくつかの態様では、本明細書で説明された機能は、符号化および復号のために構成された専用のハードウェアおよび/もしくはソフトウェアモジュール内で提供されることがあり、または複合コーデックに組み込まれることがある。また、技法は、1つまたは複数の回路または論理要素において完全に実施され得る。
【0237】
本開示の技法は、ワイヤレスハンドセット、集積回路(IC)、またはICのセット(たとえば、チップセット)を含む、様々なデバイスまたは装置において実施され得る。本開示では、開示される技法を実行するように構成されたデバイスの機能的側面を強調するために、様々な構成要素、モジュール、またはユニットが説明されているが、それらは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上で説明されたように、様々なユニットは、コーデックハードウェアユニットにおいて結合されることがあり、または適切なソフトウェアおよび/もしくはファームウェアとともに、上で説明されたような1つまたは複数のプロセッサを含む相互動作可能なハードウェアユニットの集合によって提供されることがある。
【0238】
様々な例が説明された。これらおよび他の例は、以下の特許請求の範囲内に入る。