2012-03-16 16 views
1

私は関数cvAbsDiff(img1、img2、dest)を使って2つの画像を減算しようとしています。 それは働いていますが、ときどき私の頭や体の前に私の手を持ってきて、手がはっきりしないし、背景が画像に入ります...背景画像(頭)が私の前景を覆います(手)..OpenCv Image Subtractionの問題?

正しく動作しますつまり壁が壁に似ている場合などです。

私のイメージをチェックしてください...私の問題をよりよく理解できるように... !!!!役立つだろう、関連するコードに置く

http://www.2shared.com/photo/hJghiq4b/bg_overlays_foreground.html

あなたが任意のソリューション/ヒントを持っている場合は、私を助けてください.......

答えて

1

。また、あなたが実際に達成しようとしていることを知っている。

あなたはどの2つの画像を減算していますか?私は後続の画像を減算しています(つまり、1秒の遅れで撮影された画像)、バックグラウンドの減算は、一般的に、移動するオブジェクトのエッジ、例えば手のエッジであり、シルエット全体ではありません。手。私はあなたが現在のフレームと静的な起動フレームの違いを取っていると思います。パーツが十分に異なっていない可能性があります(スキン+スキン)。

私は今夜コンピュータの問題を抱えています。私は明日テストします(少なくともあなたが実際に徹底的に実行する手順を立ててください)。


私はあなたが(あなたが「フィンガー」と呼ばれるベクトルを持っているので)いくつかのジェスチャー認識をしたい推測しているが、私は、まだあなたの究極の目標が何であるかわかりません。 Manpreetは言ったように、あなたの最大の問題は堅牢性であり、それは類似した色を持つ被写体からのものです。

静的な比較画像に顔を置き、移動してイメージを再現しました。私がバックグラウンドだけで始まっていれば、すでにはるかに堅牢で、どんな場合でも「オーバーレイ」は表示されませんでした。

クイックフィックスは、きれいな被写体のない静止画像があることを確認してください。 それ以外の場合は、ダイナミックな比較画像が必要です。最も簡単なのは、frame_nとframe_n-1を比較することです。これは一般的に動きのあるエッジを与えるので、全体のシルエットが必要な場合は、

1)別のセグメント化アルゴリズムを使用します(バックグラウンドの減算は高速です。はるかに小さいROIを検索し、より堅牢なセグメンテーションのために別のアルゴリズムを使用してください。)2)静的比較画像と動的比較画像の間で、過去10フレームの平均などの妥協を図ってください。そんな感じ。私はこれがどれくらいうまく動作しているのか分かりませんが、実装するのは非常に簡単で、試してみる価値があります:)

また、しきい値の代わりにCV_THRESH_OTSUを30に設定してみてください。それが良いかどうかを確認してください。

また、出力フレア(黒から白への切り替えを変更していない領域)によく気付きました。ライブストリームで確認すると、ウェブカメラのオートフォーカス/ホワイトバランス調整などのためにかなり確信しています。もしあなたもそれを得ているなら、オートフォーカスなどをオフにすると助けてくれるはずです(btwはopenCVではなくカメラによって異なります。おそらくこれをチェックしてください:How to programatically disable the auto-focus of a webcam?

+0

あなたは正しいです。静的な画像を撮ってから、ウェブカメラの検索画像からそれを差し引いてみてください。これは私のコードです... –

+0

あなたは正しいです..静的な画像を撮ってから試してみますWebカメラのクエリーイメージからそれを減算するには...これは私のコードへのリンクです....助けてください。 http://www.2shared.com/document/0LaAP-mQ/subtraction.html –

+0

あなたのコードに特化した答えを追加しました。これが役立つことを願って、あなたが本当に達成したいと思っていることに少し依存します。 特別な理由がない限り、openCVの新しいC++標準を採用することをお勧めします。つまり、画像にMatを使用することをお勧めします。 –

1

あなたのコードに問題はありません。バックグラウンド減算は、モーション検出やシルホット検出にはあまり適していないため、好ましい方法ではありません。バックグラウンドとフォアグラウンドの両方が、減色によってフォアグラウンドを後ろに押し出す多くの領域で色が似ているため問題が発生しています。あなたは を使用してみてください - モーション検出 のためのオプティカルフローを - あなたのタスクは、ちょうどあなたが新しいアプローチを試してみたくない場合は

その上HOG分類器を訓練してみてくださいsilhoutteや手を検出している場合。しきい値(あなたの場合30)で遊んでみることができます。同様のカラー画像を差し引くと、その差は30未満です。そして、後であなたは30で閾値を設定するので、それはただ黒くなります。また、HSVやその他の色空間を試してみることもできます。

+0

ですが、背景と前景が同じ色であると言った理由がある場合は、それを差し引くだけです。そうじゃない?前景を背景の前に持っていく方法はありますか? –

+0

私は答えを編集しました。それは満足しますか? –