1

一方の列にフレーム番号があり、もう一方の列に対応する色のモーメントがあるテーブルがあります。私はopenCVを使ってそれらを見つけました。一部のフレームの値は非常に高く、残りは非常に低くなっています。ピークが非常に高いフレームを抽出するにはどうすればよいですか?

これは分布のプロットです。下のプロットでガウス平滑化としきい値処理を使用してみました。

プロット

この結果が得られました。

プロット1

では、どのように進めればよいですか?

4

1 に答える 1

1

基本的に、あなたはピークファインダーを探しています...MATLABにはピークを見つけるためのピークファインダー機能があります...これのためにOpenCVで既製のAPIが見つからなかったので、MATLABのピークファインダーを実装しました...アルゴリズムはこのようになります.. .

  1. 初期の仮定または事前知識は a)分布に 'n' 個のピークを持つことができるb)ピークが最小ウィンドウ 'w' で区切られている、つまり 2 つのピークが 'w' より近くない。
  2. ウィンドウの実装について教えてください。データ ポイントから開始します。その位置を現在のインデックスとしてマークし、長さ 'w' の左右の近傍をチェックして、現在のインデックスの値より大きい値が存在するかどうかを確認します。
  3. はいの場合は、ポイントに移動します。ポイントを現在のインデックスにして、2 を繰り返します。
  4. いいえの場合、その極大値です。現在のインデックスを「w」の長さだけ移動し、データ セットの終わりに到達するまで 2 を繰り返します。

これを実装して、ピークファインダーの MATLAB ヘルプを確認してください。運が悪い場合は、コードを投稿できます..

編集したグラフを見た後に編集すると、グラフには最大ピークが明確に定義されているように見えるため、グラフの dy/dx の符号を追跡することができます。最大ピークは、コード言語で dy/dx の符号が正から負に変化するポイントです。

vector<double> array_of_max_peak;
if (sign( x(n+1) - x(n) ) ) > 0
  array_of_max_peak.push(x(n));
于 2013-03-10T12:50:41.283 に答える