(57)【特許請求の範囲】
【請求項１】
符号化されるビデオフレームの部分を予測するための複数のサブペル位置のためにアダプティブ動き補償フィルタセットを符号化する動画符号化デバイスにより実装される方法であって、
前記動画符号化デバイスにより、それぞれ前記複数のサブペル位置に対応している複数のサブペル位置群に分類化された複数の動き補償フィルタを含むコードブックを取得する段階であって、前記複数のサブペル位置群それぞれは、前記複数のサブペル位置のいずれか対応するものにおける画像の複数の部分を補間するのに適した複数の動き補償フィルタを含み、前記複数の動き補償フィルタは、ベースコードブックのフィルタセットと、仮想コードブックのフィルタセットと含み、前記仮想コードブックのフィルタセットは、前記ベースコードブックのフィルタセットから選択されたフィルタの組み合わせを含む段階と、
前記動画符号化デバイスにより、前記動画符号化デバイスによる符号化のために符号化されていない動画フレームを取得する段階と、
分割モードによる分割画像として前記動画フレームの部分を選択する段階と、
前記動画符号化デバイスにより、前記選択された分割画像をビットストリームに符号化する段階と、
前記分割画像の符号化中に、前記動画符号化デバイスは、
前記コードブックから、前記複数の動き補償フィルタのサブセットを、前記分割画像を予測するのに適したものとして選択する段階であって、前記選択されるサブセットは、前記複数のサブペル位置群それぞれの１つを含む段階と、
前記ビットストリームに、前記分割モードを特定するコードと、前記コードブックの前記複数の動き補償フィルタのうちの前記選択されたサブセットを特定するサブペルフィルタコードを含める段階と
を行う段階を実行する、方法。
【請求項２】
前記複数の動き補償フィルタの前記サブセットを選択する段階は、
前記複数の動き補償フィルタの複数の予め定められたサブセットの１つを選択する段階を有する、請求項１に記載の方法。
【請求項３】
前記ビットストリームに含まれる、前記分割モードを特定する前記コードは、前記複数の予め定められたサブセットのうちから前記選択されるサブセットを特定するインデックスを含む、請求項２に記載の方法。
【請求項４】
前記複数の動き補償フィルタの複数の予め定められたサブセットの１つを選択する段階は、
前記分割画像について、前記複数の動き補償フィルタの複数の個々の符号利得を決定する段階と、
前記決定された複数の個々の符号利得を利用して、前記分割画像に適用する場合における、前記複数の動き補償フィルタの前記複数の予め定められたサブセットそれぞれの累積符号利得を決定する段階と、
前記分割画像の好適な累積符号利得を有する前記複数の予め定められたサブセットの１つを選択する段階と
を有する、請求項２に記載の方法。
【請求項５】
前記分割画像に適用するデフォルトのフィルタセットについてデフォルトの累積符号利得を決定する段階であって、前記デフォルトのフィルタセットは、前記複数のサブペル位置にそれぞれ対応する複数のデフォルトのサブペル動き補償フィルタを含む段階と、
前記好適な累積符号利得が前記デフォルトの累積符号利得より好適であると判断する段階と
をさらに備え、前記デフォルトのフィルタセットは、前記コードブックのフィルタセットである、請求項４に記載の方法。
【請求項６】
複数の整数位置動き補償フィルタを取得する段階と、
前記分割画像の符号化中に、前記動画符号化デバイスが、前記複数の整数位置動き補償フィルタのいずれか１つを、前記分割画像を予測するために適したものとして選択する段階と
をさらに備える、請求項１から５のいずれか一項に記載の方法。
【請求項７】
前記複数の整数位置動き補償フィルタのうちの前記選択したものが、前記複数の動き補償フィルタのうちの前記選択したサブセットよりも符号利得が良いと判断する段階と、
前記動画符号化デバイスが生成する前記ビットストリームに、
前記複数の整数位置動き補償フィルタのうちの前記選択したものを特定する整数フィルタコードと、
前記動画フレームの少なくとも一部の前記ビットストリームに、前記整数フィルタコードが含まれていることを示す整数フィルタのフラグと
を含める段階と
をさらに備える、請求項６に記載の方法。
【請求項８】
前記コードブックはさらに、前記ベースコードブックのフィルタセットとして前記複数の整数位置動き補償フィルタを含む、請求項６に記載の方法。
【請求項９】
前記複数の整数位置動き補償フィルタを取得する段階は、整数位置コードブックを取得する段階を含む、請求項６に記載の方法。
【請求項１０】
前記コードブックを取得する段階は、
前記複数のサブペル位置にそれぞれ対応する複数のベースの動き補償フィルタを取得する段階と、
前記複数のサブペル位置それぞれについて、（ｉ）前記ベースの動き補償フィルタからフィルタの組み合わせを繰り返し選択して、現在のサブペル位置に対応する複数の改良された動き補償フィルタを生成することと、（ｉｉ）前記ベースの動き補償フィルタにそれぞれ対応する符号利得を決定して、前記複数の改良された動き補償フィルタの符号利得を統合することと、（ｉｉｉ）前記決定され、前記統合された符号利得に従って、前記生成された複数の改良された動き補償フィルタから、前記仮想コードブックのフィルタセットとして、前記現在のサブペル位置に対応している良好なパフォーマンスの動き補償フィルタのサブペル位置群を選択することとを行うこととを少なくとも行うことで、前記複数のサブペル位置にそれぞれ対応する複数の仮想サブペル位置群フィルタを生成する段階と
を含む、請求項１から９のいずれか一項に記載の方法。
【請求項１１】
前記良好なパフォーマンスの動き補償フィルタの複数のサブセットを選択することをさらに備え、各サブセットは、前記複数のサブペル位置群それぞれから選択される１つの良好なパフォーマンスの動き補償フィルタを含む、請求項１０に記載の方法。
【請求項１２】
コンピュータに、
請求項１から１１のいずれか一項に記載の方法を実行させるためのプログラム。
【請求項１３】
プロセッサにより実行されると請求項１に記載の方法を実行させるための命令を格納する記憶媒体と前記プロセッサとを備える、動画符号化装置。
【請求項１４】
符号化されているビデオフレームの部分を予測するための複数のサブペル位置のためにアダプティブ動き補償フィルタセットを復号化する動画復号化デバイスにより実装される方法であって、
前記動画復号化デバイスにより、それぞれ前記複数のサブペル位置に対応している複数のサブペル位置群に分類化された複数の動き補償フィルタを含むコードブックを取得する段階であって、前記複数のサブペル位置群それぞれは、前記複数のサブペル位置のいずれか対応するものにおける画像の複数の部分を補間するのに適した複数の動き補償フィルタを含み、前記複数の動き補償フィルタは、ベースコードブックのフィルタセットと、仮想コードブックのフィルタセットと含み、前記仮想コードブックのフィルタセットは、前記ベースコードブックのフィルタセットから選択されたフィルタの組み合わせを含む段階と、
前記符号化されている動画フレームと、前記コードブック内の前記アダプティブ動き補償フィルタセットを特定するサブペルフィルタコードとを含む符号化されているビットストリームを取得する段階であって、前記符号化されている動画フレームは、分割モードにより選択された部分を含み、前記符号化されているビットストリームは、さらに前記分割モードを特定するコードを含み、前記アダプティブ動き補償フィルタセットは、前記複数のサブペル位置に対応している複数の動き補償フィルタを含む段階と、
前記符号化されている動画フレームの復号中に、前記動画復号化デバイスが、前記サブペルフィルタコードが特定する前記アダプティブ動き補償フィルタセットを、前記コードブックから選択する段階と、
前記アダプティブ動き補償フィルタセットを利用して、前記符号化されている画像フレームの少なくとも一部分に対応している画像コンテンツの複数の部分を予測する段階と、
前記予測された複数の画像コンテンツの部分に少なくともしたがって、復号された画像を生成する段階と、
前記動画復号化デバイスに関するディスプレイに、前記生成された復号化された画像を表示する段階と
を備える、方法。
【請求項１５】
前記符号化されているビットストリームはさらに、
前記コードブック内の第２のアダプティブ動き補償フィルタセットを特定する第２のサブペルフィルタコードと、
前記動画復号化デバイスに、前記符号化されている画像フレームの前記部分と前記符号化されている画像フレームの第２の部分とを特定させる少なくとも１つの部分を特定するコードと
を含む、請求項１４に記載の方法。
【請求項１６】
前記符号化されている動画フレームの復号化中に、前記動画復号化デバイスは、前記第２のサブペルフィルタコードが特定する前記第２のアダプティブ動き補償フィルタセットを前記コードブックから選択する段階と、
前記第２のアダプティブ動き補償フィルタセットを利用して、前記符号化されている画像フレームの少なくとも第２の部分に対応している第２の複数の画像コンテンツの部分を予測する段階と、
をさらに備え、
前記復号化された画像は、さらに、前記予測された第２の複数の画像コンテンツの部分に従って生成される、請求項１５に記載の方法。
【請求項１７】
複数の整数位置動き補償フィルタを取得する段階をさらに備える、請求項１４から１６のいずれか一項に記載の方法。
【請求項１８】
前記符号化されているビットストリームはさらに、
前記符号化されている画像フレームの前記部分と前記符号化されている画像フレームの第２の部分とを前記動画復号化デバイスに特定させる少なくとも１つの部分特定コードと、
前記複数の整数位置動き補償フィルタのうち１つを特定する整数フィルタコードと、
前記整数フィルタコードが、前記動画フレームの少なくとも前記第２の部分について前記ビットストリームに含まれていることを示す整数フィルタフラグと
を含む、請求項１７に記載の方法。
【請求項１９】
前記符号化されている動画フレームの復号化中に、
前記整数フィルタフラグを読み出して、これに呼応して、前記複数の整数位置動き補償フィルタから、前記整数フィルタコードが特定する整数位置動き補償フィルタを選択する段階と、
前記選択された整数位置動き補償フィルタを利用して、前記符号化されている画像フレームの少なくとも前記第２の部分に対応している第２の複数の画像コンテンツの部分を予測する段階と
をさらに備え、
前記復号された画像は、前記予測された第２の複数の画像コンテンツの部分にさらにしたがって生成される、請求項１８に記載の方法。
【請求項２０】
前記コードブックはさらに、前記複数の整数位置動き補償フィルタを含む、請求項１７に記載の方法。
【請求項２１】
前記複数の整数位置動き補償フィルタを取得する段階は、整数位置コードブックを取得する段階を含む、請求項１７に記載の方法。
【請求項２２】
コンピュータに、
請求項１４から２１のいずれか一項に記載の方法を実行させるためのプログラム。
【請求項２３】
プロセッサにより実行されると請求項１４から２１のいずれか一項に記載の方法を実行させるための命令を格納する記憶媒体と前記プロセッサとを備える、動画符号化装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、動画信号の符号化および復号化に関し、より詳しくは、動き補償予測に利用するアダプティブフィルタの、コードブックを利用して行う符号化および復号化に関する。
【背景技術】
【０００２】
デジタル画像、音声／オーディオ、グラフィック、および動画等のデジタルマルチメディアの登場によって、コンテンツの確実な格納、通信、送信、検索、およびアクセスが比較的簡単になり、様々なアプリケーションが顕著に向上して、かつ、新しいアプリケーションが作成された。一般的に、デジタルマルチメディアのアプリケーションは数多くあり、娯楽、情報、医療、および安全といった幅広い分野を網羅しており、いくつもの方法で社会に貢献してきた。カメラやマイクロフォン等のセンサにより取得されるマルチメディアは、アナログである場合も多く、パルス符号化変調（ＰＣＭ）の形態のデジタルプロセスによってデジタルにされる。しかし、デジタル化された直後のデータ量は、スピーカ、テレビのディスプレイで必要となるアナログ表示の再生に必要なものなので、かなりの量となる。したがって、大容量のデジタルマルチメディアコンテンツを効率よく通信、格納、または送信するためには、元のＰＣＭの形態から圧縮された表現に圧縮する必要があり、このために数多くのマルチメディアの圧縮技術が発明されてきた。近年、動画の圧縮技術は、圧縮されていないデジタル動画に匹敵するほどの高い心理視覚品質（psychovisual quality）を維持しつつ、１０および１００という高い圧縮係数を達成可能とするほど非常に洗練されたものとなってきている。
【０００３】
動画圧縮の手法および科学では、今日までかなりの進歩がみられた（ＭＰＥＧ−１、ＭＰＥＧ−２、Ｈ．２６３、ＭＰＥＧ−４  パート２、ＭＰＥＧ−４  ＡＶＣ／Ｈ．２６４、ＭＰＥＧ−４  ＳＶＣおよびＭＶＣ、および、Ｗｉｎｄｏｗｓ（登録商標）  Ｍｅｄｉａ  Ｖｉｄｅｏ、ＲｅａｌＶｉｄｅｏ、Ｏｎ２  ＶＰ等の産業主導の所有規格（industry driven proprietary standards）など）が、より高い品質、より高い解像度、および三次元（立体）動画を、いつでもどこでも見たいという消費者の尽きない欲望によって、ＤＶＤ／ＢＤ、無線放送、ケーブル／衛星、有線およびモバイルネットワークを介して、ＰＣ／ラップトップ、ＴＶ，セットトップボックス、ゲームコンソール、可搬型メディアプレーヤ／デバイス、およびスマートフォン等幅広いクライアントデバイスに配信する必要があり、これがさらに高いレベルの動画圧縮への要望を作り出した。標準的団体による規格では、これは、近年始められた、ＩＳＯ  ＭＰＥＧによるＨＥＶＣ（High Efficiency Video Coding）の試みからも明らかなように、新たな技術を、ＩＴＵ−Ｔ規格委員会によるＨ．２６５の動画圧縮に対してここ数年試みられている技術に組み合わせようとしている。
【０００４】
上述した規格は全て、まず１つのフレームを複数のブロックに分割して、復号化されたフレームに対する動きベクトルを割り当て、符号化するべきフレーム内の各ブロックに割り当てて、これら動きベクトルが復号器に送信されて、過去に復号化されたフレームとは差分があり、通常は変換符号化によってブロックごとに符号化されるという、動き補償された予測フレームを生成するために用いられる、動画間フレーム（またはフィールド）の一時的な冗長性を削減する一般的なフレーム間予測符号化の削減を行う枠組みを利用している。より高い符号化の効率性を目指すためには、動きベクトルは、整数画素より高い精度であるべきであり、ＭＰＥＧ−１、ＭＰＥＧ−２によって、１／２の画素精度が達成され、一方では、ＭＰＥＧ−４パート２（バージョン２）動画、およびＨ．２６４が、１／４の画素精度の動き補償を達成している。しかし、１つのフレームの実際の画素は、整数画素の精度でしか入手できないので、前の１ブロックのフレームを、動き補償予測を生成するために必要なサブペル（subpel）の位置に保管することができる特別なフィルタが必要である。Ｈ．２６４規格は、１／４ペルの補間に必要な１６段階全てを生成するために利用することができる分割可能な複数のフィルタの固定フィルタセットを特定する。この固定フィルタセットは、最大利得のためのＷｉｅｎｅｒ理論から導かれるように理論的には最適であるが、固定フィルタセット内のフィルタは、６タップや、９タップに制約されているものがある。さらに、精度の制約から、整数化プロセス（integerization process）において精度が一部失われる。この種類の精度は、平均値については一般的には機能するが、特定の画像またはシーン用の、この、またはその他の１つの固定フィルタは、コンテンツの特性とそぐわない場合があり、改善の余地がある。
【０００５】
ここ数年の間、１／４ペルの動き補償のためのフィルタリング分野でかなりの研究が行われ、アダプティブ動きフィルタリングの開発が行われた。アダプティブフィルタリングでは、係数が固定ではないので、前もって知ることができない（つまり、係数をコンテンツ自身から計算する必要があり、時間が経つと変化する）。フィルタの係数を計算するために利用される数学的手法は、ｗｉｅｎｅｒのｈｏｐｆの等式に基づいている。
【０００６】
ｗｉｅｎｅｒのｈｏｐｆの数学的手法は、最適なフィルタ係数セットを計算することができるが、この方法をビデオ符号システムに統合するためには大きな課題がいくつもある。したがって、Ｈ.２６５およびＨＥＶＣ開発においては、複数の提案をして、様々な欠点を解決して、向上した符号化利得を得るために適合性を増強する必要がある。これらの提案を以下に簡単にまとめる。
【０００７】
分割不可能および分割可能な複数のフィルタを選り分けるという提案。つまり、分割不可能なフィルタは、計算量が多いが、理論的には分割不可能なフィルタのほうが高品質である。しかし、分割不可能なフィルタは、分割可能な複数のフィルタの係数の数の約二倍の係数を必要とするために、分割不可能なフィルタの符号化に関するオーバヘッドも高くなる。全体的には、動きフィルタリングにおいては、分割可能な複数のフィルタが、合理的な符号化利得を提供するので、全体的トレードオフが良好である。
【０００８】
各繰り返しにおける、繰り返し数に対する利得の間のトレードオフの提案。つまり、ｗｉｅｎｅｒ  ｈｏｐｆの等式の繰り返しの解は、良好な結果を得るためには、複数の繰り返し数を収束させる必要がある。必要な繰り返し数は、デフォルトであるフィルタセット（初回の繰り返しに利用されるもの）がどのくらい最適な結果から外れているかに応じて決まる。これらが近ければ、ふつうは繰り返しの数はせいぜい４回まででよいが、これらがかけ離れていれば、１６から２０回の繰り返しが必要となる場合もある。デフォルトのフィルタと最適なフィルタとの間の差が大きい場合には、４回の繰り返しで止めると、利得のほとんどを得られなくなる。
【０００９】
ビットコストと品質との間の最良なトレードオフを得るための様々な係数の精度の提案。フィルタセットの一定の係数を低い精度に抑えることで、一部のビットを節約することができるようになる。実際、フィルタの係数の最大精度は、一般的に８ビットに制限されており、一部の例外では、利用される精度が１０ビットに制限されている。
【００１０】
復号器に送る係数ビットコスト（実際の値、差動符号化（differential）、更新に制約を設けること）の低減の提案。復号器に送る係数の数には制約を設ける必要があり、たとえば、通常の分割不可能なフィルタセットは、１２０個までの係数を送ることができ（ビットコストは、１つのフレームにつき６５０から９５０ビット）、分割可能な複数のフィルタセットであっても、４５から６０個の係数（ビットコストは、１つのフレームにつき４００から５５０ビット）を送ることができる。差動符号化（differential coding）を行うことで（現在のフレームを、前のフレームのフィルタセットと、または、デフォルトであるフィルタセットと異なるように符号化すること）、または、更新に制約を設けることで、いくらか質が落ちるかもしれないが、このビットカウントを幾分低減させることができる。
【００１１】
全体の利得を向上させるために複数のフィルタセットを設ける提案。フレームごとに計算される１つのｗｉｅｎｅｒフィルタセットが、たとえばＨ．２６４規格のフィルタセットを超える利得を生じることができるが、１つのフレーム内に（たとえば１つのブロックまたはスライスについて）、複数のフィルタセットを提供する、という選択肢が設けられれば、より高い利得をうむことができる。しかし、フレーム１つについて２つのフィルタセットを設ける場合のビットコストであっても、利得の向上を相殺しても割に合わない場合がある。したがって、複数のフィルタセットを利用する場合、フィルタ係数のビットコストの管理が必要となる。
【００１２】
レート歪み最適化（「ＲＤＯ」）を複雑にする提案。これを利用しない場合には、最良の結果を導き出すためのフィルタ切り替えマップに対して複数回繰り返しを行う必要があるために、複数のフィルタを利用すると、高い利得を得るためには、通常は、フィルタ切り替えの頻度と利得との間の良好なトレードオフを生じさせるフィルタ選択のために最適なブロックサイズを得るように繰り返しを行う、というレート歪み最適化を利用する必要がある。
【００１３】
複数のフィルタを利用する際のブロックマップのビットコストのオーバヘッドの提案。複数のフィルタを利用する際（標準的なフィルタと、算出されるフィルタとを切り替える場合を含み）、切り替えマップのコストが多くかかる。たとえば、１つのマクロブロックについて１ビットを利用して、マクロブロックベースで２つのフィルタ間を切り替えようとした場合には、後で、ＣＩＦ（「Common Intermediate Format」）シーケンスについて、超過した３９６ビットのオーバヘッドを追加する必要があり、さらに、２つのフィルタセットを送信した場合にはそのビットコストもかかる。
【００１４】
整数位置フィルタおよびオフセットをもつフィルタを利用することにより得られる利益。最良の１／４ペルの位置が整数の位置である場合に、整数位置のフィルタを計算することで利得を出させようとする試みが既にいくつか行われている。さらに、より高い利得を出すためにオフセットを有するフィルタを利用する実験もいくつか行われている。これらの試みは両方とも、オーバヘッドが追加される。
【００１５】
前述したように、多くの技術およびそのバリエーションが示唆されてきたが、現在の方法による係数ビットカウントのオーバヘッドは、差動符号化した後であっても、高すぎる。さらに、既存の方法は、即座に（on the fly）係数セットを複数子繰り返して計算する必要があるために、計算が複雑である。さらには、現在のシステムの適合性を高めるための唯一の方法が、ＲＤＯを複数の切り替えフィルタに広範に利用する、というものであり、これによりさらにオーバヘッドおよび複雑性が増す。
【００１６】
アダプティブ動き補償フィルタリングに関するさらなる情報は、以下の文献に記載されており、これら全体をすべての目的で参照としてここに組み込む。  Ｔ．Ｗｅｄｉ氏による、「動き補償予測のためのアダプティブ補間フィルタ」、Ｐｒｏｃ．Ｉｎｃ．Ｃｏｎｆ  ｏｎ  Ｉｍａｇｅ  Ｐｒｏｃｅｓｓｉｎｇ（ＩＣＩＰ）２００２、５０９−５１１ページ、２００２年。  Ｖ．Ｖａｔｉｓ氏等による、「二次元の分割不可能なアダプティブＷｉｅｎｅｒ補間フィルタの係数の符号化」、Ｐｒｏｃ．ＳＰＩＥ  Ｖｉｓｕａｌ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ  ａｎｄ  Ｉｍａｇｅ  Ｐｒｏｃｅｓｓｉｎｇ（ＶＣＩＰ）２００５、２００５年７月
Ｖ．Ｖａｔｉｓ氏およびＪｏｅｒｎ  Ｏｓｔｅｒｍａｎｎ氏による、「Ｈ．２６４/ＡＶＣのための、ローカルにアダプティブな分割不可能な補間フィルタ」、Ｐｒｏｃ．Ｉｎｃ．Ｃｏｎｆ  ｏｎ  Ｉｍａｇｅ  Ｐｒｏｃｅｓｓｉｎｇ（ＩＣＩＰ）２００６、２００６年、１０月。  Ｓ．Ｗｉｔｔｍａｎｎ氏およびＴ．Ｗｅｄｉ氏による、「動画符号化における分割可能なアダプティブ補間フィルタ」、Ｐｒｏｃ．Ｉｎｃ．Ｃｏｎｆ  ｏｎ  Ｉｍａｇｅ  Ｐｒｏｃｅｓｓｉｎｇ（ＩＣＩＰ）２００８、２５００−２５０３ページ、２００８年。
【図面の簡単な説明】
【００１７】
【図１】固定動きフィルタリングを利用する動き補償予測を用いる先行技術のフレーム間符号器の概略ブロック図を示す。
【００１８】
【図２】先行技術の符号器に対応しており、符号器側のローカル復号ループに似た動きをする、先行技術の復号器を示す。
【００１９】
【図３】動き補償予測ブロックを計算するサブペルグリッドにさらに分割される画素グリッドとして構成される動画フレームの一部を示す。
【００２０】
【図４ａ】各サブペル位置の６ｘ６フィルタ行列に６／９タップをマッピングする様子を示す。
【図４ｂ】各サブペル位置の６ｘ６フィルタ行列に６／９タップをマッピングする様子を示す。
【図４ｃ】各サブペル位置の６ｘ６フィルタ行列に６／９タップをマッピングする様子を示す。
【図４ｄ】各サブペル位置の６ｘ６フィルタ行列に６／９タップをマッピングする様子を示す。
【図４ｅ】各サブペル位置の６ｘ６フィルタ行列に６／９タップをマッピングする様子を示す。
【図４ｆ】各サブペル位置の６ｘ６フィルタ行列に６／９タップをマッピングする様子を示す。
【図４ｇ】各サブペル位置の６ｘ６フィルタ行列に６／９タップをマッピングする様子を示す。
【図４ｈ】各サブペル位置の６ｘ６フィルタ行列に６／９タップをマッピングする様子を示す。
【図４ｉ】各サブペル位置の６ｘ６フィルタ行列に６／９タップをマッピングする様子を示す。
【図４ｊ】各サブペル位置の６ｘ６フィルタ行列に６／９タップをマッピングする様子を示す。
【図４ｋ】各サブペル位置の６ｘ６フィルタ行列に６／９タップをマッピングする様子を示す。
【図４ｌ】各サブペル位置の６ｘ６フィルタ行列に６／９タップをマッピングする様子を示す。
【図４ｍ】各サブペル位置の６ｘ６フィルタ行列に６／９タップをマッピングする様子を示す。
【図４ｎ】各サブペル位置の６ｘ６フィルタ行列に６／９タップをマッピングする様子を示す。
【図４ｏ】各サブペル位置の６ｘ６フィルタ行列に６／９タップをマッピングする様子を示す。
【００２１】
【図５】一般化されたアダプティブ動きフィルタリングを利用する動き補償予測器を利用する先行技術のフレーム間復号器のブロック図を示す。
【００２２】
【図６】一般化されたアダプティブ動きフィルタリングを利用する動き補償予測器を利用する先行技術のフレーム間復号器のブロック図を示す。
【００２３】
【図７ａ】画像を分割する分割モードを示す。
【図７ｂ】画像を分割する分割モードを示す。
【図７ｃ】画像を分割する分割モードを示す。
【図７ｄ】画像を分割する分割モードを示す。
【図７ｅ】画像を分割する分割モードを示す。
【図７ｆ】画像を分割する分割モードを示す。
【００２４】
【図８】一実施形態における、動きフィルタリングコードブック符号器を利用する動き補償予測器を利用するフレーム間符号器のブロック図を示す。
【００２５】
【図９】一実施形態における、動きフィルタリングコードブック復号器を利用する動き補償予測器を利用するフレーム間復号器のブロック図を示す。
【００２６】
【図１０】サブペルおよび整数ペル位置のための動きフィルタコードブック（１または複数）を生成する「オフライン」のルーチンを示す。
【００２７】
【図１１ａ】一実施形態における、動きフィルタセットをコードブックから検索する「オンライン」のルーチンを示す。
【図１１ｂ】一実施形態における、動きフィルタセットをコードブックから検索する「オンライン」のルーチンを示す。
【００２８】
【図１２】本明細書で様々な形態で示される、様々な動き補償コードブックフィルタ符号器および復号器における、ビットストリームシンタックスの一例を示す。
【００２９】
【図１３ａ】様々な実施形態における、動画ストリーム内のフレームまたは画像のシーケンスを示す。
【図１３ｂ】様々な実施形態における、動画ストリーム内のフレームまたは画像のシーケンスを示す。
【００３０】
【図１４】一実施形態における、動画符号化／復号化システムの一例を示す。
【００３１】
【図１５】一実施形態における、符号化デバイスの一例の様々なコンポーネントを示す。
【００３２】
【図１６】一実施形態における、復号化デバイスの一例の様々なコンポーネントを示す。
【００３３】
【図１７】一実施形態における、たとえば符号器デバイスで実行可能な、コードブック動き補償フィルタリング動画符号化ルーチンを示す。
【００３４】
【図１８】一実施形態において、１つのコードブックを得るためのサブルーチンを示す。
【００３５】
【図１９ａ】一実施形態における、コードブックから動き補償フィルタのサブセットを選択するサブルーチンを示す。
【図１９ｂ】一実施形態における、コードブックから動き補償フィルタのサブセットを選択するサブルーチンを示す。
【００３６】
【図２０】一実施形態における、１つの画像の一部の整数位置動き補償フィルタを決定するサブルーチンを示す。
【００３７】
【図２１】一実施形態における、たとえば復号化デバイスで実行可能な、コードブック動き補償フィルタリング動画復号化ルーチンを示す。
【発明を実施するための形態】
【００３８】
以下に示す詳細な説明は、主に、従来のコンピュータのコンポーネント（プロセッサ、プロセッサ用のメモリ記憶デバイス、接続された表示デバイスおよび入力デバイスを含む）を利用して行われる。さらに、これらプロセスおよび処理は、異種の分散コンピューティング環境で従来のコンピュータのコンポーネント（遠隔ファイルサーバ、コンピュータサーバ、およびメモリ記憶デバイスを含む）を利用することもある。プロセッサは、これらの従来の分散コンピューティングコンポーネントそれぞれに、通信ネットワーク経由でアクセスすることができる。
【００３９】
「一実施形態」「様々な実施形態」「一部の実施形態」といった言い回しは繰り返し利用される。これらは必ずしも同じ実施形態を表しているわけではない。「備える」「有する」「含む」といった用語は、そうではない文脈を除き、互いに同義語を意図している。
【００４０】
＜概略＞
フレーム間動画符号化のための動きフィルタリングシステムおよび方法の様々な実施形態を記載する。これら実施形態のいくつかでは、既存の解決法と比べて計算の複雑性を低減させることができるが、これは、符号化において、フィルタの係数を何度も繰り返して計算する代わりに、符号化フィルタの係数セットの予め計算されているコードブックから動きフィルタセットを探し出すことにより可能となる。
【００４１】
一部の実施形態では、完全なコードブックをより小さい「ベース」コードブックと、より大きな「仮想の」コードブックとに分割することで、検索の主要となる計算を、ベースコードブックに対してのみ行えばよいことにすることで、検索の複雑性をさらに低減させている。この実施形態では、（ａ）ベースのコードブック、および残りのコードブックを統合するアルゴリズムのみを格納すること、（ｂ）各フィルタセットに対して、動きサブペルフィルタリング位置に従って適切なタップ数をもつフィルタを格納すること、および、（ｃ）各係数に対して必要なビット精度のみを格納することによって、記憶量を低減させている。
【００４２】
さまざまな実施形態では、記載する動きフィルタコードブック技術を、画像、スライス群、ブロックマップ、統合されたブロックマップ、または、２つのツリー、４つのツリー、またはコンテンツに依存した領域等の適合された分割領域に対して利用することができる。この技術が、コンテンツに依存した分割領域にも適用可能であることによって、レート歪み最適化（「ＲＤＯ」）のみにより可能となる他の技術と比較して、さらに精度を増すことができる。サブペルフィルタリングにのみ、整数位置フィルタリングのみに特化しているものもあれば、両方に利用可能な実施形態がある。さらに、コンテンツの性質に適合させるように、コードブックは簡単に置き換えたり拡張したりすることができてよい。
【００４３】
フィルタコードブック設計の詳細およびコードブックの効率のよい検索法について記載する。記載されるコードブック設計および示唆されているコードブックのサイズのための方法により、動きフィルタリング性能を良好にして、幅広い範囲の動画コンテンツンの予測効率を高めることができる可能性もある。
【００４４】
様々な実施形態では、記載される技術は、選択するサブペルフィルタセットまたは整数ペルフィルタを特定するためにコードブックのインデックス１つがあれば十分なので、ビット効率がよい。多くの場合、インデックスの符号化は、実際の係数を符号化したり、異なる符号化をなされたフィルタ係数を複数送ったりすることよりも効率がよい。実際に送信されるインデックスの数は、分割領域の数に依存しており、これは、既存の方法では、同じ種類の分割領域が利用されることと対照的であり、ここで記載するコードブックに基づく技術のほうがよりビットレート効率がよい。
【００４５】
様々な実施形態で、Ｉ−、Ｐ−、Ｂ−からなる従来の画像構造を利用する通常の動画符号化技術を利用することができる。他の実施形態では、Ｉ−およびＰ−画像に代えて、またはこれらに加えて、他の画像（たとえば、階層状Ｂ画像、一方向Ｂ画像、またはその他のＢ画像）を利用してもよい。
【００４６】
これ以降、図面に示されている実施形態の詳細な説明に入る。実施形態は図面および関連する記載に基づいて説明されるが、ここに開示される実施形態に範囲を限定しようとしているわけではない。真の意図は、すべての代替例、変形例、および均等物を網羅しようというものである。別の実施形態では、その実施形態に範囲を制約せずに、さらなるデバイス、または図示されているデバイス同士の組み合わせを追加したり、組み合わせたりすることもできることを理解されたい。
【００４７】
図１は、固定動きフィルタリングを利用する動き補償予測を用いる先行技術のフレーム間符号器の概略ブロック図を示す。１以上の動画フレーム（ｖｄｆｒｍｓ）を、ブロックインデクサー１０１によって複数のブロック（ｂｌｋｓ）に分割する。ブロック（ｂｌｋｓ）は１つずつ、対応する予測信号ブロック（ｐｒｅｄ）とともに差動器（differencer）１３３に入力され、余り（ｒｅｓ）が、転送器１３５によって変換されて転送されることで、量子化器１３８に係数ブロック（ｔｃｏｆ）が送られ、量子化された係数（ｔｃｏｆｑ）がエントロピー符号器１１８および逆量子化器１４０両方に送られる。逆量子化器１４０は、量子化を解消された係数のブロック（ｔｃｏｆ'）を逆変換器１４３に送る。加算器１４５では、動き補償ループからの予測ブロック（ｐｒｅｄ）が、量子化を解消された余りのブロック（ｒｅｓ'）で、逆変換器１４３の出力に追加される。加算器１４５では、動き補償ループからの予測ブロック（ｐｒｅｄ）が、量子化を解消された余りのブロック（ｒｅｓ'）で、逆変換器７４３の出力に追加される。加算器７４５は、ローカルに符号化さればブロック（ｒｅｃ）を出力して、これがフレームアセンブラおよびデブロックフィルタリングプロセッサ１４８に送られ、ここでブロックらしさをなくさせる（reduces the blockiness）。フレームアセンブラおよびデブロックフィルタリングプロセッサ１４８のブロック（ｒｅｃｄ）は、動き推定器１２８および動き補償予測器１３０が参照フレームとして利用するフレームを形成する。
【００４８】
動き推定器１２８は、元のフレームのブロック（ｂｌｋｓ）間の動きベクトル（ｍｖ）を、再構成されたフレーム（ｒｅｃｄ）と比較して計算する。動きベクトルの計算プロセスには、１つのブロックについて整数ペルベクトルを計算して、その後、サブペルベクトル（ｓｖ）（たとえば１／４ペルの解像度まで）を、サブペル補間器１２９を利用して計算することが含まれている。通常は、サブペル補間器１２９は、動き推定器１２８内に含まれているが、図示を明瞭にするために、ここでは別個に示して、説明している。動き推定器１２８は、最適のペア、つまり最良の動きベクトル（ｍｖ）を探すので、動き補償予測器１３０は、動きベクトル（ｍｖ）を利用して、動き補償予測ブロック（ｐｒｅｄ）を生成することができる。動き補償器１３０はさらに、サブペル補間器１２９に類似したサブペル（たとえば１／４の解像度まで）補間器１３１を利用する。サブペル補間器１２９および１３１が利用するフィルタセット（ｆｍｆ）を予め特定して固定する。エントロピー符号器１１８は、量子化された変換係数（不図示）、差動動きベクトル（ｄｍｖ）、およびオーバヘッドデータ（不図示）を符号化して、圧縮ビットストリーム１２８を生成する。
【００４９】
図２は、先行技術の符号器１００に対応しており、符号器１００側のローカル符号ループ１５５に似た動きをする、先行技術の復号器２００を示す。具体的には、復号する圧縮ビットストリーム２０１が、エントロピー復号器２０３に入力されて、ここで、量子化された係数ブロック（ｔｃｏｆｑ）、差動動きベクトル（ｄｍｖ）、および、オーバヘッドデータ(不図示)が復号化される。量子化された量子化ブロック（ｔｃｏｆｑ）は、次に、逆量子化器２０３により逆量子化されて、量子化を解消された係数（ｔｃｏｆ'）が生じ、次にこれが、逆変換器２１５によって逆変換されて、復号化された余りのブロック（ｒｅｓ'）が生じる。加算器２２３では、量子化を解消された係数のブロック（ｔｃｏｆ'）が、対応する動きベクトル（ｍｖ）を利用して得られた動き補償予測ブロック（ｐｒｅｄ）に送られて、動き補償予測器２３０で、サブペルベクトル（ｓｖ）を利用して（たとえば１／４ペルまでの解像度、サブペル補間器２２９を利用して計算される）得られる。こうして得られる復号化された動画（ｒｅｃ）は、フレームアセンブラおよびデブロックフィルタ２２５でデブロックされて、符号器１００と同様に、デブロックされた動画（ｒｅｃｄ）が、参照フレームとして利用される。復号器２００の動き補償予測器２３０は、符号器１００の動き補償予測器１３０同様の働きをするので、たとえば動き補償予測器２３０は、符号器１００が利用するものと同じ固定動きフィルタ（ｆｍｆ）を利用する。
【００５０】
図３は、動き補償予測ブロックを計算するサブペルグリッドにさらに分割される画素グリッドとして構成される動画フレームの一部３００を示しており、ここで、動き補償予測ブロックが計算される。整数画素位置を、Ａ１−Ａ６、Ｂ１−Ｂ６、Ｃ１−Ｃ６、Ｄ１−Ｄ６、Ｅ１−Ｅ６、およびＦ１−Ｆ６で示す。Ｃ３−Ｃ４、およびＤ３−Ｄ４の１／４ペルの位置を、位置{a, b, c, d, e,f, g, h, k, 1, m, n, o}で示し、各ブロックが、１／４ペルの位置で補償されるようにする。図３は、さらに、位置ａａ、ｂｂ、ｃｃ、ｄｄ、ｅｅ、ｆｆ、ｇｇ、ｈｈ、ｉｉ、およびｊｊという、１／２ペルの位置もいくつか示している。
【００５１】
サブペル位置{a, b, c, d, e,f, g, h, k, 1, m, n, o}のフィルタセットの計算は、６タップまたは９タップのフィルタを利用して行われる。フィルタ係数は、６ｘ６の行列にマッピングされ、これは、６ｘ６の近接する周囲のペル（Ａ１−Ｆ６）からサブペル値を計算するために利用される。
【００５２】
図４ａ−図４ｏは、６ｘ６フィルタ行列の各サブペル位置の６／９タップをマッピングする様子を示す。
【００５３】
図４ａは、サブペル位置｛ａ｝でフィルタリングされた補間ブロックを直接計算するために利用されるフィルタ係数および画素を示しており、この位置で、６個のフィルタ係数が必要である。
【００５４】
図４ｂは、サブペル位置｛ｂ｝でフィルタリングされた補間ブロックを直接計算するために利用されるフィルタ係数および画素を示しており、この位置では、３個のフィルタ係数のみが必要である。
【００５５】
図４ｃは、サブペル位置｛ｃ｝でフィルタリングされた補間ブロックを直接計算するために利用されるフィルタ係数および画素を示しており、この位置で、６個のフィルタ係数が必要である。
【００５６】
図４ｄは、サブペル位置｛ｄ｝でフィルタリングされた補間ブロックを直接計算するために利用されるフィルタ係数および画素を示しており、この位置で、６個のフィルタ係数が必要である。
【００５７】
図４ｅは、サブペル位置｛ｅ｝でフィルタリングされた補間ブロックを直接計算するために利用されるフィルタ係数および画素を示しており、この位置で、６個のフィルタ係数が必要である。
【００５８】
図４ｆは、サブペル位置｛ｆ｝でフィルタリングされた補間ブロックを直接計算するために利用されるフィルタ係数および画素を示しており、この位置で、９個のフィルタ係数が必要である。
【００５９】
図４ｇは、サブペル位置｛ｇ｝でフィルタリングされた補間ブロックを直接計算するために利用されるフィルタ係数および画素を示しており、この位置で、６個のフィルタ係数が必要である。
【００６０】
図４ｈは、サブペル位置｛ｈ｝でフィルタリングされた補間ブロックを直接計算するために利用されるフィルタ係数および画素を示しており、この位置で、３個のフィルタ係数が必要である。
【００６１】
図４ｉは、サブペル位置｛ｉ｝でフィルタリングされた補間ブロックを直接計算するために利用されるフィルタ係数および画素を示しており、この位置で、９個のフィルタ係数が必要である。
【００６２】
図４ｊは、サブペル位置｛ｊ｝でフィルタリングされた補間ブロックを直接計算するために利用されるフィルタ係数および画素を示しており、この位置で、９個のフィルタ係数が必要である。
【００６３】
図４ｋは、サブペル位置｛ｋ｝でフィルタリングされた補間ブロックを直接計算するために利用されるフィルタ係数および画素を示しており、この位置で、９個のフィルタ係数が必要である。
【００６４】
図４ｌは、サブペル位置｛ｌ｝でフィルタリングされた補間ブロックを直接計算するために利用されるフィルタ係数および画素を示しており、この位置で、６個のフィルタ係数が必要である。
【００６５】
図４ｍは、サブペル位置｛ｍ｝でフィルタリングされた補間ブロックを直接計算するために利用されるフィルタ係数および画素を示しており、この位置で、６個のフィルタ係数が必要である。
【００６６】
図４ｎは、サブペル位置｛ｎ｝でフィルタリングされた補間ブロックを直接計算するために利用されるフィルタ係数および画素を示しており、この位置で、９個のフィルタ係数が必要である。
【００６７】
図４ｏは、サブペル位置｛ｏ｝でフィルタリングされた補間ブロックを直接計算するために利用されるフィルタ係数および画素を示しており、この位置で、６個のフィルタ係数が必要である。
【００６８】
＜アダプティブＷｉｅｎｅｒフィルタリング＞
図５を詳しく説明する前に、ｗｉｅｎｅｒフィルタリング法を利用するアダプティブフィルタ設計の基になる、最適なフィルタリング理論を簡単に説明する。
【００６９】
サブペル位置それぞれにおいて、相互相関付、及び自動相関付行列を累積して、ここから最適なｗｉｅｎｅｒフィルタセットを、Ｗｉｅｎｅｒ  Ｈｏｐｆ等式を以下のようにして解くことで計算する。
【００７０】
ｘ（ｎ）を入力信号として、ｙ（ｎ）を出力として、ｈ（ｎ）をフィルタ係数を表すとする。
【数１】
0005648183.tif 000002
【００７１】
最少値を見つけるために、微分をとって、以下のようにゼロに設定する。
【数２】
0005648183.tif 000003
【００７２】
ｈについて解くと、Ｗｉｅｎｅｒ  Ｈｏｐｆ等式は以下のようになる。
【数３】
0005648183.tif 000004
【００７３】
Ｗｉｅｎｅｒ  Ｈｏｐｆ等式は、平均平方誤差の最適なフィルタ係数を決定して、結果生じるフィルタが「ｗｉｅｎｅｒ」フィルタと称される。
【００７４】
上述した等式において、ｈはフィルタ係数のベクトルであり（通常は６から９個の係数である）、Ｒｘｘが、自動相関付行列であり（参照フレームのブロックデータのための）、Ｒｄｘが、相互相関付行列／行ベクトル（ソースフレームと参照フレームのブロックデータとの間の）である。行列は、各サブペル位置について別個に累積され、ｈは、各サブペル位置について上述した等式を解くことで計算することができるので、１６個のフィルタからなる、適合したフィルタセットが得られる（１／４ペル位置について）。
【００７５】
図５は、一般化されたアダプティブ動きフィルタリングを利用する動き補償予測器を利用する先行技術のフレーム間符号器５００のブロック図を示す。ブロックインデクサー５０１、転送変換器５３５、量子化器５３８、逆量子化器５４０、逆変換器５４３、フレームアセンブラデブロックフィルタリングプロセッサ５４８、および、エントロピー符号器５１８は、図１で示し上述した、対応する符号器１００同様に動作するので、この説明については繰り返さない。同様に、動き推定器５２８および動き補償器５３０は、利用するフィルタセット以外については、上述した動き推定器１２８および動き補償器１３０同様に動作する。したがって、ここでは動きフィルタリングに焦点をしぼり、このサブシステムのみを詳述する。
【００７６】
固定フィルタセットを利用するＨ．２６４とは異なり、符号器５００は、データからフィルタセットを計算する。この計算は、サブペル（ｗｉｅｎｅｒ）繰り返しフィルタセットコンピュータ５５８で、前述したｗｉｅｎｅｒ  ｈｏｐｆ等式を利用して行われる。プロセスは、各ブロックの差の合計（「ＳＡＤ」）位置の最少絶対値を計算するが、これは、最も良く整合するサブペル整合位置を反映している。次の繰り返しでは、これらサブペル位置を利用して、新たなフィルタセットを計算して、これは、利用されると、更新されたサブペル位置が提供される。プロセスは繰り返されるので、プロセスが収束するまでに、いくつかの繰り返し（４−２０）が必要である。プロセスは、各繰り返しにおける等式が複雑なことから、計算集約的である。場合によっては、繰り返し数を制限して、パフォーマンスの複雑さを相殺することもできる。計算されたアダプティブ動きフィルタセット（ａｍｆ）は、動き補償予測器５３０のサブペル補間器５３１に提供される。第１のフィルタセット（ａｍｆ）は、さらに符号化されて、ビットストリーム経由で復号器に送られる必要がある。フィルタセット（ａｍｆ）は９９個ものフィルタ係数を利用することができるので、フィルタセットを効率的に符号化することが重要である。通常の技術は、最上位の位置にフィルタセットを送信することから、係数（ｄｍｆ）（差動器５６０が生成する）の差動符号化、最後に送信されてからあまり変化しなかった係数の抑制まで、様々である。フィルタ係数を効率的に符号化できると想定して、複数のフィルタセットを１つの画像について送信して、２以上のフィルタセットからより効率よいほうを選択することができ、この動作は、空間分割器および分割符号器５０５により行われ、これにより分割マップ（ｐｔｍａｐ）が生成される。レート歪み最適化器５０８は、複数のフィルタを利用するため関連オーバヘッドがある場合であっても、利得があるようにされることが多い。
【００７７】
図６は、一般化されたアダプティブ動きフィルタリングを利用する動き補償予測器を利用する先行技術のフレーム間復号器６００のブロック図を示す。エントロピー復号器６０３、逆変換器６１５、逆量子化器６１３、および、フレームアセンブラおよびデブロックフィルタリングプロセッサ６２５は、図２で示し上述した、対応する復号器２００のコンポーネント同様に動作するので、この説明については繰り返さない。同様に、動き補償予測器６３０は、利用するフィルタセット以外については、上述した動き補償器２３０同様に動作する。したがって、ここでは動きフィルタリングに焦点をしぼり、このサブシステムのみを詳述する。
【００７８】
エントロピー復号器６０３は、予測を表すフィルタセットが加算器６３１に追加される動きフィルタの差動値を復号するコードワード（ｄｍｆ）を復号する。このフィルタセット（ａｍｆ）は、動き補償予測器６３０のサブペル補間器６２９に提供される。さらに、複数のフィルタを利用する場合には、分割マップ（ｐｔｍａｐ）を復号して、フィルタ（ａｍｆ）が画像の正しい部分に利用されるようにする。
【００７９】
図７ａ−図７ｆは、画像を分割する分割モードを示す。たとえば図７ａは、フィルタコードが画像ごとにのみ切り替えられる画像ベースの分割を表す。図７ｂは、スライスまたはスライス群ベースの分割を示し、第１のフィルタセットをスライス群「Ａ」に適用して、第２のフィルタセットをスライス群「Ｂ」に適用する。図７ｃは、ブロックタイプ「Ａ」に利用するフィルタ、および、ブロックタイプ「Ｂ」に利用するフィルタを特定するブロックマップを表している。図７ｄは、１つの画像をタイルに分割して、さらにタイルの分割部分を、２つのツリーの分割に分割して、レート歪み最適化（「ＲＤＯ」）に基づく２つのツリーの様々な枝が「Ａ」または「Ｂ」と称されるようにして、これは、それぞれが、第１または第２のフィルタセットを利用することを示している。図７ｅは、１つの画像をタイルに分割して、さらに１つのタイルを、２種類の４つのツリーの分割部分（「Ａ」または「Ｂ」と称する）に分割して、これらそれぞれが、第１または第２のフィルタセットを利用することができる。最後に、図７ｆは、スライスの統合、ブロックの統合、２つのツリーの統合、４つのツリーの分割部分の統合、または純粋に空間分割によって生じる領域を示している。
【００８０】
図８は、一実施形態における、動きフィルタリングコードブック符号器を利用する動き補償予測器を利用するフレーム間符号器８００のブロック図を示す。ブロックインデクサー８０１、転送変換器８３５、量子化器８３８、逆量子化器８４０、逆変換器８４３、フレームアセンブラデブロックフィルタリングプロセッサ８４８、および、エントロピー符号器８１８は、図１で示し上述した、対応する符号器１００同様に動作するので、この説明については繰り返さない。同様に、動き推定器８２８は、利用するフィルタセット以外については、上述した動き予測器１２８同様に動作する。したがって、ここでは動きフィルタリングに焦点をしぼり、このサブシステムのみを詳述する。
【００８１】
既存のアダプティブ動きフィルタリング符号器に比べると、コードブックベースの動きフィルタリング符号器８００は、動きフィルタを明示的に計算する代わりに、既存のコードブックからフィルタセットを選択する。一実施形態では、１つがサブペルフィルタセット８６０を格納し、１つが整数位置フィルタ８６３を格納する、という、２つの種類のコードブックを利用する。ＭＣフィルタセットコードブック検索プロセッサ８５８は、サブペルおよび整数位置コードブックインデックス（ｍｃｆｓｉ）および（ｍｃｆｉｉ）をコードブックそれぞれから効率的に検索するが、これらはそれぞれサブペルフィルタセット（ｍｃｆｓ）および整数位置フィルタ（ｍｃｆｉ）と称される。
【００８２】
様々な実施形態では、サブペルフィルタセット（ｍｃｆｓ）および整数位置フィルタ（ｍｃｆｉ）は、１つの画像（１度だけ）または空間分割領域（１つの画像について複数回）送ることができる。様々な実施形態では、スライス、可変ブロックサイズ、ブロック、２つのツリー、４つのツリー、領域、タイル等の、任意の種類の空間分割を利用することができる（図７ａから図７ｆ参照）。この分割は、空間分割器および分割符号器８０５によって行われる。送信すべき分割数等の分割の詳細は、ビットレート／歪みトレードオフ分析器８０８およびシーンコンテンツ分析器８０３によるレート歪み分析に基づいて決定される。最も良く整合するサブペルフィルタセットおよび整数ペルフィルタセットが、ビットストリームにて復号器に送られる。サブペルフィルタセット（ｍｃｆｓ）および整数位置フィルタ（ｍｃｆｉ）は、ＭＣフィルタリングプロセッサ８６５に提供されて、動き推定器／動き補償予測器８２８で動き補償予測が生成される。一部の実施形態では、プロセスは、検索およびインデックスごとのフィルタ／フィルタセットを表すビットコスト面で効率がよいものであってよい。
【００８３】
図９は、一実施形態における、動きフィルタリングコードブック復号器を利用する動き補償予測器を利用するフレーム間復号器９００のブロック図を示す。エントロピー復号器９０３、逆変換器９１５、逆量子化器９１３、並びにフレームアセンブラおよびデブロックフィルタリングプロセッサ９２５は、図２に示し、上述した復号器２００の対応するコンポーネント同様に動作するので、この説明については繰り返さない。同様に、動き補償予測器９３０は、利用するフィルタセット以外については、上述した動き補償予測器２３０同様に動作する。したがって、ここでは動きフィルタリングに焦点をしぼり、このサブシステムのみを詳述する。
【００８４】
エントロピー復号器９０３は、ビットストリーム９０１をエントロピー復号して、コードブックサブペル動きフィルタインデックス（ｍｃｆｓｉ）および整数位置動きフィルタインデックス（ｍｃｆｉｉ）の両方または片方を得る。これらインデックス（ｍｃｆｓｉ）および（ｍｃｆｉｉ）は、所望のサブペルフィルタセット（ｍｃｆｓ）および整数位置フィルタ（ｍｃｆｉ）に、サブペルコードブック９３３および整数位置コードブック９３５の両方または他方からアクセスするために利用される。結果得られるサブペルフィルタセットｍｃｆｓおよび整数フィルタｍｃｆｉは、ＭＣフィルタリングプロセッサ９２９に送られ、ここで、サブペル補間および整数ペルフィルタリングの両方または片方が行われ、動き補償予測（ｐｒｅｄ）が行われる。一部の実施形態では、フラグ（ｆｉｌｔ＿ｓｅｎｔ）および（ｉｎｔｆｉｌｔ＿ｓｅｎｔ）が、さらにエントロピー復号器９０３により復号されてよく、これは、ビットストリーム９０１が、サブペル動きフィルタインデックス（ｍｃｆｓｉ）および整数位置動きフィルタインデックス（ｍｃｆｉ）をそれぞれ含むか否かを示す。
【００８５】
表１は、サブペル「ベース」コードブックの２つのサンプルフィルタセット（ｉｄ＝０およびｉｄ＝１）を示す。一実施形態では、サブペル「ベース」コードブックが、１６個の「ベース」サブペルフィルタセット（それぞれが、１／４ペルのフィルタリングの場合に、１５または１６サブペル位置のフィルタを含む）を含んでいてよい。１６個の「ベース」サブペルフィルタセットの個々のサブペル位置フィルタが、それぞれ別の予め定められている組み合わせで利用されて、「仮想」コードブックが生成されてよい。一実施形態では、「仮想」コードブックが、２５６個のサブペルフィルタセットを含んでよい。他の実施形態では、「ベース」および「仮想」コードブックが含むフィルタセット数はこれより多くても少なくともよい。
【表１】
0005648183.tif 000005
【００８６】
表１に示されているフィルタセット例では、フィルタセットＩＤ＝０が、ピントのあったシーンに対応しており、フィルタセットＩＤ＝１が、ピントのぼけたシーンに対応している。
【００８７】
一部の実施形態では、表１に（一部）示されているようなサブペルコードブックが、それぞれが複数のサブペル位置に対応している複数のサブペル位置群に分類される複数の動き補償フィルタを含むものとして均等に特徴付けられており、ここで複数のサブペル位置群のそれぞれは、１つの画像の複数のブロックを複数のサブペル位置のうち対応する位置で補間するのに適した複数の動き補償フィルタを含んでいる。たとえば、表１に示すコードブックはサブペル位置｛ａ―０｝に対応する、１５または１６群の動き補償フィルタを含むものとして特徴付けられてよい。たとえば以下のようになる。
サブペル位置｛ａ｝群：｛ａ０，ａ１，ａ２，...ａ１５｝
サブペル位置｛ｂ｝群：｛ｂ０，ｂ１，ｂ２，...ｂ１５｝
・・
サブペル位置｛ｃ｝群：｛ｃ０，ｃ１，ｃ２，...ｃ１５｝
【００８８】
コードブックはさらに、いくつかの（たとえば２５６個の）予め定められている動き補償フィルタのセットを含むものとして特徴づけられてよく、各サブペル位置群の１つが、以下のように示されてよい。
サブセットＩＤ＝０：｛ａ０，ｂ０，ｃ０，ｄ０，ｅ０，ｆ０，ｇ０，ｈ０，ｉ０，ｊ０，ｋ０，ｌ０，ｍ０，ｎ０，ｏ０｝
サブセットＩＤ＝１：｛ａ１，ｂ１，ｃ１，ｄ１，ｅ１，ｆ１，ｇ１，ｈ１，ｉ１，ｊ１，ｋ１，ｌ１，ｍ１，ｎ１，ｏ１｝
・・
サブセットＩＤ＝１５：｛ａ１５，ｂ１５，ｃ１５，ｄ１５，ｅ１５，ｆ１５，ｇ１５，ｈ１５，ｉ１５，ｊ１５，ｋ１５，ｌ１５，ｍ１５，ｎ１５，ｏ１５｝
サブセットＩＤ＝１６：｛ａ１６，ｂ１６，ｃ１６，ｄ１６，ｅ１６，ｆ１６，ｇ１６，ｈ１６，ｉ１６，ｊ１６，ｋ１６，ｌ１６，ｍ１６，ｎ１６，ｏ１６｝
・・
サブセットＩＤ＝２５５：｛ａ２５５，ｂ２５５，ｃ２５５，ｄ２５５，ｅ２５５，ｆ２５５，ｇ２５５，ｈ２５５，ｉ２５５，ｊ２５５，ｋ２５５，ｌ２５５，ｍ２５５，ｎ２５５，ｏ２５５｝
【００８９】
一部の実施形態では、コードブックはさらに、一群の整数位置フィルタ（たとえば整数位置群｛０｝：｛００，０１，０２，...０１５｝）を含んでよい。この実施形態では、予め定められている動き補償フィルタのサブセットが、さらに、整数位置フィルタ（たとえばサブセットＩＤ＝０：｛００，ａ０，ｂ０，ｃ０，ｄ０，ｅ０，ｆ０，ｇ０，ｈ０，ｉ０，ｊ０，ｋ０，ｌ０，ｍ０，ｎ０，ｏ０｝、サブセットＩＤ＝１：｛０１，ａ１，ｂ１，ｃ１，ｄ１，ｅ１，ｆ１，ｇ１，ｈ１，ｉ１，ｊ１，ｋ１，ｌ１，ｍ１，ｎ１，ｏ１｝等）を含む。
【００９０】
一部の実施形態では、複数の整数位置のフィルタが１つの整数位置のコードブックに含まれていてよい。表２は、整数位置コードブックの２つのサンプル整数位置フィルタ（ＩＤ＝０およびＩＤ＝１）を示している。一実施形態では、整数位置コードブックが、４８個の整数位置フィルタを含んでよい。他の実施形態では、整数位置コードブックが含むフィルタの数はこれより多くても少なくてもよい。一部の実施形態では、サブペルフィルタコードブックのサブペルフィルタセット内に、整数位置コードブックの代わりに、またはこれらに加えて、整数位置のフィルタが含まれてもよい。
【表２】
0005648183.tif 000006
【００９１】
図１０は、サブペルおよび整数ペル位置のための動きフィルタコードブック（１または複数）を生成する「オフライン」のルーチン１０００を示す。ブロック１００５で、ルーチン１０００は、１以上のサンプル動画シーケンスを含む１つのテストセットを取得する。一部の実施形態では、動画シーケンスは、異なる動きレベルの組み合わせおよび様々なほぼ均等のテクスチャを有するように選択される。一実施形態では、テストシーケンスを、テクスチャのような領域を含むように選択するが、このためには通常、より正確なフィルタリングを行い、所望の符号利得を得る必要がある。一実施形態では、複数の標準ＣＩＦシーケンスをサンプル動画シーケンスとして利用することができる。
【００９２】
開始ループブロック１０１０から始まり、ルーチン１０００は、テストセットの各動画シーケンスを処理する。ループブロック１０１５から始まり、ルーチン１０００は、現在の動画シーケンスの１以上の個々の画像またはフレームを処理する。ブロック１０２０では、ルーチン１０００が、Ｗｉｅｎｅｒフィルタベースのアダプティブ動きフィルタリングを利用して、現在の画像またはフレームの完全に適合されたフィルタセットを計算する。一部の実施形態では、より良いフィルタセットを得るために、２以上繰り返してよく、これは、フィルタ係数の計算およびサブペル位置の更新を、２回以上繰り返し実行してよいことを意味する（第１のタイムサブペル照合（collations）を、標準的なフィルタの結果に設定して、後の各繰り返しにおいて、位置を前に計算したフィルタセットで得られるものに設定する）。１／４ペルの実施形態であれば、１つのフィルタが各１／４ペル位置について計算されるので、生成されるフィルタセットが、１６個のフィルタからなる。一実施形態では、生成されたフィルタセットのそれぞれのフィルタが、１／４ペル位置に応じて、６または９個のタップを有する。
【００９３】
ループブロック１０２５を終了させるにあたり、ルーチン１０００は、ブロック１０１５に繰り返し戻り、現在の動画シーケンスの別の画像またはフレームそれぞれを処理する（もしあれば）。ブロック１０３０では、ルーチン１０００が、生成されたフィルタセットから現在の動画シーケンスを表す代表的なフィルタセットを選択する。一実施形態では、代表的なフィルタセットを選択することには、動画シーケンスの各画像またはフレームに、計算されたフィルタセット全てを割り当てて、高い（または最高の）符号利得の（低いＳＡＤまたは最低のＳＡＤを有する）フィルタセットを選択することを含んでよい。一部の実施形態では、代表的なセットは、現在の動画シーケンスの画像またはフレームのサブセットに従って選択されてよい（たとえば最初のＮ個のフレーム）。
【００９４】
ループブロック１０３５を終了させるにあたり、ルーチン１０００は、ブロック１０１０まで繰り返し戻り、テストセットの次の動画シーケンスを処理する。一実施形態では、全ての動画シーケンスが処理されると、１００以上の代表的なフィルタセットが生成、選択されてよい。ブロック１０３８では、ルーチン１０００が、随意で、代表的なフィルタセットの集合体を改良する。たとえば一実施形態では、ランダムウォークアルゴリズム（または類似した最適化アルゴリズム）を利用して、動画シーケンスの組み合わせを、無作為に一部または全てテストして、数時間または数日間において改良されたフィルタセットの集合体全体の符号利得をさらに向上させてもよい。
【００９５】
ブロック１０４０で、ルーチン１０００は、随意に改良されたフィルタセットの集合体のなかの高い、または最高の符号利得を有する「ベース」サブペルフィルタセット群を選択する。ブロック１０４５では、ルーチン１０００が、サブペルコードブックに選択された「ベース」のフィルタセット群を格納する。
【００９６】
ブロック１０５０で、ルーチン１０００は、選択された「ベース」フィルタセット群の個々のフィルタから「仮想」コードブックを得る。一実施形態では、ランダムウォークアルゴリズム（または類似した最低化アルゴリズム）を利用して、選択したフィルタセットの「ベース」の群から個々のフィルタの間の差安座マナ組み合わせをテストしてよい。一実施形態では、フィルタの２５６個の異なる組み合わせを、選択した「ベース」フィルタセット群から導き出すことができる。導き出された組み合わせは、選択された「ベース」フィルタセット群のフィルタから導き出すことができる「仮想」コードブックを作成するために格納される。
【００９７】
ブロック１０５５で、整数位置フィルタ群を、随意に改良されたフィルタセットの集合体から選択する。一実施形態では、整数位置フィルタを、高い符号利得を持ち、互いに異なるように選択することができる。一実施形態では、４８個の整数位置フィルタをその群について選択してよい。ブロック１０６０で、選択された整数位置フィルタ群を、整数位置コードブックに格納する。サブペルコードブックおよび整数位置コードブックを生成して格納すると、ブロック１０９９でルーチン１０００が終了する。
【００９８】
図１１ａおよび図１１ｂは、一実施形態における、動きフィルタセットをコードブックから検索する「オンライン」のルーチン１１００を示す。ブロック１１０３で、ルーチン１１００が、動画シーケンスのうちの１つの画像またはフレームを取得する。ループブロック１１０５を開始する際に、ルーチン１１００が画像の各画像コンテンツブロックを処理する。
【００９９】
ブロック１１０８で、ルーチン１１００は、現在の画像コンテンツブロックの整数位置動き推定値を決定する。一実施形態では、整数位置の動きベクトルは、一定の動き検索サイズを利用して完全な、または低減された検索によって計算される。ブロック１１１０で、ルーチン１１００は、決定された整数位置動き推定値について符号利得を計算する（たとえばＳＡＤを決定する）。
【０１００】
ブロック１１１３で、ルーチン１１００は、デフォルトであるフィルタセット（たとえばＨ．２６４固定フィルタセット、その他、参照として利用されるその他のフィルタセット）を利用してサブペル動き推定値を決定する。補間されたサブペル位置を検索して、最高の符号利得（最低のＳＡＤ）を有するものを見つける。言い換えると、デフォルトのフィルタセットを画像のコンテンツブロックに適用して、最少のＳＡＤを生じる位置を選択する。フィルタセットが対応する位置を、推定されたサブペル動きベクトルとして利用する。ブロック１１１５で、ルーチン１１００は、（少なくとも一時的に）デフォルトのフィルタの符号利得全体をセーブする。
【０１０１】
ブロック１１１６で、ルーチン１１００は、たとえば１６フィルタセットを含む「ベース」のサブペルコードブックをロードして、各フィルタセットは、たとえば１５のサブペル位置フィルタを含んでいる（１つが各サブペル位置にある）。ブロック１１１８を始めるにあたり、ルーチン１１００は各フィルタセットを処理する。ブロック１１２０で、ルーチン１１００は、現在のフィルタセットの符号利得を計算する。オフセットとして整数位置動き推定値を利用して、ルーチン１１００は、現在のフィルタセットの対応するサブペル位置フィルタを利用して、各サブペル位置のＳＡＤを決定する。ループブロック１１２３を終了するにあたり、ルーチン１１００は、ブロック１１１８に繰り返し戻り、次のフィルタセット（もしあれば）を処理する。
【０１０２】
ブロック１１２３で、ルーチン１１００は、Ｎ（たとえば２５６）個の「仮想」フィルタセットの符号利得を、各フィルタセットの個々のサブペル位置フィルタについて計算された符号利得を利用してアセンブルする。一実施形態では、「仮想」フィルタセットが、「ベース」のサブペルコードブックのフィルタセットのサブペル位置フィルタの様々な組み合わせを含んでいる。したがって各「仮想」フィルタセットの符号利得を、既に計算した個々のサブペル位置フィルタ符号利得を利用してアセンブルすることができる（ブロック１１２０）。
【０１０３】
ブロック１１２８で、ルーチン１１００は、繰り返しブロック１１０５に戻り、画像の画像コンテンツの次のブロック（もしあれば）を処理する。
【０１０４】
ブロック１１３３で、ルーチン１１００は、空間分割モードを設定する。動作モードに基づいて、フレームベース、スライスベース、ブロックベース、セグメントベース、その他の画像の分割部分を利用してよい。ループブロック１１３５を開始するにあたり、ルーチン１１００は、画像の各空間分割部分を処理する。ブロック１１３８で、ルーチン１１００は、Ｎ個の「仮想」サブペルフィルタセットから、現在の分割領域について高い符号利得を有するサブペルフィルタセットを選択する。一実施形態では、最少のＳＡＤ／最大の符号利得を有するという意味で最良のフィルタセットを選択する。一部の実施形態では、最低処理モードで、フレームベースの分割部分が利用される。次の２つのモードはスライスを利用する。最低のスライスモードは、１つのフレームを４つの均等な水平ストリップ／スライスに分割する（フレームサイズによっては、最後のスライスのサイズが小さい場合もある）。他方で、より高いスライスモードでは、１２ｘ４、１６ｘ１６のブロックスライスが利用される（ここでも、フレームサイズのせいで、一番下のスライスおよび右端のスライスが小さい場合がある）。残りのモードで、ブロックをブロック群に統合して、同じフィルタセットに低いＳＡＤを生成させることで得られたセグメント／領域を利用する。ある意味でこれら領域が動きの分割領域に対応している。このプロセスで利用される２つの閾値があり、各モードが、小さいまたは大きいセグメント／領域を生成することができる様々な閾値の選択肢を有している。フレームはまずブロック／スーパタイルに分割される。第１の閾値は、６４ｘ６４のスーパタイルを３２ｘ３２のタイルに分割する方法を決定するために利用され、第２の閾値は、タイルブロックをスーパタイルを超えてで統合するときを判断するために利用される。いずれの場合においても、統合または分割の決断は、２つのブロック／オブジェクトのＳＡＤ差が一定の閾値を下回る、または上回る場合に行われる。スーパタイルのタイルへの分割は、２ｘ２おパターンで符号化される。動作の異なるモードは、基本的な３つ、または拡張された７つのパターンをサポートしている。基本的な３つのパターンは、確固とした（solid）、水平方向の分割および垂直方向の分割であり、一方で、拡張セットも、４つの３つの方法の分割を含む。次いで、次の処理段階は、十分小さいＳＡＤ（第２の閾値に基づいて）を生じる共通のフィルタセットがある場合に、スーパタイルの近隣との境目に触れるタイルを統合する。統合ビットは、パターン可変符号コード（「ＶＬＣ」）に加えてビットストリームに符号化され、復号器は、完全に同じ空間セグメントを復元することができる。
【０１０５】
現在の分割領域について高い符号利得を有するサブペルフィルタセットが選択されると、ブロック１１４０で、ルーチン１１００が、ビットストリームに対して、選択されたサブペルフィルタセットに対応するインデックスその他のコード（たとえばｓｕｂｐｅｌｆｉｌｔ＿ｃｏｄｅ）を符号化する。様々な実施形態では、固定されたＶＬＣ表、アダプティブハフマンコード表等を利用して、インデックスその他のコードを符号化することができる。アダプティブハフマンを利用する場合には、一実施形態では、コードは、前のフレームのインデックスの頻度に基づいて計算されるが、これは、時間的な冗長が存在する実験および同じフィルタセットが近隣のフレームにみられる傾向のある実験でこのように観察されたからである。
【０１０６】
ブロック１１４１で、ルーチン１１００は、ある数の（たとえば４８）整数位置フィルタを含む整数位置コードブックをロードする。決定ブロック１１４３で、ルーチン１１００は、整数動き推定値（ブロック１１０８で決定された）が、選択したサブペルフィルタセットより高い符号利得（低いＳＡＤ）を提供しているかを判断する。判断結果が否定的である場合、ルーチン１１００は、ループブロック１１５３の終了に移行して、ここでルーチン１１００は、ブロック１１３５に繰り返し戻り、次の空間分割部分（もしあれば）を処理する。
【０１０７】
しかし、整数動き推定値（ブロック１１０８で決定される）は、選択したサブペルフィルタセットより高い符号利得（低いＳＡＤ）を提供している場合には、ブロック１１４５で、ルーチン１１００が、整数位置コードブックから、現在の空間分割部分に対する高い（または最高の）符号利得を有する整数位置フィルタを選択する。決定ブロック１１４８では、ルーチン１１００が、選択された整数位置フィルタが最高の符号利得（最少のＳＡＤ）を提供しているかを判断する。その場合には、ブロック１１５０で、ルーチン１１００が、選択した整数位置のフィルタに対応するインデックスまたは他のコード（ｉｎｔｐｅｌｆｉｌｔ＿ｃｏｄｅ）を、ビットストリームに符号化する。一部の実施形態では、１つのフラグその他の１ビットのヘッダもビットストリームに符号化して、整数位置コードブックの選択された整数位置フィルタが、標準的な整数位置フィルタよりも高い符号利得を生成することを示す。
【０１０８】
ループブロック１１５３を終了するとき、ルーチン１１００は、ブロック１１３５に繰り返し戻り、次の空間分割部分（もしあれば）を処理する。すべての空間分割部分の処理が終わると、ルーチン１１００はブロック１１９９で終了する。様々な実施形態では、ここで記載する方法を、画像ごとに、および、画像全体に送られるフィルタへの１つのインデックス、１つの領域、１つのセグメント、スライスの１群、１つのフレームまたは１つのタイルの各４つのツリーまたは２つのツリーの分割部分、１つのフレームのブロック群、複数のタイル、または１つのタイルの複数のフラグメントに対して利用する。
【０１０９】
図１２は、本明細書で様々な形態で示される、様々な動き補償コードブックフィルタ符号器および復号器における、ビットストリームシンタックス１２００の一例を示す。ビットストリームシンタックス１２００は、３ビットのヘッダｍｆｃ＿ｈｄｒ１２０１から始まる。１ビットのｐｉｃｔ＿ｏｎｌｙフラグ１２０２は、画像ベースのフィルタリングが生じるか否かを示す。「はい」の場合には、以下の随意のシンタックスエレメントヌル（numpt）フィールド１２３０を省き、「いいえ」の場合には、３ビットのヌルコード１２０３を送信する。随意の３ビットヌルフィールド１２０３は分割部分の数（８まで）を示す。
【０１１０】
随意の１ビットのｍａｐ＿ｓｅｎｔフラグ１２０４が、分割マップを送り、フィルタを適用するか否かを示し、または、複数のフィルタ間を切り替えるかを示す。随意のｎビットのｐｔｍａｐフィールド１２０５は、分割マップ（もしあれば）を示す。
【０１１１】
１ビットのｆｉｌｔ＿ｓｅｎｔフラグ１２０６は、サブペルフィルタコードがビットストリームに含まれているかを示す。フラグ１２０６が設定されている場合には、８ビットのサブペルｆｉｌｔ＿ｃｏｄｅ１２０８を送信して、利用するサブペルフィルタセットを特定し、さもなくば、ｓｕｂｐｅｌｆｉｌｔ＿ｃｏｄｅ１２０８を送信しない。
【０１１２】
フラグｉｎｔｆｉｌｔ＿ｓｅｎｔ１２１０は、整数位置フィルタコードがビットストリームに含まれているかを示す。「１」に設定されている場合には、ｉｎｔｆｉｌｔ＿ｓｅｎｔ１２１０が、６ビットのｉｎｔｐｅｌｆｉｌｔ＿ｃｏｄｅ１２１１が送信されて、利用する整数位置フィルタを特定する。さもなくば、ｉｎｔｐｅｌｔ＿ｃｏｄｅ１２１１を送信しない。
【０１１３】
ｆｉｌｔ＿ｓｅｎｔ１２０６、ｓｕｂｐｅｌｆｉｌｔ＿ｃｏｄｅ１２０８、ｉｎｔｆｉｌｔ＿ｓｅｎｔ１２１０、および、ｉｎｔｐｅｌｆｉｌｔ＿ｃｏｄｅ１２１１のコードシーケンスが、１つの分割（画像のみ）モードのみを利用する場合に生じるが、その他の場合には、シーケンスをヌルで（numpt）１２０３回繰り返す。
【０１１４】
図１３ａは、いずれのＭＰＥＧ規格の動画符号化においても広く利用されているＩフレーム１３０１、１３０８（独立して符号化された画像）、Ｐフレーム１３０４、１３０７（一方向予測符号化された画像）、および、Ｂフレーム１３０２−１３０３、１３０５、１３０７（双方向予測符号化された画像）を含む、動画ストリーム内のフレームまたは画像シーケンス１３０１−１３０８を示す。図示されている画像構造は、さらに、可変数のＢフレームを示しているが、これは、われわれのフィルタリングの話の主要点ではない。より関連することは、Ｉ画像１３０１、１３０８が動きフィルタセット情報ではなくてもよく、Ｐ画像１３０４、１３０６が、１以上のフィルタセットを必要として、Ｂ画像１３０２−１３０３、１３０５、１３０７が、２つ以上の（双方向参照により）フィルタセットを必要とする、ということである。
【０１１５】
表３は、様々な実施形態における、ＰおよびＢ画像タイプについての、画像タイプおよび分割部分の数（numpt）による動き補償コードブックフィルタの符号化の符号ビットコストの一例（たとえば、動きフィルタリングモード（たとえば「サブペル」および「ｉｎｔおよびサブペル」）を示す。Ｂ画像のビットコストを低減するために、２つのさらなるモード（たとえば「画像サブペル」および「画像int subpel」など）を導入する。全体的には、Ｐ画像については、信号サブペルフィルタセットが、１３と４３ビットの間（４つの分割部分まで）という値をとり、ｉｎｔとサブペルフィルタセット両方に信号を供給するためには、１９および６７ビットの間の値であってよく、サブペルのＢ画像については２２および７９ビットの間であってよく、ｉｎｔのＢ画像については３４および１２７ビットの間であってよい。表３に示す符号ビットのコストの例は領域、スライス、タイル、またはタイルフラグメント、画像の２つのツリー、４つのツリー、タイルの２つのツリー、または４つのツリー、および、統合されたブロックのうち少なくとも１以上当の空間分割マップのビットコストは含まない。
【表３】
0005648183.tif 000007
【０１１６】
図１３ｂは、３つの分割部分例（numpt=3）に分割されるＩフレーム１３０１−１３０８、３つの分割部分例（numpt=3）に分割されるＰフレーム１３０４、１３０６、および、２つの分割部分例（numpt=2）に分割されるＢフレーム１３０２−１３０３、１３０５、１３０７を含む動画ストリーム内の画像またはフレームシーケンス１３０１−１３０８を示す。図１３ｂに示すように、動きフィルタリングの分割は、完全にアダプティブであってよく、画像ベースで、任意のモードで動作することができる（画像、領域、スライス、タイル、１つのタイルの統合されたフラグメント、画像の２つのツリーまたはタイル統合された２つのツリー、画像の４つのツリーまたはタイル統合された４つのツリー、統合されたブロック等が含まれる）。たとえば図１３ｂは、第１のＰ画像１３０４が３つのスライスからなり、第２のＢ画像１３０３が２つのツリーで符号化されており、２つの分割部分からなる。さらに、第２のＰ画像１３０６は、３ｘ３の大きなタイルアレイに分割され、第３のＢフレーム１３０５は、２つのツリーに分割される。図１３ｂの例に従って、コードブック動きフィルタリングの場合には、図示されている画像構造の各画像の動きフィルタビットのカウントを計算することができる。
【０１１７】
図１４は、一実施形態における、動画符号化／復号化システム１４００の一例を示しており、システム１４００は、符号化されていない動画ソース１４１５、符号化デバイス１５００（図１５に示されており後述する）、復号化デバイス１６００（図１６に示されており後述する）を、随意の外部ディスプレイ１４２５と、随意の符号化されている動画ソース１４２０とともに含む。一部の実施形態では、符号化デバイス１５００および復号化デバイス１６００の片方または両方が、ネットワーク１４５０に接続されていてよい。一部の実施形態では、復号化デバイス１６００および符号化デバイス１５００が、単一のデバイスを含んでもよい。一部の実施形態では、１を超える数の符号化デバイス１５００が存在していてよい（たとえば、１つの符号化デバイスが「オフライン」でコードブック生成プロセスを実行してよく、一方で、別の符号化デバイスが「オンライン」で符号化プロセスを実行してよいことが、本開示に示されている）。
【０１１８】
一部の実施形態では、他のサーバおよびデバイス（不図示）も存在していてよい。たとえば一部の実施形態では、配信サーバ（不図示）が、符号化されている動画を復号かデバイス１６００にネットワーク１４５０経由で配信することができる。
【０１１９】
一部の実施形態では、符号化デバイス１５００が、符号化されていない動画ソース１４１５と、ネットワーク１４５０、格納エリアネットワーク（「ＳＡＮ」、高速シリアルバスおよび他の適切な通信技術の両方または片方を利用して通信してよい。同様に一部の実施形態では、復号化デバイス１６００は、符号化されている動画ソース１４２０と、ネットワーク１４５０、格納エリアネットワーク（「ＳＡＮ」、高速シリアルバス経由で、および他の適切な通信技術を利用して通信してよい。一部の実施形態では、符号化デバイス１５００、復号化デバイス１６００、符号化されている動画ソース１４２０、および、符号化されていない動画ソース１４１５が、１以上の複製され、および／または、配信された物理的または論理的デバイスを含んでよい。
【０１２０】
様々な実施形態では、ネットワーク１４５０が、インターネット、ローカルエリアネットワーク（「ＬＡＮ」）、ワイドエリアネットワーク（「ＷＡＮ」）、セルラーデータネットワーク、および、その他のデータネットワークのうち少なくとも１つを含んでよい。多くの実施形態では、図示されているより多い数の符号化デバイス１５００、復号化デバイス１６００、符号化されている動画ソース１４２０、および、符号化されていない動画ソース１４１５が存在してもよい。
【０１２１】
図１５は、一実施形態における、符号化デバイス１５００の一例の様々なコンポーネントを示す。図１５は、符号化デバイス１５００の一例のいくつかのコンポーネントを示す。一部の実施形態では、符号化デバイス１５００は、図１５に示されているものより多いコンポーネントを含んでよい。しかし、例示される実施形態を開示するために、これら一般的には従来のコンポーネントの全てを示す必要は必ずしもない。図１５に示すように、符号化デバイス１５００は、ネットワーク１４５０に随意で接続するためのネットワークインタフェース１５３０を随意で含む。
【０１２２】
符号化デバイス１５００はさらに、少なくとも１つの処理ユニット１５１０（たとえば、汎用中央処理装置、エンベデッド処理装置、専用動画処理ユニット等）、メモリ１５５０、随意の出力デバイスおよびディスプレイ１５４０の両方または片方、および、随意の入力デバイス１５７０（たとえばキーボード、マウス、リモコン、ジョイスティック等）を含んでよく、これら全てが、随意のネットワークインタフェース１５３０とともに、バス１５２０経由で相互接続されていてよい。メモリ１５５０は、一般的に、ＲＡＭ、ＲＯＭ、および、永続的な大容量記憶装置（ディスクドライブ等）を含んでよい。メモリ１５５０は、コードブック動き補償フィルタリング８００を有する動画復号器（図８を参照して上述した）、動き補償サブペルフィルタセットのコードブック１５６５および動き補償整数位置フィルタコードブック１５７０の片方または両方、随意の「オフライン」のコードブック生成ルーチン１０００（図１１ａ、図１１ｂを参照して上述した）、および、コードブック動き補償フィルタリング動画符号化ルーチン（図１７を参照して後述する）を含んでよい。加えて、メモリ１５５０は、さらに、オペレーティングシステム１５５５を格納している。一部の実施形態では、これらソフトウェアコンポーネントが、コンピュータ可読記憶媒体１５９５から符号化デバイス１５００のメモリ１５５０に、非持続性コンピュータ可読記憶媒体１５９５（たとえばフロッピー（登録商標）ディスク、テープ、ＤＶＤ／ＣＤ−ＲＯＭドライブ、メモリカード等）に関連付けられているドライブメカニズム（不図示）を利用してロードされてよい。一部の実施形態では、ソフトウェアコンポーネントも、コンピュータ可読記憶媒体１５９５経由ではなく、随意のネットワークインタフェース１５３０経由でロードされてよい。
【０１２３】
一部の実施形態では、符号化デバイス１５００は、さらに、符号化されていない動画ソース１４１５と通信する専用インタフェース１５３５（高速シリアルバス等）を含んでよい。一部の実施形態では、符号化デバイス１５００が、ネットワークインタフェース１５３０経由で、符号化されていない動画ソース１４１５と通信してよい。他の実施形態では、符号化されていない動画ソース１４１５がメモリ１５５０に常駐していてもよい。
【０１２４】
大体従来の汎用コンピューティングデバイスに準拠している符号化デバイス１５００の一例を示したが、符号化デバイス１５００は、動画を符号化することができる多数のデバイスのいずれであってもよい（たとえば、動画記録デバイス、動画コプロセッサおよびアクセラレータの両方または片方、パソコン、ゲームコンソール、セットトップボックス、ハンドヘルドコンピュータ、携帯電話、またはその他の適切なデバイス）。
【０１２５】
図１６は、一実施形態における、復号化デバイス１６００の一例の様々なコンポーネントを示す。一部の実施形態では、復号デバイス１６００は、図１６に示すもの以外にも多くのコンポーネントを含む場合がある。しかし、これら全ての一般的に従来のコンポーネントの説明は、実施形態の開示には必ずしも必要ではない。図１６に示す復号化デバイス１６００は、ネットワークに接続することもできる随意のネットワークインタフェース１６３０を含んでいる。
【０１２６】
復号化デバイス１６００はさらに、少なくとも１つの処理ユニット１６１０（たとえば、汎用中央処理装置、エンベデッド処理装置、専用動画処理ユニット等）、メモリ１６５０、随意の出力デバイスおよびディスプレイ１６４０の両方または片方、および、随意の入力デバイス１６７０（たとえばキーボード、マウス、リモコン、ジョイスティック等）を含んでよく、これら全てが、随意のネットワークインタフェース１６３０とともに、バス１６２０経由で相互接続されていてよい。メモリ１６５０は、一般的に、ＲＡＭ、ＲＯＭ、および、永続的な大容量記憶装置（ディスクドライブ等）を含んでよい。メモリ１６５０は、コードブック動き補償フィルタリング９００を有する動画復号器（図９を参照して上述した）、動き補償サブペルフィルタセットのコードブック１６６５および動き補償整数位置フィルタコードブック１６７０の片方または両方、随意の「オフライン」のコードブック生成ルーチン（図２１を参照して上述した）を含んでよい。加えて、メモリ１６５０は、さらに、オペレーティングシステム１６５５を格納している。一部の実施形態では、これらソフトウェアコンポーネントが、コンピュータ可読記憶媒体１６９５から符号化デバイス１６００のメモリ１６５０に、非持続性コンピュータ可読記憶媒体１６９５（たとえばフロッピー（登録商標）ディスク、テープ、ＤＶＤ／ＣＤ−ＲＯＭドライブ、メモリカード等）に関連付けられているドライブメカニズム（不図示）を利用してロードされてよい。一部の実施形態では、ソフトウェアコンポーネントも、コンピュータ可読記憶媒体１６９５経由ではなく、随意のネットワークインタフェース１６３０経由でロードされてよい。
【０１２７】
一部の実施形態では、復号化デバイス１６００はさらに、符号化されている動画ソース１４２０と通信する専用インタフェース１６３５（高速シリアルバス等）を含んでよい。一部の実施形態では、復号化デバイス１６００が、ネットワークインタフェース１６３０経由で、符号化されている動画ソース１４２０と通信してよい。他の実施形態では、符号化されている動画ソース１４２０がメモリ１６５０に常駐していてもよい。
【０１２８】
大体従来の汎用コンピューティングデバイスに準拠している復号化デバイス１６００の一例を示したが、復号化デバイス１６００は、動画を復号化することができる多数のデバイスのいずれであってもよい（たとえば、動画再生デバイス、パソコン、ゲームコンソール、セットトップボックス、ハンドヘルドコンピュータ、携帯電話、またはその他の適切なデバイス）。
【０１２９】
図１７は、一実施形態における、たとえば符号器デバイス１５００で実行可能な、コードブック動き補償フィルタリング動画符号化ルーチン１７００を示す。サブルーチンブロック１８００（図１８を参照して、後述する）では、ルーチン１７００が、それぞれが複数のサブペル位置に対応している複数のサブペル位置群に分類される複数の動き補償フィルタを含むものとして均等に特徴付けられており、ここで複数のサブペル位置群のそれぞれは、１つの画像の複数のブロックを複数のサブペル位置のうち対応するもので補間するのに適した複数の動き補償フィルタを含んでいる。たとえば、表１に示すコードブックはサブペル位置｛ａ−０｝に対応する、１５または１６群の動き補償フィルタを含むものとして特徴付けられてよい。たとえば以下のようになる。
サブペル位置｛ａ｝群：｛ａ０，ａ１，ａ２，...ａ１５｝
サブペル位置｛ｂ｝群：｛ｂ０，ｂ１，ｂ２，...ｂ１５｝
・・
サブペル位置｛ｃ｝群：｛ｃ０，ｃ１，ｃ２，...ｃ１５｝
【０１３０】
ブロック１７０５では、ルーチン１７００が、符号化されていない動画フレームまたは画像を、符号化するために取得する。場合によっては、符号化されていない動画フレームまたは画像は、複数の異なる部分を含むように決定される場合がある（１つの画像を複数の部分に分割するための様々な分割モードを示している図７ａから図７ｆ参照）。他の場合には、符号化されていない動画フレームまたは画像が、１つの部分として捉えられる場合もある。
【０１３１】
符号化されていない動画フレームまたは画像を符号化している間に、ルーチン１７００は、ループブロック１７１０を開始する際に、符号化されていないフレームまたは動画の１以上の部分をそれぞれ処理する。サブルーチンブロック１９００で（図１９ａ、図１９ｂを参照して、後述する）、ルーチン１７００は、コードブックから、複数の動き補償フィルタのサブセットを、動画フレームまたは画像の現在の部分に最適化されたものとして選択して、この選択されたサブセットには、複数のサブペル位置群それぞれから選ばれた１つが含まれている。たとえば表１を参照して上述したように、コードブックは、さらに、各サブペル位置群から１つずつ、複数の予め定められた動き補償フィルタのサブセットを含むことで特徴付けられてもよく、この例を以下に示す。
サブセットＩＤ＝０：｛ａ０，ｂ０，ｃ０，ｄ０，ｅ０，ｆ０，ｇ０，ｈ０，ｉ０，ｊ０，ｋ０，ｌ０，ｍ０，ｎ０，ｏ０｝
サブセットＩＤ＝１：｛ａ１，ｂ１，ｃ１，ｄ１，ｅ１，ｆ１，ｇ１，ｈ１，ｉ１，ｊ１，ｋ１，ｌ１，ｍ１，ｎ１，ｏ１｝
・・
サブセットＩＤ＝１５：｛ａ１５，ｂ１５，ｃ１５，ｄ１５，ｅ１５，ｆ１５，ｇ１５，ｈ１５，ｉ１５，ｊ１５，ｋ１５，ｌ１５，ｍ１５，ｎ１５，ｏ１５｝
サブセットＩＤ＝１６：｛ａ０，ｂ５，ｃ７，ｄ９，ｅ４，ｆ４，ｇ１２，ｈ６，ｉ７，ｊ２，ｋ４，ｌ１１，ｍ８，ｎ０，ｏ１０｝
・・
サブセットＩＤ＝２５５：｛ａ１０，ｂ６，ｃ１２，ｄ９，ｅ２，ｆ２，ｇ３，ｈ１０，ｉ３，ｊ５，ｋ1，ｌ８，ｍ１１，ｎ６，ｏ１０｝
【０１３２】
サブルーチンブロック１９００は、コードブック内でfilterset_sent flag==1を返すが、サブペルフィルタセットコードは、コードブック内の複数の動き補償フィルタの選択されたサブセットを特定している。たとえば、一実施形態では、サブペルフィルタセットコードは、コードブックへの「subset id」数またはその他のインデックスであってよい（またはこれらから導出されてよい）。ブロック１７２０では、ルーチン１７００が、filterset_sent flagおよびサブペルフィルタセットコード（filterset_sent flagで示されている場合）を、ルーチン１７００が生成する符号化されているビットストリームに書き込む。
【０１３３】
サブルーチンブロック２０００では、ルーチン１７００が、随意に、符号化されていないフレームまたは画像の現在の部分について、整数位置動き補償フィルタを随意に決定する（図２０を参照して後述する）。ループブロック１７３０を終了させるにあたり、ルーチン１７００は、ブロック１７１０に繰り返し戻り、符号化されていないフレームまたは画像の次の部分（もしあれば）を処理する。このように、ビットストリームへの少なくとも１つの動き補償フィルタセットを符号化すると、ルーチン１７００がブロック１７９９で終了する。多くの場合、ルーチン１７００は、複数の動画フレーム数についてシリアルに実行され、ルーチン１７００は、より大きい動画符号化プロセスの一部である。
【０１３４】
図１８は、一実施形態において、１つのコードブックを得るためのサブルーチン１８００を示す。一部の実施形態では、コードブックを生成するプロセスは非常に長くかかり（数時間または数日かかる）、コードブックを一度だけ（または少ない頻度で）生成して、再利用のために格納してよい。決定ブロック１８０５では、サブルーチン１８００が、前に生成したコードブックを再利用のために格納したかを判断する。判断結果が肯定的である場合には、ブロック１８１０で、サブルーチン１８００が、格納したコードブックを読み出して、最後のブロック１８９９に戻す。
【０１３５】
しかし、前に生成したコードブックが再利用のために格納されていない場合には、サブルーチン１８００は、コードブックを生成するプロセスを開始する。一部の実施形態では、ブロック１８１５−１８６５は、「オフライン」のコードブック生成ルーチンとして独立して実行することができる。ブロック１８１５−１８６５は、図１０のブロック１００５−１０５０に示すプロセスに類似した別の図または別の特徴付として理解することができる。簡潔性のために、図１０に関して上述した主題は、主には図１８の以下の説明では繰り返さないことにする。
【０１３６】
開始ループブロック１８１５を始めるにあたり、サブルーチン１８００は、複数のサブペル位置のうちそれぞれを処理する（たとえば、図３に示されており、上述したａ―ｏ）。
【０１３７】
ブロック１８２０で、サブルーチン１８００は、現在のサブペル位置のデフォルトである動き補償フィルタを決定する。たとえば一実施形態では、サブルーチン１８００が、Ｈ.２６４の固定フィルタセットまたはその他の適切なデフォルトのフィルタセット等からの固定されたサブペル動き補償フィルタを利用してよい。
【０１３８】
ブロック１８２５で、サブルーチン１８００は、現在のサブペル位置についての複数の改良された動き補償フィルタを生成するために、決定されたデフォルトの動き補償フィルタを繰り返し改良する。たとえば一実施形態では、サブルーチン１８００は、ランダムウォークアルゴリズム（または類似した最適化アルゴリズム）を利用して、決定されたデフォルトの動き補償フィルタを繰り返し改良して、複数の改良された動き補償フィルタを生成することができる。
【０１３９】
開始ループブロック１８３０を始める際に、サブルーチン１８００は、複数の改良された動き補償フィルタそれぞれを処理する。ブロック１８３５で、サブルーチン１８００は、現在の改良された動き補償フィルタの符号利得（たとえばＳＡＤの計測値）を決定する。ブロック１８４０で、サブルーチン１８００は、ブロック１８３０に繰り返し戻り、次の改良された動き補償フィルタ（もしあれば）を処理する。
【０１４０】
ブロック１８４５で、サブルーチン１８００は、決定された符号利得を利用して、現在のサブペル位置（たとえば高い符号利得、または低いＳＡＤを有するフィルタ群）についての良好なパフォーマンスを有する改良された動き補償フィルタ群を選択する。ブロック１８５０では、サブルーチン１８００が、現在のサブペル位置について選択された良好なパフォーマンスを有する改良された動き補償フィルタ群を格納する。最後のループブロック１８５５では、サブルーチン１８００は、ブロック１８１５に繰り返し戻り、次のサブペル位置（もしあれば）を処理する。一部の実施形態では、選択された良好なパフォーマンスを有する改良された動き補償フィルタは、現在のサブペル位置についての「ベース」のフィルタ（上述した）として捉えることができ、他のサブペル位置の「ベース」フィルタとあわさって、「ベース」のコードブックまたは「ベース」のフィルタセット群が形成される。
【０１４１】
ブロック１８６０で、サブルーチン１８００は、良好なパフォーマンスを有する改良された動き補償フィルタ群を利用して、複数のフィルタセットを繰り返し決定して（各サブペル位置について１つの群）、各フィルタセットが、各フィルタがそれぞれのサブペル位置にあたる、明示的なフィルタの組み合わせを含んでいる。（本開示における文脈では、「フィルタセット」が、動き補償フィルタの「サブセット」と称されることがある、たとえば、｛ａ０，ｂ５，ｃ７，ｄ９，ｅ４，ｆ４，ｇ１２，ｈ６，ｉ７，ｊ２，ｋ４，ｌ１１，ｍ８，ｎ０，ｏ１０｝）。一部の実施形態では、サブルーチン１８００は、ランダムウォークアルゴリズム（または類似した最適化アルゴリズム）を利用して、複数のフィルタセット／サブセットを繰り返し決定することができる。ブロック１８６５で、サブルーチン１８００は、コードブックにおける決定されたフィルタセット／サブセットを示し、各決定されたフィルタセット／サブセットが、アドレスされたり、選択されたり、インデックスされたり、さもなくば、コードブック内で特定されてよい。たとえば一実施形態では、サブルーチン１８００が、各決定されたフィルタセット／サブセットに、「ＩＤ」数またはインデックスを割り当てることができる。
【０１４２】
ブロック１８７０では、サブルーチン１８００が、後で再利用するためにこのようにして生成されたコードブックを格納する。ブロック１８９９で、サブルーチン１８００が終了して、コードブックを戻す。
【０１４３】
図１９ａ、図１９ｂは、一実施形態における、コードブックから動き補償フィルタのサブセットを選択するサブルーチン１９００を示す。図１９ａ、図１９ｂは、図１１ａ、図１１ｂに示すプロセスに類似した別の図または別の特徴付として理解することができ、これらに関しては詳述済みである。簡潔性のために、図１１ａ、図１１ｂに関して上述した主題は、主には図１９ａ、図１９ｂの以下の説明では繰り返さないことにする。
【０１４４】
ブロック１９０３で、サブルーチン１９００が、画像の少なくとも一部（たとえば、画像を複数の部分に分割する様々な分割モードを示す図７ａから図７ｆを参照）を取得して、この画像の部分には、複数の画像コンテンツブロックが含まれている。開始ループブロック１９０５を始めるにあたり、サブルーチン１９００が、この画像の部分の各画像コンテンツブロックを処理する。開始ループブロック１９０８を開始する際に、サブルーチン１９００は、複数のサブペル位置それぞれを処理する（たとえば図３に示すａ―ｏ、上で説明済みである）。
【０１４５】
ブロック１９１０で、サブルーチン１９００は、現在のサブペル位置｛ａ０，ａ１，ａ２，...ａ１５｝について複数の「ベース」動き補償フィルタを取得する。開始ループブロック１９１３を始めるにあたり、サブルーチン１９００は、現在のサブペル位置の「ベース」動き補償フィルタそれぞれを処理する。ブロック１９１５で、サブルーチン１９００は、現在のサブペル位置（たとえばａ０）の現在の「ベース」動き補償フィルタについて個々の符号利得を決定する（ＳＡＤを計算することで）。最終ループブロック１９１８では、サブルーチン１９００が、ブロック１９１３に繰り返し戻り、現在のサブペル位置についての次の「ベース」動き補償フィルタ（もしあれば）を処理する。
【０１４６】
現在のサブペル位置についての各「ベース」動き補償フィルタについて符号利得を決定すると（ブロック１９２０）、サブルーチン１９００は、「デフォルト」の動き補償フィルタについて符号利得を決定する（これは、デフォルトの動き補償フィルタセットの一部である）。たとえば一実施形態では、サブルーチン１９００が、現在のサブペル位置について固定された動き補償フィルタの符号利得を決定してよい（たとえば、Ｈ．２６４で利用される固定された動き補償フィルタセットの１つのフィルタ、または、他の「デフォルト」の動き補償リフィルタの１つ）。
【０１４７】
最終ループブロック１９２３では、サブルーチン１９００がブロック１９０８に繰り返し戻り、次のサブペル位置を処理する（もしあれば）。最終ループブロック１９２５では、サブルーチン１９００がブロック１９０５に繰り返し戻り、その画像の部分の次の画像コンテンツブロックを処理する（もしあれば）。
【０１４８】
ブロック１９２８で、サブルーチン１９００は、複数のアダプティブフィルタセットを取得して、ここで各フィルタセットは、各サブペル位置について「ベース」動き補償フィルタの１つを含んでいる。たとえば一実施形態では、サブルーチン１９００が、以下のような複数のアダプティブフィルタセットを含むコードブックを取得してよい。
サブセットＩＤ＝０：｛ａ０，ｂ０，ｃ０，ｄ０，ｅ０，ｆ０，ｇ０，ｈ０，ｉ０，ｊ０，ｋ０，ｌ０，ｍ０，ｎ０，ｏ０｝
サブセットＩＤ＝１：｛ａ１，ｂ１，ｃ１，ｄ１，ｅ１，ｆ１，ｇ１，ｈ１，ｉ１，ｊ１，ｋ１，ｌ１，ｍ１，ｎ１，ｏ１｝
・・
サブセットＩＤ＝１５：｛ａ１５，ｂ１５，ｃ１５，ｄ１５，ｅ１５，ｆ１５，ｇ１５，ｈ１５，ｉ１５，ｊ１５，ｋ１５，ｌ１５，ｍ１５，ｎ１５，ｏ１５｝
サブセットＩＤ＝１６：｛ａ０，ｂ５，ｃ７，ｄ９，ｅ４，ｆ４，ｇ１２，ｈ６，ｉ７，ｊ２，ｋ４，ｌ１１，ｍ８，ｎ０，ｏ１０｝
・・
サブセットＩＤ＝２５５：｛ａ１０，ｂ６，ｃ１２，ｄ９，ｅ２，ｆ２，ｇ３，ｈ１０，ｉ３，ｊ５，ｋ1，ｌ８，ｍ１１，ｎ６，ｏ１０｝
【０１４９】
開始ループブロック１９３０の開始にあたり、サブルーチン１９００は、取得したアダプティブフィルタセットそれぞれを処理する。ブロック１９３３で、サブルーチン１９００は、現在のアダプティブフィルタセットの累積符号利得を決定する。たとえば一実施形態では、累積符号利得を決定することに、現在のアダプティブフィルタセットを構成するフィルタにおいて、個々の符号利得（ブロック１９１５で決定されたもの）を合計することが含まれてよい。最後のループブロック１９３５では、サブルーチン１９００がブロック１９３０に繰り返し戻り、次のアダプティブフィルタセットを処理する（もしあれば）。
【０１５０】
ブロック１９３８で、各アダプティブフィルタセットについて累積符号利得が決定されると、サブルーチン１９００で、上述したブロック１９２０で決定された個々の「デフォルト」の符号利得を利用して、「デフォルト」のフィルタセットの「デフォルト」の累積符号利得（たとえば、Ｈ.２６４の固定フィルタセットまたは他の適切なセット）を決定する。
【０１５１】
ブロック１９４０で、ブロック１９３３で決定された累積符号利得を利用して、サブルーチン１９００は、ブロック１９０３で取得された画像の部分の良好な累積符号利得を持つアダプティブフィルタセットを選択する。一部の実施形態では、選択されたアダプティブフィルタセットは、決定されたうちの最高の累積符号利得を有するアダプティブフィルタセットであってよい。
【０１５２】
決定ブロック１９４３では、サブルーチン１９００は、ブロック１９３８で決定された「デフォルト」の累積符号利得を、選択された良好なアダプティブフィルタセットの累積符号利得と比較する。「デフォルト」のフィルタセットのほうが、高い符号利得を提供している場合（ＳＡＤが低い）には、ブロック１９５０で、サブルーチン１９００は、filterset_sentフラグを０またはＮＯにして、最終ブロック１９９９でfilterset_sentフラグを戻す。
【０１５３】
しかしアダプティブフィルタセットのほうが、高い符号利得を提供している場合（ＳＡＤが低い）には、ブロック１９４５で、サブルーチン１９００は、filterset_sentフラグを１またはＹＥＳにして、最終ブロック１９４８でサブルーチン１９００が、選択されたアダプティブフィルタセットを特定するサブペルフィルタセットコードを決定する。たとえば、一実施形態では、サブペルフィルタセットコードは、コードブックへの「subset id」数またはその他のインデックスであってよい（またはこれらから導出されてよい）。サブルーチン１９００は、最終ブロック１９９９で、filterset_sentフラグおよび決定されたサブペルフィルタセットコードを戻す。
【０１５４】
図２０は、一実施形態における、１つの画像の一部の整数位置動き補償フィルタを決定するサブルーチン２０００を示す。ブロック２００５で、サブルーチン２０００は、画像の少なくとも一部を取得して（たとえば１つの画像を複数の部分に分割するための様々な分割モードを示している図７ａから図７ｆ参照）、１つの画像の部分には、複数の画像コンテンツブロックが含まれている。開始ループブロック２０１０を開始する際、サブルーチン２０００は、画像の部分の画像コンテンツブロックそれぞれを処理する。
【０１５５】
ブロック２０１５で、サブルーチン２０００は、複数の整数位置動き補償フィルタ（たとえば００，０１，０２，...０４７）を取得する。たとえば一実施形態では、サブルーチン２０００が、整数位置コードブック（たとえば表２に部分的に示されているもの）を取得してよい。他の実施形態では、複数の整数位置動き補償フィルタを、サブペル位置フィルタを含む１つのコードブック内に含めることができる。
【０１５６】
開始ループブロック２０２０を開始するにあたり、サブルーチン２０００は、複数の整数位置動き補償フィルタそれぞれを処理する。ブロック２０２５で、サブルーチン２０００は、現在の整数位置動き補償フィルタについての個々の符号利得（たとえばＳＡＤを計算することで）を決定する。最終ループブロック２０３０では、サブルーチン２０００がブロック２０２０に繰り返し帰り、次の整数位置動き補償フィルタ（もしあれば）を処理する。最終ループブロック２０３５では、サブルーチン２０００がブロック２０１０に繰り返し帰り、画像の部分の次の画像コンテンツブロック（もしあれば）を処理する。
【０１５７】
ブロック２０４０で、各整数位置動き補償フィルタおよび画像の部分の各画像コンテンツブロックについて符号利得が決定されると、サブルーチン２０００は、複数の整数位置動き補償フィルタの１つを、現在の画像の部分の好適な符号利得（低いＳＡＤ）を有するものとして選択する。
【０１５８】
決定ブロック２０４５では、サブルーチン２０００は、選択された好適な整数位置動き補償フィルタの符号利得を、これも同じ画像部分について選択されたサブペルフィルタセットの符号利得に比較する（たとえば、図２０のブロック２０４０の上の説明を参照）。サブペルフィルタセットのほうが高い符号利得を提供している（ＳＡＤが低い）場合、ブロック２０６０で、サブルーチン２０００は、intfilt_sentフラグを０またはＮＯにして、最終ブロック２０９９でintfilt_sentフラグを戻す。
【０１５９】
しかし好適な整数位置動き補償フィルタのほうが高い符号利得（ＳＡＤが低い）場合には、ブロック２０５０で、サブルーチン２０００が、intfilt_sentフラグを１またはＹＥＳにして、ブロック２０５５で、サブルーチン２０００が、ビットストリームに、選択された好適な整数位置動き補償フィルタを特定する整数位置フィルタコードを書き込む。たとえば一実施形態では、整数位置フィルタコードは、コードブックへの「subset id」数またはその他のインデックスであってよい（またはこれらから導出されてよい）。サブルーチン２０００は、最終ブロック２０９９に戻る。
【０１６０】
図２１は、一実施形態における、たとえば復号化デバイス１６００で実行可能な、コードブック動き補償フィルタリング動画復号化ルーチン２１００を示す。ブロック２１０５で、ルーチン２１００が、符号化されている動画ソースから符号化されているビットストリームを取得して、この符号化されているビットストリームは、動画の１以上の画像またはフレームを含んでいる。開始ループブロック２１１０を始めるにあたり、ルーチン２１００は、動画の符号化されている画像またはフレームそれぞれを処理する。
【０１６１】
ブロック２１１５で、ルーチン２１００は、ビットストリームから、現在の符号化されている画像またはフレームの１以上の画像部分を特定する（１つの画像を複数の部分に分割するための様々な分割モードを示している図７ａから図７ｆ参照）１以上の画像部分コードを読み出す。たとえば一実施形態では、ルーチン２１００は、図１２で示し上述した、pict_only１２０２、numpt１２０３、map_sent１２０４、および、ptmap１２０５の少なくとも１つのコードの一部またはすべてを読み出すことができる（図１２を参照して上述したことを参照）。
【０１６２】
開始ループブロック２１２０を始めるにあたり、現在の動画の符号化されている画像またはフレームの１以上の画像部分それぞれを処理する。
【０１６３】
決定ブロック２１２５では、ルーチン２１００は、符号化されているビットストリームが、画像の現在の符号化されている画像またはフレームの画像部分の整数位置のフィルタコードを含むかを判断する。たとえば一実施形態では、ルーチン２１００は、符号化されているビットストリームが、図１２に示し、上述されているintfilt_sentフラグを含むかを判断してよい。
【０１６４】
ルーチン２１００で、符号化されているビットストリームがこの整数位置フィルタコードを含むと判断する場合、ブロック２１３０で、ルーチン２１００が、ビットストリームから整数位置フィルタコードを読み出す。たとえば一実施形態では、ルーチン２１００が、intpelfilt_code１２１１をビットストリームから読み出してよい（図１２に示し、上述したことを参照）。
【０１６５】
ブロック２１３５で、ルーチン２１００は、複数の整数位置動き補償フィルタ（たとえば００，０１，０２，...０４７）を取得する。たとえば一実施形態では、サブルーチン２０００が、整数位置コードブック（たとえば表２に部分的に示されているもの）を取得してよい。他の実施形態では、複数の整数位置動き補償フィルタを、サブペル位置フィルタをこれも含む１つのコードブック内に含めることができる。通常であれば、ルーチン２１００が、前に格納した複数の整数位置の動き補償フィルタを、ルーチン２１００にアクセス可能なメモリから読み出してよい。
【０１６６】
ブロック２１４０で、ルーチン２１００は、ブロック２１３０でビットストリームから読み出した整数位置フィルタコード（intpelfilt_code１２１１）が示す複数の整数位置動き補償フィルタのうちの１つを選択する。そしてサブルーチン２１００は、ブロック２１７０で選択した整数位置動き補償フィルタを利用して、現在符号化されている動画の画像またはフレームの現在の画像部分のブロックを予測する。
【０１６７】
しかし決定ブロック２１２５で、もしもルーチン２１００が、符号化されているビットストリームが整数位置フィルタコードを含まないと判断した場合には、決定ブロック２１４５で、ルーチン２１００が、符号化されているビットストリームが、動画の現在符号化されている画像またはフレームの現在の画像部分のサブペルフィルタセットコードを含むかを判断する。たとえば一実施形態では、ルーチン２１００は、符号化されているビットストリームが、filt_sentフラグ１２０６（図１２に示し、上述した）を含むかを判断してよい。含まない場合には、ブロック２１６５で、ルーチン２１００は、デフォルトのサブペル動き補償フィルタセットを選択する（たとえば、Ｈ．２６４で利用される固定されたサブペルフィルタセットまたは他の適切なデフォルトのフィルタのセット）。次いでサブルーチン２１００は、デフォルトのサブペル動き補償フィルタセットを利用して（ブロック２１７０）、動画の現在の符号化されている画像またはフレームの現在の画像部分のブロックを予測する。
【０１６８】
しかしルーチン２１００が決定ブロック２１４５で符号化されているビットストリームが動画の現在符号化されている画像またはフレームの現在の画像部分のサブペルフィルタセットコードを含むと判断する場合には、ブロック２１５０で、ルーチン２１００が、ビットストリームからサブペルフィルタセットコードを読み出す。たとえば一実施形態では、ルーチン２１００が、ビットストリームからsubpelilt_code１２０８（図１２に示し上述した）を読み出す。
【０１６９】
ブロック２１５５で、ルーチン２１００は、サブペル動き補償コードブック（表１に部分的に示したようなもの）を上述したように取得する。通常であれば、ルーチン２１００が、前に格納したサブペル動き補償コードブックのコピーを、ルーチン２１００にアクセス可能なメモリから読み出してよい。
【０１７０】
ブロック２１４０で、ルーチン２１００は、ブロック２１３０でビットストリームから読み出した整数位置フィルタコード（subpelfilt_code１２０８）が示す複数の整数位置動き補償フィルタのうちの１つを選択する。そしてサブルーチン２１００は、ブロック２１７０で選択した整数位置動き補償フィルタを利用して、現在符号化されている動画の画像またはフレームの現在の画像部分のブロックを予測する。
【０１７１】
最終ループブロック２１７５で、ルーチン２１００はブロック２１２０に繰り返し戻り、動画の現在符号化されている画像またはフレームの次の画像部分（もしあれば）を処理する。
【０１７２】
ブロック２１８０で、ルーチン２１００は、ブロック２１７０の様々な繰り返しにおいて予測された１以上の画像部分の予測されたブロックに従って符号化された画像を生成する。ブロック２１８５で、ルーチン２１００は、生成した画像を、ルーチン２１００を実行するデバイスに関するディスプレイに表示する。
【０１７３】
ループブロック２１９０を終えるにあたって、ルーチン２１００はブロック２１１０に繰り返し戻り、動画の次の符号化されている画像またはフレーム（もしあれば）を処理する。ルーチン２１００はブロック２１９９で終了する。
【０１７４】
ここでは特定の実施形態を図示して記載してきたが、当業者であれば、本開示の範囲を逸脱せずに、示した特定の実施形態を、代わりまたは均等物である実装例で置き換えることができるだろう。本願は、ここに開示する実施形態のすべての適合例および変形例を含むよう意図される。
【図１】
0005648183.tif 000008
【図２】
0005648183.tif 000009
【図３】
0005648183.tif 000010
【図４ａ】
0005648183.tif 000011
【図４ｂ】
0005648183.tif 000012
【図４ｃ】
0005648183.tif 000013
【図４ｄ】
0005648183.tif 000014
【図４ｅ】
0005648183.tif 000015
【図４ｆ】
0005648183.tif 000016
【図４ｇ】
0005648183.tif 000017
【図４ｈ】
0005648183.tif 000018
【図４ｉ】
0005648183.tif 000019
【図４ｊ】
0005648183.tif 000020
【図４ｋ】
0005648183.tif 000021
【図４ｌ】
0005648183.tif 000022
【図４ｍ】
0005648183.tif 000023
【図４ｎ】
0005648183.tif 000024
【図４ｏ】
0005648183.tif 000025
【図５】
0005648183.tif 000026
【図６】
0005648183.tif 000027
【図７ａ】
0005648183.tif 000028
【図７ｂ】
0005648183.tif 000029
【図７ｃ】
0005648183.tif 000030
【図７ｄ】
0005648183.tif 000031
【図７ｅ】
0005648183.tif 000032
【図７ｆ】
0005648183.tif 000033
【図８】
0005648183.tif 000034
【図９】
0005648183.tif 000035
【図１０】
0005648183.tif 000036
【図１１ａ】
0005648183.tif 000037
【図１１ｂ】
0005648183.tif 000038
【図１２】
0005648183.tif 000039
【図１３ａ】
0005648183.tif 000040
【図１３ｂ】
0005648183.tif 000041
【図１４】
0005648183.tif 000042
【図１５】
0005648183.tif 000043
【図１６】
0005648183.tif 000044
【図１７】
0005648183.tif 000045
【図１８】
0005648183.tif 000046
【図１９ａ】
0005648183.tif 000047
【図１９ｂ】
0005648183.tif 000048
【図２０】
0005648183.tif 000049
【図２１】
0005648183.tif 000050