(57)【要約】係数の変換ブロックの最後の非ゼロ係数の位置を符号化することは、最後の非ゼロ係数の位置を決定することを含み、位置は列値および行値を含む。変換ブロックの係数列および係数行にある非ゼロ係数が符号化される。非ゼロ係数が係数列において符号化されるべき最初の非ゼロ係数である場合、係数列が最後の非ゼロ係数の列値と等しいかどうかが符号化され、それ以外の場合、符号化はスキップされる。非ゼロ係数が係数行において符号化されるべき最初の非ゼロ係数である場合、係数行が最後の非ゼロ係数の行値と等しいかどうかが符号化され、それ以外の場合、符号化はスキップされる。
2020522181.tif 000002
【特許請求の範囲】
【請求項１】
装置であって、
メモリと、
前記メモリに格納された命令を実行して、
符号化されたビットストリームから、係数の変換ブロックの第１の係数が非ゼロであるかどうかを復号化し、
前記第１の係数が非ゼロであるとの決定に応答して、かつ前記第１の係数が第１の次元の第１の値に関して復号化されるべき第１の非ゼロ係数であるとの決定に応答して、
前記符号化されたビットストリームから、前記第１の次元の前記第１の値がブロック終了係数を示すかどうかを示す第１のシンタックス要素を復号化し、
前記ブロック終了係数を示す第１のシンタックス要素に応答して、前記第１の値を使用して前記変換ブロックの最後の非ゼロ係数の位置を決定するように構成されたプロセッサとを備える装置。
【請求項２】
前記命令は、
前記第１の係数が第２の次元の第２の値に関して復号化される第１の非ゼロ係数であるとの決定に応答して、
前記符号化されたビットストリームから、前記第２の次元の前記第２の値がブロック終了係数を示すかどうかを示す第２のシンタックス要素を復号化し、
前記ブロック終了係数を示す前記第２のシンタックス要素に応答して、前記第２の値を使用して、前記変換ブロックの最後の非ゼロ係数の位置を決定するための命令をさらに含む、請求項１に記載の装置。
【請求項３】
前記第１の次元および前記第２の次元は、前記変換ブロックの列および行を含む座標系の次元である、請求項２に記載の装置。
【請求項４】
前記第１の次元および前記第２の次元は、極座標系における次元であり、
前記極座標系は、変換ブロックのＤＣ係数を中心とし、前記第１の次元は、前記変換ブロックを符号化するために使用されるスキャン順序の反対角線に対応し、前記第２の次元は前記第１の次元の反対角線上の位置に対応する、請求項２に記載の装置。
【請求項５】
前記命令は、
前記第１の次元の反対角線が少なくとも１つの変換係数を含むと決定された場合において、前記反対角線に関して非ゼロ係数が復号化されていないことを条件に、前記反対角線の最後の位置における変換係数が非ゼロ係数であると推測するための命令をさらに含む、請求項４に記載の装置。
【請求項６】
前記第１の次元および前記第２の次元は、係数グループ座標系における次元であり、前記係数グループ座標系は、スキャン順序のスキャン位置をスキャン位置のグループに分割し、前記第１の次元は、前記スキャン位置のグループに対応し、前記第２の次元は、グループ内の位置オフセットに対応する、請求項２に記載の装置。
【請求項７】
前記スキャン位置のグループは、等しい数のスキャン位置を含む、請求項６に記載の装置。
【請求項８】
等しい数のスキャン位置が１６である、請求項７に記載の装置。
【請求項９】
前記第１の次元および前記第２の次元はデカルトグループ化座標系における次元であり、前記第１の次元は、前記変換ブロックの列のグループに対応し、前記第２の次元は、前記変換ブロックの行のグループに対応する、請求項２に記載の装置。
【請求項１０】
前記係数の変換ブロックは、イントラ予測を使用して予測された残差ブロックの変換ブロックである、請求項１乃至９のいずれか１項に記載の装置。
【請求項１１】
前記係数の変換ブロックは、輝度色成分のブロックの変換係数である、請求項１乃至１０のいずれか１項に記載の装置。
【請求項１２】
方法であって、
係数の変換ブロックの係数を、第１の次元および第２の次元を有する係数グループ座標系にマッピングするステップと、前記第１の次元は、変換係数のグループに対応し、前記第２の次元は変換係数のグループの一つのグループ内のオフセット位置に対応しており、
符号化されたビットストリームから、係数グループを決定するステップと、前記係数グループは、係数の変換ブロックの最後の非ゼロ係数を含んでおり、
前記符号化されたビットストリームから、前記係数グループ内の最後の非ゼロ係数のオフセット位置を、最後の非ゼロ係数について決定するステップと、
前記符号化されたビットストリームから、前記係数グループおよび前記オフセット位置に対応する係数までの係数を復号化するステップとを含む方法。
【請求項１３】
前記オフセット位置を決定することは、
前記符号化されたビットストリームから、前記オフセット位置を示すシンタックス要素を復号化することを含む、請求項１２に記載の方法。
【請求項１４】
前記オフセット位置を決定することは、
復号化されている現在の係数が前記係数グループ内の最後のオフセット位置にあるとの決定に応答して、最後の非ゼロ係数の前記オフセット位置が最後のオフセット位置であると推測することを含む、請求項１２に記載の方法。
【請求項１５】
前記変換係数のグループの第１の係数グループおよび前記変換係数のグループの第２の係数グループは、不等数の変換係数を含む、請求項１４に記載の方法。
【請求項１６】
前記係数グループおよび前記オフセット位置に対応する係数までの係数を復号化することは、
復号化されている現在の係数が前記係数グループ内の最後のオフセット位置にあるとの決定に応答して、現在の係数が非ゼロ係数であると推測することを含む、請求項１２乃至１５のいずれか１項に記載の方法。
【請求項１７】
方法であって、
係数の変換ブロックの最後の非ゼロ係数の位置を決定するステップと、前記位置は、列値および行値を含んでおり、
前記係数の変換ブロックの１つまたは複数の非ゼロ係数を符号化するステップとを含み、各非ゼロ係数は、前記変換ブロックの個々の係数列および個々の係数行に存在しており、方法は、１つまたは複数の非ゼロ係数の各々に関して、
非ゼロ係数が係数列で符号化されるべき最初の非ゼロ係数であるとの決定に応答して、係数列が最後の非ゼロ係数の列値と等しいかどうかを符号化するステップ、または
非ゼロ係数が係数列で符号化されるべき最初の非ゼロ係数ではないとの決定に応答して、係数列が最後の非ゼロ係数の列値と等しいかどうかを符号化することをスキップするステップのうちの
いずれかのステップ（ｉ）と、
非ゼロ係数が係数行で符号化されるべき最初の非ゼロ係数であるとの決定に応答して、係数行が最後の非ゼロ係数の行値に等しいかどうかを符号化するステップ、または
非ゼロ係数が係数行で符号化されるべき最初の非ゼロ係数ではないとの決定に応答して、係数行が最後の非ゼロ係数の行値と等しいかどうかを符号化することをスキップするステップのうちの
いずれかのステップ（ｉｉ）とをさらに含む方法。
【請求項１８】
前記ステップ（ｉ）および（ｉｉ）は、少なくとも
非ゼロ係数の係数列が最後の非ゼロ係数の列値に等しいことが符号化され、
非ゼロ係数の係数行が最後の非ゼロ係数の行値に等しいことが符号化されるまで実行される、請求項１７に記載の方法。
【請求項１９】
前記ステップ（ｉ）および（ｉｉ）が、スキャン順序に関して１つまたは複数の非ゼロ係数の各々に対して実行される、請求項１７または１８に記載の方法。
【請求項２０】
前記係数の変換ブロックは、輝度色成分のブロックの変換ブロックである、請求項１７乃至１９のいずれか１項に記載の方法。
【請求項２１】
方法であって、
係数の変換ブロックの最後の非ゼロ係数の位置を決定するステップと、前記位置は、列値および行値を含んでおり、
スキャン順序に関して前記係数の変換ブロックの１つまたは複数の非ゼロ係数を符号化するステップと、１つまたは複数の非ゼロ係数の各々は、前記変換ブロックの個々の係数列および個々の係数行に存在しており、
１つまたは複数の非ゼロ係数のうちの一つの非ゼロ係数が、最後の非ゼロ係数の列値に等しい列において符号化されるべき最初の非ゼロ係数であるとの決定に応答して、その非ゼロ係数の係数列が最後の非ゼロ係数の列値と等しいことを符号化するステップと、
１つまたは複数の非ゼロ係数のうちの一つの非ゼロ係数が、最後の非ゼロ係数の行値に等しい行において符号化されるべき最初の非ゼロ係数であるとの決定に応答して、その非ゼロ係数の係数行が最後の非ゼロ係数の列値と等しいことを符号化するステップとを含む方法。
【発明の詳細な説明】
【背景技術】
【０００１】
デジタルビデオストリームは、一連のフレームまたは静止画像を使用してビデオを表現し得る。デジタルビデオは、例えば、ビデオ会議、高解像度ビデオエンターテイメント、ビデオ広告、またはユーザ生成ビデオの共有など、様々な用途に使用することができる。デジタルビデオストリームは、大量のデータを含み、かつビデオデータの処理、送信、または記憶のために、コンピューティングデバイスの大量のコンピューティングリソースまたは通信リソースを消費する。ビデオストリームのデータ量を低減するために、圧縮やその他の符号化技術を含む、様々な手法が提案されている。
【０００２】
動き推定および動き補償に基づく符号化は、フレームまたは画像を、参照フレームの１つまたは複数の予測ブロックに基づいて予測されるブロックに分割することにより実行され得る。ブロックと予測ブロックとの間の差分（即ち、残余誤差）は、ビットストリームで圧縮および符号化される。復号化器は、差分と参照フレームを使用して、フレームまたは画像を再構築する。
【発明の概要】
【０００３】
一態様は、符号化ビットストリームにおいて、係数の変換ブロックの最後の非ゼロ係数の位置を符号化する方法であって、最後の非ゼロ係数の位置を決定するステップと、位置は、列値および行値を含み、係数の変換ブロックの非ゼロ係数を符号化するステップとを含む方法である。非ゼロ係数は、変換ブロックの係数列および係数行において存在する。方法は、非ゼロ係数が係数列において符号化されるべき最初の非ゼロ係数であるとの決定に応答して、係数列が最後の非ゼロ係数の列値と等しいかどうかを符号化するステップと、非ゼロ係数が係数列において符号化されるべき最初の非ゼロ係数ではないとの決定に応答して、係数列が最後の非ゼロ係数の列値と等しいかどうかを符号化することをスキップするステップとを含む。方法は、非ゼロ係数が係数行において符号化されるべき最初の非ゼロ係数であるとの決定に応答して、係数行が最後の非ゼロ係数の行値と等しいかどうかを符号化するステップと、非ゼロ係数が係数行において符号化されるべき最初の非ゼロ係数ではないとの決定に応答して、係数行が最後の非ゼロ係数の行値と等しいかどうかを符号化することをスキップするステップとを含む。
【０００４】
別の態様は、符号化ビットストリームにおいて、係数の変換ブロックの最後の非ゼロ係数の位置を符号化する方法である。方法は、最後の非ゼロ係数の位置を決定するステップと、位置は、列値および行値を含んでおり、スキャン順序に関して係数の変換ブロックの１つまたは複数の非ゼロ係数を符号化するステップと、１つまたは複数の非ゼロ係数の各々は、変換ブロックの個々の係数列および個々の係数行に存在しており、１つまたは複数の非ゼロ係数のうちの一つの非ゼロ係数が、最後の非ゼロ係数の列値に等しい列において符号化されるべき最初の非ゼロ係数であるとの決定に応答して、その非ゼロ係数の係数列が最後の非ゼロ係数の列値に等しいことを符号化するステップと、１つまたは複数の非ゼロ係数のうちの一つの非ゼロ係数が、最後の非ゼロ係数の行値に等しい行において符号化されるべき最初の非ゼロ係数であるとの決定に応答して、その非ゼロ係数の係数行が、最後の非ゼロ係数の列値と等しいことを符号化するステップとを含む。
【０００５】
別の態様は、符号化ビットストリームにおいて、係数の変換ブロックの最後の非ゼロ係数の位置を符号化するための装置である。装置は、メモリと、メモリに格納された命令を実行して、最後の非ゼロ係数の位置を決定し、位置は、列値および行値を含んでおり、係数の変換ブロックの１つまたは複数の非ゼロ係数を符号化し、各非ゼロ係数は、変換ブロックの個々の係数列および個々の係数行に存在しており、１つまたは複数の非ゼロ係数の各々に関して、非ゼロ係数が係数列において符号化されるべき最初の非ゼロ係数であるとの決定に応答して、係数列が最後の非ゼロ係数の列値と等しいかどうかを符号化するか、または、非ゼロ係数が係数列において符号化されるべき最初の非ゼロ係数ではないとの決定に応答して、係数列が最後の非ゼロ係数の列値と等しいかどうかの符号化することをスキップすることのうちのいずれかを行い（ｉ）、非ゼロ係数が係数行において符号化されるべき最初の非ゼロ係数であるとの決定に応答して、係数行が最後の非ゼロ係数の行値と等しいかどうかを符号化するか、または、非ゼロ係数が係数行において符号化されるべき最初の非ゼロ係数ではないとの決定に応答して、係数行が最後の非ゼロ係数の行値と等しいかどうかを符号化することをスキップすることのうちのいずれかを行う（ｉｉ）ように構成されたプロセッサとを含む。
【０００６】
別の態様は、メモリおよびプロセッサを含み、変換ブロックの最後の非ゼロ係数の位置を復号化するための装置である。プロセッサは、メモリに格納された命令を実行して、符号化されたビットストリームから、変換ブロックの第１の係数が非ゼロかどうかを復号し、第１の係数が非ゼロであるとの決定に応答して、かつ第１の係数が第１の次元の第１の値に関して復号化されるべき第１の非ゼロ係数であるとの決定に応答して、符号化ビットストリームから、第１の次元の第１の値がブロック係数終了を示すかどうかを示す第１のシンタックス要素を復号化し、ブロック終了係数を示す第１のシンタックス要素に応答して、第１の値を使用して最後の非ゼロ係数の位置を決定するように構成される。
【０００７】
別の態様は、係数の変換ブロックの最後の非ゼロ係数の位置を復号化する方法である。方法は、変換ブロックの係数を、第１の次元および第２の次元を有する係数グループ座標系にマッピングするステップを含み、第１の次元は、変換係数のグループに対応し、第２の次元は、係数のグループの一つのグループ内のオフセット位置に対応している。方法は、符号化ビットストリームから、最後の非ゼロ係数を含む係数グループを決定するステップと、符号化ビットストリームから、係数グループ内の最後の非ゼロ係数のオフセット位置を最後の非ゼロ係数について決定するステップと、符号化されたビットストリームから、係数グループおよびオフセット位置に対応する係数までの係数を復号化するステップとを含む。
【０００８】
本開示のこれらおよび他の態様は、実施形態の以下の詳細な説明、添付の特許請求の範囲および添付の図面においてさらに詳細に記載される。
【図面の簡単な説明】
【０００９】
本明細書の記載は、添付の図面を参照し、いくつかの図面に亘って同様の参照番号が同様の構成を参照している。
【図１】ビデオ符号化および復号化システムの概略図である。
【図２】送信局または受信局を実施することができるコンピューティングデバイスの一例のブロック図である。
【図３】符号化され、続いて復号化されるビデオストリームの図である。
【図４】本開示の実施形態による符号化器のブロック図である。
【図５】本開示の実施形態による復号化器のブロック図である。
【図６】本開示の実施形態による量子化された変換係数を示す図である。
【図７】本開示の実施形態による、変換ブロックをエントロピーコーディングするために使用することができる係数トークンツリーの図である。
【図８】本開示の実施形態による、ＥＯＢ位置をバイナリ化するためのツリーの一例の図である。
【図９】本開示の実施形態による、係数の変換ブロックの最後の非ゼロ係数の位置を符号化するプロセスのフローチャート図である。
【図１０】本開示の実施形態によるスキャン順序およびブロックの一例の図である。
【図１１】本開示の一実施形態による、デカルト座標系を使用して、係数の変換ブロックの最後の非ゼロ係数の位置をコーディングするプロセスのフローチャート図である。
【図１２】本開示の一実施態様による、デカルトグループ化座標系を使用して、係数の変換ブロックの最後の非ゼロ係数の位置をコーディングするプロセスのフローチャート図である。
【図１３】本開示の実施例による、極座標系を使用して、係数の変換ブロックの最後の非ゼロ係数の位置をコーディングするプロセスのフローチャート図である。
【図１４】本開示の実施形態による、係数グループ座標系を使用して、係数の変換ブロックの最後の非ゼロ係数の位置をコーディングするプロセスのフローチャート図である。
【図１５】本開示の実施形態による極座標系の一例を示す図である。
【図１６】本開示の実施形態による係数グループ座標系の一例を示す図である。
【図１７】本開示の実施形態による変換ブロックの最後の非ゼロ係数の位置を復号化するためのプロセスのフローチャート図である。
【図１８】本開示の実施形態による変換ブロックの最後の非ゼロ係数の位置を復号化するための別のプロセスのフローチャート図である。
【発明を実施するための形態】
【００１０】
前述したように、ビデオストリームのコーディングに関連する圧縮方式は、画像を複数のブロックに分割し、１つまたは複数の技術を使用してデジタルビデオ出力ビットストリームを生成して、出力に含まれる情報を制限することを含む。受信した符号化ビットストリームを復号化して、限られた情報からブロックとソース画像を再作成することができる。ビデオストリームまたはその一部（フレームやブロックなど）を符号化することは、ビデオストリームで時間的または空間的な類似性を使用して、コーディング効率を向上させることができる。例えば、ビデオストリームの現在のブロックは、以前にコーディングされたピクセル値と現在のブロック内のピクセル値との間の差（残差）を識別することに基づいて符号化され得る。この方法では、残差と、残差の生成に使用されるパラメータのみを符号化されたビットストリームに追加する必要がある。残差は、不可逆量子化ステップを使用して符号化され得る。
【００１１】
以下でさらに説明するように、残差ブロックはピクセル領域内にある。残差ブロックは、周波数領域に変換されて、変換係数の変換ブロックが得られる。変換係数は量子化され、その結果、量子化された変換係数の量子化された変換ブロックを得ることができる。量子化された係数は、エントロピー符号化され、かつ符号化されたビットストリームに付加される。復号化器は、符号化されたビットストリームを受信し、量子化された変換係数をエントロピー復号化して、元のビデオフレームを再構築することができる。
【００１２】
エントロピーコーディングは、符号化されたビデオビットストリームで発生する値の分布をモデル化する確率モデルに依存する「ロスレス」コーディングに関する手法である。測定または推定された値の分布に基づく確率モデルを使用することにより、エントロピーコーディングは、ビデオデータを表現するために必要なビット数を理論上の最小値に近くまで低減することができる。実際には、ビデオデータを表現するのに必要なビット数における実際の低減は、確率モデルの精度、符号化が実行されるビット数、およびコーディングを実行するために使用される固定小数点演算の計算精度の関数とすることができる。
【００１３】
符号化されたビデオビットストリームでは、ビットの多くは、コンテンツ予測（例えば、インターモード／動きベクトルコーディング、イントラ予測モードコーディングなど）または残差コーディング（例えば、変換係数）の２つのうちの一つに関して使用される。符号化器は、係数コーディングに費やされるビット数／ビット量を減少させる技術を使用することができる。例えば、係数トークンツリー（バイナリトークンツリーとも呼ばれ得る）は、このトークンツリーにおける各ブランチに関する前方適応確率により、値の範囲を指定する。トークンベースの値は、符号化される値から減算されて、残差が形成され、次いで、ブロックは固定確率を用いて符号化される。後方適応性を含むわずかなバリエーションを有する同様のスキームも可能である。適応技術は、ビデオストリームが符号化されるときに、データの特性の変化に適応するように確率モデルを変更することができる。いずれにしても、復号化器には、ビデオビットストリームを復号化するために、エントロピーコーディングされたビデオビットストリームを符号化するために使用された確率モデルが通知される（または利用可能となる）。
【００１４】
量子化された変換ブロックは、ゼロの量子化された変換係数および非ゼロの量子化された変換係数を含むことができる。非ゼロ係数は、本明細書では有意係数（ｓｉｇｎｉｆｉｃａｎｔ  ｃｏｅｆｆｉｃｉｅｎｔｓ）とも呼ばれる。量子化された変換ブロックの符号化および復号化は、スキャン順序に従って変換ブロックの変換係数を符号化および復号化することを含むことができる。量子化された変換ブロックを符号化および復号化することは、変換ブロック内の最後の非ゼロの量子化された変換係数（即ち、最後の有意係数）である有意係数に関する情報を符号化および復号化することを含むことができる。これは、ブロック終了（ＥＯＢ）位置のコーディングとして参照される。どの変換係数が最後の非ゼロ変換係数として指定されるかは、スキャン順序に基づいて決定される。
【００１５】
いくつかのコーディングシステムでは、最後の非ゼロ係数のデカルト座標（即ち、量子化変換ブロック内の列および行）がコーディングされる。これは、本明細書では、ＥＯＢ位置のコーディングに対するデカルト座標手法として参照される。
【００１６】
他のコーディングシステムにおいて、スキャン順序に従って各量子化された変換係数がアクセスされると（即ち、コーディングまたは復号化されるべく）、変換係数が最後の非ゼロ係数であるかどうかに関する情報がコーディングされる。このため、ＥＯＢ位置は、有意係数位置とともにインターリービング方式でコーディングされる。これは、本明細書では、ＥＯＢ位置のコーディングへのインターリービング手法として参照される。
【００１７】
以下でさらに説明するように、デカルト座標手法は、変換ブロックが密である場合により効率的になる。密な変換ブロックは、非ゼロ係数（即ち、有意係数）の数が比較的大きいようなものである。一方、変換ブロックが疎（ｓｐａｒｓｅ）である場合、インターリービング手法の方が効率的である。疎係数ブロックは、非ゼロ係数の数が比較的少ないブロックである。
【００１８】
本開示による実施形態は、デカルト座標手法およびインターリービング手法の利点を組み合わせて、ＥＯＢ位置をコーディングすることにより、ビデオデータを表すのに必要なビット数を減少させることができる。本明細書の教示によるＥＯＢ位置のコーディングは、密変換ブロックおよび疎変換ブロックの両方に対して、（例えば、ＥＯＢ位置をコーディングするのに必要なビットに関して）良好に実行することができる。
【００１９】
本開示による実施形態は、変換ブロックの変換係数を次元を有する座標系にマッピングする。次元の値の一部は、有意な（即ち、非ゼロの）変換係数を含む。例えば、デカルト座標系（以下で説明される）において、次元を列次元とすることができる。図１０のブロック１０５０（変換ブロックである）を参照すると、次元値６（即ち、列インデックス６）は、有意係数、即ち、係数１０５２および係数１０５６を含み、一方、次元値３（即ち、列インデックス３）は、非ゼロ係数を含んでいない。有意係数を含む次元値について、次元値が最後の非ゼロ係数を含むか、または含んでいないかについて一度のみコーディングすることにより、ＥＯＢ位置をコーディングするのに必要なビット数を減少させることができる。座標系の例は、デカルト座標系、極座標系、デカルトグループ化座標系、および係数グループ座標系を含む。本開示の実施形態によれば、他の座標系も可能である。本明細書で説明する座標系において、座標系に関して２つの次元が説明されている。しかしながら、座標系は３つ以上の次元を含むことができる。
【００２０】
前述したように、座標系はデカルト座標系にすることができ、次元は変換ブロックの列および行とすることができる。座標系は、ＤＣ係数（即ち、変換ブロックのブロック位置（０、０））を中心とすることができ、かつ中心からの距離を反対角線（ａｎｔｉ−ｄｉａｇｏｎａｌ  ｌｉｎｅｓ）を使用して測定することができる極座標系とすることができる。反対角線は第１の次元とすることができ、反対角線上の位置は第２の次元とすることができる。座標系は、変換係数が番号付きグループにグループ化されるようなグループ化システムであり、第１の次元はグループインデックス、第２の次元はグループ内の変換係数のオフセット位置である。他の座標系も可能である。
【００２１】
ビデオ圧縮における最後の有意係数フラグの改善されたコーディングが、本明細書では、教示が組み込まれ得るシステムを参照して最初に説明される。
図１は、ビデオ符号化および復号化システム１００の概略図である。送信局１０２は、例えば、図２に記載されているようなハードウェアの内部構成を有するコンピュータとすることができる。しかしながら、送信局１０２の他の適切な実施形態も可能である。例えば、送信局１０２の処理を複数の装置に分散させることができる。
【００２２】
ネットワーク１０４は、ビデオストリームの符号化および復号化のために、送信局１０２および受信局１０６を接続することができる。具体的には、ビデオストリームを送信局１０２で符号化することができ、符号化されたビデオストリームを受信局１０６で復号化することができる。ネットワーク１０４は、例えば、インターネットであってもよい。ネットワーク１０４は、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、仮想プライベートネットワーク（ＶＰＮ）、携帯電話ネットワーク、または送信局１０２から、この例では、受信局１０６にビデオストリームを転送する任意の他の手段とすることができる。
【００２３】
受信局１０６は、一例では、図２に記載されたようなハードウェアの内部構成を有するコンピュータとすることができる。しかしながら、受信局１０６の他の適切な実施形態も可能である。例えば、受信局１０６の処理を複数の装置に分散させることができる。
【００２４】
ビデオ符号化および復号化システム１００の他の実施形態も可能である。例えば、実施形態はネットワーク１０４を省略することができる。別の実施形態では、ビデオストリームを符号化し、後で受信局１０６またはメモリを有する任意の他の装置に送信するために格納することができる。一実施形態では、受信局１０６は、符号化されたビデオストリームを（例えば、ネットワーク１０４、コンピュータバス、および／または何らかの通信経路を介して）受信し、後の復号化のためにビデオストリームを記憶する。一実施形態では、ネットワーク１０４を介して符号化されたビデオを伝送するためにリアルタイム転送プロトコル（ＲＴＰ：ｒｅａｌ−ｔｉｍｅ  ｔｒａｎｓｐｏｒｔ  ｐｒｏｔｏｃｏｌ）が使用される。別の実施形態では、例えば、ハイパーテキスト転送プロトコル（ＨＴＴＰ：Ｈｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）ベースのビデオストリーミングプロトコルなどのＲＴＰ以外の転送プロトコルが使用されてもよい。
【００２５】
ビデオ会議システムで使用される場合、例えば、送信局１０２および／または受信局１０６は、以下に説明するように、ビデオストリームを符号化および復号化する能力を含むことができる。例えば、受信局１０６は、ビデオ会議サーバ（例えば、送信局１０２）から符号化されたビデオビットストリームを受信して復号化および視聴し、さらにそのビデオビットストリームを他の参加者による復号化および視聴のために符号化してビデオ会議サーバに送信するビデオ会議参加者とし得る。
【００２６】
図２は、送信局または受信局を実施することができるコンピューティングデバイス２００の一例のブロック図である。例えば、コンピューティングデバイス２００は、図１の送信局１０２および受信局１０６の一方または両方を実施することができる。コンピューティングデバイス２００は、複数のコンピューティングデバイスを含むコンピューティングシステムの形態、または例えば、携帯電話、タブレットコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、デスクトップコンピュータなどの単一のコンピューティングデバイスの形態とすることができる。
【００２７】
コンピューティングデバイス２００内のＣＰＵ２０２は、中央処理装置とすることができる。代替的に、ＣＰＵ２０２は、現在存在するか、または今後開発される、情報を操作または処理することができる任意の他のタイプのデバイスまたは複数のデバイスであってもよい。開示された実施態様は、図示のような単一のプロセッサ、例えばＣＰＵ２０２で実施することができるが、複数のプロセッサを使用して速度と効率の利点を達成することができる。
【００２８】
コンピューティングデバイス２００内のメモリ２０４は、実施形態では読み出し専用メモリ（ＲＯＭ）デバイスまたはランダムアクセスメモリ（ＲＡＭ）デバイスであってもよい。任意の他の適切なタイプの記憶装置をメモリ２０４として使用することができる。メモリ２０４は、ＣＰＵ２０２がバス２１２を使用してアクセスするコードおよびデータ２０６を含むことができる。メモリ２０４は、オペレーティングシステム２０８およびアプリケーションプログラム２１０をさらに含むことができ、アプリケーションプログラム２１０は、本明細書に記載された方法をＣＰＵ２０２が実行するのを可能にする少なくとも１つのプログラムを含む。例えば、アプリケーションプログラム２１０は、アプリケーション１〜Ｎを含むことができ、アプリケーション１〜Ｎは、本明細書で説明する方法を実行するビデオコーディングアプリケーションをさらに含む。コンピューティングデバイス２００はまた、例えば、モバイルであるコンピューティングデバイス２００と共に使用されるメモリカードとすることができる二次ストレージ２１４を含むことができる。ビデオ通信セッションは、かなりの量の情報を含み得るので、それらは、二次ストレージ２１４に全体的または部分的に記憶され、処理のために必要に応じてメモリ２０４にロードされる。
【００２９】
コンピューティングデバイス２００は、ディスプレイ２１８などの１つまたは複数の出力デバイスを含むこともできる。ディスプレイ２１８は、一例では、ディスプレイを、タッチ入力を感知するように動作可能なタッチセンシティブエレメントと組み合わせたタッチセンシティブディスプレイであってもよい。ディスプレイ２１８は、バス２１２を介してＣＰＵ２０２に接続することができる。ユーザがコンピューティングデバイス２００をプログラムするかまたは他の方法で使用することを可能にする他の出力デバイスが、ディスプレイ２１８に加えて、またはディスプレイ２１８に代えて設けられてもよい。出力デバイスがディスプレイであるか、またはディスプレイを含む場合、ディスプレイは、液晶ディスプレイ（ＬＣＤ）、陰極線管（ＣＲＴ）ディスプレイ、または有機ＬＥＤ（ＯＬＥＤ）ディスプレイなどの発光ダイオード（ＬＥＤ）ディスプレイを含む様々な方法で実施することができる。
【００３０】
コンピューティングデバイス２００は、コンピューティングデバイス２００を操作するユーザの画像等の画像を検出することができる、例えば、カメラなどの撮像デバイス２２０、または現在または将来開発される任意の他の撮像デバイス２２０を含むか、または撮像デバイス２２０と通信することができる。撮像デバイス２２０は、コンピューティングデバイス２００を操作するユーザの方に向けられるように配置することができる。一例では、撮像デバイス２２０の位置および光軸は、視野が、ディスプレイ２１８に直接隣接する領域であって、その領域からディスプレイ２１８が視認可能な領域を含むように構成することができる。
【００３１】
コンピューティングデバイス２００は、コンピューティングデバイス２００の近くの音を感知することができる、例えば、マイクロホンなどの音声感知デバイス２２２、または現在または今後開発される任意の他の音声感知デバイスを含むか、または音声感知デバイス２２２と通信することができる。音声感知デバイス２２２は、コンピューティングデバイス２００を操作するユーザの方に向けられ、かつユーザがコンピューティングデバイス２００を操作している間にユーザによって発せられた例えば音声、他の発話を受信するように構成することができる。
【００３２】
図２は、コンピューティングデバイス２００のＣＰＵ２０２およびメモリ２０４が単一のユニットに統合されていることを示しているが、他の構成を利用することもできる。ＣＰＵ２０２の動作は、直接的にまたはローカルエリアネットワークまたは他のネットワークを介して接続することができる複数のマシン（各マシンは１つまたは複数のプロセッサを有する）にわたって分散させることができる。メモリ２０４は、ネットワークベースのメモリのような複数のマシンに分散されるか、またはコンピューティングデバイス２００の動作を実行する複数のマシンにおけるメモリとすることができる。本明細書では単一のバスとして示されているが、コンピューティングデバイス２００のバス２１２は、複数のバスから構成することができる。さらに、二次ストレージ２１４は、コンピューティングデバイス２００の他の構成要素に直接接続されるか、またはネットワークを介してアクセスされ、かつメモリカードなどの単一の統合されたユニットまたは複数のメモリカードなどの複数のユニットを含むことができる。従って、コンピューティングデバイス２００は、多種多様な構成で実施することができる。
【００３３】
図３は、符号化され、続いて復号化されるビデオストリーム３００の一例の図である。ビデオストリーム３００は、ビデオシーケンス３０２を含む。次のステージでは、ビデオシーケンス３０２はいくつかの隣接フレーム３０４を含む。３つのフレームが隣接フレーム３０４として示されているが、ビデオシーケンス３０２は任意の数の隣接フレーム３０４を含むことができる。隣接フレーム３０４はさらに、個々のフレーム、例えば、フレーム３０６に細分化することができる。次のステージでは、フレーム３０６は、一連のセグメント３０８またはプレーンに分割することができる。セグメント３０８は、例えば、並列処理を可能にするフレームのサブセットとすることができる。セグメント３０８は、ビデオデータを別々の色に分離することができるフレームのサブセットとすることができる。例えば、カラービデオデータのフレーム３０６は、輝度プレーン（ｌｕｍｉｎａｎｃｅ  ｐｌａｎｅ）および２つの色度プレーン（ｃｈｒｏｍｉｎａｎｃｅ  ｐｌａｎｅ）を含むことができる。セグメント３０８は、異なる解像度でサンプリングすることができる。
【００３４】
フレーム３０６がセグメント３０８に分割されているか否かにかかわらず、フレーム３０６は、さらに、フレーム３０６内の例えば１６×１６画素に対応するデータを含むことができるブロック３１０に細分化されてもよい。ブロック３１０は、１つまたは複数のセグメント３０８の画素データからのデータを含むように構成される。ブロック３１０は、４ｘ４画素、８ｘ８画素、１６ｘ８画素、８ｘ１６画素、１６ｘ１６画素、またはそれ以上等の任意の他の適切なサイズであってもよい。
【００３５】
図４は、本開示の実施形態による符号化器４００のブロック図である。符号化器４００は、例えば、メモリ２０４などのメモリに格納されたコンピュータソフトウェアプログラムを提供するなどして、上述のように送信局１０２内で実施することができる。コンピュータソフトウェアプログラムは、ＣＰＵ２０２等のプロセッサよる実行時に、送信局１０２に本明細書で説明した方法でビデオデータを符号化させる機械命令を含むことができる。符号化器４００は、例えば、送信局１０２に含まれる専用のハードウェアとして実施することもできる。符号化器４００は、ビデオストリーム３００を入力として使用してフォワードパス（実線の接続線で示す）において様々な機能を実行して、符号化または圧縮されたビットストリーム４２０を生成するイントラ予測／インター予測ステージ４０２、変換ステージ４０４、量子化ステージ４０６、およびエントロピー符号化ステージ４０８を有する。符号化器４００は、将来のブロックの符号化のためのフレームを再構成する再構成パス（点線の接続線で示す）をも含む。図４において、符号化器４００は、再構成パスにおいて様々な機能を実行する以下のステージ、逆量子化ステージ４１０、逆変換ステージ４１２、再構成ステージ４１４、およびループフィルタリングステージ４１６を有する。符号化器４００の他の構成的な変形例を使用して、ビデオストリーム３００を符号化することができる。
【００３６】
ビデオストリーム３００が符号化のために提示されるとき、フレーム３０６はブロックの単位で処理され得る。イントラ予測／インター予測ステージ４０２において、ブロックは、イントラフレーム予測（イントラ予測とも呼ばれる）またはインターフレーム予測（インター予測とも呼ばれる）、または両方の組み合わせを用いて符号化することができる。いずれの場合でも、予測ブロックを形成することができる。イントラ予測の場合、予測ブロックの全部または一部が、以前に符号化され、かつ再構成された現在のフレーム内のサンプルから形成され得る。インター予測の場合、予測ブロックの全部または一部は、動きベクトルを使用して決定された１つまたは複数の以前に構築された参照フレーム内のサンプルから形成され得る。
【００３７】
次に、引き続き図４を参照して、イントラ予測／インター予測ステージ４０２において予測ブロックが現在のブロックから減算され、残差ブロック（残差とも呼ばれる）が生成される。変換ステージ４０４は、ブロックベースの変換を使用して、残差を、例えば周波数領域の変換係数に変換する。このようなブロックベースの変換は、例えば、離散コサイン変換（ＤＣＴ：Ｄｉｓｃｒｅｔｅ  Ｃｏｓｉｎｅ  Ｔｒａｎｓｆｏｒｍ）および非対称離散サイン変換（ＡＤＳＴ：Ａｓｙｍｍｅｔｒｉｃ  Ｄｉｓｃｒｅｔｅ  Ｓｉｎｅ  Ｔｒａｎｓｆｏｒｍ）を含む。他のブロックベースの変換も可能である。さらに、異なる変換の組み合わせを単一の残差に適用することができる。変換の適用の一例では、ＤＣＴは残差ブロックを、変換係数値が空間周波数に基づく周波数領域に変換する。行列の左上の最低周波数（ＤＣ）係数、および行列の右下の最高周波数係数。予測ブロックのサイズ、従って結果の残差ブロックは、変換ブロックのサイズと異なり得ることは注目に値する。例えば、予測ブロックは、別々の変換が適用される小さなブロックに分割され得る。
【００３８】
量子化ステージ４０６は、量子化値または量子化レベルを使用して、変換係数を量子化された変換係数と呼ばれる離散量子値に変換する。例えば、変換係数は、量子化値で除算され、切り捨てられてもよい。次に、量子化された変換係数は、エントロピー符号化ステージ４０８によってエントロピー符号化される。エントロピーコーディングは、トークンツリーおよびバイナリツリーを含む任意の数の技術を使用して実行されてもよい。例えば、使用される予測のタイプ、変換タイプ、動きベクトルおよび量子化値を含み得る、ブロックを復号化するために使用される他の情報とともに、エントロピー符号化された係数は、圧縮されたビットストリーム４２０に出力される。ブロックを復号化するための情報は、圧縮ビットストリーム４２０内のブロック、フレーム、スライス、および／またはセクションヘッダにエントロピーコーディングされ得る。圧縮されたビットストリーム４２０は、符号化されたビデオストリームまたは符号化されたビデオビットストリームとも称され、これらの用語は本明細書では互換的に使用される。
【００３９】
符号化器４００および復号化器５００（以下に説明する）の両方が、圧縮されたビットストリーム４２０を復号化するために同じ参照フレームを使用することを確実にするために、図４における再構成パス（点線の接続線で示す）が使用される。再構成パスは、逆量子化ステージ４１０で量子化された変換係数を逆量子化すること、および逆変換ステージ４１２で逆量子化された変換係数を逆変換して微分残差ブロック（微分残差とも称される）を生成することを含む以下により詳細に説明される復号化プロセス中に行われる機能と同様の機能を実行する。再構成ステージ４１４において、イントラ予測／インター予測ステージ４０２で予測された予測ブロックを微分残差に加えて、再構成されたブロックが作成される。ブロック化アーチファクトなどの歪みを低減するために、ループフィルタリングステージ４１６が再構成されたブロックに適用される。
【００４０】
符号化器４００の他の変形例を使用して圧縮されたビットストリーム４２０を符号化することができる。例えば、非変換ベースの符号化器４００は、あるブロックまたはフレームに関して変換ステージ４０４を使用せずに残差信号を直接量子化することができる。別の実施形態では、符号化器４００は、量子化ステージ４０６と逆量子化ステージ４１０とを組み合わせて単一のステージにすることができる。
【００４１】
図５は、本開示の実施形態による復号化器５００のブロック図である。復号化器５００は、例えば、メモリ２０４に格納されたコンピュータソフトウェアプログラムを提供することによって、受信局１０６で実施することができる。コンピュータソフトウェアプログラムは、ＣＰＵ２０２などのプロセッサによる実行時に、受信局１０６に、図８および９において以下のように説明した方法でビデオデータを復号化させる機械命令を含む。復号化器５００は、例えば、送信局１０２または受信局１０６に含まれるハードウェアで実施することもできる。復号化器５００は、上述の符号化器４００の再構成パスと同様に、一例では、様々な機能を実行して圧縮されたビットストリーム４２０から出力ビデオストリーム５１６を生成するための以下のステージ、エントロピー復号化ステージ５０２、逆量子化ステージ５０４、逆変換ステージ５０６、イントラ予測／インター予測ステージ５０８、再構成ステージ５１０、ループフィルタリングステージ５１２、およびデブロッキングフィルタリングステージ５１４を含む。圧縮されたビットストリーム４２０を復号化するために復号化器５００の他の構造的な変形例を使用することができる。
【００４２】
圧縮されたビットストリーム４２０が復号化のために提示されると、圧縮されたビットストリーム４２０内のデータ要素が、エントロピー復号化ステージ５０２によって復号化されて、一組の量子化された変換係数が生成される。逆量子化ステージ５０４は、（例えば、量子化された変換係数に量子化値を乗算することにより）量子化された変換係数を逆量子化し、逆変換ステージ５０６は、選択された変換タイプを使用して逆量子化された変換係数を逆変換して、符号化器４００における逆変換ステージ４１２によって生成されたものと同一である微分残差を生成する。圧縮されたビットストリーム４２０から復号化されたヘッダ情報を使用して、復号化器５００は、イントラ予測／インター予測ステージ５０８を用いて、例えばイントラ予測／インター予測ステージ４０２において符号化器４００で生成されたのと同じ予測ブロックを作成する。再構成ステージ５１０において、予測ブロックを微分残差に加えて再構成ブロックが作成される。ループフィルタリングステージ５１２は、ブロッキングアーチファクトを低減するために再構成されたブロックに適用される。再構成されたブロックに他のフィルタリングを適用することができる。一例では、ブロッキング歪を低減するためにデブロッキングフィルタリングステージ５１４が再構成ブロックに適用され、その結果が出力ビデオストリーム５１６として出力される。出力ビデオストリーム５１６は、復号化されたビデオストリームとも呼ばれ、用語は本明細書では互換的に使用される。
【００４３】
復号化器５００の他の変形例を使用して、圧縮されたビットストリーム４２０を復号化することができる。例えば、復号化器５００は、デブロッキングフィルタリングステージ５１４を用いずに出力ビデオストリーム５１６を生成することができる。復号化器５００のいくつかの実施形態では、デブロッキングフィルタリングステージ５１４は、ループフィルタリングステージ５１２の前に適用される。追加的または代替的に、符号化器４００は、ループフィルタリングステージ４１６に加えて、デブロッキングフィルタリングステージを含む。
【００４４】
図６は、本開示の実施形態による量子化された変換係数を示す図６００である。図６００は、現在のブロック６２０、スキャン順序６０２、量子化された変換ブロック６０４、非ゼロマップ６０６、ブロック終了（ｅｎｄ−ｏｆ−ｂｌｏｃｋ）マップ６２２、およびサインマップ６２６を示している。現在のブロック６２０は、４ｘ４ブロックとして図示されている。しかしながら、任意のブロックサイズが可能である。例えば、現在のブロックは、４ｘ４、８ｘ８、１６ｘ８、８×１６、３２ｘ３２のサイズ（即ち、寸法）、または任意の他の正方形または長方形のブロックサイズを有することができる。現在のブロック６２０は、現在のフレームのブロックとすることができる。別の例では、現在のフレームは、ブロックの集合を含むセグメント（図３のセグメント３０８など）、タイル、または同様のものに分割されてもよく、現在のブロックは、パーティションのブロックである。
【００４５】
量子化された変換ブロック６０４は、現在のブロック６２０のサイズに類似したサイズのブロックであり得る。量子化された変換ブロック６０４は、非ゼロ係数（例えば、係数６０８）およびゼロ係数（例えば、係数６１０）を含む。上述したように、量子化された変換ブロック６０４は、現在のブロック６２０に対応する残差ブロックに関する量子化された変換係数を含む。また、上述したように、量子化された変換係数は、図４のエントロピーコーディングステージ４０８などのエントロピーコーディングフェーズによってエントロピーコーディングされる。
【００４６】
量子化された変換係数をエントロピーコーディングすることは、図７に関して以下に説明するように、２値化された変換係数の２値シンボルをコーディングするための条件付き確率の推定値を提供するコンテキストモデル（確率コンテキストモデル、確率モデル、モデル、およびコンテキストとも呼ばれる）の選択を含むことができる。量子化された変換係数をエントロピーコーディングする場合、追加情報が、コンテキストモデルを選択するためのコンテキストとして使用され得る。例えば、以前に符号化された変換係数の大きさは、確率モデルを決定するために少なくとも部分的に使用することができる。
【００４７】
変換ブロックを符号化するために、ビデオコーディングシステムは、スキャン順序で変換ブロックをトラバースし（ｔｒａｖｅｒｓｅ）、量子化された変換係数が個々にトラバースされる（即ち、アクセスされる）ときに、量子化された変換係数を符号化（例えば、エントロピー符号化）し得る。スキャン順序６０２などのジグザグスキャン順序では、変換ブロックの左上隅（ＤＣ係数とも呼ばれる）が最初にトラバースされて符号化され、スキャン順序の次の係数（即ち、「１」とラベル付けされた位置に対応する変換係数）がトラバースされて符号化される。ジグザグスキャン順序（即ち、スキャン順序６０２）では、現在の量子化された変換係数（例えば、符号化されるべき変換係数）の上方でかつ左側のいくつかの量子化された変換係数が最初にトラバースされる。他のスキャン順序も可能である。量子化された変換係数の１次元構造（例えば、配列）は、スキャン順序を使用して２次元の量子化された変換ブロックをトラバースすることによって生じたものとすることができる。
【００４８】
量子化された変換ブロック６０４を符号化することは、量子化された変換ブロック６０４のどの量子化された変換係数がゼロであり、どれが非ゼロであるかを示す非ゼロマップ６０６を決定することを含むことができる。非ゼロ係数およびゼロ係数は、非ゼロマップにおいて値１および値ゼロ（０）によりそれぞれ示すことができる。例えば、非ゼロマップ６０６は、係数６０８に対応するデカルト位置（０、０）における非ゼロ６０７と、係数６１０に対応するデカルト位置（２、０）におけるゼロ６０８とを含む。
【００４９】
量子化された変換ブロック６０４を符号化することは、ブロック終了マップ６２２を生成すること、およびブロック終了マップ６２２を符号化することを含むことができる。ブロック終了マップは、量子化された変換ブロック６０４の非ゼロの量子化された変換係数が、任意のスキャン順序に関して最後の非ゼロ係数であるかどうかを示す。非ゼロ係数が変換ブロックにおける最後の非ゼロ係数でない場合、そのことは、ブロック終了マップにおいてバイナリビット０（ゼロ）によって示すことができる。一方、非ゼロ係数が変換ブロックにおける最後の非ゼロ係数である場合、ブロック終了マップにおいてバイナリ値１によって示すことができる。例えば、スキャン位置１１に対応する量子化された変換係数（即ち、最後の非ゼロの量子化された変換係数６２８）は、量子化された変換ブロック６０４の最後の非ゼロ係数であるため、それは、１のブロック終了値６２４によって示され、他のすべての非ゼロの変換係数は、ゼロによって示される。
【００５０】
量子化された変換ブロック６０４を符号化することは、サインマップ６２６を生成すること、およびサインマップ６２６を符号化することを含むことができる。サインマップ６２６は、量子化された変換ブロック６０４のどの非ゼロの量子化された変換係数が正の値を有し、どの非ゼロの量子化された変換係数が負の値を有するかを示す。ゼロの変換係数は、サインマップで示される必要はない。サインマップ６２６は、量子化された変換ブロック６０４に関するサインマップを示している。サインマップ６２６では、負の量子化された変換係数をゼロ（０）で示し、正の量子化された変換係数を１で示すことができる。
【００５１】
上述したように、いくつかのコーディングシステムが、インターリービング手法を使用して、最後の非ゼロの量子化された変換係数６２８のＥＯＢ位置を符号化および／または復号化することができる。インターリービング手法の一例を次に示す。
【００５２】
インターリービング手法では、フラグ（例えば、シンタックス要素（ｓｙｎｔａｘ  ｅｌｅｍｅｎｔ）ｓｉｇ＿ｃｏｅｆ＿ｆｌａｇなど）を使用して、符号化または復号化されている係数が有意であるか否かを示すことができる。変換係数に関して、シンタックス要素ｓｉｇ＿ｃｏｅｆ＿ｆｌａｇは、変換係数がゼロであるか、または非ゼロであるかという質問に答える。例えば、シンタックス要素ｓｉｇ＿ｃｏｅｆ＿ｆｌａｇがゼロ（０）である場合、現在の変換係数はゼロであり、ｓｉｇ＿ｃｏｅｆ＿ｆｌａｇが１の場合、現在の変換係数は非ゼロである。
【００５３】
インターリービング手法では、別のフラグは、スキャン順序６０２などのスキャン順序が与えられたときに、コーディングされている（即ち、符号化または復号化されている）係数が変換ブロックの最後の有意フラグであるかどうかを示すフラグは、ｌａｓｔ＿ｓｉｇ＿ｆｌａｇと呼ばれるシンタックス要素とすることができる。非ゼロの変換係数に関して、シンタックス要素ｌａｓｔ＿ｓｉｇ＿ｆｌａｇは、変換係数が最後の非ゼロ係数であるかという質問に答える。ゼロ（０）の値は、変換係数が最後の非ゼロ係数ではないことを示し、１の値は、変換係数が最後の非ゼロ係数であることを示す。シンタックス要素ｌａｓｔ＿ｓｉｇ＿ｆｌａｇは、変換ブロックの有意係数ごとに符号化および復号化することができる。
【００５４】
従って、現在の係数が非ゼロであることを示すシンタックス要素ｓｉｇ＿ｃｏｅｆ＿ｆｌａｇ（即ち、値が１のｓｉｇ＿ｃｏｅｆ＿ｆｌａｇ）が符号化または復号化される場合、対応するシンタックス要素ｌａｓｔ＿ｓｉｇ＿ｆｌａｇは、現在の非ゼロ係数が現在のブロックにおける最後の有意係数である（例えば、ｌａｓｔ＿ｓｉｇ＿ｆｌａｇ＝１）か否か（例えば、ｌａｓｔ＿ｓｉｇ＿ｆｌａｇ＝０）を示す。従って、設定されたフラグｌａｓｔ＿ｓｉｇ＿ｆｌａｇ（例えば、ｌａｓｔ＿ｓｉｇ＿ｆｌａｇ＝１）が符号化または復号化されると、現在のブロックのＥＯＢ位置が決定される。
【００５５】
ＮｘＮ変換ブロックにおいてＥＯＢ位置をコーディングするためのインターリービング手法は、次のように要約することができる。
ステップ１において、スキャン位置ｉをゼロに初期化する（ｉ＝０）。スキャン位置ｉは、スキャン順序位置に対応する。ステップ２において、スキャン順序位置ｉにおけるシンタックス要素ｓｉｇ＿ｃｏｅｆ＿ｆｌａｇを符号化／復号化する。ステップ３において、シンタックス要素ｓｉｇ＿ｃｏｅｆ＿ｆｌａｇが設定されているかどうかを決定し（例えば、ｓｉｇ＿ｃｏｅｆ＿ｆｌａｇ＝１）、設定されている場合、スキャン順序位置ｉにおけるシンタックス要素ｌａｓｔ＿ｓｉｇ＿ｆｌａｇを符号化／復号化する。ステップ４において、ｉを増加する（ｉ＝ｉ＋１）。次に、ＥＯＢの位置が符号化／復号化される（即ち、ｌａｓｔ＿ｓｉｇ＿ｆｌａｇ＝１）か、ブロックの最後に到達する（即ち、ｉが値Ｎ＊Ｎに到達する）まで、ステップ２〜４を繰り返す。ステップ３において、ブロック終了に到達した場合（即ち、ｉ＝Ｎ＊Ｎ−１）、位置ｉにおけるシンタックス要素ｌａｓｔ＿ｓｉｇ＿ｆｌａｇは符号化／復号化されない。このような場合、変換ブロックの最後の係数（即ち、最後のスキャン順序位置における変換係数）は、ＥＯＢであると想定される。
【００５６】
上記のスキームの変形例では、シンタックス要素ｌａｓｔ＿ｓｉｇ＿ｆｌａｇは、現在のブロック内の現在の位置にあるものを含む残りのすべての係数がゼロであることを示すｅｏｂ＿ｆｌａｇによって置き換えることができる。その場合、シンタックス要素ｅｏｂ＿ｆｌａｇは、セットｓｉｇ＿ｃｏｅｆ＿ｆｌａｇの直後にコーディング（符号化／復号化）される。即ち、ｓｉｇ＿ｃｏｅｆ＿ｆｌａｇが位置ｉにおいて設定されている場合、ｅｏｂフラグは位置ｉ＋１においてコーディングされる。
【００５７】
図７に関して、インターリービング手法を使用するコーディングシステムの別の例を示す。図７の例では、係数バイナリツリーが使用される。
図７は、本開示の実施形態による、変換ブロックをエントロピーコーディングするために使用することができる係数トークンツリー７００の図である。係数トークンツリー７００は、ツリーの各ノードにおいて、２つのブランチのうちの１つを取る（即ち、トラバースする）必要があるため、バイナリツリーと呼ばれる。係数トークンツリー７００は、ＡおよびＢとラベル付けされたノードにそれぞれ対応するルートノード７０１およびノード７０３を含む。
【００５８】
図６に関して上述したように、ブロックに関してブロック終了（ＥＯＢ）トークンが検出されると、現在のブロックの係数のコーディングは終了し、ブロックにおける残りの係数はゼロであると推測される。このため、ＥＯＢ位置のコーディングは、ビデオコーディングシステムにおける係数の重要な部分になる。
【００５９】
係数トークンツリー７００を使用して、量子化された変換ブロック（例えば、図６の量子化された変換ブロック６０４）の量子化された係数（例えば、図６の係数６０８、６１０）に対して２進数列が生成される。
【００６０】
一例では、Ｎ×Ｎブロック（例えば、量子化された変換ブロック６０４）内の量子化された係数は、所定のスキャン順序（例えば、図６のスキャン順序６０２）に従って１Ｄ（一次元）配列（ここでは、配列ｕ）に編成される。Ｎは、４、８、１６、３２、または任意のその他の値にすることができる。１Ｄ配列のｉ番目の位置における量子化された係数は、ｕ［ｉ］として参照される。ここで、ｉ＝０，…，Ｎ＊Ｎ−１である。ｕ［ｉ］，…，ｕ［Ｎ＊Ｎ−１］における最後の連続のゼロの開始位置は、ｅｏｂとして表すことができる。１Ｄ配列の最後の位置（即ち、ｕ［Ｎ＊Ｎ−１］）がゼロでない場合、ｅｏｂは、値Ｎ＊Ｎに設定することができる。即ち、１Ｄ配列ｕの最後の係数がゼロでない場合、ｅｏｂは、１Ｄ配列の最後の位置に設定することができる（即ち、ｅｏｂは、値Ｎ＊Ｎに設定される）。図６の例を使用すると、１Ｄ配列ｕは次のエントリｕ［］＝［−６、０、−１、０、２、４、１、０、０、１、０、−１、０、０、０、０］を有することができる。ｕ［ｉ］の各々における値は、量子化された変換係数である。本明細書では、１Ｄ配列ｕの量子化された変換係数は、単に「係数」または「変換係数」と呼ぶこともある。位置ｉ＝０における係数（即ち、ｕ［０］＝−６）は、ＤＣ係数に対応している。図６の例では、１Ｄ配列ｕの位置１２におけるゼロ係数の後に非ゼロ係数がないため、ｅｏｂは、１２に等しくなる。
【００６１】
ｉ＝０〜Ｎ＊Ｎ−１に関する係数ｕ［ｉ］，…，ｕ［Ｎ＊Ｎ−１］を符号化および復号化するために、トークンｔ［ｉ］が各位置ｉ＜＝ｅｏｂにおいて生成される。ｉ＜ｅｏｂに関して、トークンｔ［ｉ］は、ｕ［ｉ］における対応する量子化された変換係数のサイズおよび／またはサイズ範囲を示すことができる。ｅｏｂにおいて量子化された変換係数に関するトークンは、ＥＯＢ＿ＴＯＫＥＮとすることができる。ＥＯＢ＿ＴＯＫＥＮは、１Ｄ配列ｕがｅｏｂ位置に続く非ゼロ係数が（包含的に）含まれないことを示すトークンである。即ち、ｔ［ｅｏｂ］＝ＥＯＢ＿ＴＯＫＥＮは、現在のブロックのＥＯＢ位置を示す。以下の表Ｉは、ＥＯＢ＿ＴＯＫＥＮを除くトークン値の例、および本開示の実施形態によるそれらの値と対応する名前のリストを提供する。
【００６２】
【表１】
2020522181.tif 000003
一例では、量子化された係数値は、符号付き１２ビット整数であると見なされる。量子化された係数値を表すために、１２ビットの符号付き値の範囲を１１個のトークン（表Ｉのトークン０−１０）とブロック終了トークン（ＥＯＢ＿ＴＯＫＥＮ）に分割することができる。トークンを生成して量子化された係数値を表すために、係数トークンツリー７００をトラバースすることができる。ツリーをトラバースした結果（即ち、ビット列）は、図４のエントロピー符号化ステージ４０８に関して説明した符号化器によってビットストリーム（図４のビットストリーム４２０など）に符号化することができる。
【００６３】
係数トークンツリー７００は、ＥＯＢ＿ＴＯＫＥＮ（トークン７０２）、ＺＥＲＯ＿ＴＯＫＥＮ（トークン７０４）、ＯＮＥ＿ＴＯＫＥＮ（トークン７０６）、ＴＷＯ＿ＴＯＫＥＮ（トークン７０８）、ＴＨＲＥＥ＿ＴＯＫＥＮ（トークン７１０）、ＦＯＵＲ＿ＴＯＫＥＮ（トークン７１２）、ＣＡＴ１（表ＩのＤＣＴ＿ＶＡＬ＿ＣＡＴ１であるトークン７１４）、ＣＡＴ２（表ＩのＤＣＴ＿ＶＡＬ＿ＣＡＴ２であるトークン７１６）、ＣＡＴ３（表ＩのＤＣＴ＿ＶＡＬ＿ＣＡＴ３であるトークン７１８）、ＣＡＴ４（表ＩのＤＣＴ＿ＶＡＬ＿ＣＡＴ４であるトークン７２０）、ＣＡＴ５（表ＩのＤＣＴ＿ＶＡＬ＿ＣＡＴ５であるトークン７２２）、およびＣＡＴ６（表ＩのＤＣＴ＿ＶＡＬ＿ＣＡＴ６であるトークン７２４）のトークンを含む。上記から分かるように、係数トークンツリーは、単一の量子化された係数値を、トークン７０４、７０６、７０８、７１０、および７１２のうちの１つなどの単一のトークンにマッピングする。トークン７１４、７１６、７１８、７２０、７２２、および７２４などの他のトークンは、量子化された係数値の範囲を表す。例えば、３７の値を有する量子化された変換係数は、トークンＤＣＴ＿ＶＡＬ＿ＣＡＴ５（図７のトークン７２２）によって表すことができる。
【００６４】
トークンに関するベース値は、その範囲の最小値として定義される。例えば、トークン７２０のベース値は１９である。エントロピーコーディングは、各量子化された係数に関するトークンを識別し、トークンが範囲を表す場合、量子化された係数からベース値を減算することにより残差を形成することができる。例えば、２０の値を有する量子化された変換係数は、復号化器が元の量子化された変換係数を再構築可能となるように、トークン７２０に含まれることによって、符号化されたビデオビットストリームにおいて１（即ち、２０マイナス１９）の残差値によって表される。ブロック終了のトークン（即ち、トークン７０２）は、変換されたブロックデータにおいてさらに非ゼロの量子化された係数が残っていないことを通知する。
【００６５】
（図４のエントロピー符号化ステージ４０８によるなど）バイナリ算術符号化エンジンを使用することによりトークンｔ［ｉ］を符号化または復号化するために、係数トークンツリー７００を使用することができる。係数トークンツリー７００は、ルートノード７０１（即ち、Ａとラベル付けされたノード）から開始してトラバースされる。係数トークンツリーをトラバースすることにより、例えば、バイナリ算術コーディングを使用してビットストリームに符号化されるビット列（符号語）が生成される。ビット列は、現在の係数（即ち、符号化されている量子化された変換係数）の表現である。
【００６６】
現在の係数がゼロであり、残りの変換係数に非ゼロの値が存在しない場合、トークン７０２（即ち、ＥＯＢ＿ＴＯＫＥＮ）がビットストリームに追加される。これは、例えば、図６のスキャン順序の位置１１における変換係数の場合である。一方、現在の係数が非ゼロの場合、または現在のブロックの残りの係数に非ゼロの値がある場合、「１」ビットが符号語に追加され、トラバースがノード７０３（即ち、Ｂとラベル付けされたノード）に移る。ノードＢでは、現在の係数がテストされて、現在の係数がゼロに等しいかどうかが確認される。現在の係数がゼロに等しい場合、左側のブランチが取られて、値ＺＥＲＯ＿ＴＯＫＥＮおよびビット「０」を表すトークン７０４が符号語に追加される。現在の係数がゼロに等しくない場合、ビット「１」が符号語に追加され、トラバースがノードＣを通過する。ノードＣにおいて、現在の係数が１より大きいかどうかを確認するためにテストされる。現在の係数が１に等しい場合、左側のブランチが取られて、値ＯＮＥ＿ＴＯＫＥＮを表すトークン７０６がビットストリームに追加される（即ち、「０」ビットが符号語に追加される）。現在の係数が１より大きい場合、トラバースはノードＤに移って、現在の係数の値を値４と比較してチェックする。現在の係数が４以下の場合、トラバースはノードＥに移り、「０」ビットが符号語に追加される。ノードＥにおいて、値「２」と等しいかどうかのテストが行われ得る。真の場合、値「２」を表すトークン７０６がビットストリームに追加される（即ち、ビット「０」が符号語に追加される）。真でない場合、ノードＦにおいて、現在の係数が値「３」または値「４」のいずれであるか、ビットストリームに対して適宜トークン７１０（即ち、ビット「０」が符号語に追加される）またはトークン７１２（即ち、ビット「１」が符号語に追加される）のいずれであるか等々がテストされる。
【００６７】
基本的に、左の子ノードへのトラバース時に「０」ビットが符号語に追加され、右の子ノードへのトラバース時に符号語に「１」ビットが追加される。圧縮されたビットストリームから符号語を復号化するときに、復号化器によって同様のプロセスが実行される。復号化器はビットストリームからビットを読み取る。ビットが「１」の場合、係数トークンツリーは右にトラバースされ、ビットが「０」の場合、ツリーは左にトラバースされる。復号化器は次のビットを読み取り、ツリーのトラバースがリーフノード（即ち、トークン）に到達するまでプロセスを繰り返す。一例として、トークンｔ［ｉ］＝ＴＨＲＥＥ＿ＴＯＫＥＮを符号化するには、ルートノード（即ち、ルートノード７０１）から開始して、１１１０１０のバイナリ列が符号化される。別の例として、符号語１１１００を復号化すると、トークンＴＷＯ＿ＴＯＫＥＮが生成される。
【００６８】
左および右の子ノードへの「０」ビットと「１」ビットとの間の対応は、符号化および復号化のプロセスを記述するために使用される規則に過ぎないことに留意されたい。いくつかの実施形態では、例えば、「１」が左の子ノードに対応し、「０」が右の子ノードに対応する規則など、異なる規則を使用することができる。符号化器および復号化器の両方が同じ規則を導入している限り、本明細書で説明するプロセスが適用される。
【００６９】
ＥＯＢ＿ＴＯＫＥＮは非ゼロ係数の後でのみ可能であるため、ｕ［ｉ−１］がゼロである場合（即ち、１Ｄ配列ｕの位置ｉ−１における量子化された変換係数がゼロに等しい場合）、復号化器は、最初のビットが１でなければならないことを推測することができる。ツリーをトラバースする際に、ゼロ変換係数（例えば、図６のジグザグスキャン順序の位置１における変換係数）に続く変換係数（例えば、図６のジグザグスキャン順序の位置２の変換係数）に関して、トラバースは必ずルートノード７０１からノード７０３に移動するので、最初のビットは１でなければならない。
【００７０】
このため、バイナリフラグｃｈｅｃｋＥｏｂを使用して、係数トークンツリー７００におけるルートノードから開始される最初のビットの符号化および復号化をスキップするように符号化器および復号化器に指示することができる。実際には、バイナリフラグｃｈｅｃｋＥｏｂが０（即ち、ルートノードがチェックされるべきではないことを示す）である場合、係数トークンツリー７００のルートノード７０１はスキップされ、ノード７０３はトラバースのためにアクセスされる係数トークンツリー７００の最初のノードとなる。即ち、ルートノード７０１がスキップされると、符号化器は符号化をスキップすることができ、復号化器は復号化をスキップして、符号化列の最初のビット（即ち、バイナリビット「１」）を推測することができる。
【００７１】
ブロックの符号化または復号化の開始時に、バイナリフラグｃｈｅｃｋＥｏｂを１に初期化することができる（即ち、ルートノードをチェックする必要があることを示す）。以下のステップは、ＮｘＮブロック内の量子化された変換係数を復号化するプロセスの一例を示す。
【００７２】
ステップ１において、バイナリフラグｃｈｅｃｋＥｏｂがゼロ（即ち、ｃｈｅｃｋＥｏｂ＝０）に設定され、インデックスもゼロ（即ち、ｉ＝０）に設定される。
ステップ２で、トークンｔ［ｉ］は、
１）バイナリフラグｃｈｅｃｋＥｏｂが１に等しい場合は全係数トークンツリー（即ち、係数トークンツリー７００のルートノード７０１から開始する）を使用するか、または
２）ｃｈｅｃｋＥｏｂが０に等しい場合はＥＯＢ＿ＴＯＫＥＮがスキップされる部分ツリー（例えば、ノード７０３から開始する）を使用するかのいずれかによって復号化される。
【００７３】
ステップ３において、トークンｔ［ｉ］＝ＥＯＢ＿ＴＯＫＥＮである場合、量子化された変換係数ｕ［ｉ］，．．．．，ｕ［Ｎ＊Ｎ−１］が全て０に設定され、復号化処理を終了する。それ以外の場合、必要に応じて（即ち、ｔ［ｉ］がＺＥＲＯ＿ＴＯＫＥＮと等しくない場合）追加ビットが復号化されて、ｕ［ｉ］を再構築することができる。
【００７４】
ステップ４において、ｕ［ｉ］がゼロに等しい場合、バイナリフラグｃｈｅｃｋＥｏｂが１に設定され、それ以外の場合、ｃｈｅｃｋＥｏｂが０に設定される。即ち、ｃｈｅｃｋＥｏｂは、値（ｕ［ｉ］！＝０）に設定することができる。
【００７５】
ステップ５において、インデックスｉがインクリメントされる（即ち、ｉ＝ｉ＋１）。
ステップ６において、量子化された変換係数がすべて復号化されるまで（即ち、インデックスｉ＝Ｎ＊Ｎまで）、またはＥＯＢ＿ＴＯＫＥＮが復号化されるまで、ステップ２〜５が繰り返される。
【００７６】
上記のステップ２において、トークンｔ［ｉ］を復号化することは、コンテキストｃｔｘを決定するステップと、コンテキストｃｔｘからバイナリ確率分布（即ち、モデル）を決定するステップと、決定された確率分布を使用することにより、ブール演算コード（Ｂｏｏｌｅａｎ  ａｒｉｔｈｍｅｔｉｃ  ｃｏｄｅ）を使用して係数トークンツリー７００のルートノードからリーフノードへのパスを復号化するステップを含むことができる。コンテキストｃｔｘは、コンテキスト導出の方法を使用して決定することができる。コンテキスト導出の方法は、ブロックサイズ、プレーンタイプ（即ち、輝度または色度）、位置ｉ、および以前に復号化されたトークンｔ［０］，…，ｔ［ｉ−１］のうちの１つまたは複数を使用して、コンテキストｃｔｘを決定することができる。他の基準を使用して、コンテキストｃｔｘを決定することができる。バイナリ確率分布は、ｃｈｅｃｋＥＯＢ＝１の場合はルートノード７０１から、ｃｈｅｃｋＥＯＢ＝０の場合はノード７０３から開始する、係数トークンツリー７００の任意の内部ノードに関して決定することができる。
【００７７】
いくつかの符号化システムでは、コンテキストｃｔｘが与えられたときに、トークンｔ［ｉ］を符号化または復号化するために使用される確率は、固定され、かつ画像（即ち、フレーム）に適応していなくてもよい。例えば、確率は、任意のコンテキストｃｔｘに対して定義されたデフォルト値であり得るか、または確率は、そのフレームに関するフレームヘッダの一部としてコーディング（即ち、通知）され得る。フレームをコーディングする際に、すべてのコンテキストに関する確率をコーディングすることは、コストがかかる。このため、符号化器は、各コンテキストに関して、フレームヘッダでコンテキストに関連する確率をコーディングし、バイナリフラグを使用して復号化器にその決定を通知することが有益かどうかを分析し得る。さらに、コンテキストに関する確率をコーディングすることは、（例えば、ビットレートにおける）コストを低減するために、予測を使用し得る。予測は、以前に復号化されたフレーム内の同じコンテキストの確率から導出され得る。いくつかの符号化システムでは、コンテキストｃｔｘが与えられたときの確率は、新たなシンボルが復号化または符号化されるときに、ピクチャ（即ち、フレーム）において適応させることができる。様々な適応方法を使用することができる。適応方法の例は、ラプラス（Ｌａｐｌａｃｅ）推定器、クリチェフスキー−トロフィモフ（Ｋｒｉｃｈｅｖｓｋｙ−Ｔｒｏｆｉｍｏｖ）推定器、グッドチューリング（Ｇｏｏｄ−Ｔｕｒｉｎｇ）推定器、ＩＩＲ（無限インパルス応答）フィルターベースの推定器、および有限状態マシンベースの推定器を含む。
【００７８】
図８は、本開示の実施形態による、ＥＯＢ位置をバイナリ化するためのツリー８００の例の図である。ツリー８００は、ＥＯＢ位置をコーディングするデカルト座標手法を実施するコーディングシステムによって使用することができる。デカルト座標手法では、ＥＯＢ位置をブロック位置としてコーディングすることができる。従って、上記のインターリービング手法とは異なり、ＥＯＢ位置のコーディングはスキャン順序に依存しない。現在のブロックのサイズはＮｘＮであるため、現在のブロックのスキャン順序に従って、最後の有意係数は、ブロック位置（ｅｏｂ＿ｘ，ｅｏｂ＿ｙ）にあり、ｅｏｂ＿ｘは列番号を示し、ｅｏｂ＿ｙは行番号を示す。例えば、図６を参照すると、最後の非ゼロの量子化された変換係数６２８は、ブロック位置（２、２）にある。インターリービング手法では、ＥＯＢブロック位置（ｅｏｂ＿ｘ，ｅｏｂ＿ｙ）が特定されると、列番号ｅｏｂ＿ｘ及び行番号ｅｏｂ＿ｙのコーディングは、コーディングプロセスの他の態様に関して使用される任意のスキャン順序とは無関係である。
【００７９】
ツリー８００は、バイナリ化、コンテキストモデリング、および量子化された変換係数の符号化および復号化のためのバイナリ算術コーディングのステップを使用するビデオコーディングシステムによって使用することができる。このプロセスは、コンテキスト適応型バイナリ算術コーディング（ＣＡＢＡＣ：ｃｏｎｔｅｘｔ−ａｄａｐｔｉｖｅ  ｂｉｎａｒｙ  ａｒｉｔｈｍｅｔｉｃ  ｃｏｄｉｎｇ）として参照され得る。例えば、量子化された変換係数ｘを符号化するために、コーディングシステムは以下のステップを実行し得る。量子化された変換係数ｘは、図６の量子化された変換ブロック６０４の任意の係数（例えば、係数６０８）とすることができる。
【００８０】
以下のステップは、列番号ｅｏｂ＿ｘおよび行番号ｅｏｂ＿ｙの両方に対して同様に実行される。説明を簡略化するために、列番号ｅｏｂ＿ｘに関するステップのみを説明する。
【００８１】
バイナリ化ステップでは、ツリー８００を使用して、ＥＯＢ係数の列番号ｅｏｂ＿ｘがバイナリ列に最初にバイナリ化される。バイナリツリー８００がトラバースされて、列番号ｅｏｂ＿ｘに対応するバイナリ列プレフィックスを生成する。例えば、列番号ｅｏｂ＿ｘが３の場合、バイナリツリー８００をトラバースすることにより生成されるプレフィックスは、ノード８０２に対応する１１１０である。別の例として、列番号ｅｏｂ＿ｘが４または５の場合、生成されるプレフィックスはノード８０４に対応する１１１１０である。ノード８０４の場合、列番号ｅｏｂ＿ｘが４（即ち、０のサフィックス）または５（即ち、１のサフィックス）であるかどうかを示すためにサフィックスも生成される。従って、列番号ｅｏｂ＿ｘが４の場合、バイナリ列１１１１００がコーディングされ、列番号ｅｏｂ＿ｘが５の場合、バイナリ列１１１１０１がコーディングされる。
【００８２】
コンテキスト導出ステップでは、コーディングされるべき各ビンに対して、コンテキストが導出される。コンテキストは、ブロックサイズ、プレーンタイプ（即ち、輝度または色度）、係数ｘのブロック位置、および以前に復号化された係数（例えば、可能な場合、左方および／または上方に隣接する（ｎｅｉｇｈｂｏｒｉｎｇ）係数）の１つまたは複数などの情報から導出することができる。その他の情報、より多くの情報、またはより少ない情報を使用して、コンテキストを導出することができる。
【００８３】
バイナリ算術コーディングステップでは、コンテキストが与えられると、例えば、バイナリ算術コーディングエンジンを使用することにより、ビンは、コンテキストに関連付けられた確率値とともにバイナリ符号語にコーディングされる。
【００８４】
上記したように、デカルト座標手法とインターリービング手法は、ＥＯＢ位置のコーディングに関して異なる手法を使用する。デカルト座標手法は、ブロック位置（ｅｏｂ＿ｘ，ｅｏｂ＿ｙ）を直接コーディングする。インターリービング手法は、（係数が有意係数であるかどうかを示す）ｓｉｇ＿ｆｌａｇ＿ｃｏｄｉｎｇを用いて、（有意係数が最後の有意係数であるかどうかを示す）ｌａｓｔ＿ｓｉｇ＿ｆｌａｇのコーディングをインターリーブする。
【００８５】
変換ブロックが非ゼロ係数が比較的少ない疎である場合、インターリービング手法がより効率的である。例えば、変換ブロックが、ブロック位置（４、５）において１つの非ゼロ係数のみを含んでいる場合、インターリービング手法は、１つのｌａｓｔ＿ｓｉｇ＿ｆｌａｇを正確に符号化および復号化する。一方、デカルト座標手法は、１２個のビンを符号化および復号化する（即ち、バイナリ決定）。１２個のビンは、上記の図８に関して説明したように、バイナリ列１１１１００（即ち、ｅｏｂ＿ｘ＝４）および１１１１０１（即ち、ｅｏｂ＿ｙ＝５）の符号化に対応する。
【００８６】
一方、ブロックが比較的多数の非ゼロ係数を含む場合、デカルト座標手法がより効率的である。例えば、最大の場合（即ち、ブロックの全ての係数がゼロでない場合）では、１６ｘ１６ブロックに関して、インターリービング手法を使用してコーディングされるｌａｓｔ＿ｓｉｇ＿ｆｌａｇｓの数は２５５である。一方、デカルト座標手法を使用することにより、１６ｘ１６ブロック内のｅｏｂ位置に対してコーディングされるビンの数は、ブロック位置（１５、１４）または（１４、１５）に対応するビンの数となる。上記したように、ＥＯＢが（１５、１５）にある場合、ｌａｓｔ＿ｓｉｇ＿ｆｌａｇをコーディングする必要がないことに留意されたい。値１４および１５は、ツリー８００を使用して、プレフィックス列１１１１１１１０およびサフィックス１０および１１、またはバイナリ列１１１１１１１０１０および１１１１１１１０１１にそれぞれバイナリ化される。これにより、合計２０個のビンがコーディングされる。このため、最大の場合において、デカルト座標手法は、インターリービング手法よりも計算的に処理量は少ない。
【００８７】
図９は、本開示の実施形態による、係数の変換ブロックの最後の非ゼロ係数の位置を符号化するプロセス９００のフローチャート図である。プロセス９００は、スキャン順序に従って変換ブロックの係数を符号化することができる。代替的に、プロセス９００は、変換ブロックの係数を符号化する別のプロセスによって呼び出されるか、または別のプロセスに埋め込まれることができる。プロセス９００は、ＥＯＢ位置に関する情報を符号化する。
【００８８】
プロセス９００は、図４の符号化器４００などの符号化器で実施することができる。プロセス９００は、例えば、送信局１０２などのコンピューティングデバイスによって実行することができるソフトウェアプログラムとして実施することができる。ソフトウェアプログラムは、メモリ２０４または二次ストレージ２１４などのメモリに格納された機械可読命令であって、ＣＰＵ２０２のようなプロセッサにより実行されて、コンピューティングデバイスにプロセス９００を実行させる機械可読命令を含むことができる。少なくともいくつかの実施形態では、プロセス９００は、図４の符号化器４００のエントロピー符号化ステージ４０８によって全体的または部分的に実行される。
【００８９】
プロセス９００は、図１０を参照して説明される。図１０は、本開示の実施形態によるスキャン順序１０００およびブロック１０５０の一例である。ブロック１０５０は、量子化された変換係数のブロックである。
【００９０】
スキャン順序１０００は、図６のスキャン順序６０２に関して説明したとおりである。例えば、スキャンインデックス１００２は、ブロック１０５０の係数１０５２（即ち、位置（６、０）における係数）が、スキャンインデックス値２１にあることを示し、スキャンインデックス１００４は、ブロック１０５０の係数１０５４（即ち、位置（２、２）における係数）が、スキャンインデックス値１２にあることを示し、スキャンインデックス１００６は、ブロック１０５０の係数１０５６（即ち、位置（６、２）における係数）が、スキャンインデックス値３７にあることを示す。係数１０５６は、スキャン順序１０００が与えられたときのブロック１０５０の最後の非ゼロ係数である。即ち、スキャンインデックス１００６に対応する係数（即ち、スキャンインデックス値３７）は、最後の非ゼロ係数である。
【００９１】
９０２において、プロセス９００は、最後の非ゼロ係数の位置を決定する。本開示で使用される「決定する」とは、何らかの方法で選択する、構築する、決定する、指定する、識別する、受信する、または任意の方法において他の決定を行うことを意味する。最後の非ゼロ係数の位置は、上記したブロック位置（ｅｏｂ＿ｘ，ｅｏｂ＿ｙ）に関して説明したとおりである。このため、位置は列値を含む（例えば、ＥＯＢ係数の列番号を示すｅｏｂ＿ｘ）。位置は行値を含む（例えば、ＥＯＢ係数の行番号を示すｅｏｂ＿ｙ）。本明細書では、列値と列番号は同じ意味で使用される。行値と行番号は同じ意味で使用される。
【００９２】
一例において、プロセス９００は、スキャン順序（例えば、スキャン順序１０００）に従ってブロック（例えば、ブロック１０５０）の係数をスキャンして、最後の非ゼロ係数を決定することができる。最後の非ゼロ係数が特定されると、最後の非ゼロ係数の位置が決定される。別の例では、プロセス９００は、別のモジュール、コーディングステージ、プロセスなどから位置を受信することにより、最後の非ゼロ係数の位置を決定することができる。
【００９３】
９０４において、プロセス９００は、係数の変換ブロックの非ゼロ係数を符号化する。非ゼロ係数は、変換ブロックの係数列と係数行において存在する。一例では、プロセス９００は、非ゼロ係数を符号化せずに、係数列および係数行を単に受信し得る。「受信する」とは、生成する、決定する、または何らかの方法で受信することを意味することができる。例えば、係数（例えば、スキャン順序値２３における係数）が符号化された後または符号化される前に、プロセス９００は、係数列（即ち、４）および係数行（即ち、２）を受信する。
【００９４】
９０６において（図１１のシーケンス１１１８〜１１２６に関して以下にさらに説明する）、非ゼロ係数が係数列において符号化されるべき最初の非ゼロ係数であるとの決定に応答して、プロセス９００は、係数列が最後の非ゼロ係数の列値に等しいかどうかを符号化する。９０８において（図１１のブロック１１１８に関して以下にさらに説明する）、非ゼロ係数が係数列において符号化されるべき最初の非ゼロ係数ではないとの決定に応答して、プロセス９００は、係数列が最後の非ゼロ係数の列値に等しいかどうかの符号化をスキップする。
【００９５】
９１０において（図１１のシーケンス１１２８〜１１３６に関して以下にさらに説明する）、非ゼロ係数が係数行において符号化されるべき最初の非ゼロ係数であるとの決定に応答して、プロセス９００は、係数行が最後の非ゼロ係数の行値に等しいかどうかを符号化する。９１２において（図１１のブロック１１２８に関して以下にさらに説明する）、非ゼロ係数が係数行において符号化されるべき最初の非ゼロ係数ではないとの決定に応答して、プロセス９００は、係数行が最後の非ゼロ係数の行値に等しいかどうかの符号化をスキップする。
【００９６】
プロセス９００の一例では、係数の変換ブロックは、イントラ予測を使用して予測された残差ブロックの変換ブロックである。即ち、プロセス９００は、イントラ予測ブロックでは使用することができるが、インター予測ブロックでは使用することができない。一例では、係数の変換ブロックは、輝度カラー成分のブロックの変換ブロックである。即ち、プロセスは、輝度ブロックには使用することができるが、色度には使用することができない。一例では、プロセス９００は、あるブロックサイズで使用できるが、他のブロックサイズでは使用することができない。例えば、プロセス９００は、サイズが４ｘ４の変換ブロックに使用することができるが、それより大きいサイズの変換ブロックに使用することができない。
【００９７】
図９に示すような最後の有意係数フラグのコーディングを改良した他の実施形態が利用可能である。実施形態では、最後の有意係数フラグのコーディングを改良した付加要素を追加したり、特定の要素を組み合わせたり、かつ／または特定の要素を削除したりすることができる。
【００９８】
図１１は、本開示の一実施形態による、デカルト座標系を使用して、係数の変換ブロックの最後の非ゼロ係数の位置を符号化するプロセス１１００のフローチャート図である。プロセス１１００は、非ゼロ変換係数を含む列が最後の非ゼロ係数を含む列であるかどうかを一度のみコーディング（即ち、符号化または復号化）する。プロセス１１００は、非ゼロ変換係数を含む行が最後の非ゼロ係数を含む行であるかどうかを一度のみコーディング（即ち、符号化または復号化）する。プロセス１１００は、スキャン順序に従って変換ブロックの係数をコーディングするプロセスによって、またはそれと組み合わせて使用することができる。
【００９９】
プロセス１１００のデカルト座標系は、変換ブロックのＤＣ係数において原点を有することができる。デカルト座標系の次元は、行および列である。変換ブロックの変換係数は、行値および列値に沿って配置される。例えば、変換ブロック１０５０において、行は行値０〜７を有し、列は値０〜７を有する。係数１０５４は、列値２および行値２において存在する。最後の非ゼロ係数（例えば、図１０の係数１０５６）の位置は、列値（例えば、列値６）および行値（例えば、行値２）を含む。上記したように、最後の非ゼロ係数は、スキャン順序に関して決定することができる。即ち、変換ブロック１０５０の係数がスキャン順序１０００に従ってスキャンされる場合、係数１０５６は、最後の非ゼロ係数である。例えば、スキャン順序１０００以外のスキャン順序が使用される場合、異なる係数（即ち、係数１０５６以外）が、最後の非ゼロ係数として識別されてもよい。
【０１００】
プロセス１１００は、図４の符号化器４００などの符号化器で実施することができる。プロセス１１００は、例えば、送信局１０２などのコンピューティングデバイスによって実行することができるソフトウェアプログラムとして実施することができる。ソフトウェアプログラムは、メモリ２０４または二次ストレージ２１４などのメモリに格納された機械可読命令であって、ＣＰＵ２０２のようなプロセッサにより実行されて、コンピューティングデバイスにプロセス１１００を実行させる機械可読命令を含むことができる。少なくともいくつかの実施形態では、プロセス１１００は、図４の符号化器４００のエントロピー符号化ステージ４０８によって全体的または部分的に実行される。
【０１０１】
プロセス１１００は、図５の復号化器５００などの復号化器において実施することができる。プロセス１１００は、例えば、受信局１０６などのコンピューティングデバイスによって実行することができるソフトウェアプログラムとして実施することができる。ソフトウェアプログラムは、メモリ２０４または二次ストレージ２１４などのメモリに格納された機械可読命令であって、ＣＰＵ２０２のようなプロセッサにより実行されて、コンピューティングデバイスにプロセス１１００を実行させる機械可読命令を含むことができる。少なくともいくつかの実施形態では、プロセス１１００は、図５の復号化器５００のエントロピー復号化ステージ５０２によって全体的または部分的に実行することができる。
【０１０２】
符号化器によって実施される場合、「コーディング」は、図４の圧縮ビットストリーム４２０などの符号化されたビットストリームにおける符号化を意味する。復号化器によって実施される場合、「コーディング」とは、図５の圧縮ビットストリーム４２０などの符号化されたビットストリームからの復号化を意味する。
【０１０３】
以下の説明では、サイズＮ×Ｎのブロック（例えば、変換ブロック１０５０）が想定されている。しかしながら、ブロックは、サイズＭｘＮ（ＭとＮは等しくない）の長方形ブロックとすることもできる。一次元配列ｕは、図６に関連して説明したとおりである。従って、ｕ［ｉ］は、任意のスキャン順序（例えば、図１０のスキャン順序１０００）に従うｉ番目のスキャン位置における変換係数を示す。例えば、ｕ［２１］（即ち、スキャン位置２１における係数の値（即ち、スキャンインデックス１００２））は、係数値−１（即ち、係数１０５２）である。
【０１０４】
スキャンインデックス（即ち、スキャン順序１０００の値）に関して、アレイスキャンは、ブロック１０５０における対応する列番号および行番号を提供することができる。このため、ｓｃａｎ［ｉ］は、スキャン位置ｉからブロック位置へのマッピングを示す。ブロック位置は、係数の列番号および行番号を含むタプルとすることができる（即ち、（ｃｉ、ｒｉ），ｃｉは列番号または列値を示し、ｒｉは行番号または行値を示す）。例えば、ｓｃａｎ［３７］は、タプル（６、２）を提供することができる。スキャンインデックスからブロック位置へのマッピングは、スキャンアレイ以外の手段によって提供することができる。例えば、スキャンインデックスを入力として受け取る機能（または、同様のもの）は、ブロックの位置を提供（例えば、返送）することができる。
【０１０５】
タプル（ｅｏｂ＿ｃ、ｅｏｂ＿ｒ）は、任意のスキャン順序に従う現在のブロック内の最後の有意係数のブロック位置（即ち、列値および行値）を示す。このため、図１０を参照すると、（ｅｏｂ＿ｃ、ｅｏｂ＿ｒ）は、タプル（６、２）によって与えられる。
【０１０６】
１１０２において、プロセス１１００は、行セットＲを空のセットに初期化し、列セットＣを空のセットに初期化する。行セットＲは、プロセス１１００によって既にアクセスされた行（即ち、行値）の軌跡を保持する。列セットＣは、プロセス１１００によって既にアクセスされた列（即ち、列値）の軌跡を保持する。この状況において、アクセス済み行とは、現在の非ゼロ係数が任意のスキャン順序でアクセスされるときに、現在の非ゼロ係数と同じ行にある別の非ゼロ係数が既に決定されていることを意味する。この状況において、アクセス済み列とは、現在の非ゼロ係数が任意のスキャン順序でアクセスされるときに、現在の非ゼロ係数と同じ列にある別の非ゼロ係数が既に決定されていることを意味する。例えば、スキャン順序１０００において、スキャンインデックス１０１０（即ち、スキャンインデックス値３）が処理される（即ち、係数１０６０に対応する）ときに、行０がアクセスされていたと決定される（即ち、行セットＲが行０を含む）。その理由は、別の非ゼロ係数（即ち、スキャンインデックス１００８に対応する係数１０５８）が既に同じ行（即ち、行０）にあると決定されており、係数１０５８および１０６０は両方とも同じ行０にあり、かつ、係数１０５８は、スキャン順序において係数１０６０の前に処理されるからである。
【０１０７】
１１０４において、スキャン位置ｉがゼロに初期化され、フラグＥＯＢ＿Ｃ＿ＦＯＵＮＤおよびＥＯＢ＿Ｒ＿ＦＯＵＮＤは、偽（即ち、値ゼロ）に設定される。スキャン位置ｉは、１次元配列ｕのインデックスとして使用される。フラグＥＯＢ＿Ｃ＿ＦＯＵＮＤは、ブロック終了係数と同じ列にある変換係数が処理された（即ち、スキャン順序に従ってアクセスされた）かどうかを示す。フラグＥＯＢ＿Ｒ＿ＦＯＵＮＤは、ブロック終了係数と同じ行にある変換係数が処理されたかどうかを示す。
【０１０８】
１１０６において、プロセス１１００は、スキャンインデックスｕ［ｉ］に対応する係数がゼロ係数であるか、または非ゼロ係数であるかを符号化して、ｓｉｇ［ｉ］を設定することができる。ｓｉｇデータ構造（例えば、配列、フラグなど）は、スキャンインデックスｉにおける係数がゼロか否かを示す。この例では、非ゼロ係数は、１の値で示される（即ち、ｓｉｇ［ｉ］＝１）。しかしながら、他の値も可能である。上記したように、符号化器において実施する場合、スキャンインデックスｕ［ｉ］に対応する係数がゼロであるか又は非ゼロであるかをコーディングすることは、係数がゼロであるか又は非ゼロであるか示すシンタックス要素（例えば、０または１ビット）を符号化されたビットストリームに出力することを意味する。復号化器において実施する場合、スキャンインデックスｕ［ｉ］に対応する係数がゼロであるか又は非ゼロであるかをコーディングすることは、係数がゼロであるか又は非ゼロであるかを示すシンタックス要素（例えば、０または１ビット）を符号化されたビットストリームから読み取ることを意味する。
【０１０９】
１１０８において、係数が非ゼロ係数でない場合（即ち、ｓｉｇ［ｉ］＝１）、プロセス１１００は１１１０に進み、それ以外の場合、プロセス１１００は１１１６に進む。換言すれば、スキャンインデックスｉにおける係数がゼロである場合、プロセス１１００は、１１１０において次の係数を処理するかどうかを決定し、それ以外の場合、プロセス１１００は現在の係数をさらに処理する。
【０１１０】
１１１０において、変換ブロックのすべての係数が処理された場合（即ち、スキャン位置ｉ＝Ｎ＊Ｎ−１）、または現在の係数がブロック終了係数である場合（即ち、ｃｉ＝ｅｏｂ＿ｃおよびｒｉ＝ｅｏｂ＿ｒ）、プロセス１１００は終了し、それ以外の場合、プロセスは１１１２に続く。１１１２において、プロセス１１００は、スキャン位置ｉをインクリメントして次の係数を処理する。
【０１１１】
１１１６において、プロセス１１００は、スキャン位置ｉにおける変換係数の列値（即ち、ｃｉ）および行値（即ち、ｒｉ）を決定する。列値および行値は、上記したアレイスキャンを使用して決定することができる。このため、１１１６において、タプル（ｃｉ、ｒｉ）が決定される。１１１７において、プロセス１１００は、シーケンス１１１８〜１１２６およびシーケンス１１２８〜１１３６によって与えられる２つのブランチを処理する。一例では、２つのブランチを順番に処理することができる。別の例では、２つのブランチを並列に処理することができる。
【０１１２】
１１１８において、最後の非ゼロ係数の列がまだ発見されておらず（即ち、ＥＯＢ＿Ｃ＿ＦＯＵＮＤ＝０）、かつ現在の係数の列（即ち、列値ｃｉ）がまだアクセスされていない場合（即ち、列値ｃｉが列セットＣに含まれていない場合）、プロセス１１００は１１２０に進み、それ以外の場合、シーケンス１１１８〜１１２６はスキップされる。
【０１１３】
１１２０において、プロセス１１００は、フラグＬＡＳＴ＿ＥＯＢ＿Ｃ＿ＦＬＡＧをコーディングすることができる。フラグＬＡＳＴ＿ＥＯＢ＿Ｃ＿ＦＬＡＧは、現在の非ゼロ係数の列が最後の非ゼロ係数の列であるかどうかを示す。例えば、符号化器によって実施される場合、プロセス１１００は値ｃｉ＝ｅｏｂ＿ｃを符号化することができる。このため、ブール値ｃｉ＝ｅｏｂ＿ｃに対応するビットを符号化することができる。復号化器において実施される場合、プロセス１１００は、フラグＬＡＳＴ＿ＥＯＢ＿Ｃ＿ＦＬＡＧを設定することができるシンタックス要素を復号化することができる。現在の係数の列が最後の非ゼロ係数の列と同じでない場合、ゼロ（０）をコーディングでき、それ以外の場合、１がコーディングされる。説明を繰り返すと、前述したように、符号化器によって実施される場合、コーディングとは、符号化されたビットストリームに符号化することを意味し、復号化器によって実施される場合、コーディングとは、符号化されたビットストリームから復号化することを意味する。
【０１１４】
１１２２において、列値ｃｉがアクセスされたことを示すために、列値ｃｉが列セットＣに追加されて、列値ｃｉを有する別の非ゼロ変換係数がアクセスされると／された場合、プロセス１１００はシーケンス１１１８〜１１２６をスキップすることができ、その結果、（１１２０において）列値ｃｉがブロックの最後の非ゼロ変換係数を含むかどうかを示す別の値をコーディングすることをスキップすることができる。
【０１１５】
１１２４において、列値ｃｉが最後の非ゼロ係数の列値に等しい場合（即ち、ｃｉ＝ｅｏｂ＿ｃである場合、または同等に、ＬＡＳＴ＿ＥＯＢ＿Ｃ＿ＦＬＡＧ＝１である場合）、プロセス１１００は、（１１２６において）フラグＥＯＢ＿Ｃ＿ＦＯＵＮＤを真（例えば、ＥＯＢ＿Ｃ＿ＦＯＵＮＤ＝１）に設定する。復号化器によって実施される場合、プロセス１１００は、１１２６において、列値ｃｉが最後の非ゼロ係数の列値（即ち、ｅｏｂ＿ｃ）であることを記録することもできる。プロセス１１００は、次に、１１１７の２つのブランチが完了すると、１１１０に進む。
【０１１６】
シーケンス１１２８〜１１３６において、プロセス１１００は、ブランチ１１１８〜１１３６のステップと同様のステップを実行する。ブロック１１２８は、ＥＯＢ＿Ｃ＿ＦＯＵＮＤ、列値ｃｉ、および列セットＣの代わりに、ＥＯＢ＿Ｒ＿ＦＯＵＮＤ、行値ｒｉ、および行セットＲがそれぞれ使用されることを除いて、ブロック１１１８と同じとすることができる。ブロック１１３０は、ＬＡＳＴ＿ＥＯＢ＿Ｃ＿ＦＬＡＧをコーディングする代わりに、プロセス１１００が、現在の非ゼロ係数の行が最後の非ゼロ係数の行であるかどうかを示すＬＡＳＴ＿ＥＯＢ＿Ｒ＿ＦＬＡＧをコーディングすることを除いて、ブロック１１２０と同じとすることができる。ブロック１１３２は、列セットＣおよび列値ｃｉの代わりに、行セットＲおよび行値ｒｉが使用されることを除いて、ブロック１１２２と同じとすることができる。ブロック１１３４は、列値ｃｉをｅｏｂ＿ｃと比較する代わりに、行値ｒｉが最後の非ゼロ係数ｅｏｂ＿ｒの行値と比較されることを除いて、ブロック１１２４と同じとすることができる。ブロック１１３６は、ＥＯＢ＿Ｃ＿ＦＯＵＮＤフラグを設定する代わりにＥＯＢ＿Ｒ＿ＦＯＵＮＤフラグが設定され、復号化器によって実施される場合、プロセス１１００は、行値ｒｉが最後の非ゼロ係数（即ち、ｅｏｂ＿ｒ）の行値であることを記録することができる点を除いて、ブロック１１２６と同じとすることができる。
【０１１７】
プロセス１１００は、次のように代替的に記述することができる。
ステップ１：２つの空のセットＲおよびＣを初期化する。さらに、ｉ＝０、ＥＯＢ＿Ｃ＿ＦＯＵＮＤ＝０、ＥＯＢ＿Ｒ＿ＦＯＵＮＤ＝０を初期化する。
【０１１８】
ステップ２：（ｕ［ｉ］！＝０）、即ち、スキャン位置ｉにおけるｓｉｇｎｉｆｉｃｅｎｔ＿ｃｏｅｆ＿ｆｌａｇ  ｓｉｇ［ｉ］符号化または復号化する。
ステップ３：ｓｉｇ［ｉ］＝１の場合、（ｃｉ，ｒｉ）＝ｓｃａｎ［ｉ］を決定し、以下を実行する。
【０１１９】
ａ．ＥＯＢ＿Ｃ＿ＦＯＵＮＤ＝０の場合、およびｃｉ＼∈Ｃの場合、（ｅｏｂｃ＝ｃｉ）であるか否かを示すＬＡＳＴ＿ＥＯＢ＿Ｃ＿ＦＬＡＧを符号化または復号化して、Ｃ＝Ｃ∪｛ｃｉ｝を設定する。ｅｏｂｃがｃｉと等しい場合（即ち、ＬＡＳＴ＿ＥＯＢ＿Ｃ＿ＦＬＡＧ＝１）、ＥＯＢ＿Ｃ＿ＦＯＵＮＤ＝１に設定し、ｅｏｂｃを（復号化器において）記録する。
【０１２０】
ｂ．ＥＯＢ＿Ｒ＿ＦＯＵＮＤ＝０の場合、およびｒｉ＼∈Ｒの場合、（ｅｏｂｒ＝ｒｉ）であるか否かを示すＬＡＳＴ＿ＥＯＢ＿Ｒ＿ＦＬＡＧを符号化または復号化して、Ｒ＝Ｒ∪｛ｒｉ｝を設定する。ｅｏｂｒがｒｉと等しい場合（即ち、ＬＡＳＴ＿ＥＯＢ＿Ｒ＿ＦＬＡＧ＝１）、ＥＯＢ＿Ｒ＿ＦＯＵＮＤ＝１に設定し、ｅｏｂｒを（復号化器において）記録する。
【０１２１】
ステップ４：ｉを１だけインクリメントする。
ステップ５：次の２つの条件のいずれかが満たされるまで、ステップ２〜４を繰り返す。
【０１２２】
Ｉ＝Ｎ＊Ｎ、または
ｅｏｂｃ＝ｃｉ−１、およびｅｏｂｒ＝ｒｉ−１の両方。
以下の表１は、プロセス１１００のブランチ１１１７による、スキャン順序１０００に従うブロック１０５０の非ゼロ係数の処理の結果を示している。上記したように、スキャン順序１０００が与えられたときの、最後の非ゼロ係数は、係数１０５６である。
【０１２３】
【表２】
2020522181.tif 000004
スキャン順序１０００を使用すると、１次元配列ｕは、値ｕ［０−３７］＝｛８，２，３，０，０，０，１，０，０，０，０，０，１，０，０，０，０，０，０，０，−１，２，１，０，０，０，０，０，０，０，０，０，１，１，０，０，１｝を含む。値ｕ［０−３７］は、最後の非ゼロ係数（即ち、係数１０５６）までの、および最後の非ゼロ係数（即ち、係数１０５６）を含むｕ配列のサブセットである。値ｕ［０−３７］は、１１個の非ゼロ係数を含む。表１から分かるように、ＬＡＳＴ＿ＥＯＢ＿Ｃ＿ＦＬＡＧは４回コーディングされ、ＬＡＳＴ＿ＥＯＢ＿Ｒ＿ＦＬＡＧは４回コーディングされている。対照的に、インターリービング手法を実施するシステムは、非ゼロ係数が最後の非ゼロ係数であるかどうかについて１１回コーディングする。デカルト座標手法を実施するシステムは、コンテキストベースのコーディングを使用して、１１１１１００の７個のビン（即ち、列値６）および１１０の３個のビン（即ち、行値２）をコーディングする。
【０１２４】
一実施形態では、プロセス１１００は、列セットＣがＮ−２個の要素を含む場合（即ち、列セットＣの基数｜Ｃ｜がＮ−１に等しい場合）、１１２０においてフラグＬＡＳＴ＿ＥＯＢ＿Ｃ＿ＦＬＡＧのコーディングをスキップすることができる。列セットＣがＮ−１個の要素を含み、プロセス１１００がブロック１１２０にある場合、それは、列セットＣにおけるＮ−１個の列値のいずれも最後の非ゼロ係数を含まない場合でなければならない。スキャン順序によっては、列セットＣにおける列インデックスが必ずしも順番に追加されるとは限らない。即ち、スキャン順序によっては、小さいインデックスの前に大きいインデックスが追加される場合がある。さらに、プロセス１１００は１１２０にあるため、それは、列値ｃｉが少なくとも１つの非ゼロ係数を含んでいる場合でなければならない（ブロック１１０８においてｓｉｇ［ｉ］＝１であるため）。このため、列セットＣの外側にある最後の残りの列でもある現在の列は、ブロックの最後の非ゼロ係数を含んでいると推測することができる。このため、ＬＡＳＴ＿ＥＯＢ＿Ｃ＿ＦＬＡＧのコーディングをスキップすることができる。同様に、プロセス１１００は、行セットＲがＮ−１個の要素を含む場合（即ち、行セットＲの基数｜Ｒ｜がＮ−１に等しい場合）、１１３０においてフラグＬＡＳＴ＿ＥＯＢ＿Ｒ＿ＦＬＡＧのコーディングをスキップすることができる。
【０１２５】
ＮｘＮブロックのすべての係数が非ゼロ係数である場合、本開示による実施形態は、Ｎ−１個のＬＡＳＴ＿ＥＯＢ＿Ｃ＿ＦＬＡＧ（即ち、列ごとに１つのフラグ）およびＮ−１個のＬＡＳＴ＿ＥＯＢ＿Ｒ＿ＦＬＡＧ（即ち、行ごとに１つのフラグ）をコーディング（符号化および／または復号化）する。対照的に、インターリービング手法は、Ｎ＊Ｎ−１個のＬＡＳＴ＿ＳＩＧ＿ＦＬＡＧ（即ち、非ゼロ係数ごとに１つのフラグ）をコーディングする。デカルト座標手法は、Ｎ＝４の場合は６個のビン（列値と行値の各々に対して３個のビン）、Ｎ＝８の場合は１２個のビン、Ｎ＝１６の場合は１８個のビン、Ｎ＝３２の場合は２４個のビンをコーディングする。以下の表２は、Ｎの様々な値に対する最大処理量（即ち、値の数）をまとめたものである。
【０１２６】
【表３】
2020522181.tif 000005
表２に示すように、本開示による実施形態は、ＮｘＮブロック内で符号化および復号化される最大数のビンにおいて測定される最大処理量に関して、インターリービング手法を改善することができる。
【０１２７】
上述したように、表２は、最大処理量において、本開示による実施形態とインターリービング手法との間の差異が、ブロックサイズが増加するにつれて増大することを示している。さらに、上述したように、インターリービング手法は、疎な変換ブロックに対してより効果的に機能する。このため、本開示による実施形態は、符号化手法（即ち、本明細書で開示される手法とインターリービング手法との間）を選択的に選択することができる。例えば、小さなブロック（例えば、４ｘ４ブロック）の場合、インターリービング手法を使用して、ｅｏｂ位置をコーディング（即ち、符号化および／または復号化）することができ、本明細書で開示する手法は、より大きなブロック（例えば、８ｘ８ブロック以上）に対して使用することができる。別の例では、使用する手法の選択は、色成分に依存することができる。例えば、本明細書で開示される手法は、輝度ブロックに使用することができ、デカルト座標手法またはインターリービング手法は、色度ブロック（通常は疎である）に使用することができる。さらに別の例では、選択は、ピクチャタイプおよび／またはコーディングモードに依存することができる。例えば、本明細書で開示される手法は、イントラコーディングされたブロックに使用することができ、デカルト座標手法またはインターリービング手法は、インターコーディングされたブロックに使用することができる。別の例では、選択は、選択をデータ自体に適応させる、以前に復号化されたブロックからの統計に依存することができる。さらなる例では、選択は、画像／フレームヘッダで通知することができ、画像／フレーム内のブロックについては、それらのブロックに関して通知された選択を使用することができる。
【０１２８】
図１２は、本開示の一実施形態による、デカルトグループ化座標系を使用して、係数の変換ブロックの最後の非ゼロ係数の位置をコーディングするプロセス１２００のフローチャート図である。デカルトグループ化座標系では、変換ブロックの列値は列グループにグループ化され、変換ブロックの行値は行グループにグループ化される。プロセス１２００は、列値のグループ内で、列値およびインデックスを含む列グループを示すことによって、最後の非ゼロ係数の列値をコーディングすることができる。プロセス１２００は、非ゼロ変換係数を含む列グループが非ゼロ変換係数を含むかどうかをコーディングする。
【０１２９】
プロセス１２００は、プロセス１１００の態様を共有することができる。プロセス１１００のブロックとして番号付けされたプロセス１２００におけるブロックに関する説明は省略する。
【０１３０】
一例では、プロセス１２００は、変換ブロックが比較的多数の非ゼロ変換係数を含む場合に使用することができる。即ち、プロセス１２００は、変換ブロックが密であるときに使用することができる。一例では、ブロック内の非ゼロ変換係数の数が所定のしきい値を超えると、変換ブロックの最後の非ゼロ係数の位置をコーディングするためにプロセス１２００を実行することができ、それ以外の場合、プロセス１１００、または本明細書で開示される別のプロセスを実行することができる。代替的に、実施形態は、プロセス１１００および１２００を組み込み得る。従って、非ゼロ変換係数の数が所定のしきい値を超えると、プロセス１２００の固有の態様を実行でき、それ以外の場合、プロセス１１００の固有の態様を実行することができる。
【０１３１】
プロセス１２００は、密な変換ブロックの場合にプロセス１１００よりもコーディングの改善を提供することができる。プロセス１２００は、（上記した）最大処理量に関してデカルト座標手法の性能に一致するか、または近づくことができる。
【０１３２】
列グループおよび行グループを説明するために、サイズＮｘＮのブロックの場合、Ｐが番号｛０、…、Ｎ−１｝からグループ番号｛０、１、…、Ｇ−１｝へのマッピングを示すものとする。ここで、Ｇは、グループの数である。一例では、列値に対して第１のマッピングを定義し、行値に対して第２のマッピングを定義することができる。Ｎ≦３２の例では、マッピングＰは、以下のように与えられる。
【０１３３】
Ｐ（ｉ）＝ｉ    ｉ＜４の場合
Ｐ（ｉ）＝４    ４≦ｉ＜６の場合
Ｐ（ｉ）＝５    ６≦ｉ＜８の場合
Ｐ（ｉ）＝６    ８≦ｉ＜１２の場合
Ｐ（ｉ）＝７    １２≦ｉ＜１６の場合
Ｐ（ｉ）＝８    １６≦ｉ＜２４の場合
Ｐ（ｉ）＝９    ２４≦ｉ＜３２の場合
上記のマッピングを使用して、列値１５（即ち、１２≦ｉ＜１６）を列グループ番号７（即ち、Ｐ（１５）＝７）にマッピングすることができ、行値３（即ち、ｉ＜４）を行グループ番号３（即ち、Ｐ（３）＝３）にマッピングすることができる。より多くのグループまたはより少ないグループを利用することができる。グループの数は、ブロックサイズによって異なる。Ｎ＝６４の例では、上記のマッピングは、以下のものを含むように拡張することができる。
【０１３４】
Ｐ（ｉ）＝１０    ３２≦ｉ＜４８の場合
Ｐ（ｉ）＝１１    ４８≦ｉ＜６４の場合
上記のマッピングを使用すると、図１０の係数１０５６は、列グループ番号５にマップされ、かつ列グループ番号５内の０番目の列にある。列グループ番号５は、ブロック１０５０の列６および７を含む。様々なマッピングが利用可能である。マッピングが異なると、クロック終了係数に関連するシンタックス要素がコーディングされる回数に関して、最大処理量が異なることとなる可能性がある。
【０１３５】
プロセス１２００とプロセス１１００との間の違いについて説明する。図１２には示されていないが、プロセス１２００は、最後の非ゼロ係数の列グループｅｏｂｃおよび行グループｅｏｂｒを決定することができる。
【０１３６】
１２０２において、プロセス１２００は、列グループセットＣを空のセットに初期化し、行グループセットＲを空のセットに初期化する。
列グループセットＣは、プロセス１２００が既にアクセスした列グループの軌跡を保持する。この状況において、アクセス済み列グループとは、現在の非ゼロ係数が任意のスキャン順序でアクセスされるときに、現在の非ゼロ係数と同じ列グループにある別の非ゼロ係数が既に決定されていることを意味する。例えば、スキャン順序１０００において、（即ち、ブロック位置（４、２）の係数値１に対応する）スキャンインデックス値２３が処理されるときに、列グループ番号４がアクセスされていたと決定される（即ち、列グループセットＣが列グループ番号４を含む）。その理由は、別の非ゼロ係数（即ち、スキャンインデックス値２２に対応するブロック位置（５、１）における係数）が既に同じ列グループ（即ち、列グループ４）にあると決定されているためである。
【０１３７】
行グループセットＲは、プロセス１２００が既にアクセスした行グループの軌跡を保持する。この状況において、アクセス済み行グループとは、現在の非ゼロ係数が任意のスキャン順序でアクセスされるときに、現在の非ゼロ係数と同じ行グループにある別の非ゼロ係数が既に決定されていることを意味する。
【０１３８】
図１２のブロック１１１６の後、プロセス１２００は１２１７に進む。１２１７において、プロセス１２００は、シーケンス１２１８〜１２２７およびシーケンス１２２８〜１２３７によって与えられる２つのブランチを処理する。一例では、２つのブランチを順番に処理することができる。別の例では、２つのブランチを並列に処理することができる。
【０１３９】
１２１８において、最後の非ゼロ係数の列グループがまだ発見されておらず（即ち、ＥＯＢ＿Ｃ＿ＦＯＵＮＤ＝０）、かつ現在の係数の列値を含む列グループ（即ち、列グループＰ（ｃｉ））がまだアクセスされていない場合（即ち、列グループ値Ｐ（ｃｉ）が列グループセットＣに含まれていない場合）、プロセス１２００は１１２０に進む。それ以外の場合、シーケンス１２２０〜１１２７はスキップされる。
【０１４０】
１２２０において、プロセス１２００はフラグＬＡＳＴ＿ＥＯＢ＿Ｃ＿ＦＬＡＧをコーディングすることができる。フラグＬＡＳＴ＿ＥＯＢ＿Ｃ＿ＦＬＡＧは、現在の非ゼロ係数の列グループが最後の非ゼロ係数を含む列グループであるかどうかを示す。例えば、符号化器によって実施される場合、プロセス１２００は値Ｐ（ｃｉ）＝Ｐ（ｅｏｂｃ）を符号化することができる。復号化器において実施される場合、プロセス１１００は、フラグＬＡＳＴ＿ＥＯＢ＿Ｃ＿ＦＬＡＧを設定することができるシンタックス要素を復号化することができる。現在の係数の列グループが最後の非ゼロ係数の列グループと同じでない場合、ゼロ（０）をコーディングすることができ、それ以外の場合、１がコーディングされる。説明を繰り返すと、前述したように、符号化器によって実施される場合、コーディングとは、符号化されたビットストリームに符号化することを意味し、復号化器によって実施される場合、コーディングとは、符号化されたビットストリームから復号化することを意味する。
【０１４１】
１２２２において、列グループＰ（ｃｉ）がアクセスされたことを示すために、列グループ値Ｐ（ｃｉ）が列セットＣに追加されて、列グループ値Ｐ（ｃｉ）を有する別の変換係数がアクセスされると／された場合、プロセス１２００は、シーケンス１２２０〜１２２７をスキップすることができ、その結果、（１２２０において）列グループＰ（ｃｉ）がブロックの最後の非ゼロ変換係数を含むかどうかを示す別の値をコーディングすることをスキップすることができる。
【０１４２】
１２２４において、列グループ値Ｐ（ｃｉ）が最後の非ゼロ係数の列グループ値に等しい場合（即ち、Ｐ（ｃｉ）＝Ｐ（ｅｏｂ＿ｃ）の場合、または同等に、ＬＡＳＴ＿ＥＯＢ＿Ｃ＿ＦＬＡＧ＝１の場合）、プロセス１２００は、（１２２６において）フラグＥＯＢ＿Ｃ＿ＦＯＵＮＤを真（例えば、ＥＯＢ＿Ｃ＿ＦＯＵＮＤ＝１）に設定する。復号化器によって実施される場合、プロセス１２００は、１２２６において、列グループ値Ｐ（ｃｉ）が最後の非ゼロ係数の列グループ値（即ちＰ（ｅｏｂｃ））であることを記録することもできる。１２２７において、プロセス１２００は、最後の非ゼロ係数ｅｏｂｃの列を再構築するために、Ｐ（ｃｉ）≧４のときに、追加のビットをコーディングする。例えば、図１０を参照すると、最後の非ゼロ係数（即ち、係数１０５６）は列グループ番号５（上記のマッピングによる列値６及び７を含む）にあり、かつグループ内の最初の列にあるため、プロセス１２００は、追加のビット（例えば、ゼロ０の値）をコーディングすることができる。１２２７においてコーディングされた追加ビットは、グループ内の列数に依存する。１２１７の２つのブランチが完了すると、プロセス１２００は１１１０に進む。
【０１４３】
シーケンス１２２８〜１２３７において、プロセス１２００は、ブランチ１２１８〜１２３７のステップと同様のステップを実行する。ブロック１２２８は、ＥＯＢ＿Ｃ＿ＦＯＵＮＤ、列グループＰ（ｃｉ）、および列グループセットＣの代わりに、ＥＯＢ＿Ｒ＿ＦＯＵＮＤ、行グループＰ（ｒｉ）、および行グループセットＲが使用されることを除いて、ブロック１２１８と同じとすることができる。ブロック１２３０は、プロセス１２２０は、ＬＡＳＴ＿ＥＯＢ＿Ｃ＿ＦＬＡＧをコーディングする代わりに、現在の非ゼロ係数の行グループが最後の非ゼロ係数の行グループであるかどうかを示すＬＡＳＴ＿ＥＯＢ＿Ｒ＿ＦＬＡＧをコーディングすることを除いて、ブロック１２２０と同じとすることができる。ブロック１２３２は、列グループセットＣおよび列グループ値Ｐ（ｃｉ）の代わりに、行グループセットＲおよび行グループ値Ｐ（ｒｉ）が使用されることを除いて、ブロック１２２２と同じとすることができる。ブロック１２３４は、列グループ値Ｐ（ｃｉ）を最後の非ゼロ係数の列グループ値（Ｐ（ｅｏｂｃ）の列グループ値と比較する代わりに、行グループ値Ｐ（ｒｉ）が最後の非ゼロ係数（Ｐ（ｅｏｂｒ））の行グループ値と比較されることを除いて、ブロック１２２４と同じとすることができる。ブロック１２３６は、フラグＥＯＢ＿Ｃ＿ＦＯＵＮＤの代わりに、フラグＥＯＢ＿Ｒ＿ＦＯＵＮＤを除いて、ブロック１２２６と同じとすることができる。ブロック１２３７は、追加のビットが最後の非ゼロ係数の行を再構築するためにコーディングされることを除いて、ブロック１２２７と同じとすることができる。
【０１４４】
図１３は、本開示の実施形態による、極座標系を使用して、係数の変換ブロックの最後の非ゼロ係数の位置をコーディングするプロセス１３００のフローチャート図である。プロセス１３００は、上述したプロセス１１００および１２００に類似している。しかしながら、プロセス１３００は極座標系を使用する。プロセス１３００の極座標系は、図１５および図１０のブロック１０５０に関してさらに説明される。
【０１４５】
図１５は、本開示の実施形態による極座標系１５００の一例である。図１５は、図１０のスキャン順序１０００の複製である。極座標系１５００は、原点および対角線によって特徴付けることができる。一例において、原点は、ブロック１０５０のＤＣ係数（即ち、係数１０５８）とすることができる。即ち、原点は、スキャンインデックス値０（即ち、スキャンインデックス１５０４）に対応することができる。
【０１４６】
上述したように、図１０のブロック１０５０の各係数は、デカルト位置（列、行）に配置されている。例えば、係数１０５６は、デカルト位置（６、２）に存在する。極座標系１５００の反対角線は、同じ値（列＋行）を有するブロック１０５０の係数が同じ反対角線上にあると見なされるような線とすることができる。
【０１４７】
例えば、反対角線１５０２は、列＋行＝１を有する係数を含む。このため、スキャンインデックス値１（ブロック位置（０、１）における係数に対応）とスキャンインデックス値２（ブロック位置（１、０）における係数に対応）に対応する係数は、同じ反対角線上にある（即ち、反対角線１５０２）。
【０１４８】
別の例として、反対角線１５０６は、列＋行＝４を有するブロック１０５０の係数を含む。即ち、反対角線１５０６は、デカルト位置（４、０）、（３、１）、（２、２）、（１、３）、および（０、４）における係数にそれぞれ対応するスキャン位置１０、１１、１２、１３、および１４における係数を含む。同様に、反対角線１５０８は、列＋行＝８を有するブロック１０５０の係数を含む。即ち、反対角線１５０８は、デカルト位置（７、１）、（６、２）、（５、３）、（４、４）、（３、５）、（２、６）、および（１、７）における係数にそれぞれ対応するスキャン位置３６、３７、３８、３９、４０、４１、および４２における係数を含む。
【０１４９】
極座標系１５００において、係数は、係数および対角線上の係数の位置を含む反対角線によって記述される。即ち、係数はタプル（反対角線、位置）によって記述することができる。一例では、位置は係数の行番号によって指定することができる。別の例では、位置は係数の列番号によって指定することができる。位置を記述するための他のオプションを利用することができる。
【０１５０】
このため、変換ブロック内の最後の非ゼロ係数の位置（例えば、図１０のスキャンインデックス１００６に対応する係数１０５６）は、タプル（ｅｏｂｄ，ｅｏｂａ）を使用して記述することができる。係数１０５６の反対角線は、ｅｏｂｄ＝６＋２＝８によって与えることができる。係数の列番号が位置ｅｏｂａに使用される場合、係数１０５６は、タプル（８、６）によって記述することができる。係数の行番号が位置ｅｏｂａに使用される場合、係数１０５６は、タプル（８、２）によって記述することができる。以下の説明では、反対角線に沿った位置は、係数の行番号によって与えられるものであると想定されている。ＤＣ位置を原点とすると、極座標系１５００は、極座標系の離散バージョンとみなすことができる。図１３には示されていないが、プロセス１３００は、最後の非ゼロ係数の反対角線ｅｏｂｄおよび位置ｅｏｂａを決定することができる。
【０１５１】
プロセス１３００は、非ゼロ係数を含む反対角線がスキャン順序が任意のブロックの最後の非ゼロ係数を含む反対角線であるかどうかを一度コーディングする。プロセス１３００は、最後の非ゼロ係数を含む反対角線上の現在の非ゼロ係数について、現在の非ゼロ係数が最後の非ゼロ係数であるかどうかをコーディングする（または推測することができる）。プロセス１３００は、図１１のプロセス１１００と同じ一部のブロックを含む。説明を簡略化するために、同じ番号のブロックの説明を省略する。
【０１５２】
１３０２において、プロセス１３００は、対角セットＤを空のセットに初期化する。対角セットＤは、プロセス１３００によって既にアクセスされた反対角線の軌跡を保持する。この状況において、アクセスされる反対角線は、現在の非ゼロ係数が任意のスキャン順序でアクセスされるときに、別の非ゼロ係数が現在の非ゼロ係数と同じ反対角線に含まれるように既に決定されていることを意味する。例えば、スキャン順序１０００では、スキャンインデックス値２（即ち、ブロック位置（１、０）における係数値３に対応する）が処理されると、反対角線１（即ち、１＋０）がアクセスされたものとして決定される（即ち、対角セットＤは値２を有する反対角線を含む）。この理由は、別の非ゼロ係数（即ち、スキャンインデックス値１に対応するブロック位置（０、１）における係数）が反対角線（即ち、反対角線値１）に含まれるものとして既に決定されているからである。
【０１５３】
１３０４において、スキャン位置ｉがゼロに初期化され、フラグＥＯＢ＿Ｄ＿ＦＯＵＮＤおよびフラグＥＯＢ＿Ａ＿ＦＯＵＮＤは、それぞれ偽（値ゼロなど）に設定される。スキャン位置ｉは、１次元配列ｕのインデックスとして使用される。フラグＥＯＢ＿Ｄ＿ＦＯＵＮＤは、ブロック終了係数と同じ反対角線上にある変換係数が処理されたかどうか（即ち、スキャン順序に従ってアクセスされたかどうか）を示す。フラグＥＯＢ＿Ａ＿ＦＯＵＮＤは、最後の非ゼロ係数の反対角線上の現在の変換係数の位置が最後の非ゼロ係数の位置であるかどうかを示す。
【０１５４】
１３１７において、プロセス１３００は、現在の係数に関する反対角線値を計算する。現在の係数は、スキャン位置ｉのスキャンインデックス値に対応する変換ブロックの係数である。１１１６において決定された列値（即ち、ｃｉ）および行値（即ち、ｒｉ）を使用して、プロセス１３００は、現在の反対角線ｄｉをｄｉ＝ｃｉ＋ｒｉとして計算する。
【０１５５】
１３１８において、プロセス１３００が、最後の非ゼロ係数を含む反対角線が決定されておらず（即ち、フラグＥＯＢ＿Ｄ＿ＦＯＵＮＤ＝０）、かつ現在の反対角線ｄｉがアクセスされていない（即ち、値ｄｉがセットＤ内にない）と決定された場合、プロセス１３００は１３２０に進み、それ以外の場合、プロセス１３００は１３２８に進む。
【０１５６】
１３２０において、プロセス１３００はフラグＬＡＳＴ＿ＥＯＢ＿Ｄ＿ＦＬＡＧをコーディングする。フラグＬＡＳＴ＿ＥＯＢ＿Ｄ＿ＦＬＡＧは、現在の非ゼロ係数の反対角線が最後の非ゼロ係数の反対角線であるかどうかを示す。例えば、符号化器によって実施される場合、プロセス１３００は、値ｄｉ＝ｅｏｂｄを符号化することができる。復号化器において実施される場合、プロセス１３００は、フラグＬＡＳＴ＿ＥＯＢ＿Ｄ＿ＦＬＡＧを設定することができるシンタックス要素を復号化することができる。現在の係数の反対角線が最後の非ゼロ係数の反対角線と同じでない場合、ゼロ（０）をコーディングすることができ、それ以外の場合、１がコーディングされる。繰り返すと、前述したように、符号化器によって実施される場合、コーディングとは、符号化されたビットストリームに符号化することを意味し、復号化器によって実施される場合、コーディングとは、符号化されたビットストリームから復号化することを意味する。
【０１５７】
１３２２において、反対角値ｄｉがアクセスされたことを示すために、現在の係数の反対角線値ｄｉが反対角セットＤに追加されて、同じ反対角線ｄｉを有する別の変換係数がアクセスされると／された場合に、プロセス１３００は、ブランチ１３２０−１３２６をスキップし、その結果、（１３２０において）反対角値ｄｉがブロックの最後の非ゼロ変換係数を含むかどうかを示す別の値をコーディングすることをスキップすることができるようにする。
【０１５８】
１３２４において、反対角線値ｄｉが最後の非ゼロ係数の反対角線値に等しい場合（即ち、ｄｉ＝ｅｏｂｄの場合、または同等に、ＬＡＳＴ＿ＥＯＢ＿Ｄ＿ＦＬＡＧ＝１の場合）、プロセス１３００は（１３２６）ＥＯＢ＿Ｄ＿ＦＯＵＮＤフラグを真（例えば、ＥＯＢ＿Ｄ＿ＦＯＵＮＤ＝１）に設定し、それ以外の場合、プロセス１３００は１３２８に進む。復号化器によって実施される場合、１３２６において、プロセス１３００は、反対角線値ｄｉが最後の非ゼロ係数（即ち、ｅｏｂｄ）の反対角線値であることを記録することもできる。次に、プロセス１３００は１３２８に進む。
【０１５９】
１３２８において、プロセス１３００が、ＥＯＢ＿Ｄ＿ＦＯＵＮＤが設定されている（即ち、ＥＯＢ＿Ｄ＿ＦＯＵＮＤ＝１）ことを決定した場合、プロセス１３００は１３３０に進み、それ以外の場合、プロセス１３００は１１１２に進む。シーケンス１３３０〜１３３８では、プロセス１３００は、反対角線上の現在の非ゼロ係数の位置が最後の非ゼロ係数の位置であるかどうかをコーディングまたは推測する。１３２８において、フラグＥＯＢ＿Ｄ＿ＦＯＵＮＤが設定されている場合、反対角線値ｄｉは、最後の非ゼロ係数（即ち、ｅｏｂｄ）の反対角線値であることも意味する。また、それは、現在の反対角線が最後の非ゼロ係数を含んでいるため、後続の反対角線がゼロ係数のみを含んでいることも意味する。サブシーケンスの反対角線は、任意の反対角線ｄｉ＋ｋであり、ｋはゼロ（０）より大きい値である。
【０１６０】
１３３０において、プロセス１３００は、現在の係数位置（ｃｉ、ｒｉ）が反対角線ｄｉの最後の位置であるかどうかを決定する。最後の位置でない場合、プロセスは１３３４に進む。最後の位置である場合、１３３２において、プロセス１３００は、（符号化器による符号化または復号化器による復号化の代わりに）最後の非ゼロ係数（即ち、ｅｏｂａ）の位置が現在の係数の行値と同じであると推測することができる。即ち、プロセス１３００は、ｅｏｂａがｒｉに等しいと推測することができる。一例では、プロセス１３３０は、すべてのｋ＞０についてｄｉ＋ｋがｄｉに等しくないと決定することにより、現在の係数位置（ｃｉ、ｒｉ）が反対角線ｄｉの最後の位置であると決定することができる。プロセス１３００は、次に１１１２に進む。
【０１６１】
１３３４において、プロセス１３００は、フラグＬＡＳＴ＿ＥＯＢ＿Ａ＿ＦＬＡＧをコーディングする。フラグＬＡＳＴ＿ＥＯＢ＿Ａ＿ＦＬＡＧは、現在の非ゼロ係数の反対角線上の位置が最後の非ゼロ係数の位置であるかどうかを示す。例えば、符号化器によって実施される場合、プロセス１３００は、値ｒｉ＝ｅｏｂａを符号化することができる。復号化器において実施される場合、プロセス１３００は、フラグＬＡＳＴ＿ＥＯＢ＿Ａ＿ＦＬＡＧを設定することができるシンタックス要素を復号化することができる。現在の係数の反対角線上の位置が最後の非ゼロ係数の反対角線上の位置と同じでない場合、ゼロ（０）をコーディングすることができ、それ以外の場合、１がコーディングされる。
【０１６２】
１３３６において、プロセス１３００は、位置の値ｒｉが最後の非ゼロ係数の反対角線ｄｉ上の位置の値に等しいかどうか（即ち、ｒｉ＝ｅｏｂｒの場合、または同等に、ＬＡＳＴ＿ＥＯＢ＿Ａ＿ＦＬＡＧ＝１の場合）を決定する。等しくない場合、プロセス１３００は１１１２に進む。等しい場合、プロセス１３００は、（１３３８において）フラグＥＯＢ＿Ａ＿ＦＯＵＮＤを真（例えば、ＥＯＢ＿Ａ＿ＦＯＵＮＤ＝１）に設定する。復号化器によって実施される場合、プロセス１３００は、１３３８において、行値ｒｉが最後の非ゼロ係数（即ちｅｏｂｒ）の反対角線に沿った位置であることを記録することもできる。次に、プロセス１３００は、１１１２に進む。
【０１６３】
１３１２において、変換ブロックのすべての係数が処理された場合（即ち、スキャン位置ｉ＝Ｎ＊Ｎ）、または最後の非ゼロ変換係数の反対角線がアクセスされ（即ち、ＥＯＢ＿Ｄ＿ＦＯＵＮＤ＝１）、かつ反対角線上の最後の非ゼロ位置の位置が発見された場合（即ち、ＥＯＢ＿Ａ＿ＦＯＵＮＤ＝１）、プロセス１３００は終了し、それ以外の場合、プロセスは１１０６に続く。
【０１６４】
上述したように、プロセス１３００は、ＥＯＢ＿Ｄ＿ＦＯＵＮＤ＝１であり（即ち、現在の反対角線が最後の非ゼロ係数を含む反対角線である）、かつ現在の係数位置（ｃｉ、ｒｉ）が反対角線の最後の位置である場合、現在の係数が非ゼロ係数であることを（符号化器による符号化または復号化器による復号化の代わりに）推測することができる。従って、プロセス１３００は、値ｓｉｇ［ｉ］の符号化または復号化するコストを節約することができる。
【０１６５】
図１４は、本開示の実施例による、係数グループ座標系を使用して、係数の変換ブロックの最後の非ゼロ係数の位置をコーディングするプロセス１４００のフローチャート図である。係数グループ座標系は、変換ブロックを変換係数のグループに分割する。係数グループ座標系の第１の次元は量子化された変換係数のグループとすることができ、第２の次元はグループ内の位置とすることができる。係数グループ座標系は、すべてのスキャン位置｛０、…、Ｎ＊Ｎ−１｝を多数の重複しないグループ｛Ｇ０，．．．，ＧＫ｝に分割することができる。ここで、Ｋは、Ｎ＊Ｎ−１より小さい正の整数である。以下の説明では、グループに係数が含まれていると記載することは、グループに係数のスキャンインデックスが含まれていると記載することと同じである。同様に、非ゼロ係数のグループ番号は、非ゼロ係数のスキャンインデックスを含むグループ番号と同じである。
【０１６６】
係数グループ｛Ｇ０，．．．，ＧＫ｝が与えられると、変換ブロック内の最後の非ゼロ係数の位置ｅｏｂは、（ｅｏｂｇ，ｅｏｂａ）を使用して記述することができ、ｅｏｂｇはブロック終了係数を含むグループＧｋのインデックスｋを示し、ｅｏｂａはグループＧｋ内のオフセット位置を示す。オフセット位置ｅｏｂａは、ｅｏｂａ＝ｅｏｂ−Ｇｋ，０として決定することができる。即ち、オフセット位置ｅｏｂａは、ブロック終了係数のスキャンインデックス位置から、ブロック終了係数を含むグループの最初のスキャンインデックスを減算したものである。
【０１６７】
図１６は、本開示の実施形態による係数グループ座標系１６００の一例である。係数グループ座標系１６００は、各グループがスキャン位置｛１６ｋ，１６ｋ＋１，．．．，１６ｋ＋１５｝を含むように、スキャン位置をグループＧｋに分割する。即ち、各グループＧｋは、１６個の連続したスキャン位置で構成されている。従って、係数グループ座標系１６００は、４つのグループを含む。グループＧ１（即ち、グループ１６０２）は、スキャン位置｛０，１，．．．，１５｝を含む。グループＧ２（即ち、グループ１６０４）は、スキャン位置｛１６，１７，．．．，３１｝を含む。グループＧ３（即ち、グループ１６０６）は、スキャン位置｛３１，３２，．．．，４７｝を含む。グループＧ４（即ち、グループ１６０８）は、スキャン位置｛４８，４９，．．．，６３｝を含む。
【０１６８】
他の係数グループも可能である。例えば、スキャン位置をグループＧ０＝｛０｝，Ｇ１＝｛１｝，Ｇ２＝｛２，３｝，Ｇ３＝｛４，５，６，７｝，Ｇ４＝｛８，．．．，１５｝，Ｇ５＝｛１６，．．．，３１｝，Ｇ６＝｛３２，．．．，６３｝，Ｇ７＝｛６４，．．．，１２７｝，Ｇ８＝｛１２８，．．．，２５５｝，Ｇ９＝｛２５６，５１１｝，Ｇ１０＝｛５１２，．．．，１０２３｝に分割することができる。さらに別の例としては、係数グループＧｋは、Ｇ０＝｛０｝，Ｇ１＝｛１｝，Ｇ２＝｛２，３｝，Ｇ３＝｛４，５，６，７｝，Ｇ４＝｛８，．．．，１５｝，Ｇ５＝｛１６，．．．，３１｝，ｋ≧６に関して、Ｇｋ＝３２＋１６（ｋ−６），．．．，４７＋１６（ｋ−６）｝とすることができる。
【０１６９】
プロセス１４００は、係数グループおよびブロック終了（ｅｏｂｇ，ｅｏｂａ）の位置オフセットをコーディングする一例である。プロセス１４００は、プロセス１１００の態様を共有することができる。プロセス１１００のブロックとして番号付けされたプロセス１４００のブロックに関する説明は、省略する。
【０１７０】
１４０２において、プロセス１４００は、グループセットＧを空のセットに初期化する。グループセットＧは、プロセス１４００によって既にアクセスされたグループの軌跡を保持する。この状況において、アクセス済みグループとは、現在の非ゼロ係数が任意のスキャン順序でアクセスされるときに、現在の非ゼロ係数と同じグループに含まれる別の非ゼロ係数が既に決定されていることを意味する。
【０１７１】
１４０４において、スキャン位置ｉがゼロに初期化され、フラグＥＯＢ＿Ｇ＿ＦＯＵＮＤが偽（例えば、値ゼロ）に設定され、フラグＥＯＢ＿Ａ＿ＦＯＵＮＤが偽に設定される。スキャン位置ｉは、１次元配列ｕのインデックスとして使用される。フラグＥＯＢ＿Ｇ＿ＦＯＵＮＤは、ブロック終了係数のスキャン位置と同じグループ内にある変換係数のスキャン位置が処理されている（即ち、スキャン順序に従ってアクセスされている）かどうかを示す。フラグＥＯＢ＿Ａ＿ＦＯＵＮＤは、最後の非ゼロ係数を含むグループ内の現在の変換係数の位置オフセットが、最後の非ゼロ係数の位置オフセットであるかどうかを示す。
【０１７２】
１４１６において、プロセス１４００は、現在の係数が属するグループ番号を決定する。同様に、プロセス１４００は、現在の係数のスキャン位置が属するグループの現在のグループ番号を決定する。プロセス１４００は、スキャン位置ｉがグループＧｋｉ内にあるように、スキャン位置ｉ（即ち、スキャン位置ｉ）の現在のグループ番号ｋｉを決定することができる。
【０１７３】
１４１８において、プロセス１４００が、最後の非ゼロ係数を含むグループが決定されておらず（即ち、フラグＥＯＢ＿Ｇ＿ＦＯＵＮＤ＝０）、かつ現在のグループ番号ｋｉがアクセスされていない（即ち、値ｋｉがセットＧ内に存在しない）ことを決定すると、プロセス１４００は１４２０に進み、それ以外の場合、プロセス１４００は１４２８に進む。
【０１７４】
１４２０において、プロセス１４００はフラグＬＡＳＴ＿ＥＯＢ＿Ｇ＿ＦＬＡＧをコーディングする。フラグＬＡＳＴ＿ＥＯＢ＿Ｇ＿ＦＬＡＧは、現在のグループ番号ｋｉが最後の非ゼロ係数のグループ番号であるかどうかを示す。例えば、符号化器によって実施される場合、プロセス１４００は、値ｋｉ＝ｅｏｂｇを符号化することができる。復号化器によって実施される場合、プロセス１４００は、フラグＬＡＳＴ＿ＥＯＢ＿Ｇ＿ＦＬＡＧを設定することができるシンタックス要素を復号化することができる。現在のグループ番号が最後の非ゼロ係数のグループ番号と同じでない場合、ゼロ（０）をコーディングすることができ、それ以外の場合、１がコーディングされる。
【０１７５】
１４２２において、グループ番号ｋｉがアクセスされたことを示すために、現在のグループ番号ｋｉがグループセットＧに追加されて、同じグループ内の別の非ゼロ変換がアクセスされると／された場合、プロセス１４００は、シーケンス１４２０〜１４２６をスキップし、その結果、（１４２０において）グループ番号ｋｉがブロックの最後の非ゼロ変換係数を含むかどうかを示す別の値をコーディングすることをスキップすることができるようにする。
【０１７６】
１４２４において、現在のグループ番号ｋｉが最後の非ゼロ係数のグループ番号に等しい場合（即ち、ｋｉ＝ｅｏｂｇの場合、または同等に、ＬＡＳＴ＿ＥＯＢ＿Ｇ＿ＦＬＡＧ＝１の場合）、プロセス１４００は、（１４２６において）フラグＥＯＢ＿Ｇ＿ＦＯＵＮＤを真（例えば、ＥＯＢ＿Ｇ＿ＦＯＵＮＤ＝１）に設定し、それ以外の場合、プロセス１４００は１４２８に進む。復号化器によって実施される場合、プロセス１４００は、１４２６において、グループ番号ｋｉが最後の非ゼロ係数（即ち、ｅｏｂｇ）を含むグループであることを記録することもできる。次に、プロセス１４００は１４２８に進む。
【０１７７】
１４２８において、プロセス１４００が、ＥＯＢ＿Ｇ＿ＦＯＵＮＤが設定されている（即ち、ＥＯＢ＿Ｇ＿ＦＯＵＮＤ＝１）ことを決定した場合、プロセス１４００は、１４３０に進み、それ以外の場合、プロセス１４００は１１１２に進む。シーケンス１４３０〜１４３８において、プロセス１４００は、最後の非ゼロ係数を含むグループ内の非ゼロ係数の位置オフセットが、最後の非ゼロ係数の位置であるかどうかをコーディングまたは推測する。１４２８において、フラグＥＯＢ＿Ｇ＿ＦＯＵＮＤが設定されている場合、ｋｉの番号が付けられた現在のグループが、最後の非ゼロ係数（即ちｅｏｂｇ）のスキャンインデックスを含むグループであることも意味する。
【０１７８】
１４３０において、スキャン位置ｉがグループ内の最後の位置である場合、次に、プロセス１４００は１４３２に進み、それ以外の場合、プロセス１４００は１４３４に進む。一例では、プロセス１４００は、次のスキャン位置の値（即ち、ｉ＋１）がグループ外にあるかどうかをテストすることにより、スキャン位置ｉがグループ内の最後の位置であるかどうかを決定することができる。例示のために図１６を参照すると、スキャンインデックス１５がグループＧ１（即ち、グループ１６０２）の最後の位置であるかどうかを決定するために、プロセス１４００は、スキャンインデックスｉ＋１＝１６がグループＧ１にあるかどうかをテストする。上記したように、グループＧ２（即ち、グループ１６０４）は、スキャン位置１６を含むグループである。このため、（ｉ＋１）はＧ１に存在しないため、スキャン位置ｉは、グループＧ１の最後の位置である。
【０１７９】
１４３２で、プロセス１４００は、（符号化器による符号化または復号化器による復号化の代わりに）最後の非ゼロ係数（即ち、ｅｏｂａ）の位置オフセットが最後の非ゼロ係数のオフセットと同じであると推測することができる。即ち、プロセス１４００は、ｅｏｂａがｉ−Ｇｋｉ，０に等しいと推測することができる。即ち、最後の非ゼロ係数のオフセット位置は、現在のスキャンインデックス（ｉ）からスキャンインデックスｉを含むグループの最初のスキャンインデックスを減算したもの等しくなる。例えば、図１６のグループを使用して、現在のスキャン位置ｉ＝３９が与えられた場合、スキャン位置ｉを含むグループの最初のスキャン位置は３２である。これは、スキャン位置３９を含むグループがグループ１６０４であり、かつグループ１６０４の最初のスキャン位置がスキャン位置３２であるからである。
【０１８０】
１４３４において、プロセス１４００は、フラグＬＡＳＴ＿ＥＯＢ＿Ａ＿ＦＬＡＧをコーディングする。フラグＬＡＳＴ＿ＥＯＢ＿Ａ＿ＦＬＡＧは、グループ内の現在の非ゼロ係数の位置オフセットが最後の非ゼロ係数の位置オフセットであるかどうかを示す。例えば、符号化器によって実施される場合、プロセス１４００は、値（ｉ−Ｇｋｉ，０＝ｅｏｂａ）を符号化することができる。復号化器において実施される場合、プロセス１４００は、フラグＬＡＳＴ＿ＥＯＢ＿Ａ＿ＦＬＡＧを設定することができるシンタックス要素を復号化することができる。現在の係数のグループ内の位置オフセットが最後の非ゼロ係数の位置オフセットと同じでない場合、ゼロ（０）をコーディングすることができ、それ以外の場合、１がコーディングされる。
【０１８１】
１４３６において、プロセス１４００は、（ｉ−Ｇｋｉ，０＝ｅｏｂａ）であるかどうか、または、同等に、ＬＡＳＴ＿ＥＯＢ＿Ａ＿ＦＬＡＧ＝１であるかどうかを決定する。否の場合、プロセス１４００は、１１１２に進む。是の場合、プロセス１４００は、（１４３８において）フラグＥＯＢ＿Ａ＿ＦＯＵＮＤを真（例えば、ＥＯＢ＿Ａ＿ＦＯＵＮＤ＝１）に設定する。復号化器によって実施される場合、プロセス１４００は、１４３８において、値ｉ−Ｇｋｉ，０が最後の非ゼロ係数の位置オフセット（ｅｏｂａ）であることを記録することもできる。次に、プロセス１４００は、１１１２に進む。
【０１８２】
１４１２において、変換ブロックのすべての係数が処理された場合（即ち、スキャン位置ｉ＝Ｎ＊Ｎ）、または最後の非ゼロ変換係数のグループがアクセスされ（即ち、ＥＯＢ＿Ｇ＿ＦＯＵＮＤ＝１）、かつグループ内の最後の非ゼロ位置の位置オフセットが発見された場合（即ち、ＥＯＢ＿Ａ＿ＦＯＵＮＤ＝１）、プロセス１４００は終了し、それ以外の場合、プロセスは１１０６に続く。
【０１８３】
一実施形態では、プロセス１４００は、１１０６において、ＥＯＢ＿Ｇ＿ＦＯＵＮＤ＝１（即ち、現在のグループが最後の非ゼロ係数を含むグループである）であり、かつ現在のスキャン位置ｉがグループの最後のオフセット位置である（即ち、ｉはＧｋｉの最後の位置である）場合、現在の係数が非ゼロ係数であることを（符号化器による符号化または復号化器による復号化の代わりに）推測することができる）。このため、プロセス１４００は、値ｓｉｇ［ｉ］の符号化または復号化するコストを節約することができる。
【０１８４】
図１７は、本開示の実施形態により、変換ブロックの最後の非ゼロ係数の位置を復号化するためのプロセス１７００のフローチャート図である。プロセス１７００は、復号化器５００などの復号化器において実施することができる。プロセス１７００は、受信局によって実施することができる。プロセス１７００は、例えば、コンピューティングデバイスによって実行することができるソフトウェアプログラムとして実施することができる。ソフトウェアプログラムは、メモリ２０４または二次ストレージ２１４などのメモリに格納された機械可読命令であって、ＣＰＵ２０２のようなプロセッサにより実行されて、コンピューティングデバイスにプロセス１７００を実行させる機械可読命令を含むことができる。プロセス１７００は、特殊なハードウェアまたはファームウェアを使用して実施することができる。いくつかのコンピューティングデバイスは、複数のメモリ、複数のプロセッサ、またはその両方を有することができる。プロセス１７００のステップまたは動作は、異なるプロセッサ、メモリ、またはその両方を使用して分散させることができる。本明細書で単数の「プロセッサ」または「メモリ」という用語の使用は、記載されたステップのいくつかまたは全ての実行に使用することができる１つのプロセッサまたは１つのメモリのみを有するコンピューティングデバイスのみならず、複数のプロセッサまたは複数のメモリを有するデバイスを包含する。
【０１８５】
１７０２において、プロセス１７００は、図５の圧縮ビットストリーム４２０などの符号化ビットストリームから、変換ブロックの第１の係数が非ゼロであるかどうかを復号化する。一例では、ブロック１７０２は、図１１〜１４のブロック１１０８に関して説明したとおりである。
【０１８６】
１７０４において、プロセス１７００は、第１の係数が非ゼロであるかどうか、かつ第１の係数が第１の次元の第１の値に関して復号化されるべき第１の非ゼロ係数であるかどうかを決定する。是の場合、プロセス１７００は、１７０６に進み、それ以外の場合、プロセスは終了する。
【０１８７】
一例では、第１の次元の第１の値は、図１１に関して説明したデカルト座標系の列次元に関する列値とすることができ、決定は、ブロック１１１８に関して説明したとおりとすることができる。一例では、第１の次元の第１の値は、図１１に関して説明したデカルト座標系の行次元に関する行値とすることができ、決定は、ブロック１１２８に関して説明したとおりとすることができる。一例では、第１の次元の第１の値は、図１２に関して説明したデカルトグループ化座標系の列グループ次元に関する列グループ値とすることができ、決定は、ブロック１２１８に関して説明したとおりとすることができる。一例では、第１の次元の第１の値は、図１２に関して説明したデカルトグループ化座標系の行グループ次元に関する行グループ値とすることができ、決定は、ブロック１２２８に関して説明したとおりとすることができる。一例では、第１の次元の第１の値は、図１３に関して説明した極座標系の反対角次元の反対角線値とすることができ、決定は、ブロック１３１８に関して説明したとおりとすることができる。一例では、第１の次元の第１の値は、図１４に関して説明した係数グループ座標系の係数グループ次元に関する係数グループ値とすることができ、決定は、ブロック１４１８に関して説明したとおりとすることができる。
【０１８８】
１７０６において、プロセス１７００は、符号化ビットストリームから、第１の次元の第１の値がブロック終了係数を示すかどうかを示す第１のシンタックス要素を復号化する。復号化は、使用される座標系によって異なる。一例では、復号化は、図１１の１１２０または１１３０に関して説明したとおりとすることができる。一例では、復号化は、図１２の１２２０または１２３０に関して説明したとおりとすることができる。一例では、復号化は、図１３の１３２０に関して説明したとおりとすることができる。一例では、復号化は、図１４の１４２０に関して説明したとおりとすることができる。
【０１８９】
１７０８において、ブロック終了係数を示す第１のシンタックス要素に応答して、プロセス１７００は、第１の値を使用して、最後の非ゼロ係数の位置を決定する。一例では、ブロックは、図１１のシーケンス１１２４〜１１２６に関して説明したとおりとすることができる。一例では、ブロックは、図１１のシーケンス１１３４〜１１３６に関して説明したとおりとすることができる。一例では、ブロックは、図１２のシーケンス１２２４〜１１２７に関して説明したとおりとすることができる。一例では、ブロックは、図１２のシーケンス１２３４〜１２３７に関して説明したとおりとすることができる。一例では、ブロックは、図１３のシーケンス１３２４〜１３２６に関して説明したとおりとすることができる。一例では、ブロックは、図１４のシーケンス１４２４〜１４２６に関して説明したとおりとすることができる。
【０１９０】
一実施形態では、プロセス１７００は、第１の変換係数が第２の次元の第２の値に関して復号化されるべき第１の非ゼロ係数であると決定されたことに応答して、符号化ビットストリームから、第２の次元の第２の値がブロック終了係数を示すかどうかを示す第２のシンタックス要素を復号化するステップと、ブロック終了係数を示す第２のシンタックス要素に応答して、第２の値を使用して最後の非ゼロ係数の位置を決定するステップとを含むことができる。
【０１９１】
第１の次元および第２の次元は、変換ブロックの列および行を含む座標系における次元であり得る。座標系は、図１１のデカルト座標系に関して説明したとおりとすることができる。
【０１９２】
一実施形態では、第１の次元と第２の次元は極座標系における次元である。極座標系は、図７に関して説明したとおりとすることができる。極座標系は、変換ブロックのＤＣ係数を中心とすることができる。第１の次元は、変換ブロックを符号化するために使用されるスキャン順序の反対角線に対応することができ、第２の次元は、第１の次元の反対角線上の位置に対応することができる。
【０１９３】
第１次元および第２次元は、係数グループ座標系における次元であり得る。係数グループ座標系は、図１４に関して説明したとおりである。一例では、係数グループ座標系はスキャン順序のスキャン位置をスキャン位置のグループに分割することができ、第１の次元は、スキャン位置のグループに対応することができ、第２次元は、グループ内のスキャンインデックスのオフセット位置に対応することができる。一例では、係数グループ座標系は変換ブロックを変換係数のグループに分割することができ、第１の次元は、変換係数のグループに対応することができ、第２の次元は、グループ内の位置に対応することができる。
【０１９４】
係数グループ座標系の実施形態では、グループが同数のスキャン位置を含むことができる。例えば、スキャン位置の同数は、１６とすることができる。
プロセス１７００の実施形態において、第１の次元および第２の次元は、デカルトグループ化座標系における次元である。デカルトグループ化座標系は、図１２で説明したとおりである。第１の次元は、変換ブロックの列のグループに対応することができ、第２の次元は、変換ブロックの行のグループに対応することができる。
【０１９５】
係数の変換ブロックは、イントラ予測を使用して予測される残差ブロックの変換ブロックとすることができる。変換係数は、輝度色成分のブロックに関する変換係数とすることができる。
【０１９６】
図１８は、本開示の実施形態による、変換ブロックの最後の非ゼロ係数の位置を復号化するための別のプロセス１８００のフローチャート図である。プロセス１８００は、図５の復号化器５００などの復号化器において実施することができる。プロセス１８００は、例えば、受信局１０６などのコンピューティングデバイスによって実行することができるソフトウェアプログラムとして実施することができる。ソフトウェアプログラムは、メモリ２０４または二次ストレージ２１４などのメモリに格納された機械可読命令であって、ＣＰＵ２０２のようなプロセッサにより実行されて、コンピューティングデバイスにプロセス１８００を実行させる機械可読命令を含むことができる。少なくともいくつかの実施形態では、プロセス１１００は、図５の復号化器５００のエントロピー復号化ステージ５０２によって全体的または部分的に実行することができる。
【０１９７】
１８０２において、プロセス１８００は、変換ブロックの係数を係数グループ座標系にマッピングする。係数グループ座標系は、第１の次元および第２の次元を有することができる。第１の次元は、変換係数のグループに対応することができる。第２の次元は、複数の係数グループのうちの一つのグループ内のオフセット位置に対応することができる。一例では、いくつかのグループが不等数の係数を含むことができる。
【０１９８】
１８０４において、プロセス１８００は、符号化されたビットストリームから、最後の非ゼロ係数を含む係数グループを決定する。例えば、図１４および１６に関して説明したように、プロセスは、１４２０に関して説明したように、シンタックス要素またはグループ１６０６を示すフラグを復号化することにより、最後の非ゼロ係数を含む係数グループを決定することができる。
【０１９９】
１８０６において、プロセス１８００は、符号化ビットストリームから、係数グループ内の最後の非ゼロ係数のオフセット位置を、最後の非ゼロ係数について決定する。例えば、プロセスは、図１４に関して説明したようにオフセット位置を決定することができる。
【０２００】
１８０８において、プロセス１８００は、符号化されたビットストリームから、係数グループおよびオフセット位置に対応する係数までの係数を復号化する。一例では、係数は、図１４の１４１２および１１０６に関して説明したように復号化することができる。
【０２０１】
プロセス１８００の実施形態において、オフセット位置を決定することは、符号化されたビットストリームから、例えば、図１４の１４３４に関して説明したオフセット位置を示すシンタックス要素を復号化することを含むことができる。
【０２０２】
プロセス１８００の実施形態において、オフセット位置を決定することは、復号化されている現在の係数が係数グループの最後のオフセット位置にあると決定することに応答して、最後の非ゼロ係数のオフセット位置が最後のオフセット位置であると推測することを含むことができる。一例では、図１４の１４３０および１４３２に関して説明したように、オフセット位置を推測することができる。
【０２０３】
プロセス１８００の実施形態では、係数グループおよびオフセット位置に対応する係数まで係数を復号化することは、復号化されている現在の係数が係数グループ内の最後のオフセット位置にあると決定することに応答して、現在の係数が非ゼロ係数であると推測することを含むことができる。このプロセスは、図１４の１１０６に関して説明したように、現在の係数が非ゼロ係数であると推測することができる。
【０２０４】
一実施形態による係数の変換ブロックの最後の非ゼロ係数の位置を復号化するためのさらに別のプロセスがここで開示される。このプロセスは、変換ブロックの係数を第１の次元と第２の次元を有する座標系にマッピングすることを含む。第１の１つまたは複数の係数は、第１の次元の第１の値で座標系に配置され、第２の１つまたは複数の係数は、第２の次元の第２の値で座標系に配置される。プロセスは、符号化されたビットストリームから、第１の次元の第１の値が最後の非ゼロ係数を含むかどうかについて、第１の値に関して１度のみ復号化するステップと、符号化されたビットストリームから、第２の次元の第２の値が最後の非ゼロ係数を含むかどうかについて、第２の値に関して１度のみ復号化するステップと、第１の次元の復号化された第３の値と第２の次元の復号化された第４の値とを使用して、最後の非ゼロ係数の位置を決定するステップとをも含む。復号化された第３の値および復号化された第４の値は、最後の非ゼロ係数を示すことができる。
【０２０５】
例えば、極座標系の場合、第１の次元は反対角線とすることができ、第２の次元は対角線上の位置とすることができる。従って、第１の次元の第１の値が最後の非ゼロ係数を含むかどうかについて、第１の値に関して１度のみ復号化する例は、図１５の反対角線１５０２（即ち、行＋列＝０＋１＝１＋０＝１に対応する）が最後の非ゼロ係数を含むかどうかについて１度のみ復号化することができる。この場合、反対角線次元（即ち、第１の次元）の反対角線１５０２（即ち、第１の値）は、最後の非ゼロ係数を含まない。
【０２０６】
一実施形態では、第４の値を復号化することは、第４の値を推測することを意味することができる。例えば、デカルト座標系において、図１１の１１２０に関して説明したように、第４の値を推測することができる。例えば、極座標系において、図１３の１３３２に関して説明したように、第４の値を推測することができる。例えば、係数グループ座標系において、図１４の１４３２に関して説明したように、第４の値を推測することができる。例えば、第１の次元が１つのみの要素を含む場合、第４の値が１つの値であると推測することができる。例えば、グループ座標系におけるグループが１つのスキャン位置（例えば、Ｇ０＝｛０｝、Ｇ１＝｛１｝）のみを含む場合、第４の値はグループの１つのスキャン位置であると推測することができる。例えば、極座標系において、決定された反対角線がＤＣ係数を含む反対角線（即ち、行＋列＝０＋０＝０に対応する反対角線）である場合、第４の値を推測することができる。
【０２０７】
上述の符号化および復号化の態様は、符号化および復号化技術のいくつかの例を示す。しかしながら、符号化および復号化は、これらの用語が特許請求の範囲で使用されているように、データの圧縮、圧縮解除、変換、または任意の他の処理または変更を意味し得ることを理解されたい。
【０２０８】
本明細書では、「例」または「実施」という用語は、例、事例、または例示として機能することを意味するために使用される。本明細書において「例」または「実施形態」と記載された任意の態様または設計は、必ずしも他の態様または設計に対して好ましいまたは有利であるとして解釈されるべきではない。むしろ、「例」または「実施形態」という用語の使用は、概念を具体的な方法で表現することを意図している。本出願で使用される場合、用語「または」は、排他的な「または」ではなく、包括的な「または」を意味することが意図される。即ち、他に明記されていない限り、または文脈から明らかでない限り、「ＸはＡまたはＢを含む」とは、任意の自然な包含的置換（ｎａｔｕｒａｌ  ｉｎｃｌｕｓｉｖｅ  ｐｅｒｍｕｔａｔｉｏｎｓ）を意味することを意図する。即ち、「ＸはＡまたはＢを含む」は、以下の場合、ＸがＡを含む場合、ＸがＢを含む場合、またはＸがＡおよびＢの両方を含む場合のいずれにおいても満足される。さらに、本出願および添付の特許請求の範囲で使用される冠詞「ａ」および「ａｎ」は、他に明記されない限り、または単数形に向けられる文脈から明らかでない限り、「１つまたは複数」を意味すると一般に解釈されるべきである。さらに、「実施形態」または「一実施形態」という用語の使用は、そのように記載されない限り、同じ実施形態または実施を意味することを意図するものではない。
【０２０９】
送信局１０２および／または受信局１０６（ならびに、符号化器４００および復号化器５００が含む、それに記憶され、かつ／またはそれによって実行されるアルゴリズム、方法、命令など）の実施形態は、ハードウェア、ソフトウェア、またはそれらの任意の組み合わせにおいて実現することができる。ハードウェアは、例えば、コンピュータ、知的財産（ＩＰ）コア、特定用途向け集積回路（ＡＳＩＣ：ａｐｐｌｉｃａｔｉｏｎ−ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔｓ）、プログラマブル論理アレイ、光プロセッサ、プログラマブル論理コントローラ、マイクロコード、マイクロコントローラ、サーバ、マイクロプロセッサ、デジタル信号プロセッサ、または他の適切な回路を含むことができる。特許請求の範囲において、「プロセッサ」という用語は、前述のハードウェアのいずれかを単独でまたは組み合わせて含むものとして理解されるべきである。用語「信号」および「データ」は、互換的に使用される。さらに、送信局１０２および受信局１０６の一部は、必ずしも同じ方法で実施される必要はない。
【０２１０】
さらに、一態様では、例えば、送信局１０２または受信局１０６は、実行時に、本明細書に記載された個々の方法、アルゴリズム、および／または命令をのうちのいずれかを実行するコンピュータプログラムを備えた汎用コンピュータまたは汎用プロセッサを使用して実施することができる。加えて、または代替的に、例えば、本明細書に記載された方法、アルゴリズム、または命令のいずれかを実行するための他のハードウェアを含むことができる専用コンピュータ／プロセッサを利用することができる。
【０２１１】
送信局１０２および受信局１０６は、例えば、ビデオ会議システム内のコンピュータ上で実施することができる。あるいは、送信局１０２はサーバ上で実施することができ、受信局１０６はサーバとは別のハンドヘルド通信デバイスのようなデバイス上で実施することができる。この場合、送信局１０２は、符号化器４００を使用してコンテンツを符号化されたビデオ信号に符号化し、符号化されたビデオ信号を通信デバイスに送信することができる。通信デバイスは、復号化器５００を使用して符号化されたビデオ信号を復号化することができる。あるいは、通信デバイスは、通信デバイス上に局所的に格納されたコンテンツ、例えば、送信局１０２によって送信されなかったコンテンツを復号化することができる。他の送信局１０２および受信局１０６の実施スキームが利用可能である。例えば、受信局１０６は、ポータブル通信デバイスではなく、一般に固定のパーソナルコンピュータであってもよく、かつ／または符号化器４００を含むデバイスは、復号化器５００を含んでもよい。
【０２１２】
さらに、本開示の実施形態の全部または一部は、例えば有形のコンピュータ使用可能またはコンピュータ可読媒体からアクセス可能なコンピュータプログラム製品の形態を取ることができる。コンピュータ使用可能またはコンピュータ可読媒体は、例えば、任意のプロセッサによって、またはそれに関連して使用するために、プログラムを有形に包含、格納、通信、または輸送することができる任意のデバイスであり得る。媒体は、例えば、電子、磁気、光学、電磁気、または半導体デバイスであり得る。他の適切な媒体も利用可能である。
【０２１３】
上述した実施形態、実施例及び態様は、本開示の理解を容易にするために記載されており、本開示を限定するものではない。本開示は、添付の特許請求の範囲内に含まれる様々な改変および均等の構成を包含することを意図しており、その範囲は、法律で許容されるようなすべての改変および均等の構造を包含するように最も広い解釈が与えられる。
【図１】
2020522181.tif 000006
【図２】
2020522181.tif 000007
【図３】
2020522181.tif 000008
【図４】
2020522181.tif 000009
【図５】
2020522181.tif 000010
【図６】
2020522181.tif 000011
【図７】
2020522181.tif 000012
【図８】
2020522181.tif 000013
【図９】
2020522181.tif 000014
【図１０】
2020522181.tif 000015
【図１１】
2020522181.tif 000016
【図１２】
2020522181.tif 000017
【図１３】
2020522181.tif 000018
【図１４】
2020522181.tif 000019
【図１５】
2020522181.tif 000020
【図１６】
2020522181.tif 000021
【図１７】
2020522181.tif 000022
【図１８】
2020522181.tif 000023
【手続補正書】
【提出日】令和1年11月28日(2019.11.28)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
係数の変換ブロックを復号化する装置であって、前記変換ブロックは、スキャン順序を使用して復号化され、
プロセッサを備え、前記プロセッサは、
スキャン順序のすべてのスキャン位置をＫ＞１の非重複グループに分割し、
前記非重複グループの各々は、スキャン順序の連続するスキャン位置から構成され、
前記非重複グループは、第１の次元および第２の次元を有する係数グループ座標系を構成し、前記第１の次元の第１の値は、前記非重複グループの一つのグループに対応し、前記第２の次元の第２の値は、前記非重複グループの前記一つのグループ内のオフセット位置に対応しており、
符号化ビットストリームから、前記第１の次元の第１の値に対応するグループ値を決定し、ここで、前記グループ値は、前記非重複グループのうちの一つを示し、前記非重複グループの一つは、前記変換ブロックの最後の非ゼロ係数を含んでおり、
前記符号化ビットストリームから、前記第２の次元の第２の値に対応するオフセット位置を決定し、前記オフセット位置は、最後の非ゼロ係数の前記非重複グループのうちの一つ内の位置を示しており、
前記非重複グループの一つおよび前記オフセット位置を使用して、前記符号化ビットストリームから係数を復号化するように構成されている、装置。
【請求項２】
前記オフセット位置を決定することは、
前記符号化ビットストリームから、前記オフセット位置を示すシンタックス要素を復号化することを含む、請求項１に記載の装置。
【請求項３】
前記オフセット位置を決定することは、
復号化されている現在の係数が、前記非重複グループのうちの一つ内の最後のオフセット位置にあるとの決定に応答して、最後の非ゼロ係数の前記オフセット位置が最後のオフセット位置であると推測することを含む、請求項１に記載の装置。
【請求項４】
前記非重複グループの第１のグループおよび前記非重複グループの第２のグループは、不等数のスキャン位置を含む、請求項３に記載の装置。
【請求項５】
前記オフセット位置を決定することは、
最後の非ゼロ係数の前記オフセット位置は、最後の非ゼロ係数のスキャン位置であると推測することを含む、請求項１に記載の装置。
【請求項６】
係数の変換ブロックの最後の非ゼロ係数の位置を復号化する方法であって、前記変換ブロックはスキャン順序を使用して復号化され、
スキャン順序のすべてのスキャン位置を非重複グループに分割するステップと、前記非重複グループの各々は、スキャン順序の連続するスキャン位置から構成され、
符号化ビットストリームから、前記非重複グループの一つのグループを決定するステップと、ここで、前記一つのグループは、前記変換ブロックの最後の非ゼロ係数を含んでおり、
前記符号化ビットストリームからオフセット位置を決定するステップと、ここで、前記オフセット位置は、最後の非ゼロ係数のグループ内の位置を示しており、
前記非重複グループの一つのグループおよび前記オフセット位置を使用して、前記符号化ビットストリームから係数を復号化するステップとを含む方法。
【請求項７】
前記オフセット位置を決定することは、
前記符号化ビットストリームから、前記オフセット位置を示すシンタックス要素を復号化することを含む、請求項６に記載の方法。
【請求項８】
前記オフセット位置を決定することは、
復号化されている現在の係数が前記非重複グループの一つのグループ内の最後のオフセット位置にあるとの決定に応答して、現在の係数が最後の非ゼロ係数であると推測することを含む、請求項６に記載の方法。
【請求項９】
前記非重複グループの第１のグループおよび前記非重複グループの第２のグループは、不等数のスキャン位置を含む、請求項８に記載の方法。
【請求項１０】
前記非重複グループが３つのグループを含む、請求項６乃至９のいずれか１項に記載の方法。
【請求項１１】
係数の変換ブロックをコーディングする装置であって、前記変換ブロックはスキャン順序を使用して復号化され、
プロセッサを備え、前記プロセッサは、
スキャン順で連続するスキャン位置のグループを示す第１のインデックスを決定し、前記連続するスキャン位置のグループは、最後の非ゼロ係数のスキャン位置を含んでおり、
最後の非ゼロ係数の前記連続するスキャン位置のグループ内のオフセットを示す第２のインデックスを決定し、
前記第２のインデックスが決定されるまで、一部の係数をコーディングするように構成されている、装置。
【請求項１２】
前記連続するスキャン位置のグループは、最初のスキャン位置と最後のスキャン位置とを含み、
前記第２のインデックスを決定することは、最後の非ゼロ係数のスキャン位置と前記最初のスキャン位置との間の差として第２のインデックスを決定することを含む、請求項１１に記載の装置。
【請求項１３】
前記第２のインデックスを決定することは、
最後の非ゼロ係数のスキャン位置が前記最後のスキャン位置と等しいという条件で、前記第２のインデックスが最後のスキャン位置であると推測することを含む、請求項１２に記載の装置。
【請求項１４】
前記スキャン順序はスキャン位置を含み、前記スキャン位置は非重複スキャングループに分割され、前記非重複スキャングループは連続スキャン位置のグループを含む、請求項１１に記載の装置。
【請求項１５】
前記プロセッサは、
前記非重複スキャングループの各グループに対して１度のみ、グループが最後の非ゼロ係数のスキャン位置を含んでいるかどうかを示す個々のフラグを復号化するように構成されている、請求項１４に記載の装置。
【請求項１６】
前記プロセッサは、
グループが最後の非ゼロ係数を含んでいることを示すフラグを復号化した後、前記第２のインデックスを示す第２のフラグを復号化するように構成されている、請求項１５に記載の装置。
【請求項１７】
前記非重複スキャングループは、第１のグループ、第２のグループ、第３のグループ、および第４のグループを含み、
前記第１のグループは、スキャン位置０で構成され、
前記第２のグループは、スキャン位置１で構成され、
前記第３のグループは、スキャン位置２および３で構成され、
前記第４のグループは、スキャン位置４〜７で構成される、請求項１４乃至１６のいずれか１項に記載の装置。
【請求項１８】
前記非重複スキャングループは第５のグループを含み、
前記第５のグループは、スキャン位置８〜１５で構成される、請求項１７に記載の装置。
【請求項１９】
前記非重複スキャングループの各グループは、同数のスキャン位置からなる、請求項１４乃至１６のいずれか１項に記載の装置。
【請求項２０】
前記装置は復号化器であり、前記第１のインデックスが決定され、かつ前記第２のインデックスが決定されるまで一部の係数をコーディングすることは、
圧縮ビットストリームから、一部の係数の各係数を、前記第１のインデックスが決定されたことを示す第１のフラグまで、および前記第２のインデックスが決定されたことを示す第２のフラグまで順次復号化することを含み、前記第１のフラグおよび前記第２のフラグは、前記圧縮ビットストリームから復号化される、請求項１１に記載の装置。
【国際調査報告】
2020522181.tif 000024
2020522181.tif 000025
2020522181.tif 000026