Aforge.NETを使用して色でオブジェクトを追跡する

こんにちは。 一般的なフレーズ:「私の最初の投稿」:)。 その中で、オブジェクトを色で追跡する私の小さなプロジェクトについてお話したいと思います。 現在、WiiとPlaystation 3の同じジョイスティックなど、かなり広い範囲に対応しています。この作業の基礎は、Andrei Kirillov Aforge.NETの開発でした。

コードは「究極の真実」であると主張せず、多くは簡素化されています(ある場所では、複製はある意味で許可されていました。 それでも、コードは機能し、オブジェクトを追跡し、場所に関する情報を提供し、オブジェクトのシェードを動的に計算できます(照明が変更された場合)。



興味のある方のために-猫をお願いします。





AForgeへの短い遠足。



フレームワークは一連のライブラリであり、それぞれが特定の種類の問題を解決するように設計されています。



ライブラリを備えた完全な例があります。



ユーザーインターフェース



私は自分のプロジェクトを最初から書いたわけではなく、Vision \ MotionDetectorの例をベースに取り上げました。 彼はすでに、ウェブカメラ、リモートウェブカメラ(JPEG、MJPEG url経由)に接続する方法と、特定のビデオファイルを開く方法を知っています(私は認めていませんが、試していません)。

画像



元の例では、いくつかのアルゴリズムによってストリーム上の動きを識別できますが、最も簡単なのは、2つの連続するフレームの違いを見つけることです。

フォームコードはファイルごとに処理され、タスク専用にシャープ化されました。 [モーション]タブで、オブジェクト検索アルゴリズムを選択する必要があります。

画像



次に、[カラートラッキングオブジェクトの定義]フォームでオブジェクトを選択します。

画像



オブジェクトに関する情報は、メインフォームのステータスバーに表示されます。

画像



追加の設定として、色差のしきい値が提供されます。これは、単一の色を追跡するのではなく、そのバリエーションを考慮する機能です。

画像



さらに、ユーザーは処理中にオブジェクトの色を追跡するかどうかを指定できます(つまり、オブジェクト自体が色によって追跡されるだけでなく、オブジェクトの新しい色が処理中に計算されます)。

画像



次のバンには、Aforgeモーションディテクターが標準装備されています。 オブジェクトは、画像内で異なる方法で強調表示できます。

画像



実装



AForge.Vision.Motion。 IMotionDetector-画像間の違いを検索できるインターフェース。 処理を実行するColorDetectionクラスは、 それから継承されます。

ユーザーインターフェイスと対話するために、後続のフレームの処理を初期化するInitializeメソッド(Image image、Rectangle rect)が追加されました。 ここでは、ターゲット(画像内の選択された長方形)に関する情報が収集されます。 情報は、選択した領域の主要な色で収集されます(このプロパティは、追跡の基礎として引き続き機能します)。 ターゲットの位置も記憶されます。



IMotionDetectorには次のメソッドがあります。



プロパティ:



アプリケーションのステータスバーの情報を更新するために、プロパティの取得が追加されました。



ターゲットカラーだけでなく、いくつかのシェードも使用するために、Set Property DifferenceThresholdが使用されます。

フレームのメイン処理は、 ProcessFrame関数で発生します。 このアルゴリズムは、次の手順に分割できます。

  1. オブジェクトの存在領域を拡大します。 画面全体で新しい位置を検索するのではなく、前の位置に隣接する領域でのみ検索します。 これにより、ターゲットオブジェクトが同じ色の別のオブジェクト(画像の別の部分)と混同されないという観点から、検索がより正確になります。
  2. オブジェクトの支配的な色の極値を決定することにより、上記の領域内のオブジェクトの境界を計算します(可能な色偏差-DifferenceThresholdもここで考慮されます)。
  3. 「マスク」 MotionFrameを作成します。これにより、MotionDetectorは画像内のターゲットオブジェクトを強調表示できます。
  4. 次に、「平均色」と新しいオブジェクトのサイズが計算されます。
  5. オブジェクトが小さすぎる場合(たとえば、次のフレームで、ターゲットオブジェクトが別のオブジェクトで完全に覆われた場合)-前のフレームの処理で残った位置と色に関する情報は変更しません。
  6. それ以外の場合、オブジェクトの新しい位置と境界が記憶され、アルゴリズムがbool DynamicColorTrackingプロパティを使用して設定される色の変化を監視する場合、新しい計算された色も記憶されます。


これで画像処理が完了しました。



可能な改善



ゲームコンソールのコントローラーについては既に説明したので、通常、その色はフレーム内の他のオブジェクトとは対照的に異なります。 したがって、(隣接する領域だけでなく)フレーム全体でターゲットカラーの初期検索を実行できます。 これにより、高速移動中にオブジェクトを追跡できます。



関連リンク



AforgeプロジェクトのWebサイト

Aforge-CodeProjectに関する記事



PS depositfilesのソースへのリンク

Googleドキュメントのソースへのリンク



UPD。 テーマブログに転送されたカルマに感謝します。



All Articles