MPEGの予測コーディングでモーションベクトルはどのように機能しますか?


16

MPEGには、画像がマクロブロックに分割され、それらのマクロブロックごとに動きベクトルが計算されるプロセスがあります。次に、これらのベクトルを予測誤差とともに送信して、ビデオシーケンスの次の画像を再構築します。

これがどのように機能するかをしっかり把握しようとしています。各マクロブロックにはモーションベクトルが関連付けられており、(ベクトルが[1,0]のall the pixels in this block move 1 in the x direction and 0 in the y direction for the next frame. 場合)、すべてのモーションベクトルが正しく位置合わせされない場合、画像の領域が考慮されないままになることはありません(そのマクロブロックがそもそもあった)?

たとえば、見つけた次の質問があります。

時間tでの次の画像を考えます。

7   7   7   7           
7   7   5   5        
7   5   5   8         
8   8   8   8           
9   9   9   9       
9   9   9   9

この画像は2x2マクロブロックに分割され、次のモーションベクトルが送信されて再作成されました。

(0,0)  (0,0)  (0,1)  (-1,1)  (0,0)  (0,0)

前のタイムステップt-1の画像は次のようになりました。

7   7   7   7           
7   7   5   4        
7   7   7   7         
7   5   8   8           
8   9   8   9       
9   9   9   9   

送信されたエラーは何ですか?

これをどのように解決しますか?

回答:


5

混乱を簡単にするために、2つのプロセスがあります。

1.動き推定
2.動き補償

推定について説明する前に、動き補償について説明する必要があります。

がブロック分割されているとしましょう。B l o c k s t [ k ] x y magetバツyBlockst[k]バツy

動き補償のタスクは、任意の領域から を生成すること。I m a g e t 1x y Blockst[k]バツymaget1バツy

したがって、必ずしも16x16の境界に配置されていない別のブロックは、可能な限り最適な一致ですBlockst1[k]バツ+mバツy+my

ここで、はモーションベクトルと呼ばれます。mバツmy

ターゲットと参照の間の誤差は次のように計算できます。

Errt[k]バツy=Blockst[k]バツyBlockst1[k]バツ+mバツy+my

したがって、エンコーダは基本的に 、各ブロックに対して(DCTおよび量子化)とを送信します。m x m y [ k ]Errt[k]バツymバツmy[k]

そのため、エンコーダには2つの作業があります。

1.モーション推定が最小になるようにごとにを
推定または推定するプロセスは、モーション推定と呼ばれます。k E r r t [ k ] x y mバツmy[k]kErrt[k]バツy

2.動き補償後のエラー画像の生成画像ピクセルとから
を構築するプロセスは、動き補償と呼ばれます。エラー画像が送信されます。I tm x m y [ k ]Blockst[k]バツytmバツmy[k]

最後に、デコーダーは、モイトンベクトルとエラー画像を使用して独自に動き補償を再実行し、画像の最終的な再構築を行うことができます。

今、私たちはいくつかのポイントを実現します:

  1. ベストモーション推定は、送信に必要なエネルギーを最小限に抑えるのに役立つため、特定の品質に合わせてビットを最適化します。

  2. ただし、が理想的ではない場合、またはシーンが最後のピクチャで大幅に変化した場合でも、は常にレシーバに送信されます。常に完全です(量子化によって生じる損失を調整します)。したがって、最適ではない動きベクトルがある場合、または冗長性がそれほど大きくない場合でも、ビット数が増えても、再構築は常に完璧です。E r r t [ k ] x y mバツmy[k]Errt[k]バツy

  3. すべてのブロックは、それ自体で動き補償されます-したがって、隣接するブロックの実際の動きベクトルが構造に影響を与えない場合でも。したがって、完全な再構築を可能にするために、動きベクトルを完全に整列させる必要はありません。Blockst[k]バツy

  4. 、が動きベクトルをている場合、の推測はに近いと推測できるほど賢いアルゴリズムが存在します。Blockst[k]mバツmy[k]Blockst[k+1]

  5. 最後に、次の図が完全に異なると仮定すると、エネルギーが発生する可能性があります。

    EnergyErrt[k]バツy>EnergyBlockst[k]バツy

そのような場合は、差分を送信するよりも、予測なしでブロックを直接送信することをお勧めします。これは、エンコーダでINTRAブロックと呼ばれる規定によっても可能です。


3

いいえ、ベクトルは未知のフレーム(PまたはB)から既知のフレーム(Iフレーム)にあるため、穴は残りません。画像変換の計算方法を少し思い出させます-後方変換を使用して穴/


3

Bj={012}j={01}22j

(0,0)(0,2)
(2,0)(2,2)
(4,0)(4,2)

Mj

(0,0)(0,0)
(0,1)(-1,1)
(0,0)(0,0)

Bj=Bj+Mj

(0,0)(0,2)
(2,1)(1,3)
(4,0)(4,2)

BjBj

注:「移動中」のブロックのオーバーラップから保護されていません(2つのブロックがオーバーラップする場所に移動されます)。これを処理する方法はありますが、この応答の範囲を超えています。今のところ、その場所に移動しているブロックでピクセルを書き換えるので、以前にブロックが移動されていても上書きされます。

BjBjFe

7 7 7 7
7 7 5 7
7 7 7 8
7 5 5 8
8 9 8 9
9 9 9 9

EFeFE=FFe

0 0 0 0           
0 0 0 -3        
0 0 0 -1         
0 0 3 0           
0 0 0 0       
0 0 0 0

信号処理コミュニティはこの質問をするのに最適な場所であると思いますが、このようなテーマやこれに深く関連する技術には、独自のスペースが必要です。Q&AサイトBroadcast and Media Technologiesの新しい提案があり ます。ご参加ください。
ディパンメタ

@DipanMehtaとてもクール!=)
フォノン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.