(57)【要約】  周波数係数のブロックをエンコードし、デコードする技法およびツールを提示する。エンコーダーは、複数の使用可能なスキャン順序からスキャン順序を選択し、選択されたスキャン順序を変換係数の２次元マトリックスに適用し、周波数係数の非ゼロ値を１次元ストリングに一緒にグループ化する。エンコーダーは、マルチレベルネスティングされたセット表現に従って係数値の１次元ストリングをエントロピーエンコードする。デコーディングでは、デコーダーが、マルチレベルネスティングされたセット表現から係数値の１次元ストリングをエントロピーデコードする。デコーダーは、複数の使用可能なスキャン順序からスキャン順序を選択し、選択されたスキャン順序を使用して、係数を２次元マトリックスに戻って並べ替える。【選択図】図６
2011521536.tif 000002
【特許請求の範囲】
【請求項１】
コンピューター上で実行される時に、前記コンピューターにビデオをエンコードする方法を実行させる命令を格納した１つまたは複数の記憶媒体であって、前記方法が、
複数のスキャン順序のうちの１つを選択するステップ（６０５）と、
前記選択されたスキャン順序を示す情報をビットストリームにおいて出力するステップと、
ブロックの複数の周波数係数を並べ替えるために前記選択されたスキャン順序を適用するステップ（６１０）と、
前記並べ替えられた周波数係数のマルチレベルネスティングされたセット表現を使用して前記並べ替えられた複数の周波数係数をエントロピーコーディングするステップ（６３０）であって、
前記マルチレベルネスティングされたセット表現の第１レベルの第１記号を有する要約表現として前記並べ替えられた複数の周波数係数のうちの１つまたは複数の第１セットを表すステップと、
前記マルチレベルネスティングされたセット表現の前記第１レベルの前記第１記号および第２記号をエントロピーコーディングするステップと
を含むステップ（６３０）と、
前記エントロピーコーディングされた周波数係数を前記ビットストリームにおいて出力するステップと
を含む、１つまたは複数の記憶媒体。
【請求項２】
前記第１記号は、並べ替えられた周波数係数の前記第１セットの中の非ゼロ係数値の存在または不在を示す、請求項１に記載の１つまたは複数の記憶媒体。
【請求項３】
前記第２記号は、前記第１セットの外部の前記並べ替えられた複数の周波数係数のうちの１つを表す、請求項１に記載の１つまたは複数の記憶媒体。
【請求項４】
前記第１記号および前記第２記号をエントロピーコーディングするステップは、ハフマンコーディングを使用して前記第１記号および前記第２記号を合同でコーディングするステップを含む、請求項３に記載の１つまたは複数の記憶媒体。
【請求項５】
前記第１記号および前記第２記号をエントロピーコーディングするステップは、１つまたは複数の他の記号と一緒に前記第１記号および前記第２記号をランレングスコーディングするステップを含む、請求項１に記載の１つまたは複数の記憶媒体。
【請求項６】
前記エントロピーコーディングは、
前記マルチレベルネスティングされたセット表現の前記第１レベルの前記第２記号を有する要約表現として前記並べ替えられた複数の周波数係数のうちの１つまたは複数の第２セットを表すステップであって、前記第１記号および前記第２記号をエントロピーコーディングするステップは、ハフマンコーディングを使用して前記第１記号および前記第２記号を合同でコーディングするステップを含む、ステップ
をさらに含む、請求項１に記載の１つまたは複数の記憶媒体。
【請求項７】
前記第１セットは、少なくとも１つの非ゼロ係数値を含み、前記エントロピーコーディングは、前記第１レベルより下の前記マルチレベルネスティングされたセット表現の第２レベルで、前記第１セットのそれぞれの係数の係数値をエントロピーコーディングするステップをさらに含む、請求項１に記載の１つまたは複数の記憶媒体。
【請求項８】
前記第１セットは、少なくとも１つの非ゼロ係数値を含み、前記エントロピーコーディングは、
前記第１セットの前記周波数係数のうちの１つまたは複数の第１サブセットを、前記第１レベルより下の前記マルチレベルネスティングされたセット表現の第２レベルの第１サブ記号を有する要約表現として表すステップ
をさらに含む、請求項１に記載の１つまたは複数の記憶媒体。
【請求項９】
前記第２レベルより下の前記マルチレベルネスティングされたセット表現の第３レベルで、前記第１サブセットのそれぞれの係数の係数値をエントロピーコーディングするステップをさらに含む、請求項８に記載の１つまたは複数の記憶媒体。
【請求項１０】
前記選択するステップは、
前記複数のスキャン順序の中で複数の事前に決定されたスキャン順序を評価するステップと、
前記複数の事前に決定されたスキャン順序のどれもがエントロピーコーディングに関する適切に並べ替えられた周波数係数を作らない場合に、前記複数のスキャン順序の新しいスキャン順序を作成するステップと
を含む、請求項１に記載の１つまたは複数の記憶媒体。
【請求項１１】
ビデオを再構成する方法であって、
複数の周波数係数のエントロピーエンコードされたビデオ情報をビットストリームにおいて受け取るステップと、
前記エントロピーエンコードされたビデオ情報をエントロピーデコードするステップ（１５０５）であって、
前記複数の周波数係数のマルチレベルネスティングされたセット表現の第１レベルの第１記号および第２記号をエントロピーデコードするステップであって、前記第１記号は、前記複数の周波数係数のうちの１つまたは複数の第１セットを表す、ステップと、
前記複数の周波数係数の前記マルチレベルネスティングされたセット表現の前記第１レベルより下の第２レベルの第１サブ記号をエントロピーデコードするステップであって、前記第１サブ記号は、前記第１セットの前記周波数係数のうちの１つまたは複数の第１サブセットを表す、ステップと
を含むステップ（１５０５）と、
前記複数の周波数係数のスキャン順序を判定するステップ（１５１０）と、
前記判定されたスキャン順序に従って前記複数の周波数係数を並べ替えるステップ（１５１５）と、
前記ビデオを再構成するために前記並べ替えられた周波数係数を使用するステップと
を含む、方法。
【請求項１２】
前記第１記号は、前記第１セット内の非ゼロ係数値の存在または不在を示す、請求項１１に記載の方法。
【請求項１３】
前記複数の周波数係数の前記マルチレベルネスティングされたセット表現の前記第１レベルの前記第２記号は、前記第１セットの外部の前記複数の周波数係数のうちの１つまたは複数の第２セット内の非ゼロ係数値の存在または不在を示す、請求項１２に記載の方法。
【請求項１４】
前記第１サブ記号は、前記第１サブセット内の非ゼロ係数値の存在または不在を示す、請求項１１に記載の方法。
【請求項１５】
前記スキャン順序の前記判定は、
前記ビットストリームにおいてスキャン順序情報を受け取るステップであって、前記スキャン順序情報は、前記判定されるスキャン順序を示す、ステップ
を含む、請求項１１に記載の方法。
【請求項１６】
前記スキャン順序は、複数の事前に決定されたスキャン順序のうちの１つである、請求項１５に記載の方法。
【請求項１７】
複数のスキャン順序からスキャン順序を選択するように適合されたブロックスキャン順序セレクタ（４２５）と、
前記選択されたスキャン順序を使用してブロック内の複数の周波数係数を並べ替えるように適合されたブロックスキャナー（４２５）と、
マルチレベルネスティングされたセット表現の所与のレベルで複数の記号をエンコードすることであって、前記所与のレベルの前記複数の記号のそれぞれは、前記並べ替えられた周波数係数のうちの１つまたは複数のセットを表す、エンコードすることと、
前記所与のレベルの前記複数の記号のそれぞれについて、前記記号の前記セットを複数のサブセットに分割べきかどうかを判定し、そうである場合に、前記マルチレベルネスティングされたセット表現のより下のレベルで複数のサブ記号をエンコードすることであって、前記より下のレベルの前記複数のサブ記号のそれぞれは、前記複数のサブセットのうちの１つを表す、判定し、エンコードすることと
によって表される前記マルチレベルネスティングされたセット表現内の前記並べ替えられた周波数係数をエンコードするように適合された１つまたは複数のエントロピーコーディングモジュール（４３０）と
を含むエンコーダーシステム。
【請求項１８】
前記ブロックスキャン順序セレクタは、前記ブロックへの前記複数のスキャン順序のそれぞれの閉ループ適用の結果に基づいて前記スキャン順序を選択するように適合される、請求項１７に記載のエンコーダーシステム。
【請求項１９】
前記ブロックスキャン順序セレクタは、前記ブロックへの前記複数のスキャン順序のうちの１つまたは複数の適用の開ループ評価の結果に基づいて前記スキャン順序を選択するように適合される、請求項１７に記載のエンコーダーシステム。
【請求項２０】
前記複数のスキャン順序は、事前に決定される、請求項１７に記載のエンコーダーシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
[001]ビデオのフレームまたは静止画像などのピクチャーがエンコードされる時に、エンコーダーは、通常、ビジュアルデータをサンプル値のブロックに分割する。エンコーダーは、離散係数変換（ＤＣＴ）などの周波数変換を実行して、サンプル値のブロックを変換係数のブロックに変換する。慣例によってブロックの左上に示される変換係数は、一般に、ＤＣ係数と称し、他の係数は、一般に、ＡＣ係数と称する。サンプル値のほとんどのブロックについて、周波数変換は、変換係数の非ゼロ値を、変換係数のブロックの左上のより低周波数のセクションにグループ化する傾向がある。
【０００２】
[002]周波数変換の後に、エンコーダーは、変換係数値を量子化する。量子化は、一般に、ＤＣ係数およびＡＣ係数の可能な値の個数を減らす。これは、通常、オリジナル係数値に対する量子化された値の分解能および忠実度を下げるが、後続のエントロピーエンコードをより効率的にする。量子化は、より高い周波数の係数が０に量子化される小さい振幅を有するときに、より高い周波数の係数（一般に、ブロックの右下側にグループ化される）を「除去する」傾向もある。
【０００３】
[003]図１に、量子化の後の変換係数の８×８ブロック（１００）の一例を示す。この例示的なブロック（１００）では、ブロックの左上角の値２５が、ＤＣ係数であり、他の６３個の値は、ＡＣ係数である。ブロック（１００）内の最大振幅の係数は、左上の低周波数係数であるが、右側に沿って、このブロックは、より高い周波数に非ゼロ係数値のクラスターを含む。
【０００４】
[004]変換係数を量子化した後に、エンコーダーは、量子化された変換係数をエントロピーエンコードする。変換係数のブロックをエンコードする１つの一般的な方法は、図２に示された「ジグザグ」スキャン順序（２００）を使用してブロックを並べ替えることによって開始される。この方法では、エンコーダーは、２次元配列からの変換係数の値を、スキャン順序（２００）に従って１次元ストリングにマッピングする。スキャン順序（２００）は、ＤＣ係数を有するブロック（１００）の左上で始まり、位置１および２のブロック（１００）のＡＣ係数をトラバースし、位置３、４、および５のＡＣ係数をトラバースし、以下同様である。スキャンは、スキャン順序（２００）に従ってブロック（１００）にまたがって斜めに継続され、位置６３の最高周波数のＡＣ係数を有するブロック（１００）の右下角で終わる。量子化動作は、通常、より小さい値すなわちより高い周波数の係数のかなりの部分をゼロに量子化するが、より大きい値すなわちより低い周波数の係数の非ゼロ値を保存するので、ジグザグスキャン並べ替えは、一般に、残りの非ゼロ変換係数のほとんどが１次元ストリングの始め近くにあり、多数のゼロ値がストリングの終りにあることをもたらす。
【０００５】
[005]図２に、変換係数のブロック（１００）にスキャン順序（２００）を適用することから生じる例示的な１次元ストリング（２５０）を示す。この例では、１次元ストリング（２５０）は、ブロック（１００）のＤＣ係数に対応する値２５から始まる。スキャン順序は、次に値１２を読み取り、これに２つの０の値、−５２の値などが続く。記号「ＥＯＢ」は、「Ｅｎｄ  ｏｆ  Ｂｌｏｃｋ（ブロックの終り）」を意味し、ブロック内の残りの値のすべてが０であることを示す。
【０００６】
[006]次に、エンコーダーは、ランレングスコーディングまたはランレベルコーディングを使用して、係数値の１次元ベクトルをエンコードする。ランレベルコーディングでは、エンコーダーは、１次元ベクトルをトラバースし、連続するゼロ値の各ランをランカウントとしてエンコードし、各非ゼロ値をレベルとしてエンコードする。単純なエンコーディングについて、エンコーダーは、ハフマンコードなどの可変長コードをランカウントおよびレベル値に割り当てる。
【０００７】
[007]単純なエンコーディングに関する１つの問題は、ランカウントが０から６４まで変化する可能性があり、ランカウントだけのために６５個のコードのアルファベットが必要になることである。エンコーダーが、後続の非ゼロレベル値を有するランカウントを合同でエンコードする（ランカウントとレベル値との間の相関を利用するために）場合に、ランカウントレベルアルファベットのサイズが、非常により大きくなり、これが、エントロピーエンコーディングの複雑さを増す（たとえば、コードテーブルサイズおよびルックアップ動作に起因して）。より頻繁でない組合せにエスケープコードを使用することは、コードテーブルサイズを制御するのを助けるが、コーディング効率を下げる可能性がある。
【０００８】
ランレベルコーディングに関するもう１つの問題は、どのＡＣ係数がエンコードされているかに関わりなくランレベル組合せに同一の可能なコード値をエンコーダーが使用する時に生じる。ゼロ値の長いランに出会う可能性が、より高い周波数のＡＣ係数について高まる場合には、ランレベル組合せに同一の可能なコード値を使用することは、効率を損なう。
【０００９】
[009]最後に、図２に示されたジグザグスキャン順序（２００）を使用する並べ替えは、いくつかの場合に、エンコーディング効率を損なう可能性がある。一般に、あるブロック内の隣接する係数値は、相関し、ある変換係数値がゼロである場合には、その隣接物は、ゼロである可能性がより高く、ある変換係数値が非ゼロである場合には、その隣接物は非ゼロである可能性がより高い。いくつかの場合に、ジグザグスキャン順序（２００）を使用する並べ替えは、１次元ベクトル内で、隣接する係数位置（たとえば、位置１５および２７）を分離する。たとえば、図１のブロック（１００）内の非ゼロ係数は、２つのクラスターに現れるが、図２の１次元ストリング（２５０）内の非ゼロ係数値は、１つまたは複数の「０」値のシリーズによって４回中断される。
【００１０】
[010]ディジタルビデオに対するエンコーディングおよびデコーディングのクリティカルな重要性を考慮すると、ビデオエンコーディングおよびビデオデコーディングが豊かに開発された分野であることは、驚くべきことではない。しかし、以前のビデオエンコーディング技法およびビデオデコーディング技法の利益がどれほどであろうとも、これらは、次の技法およびツールの利益を有さない。
【発明の概要】
【００１１】
[011]要約すると、詳細な説明は、周波数係数のブロックをエンコードし、デコードする技法およびツールを提示する。たとえば、これらの技法およびツールは、周波数係数のブロックの圧縮を改善することによって、エンコーダーの性能を改善する。圧縮の効率は、周波数係数の非ゼロ値を１次元ストリング内で一緒にグループ化し、その後、マルチレベルネスティングされたセット表現に従って係数値をエントロピーエンコードすることによって高められる。
【００１２】
[012]一実施形態では、エンコーディングツールなどのツールが、複数のスキャン順序のうちの１つを選択し、ブロックの周波数係数を並べ替えるために選択されたスキャン順序を適用する。このツールは、並べ替えられた周波数係数のマルチレベルネスティングされたセット表現を使用して並べ替えられた周波数係数をエントロピーエンコードする。これは、マルチレゾリューション表現の第１レベルの第１記号として要約表現内で並べ替えられた周波数係数のうちの１つまたは複数の第１セットを表すステップと、マルチレゾリューション表現の第１レベルの第１記号および第２記号をエントロピーエンコードするステップとを含む。いくつかの場合に、このツールは、ネスティングされたセット表現の第２レベルの第１サブ記号として要約表現内で第１セットの並べ替えられた周波数係数のうちの１つまたは複数の第１サブセットを表し、このツールは、第１サブ記号をエントロピーエンコードする。
【００１３】
[013]もう１つの実施形態では、デコーディングツールなどのツールが、ビットストリームからのビデオ情報をエントロピーデコードすることによって、エントロピーエンコードされたビデオを再構成する。このツールは、周波数係数のマルチレベルネスティングされたセット表現の第１レベルの第１記号および第２記号をデコードする。第１記号は、周波数係数のうちの１つまたは複数の第１セットを表し、第２記号は、周波数係数のうちの１つまたは複数の第２セットを表す。次に、このツールは、マルチレベルネスティングされたセット表現の第２レベルの第１サブ記号をデコードする。サブ記号は、第１セットの周波数係数のうちの１つまたは複数の第１サブセットを表す。次に、このツールは、周波数係数のスキャン順序を判定し、スキャン順序に従って係数を並べ替え、ビデオを再構成するために係数を使用する。
【００１４】
[014]いくつかの実施態様では、エンコーディングツールは、エントロピーエンコーディングにハフマンコーディングを使用し、デコーディングツールは、対応するハフマンデコーディングを使用する。他の実施態様では、エンコーディングツールは、ランレベルコーディングまたはランレングスコーディングの別の変形形態を使用し、デコーディングツールは、対応するデコーディングを使用する。いくつかの実施態様では、エンコーディングツールおよびデコーディングツールは、複数の事前に決定されたスキャン順序の中からブロックのスキャン順序を選択する。他の実施態様では、エンコーディングツールは、事前に決定されたスキャン順序のどれもが変換係数の適切な圧縮を生じない場合に、新しいスキャン順序を決定する。
【００１５】
[015]本発明の前述および他の目的、特徴、および利益は、添付図面を参照して進行する次の詳細な説明からより明白になる。この要約は、下の詳細な説明でさらに説明される概念の選択物を単純化された形で導入するために提供されるものである。この要約は、請求される主題の主要な特徴または本質的特徴を識別することを意図されたものではなく、請求される主題の範囲を限定するのに使用されることも意図されていない。
【図面の簡単な説明】
【００１６】
【図１】[016]量子化された変換係数の例示的ブロックを示すチャートである。
【図２】[017]従来技術のジグザグスキャン順序を示し、図１の変換係数のブロックにそのジグザグスキャン順序を適用した結果をも示すチャートである。
【図３】[018]複数の説明される実施形態を実施できる適切なコンピューティング環境を示すブロック図である。
【図４】[019]スキャン順序を選択し、ブロックのマルチレベルネスティングされたセット表現を使用してピクチャーをエンコードするように動作可能な一般化されたエンコードツールを示すブロック図である。
【図５Ａ】[020]スキャン順序を選択し、マルチレベルネスティングされたセット表現を使用してピクチャーをエンコードする一般化された技法の１つを示す流れ図である。
【図５Ｂ】[020]スキャン順序を選択し、マルチレベルネスティングされたセット表現を使用してピクチャーをエンコードする一般化された技法の１つを示す流れ図である。
【図５Ｃ】[020]スキャン順序を選択し、マルチレベルネスティングされたセット表現を使用してピクチャーをエンコードする一般化された技法の１つを示す流れ図である。
【図６】[021]スキャン順序を選択し、マルチレベルネスティングされたセット表現を使用してピクチャーをエンコードする例示的な技法を示す流れ図である。
【図７】[022]例のスキャン順序を示し、図１からの変換係数のブロックにそのスキャン順序を適用した結果をも示すチャートである。
【図８】[022]例のスキャン順序を示し、図１からの変換係数のブロックにそのスキャン順序を適用した結果をも示すチャートである。
【図９】[023]図９Ａは、スキャン順序選択のシグナリングを示す擬似コードリスティングである。
【００１７】
図９Ｂは、スキャン順序選択のシグナリングを示す擬似コードリスティングである。
【図１０】[024]マルチレベルネスティングされたセット表現を使用してブロックの周波数係数値のセットをエンコードする例示的な技法を示す流れ図である。
【図１１Ａ】[025]例のマルチレベルネスティングされたセット表現を示す図である。
【図１１Ｂ】[025]例のマルチレベルネスティングされたセット表現を示す図である。
【図１１Ｃ】[025]例のマルチレベルネスティングされたセット表現を示す図である。
【図１２Ａ】[026]図７に示された並べ替えられた係数値のベクトルへの図１１Ａのマルチレベルネスティングされたセット表現の適用を示す図である。
【図１２Ｂ】[027]図８に示された並べ替えられた係数値のベクトルへの図１１Ａのマルチレベルネスティングされたセット表現の適用を示す図である。
【図１３Ａ】[028]図１２Ａのマルチレベルネスティングされたセット表現用の例のハフマンコードを示す図である。
【図１３Ｂ】[028]図１２Ｂのマルチレベルネスティングされたセット表現用の例のハフマンコードを示す図である。
【図１４】[029]ピクチャーのブロックの並べ替えられたマルチレベルネスティングされたセット表現をデコードする一般化されたデコードシステムを示すブロック図である。
【図１５】[030]ブロックの並べ替えられたマルチレベルネスティングされたセット表現をデコードする一般化された技法を示す流れ図である。
【図１６】[031]ブロックの並べ替えられたマルチレベルネスティングされたセット表現をデコードする例示的な技法を示す流れ図である。
【発明を実施するための形態】
【００１８】
[032]次の詳細な説明では、周波数係数の値を値の１次元ストリングに変換するためにスキャン順序に従って周波数係数のセットを並べ替えることによって周波数係数のセットをエンコードするツールおよび技法を提示する。値のストリングは、マルチレベルネスティングされたセット表現を使用するエントロピーエンコーディング方法に従ってエンコードされる。次の詳細な説明では、周波数係数のセットをデコードする対応するツールおよび技法をも提示する。
【００１９】
[033]本明細書で説明する技法およびツールのうちのいくつかは、背景技術で注記した問題の１つまたは複数に対処する。通常、所与の技法／ツールは、そのような問題のすべてを解決するのではない。そうではなく、エンコーディング時間、エンコーディングリソース、デコーディング時間、デコーディングリソース、および／または品質における制約およびトレードオフを考慮して、所与の技法／ツールは、特定の実施態様またはシナリオについてエンコーディングおよび／または性能を改善する。
Ｉ．コンピューティング環境。
【００２０】
[034]図３に、複数の説明される実施形態を実施できる適切なコンピューティング環境（３００）の一般化された例を示す。コンピューティング環境（３００）は、使用または機能性の範囲に関する限定を提案することを意図されたものではない。というのは、本技法およびツールを、さまざまな汎用のまたは特殊目的のコンピューティング環境で実施できるからである。
【００２１】
[035]図３を参照すると、コンピューティング環境（３００）は、少なくとも１つの処理ユニット（３１０）およびメモリー（３２０）を含む。図３では、この最も基本的な構成（３３０）が、破線の中に含まれる。処理ユニット（３１０）は、コンピューター実行可能命令を実行し、実プロセッサーまたは仮想プロセッサーとすることができる。マルチプロセッシングシステムでは、処理能力を高めるために、複数の処理ユニットがコンピューター実行可能命令を実行する。メモリー（３２０）は、揮発性メモリー（たとえば、レジスター、キャッシュ、ＲＡＭ）、不揮発性メモリー（たとえば、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリーなど）、またはこの２つの何らかの組合せとすることができる。メモリー（３２０）は、説明される技法のうちの１つまたは複数と、並べ替えられた周波数係数のネスティングされたセット表現をエンコードし、かつ／またはデコードするツールとを伴うエンコーダーを実施するソフトウェア（３８０）を格納する。
【００２２】
[036]コンピューティング環境は、追加の特徴を有することができる。たとえば、コンピューティング環境（３００）は、ストレージ（３４０）、１つまたは複数の入力デバイス（３５０）、１つまたは複数の出力デバイス（３６０）、および１つまたは複数の通信接続（３７０）を含む。バス、コントローラー、またはネットワークなどの図示されていない相互接続機構が、コンピューティング環境（３００）のコンポーネントを相互接続する。通常、図示されていないオペレーティングシステムソフトウェアが、コンピューティング環境（３００）内で実行される他のソフトウェアのオペレーティング環境を提供し、コンピューティング環境（３００）のコンポーネントのアクティビティを調整する。
【００２３】
[037]ストレージ（３４０）は、リムーバブルまたはノンリムーバブルとすることができ、磁気ディスク、磁気テープもしくは磁気カセット、ＣＤ−ＲＯＭ、ＤＶＤ、または情報を格納するのに使用でき、コンピューティング環境（３００）内でアクセスできる任意の他の媒体を含む。ストレージ（３４０）は、ビデオエンコーダーおよび／またはビデオデコーダーを実施するソフトウェア（３８０）の命令を格納する。
【００２４】
[038]入力デバイス（１つまたは複数）（３５０）は、キーボード、マウス、ペン、もしくはトラックボールなどの接触入力デバイス、音声入力デバイス、スキャニングデバイス、またはコンピューティング環境（３００）に入力を提供する別のデバイスとすることができる。オーディオエンコーディングまたはビデオエンコーディングについて、入力デバイス（１つまたは複数）（３５０）を、サウンドカード、ビデオカード、ＴＶチューナーカード、またはアナログ形式もしくはディジタル形式のオーディオ入力もしくはビデオ入力を受け入れる類似するデバイス、あるいは、コンピューティング環境（３００）にオーディオサンプルもしくはビデオサンプルを読み取るＣＤ−ＲＯＭまたはＣＤ−ＲＷとすることができる。出力デバイス（１つまたは複数）（３６０）は、ディスプレイ、プリンター、スピーカー、ＣＤライター、またはコンピューティング環境（３００）から出力を提供する別のデバイスとすることができる。
【００２５】
[039]通信接続（１つまたは複数）（３７０）は、通信媒体を介する別のコンピューティングエンティティへの通信を可能にする。通信媒体は、コンピューター実行可能命令、オーディオもしくはビデオの入力もしくは出力、または変調されたデータ信号内の他のデータなどの情報を伝える。変調されたデータ信号とは、信号内で情報をエンコードする形でその特性のうちの１つまたは複数をセットされるか変更された信号である。限定ではなく例として、通信媒体は、電気、光、ＲＦ、赤外線、音響、または他の搬送波を用いて実施される有線または無線の技法を含む。
【００２６】
[040]技法およびツールを、コンピューター可読媒体の全般的な文脈で説明することができる。コンピューター可読媒体は、コンピューティング環境内でアクセスできるすべての使用可能な媒体である。限定ではなく例として、コンピューティング環境（３００）に関して、コンピューター可読媒体は、メモリー（３２０）、ストレージ（３４０）、通信媒体、および上記のいずれかの組合せを含む。
【００２７】
[041]技法およびツールを、プログラムモジュール内に含まれるものなど、コンピューティング環境内でターゲットの実プロセッサーまたは仮想プロセッサー上で実行されるコンピューター実行可能命令の全般的な文脈で説明することができる。一般に、プログラムモジュールは、特定のタスクを実行するか特定の抽象データ型を実施する、ルーチン、プログラム、ライブラリ、オブジェクト、クラス、コンポーネント、データ構造などを含む。プログラムモジュールの機能性を、さまざまな実施形態で望み通りに組み合わせ、またはプログラムモジュールの間で分割することができる。プログラムモジュールのコンピューター実行可能命令を、ローカルコンピューティング環境または分散コンピューティング環境内で実行することができる。
【００２８】
[042]提示のために、詳細な説明は、「決定する」および「再構成する」などの用語を使用して、コンピューティング環境内のコンピューター動作を説明する。これらの用語は、コンピューターによって実行される動作の高水準の抽象であり、人間によって実行される行為と混同してはならない。これらの用語に対応する実際のコンピューター動作は、実施態様に依存して変化する。
ＩＩ．並べ替えられた周波数係数のネスティングされたセット表現のための一般化されたエンコーディングツール
[043]図４に、本開示の実施形態を実施できる一般化されたエンコードツール（４００）のブロック図を示す。ツール（４００）は、シーケンス内で入力ピクチャー（４０５）を受け取る。用語ピクチャーは、一般に、ソースイメージデータ、コーディングされたイメージデータ、または再構成されたイメージデータを指す。プログレッシブビデオについて、ピクチャーは、プログレッシブビデオフレームである。インターレース式ビデオについて、ピクチャーは、文脈に依存して、インターレース式ビデオフレーム、フレームのトップフィールド、またはフレームのボトムフィールドを指す場合がある。入力ピクチャー（４０５）は、ビデオのフレーム全体または静的ピクチャーとすることができ、あるいは、入力ピクチャーを、ビデオのフレームの一部または静的ピクチャーの一部のみとすることができる。その代わりに、入力ピクチャー（４０５）が、ダウンサンプリングされたピクチャーの１つの色成分のみ、たとえばＹＣｂＣｒピクチャーのルマ成分を含むことができる。
【００２９】
[044]単純にするために、図４は、エンコーディングツール（４００）のうちで、動き推定、動き補償、および他の動き処理に関係するモジュールを示さない。いくつかの実施態様では、イントラピクチャー圧縮に関するサンプル値のブロックの処理に加えて、ツール（４００）は、図４に示されたモジュールを使用して、動き補償残差のサンプル値のブロックを処理する。所与の残差ブロックについて、このツールは、残差ブロックの周波数係数値の周波数変換、量子化、スキャン並べ替え、およびエントロピーエンコーディングを実行する。
【００３０】
[045]図４では、イントラピクチャー圧縮について、スプリッタ（４１０）が、入力ピクチャー（４０５）を、それぞれが複数のサンプル値を含む一連のブロックに分割する。８×８ブロックについて、各ブロックは、８行８列に配置された６４個のサンプル値を含む。その代わりに、ブロックを、４×４、４×８、８×４、１６×１６、またはある他のサイズにすることができる。
【００３１】
[046]周波数トランスフォーマー（４１５）は、変換係数のブロックを周波数領域（すなわち、スペクトル、変換）データに変換する。周波数トランスフォーマー（４１５）は、ＤＣＴ、ＤＣＴの変形形態、または他の周波数変換をサンプル値のブロックに適用し、周波数変換係数のブロックを作る。周波数トランスフォーマー（４１５）は、８×８、８×４、４×８、４×４、または他のサイズの周波数変換を適用することができる。
【００３２】
[047]クォンタイザー（４２０）は、変換係数のブロックを量子化する。クォンタイザー（４２０）は、ピクチャーごとベース、ブロックごとベース、またはその他ベースで変化するステップサイズを有する不均一スカラー量子化をスペクトルデータに適用する。クォンタイザー（４２０）は、スペクトルデータ係数に別のタイプの量子化、たとえば、係数の少なくとも一部に関する均一量子化もしくは適応量子化を適用することもでき、あるいは、周波数変換を使用しないエンコーダーシステム内では、空間領域データを直接に量子化することができる。
【００３３】
[048]係数スキャナー／リオーダラー（ｒｅ−ｏｒｄｅｒｅｒ）（４２５）は、量子化された係数をスキャンし、これらをスキャン順序に従って１次元ストリングに並べ替える。エントロピーエンコーダー（４３０）は、１次元ストリング内の係数をエンコードする。たとえば、エントロピーエンコーダー（４３０）は、適応ハフマンコーディングを使用して変換係数をエンコードする。代替案では、エントロピーエンコーダーは、ランレングスコーディング、ランレベルコーディング、またはある他のエントロピーエンコーディング方法を使用して変換係数をエンコードすることができる。エントロピーエンコーダー（４３０）は、エントロピーエンコードされた係数値（４３５）をバッファー（４４０）に出力する。
【００３４】
[049]いくつかの実施形態では、ツール（４００）は、係数スキャナー（４２５）から使用可能な複数のスキャン順序のうちのいずれをも使用する。たとえば、ツール（４００）は、図２のスキャン順序（２００）、図７のスキャン順序（７００）、図８のスキャン順序（８００）、および１つまたは複数の他のスキャン順序の間で切り替える。ツール（４００）は、ブロックごとベース、マクロブロックごとベース、スライスごとベース、ピクチャーごとベース、または何らかのその他ベースで使用可能なスキャン順序の間で選択する。複数の使用可能なスキャン順序は、エンコーディングツールと対応するデコーディングツールとの両方でセットされる１つまたは複数の事前定義のスキャン順序を含むことができる。事前定義のスキャン順序のうちの１つが使用されるときに、エンコーディングツール（４００）は、選択されたスキャン順序を識別するコードまたは他のビットストリーム要素を使用して、スキャン順序選択をシグナリングする。複数の使用可能なスキャン順序は、エンコーディング中にエンコーディングツール（４００）によって特に定義され、デコーディングでの使用のために対応するデコーディングツールにシグナリングされる、１つまたは複数のスキャン順序をも含むことができる。スキャン順序自体をシグナリングした後に、エンコーディングツール（４００）がその後にそのスキャン順序を使用する時に、ツール（４００）は、デコーダーが格納した、そのスキャン順序を識別するコードまたは他のビットストリーム要素をシグナリングすることができる。
【００３５】
[050]ジグザグスキャン順序（２００）は、変換係数のあるブロックについて非ゼロ値の適切なクラスター化を提供するが、他のスキャン順序を選択的に使用することによって、エンコーディングツール（４００）は、しばしば、エントロピーコーディング効率を改善することができる。ツール（４００）は、開ループ手法または閉ループ手法を使用してスキャン順序を選択することができる。バッファー（４４０）は、エントロピーエンコードされた係数値（４３５）を格納し、したがって、バッファー充満は、エントロピーエンコーディングによってもたらされる圧縮の効率のある尺度を提供する。この尺度は、圧縮された係数の総サイズまたはある他の測定値に基づくものとすることができる。係数スキャナー（４２５）は、異なるスキャン順序を適用することができ、ツール（４００）は、結果を評価する。閉ループ手法では、ツール（４００）は、使用可能なすべてのスキャン順序を適用し、最も効率的に圧縮されたエントロピーエンコードされた係数値（４３５）をもたらすスキャン順序を選択する。いくつかの実施態様では、事前定義のスキャン順序のどれもが許容できる性能をもたらさない（たとえば、事前にプログラミングされるかユーザー定義とすることができるしきい値に従って）場合に、ツール（４００）は、新しいスキャン順序を決定し、これを出力ビットストリームにおいてシグナリングする。代替案では、スキャン順序をユーザーが規定することができる。
ＩＩＩ．並べ替えられた周波数係数のネスティングされたセット表現用の一般的エンコーディング技法
[051]図５Ａに、周波数係数のブロックをエンコードする１つの一般化された技法（５００）の流れ図を示す。図４を参照して説明したツール（４００）などのエンコーディングツールまたは他のツールが、技法（５００）を実行する。図５Ａに示された技法（５００）は、スキャン順序の適応選択およびデフォルトのマルチレベルネスティングされたセット表現を使用するエントロピーエンコーディングを含む。
【００３６】
[052]このツールは、複数のスキャン順序のうちの１つを選択する（５０５）。スキャン順序は、実際の結果に従う圧縮の効率または圧縮の推定された効率に従って選択する（５０５）ことができる。さらに、スキャン順序を、複数の事前に決定されたスキャン順序のうちの１つとすることができ、あるいは、スキャン順序を、エンコーディングプロセス中にツール（４００）によって構成することができる。
【００３７】
[053]次に、このツールは、選択されたスキャン順序をブロックの複数の周波数係数に適用する（５１０）。このステップは、複数の周波数係数を係数の１次元ストリングに並べ替える。好ましくは、スキャン順序による並べ替えは、たとえば１次元ストリングの先頭での、係数の１次元ストリング内の非ゼロ周波数係数値のクラスター化をもたらす。
【００３８】
[054]最後に、このツールは、並べ替えられた周波数係数のデフォルトのマルチレベルネスティングされたセット表現を使用して、並べ替えられた周波数係数をエントロピーエンコードする（５１５）。図１１Ａ、１１Ｂ、および１１Ｃに、例のマルチレベルネスティングされたセット表現を示す。周波数係数を、適応ハフマンコーディング、ランレングスコーディング、またはある他の方法などのエントロピーエンコーディング方法を使用して、ネスティングされたセット表現内でエンコードすることができる。
【００３９】
[055]このツールは、ブロックごとベースまたは何らかのその他ベースでこの技法（５００）を繰り返す。たとえば、このツールは、フレームごとベースでスキャン順序を選択し、フレーム全体についてスキャン順序を選択し、その後、エントロピーエンコーディングの前にフレーム内のブロックの係数を並べ替える。
【００４０】
[056]図５Ｂに、複数の周波数係数のブロックをエンコードする代替の一般化された技法（５２０）の流れ図を示す。図４を参照して説明したツール（４００）などのエンコーディングツールまたは他のツールが、技法（５２０）を実行する。図５Ａに示された技法（５００）と比較して、図５Ｂに示された技法（５２０）は、デフォルトのスキャンパターンを使用する並べ替えおよび異なるマルチレベルネスティングされたセット表現の間の適応選択を含む。この技法（５２０）では、スキャン順序は、以前の分析を実行したツールによって、ユーザー定義によって、またはある他の決定要因によってのいずれかで、既に決定されている。このツールは、ブロックの周波数係数にスキャン順序を適用する（５２５）。これは、複数の周波数係数を係数の１次元ストリングに並べ替える。
【００４１】
[057]このツールは、次に、複数のマルチレベルネスティングされたセット表現のうちの１つを選択する（５３０）。ネスティングされたセット表現を、エンコーディングの効率、ユーザー定義、またはある他の要因に基づいて選択することができる。図１１Ａは、１次元ベクトル内の６４個の変換係数の１つの例のマルチレベルネスティングされたセット表現を示し、このマルチレベルネスティングされたセット表現に従って、各セットが２つのサブセットに分割され、各サブセットは、１つまたは複数の変換係数を含む。図１１Ｂは、代替のマルチレベルネスティングされたセット表現を示し、このマルチレベルネスティングされたセット表現に従って、各セットが２つ、３つ、または４つのサブセットに分割され、各サブセットは、１つまたは複数の変換係数を含む。図１１Ｃは、３つのレイヤーを有する第３のマルチレベルネスティングされたセット表現を示し、あるレイヤーでは、各セット（またはサブセット）が４つのサブセット（または変換係数）に分割される。他のネスティングされたセット表現は、６４個の係数を異なる形で区分し、たとえば、最上レイヤー０から６４までを位置０から３までの第１セットおよび位置４から６３までの第２セットに分割する、第２セットを第１サブセットおよび第２サブセットに分割するなどである。周波数係数のクラスター化の特定のパターンを、あるスキャン順序またはピクチャーのタイプについて予測することができ、特定のネスティングされたセット表現を指定して、パターンを利用し、エンコーディング効率をさらに高めることができる。係数のセットをより多くのサブセットへより積極的に分割する、エントロピーコーディングの特定のタイプは、特定のネスティングされたセット表現に関してよりよく働くことができる。次に、このツールは、適応ハフマンエンコーディング、ランレングスエンコーディング、またはある他のエントロピーエンコーディング方法などの方法に従って、選択されたネスティングされたセット表現を使用して、並べ替えられた複数の周波数係数をエントロピーエンコードする（５３５）。
【００４２】
[058]このツールは、ブロックごとベースまたは何らかのその他ベースで技法（５２０）を繰り返す。たとえば、このツールは、フレームごとベースでマルチレベルネスティングされたセット表現を選択し、フレーム全体のネスティングされたセット表現を選択し、その後、選択されたネスティングされたセット表現を使用して、エントロピーエンコーディングの前にフレーム内のブロックの係数を並べ替える。
【００４３】
[059]図５Ｃは、周波数係数のブロックをエンコードする代替の一般化された技法（５４０）の流れ図である。図４を参照して説明したツール（４００）などのエンコーディングツールまたは他のツールが、技法（５４０）を実行する。この技法（５４０）は、一般に、図５Ａおよび５Ｂを参照して説明した技法（５００、５２０）を組み合わせる。
【００４４】
[060]この技法（５４０）では、このツールは、複数のスキャン順序のうちの１つを選択し（５４５）、その後、選択されたスキャン順序をブロックの複数の周波数係数に適用する（５５０）。次に、このツールは、複数のネスティングされたセットパーティションのうちの１つを選択し（５５５）、ランレングスエンコーディング、適応ハフマンエンコーディング、またはある他の方法などのエントロピーエンコーディング方法に従って、選択されたネスティングされたセットパーティションを使用して、並べ替えられた複数の周波数係数をエントロピーエンコードする（５６０）。このツールは、ブロックごとベースまたは何らかのその他ベースでこの技法（５４０）を繰り返す。たとえば、このツールは、フレームごとベースでスキャン順序およびマルチレベルネスティングされたセット表現を選択し、そのフレーム全体のためのスキャン順序およびネスティングされたセット表現を選択し、その後、選択されたネスティングされたセット表現を使用するエントロピーコーディングの前に、選択されたスキャン順序を使用してフレーム内のブロックの係数を並べ替える。
ＩＶ．並べ替えられた周波数係数のネスティングされたセット表現用の例示的なエンコーディング技法
[061]図６に、ピクチャーの周波数係数のブロックをエンコードする例示的な技法（６００）の流れ図を示す。図４を参照して説明したツール（４００）などのエンコーディングツールまたはある他のエンコーディングツールが、技法（６００）を実行する。
【００４５】
[062]この技法（６００）では、このツールは、評価のために事前に決定されたスキャン順序を選択する（６０５）。一般に、このツールは、複数の事前に決定されたスキャン順序のどれであっても使用することができる。ある種の実施態様では、デフォルトスキャン順序が存在し、それが最初に選択されるスキャン順序である。デフォルトスキャン順序は、エンコーディングツールのソースコード内で、またはエンコーディングツールセッティングとして定義することができ、あるいは、ユーザーが、エンコーディングを開始する時に特定のピクチャーまたはシーケンス用のデフォルトスキャン順序を定義することができる。代替案では、デフォルトスキャン順序は存在せず、その代わりに、複数の事前に決定されたスキャン順序のうちの１つが、ランダムに選択される。
【００４６】
[063]このツールは、ブロックの周波数係数を並べ替えるために、選択された事前に決定されたスキャン順序を適用する（６１０）。所与のブロックについて、事前に決定されたスキャン順序の適用は、一般に、スキャン順序に従って周波数係数の２次元ブロックをトラバースすることと、係数を周波数係数の１次元ストリングに並べ替えることとを含む。
【００４７】
[064]このツールがブロックの周波数係数にそれぞれスキャン順序を適用（６１０）した後に、このツールは、係数並べ替えが十分であるかどうかをチェックする（６１５）。たとえば、このチェック（６１５）は、ブロックの複数の周波数係数へのスキャン順序の適用（６１０）が、２次元ブロックの非ゼロ周波数値を係数の１次元ストリングの前部に十分にクラスター化するかどうかを判定することを含む。このチェック（６１５）を、このツールに関する事前に決定されるしきい値、ユーザーが選択するしきい値、またはある他の判定に基づくものとすることができる。
【００４８】
[065]スキャン順序判定は、フレームがエンコードされる時に、そのフレーム内のブロックのすべてが同一の選択されたスキャン順序を使用してエンコードされるように、実行される。代替案では、ピクチャーのシーケンスのすべてが同一の全般的なスキャン順序を用いてエンコードされるように、スキャン順序判定をシーケンスの始めに実行することができ、あるいは、スキャン順序を、ブロックごとベースまたは何らかのその他ベースで判定することができる。スキャン順序選択が発生する時を、ユーザー定義の判断基準に従って、またはエンコーディングツールのソースコード内でエンコードされるディレクティブなどの他の判断基準に従って選択することができる。
【００４９】
[066]係数が十分に並べ替えられる場合に、このツールは、次に、ピクチャーのブロックの並べ替えられた周波数係数のマルチレベルネスティングされたセット表現を決定する（６２０）。ある種の実施態様では、このツールのために使用可能な１つのネスティングされたセット表現だけがある。ネスティングされたセット表現は、エンコーディングツールのソースコード内で、エンコーディングツールセッティングとして、ユーザーディレクティブによって、またはある他の判断基準によって、事前に定義される。代替案では、このツールは、そこから選択すべき複数のネスティングされたセット表現を有する。一般に、ネスティングされたセット表現は、使用されるエントロピーエンコーディングのタイプ、複数の周波数係数が全般的に一貫したパターンに配置されるかどうか、またはネスティングされたセット表現のどれがピクチャーの周波数係数の１次元ストリングの最も効率的なエンコーディングを作るかなどの要因に基づいて定義するか選択することができる。
【００５０】
[067]このツールは、並べ替えられた周波数係数に選択されたマルチレベルネスティングされたセット表現を適用して（６２５）、ピクチャーのブロックのそれぞれの一連の記号を作り、それらの記号をエントロピーエンコードする（６３０）。一般に、マルチレベルネスティングされたセット表現の所与のレイヤーについて、エンコーディングツールは、そのレイヤーのセット（またはサブセット）内の係数値を要約する記号を使用して結果を表す。たとえば、各記号は、周波数係数値の所与のセット（またはサブセット）内の非ゼロ周波数係数値の存在または不在を示す。所与のセット（またはサブセット）の記号が、周波数係数値の所与のセット（またはサブセット）内の少なくとも１つの非ゼロ周波数係数値の存在を示す場合には、別の記号が、周波数係数値のその所与のセット（またはサブセット）のより下のレイヤーのサブセット内の非ゼロ周波数係数値の存在または不在を示すことができる。セットおよびサブセットのこの再帰的ネスティングは、サブセットがゼロ値のみまたは１つの非ゼロ係数のみを含むようになるまで繰り返すことができ、後者の場合には、別の記号が、その位置の特定の周波数係数の非ゼロ値を示す。
【００５１】
[068]いくつかの実施態様で、このツールは、並べ替えられた周波数係数に適応ハフマンコーディングを適用する。代替案では、このツールは、非適応ハフマンコーディング、ランレングスコーディング、算術コーディング、ＬＺコーディング、またはある他の方法など、他のエントロピーエンコーディング方法を使用することができる。
【００５２】
[069]前のステップに戻って、係数並べ替え（６１５）が、並べ替えがある種の効率しきい値を満足しないことなどの理由またはある他の理由から十分ではない場合には、このツールは、他の事前に決定されたスキャン順序が使用可能であるかどうかをチェックする（６３５）。１つまたは複数の異なる事前に決定されたスキャン順序が使用可能である場合には、このツールは、１つまたは複数の事前に決定されたスキャン順序のうちの１つを選択し（６０５）、選択されたスキャン順序に従ってブロックの周波数係数を並べ替えるために、選択されたスキャン順序を適用し（６１０）、係数並べ替えが十分であるかどうかをチェックする（６１５）というプロセスを繰り返す。
【００５３】
[070]このツールがチェックし（６３５）、別の事前に決定されたスキャン順序が使用可能ではない場合には、このツールは、十分な係数並べ替えを生じる新しいスキャン順序を判定し（６４０）、そのスキャン順序を適用して、ブロックの周波数係数を並べ替える。別の事前に決定されたスキャン順序が、ユーザーが特定のスキャン順序を使用しないことを指定する、１つのスキャン順序だけがこのツールのために事前に決定されている、またはスキャン順序のすべてをトラバースし終え、そのどれもが係数を十分には並べ替えないなどの理由から使用可能ではない場合がある。代替案では、別の事前に決定されたスキャン順序が使用可能ではない場合には、このツールは、単純に、最も効率的な係数並べ替えを生じた事前に決定されたスキャン順序を使用し、あるいは、このツールは、ユーザーにエラーをシグナリングすることができる。
Ｖ．例のスキャン順序およびスキャン順序選択のシグナリング
[071]図２に、図４に示されたものなどのエンコーディングツール（４００）が周波数係数を並べ替えるために適用できる１つの可能なスキャン順序（２００）を示す。しかし、固定ジグザグスキャン順序の使用は、変換係数のいくつかのブロックについて非効率的である場合がある。図７および８に、２つの代替のスキャン順序を示す。代替案では、エンコーディングツールおよびデコーディングツールは、他のおよび／または追加のスキャン順序を使用する。
【００５４】
[072]図７に、図４に示されたものなどのエンコーディングツール（４００）が周波数係数を並べ替えるために適用できる１つの代替のスキャン順序（７００）を示す。図７に示されたスキャン順序（７００）を、周波数係数の一般的分布に使用することができる。ある種の実施態様では、このスキャン順序（７００）は、あるブロックのデフォルトスキャン順序である。
【００５５】
[073]図７は、例示的な１次元ストリング（７５０）を作るための、図１に示された周波数係数（１００）へのスキャン順序（７００）の適用の結果をも示す。係数値２５は、スキャン順序（７００）の係数位置０にあり、したがって、１次元ストリング（７５０）の最初の値は、２５である。スキャン順序（７００）に沿って継続すると、次にスキャンされる係数値は、このスキャン順序の係数位置１にあり、これは、周波数係数（１００）内の値１２に対応し、したがって、係数値１２が、１次元ストリング（７５０）内で次にある。これに、係数位置２の係数値０が続き、その後、位置３の値−５が続く。係数位置４から２８までは、０の係数値を有し、１次元ストリング（７５０）内の２５個の０値になるなどである。スキャン順序（７００）によって作られる１次元ストリング（７５０）は、図２の従来技術のジグザグパターン（２００）に従う並べ替えによって作られる１次元ストリング（２５０）よりわずかに効率的である（非ゼロ値のクラスター化に関して）。
【００５６】
[074]図８は、図１に示された特定の周波数係数（１００）のより効率的なスキャン順序（８００）を示す。このスキャン順序（８００）は、特定のユーザーが定義することができる。代替案では、このスキャン順序（８００）を、エンコーディングツールから使用可能な複数の可能な事前定義のスキャン順序の１つとし、複数の周波数係数を最も効率的に並べ替えるスキャン順序として選択することができる。あるいは、スキャン順序（８００）は、事前に決定されたスキャン順序の１つではなく、事前に決定されたスキャン順序のどれもが周波数係数（１００）を適当に並べ替えない場合に、エンコーディングツールによって決定される。
【００５７】
[075]図８は、例示的な１次元ストリング（８５０）を作るための、図１に示された周波数係数（１００）へのスキャン順序（８００）の適用の結果を示す。図７のスキャン順序（７００）の適用または図２のスキャン順序（２００）の適用の結果と比較すると、１次元ストリング（８５０）は、この特定のスキャン順序（８００）に関して、大幅によりコンパクトである。
【００５８】
[076]図９Ａおよび９Ｂに、エンコーディングツールおよびデコーディングツールがフレームごとベースで複数のスキャン順序オプションの中で選択する時の選択情報のシグナリングおよび受取の１つの手法を示す。この手法は、シーケンスレイヤー構文要素およびピクチャーレイヤー構文要素の組合せを使用する。
【００５９】
[077]図９Ａは、シーケンスについてエンコーディングツールによって定義されたスキャン順序を示すシーケンスレイヤー構文要素を受け取るデコーディングツールの擬似コードリスティング（９００）を示す。エンコーディングツールは、情報の対応するシグナリングを実行する。シーケンスヘッダ内で、デコーディングツールは、何個のスキャン順序（０から１５まで）がシーケンスヘッダ内で続くのかを示す構文要素ＮｕｍＯｆＮｏｎＤｅｆａｕｌｔＳｃａｎＯｒｄｅｒｓを受け取り、解析する。
【００６０】
[078]定義された非デフォルトスキャン順序のそれぞれについて、デコーディングツールは、スキャン順序のインデックス位置を示す情報を受け取る。図９Ａに、８×８ブロックのシグナリングを示す。８×８ブロックのスキャン順序内の６４個の位置のそれぞれについて、デコーディングツールは、その位置がスキャン順序位置のデフォルト値を有するかどうかを示す単一ビットＤｅｆａｕｌｔＩｄｘを受け取る。次のリスティング（デコーディングツールとエンコーディングツールとの両方から使用可能）は、スキャン順序のデフォルト位置を示す。ＤｅｆａｕｌｔＳｃａｎＯｒｄｅｒＩｄｘ［６４］＝｛０，１，４，５，１６，１７，２０，２１，２，３，６，７，１８，１９，２２，２３，８，１０，１２，１３，２４，２５，２８，２９，９，１１，１４，１５，２６，２７，３０，３１，３２，３４，４０，４１，４８，４９，５２，５３，３３，３５，４２，４３，５０，５１，５４，５５，３６，３８，４４，４５，５６，５７，６０，６１，３７，３９，４６，４７，５８，５９，６２，６３｝。これらのデフォルト位置は、図７に示された位置に対応する。ＤｅｆａｕｌｔＩｄｘが、デフォルト位置がシグナリングされるスキャン順序内で使用されることを示す場合には、デコーディングツールは、ＤｅｆａｕｌｔＳｃａｎＯｒｄｅｒＩｄｘ内のデフォルト位置をルックアップする。そうではない場合には、デコーディングツールは、シグナリングされるスキャン順序内で使用される非デフォルト位置を示す６ビットを得る。
【００６１】
[079]デコーディングツールは、エンコーディングツールおよびデコーディングツールから必ず使用可能である０個以上の他のスキャン順序に加えて、シーケンス用のシグナリングされた事前定義のスキャン順序を格納する。図９Ａは、８×８ブロックのシグナリングを示すが、他のサイズのブロックについて、エンコーディングツールは、スキャン順序ごとにブロックサイズをシグナリングすることができる。
【００６２】
[080]図９Ｂに、スキャン順序の間で切り替えるデコーディングツールの擬似コードリスティング（９１０）を示す。デコーディングツールは、たとえば、デコード中にフレームごとベースでスキャン順序を切り替える。エンコーディングツールは、スキャン順序選択情報の対応するシグナリング、たとえば、フレームに使用すべきスキャン順序のフレームヘッダ内シグナリングを実行する。
【００６３】
[081]デコーディングツールは、フレームにデフォルトスキャン順序を使用すべきなのか（フレームに関するスキャン順序情報のさらなるシグナリングはない）あるいはフレームに非デフォルトスキャン順序を使用すべきなのかを示す構文要素ＵｓｅＤｅｆａｕｌｔＯｒｄｅｒを受け取り、解析する。デフォルトスキャン順序は、すべてのシーケンスについてまたはエンコード／デコードされつつある特定のシーケンスについて、エンコーディングツールおよびデコーディングツールによって定義し、あるいはエンコーディングツールおよびデコーディングツールのセットルールによって導出することができる。
【００６４】
[082]デコーディングツールがフレームに非デフォルトスキャン順序を使用する場合に、デコーディングツールは、非デフォルトスキャン順序のうちでそのシーケンスについてシグナリングされたもの（ある場合に）を使用すべきかどうかをチェックする。そうである場合には、デコーディングツールは、非デフォルトスキャン順序のうちでそのシーケンスについてシグナリングされた１つを識別する構文要素ＯｒｄｅｒＩｄｘを受け取り、解析する。
【００６５】
[083]そうではない場合（非デフォルトスキャン順序がシーケンスについてシグナリングされなかったか、シグナリングされたが使用すべきではない場合）には、デコーディングツールは、新しいスキャン順序に関する情報を受け取り、解析する。図９Ａと同様に、図９Ｂは、８×８ブロックのシグナリングを示す。８×８ブロックの新しいスキャン順序内の６４個の位置のそれぞれについて、デコーディングツールは、その位置がスキャン順序位置のデフォルト値を有するかどうかを示す単一ビットＤｅｆａｕｌｔＩｄｘを受け取る。そうでない場合には、デコーディングツールは、新しいスキャン順序内で使用される非デフォルト位置を示す６つのビットを得る。
【００６６】
[084]代替案では、エンコーディングツールおよびデコーディングツールは、マクロブロックごとベース、フレームごとベース、または何らかのその他ベースでスキャン順序を切り替えるのに、別のビットストリーム構文を使用する。
ＶＩ．マルチレベルネスティングされたセット表現を使用する、例のエンコーディング
[085]図１０に、マルチレベルネスティングされたセット表現を使用して複数の周波数係数の並べ替えられたブロックをエンコードする例示的な技法（１０００）を示す。技法（１０００）は、たとえば、図６に示された技法（６００）で使用することができる。技法（１０００）は、再帰的である。係数値のセットをエンコードする時に、技法（１０００）は、いくつかの場合に、セット内の係数値のサブセットまたは複数のサブセットのそれぞれを再帰的にエンコードする。技法（１０００）は、終了条件を含み、この終了条件では、技法（１０００）は、エントリーポイントにリターンするか、セットのエンコードを終えている。
【００６７】
[086]この技法（１０００）では、エンコーディングツールは、特定のスキャン順序に従ってブロックの周波数係数値を並べ替えることによって作られた１次元ストリング内の係数値のセットを受け取る。このツールは、セットの所与のレベルにある１つまたは複数の係数値を評価する（１００５）。この技法（１０００）が最初に開始される時に、複数の周波数係数のセットは、一般に、１次元ストリング内の複数の周波数係数のすべてを含む。後に、この技法（１０００）を、１次元ストリングのサブセットであるより小さいセットに対して実行することができる。この理由から、当該のセットは、６４個の係数値、６３個の係数値、３２個の係数値、１６個の係数値、１個の係数値、またはある他の個数の係数値を含む場合がある。
【００６８】
[087]エンコーディングツールは、係数の所与のセットが単一の周波数係数だけを含むかどうかをチェックする（１０１０）。周波数係数のセットが単一の係数だけを含む場合には、このツールは、その係数の値をエンコードする（１０１５）。たとえば、このツールは、ゴロムコーディング、ハフマンコーディング、または単一係数値の別の形の可変長コーディングを使用する。単一係数の値の振幅が他所で暗示される場合（たとえば、あるタイプのエントロピーコーディングについて係数が−１または１であるとき）に、このツールは、単一の係数の符号を示すフラグをシグナリングする。その後、このツールは、エントリーポイントにリターンし（１０２０）（サブセットについて）、あるいは周波数係数のその特定のセットのエンコードを終えている。
【００６９】
[088]所与のセットがセット内に複数の周波数係数を含む場合には、このツールは、セットを分析し、セットの１つまたは複数のコードをエンコードする（１０２５）。使用されるエントロピーエンコーディングのタイプに応じて、コード（１つまたは複数）は、セット内の非ゼロ周波数係数の存在または不在を示し、セット内のどのサブセットが非ゼロ値の周波数係数を含むかを示すこともできる。セットが非ゼロ周波数係数を全く含まない場合には、このツールは、セットが非ゼロ周波数係数を全く含まないことを示す記号をエンコードする。しかし、セットが少なくとも１つの非ゼロ周波数係数を含む場合には、このツールは、セット内の１つまたは複数の非ゼロ周波数係数の存在を示す１つまたは複数の記号をエンコードする。これらのコード（１つまたは複数）は、所与のセットをｎ個のサブセットに分割しなければならないことをも示し、ｎ個のサブセットのそれぞれでの非ゼロ周波数係数値の存在または不在に関する情報を与える。たとえば、コード（１つまたは複数）は、１番目のサブセットが非ゼロ値を有する少なくとも１つの周波数係数を含まないこと、２番目のサブセットが非ゼロ値を有する少なくとも１つの周波数係数を含むこと、および３番目のサブセットが含まないことを示すことができる。いくつかのマルチレベルネスティングされたセット表現について、ｎは、２と等しく、各セットは、２つまでのサブセットに分割され得る。代替案では、ｎは、３または４などのある他の数である。ある種の実施形態では、コード（１つまたは複数）は、さらに、サブセット内の単一の係数が正または負のどちらであるのか、あるいはサブセット内の係数のいずれかが所与の値以上であるかどうかなど、セット内の周波数係数の非ゼロ値（１つまたは複数）に関する他の情報を示すことができる。
【００７０】
[089]このツールがセットの１つまたは複数のコードをエンコード（１０２５）した後に、このツールは、所与のセットを周波数係数のｎ個のサブセットに分割すべきかどうかを判定する（１０３０）。セットに非ゼロ周波数係数がない場合には、このツールは、セットを分割せず、エントリーポイントにリターンし（１０２０）（サブセットについて）、あるいは周波数係数のその特定のセットのエンコードを終えている。
【００７１】
[090]しかし、セットが１つまたは複数の非ゼロ周波数係数を含む場合には、このツールは、少なくとも１つの非ゼロ値を含むすべてのサブセットをエンコードする。このツールは、所与のセットをｎ個のサブセットに分割し（１０３０）、それらのサブセットの最初のサブセットを「セット」としてエンコードすべきかどうかを調べるためにチェックする（１０３５）。サブセットの最初のサブセットが非ゼロ周波数係数を含む場合には、このツールは、より下のレベルで最初のサブセットに対してこの方法（１０００）を実行し、これによって、最初のサブセットを「セット」としてエンコードする（１０４０）。サブセットがエンコード（１０４０）された時に、このツールが方法（１０００）を実行することによって作られた記号およびコードは、分析される周波数係数値が最初のセットのサブセットであることを明瞭にするように編成され、ネスティングされたセット表現内の表現のより下のレベルで分析される。
【００７２】
[091]最初のサブセットが少なくとも１つの非ゼロ周波数係数を含まないので、これをエンコードしてはならない場合には、このツールは、他のサブセットがセットに残っているかどうかをチェックする（１０４５）。同様に、このツールが最初のサブセットをエンコード（１０４０）した後に、このツールは、他のサブセットがセットに残っているかどうかをチェックする（１０４５）。別のサブセットが存在する場合には、このツールは、そのサブセットを「セット」としてエンコードすべきかどうかを調べるためにチェックし（１０３５）、そうである場合には、このツールは、そのサブセットをエンコードする（１０４０）。このツールが、他のサブセットがセットに関して残っていないと判定した後に、このツールは、エントリーポイントにリターンし（１０２０）（サブセットについて）、あるいは周波数係数のその特定のセットのエンコードを終え、このツールは、次のセットまたはサブセットをエンコードするためにより上のレベルにリターンするか、別のブロックまたはピクチャーに移動するかのいずれかになる。
ＶＩＩ．例のマルチレベルネスティングされたセット表現
[092]変換係数のマルチレベルネスティングされたセット表現を使用することは、ゼロ値変換係数の要約表現を使用することによって、変換係数の効率的なエントロピーエンコーディングを容易にすることができる。マルチレベルネスティングされたセット表現は、適応スキャン順序選択と組み合わせて使用される時に特に有効であるが、これらを、非適応スキャン並べ替えと共に使用することもできる。実施態様に応じて、あるブロックのマルチレベルネスティングされたセット表現を、ハフマンコーディング、ランレベルコーディング、ランレングスコーディングの別の変形形態、またはある他の形のエントロピーコーディングを使用してエンコードすることができる。
【００７３】
[093]変換係数（量子化の後）の通常の８×８ブロックを検討されたい。非ゼロ係数値のほとんどは、低周波数係数の左上角など、少数のエリアにクラスター化される。有効なマルチレベルネスティングされたセット表現は、ゼロ値高周波数係数を一緒に単一ブロックとしてグループ化し、これらを単一のゼロ値係数（または記号）として表す。この形でゼロ値係数を１つまたは複数のブロックにグループ化することのほかに、マルチレベルネスティングされたセット表現は、非ゼロ値を含む係数のサブセット（または非ゼロ値およびゼロ値の混合物）を単一ブロックとしてグループ化し、これらを１つの係数（または記号）として扱う。所与のレベルでは、マルチレベルネスティングされたセット表現は、１つまたは複数の「要約」係数（または記号）を含み、この「要約」係数（または記号）は、その後、エントロピーエンコードされる。１つまたは複数の非ゼロ値係数を含むブロックについて、マルチレベルネスティングされたセット表現は、係数をエンコーディングのために単一の係数（または記号）として表されるサブグループに再帰的に分割する。
【００７４】
[094]図１１Ａ、１１Ｂ、および１１Ｃに、例のマルチレベルネスティングされたセット表現を示す。図１１Ａ、１１Ｂ、および１１Ｃは、たとえば図１０に示された技法（１０００）で使用できる、６４個の係数を有するブロックの例のマルチレベルネスティングされたセット表現（１１００、１１５０、１１８０）を示す。代替案では、エンコーディングツールおよびデコーディングツールは、他のおよび／または追加のマルチレベルネスティングされたセット表現を使用する。
【００７５】
[095]図１１Ａを参照すると、セットがｎ個のサブセットに分割される時に、ｎは２と等しい。図１１Ｂに示された表現（１１５０）では、ｎは、２、３、または４と等しく、図１１Ｃに示された表現（１１８０）では、ｎは、４と等しい。代替案では、ｎを、３、４、またはある他の数と等しいものとすることができる。
【００７６】
[096]この表現では、位置０から６３までの係数値は、第１レベル（１１０５）で第１セットを表し、潜在的に、位置０の係数値を含む第２レベル（１１１０）の第１サブセットおよび位置１から６３までの係数値を含む第２レベル（１１１０）の第２サブセットに分割される。位置０のセットは、単一の係数値を有するセットであり、したがって、位置０の周波数係数の非ゼロ値は、たとえば第２レベル（１１１０）のコードを使用して、エントロピーエンコーディングされる。
【００７７】
[097]第２レベル（１１１０）のサブセット（位置１から６３までの）が、非ゼロ係数値を含む場合には、位置１から６３までの係数値が、第３レベル（１１１５）で２つのサブセットに分割される。第３レベル（１１１５）のサブセットの第１サブセットは、位置１から３までの係数値を含み、第３レベル（１１１５）のサブセットの第２サブセットは、位置４から６３までの係数値を含む。ゼロ値係数だけを含むサブセットは、さらに分割はされない。しかし、第３レベル（１１１５）のサブセットのうちの１つが、非ゼロ係数値を含む場合には、図１１Ａに示されているように、第３レベル（１１１５）のサブセットが、第４レベルで複数の異なるサブセットに分割され、以下同様である。
【００７８】
[098]図１１Ｂに、それに従って第１レベル（１１５５）のセット（位置０から６３までの）が第２レベル（１１６０）で潜在的に２つのサブセットに分割され、第２レベル（１１６０）の第２サブセット（位置１から６３までの）が第３レベル（１１６５）で潜在的に３つのサブセットに分割される、第２のマルチレベルネスティングされたセット表現（１１５０）を示す。図１１Ｂの表現（１１５０）は、図１１Ａの表現（１１００）より幅広いが、表現（１１００）ほど深くはない。というのは、セット（またはサブセット）が、より下のレベルで潜在的に３つまたは４つのサブセットに分割されるからである。
【００７９】
[099]図１１Ｃに、それに従って第１レベル（１１８５）のセット（位置０から６３までの）が第２レベル（１１９０）で潜在的に４つの等しいサイズのサブセットに分割され、第２レベル（１１９０）のサブセットのそれぞれが、第３レベル（１１９５）で潜在的に４つのサブセットに分割される、第３のマルチレベルネスティングされたセット表現（１１８０）を示す。図１１Ｃの表現（１１８０）は、図１１Ｂの表現（１１５０）よりさらに幅広い。というのは、セット（またはサブセット）が、各より下のレベルで潜在的に４つのサブセットに分割されるからである。
【００８０】
[0100]図１２Ａに、図７の例示的な１次元ストリング（７５０）への図１１Ａのマルチレベルネスティングされたセット表現（１１００）の適用を示す。変換係数（１００）の１次元ストリング（７５０）は、位置０から位置６３までの係数の値を含む第１レベルセット（１２０５）を提供する。第１レベルセット（１２０５）は、単一値を有するセットではなく、少なくとも１つの非ゼロ値を含み、したがって、第１レベルセットは、複数のサブセットに分割される。エントロピーコーディングがどのように実施されるかに応じて、１つまたは複数のコードは、第１レベルセットが第２レベル（１２１０）で２つのサブセットに分割されることを示す。現在の例では、第２レベル（１２１０）の２つのサブセットは、位置０の係数の第１サブセットおよび位置１から６３までの係数の第２サブセットを含む。
【００８１】
[0101]このツールは、第２レベル（１２１０）の第１サブセット（位置０の）を「セット」としてエンコードする。現在の例では、このサブセットは、単一の値すなわち、係数位置０の係数値２５だけを含む。このツールは、この第１サブセットをエントロピーエンコードする。
【００８２】
[0102]このツールは、第２レベル（１２１０）の第２サブセット（位置１から６３までの係数の値を含む）のセットとしてのエンコードに進む。第２サブセットは、第３レベル（１２１５）で２つのサブセットに分割される。第３レベルサブセットの第１サブセットは、係数値１２、０、および−５を含み、これらは、それぞれ係数位置１、２、および３の係数値である。第２の第３レベルサブセットは、係数位置４から６３までの係数値を含む。
【００８３】
[0103]第３レベル（１２１５）の第１サブセットは、第４レベル（１２２０）で２つのサブセットに分割される。これらの第４レベルサブセットの第１サブセットは、係数値１２を含み、これは、係数位置１の係数値である。この係数値が、エントロピーエンコードされる。これらの第４レベルサブセットの他のサブセットは、値０および−５を含み、これらは、係数位置２および３の係数値である。この第４レベルサブセットは、第５レベル（１２２５）で２つのサブセットに分割される。これらの第５レベルサブセットの第１サブセットは、係数位置２の単一の係数値０を含み、これらの第５レベルサブセットの第２サブセットは、係数位置３の単一の係数値−５を含む。これらのサブセットのそれぞれが、単一の値を有するサブセットであり、したがって、サブセットのそれぞれの係数値が、エントロピーエンコードされる。
【００８４】
[0104]第３レベル（１２１５）に戻って、第３レベル（１２１５）の第２サブセット（係数位置４から６３までの係数値を含む）は、第４レベル（１２２０）で２つのサブセットに分割される。これらの第４レベルサブセットの第１サブセットは、位置４から１５までの係数の値を含み、これらの第４レベルサブセットの第２サブセットは、位置１６から６３までの係数の値を含む。この例では、係数位置４から１５までの係数値は、すべて０である。このゆえに、位置４から１５までのサブセットは、非ゼロ係数値を含まないので、さらに分割される必要がない。このサブセットが非ゼロ周波数係数値を含まないことを示すコードが、シグナリングされ、このサブセットは分割されず、さらなる分析は、このサブセットに対して実行されない。位置１６から６３までの係数の値を含むサブセットは、第５レベル（１２２５）で２つの別々のサブセットに分割され、このサブセットのそれぞれは、ゼロ値係数および非ゼロ係数の混合物を含む。セットのこの分析およびサブセットへの選択的分割は、非ゼロ周波数係数のすべてが突き止められ、エントロピーエンコードされるまで継続される。
【００８５】
[0105]図１２Ｂに、図８の例示的な１次元ストリング（８５０）への図１１Ａのマルチレベルネスティングされたセット表現（１１００）の適用を示す。全体的に、図１２Ｂは、図８のスキャン順序（８００）が、図１の変換係数（１００）を図７のスキャン順序（７００）より効率的にクラスター化することを示す。
【００８６】
[0106]変換係数（１００）の１次元ストリング（８５０）は、位置０から位置６３までの係数の値を含む第１レベルセット（１２５５）を提供する。第１レベルセット（１２５５）は、２つのサブセットに分割され、１つまたは複数のコードが、第２レベル（１２６０）での２つのサブセットへの分割を示す。第２レベル（１２１０）の２つのサブセットは、位置０の係数の第１サブセットおよび位置１から６３までの係数の第２サブセットを含む。位置０のサブセットは、単一の値すなわち係数位置０の係数値２５を含み、この値は、エントロピーコーディングされる。位置１から６３までのサブセットは、第３レベル（１２６５）で２つのサブセットに分割される。
【００８７】
[0107]第３レベルサブセットの第１サブセットは、係数値１２、０、および−５を含み、図１２Ａを参照して説明したように扱われる。第２の第３レベルサブセット（係数位置４から６３までの係数値の）は、第４レベル（１２７０）で２つのサブセットに分割される。これらの第４レベルサブセットの第１サブセットは、位置４から１５までの係数の値を含むが、２つの第５レベルサブセットにさらに分割される。一方の第５レベルサブセットは、ゼロ値係数のみを含み、さらに分割はされないが、他方の第５レベルサブセットは、ゼロ値係数および非ゼロ値係数の混合物を含み、図１２Ｂに示されているようにさらに分割される。第４レベルサブセットの第２サブセットは、位置１６から６３までの係数のゼロ値を含むが、さらに分割はされず、このサブセットが非ゼロ周波数係数値を含まないことを示すコードが、シグナリングされる。
【００８８】
[0108]図１１Ａ、１１Ｂ、および１１Ｃに示されたマルチレベルネスティングされたセット表現のほかに、他のマルチレベルネスティングされたセット表現が可能である。各セットまたはサブセットを次のレベルで２つのサブセットに分割するのではなく、各セットまたはサブセットを、３つまでのサブセット、４つまでのサブセット、またはある他の個数のサブセットに分割することができる。たとえば、係数位置０から６３までの係数値を含む第１レベルセットを、３つの第２レベルサブセットすなわち、位置０の係数値を含む第１サブセット、位置１から１５までの係数値を含む第２サブセット、および位置１６から６３までの係数値を含む第３サブセットに分割することができる。さらに、少なくとも図１１Ａおよび１１Ｂの表現（１１００、１１５０）について、区分戦略は、スキャン順序が、非ゼロ周波数係数値を変換係数のブロックから１次元ストリングの前部に向かって効率的にグループ化することを前提とする。しかし、係数値が、効率的にグループ化できないように配置されている場合には、ネスティングされたセット表現は、係数０から６３までを含む第１レベルセットを２つのサブセットすなわち、係数位置０から３１までの係数値を含む第１サブセットおよび係数位置３２から６３までの係数値を含む第２サブセットに分割する２項分割（各サブセットは、潜在的にさらなる２項分割の対象になる）など、ある他の一般的分割を有することができる。
【００８９】
[0109]さらに、マルチレベルネスティングされたセット表現のコードのシグナリングは、実施態様に依存する。いくつかの場合に、所与のレベルのコード（１つまたは複数）は、表現の深さ優先トラバーサル（ｄｅｐｔｈ−ｆｉｒｓｔ  ｔｒａｖｅｒｓａｌ）の一部としてシグナリングされる。図１１Ａに関して、エンコーディングツールは、０〜６３のコード（１つまたは複数）、０のコード（１つまたは複数）、１〜６３のコード（１つまたは複数）、１〜３のコード（１つまたは複数）、１のコード（１つまたは複数）、２〜３のコード（１つまたは複数）、２のコード（１つまたは複数）、３のコード（１つまたは複数）、４〜６３のコード（１つまたは複数）などをシグナリングする。代替案では、コードを、表現の幅優先トラバーサル（ｂｒｅａｄｔｈ−ｆｉｒｓｔ  ｔｒａｖｅｒｓａｌ)の一部としてシグナリングすることができる。
ＶＩＩＩ．例のエントロピーコーディングおよびデコーディング
[0110]マルチレベルネスティングされたセット表現で変換係数を表すのに使用されるエントロピーコーディングのタイプは、実施態様に依存する。このセクションでは、エントロピーエンコーディングおよびデコーディングの２つの全般的な手法を説明する。代替案では、エンコーディングツールおよびデコーディングツールが、別の手法を使用する。
【００９０】
Ａ．ランレングスエンコーディングおよびデコーディングの変形形態
[0111]ランレングスコーディングおよびデコーディングを用いると、所与のセットの記号（個々の係数値または係数値のサブセットを表す）は、シーケンスとしてエンコードされる。たとえば、サブセットについて、０の記号値は、そのサブセットがゼロ値係数のみを含むことを示し、１の記号値は、そのサブセットが少なくとも１つの非ゼロ値係数を含むことを示す。個々の係数値について、０の記号値は、係数値がゼロであることを示し、１の記号値は、係数値が非ゼロであり、１つまたは複数の他のコードが、実際の値を示す。次の例では、項ｒｕｎ＿ｌｅｖｅｌ＿ｃｏｄｅ＿ｘ、ｒｕｎ＿ｌｅｎｇｔｈ＿ｃｏｄｅ＿ｘ、およびｖａｌｕｅ＿ｘのそれぞれが、単純に、ランレベル組合せ、ランレングスカウント、または値を表す可変長コード、固定長コード、またはビットの他のパターンのインジケータである。
【００９１】
[0112]図１１Ｃのマルチレベルネスティングされたセット表現（１１８０）、図８のスキャン順序（８００）、および図１の変換係数（１００）について、位置０、１、３、および９〜１５は、非ゼロ値を有し、他の位置は、ゼロ値係数を有する。位置０から１５までのサブセットは、少なくとも１つの非ゼロ値を含むが、他の３つの第２レベルサブセットのどれもが、非ゼロ値を含まず、したがって、第１レベル表現は１  ０  ０  ０である。ランレベルエンコーディング（各コードが、ゼロのランカウント＋非ゼロレベルを示す）を用いると、記号は、０  ＥＯＢのコードとして表される。実際には、この表現は、その後、ある１つまたは複数のコードを使用してエンコードされ、このコードは、本明細書ではｒｕｎ＿ｌｅｖｅｌ＿ｃｏｄｅ＿０（ゼロ個の０のカウント＋最初の１）およびｒｕｎ＿ｌｅｖｅｌ＿ｃｏｄｅ＿ＥＯＢ（最後の３つの０）として示される。第１レベル表現１  ０  ０  ０は、位置１６から６３までの係数がゼロ値係数であることを示すのに十分である。
【００９２】
[0113]位置０から１５までのサブセットは、０〜３、４〜７、８〜１１、および１２〜１５の４つのサブセットに分割され、これらは、記号１  ０  １  １を用いて表される。ランレベルエンコーディングを用いると、記号は、０  １  ０のコードとして表され、ｒｕｎ＿ｌｅｖｅｌ＿ｃｏｄｅ＿０（ゼロ個の０のカウント＋最初の１）、ｒｕｎ＿ｌｅｖｅｌ＿ｃｏｄｅ＿１（１個の０のカウント＋第２の１）、およびｒｕｎ＿ｌｅｖｅｌ＿ｃｏｄｅ＿０（ゼロ個の０のカウント＋最後の１）として示される。これは、位置４から７までの係数がゼロ値係数であることを示すのに十分である。
【００９３】
[0114]位置０から３までのサブセットは、１  １  ０  １として表され、位置８〜１１のサブセットは、０  １  １  １として表され、位置１２〜１５のサブセットは、１  １  １  １として表される。これらのサブセットは、ランレベルコーディングを使用する、またはその代わりにベクトルハフマンコードもしくはリテラル値を使用するエンコーディングである。各非ゼロ値について、１つまたは複数のコードが、係数の実際の値および符号をシグナリングする。たとえば、コードｖａｌｕｅ＿２５、ｖａｌｕｅ＿１２、およびｖａｌｕｅ＿−５が、位置０〜３のサブセットのランレベルコードに続く。表現のコードのシグナリングは、表現の深さ優先トラバーサルまたは幅優先トラバーサルに従うことができる。
【００９４】
[0115]図１、８、および１１Ｃからの同一の例のマルチレベルネスティングされたセット表現について、ゼロおよび１の交番するラン（たとえば、０  ０  １  ０または０  ０  ０  ０または１  １  １  ０）を期待する単純なランレングスコーディング変形形態を用いると、記号１  ０  ０  ０は、０  １  ＥＯＢのコードとして表され、ｒｕｎ＿ｌｅｎｇｔｈ＿ｃｏｄｅ＿０（ゼロ個の０のカウント）、ｒｕｎ＿ｌｅｎｇｔｈ＿ｃｏｄｅ＿１（１個の１のカウント）、およびｒｕｎ＿ｌｅｎｇｔｈ＿ｃｏｄｅ＿ＥＯＢ（３個の０のカウント）として示される。位置０から１５までのサブセットは、０〜３、４〜７、８〜１１、および１２〜１５の４つのサブセットに分割され、これらは、記号１  ０  １  １として表され、ｒｕｎ＿ｌｅｎｇｔｈ＿ｃｏｄｅ＿０（ゼロ個の０のカウント）、ｒｕｎ＿ｌｅｎｇｔｈ＿ｃｏｄｅ＿１（１個の１のカウント）、ｒｕｎ＿ｌｅｎｇｔｈ＿ｃｏｄｅ＿１（１個の０のカウント）、およびｒｕｎ＿ｌｅｎｇｔｈ＿ｃｏｄｅ＿ＥＯＢ（最後の２個の１）としてエンコードされる。位置０から３までのサブセットは、１  １  ０  １として表され、位置８〜１１のサブセットは、０  １  １  １として表され、位置１２〜１５のサブセットは、１  １  １  １として表される。これらのサブセットは、単純なランレングスコーディングの変形形態を使用して、またはその代わりにベクトルハフマンコードまたはリテラル値を使用してエンコードされる。各非ゼロ値について、１つまたは複数のコードが、係数の実際の値および符号をシグナリングする。やはり、表現のコードのシグナリングは、表現の深さ優先トラバーサルまたは幅優先トラバーサルに従うことができる。
【００９５】
[0116]一般に、セットまたはサブセットの記号のパターン（セット／サブセットの２つのサブセットの１０、０１、または１１、あるいはセット／サブセットの３つのサブセットの１１１、１１０、１０１、１００、０１１、０１０、または００１など）を、ｒｕｎ＿ｌｅｎｇｔｈ＿ｃｏｄｅ、ｒｕｎ＿ｌｅｖｅｌ＿ｃｏｄｅ、またはある他のパターンなど、ビットストリーム内の特定の個数のビットまたはビットのパターンを用いて示すことができる。さらに、非ゼロ値の周波数係数の値は、ある特定の個数のビットまたはビットのパターンを用いて示される。たとえば、値２５を、ｖａｌｕｅ＿（２５）などの任意のコードによって示すことができる。
【００９６】
Ｂ．ハフマンエンコーディングおよびデコーディング
[0117]ハフマンコーディングおよびデコーディングを用いると、ハフマンコードは、特定のサブセットまたは係数の記号（１つまたは複数）を表す。ハフマンコードおよびハフマンコードを用いて表される記号は、実施態様に依存する。ハフマンコードは、適応または非適応とすることができる。
【００９７】
[0118]たとえば、あるサブセットについて、０の記号値は、そのサブセットがゼロ値係数のみを含むことを示し、１の記号値は、そのサブセットが少なくとも１つの非ゼロ値係数を含むことを示す。個々の係数値について、０の記号値は、その係数値がゼロであることを示し、１の記号値は、その係数値が非ゼロであることを示し、１つまたは複数の他のコードが、実際の値を示す。ハフマンコードは、所与のレベルの記号の値を合同で表し、たとえば、前のセクションの４つの記号組合せを表す。
【００９８】
[0119]もう１つの例として、ある記号の記号値のアルファベットが、３つの要素Ａ０、Ａ１、およびＡ２を有する。この例示的なアルファベットの第１要素は、要素Ａ０である。この要素は、１つまたは複数の係数値の所与のセット（またはサブセット）（ｓｅｔ＿ｃｖ）について、ｓｅｔ＿ｃｖ内の各係数値（ｃｖ）が０と等しいことを示す。言い換えると、ｓｅｔ＿ｃｖには非ゼロ周波数係数値がない。この例示的なアルファベットの第２要素は、要素Ａ１である。この要素は、ｓｅｔ＿ｃｖ内の少なくとも１つのｃｖについて、ｃｖ＝１または−１であることを示す。ｓｅｔ＿ｃｖ内の他の値ｃｖは、１つのｃｖが１または−１と等しく、どれもが１を超える絶対値を有さない限り、０と等しいものとすることができる。この例示的なアルファベットの第３アルファベット要素は、Ａ２である。この要素は、ｓｅｔ＿ｃｖ内の少なくとも１つのｃｖについて、ｃｖが１より大きいか−１より小さいことを示す。ｓｅｔ＿ｃｖ内の他の値ｃｖは、１つのｃｖが１より大きいか−１より小さい限り、０、１、または−１と等しいものとすることができる。代替実施形態では、Ａ２は、ｓｅｔ＿ｃｖ内の少なくとも１つのｃｖが、異なる数、たとえば２、４、８、またはある他の数より大きいかそれより小さいことを示すことができる。
【００９９】
[0120]３つの異なる要素Ａ０、Ａ１、およびＡ２は、エンコード中にセットまたはサブセットをさらに分割すべきか否かを判定する際にこのツールを助けることができ、これらの要素は、デコード中にセットまたはサブセットの値を再構成する際にこのツールを助けることができる。表１は、複数の周波数係数値を含み、この周波数係数値のうちの少なくとも１つが１または−１と等しいが、どれもが１を超える絶対値を有さない、セットＸの例示的なハフマンコードを示す。表２は、複数の周波数係数値を含み、この周波数係数値のうちの少なくとも１つが１より大きいか−１より小さい値を有する、セットＸの例示的なハフマンコードを示す。このハフマンコードのそれぞれは、サブセットが単一の係数を含むことができる、セットＸのサブセットＸ＿１およびＸ＿２に関する情報を示す。
【０１００】
【表１】
2011521536.tif 000003
【０１０１】
【表２】
2011521536.tif 000004
【０１０２】
[0121]マルチレベルネスティングされたセット表現でのセットまたはサブセットＸについて、表１のハフマンコードのそれぞれは、Ａ０またはＡ１のどちらが、それぞれＸの２つのサブセットＸ＿１およびＸ＿２のそれぞれに適用されるのかを示す。表２のハフマンコードのそれぞれは、Ａ０、Ａ１、またはＡ２のどれが、それぞれＸの２つのサブセットＸ＿１およびＸ＿２のそれぞれに適用されるのかを示す。たとえば、係数値のサブセットが０および−５を含む場合に、ハフマンコードＨＣ５＿４は、第１係数値が０であり、第２係数値が１より大きい絶対値を有する非ゼロであることを示す。係数値のサブセットが、０、０、０、０、０、２、−１、１を含み、サブセットに均等に分割される場合には、ハフマンコードＨＣ５＿４は、第１サブセット（０，０，０，０）が、ゼロ値係数だけを含み、第２サブセット（０，２，−１，１）が、１より大きい絶対値を有する少なくとも１つの非ゼロ値係数を含むことを示す。
【０１０３】
[0122]次の例では、項ＨＣ５＿ｘおよびＨＣ３＿ｘのそれぞれは、単に、特定のビットのパターンを有するハフマンコードのインジケータである。図１３Ａに、図１２Ａのマルチレベルネスティングされたセット表現への表１および２のハフマンコードの適用を示す。第１レベル（１３０５）で、ＨＣ５＿０は、セットが２つのサブセットに分割され、各サブセットが、１より大きい絶対値を有する少なくとも１つの非ゼロ係数値を有することを示す。第１サブセット（位置０の）は、単一の値ｖａｌｕｅ＿２５を有し、この値は、１つまたは複数の可変長コード、たとえばゴロムコードまたはハフマンコードとしてシグナリングされる。第２サブセット（位置１から６３までの）も、２つのサブセットに分割され、各サブセットは、コードＨＣ５＿０を用いて示される、１より大きい絶対値を有する少なくとも１つの非ゼロ係数値を有する。非ゼロ値を有するサブセットは、ハフマンコードを用いて示されるように、サブセットに分割される。非ゼロ値（１つまたは複数）を有するサブセットが、−１、０、または１の値だけを含む場合には、表１からのハフマンコードが、そのサブセットを表す。たとえば、−１、１、１、１および８つのゼロを含むセットが、−１、１、１、および１を有する第１サブセットならびに８つのゼロを含む第２サブセットに分割される場合には、コードＨＣ３＿１がそのセットを表す。１または−１ごとに、符号が、係数値についてシグナリングされ、絶対値は、前のコードによって示される。
【０１０４】
[0123]図１３Ｂに、図１２Ｂのマルチレベルネスティングされたセット表現への表１および２のハフマンコードの適用を示す。図１３Ａと比較して、マルチレベルネスティングされたセット表現がよりコンパクトなので、より少数のハフマンコードが使用される。
【０１０５】
[0124]エンコーディングツールは、表現の深さ優先トラバーサルに従って図１３Ａおよび１３Ｂに示されたハフマンコードをシグナリングする。ＨＣ５＿０、２５のコード（１つまたは複数）、ＨＣ５＿０、ＨＣ５＿０、１２のコード（１つまたは複数）、ＨＣ５＿４、−５のコード（１つまたは複数）などである。代替案では、エンコーディングツールは、表現の幅優先トラバーサルに従って図１３Ａおよび１３Ｂに示されたハフマンコードをシグナリングする。
【０１０６】
[0125]多くのエンコーディングシナリオでは、ハフマンコードは、ゼロ値係数をグループ化することによって、変換係数の効果的なエンコーディングおよびデコーディングを容易にする。デコーディングツールが、セットＸのコードＨＣ５＿４を受け取るときに、デコーディングツールは、セットＸのサブセットＸ＿１内のすべての周波数係数が値０を有することを認識する。したがって、デコーディングツールは、サブセットＸ＿１をさらにデコードして時間を費やす必要があるのではなく、その代わりにサブセットＸ＿１内のすべての周波数係数に値０を割り当てることができ、Ｘ＿２（サブセットについて示された非ゼロ周波数係数値を有する）などの異なるサブセットのデコードに進むことができる。したがって、このアルファベットは、周波数係数のブロックをエンコードするのに必要な記号の個数を減らすことができる。
ＩＸ．並べ替えられた周波数係数のネスティングされたセット表現用の一般化されたデコーディングツール
[0126]図１４に、並べ替えられた周波数係数のエントロピーエンコードされたマルチレベルネスティングされたセット表現をデコードするように適合された一般化されたデコーディングツール（１４００）のブロック図を示す。デコーディングツール（１４００）は、たとえば、図４に示されたエンコーディングツール（４００）の出力をデコードするのに使用することができる。
【０１０７】
[0127]単純にするために、図１４には、デコーディングツール（１４００）のうちで動き補償および他の動き処理に関係するモジュールは示されていない。いくつかの実施態様では、イントラピクチャー圧縮解除のためのサンプル値の処理ブロックのほかに、ツール（１４００）は、図１４に示されたモジュールを使用して動き補償残差のサンプル値のブロックを処理する。所与の残差ブロックについて、このツールは、残差ブロックの周波数係数値のエントロピーエンコーディング、スキャン並べ替え、逆量子化、および逆周波数変換を実行する。
【０１０８】
[0128]ツール（１４００）は、エントロピーエンコードされたビットストリーム（１４０５）を受け取り、エントロピーデコーダー（１４１０）が、１つまたは複数の記号を作るためにビットストリーム（１４０５）をデコードする。ビットストリーム（１４０５）は、適応ハフマンエンコーディング、ランレベルエンコーディング、ランレングスエンコーディング、またはマルチレベルネスティングされたセット表現のある他のエントロピーエンコーディング方法に従ってエンコードされ得る。エントロピーデコーダー（１４１０）によってデコードされた記号は、マルチレベルネスティングされたセット表現のそれぞれのレベル内の係数のサブセット内の１つまたは複数の複数の周波数係数の相対位置および値を示す。ツール（１４００）は、示された係数位置に従って、複数の周波数係数を１次元ストリングに配置する。
【０１０９】
[0129]スキャン順序デコーダー（１４１５）は、スキャン順序に従ってブロック内の係数を配置する。ツール（１４００）は、スキャン順序デコーダー（１４１５）から使用可能な複数のスキャン順序のうちの選択されたスキャン順序を使用する。たとえば、ツール（１４００）は、図２のスキャン順序（２００）、図７のスキャン順序（７００）、図８のスキャン順序（８００）、および１つまたは複数の他のスキャン順序の間で切り替える。ツール（１４００）は、ブロックごとベース、マクロブロックごとベース、スライスごとベース、ピクチャーごとベース、または何らかのその他ベースで使用可能なスキャン順序の間で選択する。複数の使用可能なスキャン順序は、エンコーディングツールとデコーディングツール（１４００）との両方でセットされる１つまたは複数の事前定義のスキャン順序を含むことができる。事前定義のスキャン順序の１つが使用されるときには、デコーディングツール（４００）は、選択されるスキャン順序を識別するコードまたは他のビットストリーム要素を使用して、スキャン順序選択を決定する。複数の使用可能なスキャン順序は、エンコード中にエンコーディングツールによって特に定義され、デコードでの使用のためにデコーディングツール（１４００）にシグナリングされる１つまたは複数のスキャン順序をも含むことができる。スキャン順序自体をシグナリングした後に、エンコーディングツールがその後にスキャン順序を使用する時に、エンコーディングツールは、デコーディングツール（１４００）が格納した、スキャン順序を識別するコードまたは他のビットストリーム要素をシグナリングすることができる。スキャン順序に従って作られた周波数係数のブロックは、いくつかの場合に、周波数係数の８×８ブロックである。他の場合に、ブロックは、４×４、４×８、８×４、またはある他のサイズである。
【０１１０】
[0130]逆クォンタイザー（１４２０）は、変換係数を逆量子化する。逆クォンタイザー（１４２０）は、適応スペクトル量子化または直接量子化を逆転することができる。逆周波数トランスフォーマー（１４２５）は、ピクチャーのサンプル値のブロックを作るために、複数の周波数係数に対して逆周波数変換を実行する。逆周波数トランスフォーマー（１４２５）は、８×８、８×４、４×８、４×４、または他のサイズの逆周波数変換を適用することができる。
【０１１１】
[0131]その後、ツール（１４００）は、再構成されたピクチャー（１４３０）の一部として、再構成されたブロックを出力する。
Ｘ．並べ替えられた周波数係数のネスティングされたセット表現用の一般化されたビデオ再構成技法
[0132]図１５に、マルチレベルネスティングされたセット表現を使用してエントロピーエンコードされた変換係数のブロックを再構成する一般化された技法（１５００）の流れ図を示す。この技法（１５００）は、たとえば、図５Ａに示された技法（５００）に従ってエンコードされた変換係数をデコードするのに、図１４に示されたデコーディングツール（１４００）によって使用され得る。図１５に示された技法（１５００）は、デフォルトのマルチレベルネスティングされたセット表現および並べ替えのためのスキャン順序の適応選択を使用するエントロピーデコーディングを含む。
【０１１２】
[0133]このツールは、まず、デフォルトのマルチレベルネスティングされたセット表現を使用してエンコードされた複数の周波数係数をデコードする（１５０５）。係数は、適応ハフマンエンコーディング、ランレベルエンコーディング、またはランレングスエンコーディングなどのエントロピーエンコーディング手法に従って、またはある他のエンコーディング手法に従ってエンコードされたものとすることができる。一般に、このツールは、値と値の１次元ストリング内の複数の周波数係数の相対位置との両方を示す記号をデコードする。記号のうちの１つまたは複数のそれぞれは、サブセット内の１つまたは複数の複数の周波数係数の値および相対位置を記述する。
【０１１３】
[0134]次に、このツールは、複数の周波数係数のブロックのスキャン順序を判定する（１５１０）。このツールは、たとえば、複数の事前に決定されたスキャン順序のどれを使用すべきかを示すシグナルをデコードすることによって、スキャン順序を判定する。
【０１１４】
[0135]最後に、このツールは、デコードされたスキャン順序に従って、ブロック内の複数の周波数係数値を並べる（１５１５）。一般に、複数の周波数係数値は、１次元ストリングにデコードされる（１５０５）。このツールは、デコードされたスキャン順序に従って１次元ストリングをトラバースし、係数値を係数の２次元ブロックに配置することによって、ブロック内の複数の周波数係数値を並べる（１５１５）。
【０１１５】
[0136]このツールは、ブロックごとベースまたは何らかのその他ベースで技法（１５００）を繰り返す。たとえば、このツールは、フレームごとベースでスキャン順序を選択し、フレーム全体についてスキャン順序を選択し、その後、ブロックごとベースでフレーム内のブロックの係数をエントロピーデコードし、並べ替える。
【０１１６】
[0137]代替案では、デコーディングツールは、デフォルトのスキャンパターンを使用してスキャン順序並べ替えを実行するが、異なるマルチレベルネスティングされたセット表現の間で適応式に選択する。そのようなデコーディング技法は、たとえば、図５Ｂに示された技法（５２０）に従ってエンコードされた変換係数をデコードするのに使用することができる。あるいは、デコーディングツールは、異なるスキャン順序の間で適応式に選択し、異なるマルチレベルネスティングされたセット表現の間で適応式に選択して、たとえば図５Ｃに示された技法（５４０）に従ってエンコードされた変換係数をデコードする。
ＸＩ．マルチレベルネスティングされたセット表現を用いてエンコードされたビデオを再構成する例示的方法
[0138]図１６に、マルチレベルネスティングされたセット表現を使用してエントロピーエンコードされた変換係数のブロックを再構成する例示的な技法（１６００）の流れ図を示す。この方法は、たとえば、図１４に示されたデコーディングツール（１４００）のエントロピーデコーディングモジュール（１４１０）によって、図１０に示された技法（１０００）に従ってエンコードされた変換係数をデコードするのに使用することができる。技法（１４００）は、再帰的である。係数値のセットをデコードする時に、技法（１４００）は、いくつかの場合に、セット内の係数値のサブセットまたは複数のサブセットのそれぞれを再帰的にデコードする。技法（１４００）は、終了条件を含み、この終了条件では、技法（１４００）は、エントリーポイントにリターンするか、セットのデコードを終えている。
【０１１７】
[0139]この方法（１６００）では、ツールは、複数の周波数係数のセットに関する情報を含むエントロピーエンコードされたビットストリームの少なくとも一部を受け取り、ツールは、エントロピーエンコードされたビットストリームの少なくとも一部をデコードして（１６０５）、セットの１つまたは複数のコードをデコードする。これらのコードは、変換係数のブロックの非ゼロ周波数係数値の存在または不在に関する情報を提供し、いくつかの実施態様では、これらのコードは、ブロックのサブセット内の周波数係数のうちの１つまたは複数の相対位置に関する情報をも提供する。
【０１１８】
[0140]ツールは、デコードされた１つまたは複数のコードを使用して、所与のセットのすべての既知の係数値を再構成する（１６１０）。たとえば、ツールは、ゴロムデコーディング、ハフマンデコーディング、または別の形の可変長デコーディングを使用する。分析されているセットが単一の係数のみを含む場合には、その係数の値は、一般に、１つまたは複数のデコードされたコードによって示される。ツールは、その特定の係数の係数値を再構成することができる。単一の係数の値の振幅が他所で暗示される場合（たとえば、いくつかのタイプのエントロピーコーディング／デコーディングについて、係数が−１または１である時）には、ツールは、その単一の係数の符号を示すフラグを受け取り、解析する。あるいは、コード（１つまたは複数）が、所与のセットの係数の複数のサブセットの値を示す場合があり、ここで、それらのサブセットは、マルチレベルネスティングされたセット表現内で所与のセットより下のレベルにある。たとえば、コード（１つまたは複数）が、より下のレベルにセットのサブセットがあることと、そのサブセットが非ゼロ周波数係数値を含まないこととを示す場合がある。そうである場合には、デコーディングツールは、そのサブセット内の周波数係数のそれぞれについて係数値０を再構成する。
【０１１９】
[0141]次に、ツールは、コード（１つまたは複数）を分析して、セットをｎ個のより下のレベルのサブセットに分割すべきかどうかを判定する（１６１５）。いくつかのマルチレベルネスティングされたセット表現について、ｎは２と等しいが、他の表現では、ｎを３または４などの別の整数と等しいものとすることができる。ツールは、非ゼロ周波数係数を含む、所与のセットの少なくとも１つのサブセットがあると判定する場合に、セットをｎ個までのサブセットに分割する。たとえば、非ゼロ周波数係数値を含む、セットの１つのサブセットがある場合には、ツールは、セットを、非ゼロ値を有する係数を含むサブセット（さらにデコードされる）と、ゼロ値係数だけを有するサブセット（さらなるデコードなしで以前に再構成された（１６１０））とに分割する。以前にデコードされた（１６０５）コード（１つまたは複数）は、サブセットのうちのどれが少なくとも１つの非ゼロ周波数係数を含むのかを示す。ツールは、少なくとも１つの非ゼロ周波数係数を含むサブセットをデコードする（１６３０）。
【０１２０】
[0142]ツールは、たとえばセットが単一の周波数係数だけを含む場合には、セットをｎ個のより下のレベルのサブセットに分割しない。この場合には、ツールは、この単一の値を有するセットのコード（１つまたは複数）を既にデコードし（１６０５）、このセットの係数値を再構成（１６１０）している。この例では、ツールは、エントリーポイントにリターンし（１０２０）（サブセットについて）、あるいはその特定のセットのデコードを終えている。
【０１２１】
[0143]ツールが、セットをｎ個のより下のレベルのサブセットに分割すると判定する（１６１５）場合には、ツールは、サブセットのうちの第１サブセットをデコードすべきかどうかを判定するためにコード（１つまたは複数）をチェックする（１６２５）。第１サブセットが非ゼロ周波数係数を含む場合には、ツールは、サブセットに対してデコーディング技法（１６００）を実行することによって、そのサブセットを「セット」としてデコードする（１６３０）。ツールが、そのサブセットのデコーディングからリターンする時に、ツールは、デコードすべき他のサブセットが残っているかどうかをチェックする（１６３５）。あるいは、第１サブセットがデコードされない場合には、ツールは、デコードすべき他のサブセットが残っているかどうかをチェックする（１６３５）。デコードすべき他のサブセットが残っていない場合には、ツールは、ｎ個のサブセットのうちの次のサブセットをデコードすべきかどうかをチェックする（１６２５）。ツールは、チェック（１６３５）が、デコードすべき所与のサブセットの他のサブセットが残っていないことを示すまで、このプロセスを繰り返し、その後、ツールは、エントリーポイントにリターンし（１０２０）（サブセットについて）、あるいは所与のセットのデコードを終えている。デコードされつつあるセット内の係数値または係数の個数に依存して、終了は、ツールにより上のレベルのセットのデコードにリターンさせる場合があり、あるいは、ブロックのデコードを終了させ、ビデオの次のブロックのデコードを開始させる場合がある。
ＸＩＩ．並べ替えられた周波数係数のエンコードされたマルチレベルネスティングされたセット表現の例示的なデコーディング
[0144]このセクションでは、上で提示したエントロピーエンコーディングの特定の例を継続し、変換係数のマルチレベルネスティングされたセット表現についてサブセットの記号を表すコード（１つまたは複数）のデコーディングの詳細に焦点を合わせる。一般に、記号は、複数の別個のタイプの記号を含む。第１のタイプの記号は、１つまたは複数の部分での非ゼロ値を有する周波数係数の存在または不在を示し、ある係数値（たとえば、ゼロ）または係数の絶対値（たとえば、１）を示すこともできる。第２のタイプの記号は、これらの１つまたは複数の部分にある周波数係数の値を示す。他の例では、記号のタイプを組み合わせ、異なるタイプにさらに分割し、あるいは周波数係数に関する追加情報を示すことができる。
【０１２２】
Ａ．ランレングスデコーディングおよびランレベルデコーディング
[0145]ランレングスおよびランレベルのコーディングおよびデコーディングを用いると、所与のセットの記号（個々の係数値または係数値のサブセットを表す）は、シーケンスとしてエンコードされる。変換係数のエンコードされたマルチレベルネスティングされたセット表現をデコードする一例では、図１４を参照して説明したツール（１４００）などのデコーディングツールは、エンコードされたビデオデータのビットストリームを受け取る。ビットストリームは、図１の変換係数（１００）のエンコードされた値を含み、これらの値は、エンコード中に図８に示された変換係数の１Ｄシリーズ（８５０）にスキャンされ、図１１Ｃに示されたマルチレベルネスティングされたセット表現（１１８０）に従ってランレベルエンコードまたはランレングスエンコードされたものである。もちろん、ランレベルまたはランレングスのエンコーディングおよびデコーディングを、図１１Ａまたは１１Ｂに示されたものなどの他のマルチレベルネスティングされたセット表現および他のスキャン順序と共に使用することができる。
【０１２３】
[0146]ランレベルデコーディングを実行する時に、ツールは、まず、係数位置サブセット０〜１５、１６〜３１、３２〜４７、および４８〜６３（図１、８、および１１Ｃを参照されたい）の非ゼロ値を有する周波数係数の存在または不在を示すコードをデコードするが、これらの係数位置サブセットのうちで、サブセット０〜１５だけが、非ゼロ係数値を含む。ビットストリームは、コードｒｕｎ＿ｌｅｖｅｌ＿ｃｏｄｅ＿０およびｒｕｎ＿ｌｅｖｅｌ＿ｃｏｄｅ＿ＥＯＢをもたらし、これは、０  ＥＯＢのランレベルエンコーディング結果を示し、これは、係数サブセットの記号１  ０  ０  ０に対応する。デコーディングツールは、位置１６から６３までのゼロ値係数を再構成し、少なくとも１つの非ゼロ値を含むサブセット０〜１５の１つまたは複数のコードを受け取る。
【０１２４】
[0147]サブセット０〜１５について、ツールは、記号１  ０  １  １のランレベルエンコーディング結果０  １  ０を表すコードｒｕｎ＿ｌｅｖｅｌ＿ｃｏｄｅ＿０、ｒｕｎ＿ｌｅｖｅｌ＿ｃｏｄｅ＿１、およびｒｕｎ＿ｌｅｖｅｌ＿ｃｏｄｅ＿０を受け取り、解析する。デコーディングツールは、位置４から７までのゼロ値係数を再構成し、サブセット０〜３の１つまたは複数のコードを受け取る。サブセット０〜３のランレベルコードがデコードされて、位置０から３までの記号１  １  ０  １が作られ、ツールは、位置０、１、および３の非ゼロ係数値のコードを受け取り、解析する。デコーディングツールは、同様に、サブセット８〜１１のコードを受け取り、解析し、その後、サブセット１２〜１５のコードを受け取り、解析し、位置８から１５までの値をデコードする。ツールは、係数位置０〜６３のそれぞれに係数値を置いたので、ツールは、現在のブロックの変換係数値のデコードを終えている。
【０１２５】
[0148]あるいは、ランレングスデコーディングを実行する時に、ツールは、係数位置サブセット０〜１５、１６〜３１、３２〜４７、および４８〜６３の非ゼロ値を有する周波数係数の存在または不在を示すコードを受け取り、解析する（図１、８、および１１Ｃを参照されたい）。ビットストリームは、コードｒｕｎ＿ｌｅｎｇｔｈ＿ｃｏｄｅ＿０、ｒｕｎ＿ｌｅｎｇｔｈ＿ｃｏｄｅ＿１、およびｒｕｎ＿ｌｅｎｇｔｈ＿ｃｏｄｅ＿ＥＯＢをもたらし、これは、０  １  ＥＯＢのランレングスエンコーディング結果を示し、係数サブセットの記号１  ０  ０  ０に対応する。記号１  ０  ０  ０は、少なくとも１つの非ゼロ値が位置０〜１５に存在することを示し、さらに、位置１６〜６３のそれぞれが０値を有する周波数係数を有することを示す。したがって、デコーディングツールは、位置１６〜６３の周波数係数のそれぞれに０の値を置くことができる。
【０１２６】
[0149]ツールは、次に、位置０〜３、４〜７、８〜１１、および１２〜１５の係数の非ゼロ値を有する周波数係数の存在または不在を示すコードを受け取り、解析する。ビットストリームは、コードｒｕｎ＿ｌｅｎｇｔｈ＿ｃｏｄｅ＿０、ｒｕｎ＿ｌｅｎｇｔｈ＿ｃｏｄｅ＿１、ｒｕｎ＿ｌｅｎｇｔｈ＿ｃｏｄｅ＿１、およびｒｕｎ＿ｌｅｎｇｔｈ＿ｃｏｄｅ＿ＥＯＢをもたらし、これは、０  １  １  ＥＯＢのランレングスエンコーディング結果に対応し、それぞれ係数位置サブセット０〜３、４〜７、８〜１１、および１２〜１５の記号１  ０  １  １に対応する。記号１  ０  １  １は、位置０〜３、位置８〜１１、および位置１２〜１５のそれぞれに少なくとも１つの非ゼロ値が存在することと、位置４〜７に非ゼロ値を有する周波数係数がないこととを示し、したがって、デコーディングツールは、位置４〜７の周波数係数のそれぞれに０の値を置く。
【０１２７】
[0150]次に、ツールは、位置０、１、２、および３の係数の非ゼロ値を有する周波数係数の存在または不在を示すコードを受け取り、解析する。ビットストリームは、コードｒｕｎ＿ｌｅｎｇｔｈ＿ｃｏｄｅ＿０、ｒｕｎ＿ｌｅｎｇｔｈ＿ｃｏｄｅ＿２、ｒｕｎ＿ｌｅｎｇｔｈ＿ｃｏｄｅ＿１、およびｒｕｎ＿ｌｅｎｇｔｈ＿ｃｏｄｅ＿ＥＯＢをもたらし、これは、０  ２  １  ＥＯＢのランレングスエンコーディング結果および対応する記号１  １  ０  １を示す。記号１  １  ０  １は、位置０、１、および３の係数のそれぞれが、非ゼロ値を有する周波数係数を含むが、位置２の係数がそうではないことを示す。したがって、ツールは、係数位置２に０の値を自動的に置く。ツールは、さらに、それぞれ２５、１２、および−５の係数値に対応するコードｖａｌｕｅ＿２５、ｖａｌｕｅ＿１２、およびｖａｌｕｅ＿−５を受け取り、解析する。ツールは、位置０〜３の記号１  １  ０  １をデコードしたので、位置０に値２５、位置１に値１２、および位置３に値−５を置く。ツールは、同様に、サブセット８〜１１（およびその非ゼロ値）およびサブセット１２〜１５（およびその非ゼロ値）のコードを受け取り、解析する。ツールは、係数位置０〜６３のそれぞれに係数値を置いたので、現在のブロックの変換係数値のデコーディングを終えている。
【０１２８】
[0151]ランレベルデコーディングおよびランレングスデコーディングの上で説明した例では、ツールは、深さ優先トラバーサルに従ってデコードする。ツールは、位置０〜６３の記号、位置０〜１５の記号、位置０〜３の記号、位置０の値、位置１の値、位置３の値、位置８〜１１の値（位置４〜７がゼロ値を有することが既知であり、したがってスキップされるので）などをデコードする。他の例では、ツールは、その代わりに、幅優先トラバーサルに従ってデコードすることができ、ここで、ツールは、位置０〜６３の記号、位置０〜１５の記号、位置０〜３の記号、位置８〜１１の記号、位置１２〜１５の記号、ならびにその後に位置０、１、３、および９〜１５の値をデコードする。代替案では、ツールは、深さ優先トラバーサルおよび幅優先トラバーサルの組合せを使用することができる。
【０１２９】
Ｂ．ハフマンデコーディング
[0152]ハフマンコーディング／デコーディング実施態様では、図１４を参照して説明したツール（１４００）などのデコーディングツールが、表１および２に示されたものなどのハフマンコードとブロックの変換係数の値コードとを含むビットストリームを受け取る。次に、ツールは、そのビットストリームをデコードして、周波数係数の値および相対位置を再構成する。この例では、ツールは、図１１Ａに示された例示的なマルチレベルネスティングされたセット表現を用いて図８の１次元ストリング（８５０）をエンコードするのに使用された、図１３Ｂに示されたものなどのコードを含むビットストリームを受け取る。しかし、ハフマンエンコーディングおよびデコーディングを、表１および２に示されたものとは異なるコード構造および他のスキャン順序に関する図１１Ｂまたは１１Ｃに示されたものなどのさまざまな異なるマルチレベルネスティングされたセット表現に使用することができる。
【０１３０】
[0153]ツールは、まず、フレームレベル、シーケンスレベル、またはある他のレベルでビットストリームにおいてシグナリングされるコードをデコードして、マルチレベルネスティングされたセット表現の構造のある表示を作る。たとえば、ツールは、１次元ストリングをエンコードするのに使用されたマルチレベルネスティングされたセット表現の構造を判定する。
【０１３１】
[0154]ツールは、コードＨＣ５＿０を受け取り、解析し、このコードは、第１の第１レベルサブセット（位置０の係数に対応する）と第２の第２レベルサブセット（位置１〜６３の係数に対応する）との両方が、その絶対値が１より大きい１つまたは複数の非ゼロ係数値を含むことを示す。
【０１３２】
[0155]ツールは、次に、コードｖａｌｕｅ＿２５を受け取り、解析する。この例では、ｖａｌｕｅ＿２５は、周波数係数の２５の値に対応するコードの任意の表示である。以前にデコードされたコードＨＣ５＿０は、値２５が位置０の係数の値であることを示す。したがって、ツールは、係数位置０に値２５を置き、ビットストリーム内のコードのさらなるデコードに進む。
【０１３３】
[0156]ツールは、次に、それぞれサブセット１〜３および４〜６３の記号Ａ２  Ａ２を示すコードＨＣ５＿０をビットストリームから受け取り、解析する。次に下のレベルの第１サブセット（係数位置１〜３に対応する）と次に下のレベルの第２セット（係数位置４〜６３に対応する）との両方が、その絶対値が１より大きい１つまたは複数の非ゼロ値を有する周波数係数を含む。図１３Ｂの深さ優先トラバーサルに従って、ツールは、コードＨＣ５＿０（サブセット１〜３の）、ｖａｌｕｅ＿１２（位置１の）、ＨＣ５＿４（サブセット２〜３の）、ｖａｌｕｅ＿−５（位置３の）、ＨＣ５＿２（サブセット４〜６３の）、ＨＣ５＿４（サブセット４〜１５の）、ＨＣ５＿１（サブセット８〜１５の）、ＨＣ５＿４（サブセット８〜１１の）、ＨＣ５＿１（サブセット９〜１１の）などを受け取り、解析する。
【０１３４】
[0157]ツールが、最下部から２番目のレベル（１３７０）に示されたコードＨＣ３＿０などのコードに達した時に、このコードは、セット内の１の絶対値を有する少なくとも１つの非ゼロ係数値の存在を示し、セット内の係数は、これより大きい絶対値を有さない。したがって、係数またはサブセットの記号のデコーディングに加えて、ツールは、最も下のレベル（１３７５）に示された、特定の周波数係数の非ゼロ値が１または−１のどちらであるのかを示す符号値（たとえば、符号ビット）をデコードすることだけが必要である。
【０１３５】
[0158]この例は、第１セットのより下のレベルのサブセットが、第１セットと同一レベルの第２セットの前にデコードされるように、深さ優先トラバーサルとしてデコーディングプロセスを説明するものである。しかし、その代わりに、所与のレベルの各セットがより下のレベルのサブセットの前にデコードされるようにするために、トラバーサルを幅優先にすることができる。他の実施形態は、異なるトラバーサル順序を有することもできる。
ＸＩＩＩ．代替案
[0159]本明細書で提示した例の多くは、６４個の変換係数の１次元ベクトルに並べ替えられた変換係数の８×８ブロックのエントロピーエンコーディングに関する。これらの技法およびツールを、３２個の係数の１次元ベクトルに並べ替えられた変換係数の４×８または８×４ブロック、１６個の係数の１次元ベクトルに並べ替えられた変換係数の４×４ブロック、または変換係数の他のサイズのブロックに適用することもできる。
【０１３６】
[0160]同様に、本明細書で提示したネスティングされたセット表現の例の多くは、６４個の変換係数の１次元ベクトルに関する。本明細書で提示された技法およびツールを、長さ３２、長さ１６、またはある他の長さのベクトルに適用することもできる。ネスティングされたセット表現の深さおよび幅は、実施態様に依存し、サブセットへのセットのより積極的な分割は、より幅広くより浅い表現をもたらす傾向があり、逆も同様である。
【０１３７】
[0161]例のスキャン順序を上で説明したが、本明細書で提示される技法およびツールを、他のスキャン順序と共に実行することができる。並べ替えられた変換係数のエントロピーエンコーディングは、適応ハフマンコーディング、非適応ハフマンコーディング、ランレベルコーディング、ランレングスコーディングの別の変形形態、またはある他のタイプのエントロピーコーディングを使用することができる。
【０１３８】
[0162]開示された発明の原理を適用できる多数の可能な実施形態を考慮して、示された実施形態が、本発明の好ましい例にすぎず、本発明の範囲を限定するものとして解釈されてはならないことを理解されたい。そうではなく、本発明の範囲は、添付の特許請求の範囲によって定義される。したがって、本発明者らは、この特許請求の範囲の範囲および趣旨に含まれるすべてのものを、本発明者らの発明として特許請求する。
【図１】
2011521536.tif 000005
【図２】
2011521536.tif 000006
【図３】
2011521536.tif 000007
【図４】
2011521536.tif 000008
【図５Ａ】
2011521536.tif 000009
【図５Ｂ】
2011521536.tif 000010
【図５Ｃ】
2011521536.tif 000011
【図６】
2011521536.tif 000012
【図７】
2011521536.tif 000013
【図８】
2011521536.tif 000014
【図９】
2011521536.tif 000015
【図１０】
2011521536.tif 000016
【図１１Ａ】
2011521536.tif 000017
【図１１Ｂ】
2011521536.tif 000018
【図１１Ｃ】
2011521536.tif 000019
【図１２Ａ】
2011521536.tif 000020
【図１２Ｂ】
2011521536.tif 000021
【図１３Ａ】
2011521536.tif 000022
【図１３Ｂ】
2011521536.tif 000023
【図１４】
2011521536.tif 000024
【図１５】
2011521536.tif 000025
【図１６】
2011521536.tif 000026
【国際調査報告】
2011521536.tif 000027
2011521536.tif 000028
2011521536.tif 000029