
コンピュータにおける動き補償とは、カメラやビデオ内の被写体の動きを考慮して、前後のフレームに基づいてビデオ内のフレームを予測するアルゴリズム技術です。これは、ビデオ圧縮のためのビデオデータのエンコード、例えばMPEG-2ファイルの生成などに用いられます。動き補償は、参照画像から現在の画像への変換という観点から画像を記述します。参照画像は、時間的に過去のものでも、未来のものでも構いません。以前に送信または保存された画像から画像を正確に合成できる場合、圧縮効率を向上させることができます。
動き補償は、離散コサイン変換(DCT)とともに、ビデオ符号化規格で使用される2つの主要なビデオ圧縮技術の1つです。H.26xやMPEGフォーマットなどのほとんどのビデオ符号化規格では、通常、ブロック動き補償(BMC)または動き補償DCT(MC DCT)として知られる動き補償DCTハイブリッド符号化が使用されます[ 1 ] [ 2 ]。
モーション補正は、映画の多くのフレームにおいて、あるフレームと別のフレームの唯一の違いが、カメラの動き、あるいはフレーム内の被写体の動きであるという事実を利用します。ビデオファイルに関して言えば、これは、あるフレームを表す情報の大部分が、次のフレームで使用される情報と同じであることを意味します。
動き補正を用いると、ビデオストリームには完全な(参照)フレームがいくつか含まれ、その間のフレームについては、前のフレームを次のフレームに変換するために必要な情報のみが保存される。
以下は、モーション補正の仕組みを分かりやすく図解したものです。映画『エレファンツ・ドリーム』から連続する2つのフレームをキャプチャしました。画像から分かるように、2つのフレーム間の差分画像(モーション補正後の画像)は、前の画像よりもディテールが大幅に少なく、そのため他の画像よりもはるかに圧縮率が高くなっています。
MPEGでは、画像は前のフレーム(Pフレーム)から予測されるか、前のフレームと次のフレームから双方向に予測されます(Bフレーム)。Bフレームは、次のフレームがBフレームを生成するために利用できるように、画像シーケンスを順不同で送信および保存する必要があるため、より複雑です。 [ 3 ]
動き補償を用いてフレームを予測した後、コーダーは残差を求め、それを圧縮して送信する。
グローバルモーション補償では、モーションモデルは基本的に次のようなカメラの動きを反映します。
静止画で、動く物体がない場合に最も効果を発揮します。
グローバルモーション補正にはいくつかの利点があります。
MPEG-4 ASPは3つの基準点を用いたグローバルな動き補正をサポートしていますが、実装によっては1つの基準点しか利用できない場合もあります。単一の基準点では並進運動しか補正できませんが、その処理コストが比較的大きいため、ブロックベースの動き補正に比べてほとんど利点がありません。
フレーム内の移動物体は、全体的な動き補正だけでは十分に表現できません。そのため、局所的な動き推定も必要となります。
ブロックモーション補償(BMC)、別名モーション補償離散コサイン変換(MC DCT)は、最も広く使用されているモーション補償技術です。[ 2 ] BMCでは、フレームはピクセルのブロック(MPEGでは16×16ピクセルのマクロブロックなど)に分割されます。各ブロックは、参照フレーム内の同じサイズのブロックから予測されます。ブロックは、予測されたブロックの位置にシフトされる以外には、いかなる方法でも変換されません。このシフトはモーションベクトルで表されます。
隣接するブロックベクトル間の冗長性(例えば、複数のブロックでカバーされる単一の移動物体の場合)を利用するために、ビットストリームには現在の動きベクトルと前の動きベクトルの差分のみをエンコードするのが一般的です。この差分処理の結果は、数学的にはパンニングが可能なグローバルな動き補償と同等です。エンコードパイプラインのさらに下流では、エントロピー符号化器が、結果として得られるゼロベクトルを中心とした動きベクトルの統計的分布を利用して、出力サイズを削減します。
ブロックを非整数ピクセル数だけシフトすることが可能で、これをサブピクセル精度と呼びます。中間ピクセルは、隣接するピクセルを補間することによって生成されます。一般的には、半ピクセル精度または四分の一ピクセル精度(Qpel、H.264およびMPEG-4/ASPで使用)が使用されます。サブピクセル精度では、補間に必要な追加処理と、エンコーダ側で評価する必要のある潜在的なソースブロックの数が大幅に増加するため、計算コストがはるかに高くなります。
ブロックモーション補償の主な欠点は、ブロック境界に不連続性(ブロッキングアーティファクト)が生じることです。これらのアーティファクトは、人間の目で容易に識別できる鋭い水平および垂直エッジの形で現れ、残差フレームの変換符号化に使用されるフーリエ関連変換の係数の量子化により、偽のエッジとリンギング効果(高周波サブバンドの大きな係数)が発生します[ 4 ]。
ブロックモーション補償は、現在のフレームを重なり合わないブロックに分割し、モーション補償ベクトルはそれらのブロックがどこから来たかを示します (よくある誤解として、前のフレームが重なり合わないブロックに分割され、モーション補償ベクトルはそれらのブロックがどこに移動するかを示すというものがあります)。ソースブロックは通常、ソースフレーム内で重なり合っています。一部のビデオ圧縮アルゴリズムは、以前に送信された複数の異なるフレームの断片から現在のフレームを組み立てます。
フレームは将来のフレームから予測することもできます。その場合、将来のフレームは予測されたフレームより前に符号化される必要があり、したがって、符号化順序は必ずしも実際のフレーム順序と一致するとは限りません。このようなフレームは通常、双方向、つまり予測されたフレームの直前または直後のIフレームまたはPフレームから予測されます。このように双方向に予測されるフレームはBフレームと呼ばれます。符号化方式の例としては、IBBPBBPBBPBBなどが挙げられます。
さらに、動き補償のために三角形タイルの使用も提案されている。この方式では、フレームが三角形でタイル化され、これらの三角形に対してアフィン変換を実行することによって次のフレームが生成される。[ 5 ]アフィン変換のみが記録/送信される。これにより、ズーム、回転、平行移動などに対応できる。
可変ブロックサイズ動き補償(VBSMC) は、エンコーダがブロックのサイズを動的に選択できる機能を備えた BMC の使用です。ビデオを符号化する場合、より大きなブロックを使用すると、動きベクトルを表すために必要なビット数を減らすことができますが、より小さなブロックを使用すると、エンコードする予測残差情報の量が少なくなります。他の研究分野では、ブロック境界を超えた可変形状特徴メトリックの使用が検討されており、そこからフレーム間ベクトルを計算できます。[ 6 ] H.261やMPEG-1ビデオなどの古い設計では、通常固定ブロックサイズが使用されますが、H.263、MPEG-4 Part 2、H.264/MPEG-4 AVC、VC-1などの新しい設計では、エンコーダが動きを表すために使用するブロックサイズを動的に選択できます。
オーバーラップブロックモーション補償(OBMC)は、予測精度を高めるだけでなく、ブロッキングアーティファクトも回避できるため、これらの問題に対する優れた解決策です。OBMCを使用する場合、ブロックは通常、各次元で2倍の大きさになり、8つの隣接するブロックすべてと象限ごとに重なります。したがって、各ピクセルは4つのブロックに属します。このような方式では、各ピクセルに対して4つの予測があり、それらが加重平均に合計されます。この目的のために、ブロックは、4つの重なり合うウィンドウの合計がどこでも1になるという特性を持つウィンドウ関数に関連付けられます。
OBMCの複雑さを軽減する方法に関する研究では、ウィンドウ関数への寄与が対角線に隣接するブロックで最も小さいことが示されています。この寄与の重みをゼロに減らし、他の重みを同量増やすことで、画質を大きく損なうことなく複雑さを大幅に軽減できます。このような方式では、各ピクセルは4つのブロックではなく3つのブロックに属し、補償対象となる各ブロックに対して8つの隣接ブロックではなく4つの隣接ブロックのみが使用されます。このような方式は、H.263 Annex FのAdvanced Predictionモードに採用されています。
動き補正において、1/4サンプルまたは1/2サンプルは、実際には分数的な動きベクトルによって生じる補間されたサブサンプルです。ベクトルとフルサンプルに基づいて、双三次または双線形2次元フィルタリングを使用してサブサンプルを計算できます。H.264規格の8.4.2.2項「分数サンプル補間処理」を参照してください。
立体視ビデオ符号化では、動き補償が利用される。
映像においては、時間はしばしば第三の次元として捉えられる。しかしながら、画像符号化技術は、さらに別の次元へと拡張することが可能である。
JPEG 2000 はウェーブレットを使用しており、これを用いてブロック間に隙間なく動きを適応的にエンコードすることもできます。分数ピクセルのアフィン変換は、隣接するピクセル間ににじみを生じさせます。より高い内部解像度を使用しない場合、デルタ画像は主に画像のにじみを抑制します。デルタ画像はウェーブレットとしてエンコードすることもできるため、適応ブロックの境界が一致します。
2D+Deltaエンコード技術は、H.264およびMPEG-2互換の符号化方式を利用し、動き補償を用いて立体画像間の圧縮を行うことができます。
動き補償の概念の先駆けは、1929年にイギリスのRDケルが、フレームごとに変化するアナログビデオシーンの部分だけを送信するという概念を提案したことに遡ります。1959年には、 NHKの研究者である滝義雄、羽鳥正、田中慎一が、時間次元における予測型フレーム間ビデオ符号化を提案し、フレーム間動き補償の概念を提案しました。[ 7 ]
動き補償ビデオの実用的な圧縮は、動き補償DCT (MC DCT) コーディング[ 8 ]の開発とともに登場しました。これはブロック動き補償 (BMC) または DCT 動き補償とも呼ばれます。これはハイブリッド コーディング アルゴリズム[ 7 ]であり、空間次元の離散コサイン変換(DCT) コーディング[ 8 ]と時間次元の予測動き補償[ 7 ]という 2 つの主要なデータ圧縮技術を組み合わせています。DCTコーディングは、1972 年にNasir Ahmedによって最初に提案された、損失のあるブロック圧縮変換コーディング技術です。彼は当初、これを画像圧縮のために意図していました。[ 9 ]
1974年、南カリフォルニア大学のアリ・ハビビは、予測符号化と変換符号化を組み合わせたハイブリッド符号化を導入しました。 [ 10 ] [ 11 ] [ 7 ] [ 12 ]しかし、彼のアルゴリズムは当初、空間次元のフレーム内符号化に限定されていました。1975年、ジョン・A・ローゼとグナー・S・ロビンソンは、ハビビのハイブリッド符号化アルゴリズムを時間次元に拡張し、空間次元で変換符号化、時間次元で予測符号化を使用して、フレーム間動き補償ハイブリッド符号化を開発しました。[ 7 ] [ 13 ]空間変換符号化については、DCTと高速フーリエ変換(FFT)を実験し、両方のフレーム間ハイブリッドコーダを開発し、DCTは複雑さが少ないため最も効率的であり、ピクセルあたり2ビットを必要とするフレーム内コーダと同等の画像品質でビデオ電話シーンの画像データをピクセルあたり0.25ビットまで圧縮できることを発見しました。 [ 14 ] [ 13 ]
1977年、Wen-Hsiung ChenはCH SmithとSC Fralickと共に高速DCTアルゴリズムを開発した。[ 15 ] 1979年、Anil K. JainとJaswant R. Jainは、動き補償DCTビデオ圧縮をさらに発展させた。[ 16 ] [ 7 ]これはブロック動き補償とも呼ばれる。[ 7 ]これにより、Chenは1981年に動き補償DCTまたは適応シーン符号化と呼ばれる実用的なビデオ圧縮アルゴリズムを開発した。[ 7 ]動き補償DCTはその後、1980年代後半からビデオ圧縮の標準符号化技術となった。[ 17 ] [ 2 ]
最初のデジタルビデオ符号化規格は、1984 年にCCITT (現在の ITU-T)によって開発されたH.120でした。 [ 18 ] H.120 は動き補償 DPCM 符号化を使用していましたが、[ 7 ]これはビデオ符号化には非効率的で、[ 17 ]パフォーマンスが低いため、H.120 は実用的ではありませんでした。[ 18 ] 1988 年に動き補償 DCT 圧縮に基づいてH.261規格が開発され、[ 17 ] [ 2 ]これは最初の実用的なビデオ符号化規格でした。[ 18 ]それ以来、動き補償 DCT 圧縮は、後続のすべての主要なビデオ符号化規格 ( H.26xおよびMPEGフォーマットを含む) に採用されています。[ 17 ] [ 2 ]