質問

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

TNX、v。

役に立ちましたか?

解決

Aforge.net BlobcounterはBlobの発見を提供しますが、かなりシンプルで、「壊れた」ブロブをサポートしません。いくつかの簡単なブロブトラッキングを実装したい場合は、考慮するかもしれないいくつかのことを次のように実装しています。

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

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

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


あなたの質問への応答で更新してください:

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

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

  2. 見つかった最後の2つのブロブの場所とそれらがサンプリングされた時間に関する情報を保持します。 T1とT0の時点で、R2、P1、P0のこれらのベクトルと呼びましょう。

  3. 速度がゆっくりと変化していると仮定すると、新しい位置P2 = P1 +(T2-T1)*(P1-P0)/(T1-T0)の時間T2で予備的な推定値があります。これは良い仮定であるかもしれないし、そうでないかもしれないので、必要な範囲の動きの下でオブジェクトをキャプチャすることでこれを検証することをお勧めします。

  4. オプションでこの推定値を使用して、BLOB検索エリアを推定場所を中心としたサブイメージに制限できます。ブロブ検索を実行したら、新しい場所測定として推定位置に最も近いブロブを取ります。

上記の副作用の1つは、何らかの理由で1つのフレームでBLOB Findが故障した場合、推定値で作業できることです。この外挿を長すぎることは危険ですが、マイナーな騒音スパイクに対する耐性を与えることができます。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top