(57)【特許請求の範囲】
【請求項１】
コンピュータシステムにおいて、コンピュータ実施される方法であって、
純粋な双三次フィルタのフィルタ係数より縮小されたフィルタ係数を有する近似双三次フィルタを使用するステップであって、前記純粋な双三次フィルタのフィルタ係数はターゲットのアーキテクチャの所望のビット深さに応じた第１の合計を有し、前記縮小されたフィルタ係数は前記第１の合計より少ない第２の合計を有し、前記縮小されたフィルタ係数は、第１ステージおよび第２ステージを有する複数ステージ補間により、１／４サンプル位置での値を計算するときに、前記縮小されたフィルタ係数を適用することによる拡大の少なくとも一部に対する遅延された補償が、前記所望のビット深さを超えることなく可能となるように縮小される、近似双三次フィルタを使用するステップであって、
前記第１ステージで、前記縮小されたフィルタ係数を整数ピクセル位置のピクセル値に適用し、前記第１ステージで前記縮小されたフィルタ係数を適用することによる拡大の一部を補償する量だけ右にビットシフトし、
前記第２ステージで、前記縮小されたフィルタ係数を前記第１ステージの計算結果に適用し、前記第２ステージで前記縮小されたフィルタ係数を適用することによる拡大と、前記第１ステージからの拡大の残りを補償する量だけ右にビットシフトするステップを含み、
前記第１ステージからの拡大の残りを補償する量は、前記第２ステージにおいて拡大した値が前記所望のビット深さを超えないように定義されることを特徴とするコンピュータ実施される方法。
【請求項２】
前記拡大の一部を補償する量は、補間される１／４サンプル位置に依存することを特徴とする請求項１に記載の方法。
【請求項３】
前記所望のビット深さは１６ビットであることを特徴とする請求項１に記載の方法。
【請求項４】
前記フィルタ係数はフーリエ変換を容易にすることを特徴とする請求項１ないし３のいずれかに記載の方法。
【請求項５】
前記フィルタ係数は合計６４であることを特徴とする請求項１ないし４のいずれかに記載の方法。
【請求項６】
前記フィルタ係数は−４、５３、１８および−３であることを特徴とする請求項１ないし５のいずれかに記載の方法。
【請求項７】
１または複数の追加の１／４サンプル位置のそれぞれについて前記計算を繰り返すステップをさらに備えることを特徴とする請求項１ないし６のいずれかに記載の方法。
【請求項８】
コンピュータシステムに、ビデオエンコーディング中に請求項１ないし７のいずれかに記載の方法を実行させるコンピュータ実行可能命令を記憶することを特徴とするコンピュータ可読媒体。
【請求項９】
コンピュータシステムに、ビデオデコーディング中に請求項１ないし７のいずれかに記載の方法を実行させるコンピュータ実行可能命令を記憶することを特徴とするコンピュータ可読媒体。
【請求項１０】
コンピュータシステムにおいて、コンピュータ実施される方法であって、
双三次補間の第１ステージで、純粋な双三次フィルタのフィルタ係数より縮小されたフィルタ係数を有する近似双三次フィルタを使用して第１次元での基準ビデオフレームのサンプルをフィルタリングするステップであって、前記純粋な双三次フィルタのフィルタ係数はターゲットのアーキテクチャの所望のビット深さに応じた第１の合計を有し、前記縮小されたフィルタ係数は前記第１の合計より少ない第２の合計を有し、前記縮小されたフィルタ係数は、前記縮小されたフィルタ係数を適用することによる拡大の少なくとも一部に対する遅延された補償が、前記所望のビット深さを超えることなく可能となるように縮小され、前記フィルタリングは、整数ピクセル位置におけるピクセル値に前記縮小されたフィルタ係数を提供し、ビットシフトして前記第１ステージで前記縮小されたフィルタ係数を適用することによる拡大の一部を補償することを含み、前記第１ステージのためのフィルタリングは中間結果を生成し、前記第１ステージからの拡大の残りを補償する量は前記双三次補間の第２ステージにおいて拡大した値が前記所望のビット深さを超えないように定義される、フィルタリングするステップと、
前記第２ステージで、前記近似双三次フィルタを使用して第２次元で前記中間結果をフィルタリングするステップであって、前記縮小されたフィルタ係数を前記第１ステージにおける計算の中間結果に適用し、前記第１ステージからの拡大の残りおよび前記第２ステージで前記縮小されたフィルタ係数を適用することによる拡大を補償するためにビットシフトすることを含むステップと
を備えることを特徴とするコンピュータ実施される方法。
【請求項１１】
前記近似双三次フィルタのフィルタ係数は、前記基準ビデオフレームの８ビットサンプルに対し１６ビット算術での延期されたビットシフトを可能にすることを特徴とする請求項１０に記載の方法。
【請求項１２】
前記近似双三次フィルタのフィルタ係数は合計６４であることを特徴とする請求項１０または１１に記載の方法。
【請求項１３】
前記近似双三次フィルタのフィルタ係数は−４、５３、１８および−３であることを特徴とする請求項１０ないし１２のいずれかに記載の方法。
【請求項１４】
コンピュータシステムに、ビデオエンコーディング中に請求項１０ないし１３のいずれかに記載の方法を実行させるコンピュータ実行可能命令を記憶することを特徴とするコンピュータ可読媒体。
【請求項１５】
コンピュータシステムに、ビデオデコーディング中に請求項１０ないし１３のいずれかに記載の方法を実行させるコンピュータ実行可能命令を記憶することを特徴とするコンピュータ可読媒体。
【請求項１６】
基準ビデオフレームに対する複数ステージ補間の第１ステージおよび第２ステージの各々で近似双三次フィルタを使用する手段であって、前記近似双三次フィルタは第１の合計を有する第１のフィルタ係数を有し、前記第１のフィルタ係数は純粋な双三次フィルタの第２のフィルタ係数より縮小されており、前記第２のフィルタ係数はターゲットのアーキテクチャの所望のビット深さに応じた第２の合計を有し、前記第１のフィルタ係数は第２の合計より少ない第１の合計を有し、前記第１のフィルタ係数は、前記第１のフィルタ係数を適用することによる拡大の少なくとも一部に対する遅延された補償が、前記所望のビット深さを超えることなく可能となるように縮小され、前記第１ステージおよび第２ステージの各々は前記第１のフィルタ係数による入力値の拡大を補償する右へのビットシフトを含み、前記第１ステージにおける整数ピクセル位置のピクセル値の拡大を補償する右へのビットシフトの一部が前記第２ステージまで延期されるように、かつ前記第１ステージの計算結果から拡大した値が前記所望のビット深さを超えないように前記右へのビットシフトが実行される、近似双三次フィルタを使用する手段と、
前記基準ビデオフレームに関して動き補償を実行する手段と
を備えたことを特徴とするシステム。
【請求項１７】
前記第１の合計は６４であり、前記第２の合計は１２８であることを特徴とする請求項１６に記載のシステム。
【請求項１８】
前記第１のフィルタ係数は−４、５３、１８および−３であることを特徴とする請求項１６または１７に記載のシステム。
【請求項１９】
前記所望のビット深さは１６ビットであることを特徴とする請求項１６に記載のシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
近似双三次フィルタリングの技法およびツールを説明する。たとえば、ビデオエンコーダまたはビデオデコーダで、基準ビデオフレームにおける１／４ピクセル位置でピクセル値を計算するときに、近似双三次フィルタが使用される。
【０００２】
【従来の技術】
ディジタルビデオは、大量のストレージおよび伝送容量を消費する。通常の生のディジタルビデオシーケンスには、毎秒１５フレームまたは３０フレームが含まれる。各フレームに、１万個または１０万個のピクセル（ペルとも称する）が含まれる可能性がある。各ピクセルは、画像の小さい要素を表す。生の形では、コンピュータは、一般に２４ビットを用いて１ピクセルを表す。たとえば、１つのピクセルに、ピクセルのグレイスケール成分を定義する８ビット輝度値（明度値とも称する）と、ピクセルの色成分を定義する２つの８ビットクロミナンス値（クロマ値とも称する）が含まれる場合がある。したがって、通常の生のディジタルビデオシーケンスのビット毎秒またはビットレートの数は、毎秒５００万ビット以上になる可能性がある。
【０００３】
多くのコンピュータおよびコンピュータネットワークには、生のディジタルビデオを処理するリソースが欠けている。この理由から、エンジニアは、圧縮（コーディングまたはエンコーディングとも称する）を使用して、ディジタルビデオのビットレートを下げる。圧縮は、ロスレス（ｌｏｓｓｌｅｓｓ）とすることができ、この場合には、ビデオの品質は影響を受けないが、ビットレートの減少が、ビデオの複雑さによって制限される。あるいは、圧縮をロッシイ（ｌｏｓｓｙ）とすることができ、この場合には、ビデオの品質に影響があるが、ビットレートの減少が、より劇的になる。圧縮解除では、圧縮の逆を行う。
【０００４】
一般に、ビデオ圧縮技法には、イントラフレーム圧縮（ｉｎｔｒａｆｒａｍｅｃｏｍｐｒｅｓｓｉｏｎ）とインターフレーム圧縮（ｉｎｔｅｒｆｒａｍｅ  ｃｏｍｐｒｅｓｓｉｏｎ）とが含まれる。イントラフレーム圧縮技法では、通常はＩフレームまたはキーフレームと呼ばれる個々のフレームを圧縮する。インターフレーム圧縮技法では、通常は予測フレーム、Ｐフレーム、またはＢフレームと呼ばれる、前のフレームおよび／または後のフレームを参照してフレームを圧縮する。
【０００５】
Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ社のＷｉｎｄｏｗｓ（登録商標）Ｍｅｄｉａ  Ｖｉｄｅｏ、Ｖｅｒｓｉｏｎ  ８（「ＷＭＶ８」）には、ビデオエンコーダおよびビデオデコーダが含まれる。ＷＭＶ８エンコーダでは、イントラフレーム圧縮およびインターフレーム圧縮が使用され、ＷＭＶ８デコーダでは、イントラフレーム圧縮解除およびインターフレーム圧縮解除が使用される。ＷＭＶ８エンコーダのインターフレーム圧縮では、ブロックに基づく動き補償された予測コーディングと、その後の、残留誤差の変換コーディングが使用される。
【０００６】
ＷＭＶ８では、フレームが、３つのピクセルプレーンすなわち、輝度ピクセル値の輝度（Ｙ）平面およびクロミナンスピクセル値の２つの色（Ｕ、Ｖ）平面として表される。Ｙ平面の解像度は、水平および垂直でＵ平面およびＶ平面の解像度の２倍である。したがって、３２０ピクセル×２４０ピクセルのフレームは、３２０ピクセル×２４０ピクセルのＹ平面および１６０ピクセル×１２０ピクセルのＵ平面およびＶ平面を有する。
【０００７】
ＷＭＶ８エンコーダでは、予測フレームがピクセルの８×８ブロックに分割される。４つの８×８輝度ブロックおよび２つの同一位置の８×８クロミナンスブロック（一方はＵ色平面、他方はＶ色平面に関する）のグループによって、１６×１６マクロブロックとが形成される。したがって、１６×１６マクロブロックのそれぞれに、４つの８×８輝度ブロックと、２つの８×８クロミナンスブロックとが含まれる。
【０００８】
予測フレームのマクロブロックについて、ＷＭＶ８エンコーダでは、動き推定（ｍｏｔｉｏｎ  ｅｓｔｉｍａｔｉｏｎ）が実行される。動き推定では、予測フレーム内でマクロブロックを検索し、基準フレームからのマクロブロックとマッチングすることによって、予測フレーム内のマクロブロックの動きを近似する。たとえば、図１では、ＷＭＶ８エンコーダによって、予測フレーム（１１０）内のマクロブロック（１１５）の動きベクトルが計算される。この動きベクトルを計算するために、エンコーダは、基準フレーム（１３０）の検索領域（１３５）内を検索する。検索領域（１３５）内で、エンコーダは、よい一致を見つけるために、予測フレーム（１１０）からのマクロブロック（１１５）の輝度値を、基準フレーム（１３０）からのさまざまな候補ブロックの輝度値と比較する。ＷＭＶ８エンコーダは、動きベクトル精度を切り替えることができ、整数ピクセル、１／２ピクセル、または１／４ピクセルの水平分解能と、整数ピクセルまたは１／２ピクセルの垂直分解能とを有する検索範囲および動きベクトルを使用することができる。サブピクセル精度の動きベクトルを用いると、ＷＭＶ８エンコーダによって、ビデオシーケンス内のサブピクセル動きを近似することができる。
【０００９】
動き補償（ｍｏｔｉｏｎ  ｃｏｍｐｅｎｓａｔｉｏｎ）中に、ＷＭＶ８エンコーダでは、予測フレームのマクロブロックの動きベクトルを使用して、基準フレームからマクロブロックの予測子（ｐｒｅｄｉｃｔｏｒ）を判定する。動き予測されるマクロブロックのそれぞれについて、ＷＭＶ８エンコーダでは、元のマクロブロックとその予測子の間の差（残差または誤差と称する）を計算する。ＷＭＶ８エンコーダでは、残差をブロックに分割し、残差ブロックをロッシイ圧縮する。予測フレームの動き予測されたマクロブロックを再構成するために、ＷＭＶ８エンコーダでは、残差を圧縮解除し、めいめいのマクロブロックの予測子に加算する。
【００１０】
ＷＭＶ８デコーダでも、予測フレームのマクロブロックの動きベクトルを使用して、基準フレームからマクロブロックの予測子を判定する。予測フレームの動き予測されたマクロブロックを再構成するために、ＷＭＶ８デコーダでは、残差を圧縮解除し、マクロブロックの予測子に加算する。
【００１１】
動き推定中または動き補償中に、動きベクトルがサブピクセル精度を有する（すなわち、１／２ピクセルまたは１／４ピクセル）ときに、ＷＭＶ８エンコーダまたはＷＭＶ８デコーダでは、基準フレーム内のサブピクセル位置のピクセル値を判定しなければならない。ＷＭＶ８エンコーダまたはＷＭＶ８デコーダでは、補間フィルタを使用して、サブピクセル位置の値を生成する。図２に、整数ピクセル値ａ、ｂ、ｃ、．．．、ｐの補間によって計算された値を有するサブピクセルサンプル位置Ｈ０、Ｈ１、Ｈ２を示す。
【００１２】
１／２ピクセル動きベクトル精度を用いて動作するときに、３つの別個の１／２ピクセル位置Ｈ０、Ｈ１、Ｈ２の輝度ピクセル値について使用される補間フィルタは、次の通りである。
Ｈ０＝（ｆ＋ｇ＋Ｒ２）＞＞１                                  （１）
Ｈ１＝（ｆ＋ｊ＋Ｒ２）＞＞１                                  （２）
Ｈ２＝（ｆ＋ｇ＋ｊ＋ｋ＋Ｒ１）＞＞２                          （３）
【００１３】
ここで、Ｒ１およびＲ２は、特定のフレームの丸めモードを示す１ビット丸め制御フラグによって制御される丸め制御値である。丸め制御フラグに０がセットされている場合には、Ｒ１＝２かつＲ２＝１である。丸め制御フラグに１がセットされている場合には、Ｒ１＝Ｒ２＝０である。丸め制御フラグの値は、Ｐフレームごとに１と０の間で交互に変える。各Ｉフレームでは、丸め制御フラグの値が０にリセットされる。したがって、丸め制御は、フレーム単位で動作する。
【００１４】
式１、２、および３は、双一次補間（ｂｉｌｉｎｅａｒ  ｉｎｔｅｒｐｏｌａｔｉｏｎ）の例である。双一次補間は、高速であり、ピクセル値が滑らかになる傾向がある。この平滑化は、望ましい効果（量子化雑音の知覚可能性の低下など）を有する場合があるが、有効なピクセル情報の消失につながる可能性もある。
【００１５】
１／４ピクセル動きベクトル分解能の場合に、ＷＭＶ８エンコーダまたはＷＭＶ８デコーダでは、まず、双三次フィルタ（ｂｉｃｕｂｉｃ  ｆｉｌｔｅｒ）を使用して、１／２ピクセル位置での輝度ピクセル値を補間する。双三次補間は、双一次補間より低速であるが、エッジ値が保存される傾向があり、より少ない有効ピクセル情報の消失をもたらす。３つの別個の１／２ピクセル位置Ｈ０、Ｈ１、Ｈ２の双三次フィルタは、次の通りである。
Ｈ０＝（−ｅ＋９ｆ＋９ｇ−ｈ＋８）＞＞４                        （４）
Ｈ１＝（−ｂ＋９ｆ＋９ｊ−ｎ＋８）＞＞４                        （５）
Ｈ２＝（−ｔ０＋９ｔ１＋９ｔ２−ｔ３＋８）＞＞４                （６）
【００１６】
ここで、ｔ０、ｔ１、ｔ２、ｔ３は、次のように計算される。
ｔ０＝（−ａ＋９ｂ＋９ｃ−ｄ＋８）＞＞４                        （７）
ｔ１＝（−ｅ＋９ｆ＋９ｇ−ｈ＋８）＞＞４                        （８）
ｔ２＝（−ｉ＋９ｊ＋９ｋ−ｌ＋８）＞＞４                        （９）
ｔ３＝（−ｍ＋９ｎ＋９ｏ−ｐ＋８）＞＞４                      （１０）
【００１７】
式（４）から（１０）は、入力値の範囲の外の出力をもたらすことができる。たとえば、８ビット入力（範囲０、．．．、２５５）について、一連の値、０  ２５５  ２５５  ０によって、式（４）から（１０）のどれにおいても、２８７の出力値が作られる。したがって、ＷＭＶ８エンコーダまたはＷＭＶ８デコーダでは、有効な範囲内になるように、すべての式（４）から（１０）の出力値をクランプ（または「クリッピング」）する。たとえば、８ビット出力値について、０未満の値は０に変更され、２５５を超える値は２５５に変更される。クランプは、範囲の問題に対処するが、計算の速度が落ちる。さらに、クランプは、精度の消失をもたらす。
【００１８】
ＷＭＶ８エンコーダまたはＷＭＶ８デコーダでは、その後、補間の後続ステージで、ある１／４ピクセル位置のピクセル値を計算する。これらの１／４ピクセル位置は、水平方向に、２つの１／２ピクセル位置の間または整数ピクセル位置と１／２ピクセル位置との間のいずれかに配置される。これらの１／４ピクセル位置に関して、ＷＭＶ８エンコーダまたはＷＭＶ８デコーダでは、丸め制御なしで、２つの水平に隣接する１／２ピクセル／整数ピクセル位置を使用する双一次補間（すなわち（ｘ＋ｙ＋１）＞＞１）が使用される。
【００１９】
輝度動きベクトルを計算したならば、ＷＭＶ８エンコーダまたはＷＭＶ８デコーダでは、同一位置のクロミナンス動きベクトルを導出する。ＷＭＶ８の色平面は、水平と垂直の両方で輝度平面の半分の大きさなので、輝度動きベクトル値を、適当なクロミナンス動きベクトル値にスケーリングしなければならない。ＷＭＶ８では、この変換処理に、輝度動きベクトルを半分にすることと、結果のクロミナンス動きベクトルを１／２ピクセル精度に丸めることとが含まれる。したがって、１／２ピクセル精度を有する輝度動きベクトルは、１／４ピクセル精度を有するクロミナンス動きベクトルに変換されない。さらに、ＷＭＶ８でのクロミナンス丸めは、ユーザによる修正または選択が可能ではない単一のモードで動作する。
【００２０】
ＷＭＶ８では、基準フレーム内のサブピクセル位置のピクセル値が、いくつかの状況でアンダーフローまたはオーバーフローを示す場合がある。たとえば、１／４ピクセル位置の輝度ピクセル値は、隣接する整数ピクセル位置の値が２５５であり、隣接する１／２ピクセル位置の値が２８７（０＋９×２５５＋９×２５５−０＋８＞＞４＝２８７）である場合に、２７１（０、．．．、２５５の範囲の外）になる可能性がある（２５５＋２８７＋１＞＞１＝２７１）。この問題に対処するために、マクロブロックについて残差ブロックを予測子に加算した後に、ＷＭＶ８エンコーダおよびＷＭＶ８デコーダでは、必要な場合に、範囲０、．．．、２５５内になるようにマクロブロックの再構成される値をクランプする。
【００２１】
ＷＭＶ８の他に、複数の国際標準規格が、ビデオの圧縮および圧縮解除に関係する。これらの標準規格には、国際電気通信連合［「ＩＴＵ」］のＭｏｔｉｏｎＰｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ［「ＭＰＥＧ」］１、２、および４標準規格と、Ｈ．２６１標準規格、Ｈ．２６２標準規格、およびＨ．２６３標準規格が含まれる。ＷＭＶ８と同様に、これらの標準規格では、イントラフレーム圧縮およびインターフレーム圧縮の組合せが使用されるが、これらの標準規格は、通常は、使用される圧縮技法の詳細においてＷＭＶ８と異なる。
【００２２】
複数の標準規格（たとえばＭＰＥＧ  ４およびＨ．２６３）が、双一次フィルタおよび基本的な丸め制御を使用する１／２ピクセル動き推定および１／２ピクセル動き補償を提供する。さらに、Ｈ．２６３では、理論的には１／４ピクセル分解能（すなわち、１／２ピクセル輝度動きベクトルの分解能の半分）を有するクロミナンス動きベクトルが、１／２ピクセル精度またはフルピクセル精度のいずれかに丸められ、その結果、１／４ピクセル値がクロミナンス空間で許容されなくなる。標準規格の動き推定／補償に関する詳細については、各標準規格の仕様書自体を参照されたい。
【００２３】
【発明が解決しようとする課題】
動き推定および動き補償は、効果的な圧縮技法であるが、さまざまな前の動き推定／補償技法（ＷＭＶ８および上で述べた標準規格の）は、下記を含む複数の短所を有する。
【００２４】
（１）基準フレーム内のサブピクセル位置でピクセル値を計算するときに、エンコーダおよびデコーダが、中間値の精度を不必要に失う。たとえば、ＷＭＶ８で１／４ピクセル位置のピクセル値を計算するときに、１／２ピクセル位置の中間値が、より多数のビット深さが使用可能である可能性があるという事実にもかかわらず、４ビットだけ右シフトされる。さらに、ＷＭＶ８エンコーダ／デコーダでは、１／４ピクセル位置の２ステージ補間中に中間値がクランプされ、これによって、計算速度が低下し、精度の不必要な消失がもたらされる。
【００２５】
（２）１／４ピクセル動き推定よび動き補償のピクセル値の補間が、多くの場合に非効率的である。たとえば、ＷＭＶ８では、１次元１／４ピクセル位置の計算が、１／２ピクセル位置に関するフィルタの使用とその後の双一次フィルタの使用を必要とする。
【００２６】
（３）エンコーダおよびデコーダで、複数ステージ補間で作成される可能性がある丸め誤差の累積を考慮に入れることができない。丸め誤差は、たとえば、ピクセル値が、ビデオシーケンスのフレームからフレームへと繰り返して丸められるときに発生する。この丸め誤差によって、低品質低ビットレートビデオシーケンスの知覚可能なアーチファクトが引き起こされる可能性がある。たとえば、ＷＭＶ８エンコーダおよびＷＭＶ８デコーダで、複数のステージで１／４ピクセル位置のピクセル値について補間するときに、丸め制御が使用されない。その代わりに、各ステージの結果が、補間の各ステージで同一の形で（丸め制御なしで）丸められる。
【００２７】
（４）クロミナンス丸めが、１／４ピクセル精度で実行されず、クロミナンス動きベクトル丸めオプションに対する制御が与えられない。たとえば、ＷＭＶ８エンコーダおよびＷＭＶ８デコーダは、すべてのクロミナンス動きベクトルを１／２ピクセル値に丸め、単一モードでのみ動作する。
【００２８】
動き推定および動き補償のディジタルビデオに対するクリティカルな重要性を与えられれば、動き推定および動き補償がよく開発された分野であることは、驚くべきものではない。しかし、前の動き推定技法および動き補償技法の利益がどれほどであれ、それらは、下記の技法およびツールの長所を有しない。
【００２９】
【課題を解決するための手段】
要約すると、この詳細な説明は、近似双三次フィルタリングのさまざまな技法およびツールを対象とする。たとえば、ビデオのコーディングおよびデコーディングの応用分野は、ビデオエンコーダおよびビデオデコーダで、基準ビデオフレーム内のサブピクセル位置のピクセル値を計算するときに、１つまたは複数の近似双三次フィルタが使用される。これによって、計算されたピクセル値を使用する動き予測の有効性が改善される。それと同時に、近似双三次フィルタリングは、計算に関し比較的効率的である。
【００３０】
ビデオエンコーダまたはビデオデコーダなどのコンポーネントによって、近似双三次フィルタを使用して、ある位置の値が計算される。近似双三次フィルタは、実質的に双三次フィルタに似た形で動作し、これは望ましいことであるが、近似双三次フィルタは、計算を単純にするために、異なるフィルタ係数および／またはより低い分解能を有する。たとえば、近似双三次フィルタのフィルタ係数は、１／４サンプル位置でのより低い分解能のフィルタについて、６４の合計（１２８ではなく）を有する。
【００３１】
ビデオエンコーダまたはビデオデコーダで、近似双三次フィルタを使用して、基準ビデオフレーム内のさまざまなサブピクセル位置のピクセル値を計算することができる。サブピクセル位置は、たとえば、１次元または２次元で１／４ピクセル（または３／４ピクセル）シフトされた位置である。
【００３２】
さまざまな技法およびツールを、組み合わせてまたは独立に使用することができる。追加の特徴および長所は、添付図面に関して進められる以下の詳細な説明から明白になる。
【００３３】
【発明の実施の形態】
本明細書に記載の実施形態は、動き推定および動き補償でのサブピクセル補間の技法およびツールに関する。さまざまな実施形態は、補間の後のステージまでクランプおよび／またはビットシフト（精度の消失をもたらす可能性がある動作）を延期することによって、複数ステージ補間で精度を保つ技法およびツールに関する。他の実施形態は、複数ステージ補間の効率的なフィルタリング動作または丸め動作に関する。
【００３４】
エンコーダまたはデコーダによって、基準フレームでのあるいは１つまたは複数のブロックまたはマクロブロックなどのフレームの一部での、サブピクセル補間を実行する。エンコーダ／デコーダによって、基準フレーム内のサブピクセル位置のピクセル値を計算する。エンコーダ／デコーダによって、その後、サブピクセル精度の動きベクトルを使用して、動き補償を実行することができる。
【００３５】
いくつかの実施形態で、ビデオエンコーダまたはビデオデコーダによって、ビデオコーディングアプリケーションまたはビデオデコーディングアプリケーションでサブピクセル補間を実行する。その代わりに、別のエンコーダまたはデコーダ、あるいは別のタイプのコンポーネントによって、サブピクセル補間または以下で別のタイプのアプリケーションで説明する他の技法を実行する。
【００３６】
基準フレームに対してサブピクセル補間を実行する代わりに、いくつかの実施形態で、エンコーダ／デコーダによって、フィールド、オブジェクトレイヤ、または他のイメージに対するサブピクセル補間を実行する。
【００３７】
いくつかの実施形態では、サブピクセル補間は、ＹＵＶ色空間で基準フレームの輝度平面および色平面のピクセル値を計算することによって行われる。代替案では、色空間が異なる（たとえば、ＹＩＱまたはＲＧＢ）。
【００３８】
さまざまな技法およびツールは、組み合わせてまたは独立に使用することができる。異なる実施形態によって、１つまたは複数の本明細書に記載の技法およびツールが実施される。これらの技法の動作を、通常は、提示のために特定のシーケンシャルな順序で説明するが、この説明の形に、特に順序付けが必要でない限り、動作の順序の小さい再構成が含まれることを理解されたい。たとえば、シーケンシャルに説明される動作を、いくつかの場合に、再配置するか同時に実行することができる。さらに、説明を簡単にするために、流れ図に、通常は、特定の技法を他の技法と共に使用することができるさまざまな形を図示しない。
【００３９】
いくつかの実施形態で、ビデオエンコーダおよびビデオデコーダで、ビットストリーム内のさまざまなフラグおよび信号を使用する。特定のフラグおよび信号を説明するが、この説明の形に、フラグおよび信号に関する異なる規約（たとえば１ではなく０）が含まれることを理解されたい。
【００４０】
Ｉ．コンピューティング環境
図３に、複数の本明細書に記載の実施形態がその中で実施される、適するコンピューティング環境（３００）を示す。この技法およびツールを、異なる汎用または特殊目的のコンピューティング環境で実施することができるので、コンピューティング環境（３００）は、使用または機能性に関する制限を暗示することを意図されたものではない。
【００４１】
図３を参照すると、コンピューティング環境（３００）に、少なくとも１つの処理ユニット（３１０）およびメモリ（３２０）が含まれる。図３では、この最も基本的な構成（３３０）が、破線の中に含まれる。処理ユニット（３１０）は、コンピュータ実行可能命令を実行し、実際のプロセッサまたは仮想プロセッサとすることができる。マルチプロセッシングシステムでは、複数の処理ユニットがコンピュータ実行可能命令を実行して、処理能力を高める。メモリ（３２０）は、揮発性メモリ（たとえば、レジスタ、キャッシュ、ＲＡＭ）、不揮発性メモリ（たとえば、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリなど）、またはこの２つの組合せとすることができる。メモリ（３２０）には、ビデオエンコーダおよび／またはビデオデコーダなどのエンコーダおよび／またはデコーダでサブピクセル補間技法を実施するソフトウェア（３８０）が格納される。
【００４２】
コンピューティング環境は、追加の特徴を有する場合がある。たとえば、コンピューティング環境（３００）に、ストレージ（３４０）、１つまたは複数の入力デバイス（３５０）、１つまたは複数の出力デバイス（３６０）、および１つまたは複数の通信接続（３７０）が含まれる。バス、コントローラ、またはネットワークなどの相互接続機構（図示せず）によって、コンピューティング環境（３００）のコンポーネントが相互接続される。通常、オペレーティングシステムソフトウェア（図示せず）によって、コンピューティング環境（３００）内で実行される他のソフトウェアのオペレーティング環境が提供され、コンピューティング環境（３００）のコンポーネントのアクティビティが調整される。
【００４３】
ストレージ（３４０）は、取外し可能または取外し不能とすることができ、ストレージ（３４０）には、磁気ディスク、磁気テープ、磁気カセット、ＣＤ−ＲＯＭ、ＤＶＤ、または、情報を格納でき、コンピューティング環境（３００）内でアクセスできる他の任意の媒体が含まれる。ストレージ（３４０）には、サブピクセル補間技法を実施するソフトウェア（３８０）の命令が格納される。
【００４４】
入力デバイス（３５０）は、キーボード、マウス、ペン、またはトラックボールなどの接触入力デバイス、音声入力デバイス、スキャニングデバイス、または、コンピューティング環境（３００）に入力を提供する別のデバイスとすることができる。オーディオエンコードまたはビデオエンコードのために、入力デバイス（３５０）を、サウンドカード、ビデオカード、ＴＶチューナカード、またはアナログ形式またはディジタル形式でオーディオ入力またはビデオ入力を受け入れる類似するデバイス、あるいは、オーディオサンプルまたはビデオサンプルをコンピューティング環境（３００）に読み込むＣＤ−ＲＯＭまたはＣＤ−ＲＷとすることができる。出力デバイス（３６０）は、ディスプレイ、プリンタ、スピーカ、ＣＤライタ、または、コンピューティング環境（３００）からの出力を提供する別のデバイスとすることができる。
【００４５】
通信接続（３７０）によって、通信媒体を介する別のコンピューティングエンティティへの通信が可能になる。通信媒体は、コンピュータ実行可能命令、オーディオまたはビデオの入力または出力、あるいは他のデータなどの情報が、変調されたデータ信号で伝えられる。変調されたデータ信号とは、信号内で情報をエンコードする形で１つまたは複数の特性を設定されまたは変更された信号である。限定ではなく例として、通信媒体には、電気、光、ＲＦ、赤外線、音響、または他の搬送波を用いて実施される有線もしくは無線の技術が含まれる。
【００４６】
技法およびツールを、コンピュータ可読媒体の全般的な文脈で説明することができる。コンピュータ可読媒体とは、コンピューティング環境内でアクセスできるすべての使用可能な媒体である。制限ではなく例として、コンピューティング環境（３００）に関して、コンピュータ可読媒体に、メモリ（３２０）、ストレージ（３４０）、通信媒体、およびこれらの任意の組合せが含まれる。
【００４７】
技法およびツールを、プログラムモジュールに含まれるものなどの、ターゲットの実際のプロセッサまたは仮想プロセッサ上のコンピューティング環境内で実行されるコンピュータ実行可能命令の全般的な文脈で説明することができる。一般に、プログラムモジュールには、特定のタスクを実行するか特定の抽象データ型を実施する、ルーチン、プログラム、ライブラリ、オブジェクト、クラス、コンポーネント、データ構造などが含まれる。プログラムモジュールの機能性を、望みに応じてさまざまな実施形態で、組み合わせるかプログラムモジュールの間で分割することができる。プログラムモジュールのコンピュータ実行可能命令を、ローカルコンピューティング環境または分散コンピューティング環境内で実行することができる。
【００４８】
提示のために、この詳細な説明で、「決定」および「選択」などの用語を使用して、コンピューティング環境でのコンピュータ動作を説明する。これらの用語は、コンピュータによって実行される動作の高水準の抽象化であり、人間によって実行される動作と混同してはならない。これらの用語に対応する実際のコンピュータ動作は、実施形態に応じて変化する。
【００４９】
ＩＩ．一般化されたビデオエンコーダおよびビデオデコーダ
図４は、一般化されたビデオエンコーダ（４００）のブロック図であり、図５は、一般化されたビデオデコーダ（５００）のブロック図である。
【００５０】
エンコーダおよびデコーダ内のモジュールの間に示された関係は、エンコーダおよびデコーダ内の情報の主な流れを示し、図を簡単にするために、他の関係は図示されていない。具体的に言うと、図４および図５には、通常は、ビデオシーケンス、フレーム、マクロブロック、ブロックなどに使用されるエンコーダ設定、モード、テーブルなどを示すサイド情報（ｓｉｄｅ  ｉｎｆｏｒｍａｔｉｏｎ）が示されていない。そのようなサイド情報は、通常はサイド情報のエントロピ符号化（ｅｎｔｒｏｐｙ  ｅｎｃｏｄｉｎｇ）の後に、出力ビットストリーム内で送信される。出力ビットストリームのフォーマットは、Ｗｉｎｄｏｗｓ（登録商標）Ｍｅｄｉａ  Ｖｉｄｅｏフォーマットまたは別のフォーマットとすることができる。
【００５１】
エンコーダ（４００）およびデコーダ（５００）は、ブロックベースであり、４：２：０マクロブロックフォーマットを使用し、各マクロブロックには、４つの８×８輝度ブロック（時には１つの１６×１６マクロブロックとして扱われる）と、２つの８×８クロミナンスブロック（たとえば、１つはＵブロック、１つはＶブロック）が含まれる。代替案では、エンコーダ（４００）およびデコーダ（５００）が、オブジェクトベースであり、異なるマクロブロックフォーマットまたはブロックフォーマットを使用するか、８×８ブロックおよび１６×１６マクロブロックと異なるサイズまたは構成のピクセルの組に対する操作を実行する。
【００５２】
実施形態および所望の圧縮のタイプに応じて、エンコーダまたはデコーダのモジュールを、追加し、省略し、複数のモジュールに分割し、他のモジュールと組み合わせ、かつ／または類似するモジュールで置換することができる。代替実施形態では、異なるモジュールおよび／またはモジュールの他の構成を有するエンコーダまたはデコーダによって、本明細書に記載の技法の１つまたは複数が実行される。
【００５３】
Ａ．ビデオエンコーダ
図４は、一般的なビデオエンコーダシステム（４００）のブロック図である。エンコーダシステム（４００）は、現在のフレーム（４０５）を含むビデオフレームのシーケンスを受け取り、出力として圧縮ビデオ情報（４９５）を作る。ビデオエンコーダの特定の実施形態では、通常は、一般化されたエンコーダ（４００）の変形形態または補足されたバージョンが使用される。
【００５４】
エンコーダシステム（４００）によって、予測フレームおよびキーフレームが圧縮される。提示のために、図４に、エンコーダシステム（４００）を介するキーフレームのパスと、順方向予測フレームのパスを示す。エンコーダシステム（４００）のコンポーネントの多くが、キーフレームと予測フレームの両方の圧縮に使用される。これらのコンポーネントによって実行される正確な動作を、圧縮される情報のタイプに応じて変更することができる。
【００５５】
予測フレーム［インターコーディングされたフレーム、あるいは両方向予測の場合にｐフレームまたはｂフレームとも称する］は、あるフレームから他のフレームへの予測（または差）に関して表現される。予測残差は、予測されたものと元のフレームの間の差である。対照的に、キーフレーム［ｉフレーム、イントラコーディングされたフレームとも称する］は、他のフレームへの参照なしで圧縮される。
【００５６】
現在のフレーム（４０５）が、順方向予測フレームである場合には、動き推定（ｍｏｔｉｏｎ  ｅｓｔｉｍａｔｏｒ）（４１０）が、基準フレームに関して、現在のフレーム（４０５）のマクロブロックまたはピクセルの他の組の動きを推定し、基準フレームは、フレームストア（４２０）にバッファリングされた、再構成された前のフレーム（４２５）である。代替実施形態では、基準フレームが、後のフレームであるか、現在のフレームであるかが、両方向予測される。動き推定（４１０）は、サイド情報として、動きベクトルなどの動き情報（４１５）を出力する。動き補償（ｍｏｔｉｏｎ  ｃｏｍｐｅｎｓａｔｏｒ）（４３０）が、再構成された前のフレーム（４２５）に動き情報（４１５）を適用して、動き補償された現在のフレーム（４３５）を形成する。しかし、予測は、ほとんどの場合に完全ではなく、動き補償された現在のフレーム（４３５）と元の現在のフレーム（４０５）との間の差が、予測残差（４４５）である。代替案では、動き推定および動き補償が、別のタイプの動き推定／補償を適用する。
【００５７】
周波数変換（ｆｒｅｑｕｅｎｃｙ  ｔｒａｎｓｆｏｒｍｅｒ）（４６０）が、空間領域ビデオ情報を周波数領域（すなわちスペクトル）データに変換する。ブロックベースのビデオフレームについて、周波数変換（４６０）は、離散コサイン変換［「ＤＣＴ」］またはＤＣＴの変形形態を動き予測残差データのブロックに適用して、ＤＣＴ係数のブロックを作る。代替案では、周波数変換（４６０）が、フーリエ変換などの別の普通の周波数変換を適用するか、ウェーブレット（ｗａｖｅｌｅｔ）分析またはサブバンド（ｓｕｂｂａｎｄ）分析を使用する。いくつかの実施形態で、周波数変換（４６０）が、キーフレームの空間予測残差のブロックに周波数変換を適用する。周波数変換（４６０）は、８×８、８×４、４×８、または他のサイズの周波数変換を適用することができる。
【００５８】
その後、量子化（ｑｕａｎｔｉｚｅｒ）（４７０）が、スペクトルデータ係数のブロックを量子化する。量子化は、フレームごとにまたは別の基準で変化するステップサイズを用いてスペクトルデータに均一のスカラ量子化を適用する。代替案では、量子化が、たとえば不均一量子化、ベクトル量子化、または非適応量子化などの別のタイプの量子化をスペクトルデータ係数に適用し、あるいは、周波数変換を使用しないエンコーダシステムでは、スペクトル領域データを直接に量子化する。適応量子化のほかに、エンコーダ（４００）は、ドロッピング、適応フィルタリング、または他のレート制御の技法を使用することができる。
【００５９】
再構成された現在のフレームが、後続の動き推定／補償に必要なときには、逆量子化（ｉｎｖｅｒｓｅ  ｑｕａｎｔｉｚｅｒ）（４７６）が、量子化されたスペクトルデータ係数に対して逆量子化を実行する。その後、逆周波数変換（ｉｎｖｅｒｓｅ  ｆｒｅｑｕｅｎｃｙ  ｔｒａｎｓｆｏｒｍｅｒ）（４６６）が、周波数変換（４６０）の動作の逆を実行し、再構成された予測残差（予測フレームの場合）または再構成されたキーフレームを作る。現在のフレーム（４０５）が、キーフレームである場合には、再構成されたキーフレームが、再構成された現在のフレーム（図示せず）として採用される。現在のフレーム（４０５）が、予測フレームである場合には、再構成された予測残差を動き補償された現在のフレーム（４３５）に加算して、再構成された現在のフレームを形成する。フレームストア（４２０）は、次のフレームの予測に使用するために、再構成された現在のフレームをバッファリングする。いくつかの実施形態で、エンコーダが、再構成されたフレームにデブロッキングフィルタ（ｄｅｂｌｏｃｋｉｎｇ  ｆｉｌｔｅｒ）を適用して、フレームのブロック内の不連続性を適応式に平滑化する。
【００６０】
エントロピ符号化（ｅｎｔｒｏｐｙ  ｃｏｄｅｒ）（４８０）は、量子化（４７０）の出力ならびにあるサイド情報（たとえば、動き情報（４１５）、量子化ステップサイズなど）を圧縮する。通常のエントロピ符号化技法には、算術コーディング、差分コーディング、ハフマンコーディング、ランレングスコーディング、ＬＺコーディング、辞書コーディング、および上記の組合せが含まれる。エントロピ符号化（４８０）は、通常は、異なる種類の情報（たとえば、ＤＣ係数、ＡＣ係数、異なる種類のサイド情報）に異なるコーディング技法を使用し、特定のコーディング技法内で複数のコードテーブルの中から選択することができる。
【００６１】
エントロピ符号化（４８０）は、圧縮ビデオ情報（４９５）をバッファ（４９０）に入れる。バッファレベルインジケータが、ビットレート適応モジュールにフィードバックされる。圧縮ビデオ情報（４９５）は、一定のまたは比較的一定のビットレートでバッファ（４９０）から放出され、そのビットレートでの後続のストリーミングのために格納される。代替案では、エンコーダシステム（４００）が、圧縮の直後に圧縮ビデオ情報をストリーミングする。
【００６２】
バッファ（４９０）の前または後に、圧縮ビデオ情報（４９５）を、ネットワークを介する伝送のためにチャネルコーディングすることができる。チャネルコーディングでは、エラー検出および訂正データを圧縮ビデオ情報（４９５）に適用することができる。
【００６３】
Ｂ．ビデオデコーダ
図５は、一般的なビデオデコーダシステム（５００）のブロック図である。デコーダシステム（５００）は、ビデオフレームの圧縮されたシーケンスに関する情報（５９５）を受け取り、再構成されたフレーム（５０５）を含む出力を作る。ビデオデコーダの特定の実施形態では、通常は、一般化されたデコーダ（５００）の変形形態または補足された版が使用される。
【００６４】
デコーダシステム（５００）は、予測フレームおよびキーフレームを圧縮解除する。提示のために、図５に、デコーダシステム（５００）を介するキーフレームのパスおよび順方向予測フレームのパスを示す。デコーダシステム（５００）のコンポーネントの多くが、キーフレームおよび予測フレームの両方の圧縮解除に使用される。これらのコンポーネントによって実行される正確な動作を、圧縮解除される情報のタイプに応じて変更することができる。
【００６５】
バッファ（５９０）が、圧縮ビデオシーケンスに関する情報（５９５）を受け取り、受け取った情報をエントロピ復号化（ｅｎｔｒｏｐｙ  ｄｅｃｏｄｅｒ）（５８０）から使用可能にする。バッファ（５９０）は、通常は、経時的にかなり一定の速度で情報を受け取り、バッファ（５９０）には、帯域幅または伝送の短期間変動を平滑化するためにジッタバッファが含まれる。バッファ（５９０）に、再生バッファおよび他のバッファも含めることができる。代替案では、バッファ（５９０）が、変化する速度で情報を受け取る。バッファ（５９０）の前または後に、圧縮ビデオ情報を、チャネルデコードし、エラー検出および訂正のために処理することができる。
【００６６】
エントロピ復号化（５８０）は、通常はエンコーダ内で実行されるエントロピ符号化の逆を適用することによって、エントロピ符号化された量子化されたデータならびにエントロピ符号化されたサイド情報（たとえば、動き情報（５１５）、量子化ステップサイズ）をデコードする。エントロピ復号化技法には、算術デコーディング、差分デコーディング、ハフマンデコーディング、ランレングスデコーディング、ＬＺデコーディング、辞書デコーディング、および上記の組合せが含まれる。エントロピ復号化（５８０）は、頻繁に、異なる種類の情報（たとえば、ＤＣ係数、ＡＣ係数、異なる種類のサイド情報）に異なるデコーディング技法を使用し、特定のデコーディング技法内で複数のコードテーブルの中から選択することができる。
【００６７】
再構成されるフレーム（５０５）が、順方向予測フレームである場合には、動き補償（５３０）が、動き情報（５１５）を基準フレーム（５２５）に適用して、再構成されるフレーム（５０５）の予測（５３５）を形成する。たとえば、動き補償（５３０）は、マクロブロック動きベクトルを使用して、基準フレーム（５２５）内のマクロブロックを見つける。フレームバッファ（５２０）に、基準フレームとして使用される、前に再構成されたフレームが格納される。代替案では、動き補償が、別のタイプの動き補償を適用する。動き補償による予測は、ほとんどの場合に完全ではなく、したがって、デコーダ（５００）は、予測残差も再構成する。
【００６８】
デコーダが、後続の動き補償のために、再構成されたフレームを必要とするときに、フレームストア（５２０）に、再構成されたフレームが、次のフレームの予測に使用するために格納される。いくつかの実施形態で、エンコーダは、再構成されたフレームにデブロッキングフィルタを適用して、フレームのブロック内の不連続性を適応式に平滑化する。
【００６９】
逆量子化（５７０）が、エントロピ復号化されたデータを逆量子化する。一般に、逆量子化は、フレームごとにまたは別の基準で変化するステップサイズを用いてエントロピ復号化されたデータに均一のスカラ逆量子化を適用する。代替案では、逆量子化が、たとえば不均一逆量子化、ベクトル逆量子化、または非適応逆量子化などの別のタイプの逆量子化をデータに適用し、あるいは、逆周波数変換を使用しないデコーダシステムでは、空間領域データを直接に逆量子化する。
【００７０】
逆周波数変換（５６０）は、量子化された周波数領域データをスペクトル領域ビデオ情報に変換する。ブロックベースビデオフレームについて、逆周波数変換（５６０）は、逆ＤＣＴ［「ＩＤＣＴ」］またはＩＤＣＴの変形をＤＣＴ係数のブロックに適用し、動き予測残差データを作る。代替案では、逆周波数変換（５６０）が、逆フーリエ変換などの別の普通の逆周波数変換を適用するか、ウェーブレット分析またはサブバンド分析を使用する。いくつかの実施形態で、逆周波数変換（５６０）は、キーフレームの空間予測残差のブロックに逆周波数変換を適用する。逆周波数変換（５６０）は、８×８、８×４、４×８、または他のサイズの逆周波数変換を適用することができる。
【００７１】
ＩＩＩ．動き推定および動き補償
インターフレームコーディングでは、フレームの間の時間的冗長性を活用して、圧縮を達成する。時間的冗長性削減では、現在のフレームをコーディングするときに、予測子として、前にコーディングされたフレームを使用する。以下で説明する実施形態では、ビデオエンコーダで、より少ないビット数を使用して情報をコーディングするために、通常のビデオシーケンス内の時間的冗長性を活用する。ビデオエンコーダでは、基準フレーム（たとえば、前にコーディングされた、前のフレーム）に対する予測フレームのピクセルのブロック、マクロブロック、または他の組の動きをパラメータ化するのに動き推定を使用する。ビデオエンコーダ（ならびに対応するデコーダ）では、動き情報および基準フレームを使用して予測フレームを再構成するのに、動き補償を使用する。
【００７２】
動き補償は、基準フレームを変位させることによってビデオフレームの予測（すなわち、予測フレーム）を生成する処理である。上で注記したように、予測は、基準フレームからのデータのブロック、マクロブロック、または他の組について形成される。また、通常は、変位が、直線をなし、予測されるタイル全体にわたって一定である。そのような変位は、Ｘ方向およびＹ方向に沿った変位またはシフトに対応する２つの成分を有する動きベクトルによって定義される。Ｘ（水平）およびＹ（垂直）の動きベクトル成分は、現在予測されつつあるタイルと、基準フレーム内の対応する位置との間の変位を表す。正の値は、現在の位置の下および右の位置を表す。負の値は、現在の位置の上および左の位置を表す。
【００７３】
一実施形態では、ブロックが、ピクセルの８×８タイルであり、マクロブロックが、ピクセルの１６×１６タイルであり、動きベクトルが、１／４ピクセル精度で定義される。他の実施形態では、エンコーダおよびデコーダで、異なる分解能または任意の変化する動きベクトルを用いて、かつ／または動きベクトル以外の動き情報を使用して、本明細書に記載の技法の１つまたは複数を、異なるサイズのタイルまたは任意の変化するサイズのタイルに適用する。
【００７４】
動きベクトル補償は、通常は、ピクセル変位に関して、しばしばサブピクセル精度を用いて、指定される。サブピクセル変位は、適当に定義された動き補償フィルタを使用して基準フレームをフィルタリングすることによって実現される。直線をなすサブピクセル動き補償の場合に、Ｘ成分およびＹ成分が、固定小数点数として表現される。これらの数の整数部分を、フルピクセルシフトと称し、仮数部分を、サブピクセルシフトと称する。サブピクセルシフトが０のときに、動きは、整数個のピクセルである。よりしばしば、これは、予測子を生成するための基準フレームからのブロックコピーとして実施される（理論上は、何らかの形のフィルタリングを潜在的に適用できるはずであるが）。その一方で、サブピクセルシフトが非０のときには、サブピクセルシフトに対応する１つまたは複数のフィルタを基準フレームの整数ピクセル位置に適用することによって、予測子が生成される。したがって、動き補償フィルタは、サブピクセルシフトによって決定される。
【００７５】
フィルタリング動作としてサブピクセルシフトを実施するために、動き補償フィルタで、整数ピクセル位置の基準値に基づいて、小数ピクセル位置でデータ点を補間する。一般に、補間の質は、フィルタのサポートに伴って増加する。いくつかの実施形態では、分離可能な２タップおよび４タップ（各方向で）のフィルタが使用され、これらのフィルタは、双一次インターポーレータおよび双三次インターポーレータに対応する。
【００７６】
いくつかの実施形態で、動き補償フィルタが、整数算術と、ビットシフトとして実施される除算とを使用する。丸め制御パラメータＲは、０または１の値をとり、これによって、これらの除算の丸めの方向が決定される。この丸め制御パラメータは、定数をセットされる、外部からシグナリングされる、または過去のコーディングされた情報から暗黙のうちに導出することができる。
【００７７】
図６に、いくつかの実施形態でサブピクセル動き推定およびサブピクセル動き補償中に使用される基準フレーム（６００）内の整数ピクセル位置およびサブピクセル位置を示す。各方向の１／４ピクセル間隔で、基準フレーム（６００）に、エンコーダまたはデコーダが特定の変位についてピクセル値を補間する可能性があるサブピクセル位置が含まれる。基準フレーム（６００）の整数位置ａからｐは、図６では影付きの円として示され、整数位置の間で補間される１／４位置および１／２位置は、影なしの円として示されている。位置Ｐ０からＰ８は、表１に記載の、９個の代表的なサブピクセル位置を表す。
【００７８】
【表１】
0004625240.tif 000002
【００７９】
Ｐ８で例示される３／４ピクセル位置は、１／４ピクセル位置の特別なケースとみなすことができ、これは、フルピクセル位置から１／４ピクセルだけシフトされている。他の３／４ピクセル位置は、可能であるが図示されていない。サブピクセル位置Ｐ０からＰ８は、後の補間フィルタの説明で参照する。代替実施形態では、エンコーダおよびデコーダが、追加のまたは異なるサブピクセル位置、たとえば各方向に１／４ピクセル以外の間隔で、値を補間する。
【００８０】
Ａ．近似双三次補間フィルタ
いくつかの実施形態のサブピクセル補間について、ビデオエンコーダおよびビデオデコーダで、下記のように定義される一次（ｌｉｎｅａｒ）／双一次（ｂｉｌｉｎｅａｒ）フィルタおよび／または三次（ｃｕｂｉｃ）／双三次（ｂｉｃｕｂｉｃ）フィルタが使用される。
【００８１】
一次インターポーレータは、補間される点に最も近い２つの格子点での既知の値を使用する、線形または一次の１次元の多項式である。補間される点での線形関数の値が、線形補間である。線形多項式の乗数は、式の線形系を解き、線形フィルタの係数を決定することによって計算される。線形補間フィルタは、２つのフィルタタップによって定義される。双一次インターポーレータは、２つの次元で分離可能な線形インターポーレータである。
【００８２】
三次インターポーレータは、補間される点に最も近い４つの格子点での既知の値を使用する、立方または三次の多項式である。補間される点での三次関数の値が、三次補間である。三次多項式の乗数は、式の系を解き、三次フィルタの係数を決定することによって計算される。三次インターポーレータフィルタは、４つのフィルタタップによって定義される。双三次インターポーレータは、２つの次元で分離可能な三次インターポーレータである。
【００８３】
一次および双一次という用語は、通常は、ビデオ圧縮およびビデオ圧縮解除の分野では交換可能に使用される。普通の２次元補間では、１次元で実行される補間動作が、他の次元に複製され、したがって、各フィルタリングステージを、双一次フィルタリングと称する。三次および双三次という用語は、同様に交換可能である。
【００８４】
本明細書では、一次および双一次という用語は、１次元、２次元、または３次元以上でのフィルタリングを説明するのに交換可能に使用される。同様に、三次および双三次という用語は、１次元、２次元、または３次元以上でのフィルタリングを説明するのに交換可能に使用される。たとえば、式（１１）から（１３）では、三次フィルタのタイプが定義されるが、これらは、双三次フィルタと呼ばれる。というのは、基準ビデオフレームの２ステージ補間の一般的な応用例で、フィルタが、２ステージ補間の両方の次元について複製される動作で使用されるからである。より一般的には、フィルタリングの次元数は、文脈から既知である。
【００８５】
いくつかの実施形態で、エンコーダおよびデコーダで、近似双三次フィルタを使用して、サブピクセル位置の値を補間する。たとえば、エンコーダおよびデコーダで、図６に示されたものなどの基準フレームの可能なシフト位置で下記のフィルタ（Ｆ１が双三次フィルタ、Ｆ２およびＦ３が近似双三次フィルタ）が使用される。
１／２ピクセルシフト  Ｆ１：［−１  ９  ９  −１］            （１１）
１／４ピクセルシフト  Ｆ２：［−４  ５３  １８  −３］        （１２）
３／４ピクセルシフト  Ｆ３：［−３  １８  ５３  −４］        （１３）
【００８６】
実際には、フィルタに、潜在的にフィルタ係数によって導入される拡大を補償するために、右シフトが含まれる（たとえば、Ｆ１では４ビット、Ｆ２およびＦ３では６ビット）。演算子＞＞は、右シフト演算子である。右シフト演算子によって、２進数のビットが右にシフトされ、最下位ビットが捨てられ、最上位ビットに０が追加される。この演算は、剰余が切り捨てられる、シフトされるビット数の２のべきによる単純な除算をもたらす（たとえば、３による右シフトは、２３＝８による除算をもたらす）。
【００８７】
Ｆ２およびＦ３のフィルタ係数は、真の１／４ピクセル双三次インターポーレータ（４タップフィルタ）に粗く基づく。下記の式に、位置Ｐ０について真の１／４ピクセル双三次フィルタを適用した結果を示す。
（−７ｅ＋１０５ｆ＋３５ｇ−５ｈ）＞＞７                      （１４）
【００８８】
係数の値の合計が、１２８になり、フィルタリングの産物は、７ビットだけ右シフトされる。近似双三次フィルタＦ２およびＦ３は、性能に関して純粋な双三次フィルタに迫るが、次式に示されるように、より低い分解能を有する。
（−７ｅ＋１０５ｆ＋３５ｇ−５ｈ）＞＞７
＝（−３．５ｅ＋５２．５ｆ＋１７．５ｇ−２．５ｈ）＞＞６
≒（−４ｅ＋５３ｆ＋１８ｇ−３ｈ）＞＞６                      （１５）
【００８９】
多くの場合に、純粋な双三次フィルタを使用することによって、複数ステージ補間での精度のビットの消失がもたらされ、したがって、近似双三次フィルタに関する正規化係数が、少なくとも１／２だけ減らされる（すなわち、右シフトが１ビット以上減らされる）。式（１５）の近似双三次フィルタについて選択されたフィルタ係数は、周波数領域の挙動（たとえば、高周波数情報を保存するため）および経験的挙動（たとえば、あるビットレートに対する最小のひずみを達成するため）を考慮に入れた後の、真の双三次フィルタの丸めに基づく。具体的に言うと、フィルタＦ２およびＦ３には、まだ４つのフィルタ係数が含まれる（一般に、フィルタで使用されるフィルタ係数が少ないほど、実施が高速になるが、近接ピクセルの雑音に対処するために、十分なフィルタ係数を使用しなければならない）。フィルタ係数値は、合計が６４になるように調節され、これによって、より高い分解能の双三次フィルタを近似しながら、１６ビット算術を使用する実施形態が容易になる。双三次フィルタを近似しながら、合計が６４になる他のフィルタ係数値を使用することもできる。実質的に純粋な双三次フィルタのように実行されるが、より少ないサポートおよび／またはより低い分解能を有するフィルタを、「近似」双三次フィルタと称する。フィルタが実質的に純粋な双三次フィルタに似て実行されるかどうかを客観的に測定する方法の１つが、近似フィルタが純粋な双三次フィルタによく相関する（すなわち、定義された閾値以内である）かどうかを検査することである。一実施形態では、相関が、フィルタのベクトルの間の角度のコサイン（できる限り１に近いことが望まれる）を測定することであり、閾値は０．９５である。他の客観的または主観的な測定、他の相関測定値、および／または閾値を、使用することもできる。たとえば、近似双三次フィルタのフィルタ係数を選択し、その結果、それらの合計が、効率的なフーリエ変換または他の数学的操作を容易にする他の値になるようにすることができる。
【００９０】
以下でより完全に説明するように、図７に、式（１１）から（１３）で概要を示された双三次フィルタに対応する場合のそれぞれの補間されたピクセルを計算するのに使用されるピクセル値と共に、整数ピクセル位置を示す。Ｐは、ピクセル値が計算されるサブピクセル位置を示す。Ｉ１、Ｉ２、Ｉ３、およびＩ４は、補間の次元に沿った整数ピクセル位置を表す。図７には、水平補間が示されているが、同一の演算および位置の配置が、垂直補間に適用される。
【００９１】
代替実施形態では、エンコーダおよびデコーダで、他のおよび／または追加の補間フィルタが使用される。たとえば、エンコーダおよびデコーダで、双一次（すなわち２タップの）フィルタが、値の補間に使用される。たとえば、図６のサブピクセル位置を参照すると、Ｐ１、Ｐ５、およびＰ７の値を決定するのに使用される補間フィルタを、式（１）から（３）に示されたフィルタとすることができる。
【００９２】
Ｂ．１次元補間
さまざまなサブピクセル位置について、いくつかの実施形態のエンコーダおよびデコーダでは、補間された値を１つの次元だけで計算する。図７に示されているように、下記の式によって、整数ピクセルの間で補間するときの、フィルタＦ１（１／２ピクセルシフト）、Ｆ２（１／４ピクセルシフト）、およびＦ３（３／４ピクセルシフト）の動作が示される。
Ｆ１：（−１Ｉ１＋９Ｉ２＋９Ｉ３−１Ｉ４＋８−ｒ）＞＞４        （１６）
Ｆ２：（−４Ｉ１＋５３Ｉ２＋１８Ｉ３−３Ｉ４＋３２−ｒ）＞＞６  （１７）
Ｆ３：（−３Ｉ１＋１８Ｉ２＋５３Ｉ３−４Ｉ４＋３２−ｒ）＞＞６  （１８）
【００９３】
ここで、値ｒによって、丸めが制御される。下記のように、値ｒは、２進フレームレベル丸め制御パラメータＲと補間方向に依存する。
【００９４】
【数１】
0004625240.tif 000003
【００９５】
１次元補間をさらに示すために、図６のＰ１およびＰ５によって、１つの次元だけでの補間を必要とする（すなわち、Ｐ１では水平方向、Ｐ５では垂直方向）、基準フレーム（６００）内の１／２ピクセル位置が示されている。次式によって、Ｐ１およびＰ５について整数ピクセルの間で補間するときのフィルタＦ１（１／２ピクセルシフト）の動作が示される。
Ｐ１＝（−１ｅ＋９ｆ＋９ｇ−１ｈ＋８−ｒ）＞＞４              （２０）
Ｐ５＝（−１ｂ＋９ｆ＋９ｊ−１ｎ＋８−ｒ）＞＞４              （２１）
【００９６】
同様に、図６のＰ０およびＰ２によって、１つの次元だけでの補間を必要とする、基準フレーム（６００）内の１／４ピクセル位置が示される。次式によって、Ｐ０およびＰ２について整数ピクセルの間で補間するときのフィルタＦ２（１／４ピクセルシフト）の動作が示される。
Ｐ０＝（−４ｅ＋５３ｆ＋１８ｇ−３ｈ＋３２−ｒ）＞＞６        （２２）
Ｐ２＝（−４ｂ＋５３ｆ＋１８ｊ−３ｎ＋３２−ｒ）＞＞６        （２３）
【００９７】
近似１／４ピクセル双三次フィルタＦ２を、わずかな修正だけを用いて使用して、３／４ピクセル位置を計算することもできる。たとえば、次式によって、Ｐ８について整数ピクセルの間で補間するときのフィルタＦ３（３／４ピクセルシフト）の動作が示される。
Ｐ８＝（−３ｂ＋１８ｆ＋５３ｊ−４ｎ＋３２−ｒ）＞＞６        （２４）
【００９８】
代替案では、エンコーダおよびデコーダで、１つの次元の１／２ピクセル、１／４ピクセル、または３／４ピクセルだけシフトされる位置について他のおよび／または追加の補間フィルタが使用される。たとえば、エンコーダおよびデコーダで、より多数またはより少数のフィルタ係数、異なるフィルタ係数、異なる丸め、または丸めなしのフィルタが使用される。
【００９９】
Ｃ．多次元補間
いくつかの実施形態では、補間が、２次元でオフセットしたサブピクセル位置で実行される。たとえば、図６で、Ｐ３、Ｐ４、Ｐ６、およびＰ７が、水平と垂直の両方の次元で補間が行われる位置である。
【０１００】
図８に示された補間方法（８００）に対応する一実施形態では、２次元サブピクセル位置が、まず垂直方向に沿って、次に水平方向に沿って、補間される。以下でより完全に説明するように、補間は、上の式（１６）から（１８）で指定されたフィルタ、Ｆ１、Ｆ２、またはＦ３の１つまたは複数を使用して実行される。図８に示された実施形態では、丸めが、垂直フィルタリングの後と水平フィルタリングの後の両方で適用される。丸め規則のビットシフトによって、中間結果での１６ビット算術によって許容される精度の維持が保証される。
【０１０１】
図８では、垂直フィルタリングがまず実行され、水平フィルタリングがそれに続く。垂直フィルタリングから開始することによって、いくつかのアーキテクチャで性能が改善される。他の実施形態では、フィルタリングの順序が異なる。たとえば、補間が、垂直方向の前に水平方向で実行される。あるいは、補間フィルタのさまざまな他の組合せが使用される（たとえば、複数の水平フィルタおよび／または複数の垂直フィルタ）。
【０１０２】
入力ピクセル値（８１１）および出力ピクセル値（８３８）は、８ビットのビット深さを有し、２５６値のダイナミックレンジを有する。中間値（８２０）は、１６ビットのビット深さを有し、６５５３６値のダイナミックレンジを有する。代替実施形態では、入力値、出力値、および中間値が、異なる（たとえばより大きい）ビット深さを有する。
【０１０３】
第１ステージ（８１０）で、適当な垂直フィルタ（ＦＶ）が、８ビット入力ピクセル値（８１１）に適用される（８１２）。適用される垂直フィルタは、選択されたサブピクセル位置が、１／４ピクセル、１／２ピクセル、または３／４ピクセルのどれだけシフトされるかに依存し、上で説明した双三次フィルタの１つの形をとることができる。
【０１０４】
垂直フィルタリングの後の丸め規則は、次式によって定義される。
（Ｓ＋ＲＶ）＞＞ｓｈｉｆｔＶ                                  （２５）
【０１０５】
ここで、Ｓは、垂直にフィルタリングされた結果であり、ＲＶ＝２ｓｈｉｆｔＶ−１−１＋Ｒである。Ｒは、フレームごとに０と１の間で交互に変える丸め制御値である。したがって、丸め規則には、ステージで交互に変える（ｓｔａｇｅ−ａｌｔｅｒｎａｔｉｎｇ）丸め制御（８１３）およびビットシフト（８１４）が含まれる。
【０１０６】
右シフトによって、潜在的に分解能の消失が引き起こされ、したがって、右シフトの少なくとも一部が、補間の後のステージまで延期される。ｓｈｉｆｔＶの右シフト値は、補間されるサブピクセル位置に依存する。具体的に言うと、Ｐ３、Ｐ４、Ｐ６、およびＰ７について、ｓｈｉｆｔＶ＝｛５、３、３、１｝である。シフトの量は、第１ステージフィルタ係数値に起因する拡大の補償に必要な量より小さい（たとえば、シフトは、近似双三次フィルタについて６ビット未満である）が、後続フィルタリングの中間結果が中間値のダイナミックレンジ内（たとえば、１６ビットワードの場合に６５５３６個の可能な値）にとどまることを保証するのに十分である。フルシフトと比較して、この短縮されたシフトでは、補間の第１ステージ（８１０）の後に、中間ピクセル値（８２０）の精度が保たれる。中間ピクセル値（８２０）は、ｙビットのダイナミックレンジを有し、ｙは、８ビットより大きい。第１ステージで実行されるシフトの量は、使用可能なビット深さおよび補間フィルタの係数に依存するものとすることができる。たとえば、本明細書に記載の例示的実施形態では、中間値が、１６ビットのワード限界に制限される。
【０１０７】
図６の点Ｐ３と、０から２５５の範囲（８ビット）の入力値を検討されたい。近似双三次係数［−４  ５３  １８  −３］を８ビット入力値に適用することからの中間値の範囲は、フィルタ係数からの拡大要因に起因して、−１７８５から１８１０５までである（約１４．３ビット、実施については１５ビットまでに丸められる）。中間値に近似双三次フィルタ係数（追加の拡大を有する）を適用する後続の水平フィルタリングでは、１６ビットダイナミックレンジの外の値が作られ、オーバーフローまたはアンダーフローが引き起こされる可能性がある。したがって、中間値は、後続水平フィルタリングで１６ビットダイナミックレンジ内の値がもたらされることを保証するのに十分にシフトされる。Ｐ３について、最初のシフト量は、５ビットであり、シフトされた中間値のダイナミックレンジは、−５５から５６５までである（約９．３ビット、実施については１０ビットまでに丸められる）。シフトされた中間値に近似双三次フィルタ係数を適用することからの出力の範囲は、−７８６０から４０５００までになり、これは、１６ビット未満のダイナミックレンジを有する。したがって、短縮されたシフトは、１６ビットワード限界が完全に利用されるが、補間の第２ステージ（８３０）中にそれを超えないことが保証されるように計算される。
【０１０８】
第２ステージ（８３０）では、適当な水平フィルタ（ＦＨ）を適用して、垂直フィルタによって決定された値（８２０）からの２次元サブピクセル位置の値を補間する（８３２）。水平フィルタリングの後の丸め規則は、次の通りである。
（Ｓ＋６４−Ｒ）＞＞７                                        （２６）
【０１０９】
ここで、Ｓは、水平フィルタリングされた結果であり、Ｒは、フレームごとに交互に変える丸め制御値である。第１ステージの丸め規則と同様に、第２ステージの丸め規則には、ステージで交互に変える丸め制御（８３３）およびビットシフト（８３４）を用いて丸めが含まれる。第１ステージの延期されたシフトのゆえに、第２ステージでのシフトの量は、通常は、選択された水平フィルタについて通常期待されるものより大きく、所望のダイナミックレンジを有する値を出力するように計算される。
【０１１０】
双三次フィルタリングのすべてのケースで、潜在的に、値が負の補間されたピクセル、または値が範囲の最大値（たとえば、８ビット出力では２５５）より大きい補間されたピクセルが作られる可能性がある。このような８ビット出力値の場合には、エンコーダおよびデコーダが、許容される範囲に収まるように出力値（８３６）をクリッピングする。具体的に言うと、アンダーフローが、０にセットされ、オーバーフローが、２５５にセットされる。クランプの後に、補間された８ビット値（８３８）が出力される。
【０１１１】
図８では、第２ステージのシフトが、７ビットである。したがって、９ビットを有するフィルタリングされた出力値が、保たれる。たとえば、Ｐ３の前の例を続けると、フィルタリングされた出力値の範囲は、−６１から３１６までであり、これは、約８．６ビットのダイナミックレンジを有する（実施については９ビットまでに丸められる）。補間されたデータの有効範囲は、８ビットだけだが、ヘッドルームの余分の１ビットによって、オーバーフロー情報およびアンダーフロー情報が提供される。言い換えると、最上位ビット（すなわち「符号」ビット）がセットされている場合に、アンダーフローまたはオーバーフローがある。具体的にこの２つのどちらが発生したかは、残りの８つの「仮数」ビットを調べることによって導出される。
【０１１２】
図９から１１に、上で説明し、図８に示した２次元補間をさらに示す。図９に、図６の基準フレーム（６００）のサブピクセル位置Ｐ７（水平に１／２ピクセル、垂直に１／２ピクセル）を示す。２つの１／２ピクセル双三次補間フィルタを使用して、Ｐ７の値を補間する。第１ステージでは、中間値Ｖ１からＶ４を、下記の一般形を有する１／２ピクセル双一次フィルタを使用して、近接する整数ピクセル位置から計算する。
【０１１３】
ＶＩｎｔｅｒ＝（−１ｘ１＋９ｘ２＋９ｘ３−１ｘ４）            （２７）
したがって、
Ｖ１＝（−１ａ＋９ｅ＋９ｉ−１ｍ）                            （２８）
Ｖ２＝（−１ｂ＋９ｆ＋９ｊ−１ｎ）                            （２９）
Ｖ３＝（−１ｃ＋９ｇ＋９ｋ−１ｏ）                            （３０）
Ｖ４＝（−１ｄ＋９ｈ＋９ｌ−１ｐ）                            （３１）
である。
【０１１４】
ＲＶの適当な値を加算した後に、結果を１ビットだけ右シフトする。第２ステージでは、中間結果Ｖ１からＶ４が、１／２ピクセルフィルタによって使用されて、Ｐ７のピクセル値が計算される。具体的に言うと、下記の形を有する１／２ピクセルフィルタが使用される。
Ｐ７＝（−１Ｖ１＋９Ｖ２＋９Ｖ３−１Ｖ４）                    （３２）
【０１１５】
上で述べたように、第２ステージの結果は、９ビット値を得るために７ビットだけ右シフトされる。この９ビット値には、８つの仮数ビットおよび１つの符号ビットが含まれる。必要なクランプをすべて実行してオーバーフローまたはアンダーフローを補償した後に、最終的な８ビットの補間された値が出力される。
【０１１６】
図１０に、図６の基準フレーム（６００）のサブピクセル位置Ｐ４（水平に１／２ピクセル、垂直に１／４ピクセル）を示す。１／４ピクセルおよび１／２ピクセルの双三次補間フィルタを使用して、Ｐ４の値を補間する。第１ステージでは、中間値Ｖ１からＶ４を、下記の一般形を有する１／４ピクセル双三次フィルタを使用して、近接する整数ピクセル位置から計算する。
ＶＩｎｔｅｒ＝（−４ｘ１＋５３ｘ２＋１８ｘ３−３ｘ４）        （３３）
【０１１７】
このフィルタは、上でＰ７の計算に関して説明したものと同一の形で、基準フレーム（６００）の整数ピクセル値に適用される。ＲＶの適当な値を加算した後に、結果を３ビットだけ右シフトする。第２ステージでは、中間結果Ｖ１からＶ４が、１／２ピクセルフィルタによって使用されて、Ｐ４のピクセル値が計算される。具体的に言うと、下記の形を有する１／２ピクセルフィルタが使用される。
Ｐ４＝（−１Ｖ１＋９Ｖ２＋９Ｖ３−１Ｖ４）                    （３４）
【０１１８】
第２ステージの結果は、９ビット値を得るために７ビットだけ右シフトされ、必要なクランプがすべて実行され、最終的な８ビットの補間された値が出力される。
【０１１９】
図１０には、サブピクセル位置Ｐ６（水平に１／４ピクセル、垂直に１／２ピクセル）も示されている。Ｐ６の値を補間するために、Ｐ４の補間の技法が、わずかな修正だけを用いて使用される。修正された技法では、第１ステージで１／２ピクセル双三次フィルタを使用して、中間値を決定する。中間ピクセル値の位置は、図１０のＶ５からＶ８に示されている。第２ステージ中に、１／４ピクセル双三次フィルタでこの中間値を使用して、Ｐ６の値を計算する。具体的に言うと、下記の形を有する１／４ピクセル双三次フィルタが使用される。
Ｐ６＝（−４Ｖ５＋５３Ｖ６＋１８Ｖ７−３Ｖ８）                （３５）
【０１２０】
第１ステージおよび第２ステージでのシフトの量は、Ｐ４を計算する技法と同一である（すなわち、第１ステージのシフトが３、第２ステージのシフトが７である）。
【０１２１】
図１１に、図６の基準フレーム（６００）のサブピクセル位置Ｐ３（水平に１／４ピクセル、垂直に１／４ピクセル）を示す。２つの１／４ピクセル双三次補間フィルタを使用して、Ｐ３の値を補間する。第１ステージでは、中間値Ｖ１からＶ４が、下記の一般形を有する１／４ピクセル双三次フィルタを使用して、近接する整数ピクセル位置から計算される。
ＶＩｎｔｅｒ＝（−４ｘ１＋５３ｘ２＋１８ｘ３−３ｘ４）        （３６）
【０１２２】
このフィルタは、Ｐ４を計算することに関して上で説明したものと同一の形で基準フレーム（６００）の整数ピクセル値に適用される。ＲＶの適当な値を加算した後に、その結果を５ビットだけ右シフトする。第２ステージでは、中間結果Ｖ１からＶ４が、もう１つの１／４ピクセルフィルタによって使用されて、Ｐ３のピクセル値が計算される。具体的に言うと、下記の形を有する１／４ピクセルフィルタが使用される。
Ｐ３＝（−４Ｖ１＋５３Ｖ２＋１８Ｖ３−３Ｖ４）                （３７）
【０１２３】
第２ステージの結果が、９ビット値を得るために７ビットだけ右シフトされ、必要なクランプがすべて実行され、最終的な８ビットの補間された値が出力される。
【０１２４】
図９から１１には示されていないが、１つまたは両方の次元で３／４ピクセルシフトを有するサブピクセル位置の値も、計算することができる。そのようなサブピクセル位置を計算するために、上で概要を示した方法を、１／４ピクセル双三次フィルタの代わりに適当な３／４ピクセル双三次フィルタを使用することによって修正することができる。
【０１２５】
他の実施形態では、双一次フィルタまたは双一次フィルタと双三次フィルタとの組合せを使用して、サブピクセルサンプル位置の値を補間する。双一次フィルタの使用によって、双三次フィルタの場合より係数によって導入される膨張（ｅｘｐａｎｓｉｏｎ）が減るので、一般に、実行されるシフトの量（第１ステージの後および全体の後）が減る。たとえば、双一次フィルタおよび１６ビット中間値を使用する一実施形態では、第１ステージでシフトが実行されず、これによって１６ビットワード限界の使用が最大になり、４ビットの右シフトが最終ステージの後で実行される。同様に、クランプを、最終ステージまで延期することができる。
【０１２６】
上で説明した方法の基礎となる原理の１つが、所望の「ワードサイズ」限界Ｗ内にとどまりながら、フィルタリングのすべてのステージで可能な最高の精度を使用することである。出力値が、Ｄビットのダイナミックレンジを有し、Ｌビットが、最終ステージで破棄される場合に、フィルタリングの最終ステージの出力は、Ｄ＋Ｌ＋１ビットまでを占めることができ、この１つの余分なビットは、アンダーフローおよびオーバーフローのシグナリングに使用される。逆方向に進んで、フィルタリングの最終ステージが、ｋビットの拡大をもたらす場合に、最終ステージの入力は、Ｄ＋Ｌ−ｋ以内でなければならない。したがって、Ｗビット表現で最大の精度を保つために、下記の関係が存在する。
Ｄ＋Ｌ＋１＝Ｗ                                                （３８）
【０１２７】
さらに、最終ステージへの入力は、Ｄ＋Ｌ−ｋ＝Ｗ−ｋ−１ビットでなければならない。
【０１２８】
上の論理を、フィルタリングの終りから２番目のステージに再帰的に適用することができ、以下同様である。実際に、フラクショナルビットを使用して非２ｋ範囲および拡大要因を表現することによって、上下の限界を狭めることができる。
【０１２９】
図１２から図１５は、上で組み合わせて説明したが、複数ステージ補間に別々に適用可能でもある、さまざまな技法を示す図である。図１２から図１５には、めいめいの複数ステージ補間（１２００、１３００、１４００、１５００）を、他の複数ステージ補間技法と共に使用することができるさまざまな形は示されていない。
【０１３０】
また、図１２から図１５のそれぞれに、２つのステージが示されているが、図１２から図１５に示された複数ステージ補間（１２００、１３００、１４００、１５００）技法に、より多くのステージを含めることができる。より一般的には、複数ステージ補間（１２００、１３００、１４００、１５００）技法を、複数の次元の任意のタイプの分離可能なフィルタならびにカスケード構造、トレリス構造、または格子構造で実施される任意のフィルタを用いて実施することができる。
【０１３１】
図１２から図１５に、複数ステージ補間で使用される一般化された入力値、出力値、およびフィルタを示す。第１ステージの入力値、最終ステージの出力値、および中間値のビット深さの特定の選択は、ターゲットのアーキテクチャまたはアプリケーションの技術的仕様に従って任意に拡張することができる。たとえば、入力値を、基準フレームの整数ピクセル位置の８ビットピクセル値とし、出力値を、基準フレームのサブピクセル位置の８ビットピクセル値とし、フィルタを、標準の双三次フィルタおよび近似双三次フィルタ（図６から図８に関して上で説明したもの）とすることができる。代替案では、入力値および／または出力値が、異なるビット深さのダイナミックレンジを有するか、または異なるフィルタが使用される。
【０１３２】
それぞれ図４および図５に関して説明したエンコーダまたはデコーダなどのコンポーネントが、複数ステージ補間（１２００、１３００、１４００、１５００）を実行することができる。代替案では、別のエンコーダまたはデコーダ、あるいは別のタイプのコンポーネントが、複数ステージ補間（１２００、１３００、１４００、１５００）を実行することができる。
【０１３３】
図１２に、中間の補間された値に関する拡張されたダイナミックレンジ（ビット単位）を有する複数ステージ補間（１２００）の図を示す。第１ステージ（１２１０）で、コンポーネントが、１つまたは複数のｘビット範囲の入力値（１２１１）に第１フィルタＦ１を適用し（１２１２）、１つまたは複数のｙビット範囲の中間値（１２２０）を作る。ここで、ｙはｘより大きい。たとえば、ｙビット中間値は、８ビットより大きいダイナミックレンジを有するピクセル値であり、ｘビット入力値は、８ビットのダイナミックレンジを有する。
【０１３４】
詳細には図示されていない０または１個以上の中間ステージ（１２２２）のそれぞれで、コンポーネントが、ｙビット範囲の中間値（１２２０）にフィルタを適用する。中間ステージからの出力は、１つまたは複数のｚビット範囲の中間値（１２２９）であり、ここで、ｚはｘより大きい（図１２から図１５では、最終ステージが第２ステージである場合に、第１ステージから出力される中間値が、最終ステージへの入力中間値である）。
【０１３５】
最終ステージ（１２３０）で、コンポーネントが、１つまたは複数のｚビット範囲の中間値（１２２９）に最終フィルタＦＬを適用する（１２３２）。最終的な出力は、ｘビット範囲の出力値（１２３４）である。複数ステージ補間（１２００、１３００、１４００、１５００）技法のそれぞれについて、必要な場合に、コンポーネントは、追加の出力値について複数ステージ補間（１２００、１３００、１４００、１５００）を繰り返す。繰り返される補間では、コンポーネントが、前の補間で計算されたある中間値を再利用することができる。
【０１３６】
図１３に、スキップされたクランプを用いる複数ステージ補間技法（１３００）の図を示す。クランプの延期によって、たとえば、コンポーネントがもはや範囲の上下界に対して各中間値を検査しないので、計算が高速になる。延期されたクランプによって、中間値の精度も保たれる。
【０１３７】
第１ステージ（１３１０）で、コンポーネントが、１つまたは複数のｘビット範囲の入力値（１３１１）に第１フィルタＦ１を適用する（１３１２）。第１フィルタＦ１の適用の後に、クランプは実行されない。したがって、第１フィルタＦ１から出力される１つまたは複数の中間値（１３２０）が、ｘビットを超えるダイナミックレンジを有する場合がある。たとえば、入力値が、８ビット値であり、第１フィルタＦ１からの出力が、第１フィルタＦ１の係数によって導入される膨張係数（ｅｘｐａｎｓｉｏｎ  ｆａｃｔｏｒ）に起因して、９ビットまたはそれ以上のダイナミックレンジを有する。
【０１３８】
詳細には図示されていない０または１個以上の中間ステージ（１３２２）のそれぞれで、コンポーネントが、１つまたは複数のクランプされていない中間値（１３２０）にフィルタを適用する。クランプを、０または１個以上の中間ステージ（１３２２）でスキップすることもできる。０または１個以上の中間ステージ（１３２２）から出力された中間値（１３２９）が、最終ステージ（１３３０）に入力され、このステージで、コンポーネントが値（１３２９）に最終フィルタＦＬを適用する（１３２２）。最終フィルタＦＬからの最終的な出力が、クランプされ（１３３４）、ｘビット範囲の値（１３３６）が出力される。
【０１３９】
図１４に、延期されたビットシフトを用いる複数ステージ補間（１４００）の図を示す。第１ステージ（１４１０）で、コンポーネントが、１つまたは複数のｘビット範囲の入力値（１４１１）に第１フィルタＦ１を適用する（１４１２）。第１フィルタＦ１の適用と共にまたはその後に、短縮されたシフト（１４１４）を実行する。短縮されたシフト（１４１４）は、ｘビット範囲の出力値を保証するのに必要なシフトより少なく（第１フィルタＦ１の係数の拡大要因に鑑みて）、したがって、第１フィルタＦ１に通常関連するシフトより少ない。したがって、短縮されたシフト（１４１４）によって、ｘビットより大きいダイナミックレンジ（ｙビットの）を有する１つまたは複数の中間値が作られる。たとえば、入力値が、８ビットのダイナミックレンジを有し、中間値が、８ビットを超えるダイナミックレンジを有する。
【０１４０】
詳細には図示されていない０または１個以上の中間ステージ（１４２２）のそれぞれで、コンポーネントが、１つまたは複数の中間値（１４２０）にフィルタを適用する。ｚビット（ｘビットより大きい）のダイナミックレンジを有する１つまたは複数の中間値（１４２９）が、０または１個以上の中間ステージ（１４２２）から出力され、最終ステージ（１４３０）で、コンポーネントが、値（１４２９）に最終フィルタＦＬを適用する（１４３２）。最終フィルタＦＬからの最終的な出力が、最終フィルタＦＬに通常関連するものより多い量だけシフトされ（１４３４）、これによって、出力値（１４３６）のダイナミックレンジが、指定されたビット深さに制限される。たとえば、出力値（１４３６）のダイナミックレンジ（ビット単位）が、ｘまたはｘ＋１と等しい。一実施形態では、第１ステージおよびすべての中間ステージのシフトが、最終ステージまで、できる限り延期される。シフトが延期される量は、中間計算に使用可能なビット深さと、めいめいのフィルタの拡大要因に依存する可能性がある。
【０１４１】
図１５に、ステージで交互に変える丸め制御を使用する複数ステージ補間技法（１５００）を示す。補間技法（１５００）の複数のステージは、丸め制御を適用して丸めを調整する形において交互に変える。これは、あるビデオシーケンス内のフレームからフレームへと丸め誤差が累積されるのを防ぐのに役立つ。たとえば、低品質ビデオシーケンスに、１次元（パン）または２次元（ズーム）の漸進的な動きが含まれる場合に、丸め誤差の累積によって、フレームからフレームへの漸進的な退色（ｃｏｌｏｒ  ｆａｄｉｎｇ）がもたらされる可能性があり、これによって、知覚可能なアーチファクトが引き起こされる可能性がある。ステージで交互に変える丸め制御は、そのような退色を防ぐのに役立つ。
【０１４２】
数値の例が、右ビットシフトの前にステージで交互に変える丸め制御が適用される丸めを示すのに役立つ可能性がある。右ビットシフトは、本質的に、右シフトされる値の除算および切捨をもたらす。シフトの前に丸め値を加算することによって、シフトされる値が、必ず切り下げられる（切捨）のではなく、上または下に（最も近い整数に）丸められるようになる。丸め制御を使用することによって、限界の値について丸めの方向（上または下）が変更される。たとえば、複数ステージのそれぞれで、フィルタリングの出力が、右シフトの前に右シフトの「除数」の１／２を加算する（たとえば、５ビット右シフトの前に２４＝１６を加算する、７ビット右シフトの前に２６＝６４を加算する）ことによって調整されると仮定する。この加算の効果は、０．５またはそれ以上の小数成分を有する値が（ビットシフトに対応する除算の後に）（次に大きい整数に）切り上げられることである。そのような値は、そうでなければ右シフトによって（次に小さい整数に）切り捨てられる。加算にかかわらず、０．５未満の小数成分を有する値は（ビットシフトに対応する除算の後に）、まだ右シフトによって（次に小さい整数に）切り捨てられる。丸め制御によって、ある限界の値の丸めの方向が変更される。たとえば、複数ステージのそれぞれで、フィルタリングの出力が、右シフトの前に０または１（交互に変える丸め制御値）を減算することによって、さらに調整される（たとえば、２ｓｈｉｆｔＶ−１または２ｓｈｉｆｔＶ−１−１）。丸め制御調整の効果は、０．５の小数成分を有する（ビットシフトに対応する除算の後に）値の丸めの方向が変更されることである。１が減算される場合に、そのような限界の値が、切り下げられる。そうでない場合には、そのような限界の値が、切り上げられる。
【０１４３】
複数のステージのそれぞれで、複数ステージ補間の前に、０と１の間で交互に変える丸め制御値が使用され、したがって、異なるステージで、丸め制御値が適用される形が交互に変わる。代替案では、複数ステージ補間技法（１５００）で、それ自体がステージからステージへ交互に変わる丸め制御値が使用される。
【０１４４】
図１５の第１ステージ（１５１０）で、コンポーネントが、１つまたは複数のｘビット範囲の入力値（１５１１）に第１フィルタＦ１を適用する（１５１２）。第１フィルタＦ１の適用と共にまたはその後に、丸め（１５１４）が、第１フィルタＦ１からの出力に対して実行される。丸め（１５１４）は、ステージで交互に変える丸め制御によって調整される。たとえば、第１ステージ（１５１０）で、ステージで交互に変える丸め制御によって、出力値が限界の値（そうでなければ出力値が下に丸められる）である場合に、出力値が最も近い整数に向けて上に丸められるようになる。１つまたは複数の丸められた中間値（１５２０）が、第１ステージから第２ステージ（１５３０）へ出力される。
【０１４５】
第２ステージ（１５３０）では、コンポーネントが、１つまたは複数の中間値（１５２０）に第２フィルタＦ２を適用する（１５３２）。丸め（１５３４）が、第２フィルタＦ２からの出力に対して実行される。第２フィルタＦ２の適用と共にまたはその後に、丸め（１５３４）が、ステージで交互に変える丸め制御を用いて実行され、この丸め制御によって、限界の値について第１ステージと反対の方向の丸めが行われるようになる。たとえば、第２ステージ（１５３０）で、ステージで交互に変える丸め制御によって、出力値が限界の値である場合に、出力値が、最も近い整数に向かって下に丸められるようになる。１つまたは複数の中間値（１５３６）が、第２ステージから出力され、０または１個以上の追加ステージ（１５４０）でこれらを使用することができる。０または１個以上の追加ステージ（１５４０）に、さらに、ステージで交互に変える丸め制御を含めることができる。
【０１４６】
交互に変える丸め制御は、連続するステージでの適用に制限されるのではなく、ステージのさまざまな他の組合せで適用することができる。さらに、第１方向を、複数のパラメータに依存するものとすることができる。たとえば、ビデオエンコーダまたはビデオデコーダで、第１方向を、前のフレームで使用されれた丸め制御または補間されるフレームのタイプ（たとえば、Ｉフレーム、Ｐフレーム、またはＢフレーム）に依存するものとすることができる。他の実施形態では、第１方向に、臨時情報（ｃａｓｕａｌ  ｉｎｆｏｒｍａｔｉｏｎ）（たとえば、過去にコーディング／デコーディングされた情報）から暗黙のうちに導出されるか、擬似乱数ジェネレータを使用して導出されるか、ビットストリームの一部としてシグナリングされる、定数をセットすることができる。ステージで交互に変える丸め制御は、双一次フィルタ、双三次フィルタ、および近似双三次フィルタを含む、さまざまな補間フィルタのどれかを使用して複数ステージ補間に適用することができる。
【０１４７】
Ｄ．クロミナンス動きベクトル
クロミナンス（クロマ）動きベクトルは、同一位置の輝度動きベクトルから暗黙のうちに導出されるので、その精度は、限られ、単純化のスコープが提供される。この単純化では、コーディングされるビデオの知覚される質を大きく落とさずに、エンコーダおよびデコーダでのクロミナンス値のサブピクセル補間の計算的複雑さを減らすことができる。さらに、エンコーダおよびデコーダを、クロミナンス動きベクトルの丸めおよび補間の異なるモードの間で切り替えることができる。たとえば、あるモードでは、より高い計算的複雑さと引き換えに、コーディングされるビデオの品質を際立たせる。別のモードでは、品質を多少犠牲にして、計算的単純さを際立たせる。
【０１４８】
一実施形態では、ビデオエンコーダおよびビデオデコーダで、シーケンスレベルの１ビットフィールド「ＦＡＳＴＵＶＭＣ」を使用して、クロミナンス値のサブピクセル補間およびクロミナンス動きベクトルの丸めを制御する。したがって、ビデオエンコーダおよびビデオデコーダは、２つの異なるクロミナンス丸めモードすなわち、高速モードと基本モードの１つで選択的に動作する。
【０１４９】
図１６に、複数のクロミナンス丸めおよび補間モードの間での選択の技法（１６００）を示す。たとえば、それぞれ上で図４および図５に関して説明したものなどのビデオエンコーダまたはビデオデコーダが、この技法を実行する。
【０１５０】
ビデオエンコーダまたはビデオデコーダは、１ビットフラグＦＡＳＴＵＶＭＣによって、高速クロミナンス動き補償モード（フラグ＝１）または基本クロミナンス動き補償モード（フラグ＝０）のどちらが示されるかを判定する（１６１０）。たとえば、このフラグは、エンコーダがコーディングされるビデオのビットストリームに書き込み、デコーダがビットストリームから読み取る、ユーザ設定に対応するシーケンスレベルのフィールドである。代替案では、エンコーダおよびデコーダが、より多くのビットを使用して、たとえば２つより多い使用可能なモードの間で選択するために、固定された長さまたは可変長さのコードを使用してクロミナンス丸めおよび／または補間モードをシグナリングする。あるいは、ユーザ設定に対応するシーケンスレベルのフィールではなく、切替情報が、ビットストリーム内の他所でシグナリングされ、かつ／または異なる判断基準に従ってセットされる。
【０１５１】
ビデオエンコーダまたはビデオデコーダは、基本モード（１６２０）または高速モード（１６３０）でクロミナンス動き補償を実行する。基本モード（１６２０）および高速モード（１６３０）の動きベクトルの丸めおよび補間の詳細は、一実施形態について以下に示す。代替案では、これらのモードが、異なる実施形態を有する。たとえば、以下で説明する高速モード（１６３０）実施形態で使用されるルックアップテーブルを、特定のハードウェアアーキテクチャの所望の性能レベルをもたらすために異なるマッピングに変更するか、または異なる精度の動きベクトルについて動作するように変更する。基本モード（１６２０）および高速モード（１６３０）の代わりにまたはこれに加えて、エンコーダまたはデコーダで、クロミナンス動きベクトルの丸めおよび補間の他のモードを使用することができる。
【０１５２】
一実施形態では、高速モードで（たとえば、クロミナンス丸めフラグ＝１の場合）、１／４ピクセルオフセットにある（すなわち、１／４ピクセルオフセットおよび３／４ピクセルオフセット）クロミナンス動きベクトルが、最も近いフルピクセル位置に丸められ、１／２ピクセルオフセットにあるクロミナンス動きベクトルが、丸められないままにされ、双一次フィルタリングが、クロミナンス補間に使用される。このモードでは、エンコーダおよびデコーダの速度が高くなる。この最適化の動機は、（ａ）整数ピクセル位置、（ｂ）１／２ピクセル位置、（ｃ）少なくとも１つの座標（ｘまたはｙ）について１／４ピクセル位置、および（ｄ）両方の座標について１／４ピクセル位置にあるピクセルオフセット補間の複雑さの間の大きな相違である。ａ：ｂ：ｃ：ｄの比率は、おおむね１：４：４．７：６．６である。この高速モードを適用することによって、（ａ）および（ｂ）を優先することができ、したがって、デコーディング時間を削減することができる。これは、クロミナンス補間だけについて実行されるので、コーディングおよび品質（特に可視の品質）の消失は、どちらも無視してよい。
【０１５３】
この高速モードでは、丸めの最終的なレベルが、下記のようにクロミナンス動きベクトルに対して行われる。
【０１５４】
//RndTbl[-3]=-1,RndTbl[-2]=0,RndTbl[-1]=+1,RndTbl[0]=0
//RndTbl[1]=-1,RndTbl[2]=0,RndTbl[3]=+1
cmv_x=cmv_x+RndTbl[cmv_x%4];                                  （３９）
cmv_y=cmv_y+RndTbl[cmv_y%4];
【０１５５】
ここで、ｃｍｖ＿ｘおよびｃｍｖ＿ｙは、１／４ピクセル単位のクロミナンス動きベクトルのｘ座標およびｙ座標であり、％は、剰余（または余り）演算を表し、したがって、（ｘ％ａ）＝−（−ｘ％ａ）と定義される（負の数の剰余は、対応する正の数の剰余の負数と等しい）。したがって、ｃｍｖ＿ｘ（またはｃｍｖ＿ｙ）が、４によって割られるときに、クロミナンス動きベクトルが、整数オフセットを有する。ｃｍｖ＿ｘ％４＝±２のときに、クロミナンス動きベクトルが、１／２ピクセルオフセットを有する。ｃｍｖ＿ｘ％４＝±１または±３のときに、クロミナンス動きベクトルが、１／４ピクセルオフセットを有する。上の再マッピング動作からわかるように、１／４ピクセル位置は、クロミナンス動きベクトルを最も近い整数位置に丸めることによって禁止される（１／２ピクセル位置は変更されないままになる）。したがって、このモードによって、クロミナンス座標が整数ピクセル位置および１／２ピクセル位置に再マッピングされる。双一次フィルタリングを、さらなる高速化のためにこのモードのクロミナンス補間のすべてに使用することができる。この高速モード実施形態を、複数の丸めモードの間の選択と組み合わせて説明したが、その代わりに、高速モード実施形態を独立に（すなわち、唯一の可能なモードとして）使用することができる。
【０１５６】
図１７は、このクロミナンス丸めの第１モードを示す表図（１７００）である。第１行（１７１０）に、１／４ピクセル精度の輝度動きベクトル値が示されている。輝度動きベクトル値は、整数ピクセル位置からの小数オフセットに関して示されているが、これらを、各整数が１／４ピクセル増分を表す整数値（すなわち、０、１／４、１／２、３／４、１ではなく０、１、２、３、４）として表現することができる。第２行（１７２０）に、クロミナンス動きベクトル値が、高速モードでどのように丸められ、その結果、整数ピクセル精度および１／２ピクセル精度を有するようになるかが示されている。
【０１５７】
この実施形態の第２の基本モード（たとえば、クロミナンス丸めフラグ＝０）では、１／４ピクセルオフセットにあり、丸め誤差を有しないクロミナンス動きベクトルは、１／４ピクセルオフセットのままである。他のサブピクセルオフセットにあるクロミナンス動きベクトルは、最も近いフルピクセル位置または１／２ピクセル位置に丸められる。このモードでは、デコーダの速度が、他のモードより遅くなる可能性があるが、クロミナンスピクセル値が計算される精度が、高くなる。したがって、この基本モードでは、クロミナンス座標が、整数ピクセル位置、１／２ピクセル位置、および１／４ピクセル位置に再マッピングされる。上で説明した双三次フィルタリングまたは双一次フィルタリングを、クロミナンス補間に使用することができる。
【０１５８】
図１８は、このクロミナンス丸めの基本モードを示す表図である。第１行（１８１０）に、１／４ピクセル精度の輝度動きベクトル値が示されている。第２行（１８２０）に、上で説明した基本モードで対応するクロミナンス動きベクトル値がどのように丸められ、その結果、整数ピクセル精度、１／２ピクセル精度、および１／４ピクセル精度を有するようになるかが示されている。他の実施形態では、クロミナンス空間が、クロミナンス空間の他の分解能に丸められる。
【０１５９】
さまざまな実施形態に関して本発明の原理を説明し、図示したが、これらのさまざまな実施形態を、そのような原理から逸脱せずに配置および詳細においてを修正できることを諒解されたい。たとえば、上で説明した原理および技法は、ビデオエンコーダおよび／またはビデオデコーダでの使用に制限されない。そうではなく、上で説明した原理および技法は、値が部分的に１つまたは複数の中間値に基づいて計算されるか、分離可能なフィルタが複数の次元で使用される、すべてのコンピューティングの文脈で適用することができる。
【０１６０】
本明細書で説明したプログラム、処理、または方法が、他の形で示されない限り、特定のタイプのコンピューティング環境に関連せず、それに制限されないことを理解されたい。さまざまなタイプの汎用のまたは特殊化されたコンピューティング環境を、本明細書に記載の教示による動作と共に使用するか、そのような環境によって本明細書に記載の教示による動作を実行することができる。ソフトウェアで示された実施形態の要素を、ハードウェアで実施することができ、逆も同様である。
【０１６１】
本発明の原理を適用することができる多数の可能な実施形態に鑑みて、本発明として、請求項およびその同等物の範囲および趣旨に含まれるすべてのそのような実施形態を請求する。
【０１６２】
【発明の効果】
以上説明したように、本発明によれば、計算されたピクセル値を使用する動き予測の有効性が改善される。それと同時に、近似双三次フィルタリングにより、比較的効率的に計算を行うことができる。
【図面の簡単な説明】
【図１】従来技術によるビデオエンコーダでの動き推定を示す図である。
【図２】従来技術による、サブピクセル動き推定および補償での補間に関するサブピクセル位置を示す図である。
【図３】複数の本明細書に記載の実施形態をその中で実施することができる、適切なコンピューティング環境を示すブロック図である。
【図４】複数の本明細書に記載の実施形態で使用される一般化されたビデオエンコーダシステムを示すブロック図である。
【図５】複数の本明細書に記載の実施形態で使用される一般化されたビデオデコーダシステムを示すブロック図である。
【図６】サブピクセル動き推定およびサブピクセル動き補償中のピクセル値補間に関する位置を示す図である。
【図７】サブピクセル位置に関する補間されたピクセル値の計算に使用されるピクセル値を有する整数ピクセル位置を示す図である。
【図８】サブピクセル位置の値を補間する２ステージ補間技法を示す図である。
【図９】水平１／２垂直１／２サンプル位置と、そのサンプル位置の値を計算するのに使用されるサブピクセル位置での中間値とを示す図である。
【図１０】水平１／４垂直１／２サンプル位置、水平１／２垂直１／４サンプル位置、およびそれらのサンプル位置の値を計算するのに使用されるサブピクセル位置での中間値を示す図である。
【図１１】水平１／４垂直１／４サンプル位置と、そのサンプル位置の値を計算するのに使用されるサブピクセル位置での中間値を示す図である。
【図１２】強化されたダイナミックレンジ（ビット単位）中間値を用いる複数ステージ補間技法を示す図である。
【図１３】スキップされたクランプを用いる複数ステージ補間技法を示す図である。
【図１４】延期されたビットシフトを用いる複数ステージ補間技法を示す図である。
【図１５】ステージで交互に変える丸め制御を使用する複数ステージ補間技法を示す図である。
【図１６】複数のクロミナンス丸めおよび補間モードの間での選択の技法を示す流れ図である。
【図１７】第１のクロミナンス丸めモードを示す表図である。
【図１８】第２のクロミナンス丸めモードを示す表図である。
【符号の説明】
４００  ビデオエンコーダシステム
４０５  現在のフレーム
４１０  動き推定
４１５  動き情報
４２０  フレームストア
４２５  再構成された前のフレーム
４３０  動き補償
４３５  動き補償された現在のフレーム
４４５  予測残差
４６０  周波数変換
４６６  逆周波数変換
４７０  量子化
４７６  逆量子化
４８０  エントロピ符号化
４９０  バッファ
４９５  圧縮ビデオ情報
【図１】
0004625240.tif 000004
【図２】
0004625240.tif 000005
【図３】
0004625240.tif 000006
【図４】
0004625240.tif 000007
【図５】
0004625240.tif 000008
【図６】
0004625240.tif 000009
【図７】
0004625240.tif 000010
【図８】
0004625240.tif 000011
【図９】
0004625240.tif 000012
【図１０】
0004625240.tif 000013
【図１１】
0004625240.tif 000014
【図１２】
0004625240.tif 000015
【図１３】
0004625240.tif 000016
【図１４】
0004625240.tif 000017
【図１５】
0004625240.tif 000018
【図１６】
0004625240.tif 000019
【図１７】
0004625240.tif 000020
【図１８】
0004625240.tif 000021