5

opencvモーション検出に関連するクエリが表示されますが、要件ははるかに単純なので、もう一度質問します。ビデオフレームを分析して、フレーム内で何かが変更されていないかどうかを確認したいと思います。フレーム内で発生するあらゆる種類の動きが認識されています。何かあったら通知をもらいたいだけです。輪郭を追跡/描画する必要はありません。

行われた試み

1)OpenCV(TM_CCORR_NORMED)を使用したテンプレートマッチング。

cvMinMaxLoc&を使用して類似性インデックスを取得します

if( sim_index > threshold ) 
    "Nothing chnged"
   else
    "Changed


直面した問題

しきい値の設定方法を決める方法が見つかりませんでした。誤一致と完全の値は非常に近いものでした。

2)方法2
a)ランニングアベレージを作成します
b)現在のフレームと移動平均の絶対差を取ります。
c)しきい値を設定してバイナリにしました
。d)ゼロ以外の値の数をカウントします
。非常に類似したフレームでもゼロ以外の値を多数取得しているため、しきい値を設定する方法に固執しています。

どのようなアプローチを取るべきか教えてください。上記の2つの方法で正しい方向に進んでいますか、それともすべての最も一般的なシナリオで機能する簡単な方法がありますか。

4

1 に答える 1

4

方法 2 は、一般にモーション検出の最も単純な方法と見なされており、ビデオに水がなく、揺れる木や非常に変化する照明条件がない場合に非常に効果的です。通常、次のように実装します。

motion_frame=abs(newframe-running_avg);
running_avg=(1-alpha)*running_avg+alpha*newframe;

必要に応じて motion_frame にしきい値を設定してから、ゼロ以外を数えることができます。ただし、motion_frame としきい値の要素を合計することもできます (必ず浮動小数点数を使用してください)。このパラメータの最適化は非常に簡単です。2 つのトラックバーを作成し、それをいじるだけです。通常、アルファは [0.1; 前後] です。0.3]。

最後に、フレーム全体でこれを行うのはおそらくやり過ぎです。サブサンプリングされたバージョンを使用するだけで、結果は非常に似たものになります。

于 2012-12-21T13:40:27.823 に答える