高速近似オプティカルフロー/イメージシフト


9

オペレーターに速度を落とすよう警告するために、カメラがパンする速度(水平/垂直)を検出する必要があります。

画像全体がブロックとして動いていて、実際の方向は必要ありません(ただし、HまたはVはボーナスです)。おおよその大きさだけが必要です。フレーム間で「N」を超えるピクセルがシフトした場合にトリガーします。

画像は大きく、一般的に均一な低コントラストのシーンです。追跡する明確なハイライトはありません。すべてのCPUを使用せずに、リアルタイム(60fps)で実行する必要があります。

Niaveソリューションは、中央でRoIを選択し、エッジを見つけ、フレームのペア間の類似性を計算し、フレームの1つをピクセルで左/右/上/下にシフトし、繰り返します-最小値を見つけます。

もっと賢い解決策はあるのだろうか?

回答:


3

おそらく、単純な方法を探している場合は、MPEGクラスの圧縮コーデックで非常に成熟している標準のモーション推定アルゴリズムを適用することです。それらは理解しやすく、すぐに使えるコードがたくさん手に入ると思います。このアルゴリズムは、ブロックごとにモーションベクトルを生成します。次に、最も目立つクラスターを見つけ、平均モーションベクトルの方向と大きさを取得できます。

MPEG4-「グローバルモーション補正」と呼ばれるもう1つの重要な概念があります。これは、カメラのモーションとパンを最初に推定して補正しようとするテクニックです。美しさは、そのような方法が複雑さに応じてより単純または網羅的であり得るということです。これは、1つの例のペーパーと同じものの別のペーパーです。

一般に、カメラのパンとモーションの推定は、かなり確立された研究領域です。ここに参照があります:別の紙

この教科では。厳密で正確なアルゴリズムだけでなく、シンプルで高速なアルゴリズムも見つかります。


便利なMPEG libに簡単にフックできれば、MpegのGMCに批判があったことを覚えています。カメラの安定化アルゴリズムのため、これは一般的な領域になると思いました
Martin Beckett

あなたは間違いなくMPEGアルゴリズムをフックする(あるいは抽出する)ことができます。FFMPEGをライブラリーとして使用して抽出することができますが、注意が必要です。または、MSSGの端正なコードを読み取って抽出することもできます。
Dipan Mehta

GMCに対する批判について-ビットレートを劇的に減らし、オブジェクトベースのエンコーディングを作成することは、約束を超えるものです。ただし、カメラのモーションパラメータを推定することはそれほど難しくありません。
Dipan Mehta

おかげで、私はMSSGを見ていきます。私はffmpegを使用していますが、物事を引き出すだけの簡単なライブラリではありません!
マーティン・ベケット

3

これは遅い恐ろしい解決策かもしれませんが、後続のフレームのFFTベースの相互相関を行い、フレーム間のオフセットを特定するためにピークを見つけることができます。おそらく、プロセッササイクルを節約するために、イメージの小さなサブセットでのみそれを実行します。

回転や、あるフレームから次のフレームへの劇的なシーン変更では機能せず、おそらくより良い方法があります。これは、「私はハンマーを持っているので、すべてが釘のように見える」ソリューションのようなものです。これは単純な解決策と同じだと思いますが、エッジ検出の必要がなく、FFTは一度に1ピクセルずつ明示的にシフトするよりもはるかに高速です。

この質問は似ており、相互相関以外は何も提案されていないので、おそらくそれほど悪くはありません。MATLABを使用して連続する画像間のオフセットを計算する


おかげで、FFTが遅いと考えるのは簡単ですが、小さな2 ^ nウィンドウを実行できます。ps。検索のためだけにstackoverflow.com/questions/1100100/…–
Martin Beckett

3

速度と方向を推定できる1つの方法は、たとえば画像の中心にある4つのウィンドウの「ローカル」フロー推定を行うことです。Lucas–Kanade微分法は、変位がほぼ一定であることを前提としているため、方程式として解くことができます。

だから私のステップバイステップガイドは:

  1. 画像の中心にあるピクセルのウィンドウを取得します(例:20x20)
  2. 勾配IxとIyを計算します。
  3. グラデーションウィンドウを4つに分割します(例:4x10x10)。
  4. 次のフレームで4つの線形最小二乗方程式を解きます。
  5. 4つの速度ベクトルを平均します。

これにより方向と速度が決まりますが、加重ウィンドウを使用してより堅牢にすることができます。その拡張については、Lucas-Kanadeメソッドを見てください。


0

相互相関はオフセットを見つけるための良いアプローチだと思いますが、それを非常に高速に実行したい場合は、単一の垂直および単一の水平スキャンライン(つまり、画像の中心を通る)のみに制限することを試みることができます。両方のフレームのスキャンライン間の相互相関を計算すると、水平オフセットと垂直オフセットの概算が得られます。


これは機能するかもしれませんが、斜めにパンしている場合は、横方向にパンしているときに上下に少し揺れても、うまく機能しません。画像の中央にある長方形の小領域が良いと思います。
内部石
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.