2010-12-26 18 views
3

色付きのマーカーを含むさまざまなオブジェクトを検出しようとしています。赤い青色の緑色のマーカーがオブジェクトAを識別し、赤色の青色の赤色のマーカーがオブジェクトBを識別します。回転することができます現在、私は色の間の距離をチェックしてオブジェクトを見つけるが、それは非効率的だと思われるので、私の質問は、これを行うには良い方法はありますか?OpenCVを使用してマーカーを検出する

+0

いくつかの画像を投稿できますか? –

答えて

5

私が書いた短い記事はtracking colored objectsです。これはちょうどあなたが探しているものかもしれません。

0

ローカルの色ヒストグラムを試し、その色の比を識別子として使用するとよいでしょう。

0

堅牢でややCPU効率の良いアプローチでは、出力画像チャンネルのゼロ以外の値が追跡したい色のブロブに対応するように、最初にcv :: transformを使って画像を変換することをお勧めします。例えば、

 b g r bias 
r' [ -1 -1 1 -15 ] 
b' [ 1 -1 -1 -15 ] 

は、第1の出力チャネルへ、第2の出力チャネルに非常に青画素に対して非常に赤色画素についてゼロ以外の値を割り当てる変換行列です。

次に、出力チャネルでcv :: findContoursを1つずつ実行して、好きな色のブロブを見つけることができます。次に、ペアのペアや3タプルなどを繰り返して幾何学的チェックを実行します(たとえば、マーカーが青、赤、緑の円で構成されている場合は、3つのブロブが「円形」 "十分な形状であり、お互いに近くに横たわっていて、雑音ではなくマーカとみなす)、マーカを見つけることができます。

上記のアルゴリズムをフレームごとに再実行する代わりに、cv :: transformの実行後にmeanShiftベースのトラッキングで何らかのCAMShiftを適用することができます。 CAMShiftingの場合、ロバストトラッカーが求められている場合、追跡中のオブジェクトがまだマーカーであるかどうかは、すべてのフレームをチェックする必要があります。

トラッキングの生の位置(回転の可能性もあります)の値は、通常、いくらかノイズが多いです。たとえば、部屋に蛍光灯があり、赤い青色のマーカーを使用している場合は、トラッキングが少しちらつくことがあります。補償するために、カルマンフィルタまたは拡張カルマンフィルタが有用であるが、調整/推測されるべき多くのパラメータを導入する。

関連する問題