(57)【要約】      （修正有）【課題】デコーダのバッファーオーバーランニングやバッファーアンダーランニングを無くすかまたは低減して、しかも低コストで高速にリアルタイムで、データ圧縮が可能なエンコーダにおけるデータ処理方法とエンコーダの提供である。【解決手段】周波数ドメインにおけるマクロブロックのDCT係数を選択的にローパスフィルタリングすることと、ローパスフィルタリングされたDCT係数を量子化することとを含む。DCTフィルタリングは、画像再生に使用されるビット数を、優れて減少させることができ、しかも、通常の技術が画質を改善するために、量子化パラメータQPの値を増加させるのに対して、DCTフィルタリングは、バッファーの占有レベルとの適合性を保持できる。【選択図】図６Ａ
2005102170.tif 000002
【特許請求の範囲】
【請求項１】
効果的にビデオを圧縮する方法であって、
周波数ドメインにおいてマクロブロックのDCT係数を選択的にローパスフィルタリングし、
ローパスフィルタリングしたDCT係数を量子化すること
を含むことを特徴とするビデオを圧縮する方法。
【請求項２】
ローパスフィルタリングしたDCT係数を量子化するのに使われる量子化パラメータ（QP）の値を、計算されたQPが予め定められたレベルを上回ると低くするように予め定められたレベルに選択的に制限することを含むことを特徴とする請求項１に記載のビデオを圧縮する方法。
【請求項３】
バッファーモデルの占有率レベルに応じて、少なくとも部分的に選択的なローパスフィルタリングが実行されることを特徴とする請求項１に記載のビデオを圧縮する方法。
【請求項４】
バッファーモデルがVBVバッファーモデルであることを特徴とする請求項３に記載のビデオを圧縮する方法。
【請求項５】
実行中のQPの平均値と閾値との比較値に応じて、少なくとも部分的に選択的なローパスフィルタリングが実行されることを特徴とする請求項１に記載のビデオを圧縮する方法。
【請求項６】
実行中のQPの平均値と閾値との比較値に応じて、画像の全てのマクロブロックのDCT係数を選択的にローパスフィルタリングすることを含むことを特徴とする請求項１に記載のビデオを圧縮する方法。
【請求項７】
バッファーモデルの占有率レベルに応じて、DCT係数のフィルタリング総数を調整することを含むことを特徴とする請求項６に記載のビデオを圧縮する方法。
【請求項８】
実行中のQPの平均値と閾値との比較値に応じて、画像の全てのマクロブロックまたは選択されたマクロブロックをフィルタリングしたかどうかを判断し、
全てのマクロブロックがフィルタリングされているときは、
バッファーモデルの占有率レベルに応じて、フィルタリング強度を適応するように選択し、
画像の全てのマクロブロックにローパスフィルタリングとDCT係数を量子化するのに使われるQPの値を制限することを適用すること
を含むことを特徴とする請求項１に記載のビデオを圧縮する方法。
【請求項９】
実行中のQPの平均値と閾値との比較値に応じて、画像の全てのマクロブロックまたは選択されたマクロブロックをフィルタリングしたかどうかを判断し、
選択されたマクロブロックがフィルタリングされているときは、
マクロブロックに対するQPの値と閾値との間の比較値に応じて、ローパスフィルタリングを選択的に適用することと、DCT係数を量子化するのに使われるQP値を制限すること
とを含むことを特徴とする請求項１に記載のビデオを圧縮する方法。
【請求項１０】
選択されたマクロブロック固定化されているのに対してローパスフィルタリングを適用することを特徴とする請求項９に記載のビデオを圧縮する方法。
【請求項１１】
バッファーモデルの占有率レベルに応じて、マクロブロックに対するQPの値と閾値との間の比較に使われる閾値を適応させて調整することを含むことを特徴とする請求項９に記載のビデオを圧縮する方法。
【請求項１２】
発生したビットの流れに対応する量子化テーブルの提供を必要としないようなビデオデコーダに明白な方法でDCT係数のローパスフィルタリングが生じることを特徴とする請求項１に記載のビデオを圧縮する方法。
【請求項１３】
効果的にビデオを圧縮するビデオエンコーダであって、
周波数ドメインにおいてマクロブロックのDCT係数を選択的にローパスフィルタリングする手段と、
ローパスフィルタリングしたDCT係数を量子化する手段
を含むことを特徴とするビデオを圧縮するビデオエンコーダ。
【請求項１４】
ローパスフィルタリングしたDCT係数を量子化するのに使われる量子化パラメータ（QP）の値を、計算されたQPが予め定められたレベルを上回ると低くするように予め定められたレベルに選択的に制限する手段を含むことを特徴とする請求項１３に記載のビデオを圧縮するビデオエンコーダ。
【請求項１５】
バッファーモデルの占有率レベルに応じて、少なくとも部分的に選択的なローパスフィルタリングが実行される手段を含むことを特徴とする請求項１３に記載のビデオを圧縮するビデオエンコーダ。
【請求項１６】
実行中のQPの平均値と閾値との比較値に応じて、画像の全てのマクロブロックのDCT係数を選択的にローパスフィルタリングする手段を含むことを含むことを特徴とする請求項１３に記載のビデオを圧縮するビデオエンコーダ。
【請求項１７】
実用メディアで具体化されているコンピュータプログラムであって、
周波数ドメインにおいてマクロブロックのDCT係数を選択的にローパスフィルタリングするインストラクションを持つモジュールと
ローパスフィルタリングしたDCT係数を量子化するインストラクションを持つモジュールと
を含むことを特徴とするコンピュータプログラム。
【請求項１８】
ローパスフィルタリングしたDCT係数を量子化するのに使われる量子化パラメータ（QP）の値を、計算されたQPが予め定められたレベルを上回ると低くするように予め定められたレベルに選択的に制限するインストラクションを持つモジュールを含むことを特徴とする請求項１７に記載のコンピュータプログラム。
【請求項１９】
バッファーモデルの占有率レベルに応じて、少なくとも部分的に選択的なローパスフィルタリングが実行されるインストラクションを持つモジュールを含むことを特徴とする請求項１７に記載のコンピュータプログラム。
【請求項２０】
実行中のQPの平均値と閾値との比較値に応じて、画像の全てのマクロブロックのDCT係数を選択的にローパスフィルタリングするインストラクションを持つモジュールを含むことを特徴とする請求項１７に記載のコンピュータプログラム。
【請求項２１】
ビデオをエンコーディングする回路であって、
周波数ドメインにおいてマクロブロックのDCT係数を選択的にローパスフィルタリングする構成の回路と、
ローパスフィルタリングしたDCT係数を量子化する構成の回路と
を含むことを特徴とするビデオをエンコーディングする回路。
【請求項２２】
ローパスフィルタリングしたDCT係数を量子化するのに使われる量子化パラメータ（QP）の値を、計算されたQPが予め定められたレベルを上回ると低くするように予め定められたレベルに選択的に制限するように構成された回路を含むことを特徴とする請求項２１に記載のビデオをエンコーディングする回路。
【請求項２３】
バッファーモデルの占有率レベルに応じて、少なくとも部分的に選択的なローパスフィルタリングが実行されるように構成された回路を含むことを特徴とする請求項２１に記載のビデオをエンコーディングする回路。
【請求項２４】
実行中のQPの平均値と閾値との比較値に応じて、画像の全てのマクロブロックのDCT係数を選択的にローパスフィルタリングするように構成された回路を含むことを特徴とする請求項２１に記載のビデオをエンコーディングする回路。
【請求項２５】
請求項２１に記載されたビデオをエンコーディングする回路を備えたビデオエンコーダ。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ビデオエンコーディング技術に関する。特に、離散的余弦変換（DCT）係数に適応したフィルタリングに関する。
【背景技術】
【０００２】
ビデオ信号の伝送や格納について、低いデータレートあるいはより少ない格納領域とするために、様々なデジタルビデオ圧縮技術が起こってきた。そのようなビデオ圧縮技術は、H.261, H.263, H.263+, H.263++, H.264, MPEG-1, MPEG-2, MPEG-4, MPEG-7
などの国際標準規格を含む。これらの圧縮技術は、離散的余弦変換（DCT）技術や動作補償（ＭＣ）技術などにより、比較的高い圧縮率を達成している。そのようなビデオ圧縮技術により、ビデオデータの流れが様々なデジタルネットワーク、例えば、携帯電話のネットワーク、コンピュータネットワーク、ケーブルネットワーク、サテライト経由のネットワークなどに効果的に適用されている。また、ハードディスク、光ディスク、ビデオコンパクトディスク（VCDs）、デジタルビデオディスク（CVDs）などの記憶メディアにも効果的に適用されている。エンコードされたデータの流れは、そのエンコードされたデータの流れのシンタックスと合致するビデオ再生装置によって再生される。
【０００３】
他と比較して高画質にするには、ビデオ再生装置は、他と比較して多くのデータを必要とする。しかし、ビデオデータを伝送するネットワークによって再生可能なデータレートが制限される。例えば、直接サテライト放送(DBS)システムでのデータチャンネルあるいはデジタルケーブルテレビネットワークでのデータチャンネルは、一般的には、一定のビットレート（CBR）でデータを送っている。さらに、ディスクの格納容量も、画像を再生可能なビット容量にするように強いられる。
【０００４】
その結果、ビデオの再生プロセスは、しばしば、画質と画像圧縮に必要なビット数とのトレードオフとなる。さらに、ビデオ再生は複雑である。例えば、ソフトウエアで実行しようとすると、ビデオ再生プロセスは、他と比較して多くのCPUサイクルを必要とする。その上に、リアルタイムで再生しようとすると、時間的な制約が再生実行時の複雑さを制限し、達成できる画質が制限される。
【０００５】
レートコントロールでの通常の方法と再生プロセスでの量子化コントロールとがMPEGソフトウエアシミュレーショングループ（MSSG）のテストモデル５（TM5）の第１０章に記載されている。TM5には幾つかの欠点がある。その欠点の例としては、TM5は、ビデオバッファーベリファイヤ（VBV）との適合性が保証されていない。そのために、デコーダバッファーのオーバーランニングやアンダーランニングが生じて、予期しない画像のフリーズやデータの毀損が発生する。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明の目的は、デコーダのバッファーオーバーランニングやバッファーアンダーランニングを無くすかまたは低減して、しかも低コストで高速にリアルタイムで、データ圧縮が可能なエンコーダにおけるデータ処理方法とエンコーダの提供である。
【課題を解決するための手段】
【０００７】
本発明は、離散的余弦変換（DCT）係数の選択的フィルタリングを提供する方法と装置に関する。徹底的なピクセルドメイン（タイムドメイン）の操作よりも、DCT係数のフィルタリングが、周波数ドメインで効果的に働くことが優れている点である。DCTフィルタリングは、DCTエンコーディングにおいて、インループで動作するものであり、エンコーディングループと独立した前段工程でのアプローチではない。DCTフィルタリングは、画像再生に使用されるビット数を、優れて減少させることができ、しかも、通常の技術が画質を改善するために、量子化パラメータQPの値を増加させるのに対して、DCTフィルタリングは、バッッファーの占有レベルとの適合性を保持できる。
【０００８】
本発明は、ビデオ信号を効果的に圧縮する方法であり、周波数ドメインにおけるマクロブロックのDCT係数を選択的にローパスフィルタリングすることと、ローパスフィルタリングされたDCT係数を量子化することとを含む。
【０００９】
本発明は、ビデオ信号を効果的に圧縮するビデオ再生装置であり、周波数ドメインにおけるマクロブロックのDCT係数を選択的にローパスフィルタリングする手段と、ローパスフィルタリングされたDCT係数を量子化する手段とを含む。
【００１０】
本発明は、実際のメディアで実行されるコンピュータプログラムであり、周波数ドメインにおけるマクロブロックのDCT係数を選択的にローパスフィルタリングするためのインストラクションからなるモジュールと、ローパスフィルタリングされたDCT係数を量子化するためのインストラクションからなるモジュールとを含む。
【００１１】
本発明は、ビデオ再生回路であり、周波数ドメインにおけるマクロブロックのDCT係数を選択的にローパスフィルタリングするための回路構成と、ローパスフィルタリングされたDCT係数を量子化するための回路構成とを含む。
【発明の効果】
【００１２】
本発明によれば、デコーダのバッファーオーバーランニングやバッファーアンダーランニングを無くすかまたは低減して、しかも低コストで高速にリアルタイムで、データ圧縮が可能となる。
【発明を実施するための最良の形態】
【００１３】
図１に画像の列102を示す。この発明の実施例では、MPEG-2と画像の関係で記述しているが、その原理と利点は、H.261, H.263, H.264,
MPEG-1, MPEG-4,などを含む、既に開発されている他のビデオ標準規格にも適用できる。ここで使われる「画像」というのは、イメージ、フレーム、ビジュアルオブジェクトプレーン（VOPs）などを含む。ビデオの列は周期的に取得される複数のビデオイメージを含む。フレームが表示されるレートが、画像レートまたはフレームレートとして参照される。画像の列における画像は、インタレースまたはノンインタレース（すなわち連続したイメージ）に対応している。インタレースイメージでは、それぞれのイメージが２つの分離したフィールドを組み合わせて作られる。ノンインタレースあるいは連続したイメージでは、そのようなことは行わない。
【００１４】
画像の列102は動画または他の表現に対応している。画像の列102は、動画のような決まった間隔であったり、または、直接サテライト放送（DSB）システムのような間隔が決まっていないものもある。直接サテライト放送（DSB）システムの例は、DIRECTVとして知られている。図１に示すように、画像の列102の画像は、第１の画像グループ104に示すような画像グループのユニットにプループ化されている。第１の画像グループ104の最初の画像106は、Ｉ―画像に対応する。画像グループの他の画像はＰ−画像とかＢ−画像に対応する。
【００１５】
MPEG-2では、一つの画像は、さらにマクロブロックという小さなユニットに分割されている。MPEG-4のような他のビデオ標準では、ビジュアルオブジェクトプレーン（VOPs）のような他のユニットに分割されている。MPEG-2に話を戻すと、Ｉ―画像は、他の画像からのデータを使わないで、イメージが構成されるような内部でコード化されたマクロブロックのみからなる画像である。Ｐ−画像は、内部でコード化されたマクロブロックまたは先を予測してコード化されたマクロブロックからなる画像である。Ｐ−画像のためのマクロブロックは、画像自身のデータすなわち内部でコード化されたデータ、または画像の列における先のデータすなわち先を予測してコード化されたデータを基にエンコードとデコードが行われる。Ｂ−画像は、内部でコード化されたマクロブロック、先を予測してコード化されたマクロブロック、後を予測してコード化されたマクロブロック、または、先を予測してコード化されたマクロブロックと後を予測してコード化されたマクロブロックの組み合わせ（すなわち内挿したもの）からなる画像である。画像の列のエンコードとデコードが行われる間、Ｂ−画像がエンコードとデコードを行う裏で、Ｉ―画像とＰ−画像とのエンコードとデコードが行われる。内部でコード化されたマクロブロックに加えて先を予測してコード化されたマクロブロックを使う利点は、内部でコード化されたマクロブロックのみを使う場合に比較して、使われるビット数が劇的に減少することである。
【００１６】
マクロブロックには、輝度の要素と色の要素を格納するセクションが含まれている。通常、ビデオデータの流れには、エンコードとデコードが行われる音声データが含まれている。
【００１７】
図２に、この発明の実施例として使われるエンコーディング環境の例を示す。エンコードされていないビデオソース202がエンコーダ204に入力される。エンコードされていないビデオソース202には、以下に限定されるものではないが、ビデオカメラ、ビデオテープ、フィルム、コンピュータで作成されたソース、など多くのデバイスがある。エンコードされていないビデオソース202は、エンコードされたビデオデータをデコードするデコーダを含んでいる。エンコードされていないビデオソース202は、エンコーダ204に外部入力されるかエンコーダ204にハードウエアとして組み込まれている。他の例では、エンコードされていないビデオソース202には、TiVoとして知られているセットトップボックスのようなデジタルビデオレコーダからアナログイメージをサンプリングしてアナログ信号とするアナログ放送テレビ受像器がある。
【００１８】
エンコーダー204にも様々な形式がある。例えば、専用ソフトあるいは汎用コンピュータのソフトで動く専用集積回路（ASIC）のような専用のハードウエアがある。ソフトはハードディスクや光ディスクのような有形のメディアで実行されるインストラクションを含む。さらに、エンコーダー204には、直接サテライト放送（DBS）システムやデジタルケーブルネットワークで使用されるマルチエンコードチャンネルに提供されるエンコーダがある。例えば、エンコーダ204の出力は、図２に示すように、他のエンコーダの出力とともにサーバ206に入力される。サーバ206では、エンコードされたデータの列が、マス格納器208、DVD編集可能なDVD210やビデオCD（VCD）などの光ディスクに格納される。また、サーバ206は、データを、直接サテライト放送（DBS）システムのサテライト214へアップリンク212を経由して、またインターネット216のユーザへ提供する。エンコードされたデータ列は、ローカルネットワーク（LANs）、広域ネットワーク（WANs）無線ネットワーク、地上波テレビ放送、携帯電話網、ダイアルアップ網、ピアツーピアネットワークなど様々なメディアに配送される。一実施例では、エンコーダ204は画像の列をリアルタイムでエンコードする。もう一つの実施例では、エンコーダ204は画像の列を非同期でエンコードする。エンコーダ204の環境は、デジタルビデオレコーダ、デジタルビデオカメラ、ビデオエンコーダ専用ハードなどを含んで組み合わせられる。
【００１９】
図３に、デコーディング環境の例を示す。それらは、ビデオバッファーベリファイア（VBV）バッファーによるエンコーディングプロセスで形成されるデコーダバッファーを含む。エンコードされた画像の列は、広い環境でデコードされて見ることができる。それらの環境には、サテライトのアンテナ302とセットトップボックスとを経由した直接サテライト放送（DBS）の信号受信、デジタルビデオレコーダの再生、DVDプレーヤー304の再生、地上デジタル放送の受信などがある。例えばテレビ受像器306では、イメージを見ることが出来て、様々な表示装置が使用されている。
【００２０】
例えば、パソコン308、ラップトップパソコン310、携帯電話機312などでは、そのイメージを見ることができる。一実施例では、これらのデバイスは、インターネット216を経由して、ビデオイメージを受信できる構成になっている。インターネット216は、有線および無線のネットワークを経由してアクセスできる。
【００２１】
図４に、エンコーダ402、エンコーダバッファー404、デコーダ406、デコーダバッファー408、一定ビットレートデータチャンネル410の関係を示す。もう一つの実施例では、一定ビットレートデータチャンネルのビットレートは、多重データチャンネル間のダイナミックなデータレート割り当てに依存してチャンネル間で僅かに違ってくる。この応用では、多重データチャンネル間のダイナミックなデータレート割り当ておこるビットレートの僅かな違いは、一定ビットレートとみなされる。例えば、エンコーダ402は、直接サテライト放送（DBS）システムにおける計画されたチャンネルのためのエンコーダに対応し、デコーダ406は、直接サテライト放送（DBS）の信号受信用セットトップボックスのデコーダに対応する。熟練した実務者は、実際のビデオデータでの一定ビットレートデータチャンネル410のビットレートは、一定ビットレートデータチャンネル410自身のビットレートより小さいと評価している。なぜならば、実際の伝送データには、誤り訂正やデータパッケージングなどのオーバーヘッドが含まれているからである。熟練した実務者は、ここで記述されている方法は、MPEG標準文書に記載されている一定ビットレートエンコーディングだけでなく、可変ビットレートエンコーディングにも適用できると評価している。可変ビットレートの場合、伝送ビットレートは、デコーダバッファーのデータを配送する最大ビットレートとともに、数秒、数分、数時間、あるいは適当な時間間隔での平均的なビットレートとして記述される。データは、デコーダバッファーが満杯になるまでは、最大ビットレートでチャンネルからデコーダバッファーに送られる。その時点で、データチャンネルは、次の画像がデコードされてデコーダバッファーからデータが取り除かれるまで待って、デコーダバッファーへのデータ送信に戻る。「ビットレート」は、以後、一定ビットレートまたは、可変ビットレートの長時間平均とする。一定ビットレートエンコーダの一実施例では、エンコーダは、１画像グループでは比較的一定ビットレートのデータの流れを生成する。
【００２２】
直接サテライト放送（DBS）システムのようなデータが流れる用途、または、ホームデジタルビデオレコーダのようなライブ放送のレコーディングの用途では、エンコーダ402はリアルタイムでビデオイメージを受信してデコードする。エンコーダ402の出力は、可変ビットレート（VBR）出力412に対応する。エンコーダ402の可変ビットレート（VBR）出力412は、エンコーダバッファー404に一時的に格納される。エンコーダバッファー404とデコーダバッファー408の機能は、異なったデータレートで格納されたり、更新されたデータを一時的に保持することである。エンコーダバッファー404とデコーダバッファー408とはマッチする必要はなく、エンコーダバッファー404はビデオバッファーベリファイア（VBV）とは違うバッファーである。ビデオバッファーベリファイア（VBV）は、エンコディングプロセスで、デコーダバッファー408の占有率を形成するエンコーダ402によって使用される。
【００２３】
エンコーダバッファー404は、専用メモリまたはパソコンのシステムメモリのような共有システムメモリに設定される。エンコーダバッファー404に使うメモリが共有されるとき、エンコーダバッファー404は「仮想バッファー」と呼ばれる。マス格納器のような大きなメモリは、ビデオデータの流れやその部分に使われる。
【００２４】
エンコーダバッファー404は、エンコードされたデータが一定ビットレートデータチャンネル410を経由してデコーダ406に送られるとき、エンコーダ402の可変ビットレート（VBR）出力412の比較的短時間でのゆらぎを緩和する。同様に、デコーダバッファー408は、一定ビットレートデータチャンネル410の比較的一定ビットレートでのエンコードされたデータを受信し、必要なら可変ビットレートで使われるデコーダ406に送る。デコーダバッファー408もまた、専用メモリまたはパソコンのシステムメモリのような共有システムメモリに設定される。メモリが共有されるとき、デコーダバッファー408は仮想バッファーに対応する。
【００２５】
MPEG標準はデコーダバッファー408のサイズを規定している。デコーダバッファー408のサイズは、MPEGコンプライアントデータの流れが、標準デコーダでのデコードが信頼されるように規定されている。MPEG-2標準では、DVDのエンコーディングに使われる例だと、バッファーサイズは約224 kBである。MPEG-1標準では、ビデオコンパクトディスク（VCD）のエンコーディングに使われる例だと、バッファーサイズは約40 kBである。通常、エンコーダバッファー404やデコーダバッファー408の実際のサイズは、標準規格とは違って、ハードの設計者やソフトの開発者によって決められる。
【００２６】
デコーダバッファー408の実際のサイズが標準規格とは違っているといっても、デコーダバッファー408のサイズと占有率に影響する実際的な限界がある。デコーダバッファー408のサイズが増えると、それに応じて、データ列が選択され、再生が始まるときの遅れも増えることになる。例えば、ユーザが直接サテライト放送（DBS）のセットトップボックスでチャンネルを変えたり、DVDで前後にスキップしたりするときに、再生のためにデコーダ406により、以前に更新されたデータがデコーダバッファー408に格納されている。デコーダバッファー408が大きなサイズのとき、データ列の選択と再生に激怒するほど長い時間の遅れを生じる結果となる。さらに、後に図５と関連付けて述べるように、デコーダバッファー408がデータで満杯になる前に再生が始まるようにできる。
【００２７】
一実施例では、ダータ列の再生が２つの条件の早い方で始まる。第１の条件は、MPEGのデータ流れで規定された時間である。vbv-delayとして知られているMPEGのデータ流れを規定するパラメータは、デコーダ406により再生が開始される前のデコーダバッファー408に格納されるデータの時間長を提供する。vbv-delayパラメータは、０から65,535のレンジの１６ビット数に対応する。vbv-delayパラメータの値は、９０ｋＨｚクロック信号によるデコーダ406でカウントダウンされる。したがって、全体の時間遅れは、90,000に分割された値に対応するvbv-delayパラメータで規定される。例えば、最大値65,535のときは、約728msの時間遅れになる。デコーダバッファー408がデータで満杯になる以外の時間で、vbv-delayは再生を開始でき、デコーダバッファー408は低い占有率でもよい。
【００２８】
第２の条件は、デコーダバッファー408の充満度に対応する。デコーダバッファー408が満杯になった後、続いてデータが送られてきて、デコーダバッファー408が空にならないと、デコーダバッファー408に格納されたデータが失われるおそれがある。データのロスを防止するために、デコーダ406は、vbv-delayパラメータで規定された時間より早い時間で再生を開始できる。例えば、デコーダバッファー408のサイズが規定の224 kBで、ビットレートが2.54 Mbpsを越えるとき、デコーダバッファー408が満杯になる時間は、vbv-delayパラメータで規定された最大時間より短くなる。
【００２９】
MPEG仕様におけるVBVバッファーの概念は、データの流れが、デコーダバッファー408でのオバーランやアンダーランを生じさせないように、MPEGデータの流れを規制している。VBVバッファーは、実際のバッファーではなく、実際にデータを格納するわけでもない。しかし、VBVバッファーの概念の存在にもかかわらず、ビデオエンコーディング技術は、MPEGのテストモデル５（TM5）がVBVコンプライアンスを保証できないし、オバーランやアンダーランが生じる。
【００３０】
デコーダバッファー408のアンダーランは、デコーダバッファー408がデータの外を走るときに起こる。これは、一定ビットレートデータチャンネル410のビットレートが、比較的長時間で、デコーダ406によって費されるデータのビットレートより小さいときに起きる。これはまた、エンコーダ402が、規定されたビットレートに関連してデータ列をエンコードするのに、多すぎるビットを使ったときに発生する。デコーダバッファー408のバッファーアンダーランニングは、画像の列の一時的なフリーズとして見える。
【００３１】
デコーダバッファー408のオバーランは、デコーダバッファー408が格納できる以上のデータを受信したときに起きる。これは、一定ビットレートデータチャンネル410のビットレートが、比較的長時間で、デコーダ406によって費されるデータのビットレートを越えるときに起きる。これはまた、エンコーダ402が、規定されたビットレートに関連してデータ列をエンコードするのに、少なすぎるビットを使ったときに発生する。その結果、デコーダバッファー408は一定ビットレートデータチャンネル410からのデータを全て格納できなくなり、データのロスが生じる。このタイプのバッファーオバーランは、「ビットスタッフィング」によって防止できる。それは、デコーダ406で使われるビット数が、比較的長時間で、一定ビットレートデータチャンネル410により送られるビット数とマッチするように、デコーダ406で使われないデータを送ることである。しかし、ビットスタッフィングは、後に図９Ａ、９Ｂと関連して述べるような他の問題を生じる。
【００３２】
VBVバッファーモデルの概念は、デコーダバッファー408におけるオバーランやアンダーランを生じないようなビデオデータの流れを作るようにエンコーダ402で使われる。一実施例では、VBVバッファーモデルの占有率が、デコーダバッファー408におけるオバーランやアンダーランを生じないようにビデオデータの流れをモニターされる。エンコーダバッファー404におけるオバーランやアンダーランとデコーダバッファー408におけるオバーランやアンダーランとは同じでないことを銘記するべきである。例えば、デコーダバッファー408におけるアンダーランを生じる条件、すなわち、持続した時間の間で、一定ビットレートデータチャンネル410のビットレートを越えるエンコードされたビットレートが、エンコーダバッファー404のバッファーオバーランになる。さらに、デコーダバッファー408におけるオーバーランを生じる条件、すなわち、持続した時間の間で、一定ビットレートデータチャンネル410のビットレートが上回るビットレートが、エンコーダバッファー404のバッファーアンダーランになる。
【００３３】
図５は、デコーダが可変ビットレートで費やされたときに、デコーダバッファーに一定ビットレートでデータが送られた場合のデコーダバッファー占有率を表すチャートである。MPEG  TM5を基本とした一般的システムでは、デコーダバッファーがオバーランやアンダーランの条件を防ぐようになっていないので、デコーダに送られたデータの流れは保証されない欠点がある。図５に示されている例では、データが一定ビットレートでデコーダバッファーに送られ、ビデオをリアルタイムで表示するのに、デコーダがそのデータを使っている。
【００３４】
横軸は時間（ｔ）502である。右方向に時間が経過する。縦軸はデコーダバッファー占有率である。最初、デコーダバッファーは空である。バッファーの最大レベルは、ＢMAX528で表される。エンコーダが、バッファーの中のデータの流れを最大レベルＢMAX528と空のレベルの間に維持するように生成するのが望ましい。例えば、プログラム中でのスキップ、直接サテライト放送（DBS）システムやデジタルケーブルテレビネットワークでのチャンネル変更に反応して、デコーダバッファーがフラッシュされる。デコーダはSCR（0）506から始まるシステムクロック参照データ（SCR）をモニターしている。システムクロック参照データ（SCR）はエンコーダによるビットの流れにタイムスタンプとして埋め込まれる。また、ビデオ情報のタイムスタンプと同期させるために、デコーダによってビットの流れに埋め込まれる。タイムスタンプは、ビデオ情報がデコードされる時刻、表示される時刻などを指示し、画像と音声との同期をとるのに使われる。
【００３５】
一般に、リアルタイムビデオエンコーディングで使用される画像パターンの例には、IBBPBBPBBPBBPBBのような繰り返しパターンがある。Ｉ−画像が比較的多くのデータを費やすにもかかわらず、直接サテライト放送（DBS）システムのチャンネル変更後、比較的短時間で画像が表示されるのは、例示のようなＩ―画像の繰り返し使うのに負うことが大きい。
【００３６】
画像の提示あるいは表示の順は、エンコーディングとデコーディングの順から変えることができる。Ｂ―画像は、提示順においてＢ―画像の後に生じるＩ−とＰ−画像が、Ｂ―画像のエンコーディング、送信、デコーディングに先だってエンコードされ、送信され、デコードされるので、背後にあるＩ−とＰ−画像に依存し、他のＢ―画像には依存しない。例えば、図５に示す列の比較的小さな一部がIPBBPの順の画像データを含んでおり、画像がIBBPBBPBBPBBPBBの順で表示されても、Ｂ―画像に依存してＰ−画像が、Ｂ―画像のエンコーディングとデコーディングに先だってエンコード、デコードされる。ビデオ提示におけるオーディオデータは列からはずれて並べられることはない。表１は時間に従ってデコーダの動作を整理したものである。示されたGOPはIPBBPを持つものとして記述されているが、GOPｓは、図５に関連して記述された５つの画像より多くの画像を含む。
【表１】
2005102170.tif 000003
【００３７】
一つの実施例では、デコーダバッファーは、Ｉ―フレームがデコードされるためのタイムスタンプ（PTS）とともに画像ヘッダが検出されるまではデータを無視する。図５では、この時間はTTS０(0)508で指定される。このデータのバイパスは、画像あるいはフレームの部分、自身ではデコード出来ないデータのバッファリングのためにデータをバッファリングするのを防ぐ。時間TTS０(0)508の後、デコーダバッファーは、Ｒ０510で示される傾斜でデータを蓄積し始める。
【００３８】
τ０(0)512の間、デコーダバッファーは、データを使い始める前のデータを蓄積する。このτ０(0)512はプリローディングディレイとして知られている。図５での時間軸にそっての時間間隔は、フレームレートの逆数あるいはガゾウレートの逆数（１/Ｒｆ）514である。後で述べるように、画像の時刻の位置は、対応する画像のタイムスタンプで指示される。Ｔ０516の時間で、デコーダは最初の画像グループ（GOP）に対応して全てのデータを更新して、Ｉ−画像とする。データの流れは、タイムスタンプ（PTS）のエンーディングにおけるＩ−画像をデコードする時間を特定する。それは、タイムスタンプDTS0(0)518と時間Ｔ０516として特定される。
【００３９】
Ｉ−画像に対応するデータの更新は、デコーダバッファー占有率をシャープに減少させる520。デコーダバッファーからのデータの引き出しは、図５に示すように、瞬時に起こるが、通常の技術でわかるように、データの更新には僅かな時間しかかからない。Ｉ−画像では、多くのデータを費やすのに対して、Ｐ−画像とＢ−画像では、比較的少ないデータを費やす。しかし、熟練した実務者は、内部マクロブロックが、Ｉ−画像と同じように、Ｐ−画像とＢ−画像でも多くのデータを費やし、Ｐ−画像とＢ−画像が比較的多くのデータを費やすと評価している。時間Ｔ０516でデコードされたＩ−画像は、時間Ｔ０516ではまだ表示されないで、タイムスタンプDTS0(１)522の提示が時間Ｔ１524での提示を特定する。
【００４０】
時間Ｔ１524では、時間Ｔ０516でデコードされたＩ−画像に対応する画像を表示する。時間周期PTS＿オフセット526は、デコーダバッファーで、最初選択した１番目の画像を提示する列のデータを蓄積し始めてから表示までの遅れ時間を表している。デコーディングタイムスタンプDTS0(１)530は、時間Ｔ１524で、最初のＰ−画像をデコードするようにデコーダに指示する。デコーダバッファーからのデータの引き出しは、バッファー占有率をシャープに減少させる532ことが示されている。時間Ｔ０516と時間Ｔ１524の間で、デコーダバッファーは、傾斜534で示されるようなデータの蓄積を行う。タイムスタンプDTS0(４)536は、時間Ｔ４538でＰ−画像を表示するようにデコーダに指示する。この例では、最初のＰ−画像は、後の予測、先の予測あるいは両方向の予測からエンコードされたマクロブロックを含むＢ−画像を提示するよりも早い時間にデコードされている。
【００４１】
時間Ｔ２540では、デコーダは、タイムスタンプDTS0(2)542で特定される最初のＢ−画像をデコードして表示する。デコーディングと提示とが同じ時間領域で起こると、タイムスタンプ（DTS）はデコーディングされない。実際のデコーダでは、デコーディングと表示との間の遅れは、計算時間や他の遅れをカウントしても少しの遅れである。Ｂ−画像で使われるデータは、最初のＢ−画像のデコーダバッファー占有率での小さな減少550で示されるように、比較的小さい。しかし、Ｂ−画像は、内部マクロブロックを含み、比較的大きなデータを消費する。
【００４２】
時間Ｔ３546では、デコーダは、タイムスタンプDTS0(3)548で特定される２番目のＢ−画像をデコードして表示する。
【００４３】
時間Ｔ４538では、時間Ｔ１524で最初にデコードされたＰ−画像を、デコーダは表示する。時間Ｔ４538では、デコーダは、２番目のＰ−画像のデコーディングタイムスタンプDTS0(4)554で特定される２番目のＰ−画像をデコードする。２番目のＰ−画像は、図示されないタイムスタンプの提示により、後で表示される。デコーダは、さらに他の画像をデコードして表示し続ける。例えば、時間Ｔ５544では、デコーダは、データの流れにしたがって、Ｂ−フレームをデコードして表示する。
【００４４】
（レートコントロールと量子化コントロールプロセス）
図６は、ビデオエンコーダにおけるレートコントロールと量子化コントロールプロセスを示すフローチャートである。この発明の趣旨と範囲から離れない様々な方法での変形が熟練した実務者により評価されるであろう。例えば、もう一つの実施例では、示されたプロセスの部分の組み合わせ、替わりの順番の入れ替え、削除などができる。さらにもう一つの実施例では、プロセスの一部を、テストモデル５の１０章に記載されているレートコントロールと量子化コントロールプロセスに置き換えられる。画像のエンコードに費やすビットレートがエンコーディング時のデコーダバッファー占有率に影響する。図６の括弧で表示されているように、プロセスの部分は、ビットの割付、レートコントロールと量子化コントロールプロセスである。ビットの割付は、画像をエンコードするときのビット数の見積もりに関係する。レートコントロールは、マクロブロックのエンコードに使われる参照量子化パラメータＱｊの決定に関係する。適応量子化は参照量子化パラメータＱｊで変形するために、マクロブロックの空間的機能を解析することに関係し、マクロブロックの量子化に使われる量子化パラメータmquantｊの値を計算する。
【００４５】
プロセスは、状態602から始まり、そのプロセスは最初の画像グループを受け取る。一つの実施例では、プロセスは、状態602の最初の画像グループの部分にのみ更新してもよく、残りの部分は後で更新できる。画像がレートコントロールと量子化コントロールプロセスに入る前に、画像はグループ化される。画像グループは、Ｉ−画像で始まり、ほかの画像を含む。必ずしも必要ではないが、一般的には、画像グループの中の他の画像はＩ−画像に関係する。プロセスは、状態602から状態604に進む。
【００４６】
状態604では、画像グループのなかの画像に適用されるエンコーディングのモードまたはタイプを更新する。レートコントロールと量子化コントロールプロセスで示されているように、画像グループのなかの画像に適用されるエンコーディングのモードまたはタイプを決めることが、画像がレートコントロールと量子化コントロールプロセスに入る前になされる。例えば、図５において先に記載した画像グループはIPBBPのタイプを持っている。プロセスは、状態604から状態606に進む。
【００４７】
状態606では、プロセスは、エンコードされる画像グループに、Ｐ−画像の番号ＮｐとＢ−画像の番号Ｎｂとを設定する。例えば、タイプIPBBPをもつ画像グループでは、２つのＰ−画像と２つのＢ−画像があるので、ＮｐとＮｂとはそれぞれ２となる。画像グループのなかのＩ−画像だけは最初の画像であるから、Ｉ−画像の番号はたどる必要はない。プロセスは、状態606から状態608に進む。
【００４８】
状態608では、プロセスは、複合評価値Ｘｉ、Ｘｐ、Ｘｂの値と、エンコードされる画像グループに割り当てられたビットの残留数Ｒを初期化する。一つの実施例では、複合評価値Ｘｉ、Ｘｐ、Ｘｂの値は、数式１、数式２、数式３にしたがってプロセスが初期化する。
【数１】
2005102170.tif 000004
【数２】
2005102170.tif 000005
【数３】
2005102170.tif 000006
【００４９】
数式１、数式２、数式３において、可変ビットレートbit_rateは、データチャンネルの相対的な一定のビットレートに対応し、先に図４で記述した一定ビットレートデータチャンネル410に対応する。もう一つの実施例では、bit_rateは、平均値あるいは可変ビットレートチャンネルの好ましい平均ビットレートに対応する。さらに、もう一つの実施例では、bit_rateは、可変ビットレートチャンネルのピースワイズ一定ビットレートの値に対応する。
【００５０】
一つの実施例では、シーケンスの開始でのビットの残留数Ｒに初期値Ｒ0が、すなわち最初の画像グループのエンコーディングのまえの初期値Ｒが初期値Ｒ0として、数式４にしたがって設定される。シーケンスの開始では、その前の画像グループはないので、前の画像グループから持ち越されるビットの残留数もない。さらに、ビットの残留数Ｒの更新はあとで述べる数式27と数式28に関係している。
【数４】
2005102170.tif 000007
【数５】
2005102170.tif 000008
【００５１】
変数Ｇは、画像グループの提供時間の長さに対応する時間内に、データチャンネルによって転送されるビット数を表す。この時間は、画像グループの画像数にしたがって変化する。式５において、可変ビットレートbit_rateは、１秒あたりのビット数であり、Ｎの値は、（全てのタイプの）画像グループの画像数に対応し、可変piture_rateは１秒あたりの画像またはフレーム数である。プロセスは、状態608から状態610に進む。
【００５２】
状態610では、プロセスは、ビットの初期目標数Ｔｉ、Ｔｐ、Ｔｂ、すなわちエンコードされる画像に対する初期目標ビットの割付を計算する。画像グループ内の画像は、Ｂ−画像がエンコードされるとき、シーケンスからはずれてエンコードされる。一つの実施例では、レートコントロールと量子化コントロールプロセスが、エンコードされる画像タイプに応じて、数式６、数式７、数式８にしたがって、初期目標ビットの割付を計算する。
【数６】
2005102170.tif 000009
【数７】
2005102170.tif 000010
【数８】
2005102170.tif 000011
【００５３】
数式６では、Ｔｉは、画像が、画像グループをスタートするＩ―画像であるとき、エンコードされる次の画像に対する目標ビットの割付に対応し、数式中の２つの括弧で表された大きい方の値に決められる。数式７では、Ｔｐは、次の画像がＰ―画像であるとき、エンコードされる次の画像に対する目標ビットの割付に対応する。数式８において、Ｔｂは、画像がＢ―画像であるとき、画像に対する目標ビットの割付に対応する。「普遍値」の値ＫｐとＫｂは、画像をエンコードするときに使う量子化マトリックスに依存する。ＫｐとＫｂの値は変化する。一つの実施例では、ＫｐとＫｂの値はそれぞれ1.0と1.4である。もう一つの実施例では、これらの定数は、動きの量やタイプ、模様、イメージの細部などの画像の特性にしたがって変えられる。
【００５４】
レートコントロールと量子化コントロールプロセスの１実施例では、プロセスは、後に図７で詳細に述べるように、デコーダバッファーの見積られたバッファー占有率にしたがって最初の目標ビット割り当てから、次の目標ビット割り当てＴ（ｉ、ｐ、ｂ）を調整する。
【００５５】
プロセスが次の画像に対する目標ビット割り当てを決めたときに、プロセスは、状態610から状態612に進む。画像に対する割り当てられたビットは、さらに、画像のマクロブロック間でも割り当てられる。このマクロブロックビット割り当ては、TM5に記載されているような通常技術、あるいは後の状態614で詳しく述べる技術で計算できる。さらに、マクロブロックにエンコードするとき、いろいろな優れた順番とかシーケンスが、後に図８Ａ、８Ｂで詳細に記載される。
【００５６】
状態612では、プロセスは、仮想バッファーの充満度の初期値を設定する。１実施例では、それぞれの画像タイプの仮想バッファーがある。変数ｄij、ｄpj、ｄbjはそれぞれＩ―画像、Ｐ―画像、Ｂ―画像、の仮想バッファーの充満度を表す。変数ｊは、エンコードされているマクロブロックの番号を表し、１の値から始まる。初期条件でのｊは０である。仮想バッファーの充満度、すなわちｄij、ｄpj、ｄbjは、ｊ番目のマクロブロックをエンコードする前の仮想バッファーの充満度、すなわちｊ−１番目のマクロブロック仮想バッファーの充満度に対応する。
【数９】
2005102170.tif 000012
【数１０】
2005102170.tif 000013
【数１１】
2005102170.tif 000014
【００５７】
数式９におけるリアクションパラメータｒの値の計算例を数式１２に示す。熟練した技術者は、リアクションパラメータｒを他の式で計算することも出来る。
【数１２】
2005102170.tif 000015
【００５８】
数式１１，数式１２におけるＫｐ、Ｋｂは式６−８で述べた「普遍定数」である。プロセスは、状態612から状態614に進むか、状態614に関連して状態616にスキップする。
【００５９】
プロセスは、Intra、Inter_No_MC、Inter_MC、などのエンコードされるマクロブロックを決めるためのマクロブロックモード決定622を含む。タイプのモードには様々な要素があり、例えば、画像がインタレースかインタレースでないかなどの画像のタイプによる。マクロブロックモード決定は、他に並行して状態616、619、621を実行できる。モード決定における動きベクトルのコーディングコストを有利にするためのマクロブロックモード決定の１実施例は、図７に詳細に記載される。マクロブロックモード決定は、状態623の入力として提供される。
【００６０】
状態614では、プロセスは、仮想バッファーの充満度すなわちｄij、ｄpj、ｄbjの値を計算して更新する。更新されるｄij、ｄpj、ｄbjの値は画像のタイプに依存する。すなわち、ｄij、の値はＩ−画像がエンコードされるときに更新される。プロセスは、マクロブロックをエンコードするのに使うビットを勘案して、仮想バッファーの充満度を計算して更新する。仮想バッファーの充満度の更新は、画像のマクロブロック間のビット割り当て技術に対応する。例えば、TM5に従うとき、マクロブロックでのビット割り当てはほとんどリニアである。すなわち一定の値となる。１実施例では、相対的な動きの評価より、むしろ画像（Ｉ―画像とＢ―画像に対して）の中のマクロブロックの相対的な動きに基づくマクロブロック間のビット割り当てが優れている。
【００６１】
数式１３ａ、数式１４ａ、数式１５ａに仮想バッファーの充満度の計算による更新を示す。
【数１３ａ】
2005102170.tif 000016
【数１４ａ】
2005102170.tif 000017
【数１５ａ】
2005102170.tif 000018
【００６２】
変数Ｂｊは、マクロブロックｊに使われたビットを含んで、画像のマクロブロックをエンコードするのに使われたビットに対応しており、変数Ｂj-1は、ｊ番目のマクロブロックを含まないマクロブロックをエンコードするのに使われたビットに対応する。変数ＴＭＢij-1、ＴＭＢpj-1、ＴＭＢbj-1  はｊ番目のマクロブロックを含まないマクロブロックをエンコードするためのビット割り当てに対応する。
【００６３】
数式１３ｂ、数式１４ｂ、数式１５ｂは仮想バッファーの充満度の計算、すなわちTM5に記載されたプロセスで使われたｄij、ｄpj、ｄbjの値を示している。TM5は、画像の中でビット割り当てを行い、マクロブロックの動きを含まないので、動きに対応できない欠点がある。運動選手のような速い動きに適応してビット割り当てを可変的に行うマクロブロックは比較的エンコードし易いマクロブロックのビット割り当てと同じである。
【数１３ｂ】
2005102170.tif 000019
【数１４ｂ】
2005102170.tif 000020
【数１５ｂ】
2005102170.tif 000021
【００６４】
１実施例では、更新された値は数式１３ｃ、数式１４ｃ、数式１５ｃで表される。数式１３ｃ、数式１４ｃ、数式１５ｃの使用によって、画像のなかのマクロブロックの動作に基づき、優れたビット割り当てとなる。そのようなビット割り当ては、定数とか動きの評価よりもマクロブロックの相対的な動きの計算に基づくマクロブロックの優れたビット割り当てとなる。マクロブロック間の可変ビット割り当ては、後の図８Ａと図８Ｂに関連して詳しく述べる。
【数１３ｃ】
2005102170.tif 000022
【数１４ｃ】
2005102170.tif 000023
【数１５ｃ】
2005102170.tif 000024
【００６５】
変数MACTは、数式１６に示すように、全てのマクロブロックの動作の総計を表す。Mact_sumj-1 は、エンコードされた画像の全てのマクロブロックの動作の総計に対応する。すなわち数式１７に示すようなマクロブロックｊを含まないｊ−１までのマクロブロックでの総計である。
【数１６】
2005102170.tif 000025
【数１７】
2005102170.tif 000026
【００６６】
数式１６において、パラメータMB_cnt  は、画像の中のマクロブロックの数に対応し、変数Mactkはｋ番目のマクロブロックの動作の測定輝度に対応する。動作の測定輝度の計算には、偏差値の計算や偏差の絶対値の総計など様々な技術が使用できる。
【００６７】
もう１つの実施例では、仮想バッファーの占有率の最新の値であるｄij、ｄpj、ｄbjの値は、MPEGからのTM5モデル１０章に記載されている最新の仮想バッファーの占有率を計算する式に基づき計算できる。
【００６８】
もう１つの実施例では、仮想バッファーの占有率の最新の値であるｄij、ｄpj、ｄbjの値は、数式１３ｄ、数式１４ｄ、数式１５ｄに基づいて計算できる。
【数１３ｄ】
2005102170.tif 000027
【数１４ｄ】
2005102170.tif 000028
【数１５ｄ】
2005102170.tif 000029
【００６９】
数式１３ｄ、数式１４ｄ、数式１５ｄにおいて、ａｉ、ａｐ、ａｂは、重み係数に対応し０から１の値をとる。この重み係数ａｉ、ａｐ、ａｂは、TM5と数式１３ｃ、数式１４ｃ、数式１５ｃで述べた動作に基づく組み合わせで割り当てられた画像のなかのマクロブロックのビット割り当てに使用できる。この組み合わせによるビット割り当ては、オーバーヘッドのためのビットのような比較的平等に割り付けられたビットを補償するという利点がある。重み係数ａｉ、ａｐ、ａｂは、０から１の値の間を広く変化する。１実施例では、重み係数ａｉ、ａｐ、ａｂは、０から0.5の値である。例えば、これらの重み係数のサンプル値は0.2、0.3、0.4、0.5である。勿論、０から１の間の他の値を決めても良い。ビデオエンコーダの実施例では、重み係数ａｉ、ａｐ、ａｂは、ユーザに決めさせるようにしている。
【００７０】
仮想バッファーの占有率の値であるｄij、ｄpj、ｄbjの値は、画像のそれぞれのマクロブロックに対して計算される。しかし、最初のマクロブロックの値であるｄi１、ｄp１、ｄb１の値は、状態612での初期値と同じである。プロセスは、状態614から状態616に進む。
【００７１】
状態616では、プロセスは、マクロブロックｊを量子化するのに使用される参照量子化パラメータＱｊを計算する。数式１８に、参照量子化パラメータＱｊの計算を示す。プロセスは、状態616から状態619に進む。
【数１８】
2005102170.tif 000030
【００７２】
状態619では、プロセスは、マクロブロックのための規格化空間動作メジャーN_Sactj  を計算する。１実施例では、プロセスは、TM5のプロセスと数式１９ａ、数式１９ｂ、数式２１ａ、数式２２，数式２３ａにしたがって、規格化空間動作メジャーN_Sactj  を計算する。TM5による規格化空間動作メジャーN_Sactj  の計算は、空間動作（模様）のみに基づいて画像のなかのマクロブロックにビットを割り当てる、動きを採ることを考慮していないところに欠点がある。さらに、数式２３ａで詳細に説明するように、TM5のプロセスが、後で図８Ａ、８Ｂによって説明するプロセスのシーケンスにおける制限により、空間動作メジャーN_Sactj  の平均値計算に不適当な値を使っていることが欠点である。
【００７３】
もう１つの実施例では、プロセスは、規格化空間動作メジャーN_Sactjを、数式２０ａ、数式２１ｂ、数式２１ｃ、数式２２，数式２３ｂによって計算している。参照量子化パラメータＱｊの計算に使われる動作メジャーの組み合わせが、規格化空間動作メジャーを通しての変形効果により、空間動作（模様）のみに基づいて画像のなかのマクロブロックばかりでなく、動きに基づく画像のなかのマクロブロックにビット割り当てに優れた効果をもたらす。これが、劇的な画像の改善をもたらす。例えば、空間動作のみが使われるときには、スポーツイベントでの運動選手の脚の動きのような速い動きの画像の領域では、比較的少ないビットが割り当てられていて、「ブロッキー」と呼ばれるような画像になる。これは、速い動きの画像の領域が、比較的高い空間動作を回避し、比較的少ないビットを割り当るからである。さらに、後で、数式２３ｂに示すように、空間動作メジャーを使った実施例では、目標ビットと実際にエンコードされたビットとがうまくマッチして、バッファーオーバーランやバッファーアンダーランのようなものを少なくして、優れた結果が得られている。
【００７４】
状態619では、動作は、画像の模様を決めるための画像の空間動作に対応している。空間動作を計算するのに使われる技術はいろいろある。例えば、TM5の第１０章に開示されている技術やここに記載している新技術にしたがって計算することができる。数式１９ａは、TM5の第１０章にあるフレーム構成サブブロックとフィールド構成サブブロックの輝度からマクロブロックｊの空間動作の計算を示している。ｊ番目のマクロブロックの画像内の空間動作、すなわち模様は、数式１９ｂを使って計算され、TM5で使った計算に対応する。
【数１９ａ】
2005102170.tif 000031
【数１９ｂ】
2005102170.tif 000032
【００７５】
Ｐ_meann  を計算する式は、数式２１ａに示される。Ｐnk は、８ｘ８のサブブロックのｎ番目のオリジナルの中のピクセルからサンプリングした値に対応する。数式１９ｂの計算は、比較的複雑であり、計算に強いＣＰＵが必要で、マイクロプロセッサのような遅い一般仕様のＣＰＵでは、リアルタイムエンコーディングは困難である。数式１９ｂは、Ｌ２基準として参照される偏差の計算を経て空間動作を計算する。これは、リアルタイム、全分解能、画像レートでビデオエンコーディングが行われたときに、書き戻しができる。結果として、リアルタイムビデオエンコーディングは、専用ハードでの通常システムで行われている。専用ハードのビデオエンコーダは、高速のビデオ処理ができるが、専用ハードは高価であり、サポートされないし、パソコンのような一般的電子装置で実行されるソフトよりグレードアップが困難である。このように、ビデオを効果的に処理するビデオエンコーディング技術として、汎用の電子装置を使ってリアルタイムビデオエンコーディングを行うのが優れている。
【００７６】
数式２０ａは、１実施例によるマクロブロックｊの空間動作の計算を示している。もう１つの実施例では、マクロブロックｊの空間動作を計算するのに、数式１９ａ、数式１９ｂに示すような差の二乗和のかわりに、差の絶対値の和が使われる。数式２０ｂは、１実施例によるマクロブロックｊの動きの計算を示している。
【数２０ａ】
2005102170.tif 000033
【数２０ｂ】
2005102170.tif 000034
【００７７】
数式２０ａでは、Ｐｊk は、オリジナルの輝度データに対応する。数式２０ｂにおいては、Ｐｊk は、オリジナルの輝度データかマクロブロックのタイプにより動きが補償された輝度データに対応する。マクロブロックが内部マクロブロックである時の１６ｘ１６のオリジナルの輝度データのｊ番目のサンプリング値に対応する。マクロブロックがマクロブロック間であるとき、Ｐｊk は、動きが補償された輝度データの１６ｘ１６に対応する。Ｐ_meanｊ  を計算する式は、数式２１ｂ、数式２１ｃに示される。
【００７８】
さらに、数式２０ａ、数式２０ｂに示す計算では、汎用の電子装置で、ソフトで、リアルタイムでレートコントロールと量子化コントロールを使うことにより、全画像レート、高分解能のビデオエンコーディングができる。数式２０ａ、数式２０ｂに示す計算は、リアルタイムでない応用や専用ハードでも利用できる。ビデオエンコーディングプロセスの１実施例として、３Ｇｈｚクロック速度のインテルペンティアム４プロセッサで、ＰＡＬ、ＳＥＣＡＭ、ＮＴＳＣのビデオデータの流れがリアルタイムで、全画像レート、全分解能（７２０Ｘ４８０ピクセル）のエンコードができた。
【００７９】
数式２０ａ、数式２０ｂに示す計算では、Ｌ１基準の計算として知られている差の絶対値の和（SAD）を計算する。SADの計算は比較的複雑であるが、特別のインストラクションを含む選択さあれたプロセッサやCPUでは、比較的効率的な方法でSADの計算ができる。１実施例では、汎用の電子装置で、インテルからのストリーミングシングルインストラクション／マルチメディア（SIMD）エクステンション（SSB）と互換なCPUをもつパソコンで計算可能である。もう１つの実施例では、汎用の電子装置のCPUで、SSEインストラクションセットでの差の絶対値の和をパックしたインストラクション（PSADBW）と同じか似ているインストラクションと互換のもので計算ができる。SSEインストラクションセットと互換のCPUの例として、インテルペンティアム３プロセッサ、インテルペンティアム４プロセッサ、インテルゼオンTMプロセッサ、インテルセントリノTMプロセッサ、インテルセントリノプロセッサの選択されたバージョン、AMDアスロンTMプロセッサの選択されたバージョン、AMDヂュロンTMプロセッサの選択されたバージョン、AMDオプテロンTMプロセッサの選択されたバージョン、などがある。将来のCPUや開発中のCPUにもSSEインストラクションセットと互換のものが出来るであろう。新しいプロセッサには、新しいインストラクションセットが含まれるであろうが、その新しいインストラクションセットはSSEインストラクションセットと互換にすることが出来るであろう。
【００８０】
数式２１ａは、数式１９ｂで使われたサンプル値の計算を示す。数式２１ｂ、数式２１ｃは、数式２０ａ、数式２０ｂで使われたサンプル値の計算を示す。
【数２１ａ】
2005102170.tif 000035
【数２１ｂ】
2005102170.tif 000036
【数２１ｃ】
2005102170.tif 000037
【００８１】
１実施例では、数式２１ａに示すようなTM5による８ｘ８のサブブロックのｎ番目のオリジナルのサンプル値の平均値Ｐ_meanｎ  の計算を示す。もう１つの実施例では、数式２１ｂと数式２１ｃを経てサンプル値の平均値Ｐ_meanｊ  の計算ができる。数式２１ｂと数式２１ｃは、空間動作（模様）の計算と動きを評価した計算の組み合わせであることが優れている。数式２１ｂは、内部マクロブロックに対して使用される。数式２１ｃは、マクロブロック間のマクロブロックに対して使用される。
【００８２】
数式２２は、正規化空間動作メジャーN_Sactj  の計算を示す。正規化空間動作メジャーN_Sactj  は、離散的余弦変換（DCT）に適用される量子化を計算する状態621で使われる。
【数２２】
2005102170.tif 000038
【００８３】
数式２２に示すように、ｊ番目のマクロブロックのための正規化空間動作メジャーN_Sactj  は、マクロブロックのための空間動作メジャーＳactj  と空間動作メジャーの平均値Ｓavg_act  から計算される。空間動作メジャーの平均値Ｓavg_act  は、数式２３ａか数式２３ｂで計算できる。
【数２３ａ】
2005102170.tif 000039
【００８４】
数式２３ａで示される計算は、TM5に記載されている計算で、今の画像を使わないで、前の画像を使って計算した空間動作メジャーＳactj  を使う。その結果、TM5と整合する通常のエンコーダは数式２２に示された正規化空間動作メジャーN_Sactj  を比較的正確に計算できる。空間動作メジャーの平均値Ｓavg_act  が数式２３ａで計算されたとき、正規化空間動作メジャーN_Sactj  は、実際の正規化計算よりむしろ正規化の評価値を示している。数式２３ａで提供された評価値は、シーンが前回と今回とで変化したときには、部分的に良くない。TM5では、前の画像から空間動作メジャーの平均値Ｓavg_actjが計算されるとき、最初の画像で、空間動作メジャーの平均値Ｓavg_actjを正規化するのに400という値が使われる。
【００８５】
TM5に記載されたプロセスでのエンコーディングは、空間動作メジャーの平均値Ｓavg_actj  のため、前の画像を使っている。何故なら、TM5に記載されたプロセスは、空間動作メジャーの平均値Ｓavg_actj  の計算ができないので、正規化空間動作メジャーN_Sactj  を使って１ｘ１のマクロブロックを処理しているからである。さらに、他のプロセスシーケンスを図８Ａ、８Ｂで詳しく説明する。数式２３ｂで示す計算は、数式２３ａで示されたTM5に基づく計算を改良したものを示している。
【数２３ｂ】
2005102170.tif 000040
【００８６】
１実施例では、マクロブロックのプロセッシングが後の図８Ａ、８Ｂで示すように、調整されている。この調整は、今の画像でのマクロブロックの空間動作メジャーＳactj  から計算される空間動作メジャーの平均値Ｓavg_actj  にするので、正規化空間動作メジャーN_Sactj  は、評価値よりも実際に正規化された値になっている。この優れた点は、画像をエンコードするときに使用するデータがより正確に目標データに近づいていて、予想通りに正規化が行われていることである。さらに、Ｉ−画像、Ｐ−画像、Ｂ−画像の充満度を表す仮想バッファーの占有率の値であるｄij、ｄpj、ｄbjの値に対する乱れや歪みを少なくしたり、除去したりするという利点がある。さらに、数式２３ｂに示す空間動作メジャーの平均値Ｓavg_actj  の計算では、400というような任意の値で正規化するひつようがない。何故ならば、実際の平均値が今エンコードされている画像の空間動作メジャーＳactj  を計算しているからである。プロセスは、状態619から状態621に進む。数式１３、数式１４、数式１５、数式１６、数式１７に示すように、仮想バッファーの充満度の計算に必要とされる実際の空間動作メジャーの計算ができる利点がある。
【００８７】
状態621では、正規化パラメータmquantj  を計算する。正規化パラメータmquantj  は、エンコードされるマクロブロックｊを正規化するのに使われる。正規化パラメータmquantj  は、状態621で使われるか、格納されるか、後で使われる。数式２３は、正規化パラメータmquantj  の計算を表す。
【数２３】
2005102170.tif 000041
【００８８】
数２３では、Ｑｊは、数式１８で述べた参照量子化パラメータに対応し、Nactj  は、数式２２で述べた正規化空間動作メジャーN_Sactj  に対応する。１実施例では、プロセスは、正規化パラメータmquantj  を点検し、量子化レベルQAC(i,j)の好ましくないクリッピングを防ぐために、その値を制限する。例えば、MPEG-1標準によるビデオエンコードに使う場合に、計算した正規化パラメータmquantj  が２であることを検出して、自動的に４に置き換える。正規化パラメータmquantj  は、後に、量子化レベルQAC(i,j)を発生させるために、マクロブロックエンコーディングプロセスで使われる。しかし、MPEG-1では、量子化レベルQAC(i,j)は、８ビット内の−２２５から２２５のレンジではクリップされる。このデータのクリッピングは、実際に使われており、正規化パラメータmquantj  を、クリッピングされるレベルに制限することで避けることができ、画質の改善に寄与する利点がある。
【００８９】
１実施例では、図９Ａに詳しく記載するように、選択された刺激に反応して、仮想バッファーの占有率の値であるｄij、ｄpj、ｄbjの値と正規化パラメータmquantj  をリセットできる。プロセスは、状態621から状態623に進む。
【００９０】
状態623では、ｊ番目のマクロブロックをエンコードする。プロセスは、状態616で計算された正規化パラメータmquantj  を使ってｊ番目のマクロブロックをエンコードする。エンコーディング技術は、例えば、離散的余弦変換、動きベクトルなどの計算を含む。１実施例では、図１１で記載されるように、Ｂ−画像でのマクロブロックのエンコーディングを選択的にスキップすることができる。プロセスは、状態623から状態625に進む。
【００９１】
判断のブロックである状態625では、プロセスは、画像の中の全てのマクロブロックが状態616でのエンコーディングで処理されたか、図１１に示すスキッピングで処理されたかを判断する。プロセスが、画像の中の全てのマクロブロックのエンコーディングまたはキッピングの処理を終わっておれば、プロセスは、状態627に進む。そうでないときは、状態614に戻って、次のマクロブロックのプロセスを続ける。
【００９２】
状態627では、プロセスは、同じタイプの次の画像のエンコーディングのための初期条件として、仮想バッファーの占有率の最終値を格納する。例えば、今のフレームの仮想バッファーの占有率の最終値、すなわちｊがMB_cntのとき、ｄij、ｄpj、ｄbjの値が格納され、同じタイプの次の画像の初期値であるｄI０、ｄp０、ｄb０の値として使用される。ある環境では、ビットあるいはバイトスタッフィングを使ってエンコーディングに使われるビット数を増やすようにして、エンコーディングに使われるビット数を持続時間に対して比較的少なくできる。これはデコーダバッファーにおけるバッファーオーバーラン条件を回避する。しかし、ビットスタッフィングの使用は、対応する仮想バッファーの占有率に好ましくない歪みを生じて、エンコーダに不安定性を生じさせる。１実施例では、レートコントロールと量子化コントロールプロセスがビットスタッフィングの影響を緩和できる優れた技術を含んでいる。そのような技術の例を図９Ａ、９Ｂで述べる。プロセスは、状態627から状態630に進む。
【００９３】
判定のブロック630では、示されたプロセスが完了して、画像グループ（GOP）の最後の画像が処理されたかどうかを判断する。これは、先の状態606で述べたＰ−画像の数ＮｐとＢ−画像の数Ｎｂの値が残っていないかどうかをモニタリングすることで達成できる。画像グループに処理されない画像が残っているときには、プロセスは、状態632に進む。そうでない場合、すなわち、画像グループの処理が完了している場合には、プロセスは、判定のブロック634に進む。
【００９４】
状態632では、プロセスは、Ｐ−画像の数ＮｐとＢ−画像の数Ｎｂの値に適当な値を更新して、画像グループにおける次の画像処理を初期化するために、状態636に進む。処理される次の画像は、エンコーディングの間、画像の並び替えの可能性があるので、必ずしも表示される次の画像ではない。
【００９５】
状態636では、丁度今エンコードされた画像に基づく複合評価値Ｘｉ、Ｘｐ、Ｘｂに対応して、更新を行う。例えば、Ｉ−画像が丁度今エンコードされたとすると、Ｉ−画像のための複合評価値Ｘｉを、式２４に示すような値で更新する。丁度今エンコードされた画像が、Ｐ−画像やＢ−画像とすると、数式２５と数式２６に示すように、複合評価値Ｘｐ、Ｘｂを更新する。
【数２４】
2005102170.tif 000042
【数２５】
2005102170.tif 000043
【数２６】
2005102170.tif 000044
【００９６】
数式２４，数式２５，数式２６において、Ｓi、Ｓp、Ｓb  の値は、それぞれＩ−画像、Ｐ−画像、Ｂ−画像の画像のために、画像をエンコードするのに発生させるか使われるビットの数に対応する。Ｑｉ、Ｑｐ、Ｑｂの値は、画像のなかのマクロブロックを量子化するのに使われる正規化パラメータmquantj  の平均値に対応する。プロセスは、状態636から状態638に進む。
【００９７】
状態638では、画像グループに割り付けられたビットの残留数Ｒを更新する。画像グループに割り付けられたビットの残留数Ｒへの更新は、エンコードするべき次の画像が、画像グループに存在する画像かどうか、あるいは、新しい画像グループの中の最初の画像かどうかに依存する。数式２７と数式２８は、処理されるべき次の画像が新しい画像グループの中の最初の画像のときに使われる。処理されるべき次の画像が、先に処理されたのと同じ画像グループの中の他の画像のときには、数式２７のみが使われる。数式２７と数式２８は、Ｒ値の指定状態を表し、新しいＲ値が等号の左側で、先のＲ値が等号の右側に示されている。
【数２７】
2005102170.tif 000045
【数２８】
2005102170.tif 000046
【００９８】
数式２７では、先のＲ値と丁度今エンコードされた画像をエンコードするのに使った、引き算するビット数Ｓ(i,p,b)とから画像グループに割り付けられる新しいビットの残留数Ｒを計算する。画像をエンコードするのに使ったビット数Ｓ(i,p,b)が、図７で述べるようなVBVバッファーモデル占有率を計算するのに使われる。数式２７で示された計算は、エンコードされた後の画像に適用される。丁度今エンコードされた画像が、画像グループの中の最後の画像、例えば、エンコードされるべき次の画像が、新しい画像グループの中の最初の画像のとき、数式２７で示された計算は、数式２８で示された計算に移る。数式２８では、残留数ＲにＧを加える。変数Ｇは数式５で表される。Ｇの値は、エンコードされるべき新しい画像グループに基づいており、新しい画像グループのための提供時間長の中で、データチャンネルにより、伝送できるビット数に対応する。プロセスは、状態638から状態610に戻り、先に述べたビデオエンコーディングプロセスを続ける。
【００９９】
判定ブロック634に戻ると、ここで、画像グループの中の最後の画像のエンコーディングプロセスが完了している。判定ブロック634では、ビデオシーケンスのエンコーディングが完了しているかどうかを判断する。実際には、放送ビデオのような限りがない時間でのエンコードに使用され、エンドレスでビデオエンコードを継続する。処理するべき他の画像グループになると、状態640に進む。そうでない場合には終了する。
【０１００】
状態640では、プロセスは、次の画像グループを更新する。もう１つの実施例では、プロセスは、次の画像グループの一部分を更新し、残りの部分は後で更新しても良い。１実施例では、状態640は、状態602によく似ている。プロセスは、状態640から状態642に進む。
【０１０１】
状態642では、画像グループの中の画像に適用されるエンコーディングのタイプまたはモードを受ける。レートコントロールと量子化コントロ−ルにおいて、画像グループの中の画像で使われるエンコーディングのモードあるいはタイプについての決定は、レートコントロールと量子化コントロ−ルされる前になされる。１実施例では、状態642は状態604と比較的似ている。プロセスは、状態642から状態644に進む。
【０１０２】
状態644では、エンコードされる次の画像グループにおけるＰ−画像の数ＮｐとＢ−画像の数Ｎｂの値を決める。１実施例では、状態644は状態606と比較的似ている。プロセスは、状態644から前に述べた状態644に進み、エンコーディングプロセスを続ける。
【０１０３】
（VBVバッファーモデル占有率レベルでのコントロール）
図７は、仮想バッファーの占有率レベルに基づく目標ビット割付を調整するためのプロセスを説明するフローチャートである。プロセスの動作を説明するため、仮想バッファーがビデオバッファーベリファイア(VBV) バッファーモデルに対応するような、MPEG-1とMPEG-2のビデオエンコーディングについて記載する。VBV バッファーモデルは、デコーダにおけるバッファー占有率レベルをモデル化するため、エンコーダにより使用される概念的モデルである。他のビデオエンコーディング標準には、他のバッファーモデルが使用されることは、通常の知識をもつ技術者には明らかである。図７の掘り下げた議論をする前に、VBV バッファーモデルのモニタリングについて記載する。
【０１０４】
図４に記述したように、VBV バッファーモデルはデコーダバッファーレベルを予想あるいは予言する。デコーダバッファーの占有率レベルは、エンコーダバッファーの占有率にほぼ反比例する。すなわち、VBV バッファーモデルにおいて、高い占有率レベルは、ビデオシーケンスをエンコードするのに使われるビットが比較的少ないことを示し、VBV バッファーモデルの低い占有率レベルは、比較的多いビットが使われることを示す。
【０１０５】
VBV バッファーモデルの占有率レベルＶstatusが計算されてモニタされる。１実施例では、VBV バッファーモデルの占有率レベルＶstatusは予め決まった閾値と比較され、エンコーディングは、図１１で詳細に記述されるように、比較値に応じてうまく適合される。もう１つの実施例では、VBV バッファーモデルの占有率レベルＶstatusは、エンコードされる画像のための目標ビット数  Ｔi、Ｔp、Ｔb  をうまく適合させるように、調整するのに使われる。占有率レベルＶstatusの計算は式２９で表される。
【数２９】
2005102170.tif 000047
【０１０６】
数式２９は、占有率レベルＶstatusの意味を表す。新しい占有率レベルＶstatusの値は等号の左側で、前の値は等号の右側である。１つの実施例では、占有率レベルＶstatusの値は、バッファーモデルのための目標値で初期化される。目標値の例は、VBV バッファーモデルの全容量の７/８の値である。もう１つの実施例では、Ｖstatusの値は、明示されたVBVに遅延値に対応するバッファー占有率で初期化される。通常の知識をもつ技術者によっては、他の値での初期化も可能である。
【０１０７】
数式２９では、VBV バッファーモデルの占有率レベルＶstatusは以下のように計算される。丁度今エンコードされた画像をエンコードするのに使われたビット数  Ｓ(i,p,b)
が前の占有率レベルＶstatusから差し引かれ、フレームまたは画像に対応する周期時間に伝送されたビット数が加えられる。数式２９に示すように、フレームの中で送られたビット数は、フレームの逆数の時間とビットレートとの積になる。数２９の計算は、処理された画像の占有率レベルＶstatusの更新に適用される。もう１つの実施例では、数式は、他のすべての画像と同様に、それぞれの画像より少なく、占有率レベルＶstatusの更新のために変形される。
【０１０８】
図７で述べるように、プロセスの１実施例は、画像のための目標ビット数  Ｔi、Ｔp、Ｔb  と閾値Ｔmidとを比較し、比較値に応じて目標ビット数  Ｔi、Ｔp、Ｔb  を調整する。これは、デコーダでのバッファーアンダーランやオーバーランが生じないようにVBVの応じたデータの流れを作るように、ビデオエンコーダをうまく支援する。
【０１０９】
１実施例では、コントロールのために、VBV バッファーモデルの占有率レベルに関して５つのパラメータが使用される。もう１つの実施例では、５つのパラメータより少ないかまたは多くのパラメータが使われてもよい。パラメータは、広範囲に変化することが出来て、固定パラメータ、可変パラメータ、適応パラメータ、ユーザが決めるパラメータなどが含まれる。もう１つの実施例では、次のパラメータが使われる（占有率のオーダーを減らすのに）：Ｖhigh、Ｖtarget、Ｖmid、Ｖlow、Ｖcritical。
【０１１０】
Ｖhighは、VBV バッファーモデルの占有率レベルの比較的高い値に対応する。もう１つの実施例では、プロセスは、VBV バッファーモデルの占有率レベルがＶhighより低く保たれるようにエンコーディングをコントロールするように努める。
【０１１１】
Ｖtargetは、好ましいVBV バッファーモデルの占有率レベルに対応する。１実施例では、好ましいVBV バッファーモデルの占有率レベルＶtargetはユーザにより形成されることができる。
【０１１２】
Ｖmidは、VBV バッファーモデルの占有率レベルのほぼ半分の容量に対応する。
【０１１３】
Ｖlowは、VBV バッファーモデルの占有率レベルの比較的低い値に対応する。１実施例では、プロセスは、VBV バッファーモデルの占有率レベルを、Ｖlowより高く維持するように、エンコーディングをコントロールするように努める。
【０１１４】
Ｖcriticalは、Ｖlowより低い占有率レベルに対応する。１つの実施例では、VBV バッファーモデルの占有率レベルがＶcriticalより低くなった場合、プロセスは、図１１で詳しく述べられるように、Ｂ−画像におけるマクロブロックにスキップする。
【０１１５】
表２に、閾値レベルのサンプル値を示す。
【表２】
2005102170.tif 000048
【０１１６】
表２で示されたサンプル値は、VBV バッファーモデルサイズに対して都合良く調整されている。図４で詳しく述べたように、VBV バッファーモデルサイズは、MPEG-2で約２２４KB、MPEG-1で約４０KBである。MPEG-1やMPEG-2のVBV バッファーモデルのような仮想バッファーモデルサイズは、使用されるビデオエンコーディングや応用状況によって変化する。
【０１１７】
図７に戻ると、図７に示されたプロセスは、少なくとも、VBV バッファーモデルの占有率レベルＶstatusの一部に基づく画像のための目標ビット割付Ｔi、Ｔp、Ｔb  を調整する。１実施例では、図７に示されたプロセスは、図６に示すプロセスの状態に組み入れられている。プロセスは、オプションである判定ブロック710からスタートできる。すなあち、プロセスは、目標ビット割付Ｔi、Ｔp、Ｔb  の値（図７では、Ｔ(i,p,b)と記載する）をＴmid、Ｔhighのような１つまたはそれ以上の閾値と比較する。例えば、VBV バッファーモデルの占有率レベルが比較的低い場合、調整プロセスが発動されるように、目標閾値Ｔmidを選択できる。もう１つの実施例では、VBV バッファーモデルの占有率レベルが比較的高い場合、調整プロセスが発動されるように、目標閾値Ｔhighを選択できる。１実施例では、目標閾値ＴmidかＴhighのうちいずれか１つが使われる。もう１つの実施例では、両方の目標閾値が使われ、さらに、他の実施例では、オプションである判定ブロック710は存在しないし、目標閾値も使われない。ここに示された実施例では、調整プロセスは、VBV バッファーモデルの占有率レベルとエンコードされる画像に割り付けられたビット数に反応して発動される。目標ビット割付Ｔi、Ｔp、Ｔb  の計算は、前に述べた状態610と図６の数式６，数式７，数式８で実施できる。数式３０ａは、目標閾値Ｔmidのサンプル計算を表す。数式３０ｂは、目標閾値Ｔhighのサンプル計算を表す。
【数３０ａ】
2005102170.tif 000049
【数３０ｂ】
2005102170.tif 000050
【０１１８】
この実施例では、目標ビット割付Ｔi、Ｔp、Ｔb  が目標閾値Ｔmidを越えたとき、または目標ビット割付Ｔi、Ｔp、Ｔb  が目標閾値Ｔhighより小さいとき、プロセスは、オプションである判定ブロック710から状態720に進む。他の実施例あるいは構成では、このオプションである判定ブロック710は存在せず、プロセスは、状態720からスタートする。目標ビット割付Ｔi、Ｔp、Ｔbが目標閾値Ｔmidを越えたときは、VBV バッファーモデルの占有率は比較的低くなる。この実施例では、調整なしで、VBV バッファーモデルの占有率が落ちてＶmidより低い状態に留まるように、画像が十分なビットを割り付けられるときに、目標ビット割付に対する調整が起きるように、目標閾値Ｔmidは選択される。通常の知識を持つ技術者により他の閾値が決められても良い。
【０１１９】
目標ビット割付Ｔi、Ｔp、Ｔb  が目標閾値Ｔmidを越えないとき、または目標ビット割付Ｔi、Ｔp、Ｔb  が目標閾値Ｔhighより小さくないとき、プロセスは、オプションである判定ブロック710から判定ブロック730に進む。プロセスは、オプションである判定ブロック710が存在しないか使われない場合、状態720からスタートし、判定ブロック730に進む。もう１つの実施例では、目標ビット割付Ｔi、Ｔp、Ｔb  が目標閾値Ｔmidを越えないとき、または目標ビット割付Ｔi、Ｔp、Ｔb  が目標閾値Ｔhighより小さくないとき、プロセスは、例えば、図６に示すプロセスの状態610に進むように、判定ブロック710からエンドに進む。オプションである判定ブロック710では、比較値は、Ｉ−画像、
Ｐ−画像、Ｂ−画像、に対して同じ目標閾値Ｔmidと/またはＴhighを使う。もう１つの実施例では、目標閾値Ｔmidと/またはＴhighは、画像のタイプに依存して変わる。
【０１２０】
状態720では、目標ビット割付Ｔi、Ｔp、Ｔb  が目標閾値Ｔmidを越えたとき、または目標ビット割付Ｔi、Ｔp、Ｔb  が目標閾値Ｔhighより小さいとき、プロセスは、画像に対して割り付けられたビット数を減らすように、目標ビット割付Ｔi、Ｔp、Ｔb  の値を調整する。もう１つの実施例では、プロセスは、状態720からスタートする。例えば、プロセスの１実施例は、プロセスは、オプションである判定ブロック710を持たないで、状態720からスタートするように、ユーザにより構成されることができるようになっている。例えば、Ｔi、Ｔp、Ｔb  に対する調整は、ビットの数を減らすように構成されることができる。画像をエンコードするのに使われるビットの数はより少ないとき、VBV バッファーモデルの占有率と、対応するデコーダのバッファー占有率が増加することができる。数式３１は調整のための一般式を示す。
【数３１】
2005102170.tif 000051
【０１２１】
数式３１では、調整因子αは、１より小さい数なので、調整後の目標ビット割付Ｔi、Ｔp、Ｔb  は、オリジナルの計算値よりも小さくなる。もう１つの実施例では、調整因子αは、１より大きい数なので、調整後の目標ビット割付Ｔi、Ｔp、Ｔb  は、オリジナルの計算値よりも大きくなる。数３１の調整は、別々に分離して計算された目標ビット割付Ｔi、Ｔp、Ｔb  の値に対する調整を示す。しかし、その調整は、目標ビット割付Ｔi、Ｔp、Ｔb  の最初の計算に組み込まれている。数式３１では、等号の右側の値は、調整前の目標ビット割付Ｔi、Ｔp、Ｔb  の値に対応し、左側は、調整後の目標ビット割付Ｔi、Ｔp、Ｔb  の値に対応する。数式３２は、調整因子αのサンプル計算を表す。
【数３２】
2005102170.tif 000052
【０１２２】
数３２に示すように、調整因子αは、ＶstatusがＶtargetより小さいときに、１より小さく、ＶstatusがＶtargetより大きいときに、１より大きくなる。数式３１における調整の正味の効果は、VBV バッファーモデルの占有率を、望ましい占有率レベルＶtargetに傾斜させることである。
【０１２３】
目標ビット割付Ｔi、Ｔp、Ｔb  の値が、オプションである判定ブロック710において、目標閾値Ｔmidを越えたとき、VBV バッファーモデルの占有率Ｖstatusは、望ましい占有率レベルＶtargetより小さくなり、調整因子αは１より小さくなる。目標ビット割付をどれだけ減少させることが出来るかは、VBV バッファーモデルの占有率Ｖstatusが、望ましい占有率レベルＶtargetよりどれだけ小さくなるかによる。目標ビット割付Ｔi、Ｔp、Ｔb  の値が目標閾値Ｔhighより小さいとき、VBV バッファーモデルの占有率Ｖstatusは、望ましい占有率レベルＶtargetより大きくなり、調整因子αは１より大きくなる。目標ビット割付がどれだけ増えるかは、VBV バッファーモデルの占有率Ｖstatusが、望ましい占有率レベルＶtargetよりどれだけ大きくなるかによる。プロセスは、状態720から判定ブロック730に進む。
【０１２４】
判定ブロック730では、目標ビット割付Ｔi、Ｔp、Ｔb  の値が状態720での調整があってもなくても、プロセスは、指定された限界値内にあるかどおうかを判定する。これらの限界値は、予め決められるか、目標ビット割付Ｔi、Ｔp、Ｔb  とVBV バッファーモデルの占有率Ｖstatusに適合するように決められる。目標ビット割付Ｔi、Ｔp、Ｔb  の値が限界値から外れたとき、プロセスは、目標ビット割付Ｔi、Ｔp、Ｔb  の値を限界値に設定して、判定ブロック730から状態740に進む。その他の場合、プロセスは、目標ビット割付Ｔi、Ｔp、Ｔb  の値をさらに調整することなく終了する。
【０１２５】
数式３３は、目標ビット割付Ｔi、Ｔp、Ｔb  の値の上限値Ｔmaxのサンプル計算を表す。数式３４は、目標ビット割付Ｔi、Ｔp、Ｔb  の値の下限値Ｔminのサンプル計算を表す。
【数３３】
2005102170.tif 000053
【数３４】
2005102170.tif 000054
【０１２６】
目標ビット割付Ｔi、Ｔp、Ｔb  の値がＴmaxを越えるとき、目標ビット割付Ｔi、Ｔp、Ｔb  の値はＴmaxに再設定され、目標ビット割付Ｔi、Ｔp、Ｔb  の値がＴminを下回るとき、Ｔminに再設定される。
【０１２７】
数３３で表される上限値Ｔmaxを適用することは目標ビット割付Ｔi、Ｔp、Ｔb  の値を比較的高い値に限定し、VBV バッファーモデルの占有率レベルが望ましい占有率の限界レベルＶlowを上回るように維持される。数式３３で表される下限値Ｔminを適用することは目標ビット割付Ｔi、Ｔp、Ｔb  の値を比較的低い値に限定し、VBV バッファーモデルの占有率レベルが、データチャンネルの一定ビットレートで、オーバータイムでデータを蓄積した後でも、望ましい占有率の限界レベルＶhighを下回るように維持される。下限値Ｔminは、数式３４の中で、コンマで分かれている項の大きい方に対応する。上限値Ｔmaxおよび下限値Ｔminの他の値は、通常の知識を持つ技術者により決められても良い。目標ビット割付Ｔi、Ｔp、Ｔb  は、エンコーダのための目標を達成させて、実際に画像のエンコードに使われるビット数の目標値からの偏差を小さくし、バッファー占有率レベルＶstatusが望ましい限界値レベルＶlowとＶhighから僅かにずれたままになってもよい。
【０１２８】
状態740の処理後、調整プロセスが終了する。例えば、図７に描かれた調整プロセスが、図６の状態610で説明されたレートコントロールと量子化コントロールプロセスに組み込まれ、プロセス状態610から継続される。
【０１２９】
この発明の精神と範囲から逸脱しない種々の変形は、熟練した実務者によって評価される。例えば、もう１つの実施例では、ここに表されたプロセスのいろいろな部分を組み合わせることができ、また、代わりのシーケンスに並べ替えることができ、あるいは削除することができる。
【０１３０】
（マクロブロックの処理シーケンス）
図８Ａは、従来技術によるマクロブロックの処理プロセスを説明するフローチャートである。図８Ｂは、本発明の１実施例によるマクロブロックの処理プロセスを説明するフローチャートである。図８Ｂで表される処理シーケンスは、計算される画像のマクロブロックにとって、空間動作および／または動きに対して優れている。すなわち前の画像の計算から総計値と平均値とを見積もるのに対して、総計値と平均値の計算に実際の値が使用されるからである。
【０１３１】
図８Ａに描かれた通常のシーケンスは、状態802からスタートする。状態802において、プロセスは、１つのマクロブロックに対し、空間動作（模様）および／または動き評価の計算を実行する。プロセスは、状態802から状態804に進む。
【０１３２】
状態804では、プロセスは、マクロブロックの離散的余弦変換（DCT）を行うために、空間動作および／または動き評価の計算を使用する。空間動作の計算は、空間動作全体の値で正規化される。しかし、この点での空間動作の計算は、エンコードされる画像にとって完全ではない。結果として、まえの画像からの評価値が使用される。例えば、平均値を計算するために、まえの画像からの全空間動作が借用される。もう１つの実施例では、まえの画像からの動き評価も借用できる。これらの評価が、実際の値に近づくかどうかはチャンスの問題である。前の画像とエンコードされる画像との間にシーンの変化があると、評価は全く正確ではなくなる。これらの不正確さは、画質を害し、画像エンコーディングの為の目標ビット数と画像をエンコードするのに使われる実際のビット数との間にミスマッチを生じさせる。画像をエンコードするのに費やされるビット数の偏差は、バッファーアンダーランやバッファーオーバーランを生じさせる。プロセスは、状態804から状態806に進む。
【０１３３】
状態806では、マクロブロックのDCT係数に対し、可変長コーディング（VLC）を行う。VLCはDCT係数を圧縮する。プロセスは、状態806から判定ブロック808に進む。
【０１３４】
判定ブロック808では、プロセスは、画像での全てのマクロブロックのエンコーディングを完了したかどうかを判定する。まだエンコードされるマクロブロックが残っている場合には、プロセスは、判定ブロック808から状態802に戻る。その他の場合、プロセスは、エンドに進んで再スタートされるまで待つ。
【０１３５】
１実施例による並び替えられたシーケンスが図８Ｂに描かれ、状態852からスタートする。状態852では、プロセスは、エンコードされる画像における全てのマクロブロックに対し、空間動作および／または動き評価値の総計と平均値を計算する。見積もりでなく実際の数で空間動作および／または動き評価値の総計と平均値が計算されるところが優れており、さらに、エンコードされている画像の前に、シーンの変化があっても、正確であることが優れている。TM5におけるもう１つの実施例では、空間動作メジャーの平均値Ｓavg_actjとしての400が最初の画像にメジャーの「推定値」として、使われている。空間動作が使われる前の全てのマクロブロックの空間動作の平均値によって、空間動作メジャーの平均値Ｓavg_actjが計算され、不確実な「推定値」を避けることができる。
【０１３６】
さらに優れている点は、実際の総計値と平均値とが、比較的高い正確さをもつ目標ビット割付とマッチするように画像をエンコードするのに使われる実際のビット数になっていることである。これが、望ましくないバッファーアンダーランやバッファーオーバーランの機会を減少させ、画質を向上させる。もう１つの実施例では、１つのマクロブロックに対する実際の動き評価が、マクロブロック間でビットを割り付けるのに使われ、比較的速い動きをもつマクロブロックが比較的多いビット数に割り当てられる。それに対し、マクロブロック処理によるマクロブロックをもつ通常のシステムにおいては、マクロブロックに対するビットは、前の画像におけるマクロブロックの相対的な動きにより、マクロブロック間に割り付けられ、正確かもしれないし、そうでないかもしれない。プロセスは、状態852から状態854に進む。
【０１３７】
状態854では、プロセスは、画像における全てのマクロブロックに対し、DCTの計算を実施する。プロセスは、状態854から状態856に進む。
【０１３８】
状態856では、プロセスは、画像における全てのマクロブロックのDCT係数に対し、VLCを実行する。プロセスは、再スタートするまで終了する。
【０１３９】
もう１つの実施例では、プロセスは、状態852に述べたように、全てのマクロブロックに対し、空間動作および／または動き評価値の計算を行うが、画像のマクロブロックの処理が完了するまで、DCTの計算を実施する状態ともう１つのVLCを実行する状態とでループを回す。
【０１４０】
（ビットスタッフィング）
ビットスタッフィングまたはバイトスタッフィングはデコーダバッファーオーバーランに至るようなデータの流れを防ぐために、エンコーダに使用される一般的な技術である。画像をエンコードするために使われるビット数が持続した時間の周期に対して比較的少ない場合、デコーダは、データチャンネルがデータバッファーにデータを加えるレートより遅いレートでデコーダバッファーからのデータを修正する。持続した時間の周期に対して、データの蓄積が続くとき、デコーダバッファーが容量に対して満杯になり、データチャンネルにより運ばれてデータが失われる。ビットスタッフィングが引き起こされるような比較的高く圧縮された画像のシーケンスの例は、それぞれの画像が事実上完全な黒になる場合の画像のシーケンスである。バッファーオーバーランが生じるようなデータレートの不均衡に近づくと、エンコーダは、使用されないがスペースを費やすデータの流れにデータを埋め込む。この処理がビットスタッフィングとして知られている。
【０１４１】
ビットスタッフィングはエンコーディングプロセスの様々な部分に設定されている。１実施例では、図６に述べるエンコーディングプロセスにおいて、ビットスタッフィングは、状態632の後と状態636の前に設定される。１実施例では、エンコーディングプロセスは、VBVバッファーモデルが図７で述べたＶhighが予め定められたレベルに達すると、ビットスタッフィングを引き起こす。１実施例では、ビットスタッフィングは、VBVバッファーモデル占有率がVBVバッファーモデルの容量の約６３／６４になると引き起こされる。
【０１４２】
ビットスタッフィングはデータバッファーオーバーランの問題を解決するのに有効であるが、エンコーディングプロセスに他の問題を誘発する。ビットスタッフィングに使用されるビットが含まれることも望ましくない結果となる。画像Ｓ(i,p,b)をエンコードするのに使われるビット数の計算において、ビットスタッフィングに使用されるビットの付加は、エンコーダが最初の目標としたものより多くのビットが画像をエンコードするために使われたことを示している。さらに、このことは、画像をエンコードするために使われるビット数を減らして、画質を低下させて画像をエンコードすると解釈される。時間周期全体にわたって、ビットスタッフィングに使用されるビット数に比例して、画像をエンコードするために使われるビット数が減少する。多くのビットがビットスタッフィングに使用されると、画像を実際にエンコードするのに、比較的少ないビットしか残らないので、エンコード画像の質を低下させることになる。
【０１４３】
図９Ａは、ビットスタッフィングがエンコーディングプロセスを不安定にしがちな、削減とか削除をして、画質を低下させるエンコーディングプロセスを安定させるプロセスであることを表している。後に記述するように、図９Ａに描かれたプロセスは、エンコーディングプロセスの様々な部分に設定できる。
【０１４４】
このプロセスは、熟練した技術者により、この発明の精神と範囲を逸脱しない様々な方法で変形できる。例えば、もう１つの実施例では、このプロセスの様々な部分が結合され、他のシーケンスと並び替えられ、あるいは削除される。このプロセスは、判定ブロック902または904から始まる。１実施例では、判定ブロック902または904の何れか１つがプロセスで提供される。ここに示された実施例では、判定ブロック902と904の両方がプロセスで提供される。例えば、プロセスは、画質のエンコーディング前には判定ブロック902からスタートし、画質のエンコーディング後には判定ブロック904からスタートする。例えば、図９Ａの判定ブロック902からのプロセスのスタートは、図６で示したレートコントロールと量子化コントロールプロセス後の状態612とプロセス前の状態614とが組み合わされる。もう１つの実施例では、図９Ａの判定ブロック904からのプロセスのスタートは、図６のプロセスの状態627と組み合わされる。
【０１４５】
判定ブロック902では、プロセスは、現在エンコーディングしている画像と前にエンコードされた画像との間で、シーンの変化が会ったかどうかを判定する。１実施例では、判定ブロック902はオプションである。シーンの変化が会ったかどうかは、様々な方法で判定される。１実施例では、画像をエンコードするのに使われた測定値の偏差の絶対値の総和（SAD）のような計算結果を再び使用する。１実施例では、Ｉ−画像に対して、今の画像の平均空間動作Ｓact_avgが、対応する前の画像の平均空間動作と比較される。例えば、今の動作が少なくとも２倍または前のＩ−画像の動作の半分より小さいとき、シーンの変化が検出される。３倍と１/３，４倍と１/４あるいはこれらの組み合わせのような他の因子も使うことが出来、通常の知識を持つ技術者により決められる。１実施例は、新しいシーンの変化を宣言するために、前のシーンの変化が宣言されて以来、画像の最低数がパスするための付加的な基準を課する。Ｐ−画像に対して、シーンの変化を検出するために、動きの平均値が、（２，１/２）、（３，１/３）、（４，１/４）のような相対比較因子を伴って、空間動作の平均値の代わりに、使用される。判定のロバスト性を増すために、１実施例は、さらに、今のＰ−画像に対して、動きの平均の最低値を使う。なぜなら、動きの平均値は、それ自身、比較的高い動き示すことができ、シーンの変化に帰すことが出来るからである。例えば、約1,000と約4,000との間での動きの平均の最低値は比較的高い動き示すのに使われる。
【０１４６】
プロセスは、シーンの変化がないと判断したとき、判定ブロック902からエンドに進んで、例えば状態614にはいる。さらに、シーンの変化があるかどうかを判断するエンコーディングプロセスの他の部分があってもよい。また、フラグの状態を検査すること、またはシーンの変化があるかどうかを示す信号により、判定ブロック902において、前の判断を再使用できる。プロセスが、シーンの変化があると判断したとき、プロセスは、判定ブロック902からサブープロセス906に進む。
【０１４７】
判定ブロック904では、プロセスは、エンコーディングプロセスがクリティカルな状態にあるかどうかを判断する。これに代わる他の実施例では、判定ブロック902と判定ブロック904のうちの１つだけが存在し、他はオプションである。判定ブロック904が存在するプロセスでは、VBVバッッファーモデルの占有率のモニタリングが画像のエンコーディングの後で行われる。エンコーディングプロセスがクリティカルな状態にあることの判断基準は、非常に広い範囲で変化する。１実施例では、クリティカルな状態は、量子化パラメータmquantjの値が最低値ほど低くないときで、エンコーディングプロセスによりビットスタッフィングが行われたときに対応する。量子化パラメータmquantjの値が最低値になるほど低い値は、エンコーディング標準のシンタックスにしたがって変化する。VBVバッッファーモデルの占有率がクリティカルな状態にあると判断されると、プロセスは、判定ブロック904からサブプロセス906に進む。そうでない場合、プロセスは、エンドに進んで、例えば、図６述べられた状態627に入る。
【０１４８】
サブプロセス906では、プロセスは、状態612で述べた変数のｄi0、ｄp0、ｄb0で代表される初期条件に対する仮想バッファー占有率の値を正規化する。正規化された変数はいろいろなやり方で計算される。サブプロセス906に示すように、正規化された値は、VBVバッッファーモデルの占有率に依存する。サブプロセス906は、状態908、判定ブロック910、状態912、状態914などを含む。
【０１４９】
状態908では、１実施例として、数式３５，数式３６ａ、数式３６ｂなどで表されるｓｕｍとdeltaを計算する。
【数３５】
2005102170.tif 000055
【数３６ａ】
2005102170.tif 000056
【数３６ｂ】
2005102170.tif 000057
【０１５０】
数式３５で、図６の状態612で述べた数式９，数式１０，数式１１を使って、初期条件に対する仮想バッファー占有率の値が得られる。数式３６ａと数式３６ｂに示すように、deltaは、バッッファーモデルの占有率の減少とともに増加する。数式３６ａでは、変数vbv_buffer_sizeは、エンコーディングに使われるVBVバッッファーモデルの容量に関係する。数式３６ｂでは、変数Ｖinitialは、VBVバッッファーモデルの占有率レベルの初期値に関係している。１実施例では、変数Ｖinitialの値は、VBVバッッファーモデルの容量の約７／８の値である。もう１つの実施例では、Ｖinitialの代わりに、プロセスは、Ｖtargetのような目標占有率レベルを使いことができるが、その初期値と目標占有率とを同じ値にすることができる。もう１つの実施例では、deltaは、バッッファーモデルのサイズからVBVバッッファーモデルの占有率レベルを差し引いた差分に基づいている。VBVバッッファーモデルのサイズあるいは容量は、エンコーディングに使われる標準にしたがって変わる。例えば図４に示したように、MPEG-1とMPEG-2エンコーディング標準は、それぞれ、約４０KBと２２４KBのVBVバッッファーサイズを規定している。他の標準では、VBVバッッファーモデルが含むメモリ容量を規定できる。プロセスは、状態908から判定ブロック910に進む。
【０１５１】
判定ブロック910では、sumの値が予め定められた閾値Ｔnormより小さいかどうかを判断する。予め定められた閾値Ｔnormは、使用可能なレンジを示すある値に対応する。例えば、予め定められた閾値Ｔnormの値としては、０がある。通常の知識を持つ技術者により、他の値が定められてもよい。プロセスは、sumの値が閾値Ｔnormより小さいとき、判定ブロック910から状態912に進む。そうでないとき、プロセスは、判定ブロック910から状態914に進む。
【０１５２】
deltaの値は、数式３６ｂのVBVバッッファーモデルにおける非占有率または、数式３６ｂでのVBVバッッファーモデルの初期状態と現在の状態との間の違いに対応する。仮想バッファーレベルのsumと非占有レベルとの比較をおこなってもよい。例えば、もう１つの実施例では、比較値に対して、より小さいか等しいとすることができるし、オフセットを含ませることもできる。
【０１５３】
状態912では、１実施例として、初期条件であるｄi0、ｄp0、ｄb0である仮想バッファー占有率の値を、数式３７，数式３８，数式３９による正規化された値として設定する。
【数３７】
2005102170.tif 000058
【数３８】
2005102170.tif 000059
【数３９】
2005102170.tif 000060
【０１５４】
数式３７，数式３８，数式３９では、deltaの値は数式３６で計算され、ｆir、ｆpr、ｆbr の値は非常に広いレンジで変化できる。ｆir、ｆpr、ｆbr の値は、通常、０と１の間のレンジの値をとり、同じ値または異なった値でも良い。さらに、もう１つの実施例では、ｆir、ｆpr、ｆbr の値は、１とか１に近い値が選ばれる。もう１つの実施例では、ｆir、ｆpr、ｆbr の値は、それぞれ、約５/１７、約５/１７、約７/１７に対応する。通常の知識を持つ技術者により、ｆir、ｆpr、ｆbr の値は、他の値が決められてもよい。プロセスは、エンドに進み、例えば、図６で述べた状態614に入る。
【０１５５】
状態914に戻ると、この時点では、プロセスは、sumがＴnormより小さくないと判断している。状態914では、１実施例として、初期条件での仮想バッファー占有率変数ｄi0、ｄp0、ｄb0の値を、数式４０，数式４１，数式４２による正規化された値に再設定する。
【数４０】
2005102170.tif 000061
【数４１】
2005102170.tif 000062
【数４２】
2005102170.tif 000063
【０１５６】
数式４０，数式４１，数式４２は、初期条件ｄi0、ｄp0、ｄb0での仮想バッファー占有率変数の値の設定に対応する。等号の右側の値は、調整前の値に対応し、等号の左側の値は調整後の値に対応する。deltaの値とsumの値とがほぼ同じとき、その値の調整はほとんど生じないことがわかる。sumの値がdeltaの値に比べて大きいとき、初期条件のｄi0、ｄp0、ｄb0に対し、仮想バッファー占有率変数の値は反比例して小さくなる。数式４０から数式４２では、０で割ることを回避するために、sumに小さな値が付加される。調整後、プロセスはエンドになり、例えば、図６で述べた状態614に入る。
【０１５７】
図９Ｂは、最終のバッファー占有率レベルに不備を検出したことによる仮想バッファー占有率レベルの再設定プロセスを示すフローチャートである。再設定プロセスは、図６で述べたレートコントロールと量子化コントロールプロセスの状態627のようなエンコーディングプロセスに組込まれる。
【０１５８】
プロセスは、判定ブロック952から始まる。前に、図６で述べたレートコントロールと量子化コントロールプロセスの状態627で説明したように、適用可能な仮想バッファーの最終占有率、すなわちｊ＝MB_cntのとき、ｄij、ｄpj、ｄbjの値は、同じタイプの次の画像のエンコーディングに対する初期条件、すなわち同じタイプ（ＩかＰまたはＢ）の画像に対するｄi0、ｄp0、ｄb0の値として使うことができる。TM5で述べたプロセスを経て行うエンコーディングのとき、適用可能な仮想バッファーの最終占有率、すなわちｄij、ｄpj、ｄbjの値は、いつも同じタイプの次の画像のエンコーディングに使用される。しかし、その適用可能な仮想バッファーの最終占有率は、いつも適切な値であるとは限らない。
【０１５９】
判定ブロック952では、適用可能な仮想バッファーの最終占有率すなわちｄij、ｄpj、ｄbjの値が、使用するのに適しているかどうかを判断する。１実施例では、その値の適用性は、その値が物理的に可能な値であるかどうかで判断される。仮想バッファーは物理的バッファーを形成する。物理的バッファーは空でも良いし、一部が占有されてもいし、全部が占有されてもよい。しかし、物理的バッファーが負のデータで占められることはない。物理的に到達できる値と非物理的に到達できる値とを区別するために、プロセスの１実施例は、適用可能な仮想バッファーの最終占有率の値を閾値ｔr と比較する。
【０１６０】
１実施例では、物理的に到達できるバッファー占有率と物理的に到達できないバッファー占有率とを区別するためのｔr の値は０である。１実施例では、比較的０に近い値が使われる。ｔr の値は、０に近い１，２，３などの値を含むレンジに対応できるが、ｔr の値は、適当と思われる最終占有率に対して負にはなりえない。ｔr の値が０のとき、プロセスは、適用可能な仮想バッファーの最終占有率の値と関連した符号が正であるか負であるかを検査することにより、物理的に到達できる値と非物理的に到達できる値とを区別できる。整数で比較すると、−１より大きいという不等号を使うことができるので、ｔr の値は−１となる。プロセスは、最終占有率の値が、同じタイプの次の画像の初期条件として使うのに適していないとき、判定ブロック952から状態954へ進む。その他の場合、判定ブロック952から状態956へ進む。
【０１６１】
状態954では、プロセスは、ｊ＝MB_cntのときのエンコードされたｄij、ｄpj、ｄbjの値の最終占有率値をリセットして、物理的に到達できる適当な値とする。適当な値には、０から適用可能な仮想バッファーの容量までのいかなる値をも含む。１実施例では、最終バッファー占有率の値は、０も含んで、０に近い比較的小さな値にリセットされる。プロセスは、状態954からオプションの状態958に進むか状態956へ進む。
【０１６２】
オプションの状態958では、仮想バッファー占有率レベルｄij、ｄpj、ｄbjの値を正規化する。前の状態954では、プロセスは、エンコードされた画像のタイプに適用された仮想バッファー占有率の値ｄij、ｄpj、ｄbjの値における非物理的に到達できる値を修正した。例えば、プロセスは、適用可能な仮想バッファーの最終占有率の値ｄij、ｄpj、ｄbjの前の負の値をとり、その負の値を残りの仮想バッファー占有率の値に割り付け仮想バッファー占有率の総計が０になるようにする。例えば、１実施例では、プロセスは、負の値の半分を他の２つの仮想バッファー占有率値にそれぞれ加える。プロセスは、オプション状態958から状態956に進む。
【０１６３】
状態956では、状態954でリセットされた値は、判定ブロック952とエンドを経て変形されていない仮想バッファーの最終占有率の値を格納する。プロセスがエンドで、例えば、図６で述べたレートコントロールと量子化コントロールの状態919に進む。
【０１６４】
（画像グループの中のシーンの変化）
図１０Ａに、画像グループの例を示す。シーケンスの中の画像間でのシーンの変化は、画像グループの中にある。シーンの変化は、画像のシーケンスの中で、普通に出会うことである。シーンの変化は、カメラショット、プログラム間の切り替え、コマーシャルへの切り替え、編集などによって起こる。シーンの変化では、今の画像のマクロブロックは、前の画像のマクロブロックとの関係はほとんどないか全くない。したがって、今の画像のマクロブロックは、予測されてコード化されるよりむしろ内部でコード化されている。Ｉ−画像は、内部でコード化されたマクロブロックのみを含むので、シーンの変化は、Ｉ−画像で用が足りている。
【０１６５】
シーンの変化に対する画像は、Ｉ−画像でコード化されるのが好ましいが、画像グループの構造、すなわち画像タイプのシーケンスをシステムの中あるいはエンコーダのコントロールの外で、予め決めることが出来る。例えば、直接サテライト放送システム（DBS）は、エンコーダによって従わされるＩ−画像、Ｐ−画像、Ｂ−画像の予め定められたパターンを持っている。その結果、シーンの変化は、Ｂ−画像またはＰ−画像でも起こる。普通のエンコーダは、予測したＢ−画像のマクロブロックを、後の時間のＢ−画像またはＰ−画像を参照することによって、Ｂ−画像のシーンの変化に適応させることができる。
【０１６６】
Ｐ−画像におけるシーンの変化は問題である。Ｐ−画像は、内部でコード化されたマクロブロックを含み、また予測されてコード化されたマクロブロックを含む。しかし、Ｐ−画像は、後の画像を参照できないので、シーンの変化は、内部でコード化されたマクロブロックのみを使ってエンコードされる。実際、普通のエンコーダにおけるシーンが変化するＰ−画像は、ビット割付とＰ−画像のヘッダ情報を持たないＩ−画像である。普通のエンコーダでは、Ｐ−画像は、Ｉ−画像より少ないビットが割り付けられるので、シーンが変化するＰ−画像の画質は、Ｉ−画像よりかなり悪くなる。Ｂ−画像や他のＰ−画像のような他の画像は、シーンが変化するＰ−画像から予測してコード化され、シーンが変化するＰ−画像の画質をふやしている。
【０１６７】
図１と５で述べたように、シーケンスにおける画像は、画像グループの中で再配列される。グループは、１つのＩ−画像からスタートし、続くＩ−画像の直前の画像で終わる。画像グループの中の画像は、提供の為と、エンコーディングのためとでは、違った順に並べられる。例えば、提供順で第１の画像グループ1002を、図１０Ａに示す。次の画像グループの１つのＩ−画像1004もまた図１０Ａに示す。
【０１６８】
シーケンスにおける画像は、エンコーディングとデコーディングのとき、提供順に再配列される。例えば、第１の画像グループ1002は、そのプループがシーケンスにおける第１グループであるとき、第２の画像グループ1010に再配列され、そのプループがシーケンス実行中の部分のときは、第３の画像グループ1020に再配列される。第２の画像グループ1010と第３の画像グループ1020がエンコーディング順にしめされている。もう１つのグループからのＩ−画像に出会うとき、第２の画像グループ1010は最後となる。再配列により、提供順では、はじめ第１の画像グループ1002にあった２つのＢ−画像1014、1016はエンコーディングの再配列のために、もはやその画像グループの中にはない。図１０Ｂに述べたプロセスに関しては、画像グループはエンコーディング順におけるグループに関係する。
【０１６９】
第３の画像グループ1020は、図１０Ｂに述べたプロセスを説明するために使われる。第３の画像グループ1020は、第３の画像グループ1020のＩ−画像1026の前に提供される２つの画像1022、1024を含む。ここに示す例では、第３の画像グループ1020の中の１つのＰ−画像で、シーンの変化が起こっている。図１０Ｂに示したプロセスは、シーンの変化を認識し、第３の画像グループ1020の中の残存画像1032の残存ビットを再割付して画質を改善する。
【０１７０】
図１０Ｂは、画像グループ（GOP）の中で、シーンの変化を検出したときのエンコーディングパラメータの再設定のためのプロセスを説明するフローチャートである。ここで示すプロセスの実施例では、エンコーディング順は、画像グループのグルーピングを記述するために使われる。
【０１７１】
図１０Ｂに示したプロセスは、シーン変化のＰ−画像を示し、画像グループの基本的な構想を変えることなく、画像グループの残存画像の中のビットを再割付する。プロセスが、シーン変化したＰ−画像により多くのビットを割り付けて画質を改善するところが優れている。ここで示したプロセスは、図６で前に述べたレートコントロールと量子化コントロールプロセスに組み合わされる。例えば、図１０Ｂに示したプロセスは、図６の状態610の前に組み合わされる。ここで示したプロセスは、熟練した実務者により、この発明の精神と範囲から逸脱しない範囲での種々の方法による変形が可能である。例えば、もう１つの実施例では、このプロセスのいろいろな部分を組み合わせたり、代わりのシーケンスで並べ替えたり、削除したりすることができる。
【０１７２】
プロセスは、判定ブロック1052から始まる。判定ブロック1052では、プロセスは、シーン変化または画像における動きの総量の急激な増大があったかどうかを判断する。シーン変化はいろいろな技術で判断される。１実施例では、プロセスは、既に可能な画像比較の計算を行う。例えば、１実施例では、偏差の絶対値の総和（SAD）が使われる。SADは予め定められた値、動きの平均値、あるいはその両方と比較し、シーン変化を判断する。例えば、SADが予め定められたレベルを越えるとき、あるいは、SADの動きの平均の２倍を越えるとき、シーン変化の検出をすることができる。SADは、シーン変化または画像における動きの総量の急激な増大を検出するのに優れている。シーン変化をモニタリングするエンコーディングプロセスのもう１つの部分があり、１実施例として、もう１つのシーン変化検出の結果は、判定ブロック1052で再使用される。シーン変化が検出されると、プロセスは、判定ブロック1052から、判定ブロック1054へ進む。その他の場合、プロセスはエンドになり、例えば、図６で前に述べたレートコントロールと量子化コントロールの状態610に入る。
【０１７３】
判定ブロック1054では、プロセスは、エンコードされる画像のタイプがＰ−タイプであるかどうかを判断する。もう１つの実施例では、判定ブロック1052と判定ブロック1054の順序は、図１０Ｂに示されているものから入れ替えることができる。画像がＰ−画像としてエンコードされるとき、プロセスは、判定ブロック1054から状態1056に進む。その他の場合、プロセスはエンドになり、例えば、図６で前に述べたレートコントロールと量子化コントロールの状態610に入る。
【０１７４】
状態1056では、画像グループの残存画像の間でビットを再割付する。１例としては、Ｐ−画像1030でシーン変化が検出されたとき、図１０Ａの第３の画像グループ1020を使って、残存ビットＲは残りの画像1032の間で再割付される。１実施例では、プロセスは、Ｐ−画像1030がＩ−画像であるかのように、残りの画像1032をエンコードするが、Ｐ−画像1030の画像タイプを変化させないで、画像グループの構成を入れ替えることはない。
【０１７５】
それがＩ−画像であるかのように、Ｐ−画像1030をエンコードするプロセスは、多くの方法で実施される。例えば、プロセスの１実施例としては、シーン変化を伴ってエンコードされたＰ−画像の前にエンコードされたＰ−画像の数Ｎｐを繰り下げて、目標ビット割付を発生する数式６における繰り下げられたＮｐを使う。Ｉ−画像の目標ビット割付Ｔｉを計算するために、通常のシステムに使われる数式６は、図１０Ｂのプロセスで、シーン変化を伴うＰ−画像の目標ビット割付の計算に使われる。数式４３は、そのような目標ビット割付をＴｐとして表している。
【数４３】
2005102170.tif 000064
【０１７６】
これは、Ｐ−画像に比較的多くのビットを割り付けるので、シーン変化を伴うＰ−画像は、シーン変化を高画質でエンコードできる。画像グループの中で、エンコードされるように残っているＰ−画像とＢ−画像の引き続いてのエンコーディングのために、数式７，数式８が使われる。オプション的に、プロセスは、シーン変化に応じて、複雑な評価値Ｘi、Ｘp、Ｘb に対する値を、例えば、図６のレートコントロールと量子化コントロールの状態608で記述した数式１から数式３を適用して、さらにリセットできる。プロセスはエンドになり、例えば、図６で前に述べたレートコントロールと量子化コントロールの状態610に入る。図１０Ａと１０Ｂで述べたプロセスは、画像グループの中で、１つより多くのシーン変化があるときは繰り返される。
【０１７７】
（Ｂ−画像におけるマクロブロックの選択的スキッピング）
図１１は、ビデオエンコーダにおけるデータの選択的スキッピングのプロセスを一般的に説明するフローチャートである。このデータの選択的スキッピングは、比較的極端な条件でも、ビデオエンコーダが比較的良好なビットレートを維持するのに優れている。選択的スキッピングにより、ビデオエンコーダは、デコーダバッファーアンダーランのようなデコーダバッファーにおける低い占有率レベルを低減するかまたは削除するようなデータの流れをエンコードする。デコーダバッファーアンダーランは、再生ビットレートが決まった時間周期でのデータチャンネルからの一定ビットレートを越えて、デコーダバッファーがデータの外にはみ出したときに起こる。デコーダバッファーアンダーランは好ましくないし、表示中に、一時停止のような不連続を引き起こす結果になる。
【０１７８】
デコーダバッファーアンダーランが起こらなくても、低いデコーダバッファー占有率レベルになるようなデータの流れは好ましくない。前に図４で説明したように、VBVバッファーモデルのようなバッファーモデルが、通常、デコーダバッファー占有率レベルを形成するように、エンコーディングプロセスの中で使われる。デコーダバッファー占有率レベルが危険となるほど低いと、普通のエンコーダが判断するとき、普通のエンコーダは、エンコーディングビットを保持し、ビットレートコントロールを維持するために、画像とぎりぎり妥協する。低いVBVバッファーモデル占有率レベルの効果は、マクロブロックの深刻な画質低下になることに注目すべきである。
【０１７９】
図１１のフローチャートで説明されるプロセスは、比較的低いバッファーモデル占有率レベルが検出されたとき、選択されたマクロブロックのエンコーディングをスキップして、ビット数を減らすことにより、良好なビットレートコントロールを維持することが、普通の技術のように、画像に厳しい衝撃を与えない方法で、画像をエンコードするのに使われる。１実施例では、図１１に示すプロセスは、図６で前に述べたレートコントロールと量子化コントロールの状態623と組み合わされる。ここで示したプロセスは、熟練した実務者により、この発明の精神と範囲から逸脱しない範囲での種々の方法による変形が可能である。例えば、もう１つの実施例では、このプロセスのいろいろな部分を組み合わせたり、代わりのシーケンスで並べ替えたり、削除したりすることができる。
【０１８０】
プロセスは、判定ブロック1102からスタートする。ここでは、Ｂ−画像に対応してエンコードされるべき画像かどうかを判断する。Ｂ−画像は、提供された順に早かったり遅かったりする他の画像（Ｉ−画像またはＰ−画像）からのマクロブロックを基に予測したマクロブロックでエンコードされることができる。しかし、エンコーディングプロセスのあいだ、Ｂ−画像をエンコードするのに使われた画像（Ｉ−画像またはＰ−画像）は、Ｂ−画像のエンコーディングに先駆けてエンコードされる。プロセスは、エンコードされる画像がＢ−画像のとき、判定ブロック1102から判定ブロック1104に進む。その他の場合、プロセスはエンドになり、例えば、図６で前に述べたプロセスの状態623に戻る。
【０１８１】
判定ブロック1104では、プロセスは、VBVバッファー占有率レベルが比較的低いかどうかを判断する。エンコーディングプロセスのあいだ、比較的多くのビットがエンコードされるべきＢ−画像からの画像のエンコーディングに費やされているかのしれない。幾つかの環境では、このデータの消費が、VBVバッファー占有率レベルを低下させる。例えば、プロセスは、図７で述べたように、VBVバッファーモデルの占有率レベルＶstatusをモニターでき、占有率レベルＶstatusとＶcriticalのような予め定められた閾値とを比較できる。その比較は、エンコーディングプロセスのいろいろな時点で行うことができる。１実施例では、この比較は、画像がエンコードされた後とVBVバッファーモデルの占有率レベルが決まった後に実行できる。すなわち、図６で述べたレートコントロールと量子化コントロールの状態638の後または状態610の後に行う。１実施例では、エンコードされた画像におけるマクロブロックの前に比較を行うのが有利である。それにより、比較的多くのビットを保つのに好ましいときの画像にけるすべてのマクロブロックをスキップできるように、有利に保持されるからである。
【０１８２】
１実施例では、ＶcriticalはVBVバッファーモデルの容量の約１/４に設定される。VBVバッファーモデルの容量あるいは同様なバッファーモデルはエンコーディング標準に伴って変わる。Ｖcriticalの適切な値は、広いレンジから選択される。例えば、他の値、VBVバッファーモデルの容量の１/１６，１/８，１/１０，３/１６などを使うことができる。また、通常の知識を有する技術者により、他の値が決められても良い。１実施例では、Ｖcriticalの設定はユーザが行っても良い。VBVバッファーモデルの占有率レベルＶstatusが予め定めた閾値より低いとき、プロセスは、判定ブロック1104から状態1106に進む。その他の場合、プロセスは、判定ブロック1104から状態1108に進む。
【０１８３】
状態1106では、プロセスは、Ｂ−画像におけるマクロブロックをスキップする。１実施例では、全てのマクロブロックがスキップされる。もう１つの実施例では、選択されたマクロブロックがスキップされる。多くのマクロブロックが、例えば、VBVバッファーの占有率レベルＶstatusを基に、スキップされることができる。エンコードされたＢ−画像のデータは形成されているが、スキップされたマクロブロックのデータは少ない。エンコーディングプロセスでは、データの流れの中での１ビットあるいはフラグがスキップされたマクロブロックを示す。例えば、直接モードとして知られている技術では、フラグは、（提供時における）Ｉ−画像またはＰ−画像の前と後のマクロブロックの間でエンコーディングされるあいだに、スキップされたマクロブロックが挿入されていることを示す。もう１つのフラグは、提供時におけるＩ−画像またはＰ−画像の前のマクロブロックから、スキップされたマクロブロックがコピーされたことを示す。また、もう１つのフラグは、提供時におけるＩ−画像またはＰ−画像の後のマクロブロックから、スキップされたマクロブロックがコピーされたことを示す。マクロブロックのスキッピングは、比較的少ないビットでＢ−画像をエンコードできる利点がある。１実施例では、スキップされたマクロブロックを伴うMPEG-2のＢ−画像は、ほんの約３００ビットを使ってエンコードされている。Ｂ−画像のマクロブロックのスキッピング実行後、プロセスはエンドになり、例えば、図６で前に述べたプロセスの状態623に戻る。
【０１８４】
状態1108では、VBVバッファーモデルの占有率レベルＶstatusが比較的低くないと判断し、Ｂ−画像におけるマクロブロックをエンコードする。Ｂ−画像におけるマクロブロックのエンコーディング後、例えば、図６で前に述べたプロセスの状態623に戻る。判定ブロック1102および/または判定ブロック1104で行われた決定は、状態1106または状態1108よりも図６のプロセスの中の異なった点で実行されてもよい。
【０１８５】
（適応的なＩ、Ｐ−フレームとＢ−フレームDCTのフィルタリング）
MPEGあるいは他のビデオエンコーダは比較的低いビットレートで圧縮するのが困難なビデオシーケンスに出くわすことがある。この状況は、可変ビットレート圧縮を使うことにより避けることができる。それは、エンコーダがシーンをエンコードするのが困難になったとき、瞬間的にビットレートをあげる方法である。一定ビットレート圧縮技術は、ビデオコンパクトディスク（VCD）、デジタルＴＶ放送（衛星、ケーブル、地上波を含む）などに使われ、ビットレートを増やす機能を組み込むことは、通常できない。なぜならば、VBVバッファーモデルの対応性が、画像をエンコードするのに可能なビット数になるよう強制するからである。その代わりに、画質は損害を受ける。例えば、普通のエンコーダは、量子化パラメータQPの値を増大させて、見やすい圧縮にする。見られる圧縮の例は、ビデオシーンをエンコードするのに困難なかたまり感とぎくしゃく感を含む。
【０１８６】
図１１で述べたプロセスは、VBVバッファーモデルの占有率レベルに応じたＢ−画像におけるマクロブロックのエンコーディングを選択的にスキッピングすることにより、VBVバッファーの要求と合理的な画質への適応性を維持する。図１２と１３で述べるプロセスは、図１１で述べたプロセスとの組み合わせまたは単独で使われる。
【０１８７】
図１２と１３で述べるプロセスでは、プロセスは、画像をエンコードするのに必要とするビット数を減らすための離散的余弦変換（DCT）係数を選択的および/または適応するようにフィルタリングする。プロセスは、VBVバッファーモデルの占有率レベルと観測される量子化パラメータのレベルに応じてDCT係数を適応するようにフィルタリングする。選択的フィルタリングは、エンコーディングビットが制限され、VBVバッファーモデルあるいはどうようなバッファーモデルの整合性が要求される状況で、画像をエンコードするのに使うビット数と画質とのトレードオフを改善する。DCT係数のフィルタリングは、通常の量子化テーブルで提供されるフィルタリングとは異なっている。量子化テーブルの内容は、エンコーディング中は固定されており、ビットの流れの中で交換される。すなわち、エンコーダとデコーダは閉ループの中で、同じ量子化テーブルを使用する。ここで述べるDCT係数のフィルタリングは、エンコーダにおいてのみ、DCTの選択的な開ループフィルタリングに関する。デコーダでは、補償のための調整を必要としない。
【０１８８】
選択的なDCTのフィルタリングは、一般に、８ｘ８のイメージブロックで記述できる。８ｘ８イメージブロックはMPEG1、MPEG2、MPEG4などで使われている。DCTのフィルタリングは、他のビデオ圧縮標準、例えば、ブロックサイズが４ｘ４のH.264にも適用できることは、熟練した実務者には理解できるであろう。
【０１８９】
図１２は、選択的なDCTのフィルタリングを説明するフローチャートである。エンコーディングプロセスの間、エンコーダは、動きの探索1210を行い、動き補償1220を行い、DCT係数を計算1230する。１実施例では、プロセスは、続いてDCT係数を選択的にフィルタリング1240し、ならびに/あるいはQPの値を比較的低い値に、選択的に制限1250する。そのようなフィルタリング1240、QP値の制限または設定1250は、VBVバッファーモデルの占有率レベルおよび/または比較的高いQP値の検出に対応して選択的に適用される。比較的高いQP値はデータをエンコードするのに使われるビット数を減少させるので、高いQP値は、画像のかたまり感による画質の劇的低下をもたらす。プロセスは、次にDCT係数の量子化1260に進む。DCT係数がフィルタリングされ、QPが制限されて、プロセスは、調整されたQP値で、フィルタリングされたDCT係数を量子化する。VBVバッファーモデルの占有率レベルが比較的高いとき、プロセスは、DCT係数をフィルタリングしないで、QP値も置き換えないように選択することができる。図１３で述べるように、プロセスの１実施例は、VBVバッファーモデルの占有率レベルに応じてフィルタリングの強度を変化させる。図１３のプロセスを述べる前に、周波数ドメインでのフィルタリングの例について述べる。
【０１９０】
周波数ドメインにおいて、ωx とωy が、イメージデータあるいは動きの補償の後に残るエラーの８ｘ８のブロックの、２−Ｄ離散的余弦変換（DCT）のもとでの水平方向と垂直方向の周波数ドメイン変数を示す。この周波数ドメインにおいて、DC係数に対応して、ωx ＝０とωy ＝０、すなわちイメージデータあるいは残留エラーの８ｘ８のブロックの平均値であり、ωx
＝７とωy ＝７は、イメージデータあるいは残留エラーの８ｘ８のブロックの最高周波数の詳細さに対応する。４ｘ４ブロックのイメージデータでは、ωx ＝３とωy ＝３が、最高周波数の詳細さに対応する。
【０１９１】
人の視覚と受容性は、低い周波数により敏感で、高い周波数には比較的敏感ではない。同時に、多くのビデオイメージは低い周波数に比べて高い周波数でのエネルギーは小さい。にもかかわらず、ビデオ情報がDCT係数の量子化により圧縮されるとき、特に、量子化スケールが高い値（大きな量子化エラーが予想されるが）のときに、高精細なフレームの残留エラーは高周波領域に大きなエネルギーを持つ。これは、量子化スケールが高い値であっても、圧縮のための非常に多くのビットを要求する結果になる。
【０１９２】
図１３で述べられるプロセスにおいて、シーンをエンコードするのに、そのような困難を検出し、エンコーディング中にローパスフィルタを選択的にイメージに適用する。フィルタリングは、動きの探索後、動きの補償後、DCTの計算の後で、量子化の前に提供される。この方法において、高周波成分が犠牲になり、（それらの値が減少または０になる）空間分解能が幾分低下する。特に、ビデオ画像の高精細な部分の分解能が低下する。しかし、イメージ品質の全体的なバランスは改善する。１実施例では、非分離ピラミッドタイプのローパスフィルタが使われる。ピラミッドは、フィルタの応答が、低周波（DC）から高周波（最大AC）まで傾斜した形状のものを言う。勿論、通常の知識を持つ技術者により、ほかの形状のフィルタも使用されることができる。１実施例では、ピラミッドタイプのフィルタは、正の値をもつパラメータ、ｓ≧１に依存し、数式４４により一意的に表される。
【数４４】
2005102170.tif 000065
【０１９３】
周波数変数のレンジは、適用されるエンコーディング標準で定義されるイメージブロックのサイズに依存する。ｓの逆数（１/ｓ）はフィルタの強度に関係する。１実施例では、フィルタの強度（１/ｓ）は、０から１の間の値をとる。フィルタの強度（１/ｓ）が０のとき、すなわちｓ→ ∞ のとき、レスポンスＨｓは一定の値＝１になる。このことは、フィルタリングされていないこと（DCT係数は変化しないこと）を意味する。フィルタの強度（１/ｓ）が大きい値、ｓ＝１とき、Ｈｓは、ωx ＝ωy ＝０、のときを除いて、どこでも一定値＝０となる。このような極限の場合では、フィルタの適用は、水平方向と垂直方向の両方向での８因子によるビデオ画像のサンプリングを低下させる。
【０１９４】
フィルタの形は強度パラメータとともに変化する。ここに説明した例では、強度（１/ｓ）が１/３２（弱）、１/１６（中）、１/８（強）に対応して記載する。表３，表４，表５に、いろいろな強度での形の一例を示す。表３，表４，表５に対応するフィルタのグラフを図１４，１５，１６にそれぞれ示す。熟練した実務者による多くの変形は可能である。フィルタの変形と強度の変形が可能である。また、多くの異なったフィルタの変形ができる。例えば、他の例では、３つ以上あるいは以下の異なったフィルタがある。
【表３】
2005102170.tif 000066
【表４】
2005102170.tif 000067
【表５】
2005102170.tif 000068
【０１９５】
表３，表４，表５では、DC  DCT係数（ωx ＝０とωy ＝０）は、左上にある。水平周波数変数ωx は、右方向に増加し、垂直周波数変数ωyは、下方向に増加する。他の強度と形は、通常の知識をもつ技術者により決められる。
【０１９６】
ここに示した例では、フィルタの重みは、最高周波数DCT係数の位置AC（７，７）での３つのフィルタ強度に対し、それぞれ９/１６（１８/３２）（弱）、１/８（２/１６）（中）、０（強）の値を使い、一方、DCの位置（０，０）では、１の値を維持する。フィルタは、DC係数が変化しないように決められる。他のDCT係数に対するフィルタ値は、面上のポイントに配置される。したがって、フィルタ強度が高くなるにしたがって、傾斜が急になる。勿論、通常の知識をもつ技術者により、他の変形が決められ、カーブの形も決められる。
【０１９７】
１実施例では、変数ｓは（１/８，１/１６，１/３２）のような２の冪数が選ばれる。したがって、割り算は複雑な操作をしなくても、ビットをシフトするだけで効果的に達成できる。しかし、フィルタの強度は、０から１の正の値をとる。さらに、多くの汎用プロセッサは、２進シフトを使っての多変数乗算と除算ができるようにサポートしており、例えば、図６で述べたように、マルチメディアエクステンション（MMX）インストラクションセット、あるいは、シングルインストラクションマルチプルデータ（SIMD）のようなプロセッササポートしている。この２の冪数を使うことは、これらのおよび同様の構成での設定全体を単純化し、ビデオエンコーディングの速度を高め、リアルタイムで処理できるようにしている。例えば、フィルタリングプロセスは、無視できるほどの少ないオーバーヘッドで設定でき、１実施例では、約１％であった。
【０１９８】
図１３で詳細に述べるように、DCTフィルタリングは、ビデオシーケンス全体に適用でき、画像の場合、マクロブロックの場合、それらの結合した場合に、適応できる。ローパスフィルタも適用でき、例えば、専用ハードウエアのエンコーダにも適用できるが、フィルタの応答をローパスの効果をなくすように選ぶこともできる。DCTフィルタリングを適用するには多くの因子があり、DCTフィルタリングの強度が適用される。１実施例では、既に典型的に計算された公式の変数が、プロセッサの付加的オーバーヘッドおよび/またはハードウエアの付加的回路が少なくなるように決められる。例えば、１実施例では、DCTフィルタリングは、次の２つのパラメータの振る舞いを見て選ばれる。すなわち、VBVバッファーモデル占有率と今のフレームの実行中のQPの平均値である。VBVバッファーモデルは図７に詳細に記載した。VBVバッファーモデルあるいは同様のバッファーモデルの理論的占有率レベルは、MPEGビデオエンコーダのようなビデオエンコーダにより、既に支持されている。
【０１９９】
実行中のQPの平均値もまた、既に典型的に計算された公式の変数が、ビデオエンコーダに支持されている。実行中のQPの平均値を計算するのに多くの変形があり、例えば、平均値を計算するのにどれだけのサンプルを使うか、平均を求めるときの重みは一定でないかどうかなどがあり、多くのビデオエンコーダは、ビデオの質をモニタするために、QPの平均値を追跡している。実行中のQPの平均値が比較的高い、例えばQPの上端に近い値、すなわち３１に近い値では、かたまり感がある画像のような画質となる。それに対し、実行中のQPの平均値が、１のような下端に近い値では、かたまり感がなく、高画質のエンコーディングとなる。１実施例では、実行中のQPの平均値を計算するのに使われる画像の数（Ｎ）は、２から３０の範囲である。
【０２００】
１実施例では、VBVバッファーモデルの状態と実行中のQPの平均値に応じて、（ａ）DCTフィルタリングと低いQPの値を使う、（ｂ）DCTフィルタリングは行わないで、高いQPの値を使う、ことの間でのトレードオフになる。（ｂ）が普通のエンコーディング技術に対応する。
【０２０１】
１実施例では、エンコーダがDCTフィルタリングを適用するとき、フィルタリング強度と大きさを決めるための決定がなされる。熟練した実務者によって、エンコーダによって選ぶことができるフィルタリング強度は、例えば、２，３，４あるいはもっと大きな強度の広い範囲で変えることが出来る。表３，表４，表５に示された例では、対応するフィルタ係数マトリックスで、エンコーダは３つの強度（１/３２＝弱、１/１６＝中、１/８＝強）の間で選択している。フィルタ強度については、多くの変形が可能である。
【０２０２】
フィルタ係数のもう１つの例では、表６，表７，表８に示すように、フィルタの周波数応答を調節することにより、フィルタリングの総量を変えるころができる。フィルタリングの総量は、たとえ、フィルタの強度（１/ｓ）が同じであっても、変えることが出来る。表６，表７，表８に記載されたフィルタの応答において、フィルタの強度（１/ｓ）は、それぞれのフィルタで１/１６である。
【表６】
2005102170.tif 000069
【表７】
2005102170.tif 000070
【表８】
2005102170.tif 000071
【０２０３】
フィルタリング操作は、DCT係数と前にあげた係数との間の単純なスカラー積を意味する。多くのプロセッサは、多変数の積算並列にを行うインストラクションをサポートしている。SSEインストラクションセットまたはMMXインストラクションセットをサポートするプロセッサのインストラクションの例では、パックトマルチプライPMULがある。除算の操作は、因子が２の冪数である限り、ビットを右にシフトする操作に対応する。DCTフィルタリングを適応させて選ぶプロセスを説明する。
【０２０４】
図１３は、ビデオエンコーダにおけるDCTフィルタリングを適応させて選ぶプロセスの例を説明するフローチャートである。ここで示したプロセスは、熟練した実務者により、この発明の精神と範囲から逸脱しない範囲での種々の方法による変形が可能である。例えば、もう１つの実施例では、このプロセスのいろいろな部分を組み合わせたり、代わりのシーケンスで並べ替えたり、削除したりすることができる。
【０２０５】
プロセスは、状態1302からスタートし、画像のエンコーディングに先駆けて更新されるVBVバッファーモデルの占有率レベルを修正する。バッファーモデルの占有率レベルは、エンコーディングプロセスで既に計算されている。プロセスは、占有率レベルが使われるまで、占有率レベルを修正する必要はないが、データの修正は、状態1302に明確に示されている。プロセスは、状態1302から状態1304に進む。
【０２０６】
状態1304では、プロセスは、移動平均として知られている、実行中のQPの平均値を計算するか、あるいは修正する。１実施例では、実行中のQPの平均値は、存在する実行中のQPの平均値から再使用される。もう１つの実施例では、実行中のQPの平均値は分離して計算される。さらに、もう１つの実施例では、新しい実行中のQPの平均値は、存在する実行中のQPの平均値と現在実行中の平均値とから計算され、数式４５で表されるような実行中のQPの平均値に重み付けを行う。
【数４５】
2005102170.tif 000072
【０２０７】
数式４５では、QＰrunは、システム状態変数から修正された実行中のQPの平均値に対応し、QPx_prevは、同じタイプ（Ｉ、Ｐ、またはＢ）の前の画像のQPに対応する。数式４５の結果、QPx_avgは、選択された閾値、すなわちフィルタリングのQP閾値（QPflt_thrと表示）と比較して使われる。プロセスは、状態1304から判定ブロック1306に進む。
【０２０８】
判定ブロック1306では、プロセスは、実行中のQPの平均値と予め定められた閾値とを比較する。１実施例では、QPflt_thrが選ばれる。QPflt_thrは、QPx_avgのようなQPの平均値に対応したビデオの質の閾値に対応する。QPx_avgは、ビデオでのかたまり感の現れ易さを示す。通常の知識をもつ技術者により、閾値は広く変えることができ、ビデオの分解能、フレームレート、ビットレートの束縛などの環境条件に依存して変えることができる。１実施例では、プロセスは、高分解能よりは低い分解能のビデオに対して小さな閾値を使う。１実施例では、プロセスは、VCDサイズのビデオ（352ｘ240）またはそれより小さい分解能にたいして、QPflt_thr＝６の閾値を使う。DVD、NTSC（720ｘ480）、同様なサイズのビデオでは、QPflt_thr＝１４の閾値を使う。VCDのような、より小さな分解能のビデオでは、低分解能ビデオは高分解能ビデオよりも大きなピクセルを持つので、かたまり感に対して敏感である。他の値も使うことができ、異なったコーディング標準（MPEG4/H.264）または異なったフレームサイズやフレームレートにより、通常の知識をもつ技術者なら、他の値を決めることができる。
【０２０９】
ここに示すプロセスでは、実行中のQPの平均値が閾値より大きい（QPx_avg＞QPflt_thr）ときに、プロセスは、判定ブロック1306から状態1308に進む。その他の場合、プロセスは、判定ブロック1306から状態1312に進む。
【０２１０】
状態1308では、プロセスは、状態1324における画像の全てのマクロブロックをフィルタリングするのに、判定ブロック1322に指示するためのフラグをセットする。プロセスの変形は可能で、もう１つの実施例では、実行中のQPの平均値が閾値より大きくなることの検出に応じて、全てのマクロブロックより少ないマクロブロックがフィルタリングされる。ここに示された実施例にもどると、実行中のQPの平均値が閾値より大きくなるのに応じて、全てのマクロブロックがフィルタリングされ、プロセスは、状態1308から状態1310に進む。
【０２１１】
状態1310では、プロセスは、DCT係数に適用するフィルタ強度を選ぶ。前に述べたように、フィルタの効果は、フィルタの周波数応答とフィルタの強度（１/ｓ）に従って変化する。ここに示すプロセスでは、状態1302で修正されたVBVバッファーモデル占有率レベルは、フィルタの強度を決めるために使われる。１実施例では、VBVバッファーモデル占有率レベルに対する初期と長期の目標値は、VBVバッファーモデルの容量の約７/８（vbv_buffer_sizeの７/８）のとき、次の基準がフィルタ強度を選ぶのに使われる。VBVバッファーモデルの容量の約７/８の目標はビデオエンコーダの代表的な目標である。基準は、広い範囲で変化し、エンコーダが選んだフィルタ強度の大きさに依存して変わり、VBVバッファーモデル占有率に対する異なった目標および/または閾値に基づいて変わる。
【０２１２】
１実施例では、VBVバッファーモデル占有率が低くなるにしたがって、適用されるフィルタの強度が強くなる。１実施例では、VBVcurが現在の画像またはフレームのVBVバッファーモデル占有率を表すとき、フィルタ強度は次のように選ばれる。DCTフィルタリング強度は、（VBVcur＞６/８＊vbv_buffer_size）のとき、弱く設定される。６/８＊vbv_buffer_sizeの閾値より低く、（VBVcur＞３/８＊vbv_buffer_size）ならば、DCTフィルタリング強度は、中くらいに設定される。３/８＊vbv_buffer_sizeの閾値より低ければ、DCTフィルタリング強度は、強に設定される。プロセスは、状態1310から状態1320に進む。
【０２１３】
判定ブロック1306に戻って、実行中のQPの平均値が閾値より小さいか等しい（QPx_avg≦QPflt_thr）とき、プロセスは、状態1312に進み、選択されたマクロブロックがフィルタリングされる。１実施例では、プロセスは、フィルタリングが選択されたマクロブロックに適用されるのを決めて、それは、表３で述べたような弱いフィルタリング強度である。プロセスは、状態1312から状態1320に進む。
【０２１４】
状態1320では、プロセスは、マクロブロックに対する量子化パラメータを計算する。状態1320は、画像のマクロブロックを処理するためのループのスタートに対応する。量子化パラメータ（QP）を計算するには、いろいろな技術を使うことができる。１実施例では、QPは、MPEGからのTM5に記述されている標準的な技術を使って計算できる。もう１つの実施例では、図６で述べたQPの計算方法のような他の技術を使うことができる。TM5タイプのレートコントロールでは、特別なマクロブロック（ＭＢ）ｉの量子化パラメータ（QP）は、仮想バッファーステータスとマクロブロックの空間動作により決定される。もし、前のMBのビット割付が越えている、すなわち多すぎるビットが消費されているならば、TM5のレートコントロールは、高いQPの値を、続くマクロブロック（ＭＢ）に指定することにより、これを補償できる。
【０２１５】
TM5タイプのレートコントロールは、「適応量子化」と呼ばれる方法を使っている。それは、平坦な領域（少ない模様）でのマクロブロックには比較的小さなQPを、模様が多い領域のマクロブロックには比較的大きなQPを指定する方法である。その結果、多くのマクロブロックに大きなQPが指定されることになり、視覚的に、かたまり感のような不快な表示になる。後で述べるように、１実施例では、かたまり感を減らすために、大きなQP値を減じるプロセスを示す。それは、DCTフィルタリングを行うことにより、VBVバッファーモデルの制限に従ってエンコディングプロセスでのビット消費を減らす方法である。プロセスは、状態1320から判定ブロック1322に進む。
【０２１６】
判定ブロック1322では、プロセスは、全てのマクロブロックまたは選択されたマクロブロックにフィルタリング処理がされたかどうかを判断する。ここに示すプロセスでは、プロセスは、状態1308でセットされたフラグの状態をモニタしている。全てのマクロブロックがフィルタリング処理されると、プロセスは、判定ブロック1322から状態1324に進む。その他の場合、プロセスは、判定ブロック1322から判定ブロック1328に進む。
【０２１７】
状態1324では、プロセスは、選ばれたDCTフィルタをDCT係数に適用する。データ中のゼロの数を増やすようなフィルタリングによって、ビット数が減少し、圧縮されるべきデータの数が減少する。例えば、ゼロを付加することは、連続的にゼロになる機会を増やし、ランレングスをコンパクトにできる。プロセスは、状態1324から状態1326に進む。
【０２１８】
状態1326では、プロセスは、かたまり感を緩和するために、QP値に上限を設定する。かたまり感効果は、同じQP値を使っても、マクロブロック間（前、後、挿入などのモードを含む）よりも、マクロブロック内での処理に多く見られる。１実施例では、マクロブロック間に対してよりもマクロブロック内に対して、より小さなQP値に制限している。マクロブロック間に対する上限値とマクロブロック内に対する上限値は、それぞれQpintra_thrとQpinter_thrで表される。１実施例では、式４６によるVBVバッファーモデルの占有率にしたがって、適応するように、限界値が選択された。
【数４６】
2005102170.tif 000073
【０２１９】
例えば、今のVBVバッファーモデル占有率レベルが、VBVバッファーモデルの容量の、約４/８と５/６の間にあれば、QPの上限値は、マクロブロック内とマクロブロック間に対して、それぞれ、１４と２０が選ばれる。通常の知識をもつ技術者により、QPの他の上限値、すなわち、Qpintra_thrとQpinter_thrに対する他の値が選ばれても良い。上限値として、状態1320で計算されたＱＰが適用される。状態1320で計算されたＱＰが、与えられた上限値（Qpintra_thrとQpinter_thr）より大きいとき、関連したＱＰの上限値が使われる。プロセスは、状態1326から状態1330に進み、マクロブロックがエンコードされる。
【０２２０】
判定ブロック1328に戻る。プロセスのこの時点では、状態1324でのDCTフィルタリングの適用と状態1326でのQPの調整を、その場合に応じて、マクロブロックに対して行うことを決めた。１実施例では、プロセスは、判定ブロック1328から、DCTフィルタリングを行う状態1324に進み、実行中のQPが式４６で述べた閾値を超えたときに、QP値を調整するプロセスに進む。実行中のQPが閾値を超えていないときには、DCTフィルタリングを適用しないし、QP値も調整しないで、状態1330に進む。
【０２２１】
状態1330では、プロセスは、マクロブロックをエンコードする。エンコーディングは、判定ブロック1328から状態1330に入り、フィルタリングされていない場合と、状態1326から状態1330に入り、フィルタリングされている場合とがある。プロセスは、状態1330から判定ブロック1332に進む。
【０２２２】
判定ブロック1332では、プロセスは、画像における全てのマクロブロックのエンコーディングが終了したかどうかを判断する。エンコードされるべきマクロブロックが残っているときには、プロセスは、状態1320に戻り、処理を継続する。その他の場合は、プロセスはエンドになり、続くフレームのエンコーディングを再スタートさせる。
【０２２３】
（マクロブロックモードの決定）
図１７は、マクロブロックのモードを選択するプロセスを説明するフローチャートである。普通のビデオエンコーディング技術では、マクロブロックのエンコーディングモードの決定が不適切である。この発明による１実施例では、モード決定に、動きのベクトルに対するコーディングコストを含み、モード選択の質を高めているのが優れているところである。さらに、１実施例では、その決定にＬ１基準を使い、モード決定において、動きのベクトルに対するコーディングコストがかかる計算の複雑さを低減している。
【０２２４】
状態1710では、プロセスは、動きの探索を行う。あるマクロブロックに対する適切なコーディングモードを決めるために、普通のエンコーダは二乗和を計算するが、それは、Ｌ２基準として知られており、マクロブロックのそれぞれのコーディングモード（動きの補償、ゼロ動きベクトル、フィールド間の動きの補償など）に対する動きの探索後の残留エラーに対する評価値である。その二乗和は、もとのピクセルの値の二乗和と比較される。普通のシステムでは、二乗和の最小値が適切なコーディングモードであることを示す。
【０２２５】
二乗和の計算の１つの欠点は、計算費用がかかり、エンコーディングプロセスが遅くなることである。例えば、このタイプのモード決定では、二乗和の計算が、MPEGによる圧縮のエンコーディングの複雑さを全体で約１０％も増やしている。
【０２２６】
状態1720では、プロセスは、動き探索に対する偏差の絶対値の総和（SAD）のデータを計算または修正する。この発明の１実施例では、Ｌ１基準として知られているが、残留エラーの絶対値の総和がモード決定の評価値として使われる。さらに、残留エラーの絶対値の総和は、予測のための最適なマクロブロック候補を決めるのに、動き探索を行いっている間に使われる絶対値の総和（SAD）に、実際上等しくなっている。したがって、もとのピクセルのＬ１基準を除けば、残留エラーのＬ１基準は、追加の計算をすることなしに適用される。Ｌ１基準による計算は、Ｌ２基準による計算に比べて、非常に単純で、少ないCPUサイクルで行うことができる。それは、Ｌ１基準による計算には乗算がないからである。さらに、選択されたプロセッサは、図６で述べたように、有用なインストラクションを直接にサポートしている。
【０２２７】
モード決定に対する通常の取り組みのもう１つの欠点は、純粋に、歪みの評価値により決定されること、すなわち、歪みが最低になるようにモードを決定することである。しかし、それぞれのモードは、消費されるビットの部分とは等しくない。例えば、動きベクトルがないマクロブロックのモードは、他のモードよりも、非常に小さくできる。その結果、通常の取り組みで選ばれたモードは、費やされるビットあたりの歪みを小さくすることができない。
【０２２８】
多くの場合、より少ない動きベクトルを持つ（DMV）あるいは、動きベクトルがない（DMVの値が、動きベクトルをコーディングするのに使われるビットを決める）少し大きめの歪みをもつモードが、最低の歪みを示すモードよりもよい動作をする。DMVの例として、あるMBに対する動きベクトル（MV）が（４，３）で、このMBの予測したMVが（３，６）であるとき、DMVは（４−３，３−６）＝（１，−３）である。この場合、SADで変形されたDMVは、｜１｜＋｜−３｜＝４である。
【０２２９】
状態1730では、プロセスは、SADORGをSADMODに調整して、SADの計算における動きベクトルに対するコーディングコストを補償する。１実施例では、DMVのレートと関連する歪みの両方を考慮して、簡単な決定ルールを使う。１実施例では、決定ルールは画像と動き補償（MC）のタイプに関連しており、画像がＢ−画像またはＰ−画像かどうか、画像がフィールド予測またはフレーム予測を使っているかどうか（インタレースと漸進方式のビデオの双方で）にしたがって、決定ルールが選ばれる。ハーフピクセルの単位で表されるDMVの実際の値は、この目的に使用される。２つの要素（水平と垂直）の絶対値の総和は、決定ルールのための以下の公式で使用される。
【０２３０】
１実施例では、DMVに伴うコストは、等価なSADに移される。様々なモードのSADが適切に比較される。１実施例では、様々なモードのDMVが最初計算され、続いて様々なモードのDMVで変形されたSADが計算され、次に、これらの変形されたSADがモード決定に使われる。例えば、Ｐ−画像に対して、ルール１と定めた次のルールが使われる。通常の知識をもつ技術者には、ここで述べた原理と利点を組み合わせて他のルールを決めることができるであろう。
【０２３１】
以下の公式では、SADmodがDMVからの変形後のSAD値に対応し、モード決定に使われる。ここで、SADorgは動きの評価から得られるSAD値である。以下に示すルールは、Ｌ２基準による計算を適応させて変形されている。
【０２３２】
（Ｐ−画像―漸進シーケンス）
マクロブロック（MB）に対し、３つのタイプのうち１つでエンコードされる。すなわち、Intra、Inter_No_MC、Inter_MC  でルール１と定める。
Ａ．Inter_MC SADは変形：
Ｂ．Inter_No_MCは原型：
Ｃ．Intra MBは変形：
【０２３３】
（Ｐフレーム−インタレースシーケンス）
マクロブロック（MB）に対し、４つのタイプのうち１つでエンコードされる。すなわち、Intra、Inter_No_MC、Inter_MC_frame、Inter_MC_field   Inter_MC_fieldモードは、対応する２つのDMVがあり、２つの動きベクトルを使う。これをルール２と定める。
Ａ．Inter_MC_frame SADは変形：
Ｂ．Inter_MC_field SADは変形：
Ｃ．Inter_No_MCは原型：
Ｄ．Intra MBは変形：
【０２３４】
（Ｂフレーム−漸進シーケンス）
マクロブロック（MB）に対し、４つのタイプのうち１つでエンコードされる。すなわち、Intra、forward、backward、interpolated  で、これをルール３と定める。
Ａ．Forward SADは変形：
Ｂ．Backward SADは変形：
Ｃ．Interpolated SADは変形：
Ｄ．Intra MBは変形：
【０２３５】
（Ｂフレーム−インタレースシーケンス）
マクロブロック（MB）に対し、７つのタイプのうち１つでエンコードされる。すなわち、Intra、forward、forward_field、backward、backward_field、interpolated、interpolated_field  である。
Ａ．SADのforwardモードは変形：
Ｂ．SADのforward fieldモードは変形（２つの動きベクトルを使用）：
Ｃ．SADのbackwardモードは変形：
Ｄ．SADのbackward fieldモードは変形（２つの動きベクトルを使用）：
Ｅ．SADのinterpolated frameモードは変形（２つの動きベクトルを使用）：
Ｆ．SADのinterpolated fieldモードは変形（２つの動きベクトルを使用）：
Ｇ．Intra MBは変形：
【０２３６】
状態1740では、プロセスは、マクロブロックに対するモードを選択する。SADの計算が適切なルールで変換および比較された後で、このプロセスでの実施例は、変換後に最小のSAD値となるモードを選択する。実験の結果、コーディングモードの決定に、Ｌ１基準とその変形を使うのが、PSNP（ピーク信号対ノイズレシオ）で平均０．４ｄＢの大幅な質の改善を示したＬ２基準を使っての伝統的なモードの決定よりも良好に動作した。さらに、Ｌ２基準よりもＬ１基準を使うことで、処理速度も速くなるという質の改善もできる。
【０２３７】
図１８は、マクロブロックに対するモードを選択するプロセスを説明するもう１つのフローチャートである。状態1802では、フレームまたは画像に対して動きの評価を行う。動きの評価は、動きベクトルの偏差を計算するために、状態1804に提供され、SADの計算を調整するために、状態1810に提供される。状態1804では、動きベクトルの偏差が計算される。動きベクトルの偏差は、その前の動きベクトルに依存し、そのデータは状態1806から提供される。状態1808では、変換されたSAD値が計算される。状態1812では、変換されたSAD値が比較され、マクロブロックに対するモードが選択される。１実施例では、選択されたモードは、全体でSADが最小になるモードに対応する。選択されたモードは状態1814で格納される。状態1816を経て、追加のマクロブロックが処理される。
【０２３８】
この発明の種々の実施例を上に述べてきた。この発明は、これらの特別な例を参照して説明されているが、発明の説明に適当な記述になっており、これにより何ら制限されるものではない。熟練した技術者により、この発明の精神と請求範囲で定めた範囲を逸脱しない範囲での様々な変形や応用が可能である。
【図面の簡単な説明】
【０２３９】
【図１】画像のシーケンスの例を説明する図である。
【図２】この発明が使われるエンコーディング環境の例を説明する図である。
【図３】デコーダバッファーを含んだデコーディング環境の例を説明する図である。
【図４】エンコーダ、デコーダ、データバッファー、一定ビットレートデータチャンネルの関係を説明するブロックダイグラムである。
【図５】データが一定ビットレートでバッファーに送られ、可変ビットレートで、デコーダにより費やされるとして、バッファー占有率を時間軸で説明する図である。
【図６Ａ】図６Ｂとともに、ビデオエンコーダにおけるレートコントロルと量子化コントロールを説明する図である。
【図６Ｂ】図６Ａとともに、ビデオエンコーダにおけるレートコントロルと量子化コントロールを説明する図である。
【図７】仮想バッファーの占有率レベルについて、少なくとも１部分を基に、目標ビット割付を調整するプロセスを説明するフローチャートである。
【図８Ａ】従来技術による、マクロブロック処理のシーケンスを説明するフローチャートである。
【図８Ｂ】この発明の１実施例による、マクロブロック処理のシーケンスを説明するフローチャートである。
【図９Ａ】ビットスタッフィングの削減効果からエンコーディングプロセスを安定化させるためのプロセスを説明するフローチャートである。
【図９Ｂ】最終バッファー占有率レベルにおける不整合を検出して、仮想バッファーの占有率レベルを設定するためのプロセスを説明するフローチャートである。
【図１０Ａ】画像グループ（GOP）の例の説明図である。
【図１０Ｂ】画像グループ（GOP）の中で、シーン変化を検出したとき、エンコーディングパラメータを再設定するプロセスを説明するフローチャートである。
【図１１】デコーダバッファーアンダーランの発生を低減または回避するため、ビデオエンコーダにおける、データの選択的なスキッピングのためのプロセスを説明するフローチャートである。
【図１２】選択的なDCTフィルタリングのプロセスを説明するフローチャートである。
【図１３Ａ】図１３Ｂとともに、ビデオエンコーダにおける適応したDCTフィルタリングの選択のための例を説明するフローチャートである。
【図１３Ｂ】図１３Ａとともに、ビデオエンコーダにおける適応したDCTフィルタリングの選択のための例を説明するフローチャートである。
【図１４】強度１/３２で、８ｘ８のイメージブロックに対するローパスフィルタの例を示すグラフである。
【図１５】強度１/１６で、８ｘ８のイメージブロックに対するローパスフィルタの例を示すグラフである。
【図１６】強度１/８で、８ｘ８のイメージブロックに対するローパスフィルタの例を示すグラフである。
【図１７】マクロブロックに対してモードを選択するプロセスを説明するフローチャートである。
【図１８】マクロブロックに対してモードを選択するプロセスを説明する他のフローチャートである。
【符号の説明】
【０２４０】
１０２    画像の列
１０４    画像グループ
１０６    最初の画像
２０２    エンコードされていないビデオソース
２０４    エンコーダ
２０６    サーバ
２０８    マス格納器
２１０    ＤＶＤ編集可能なＤＶＤ
２１２    アップリング
２１４    サテライト
２１６    インターネット
３０２    アンテナ
３０４    ＤＶＤプレーヤー
３０６    テレビ受像器
３０８    パソコン
３１０    ラップトップパソコン
３１２    携帯電話機
４０２    エンコーダ
４０４    エンコーダバッファー
４０６    デコーダ
４０８    デコーダバッファー
４１０    一定ビットレートデータチャンネル
【図１】
2005102170.tif 000074
【図２】
2005102170.tif 000075
【図３】
2005102170.tif 000076
【図４】
2005102170.tif 000077
【図５】
2005102170.tif 000078
【図６Ａ】
2005102170.tif 000079
【図６Ｂ】
2005102170.tif 000080
【図７】
2005102170.tif 000081
【図８Ａ】
2005102170.tif 000082
【図８Ｂ】
2005102170.tif 000083
【図９Ａ】
2005102170.tif 000084
【図９Ｂ】
2005102170.tif 000085
【図１０Ａ】
2005102170.tif 000086
【図１０Ｂ】
2005102170.tif 000087
【図１１】
2005102170.tif 000088
【図１２】
2005102170.tif 000089
【図１３Ａ】
2005102170.tif 000090
【図１３Ｂ】
2005102170.tif 000091
【図１４】
2005102170.tif 000092
【図１５】
2005102170.tif 000093
【図１６】
2005102170.tif 000094
【図１７】
2005102170.tif 000095
【図１８】
2005102170.tif 000096
【外国語明細書】
2005102170.tif 000097
2005102170.tif 000098
2005102170.tif 000099
2005102170.tif 000100
2005102170.tif 000101
2005102170.tif 000102
2005102170.tif 000103
2005102170.tif 000104
2005102170.tif 000105
2005102170.tif 000106
2005102170.tif 000107
2005102170.tif 000108
2005102170.tif 000109
2005102170.tif 000110
2005102170.tif 000111
2005102170.tif 000112
2005102170.tif 000113
2005102170.tif 000114
2005102170.tif 000115
2005102170.tif 000116
2005102170.tif 000117
2005102170.tif 000118
2005102170.tif 000119
2005102170.tif 000120
2005102170.tif 000121
2005102170.tif 000122
2005102170.tif 000123
2005102170.tif 000124
2005102170.tif 000125
2005102170.tif 000126
2005102170.tif 000127
2005102170.tif 000128
2005102170.tif 000129
2005102170.tif 000130
2005102170.tif 000131
2005102170.tif 000132
2005102170.tif 000133
2005102170.tif 000134
2005102170.tif 000135
2005102170.tif 000136
2005102170.tif 000137
2005102170.tif 000138
2005102170.tif 000139
2005102170.tif 000140
2005102170.tif 000141
2005102170.tif 000142
2005102170.tif 000143
2005102170.tif 000144
2005102170.tif 000145
2005102170.tif 000146
2005102170.tif 000147
2005102170.tif 000148
2005102170.tif 000149
2005102170.tif 000150
2005102170.tif 000151
2005102170.tif 000152
2005102170.tif 000153
2005102170.tif 000154
2005102170.tif 000155
2005102170.tif 000156
2005102170.tif 000157
2005102170.tif 000158
2005102170.tif 000159
2005102170.tif 000160
2005102170.tif 000161
2005102170.tif 000162
2005102170.tif 000163
2005102170.tif 000164
2005102170.tif 000165
2005102170.tif 000166
2005102170.tif 000167
2005102170.tif 000168
2005102170.tif 000169
2005102170.tif 000170
2005102170.tif 000171
2005102170.tif 000172
2005102170.tif 000173
2005102170.tif 000174
2005102170.tif 000175
2005102170.tif 000176
2005102170.tif 000177
2005102170.tif 000178
2005102170.tif 000179
2005102170.tif 000180
2005102170.tif 000181
2005102170.tif 000182
2005102170.tif 000183
2005102170.tif 000184
2005102170.tif 000185
2005102170.tif 000186
2005102170.tif 000187
2005102170.tif 000188
2005102170.tif 000189
2005102170.tif 000190
2005102170.tif 000191
2005102170.tif 000192
2005102170.tif 000193
2005102170.tif 000194
2005102170.tif 000195