0

私は見て見ました。Aforge からブロブを追跡する方法を知っている人はいますか? 彼らがそれを実装していないことは知っていますが、私が使用している残りのコードのために、本当に Aforge を使用する必要があります。カルマン フィルタリングへの言及を見ましたが、理論ではなく実装が必要です。

tnx、v.

4

1 に答える 1

2

AForge.NET BlobCounter はブロブの検出を提供しますが、これはかなり単純で、「壊れた」ブロブをサポートしません。簡単なブロブ トラッキングを実装する場合は、次の点を考慮する必要があります。

  1. ブロブがときどき断片化される場合は、クラスタリング (質量中心位置のグループを見つけて小さなフラグメントを組み合わせる) を実行して、位置を適切に推定する必要がある場合があります。複数のフレームを分析する場合、これによりブロブの破損などの境界条件が発生する可能性が高くなるため、考慮することが重要です。または、条件 (照明など) を適切に制御できる場合は、それで十分な場合があります。マイナーな (ほんの数ピクセルの) ブレークは、ブロブを検出する前に拡張/侵食操作を繰り返すことで解決できますが、これによりノイズが増幅され、位置精度が低下する可能性もあります。

  2. 実際の追跡には、いくつかのアプローチがあります。カルマン フィルター処理は、複数のフレームからの情報を統合するため、非常に優れた精度 (サブピクセル) を提供できます。そのレベルの精度が必要ない場合は、最新の場所に最も近い十分に大きなブロブを常に選択するなど、非常に単純なアルゴリズムを検討できます。これは、オブジェクトが非常に速く動いておらず、追跡されているオブジェクトの近くに他のブロブがポップアップしていない場合に機能します。より優れた分析パフォーマンスが必要な場合は、最後の 2 つのフレームから速度を推定し、それを使用して、ブロブを検索するときに考慮する必要がある領域を制限することもできます。

  3. 高速のオブジェクトを追跡する必要がある場合、それは少し難しくなります。これは、ブロブ検索とテンプレート マッチングを組み合わせようとするケースです。ブロブ検索に基づいてテンプレートを作成し、テンプレートを後続のブロブと照合して、サイズ/場所だけでなく、パターンに基づいてスコアを付けることができます。これには、ブロブが時間の経過とともに合理的に一貫して表示される必要があります。つまり、モデルの物理的な形状と照明条件は固定されたままでなければなりません。


あなたの質問に応じてUPDATE:

今朝は数分しかないので、実際のコードはありませんが、基本的な考え方は次のとおりです。

  1. 構成可能なサイズより大きい BLOB のみを考慮してください (おそらく、これは経験的に決定する必要があります)。

  2. 最後に見つかった 2 つのブロブの場所と、それらがサンプリングされた時刻に関する情報を保持します。時刻 t1 および t0 で、R2、p1、および p0 でこれらのベクトルを呼び出しましょう。

  3. 速度がゆっくりと変化していると仮定すると、時間 t2 での新しい位置 p2 = p1 + (t2-t1)*(p1-p0)/(t1-t0) の予備推定値になります。これは適切な仮定である場合とそうでない場合があるため、必要な動作範囲でオブジェクトをキャプチャして検証する必要があります。

  4. 必要に応じて、この推定を使用して、ブロブ検索領域を推定位置を中心としたサブイメージに制限できます。ブロブ検索を実行した後、推定位置に最も近いブロブを新しい位置測定値として取得します。

上記の副作用の 1 つは、何らかの理由でブロブの検索が 1 つのフレームで失敗した場合に、推定値を使用できることです。この外挿を長時間許可するのは危険ですが、マイナーなノイズ スパイクに対する許容範囲を与えることができます。

最近のフレームからの加速度の推定値を含めたり、複数のフレームからの速度/加速度を統合して、次のサンプルの可能性の高い場所をより適切に推定したりするために、これがさらに進歩する可能性があることがおそらくわかるでしょう。また、推定値 (現在および前のフレームから蓄積されたデータを使用) が実際の測定値よりも正確である (おそらく正確である) ことを信頼し始めることもできます。最終的には、カルマン フィルターのようなものにたどり着きます。

于 2010-08-23T14:52:09.193 に答える