0

基本的に、2つの画像を持つコードを書きました。参照画像と背景画像。これまでのところ、特徴認識を使用して一致する画像を見つけることができました。次に、参照画像と同じように回転させてサイズを変更しました。残っている唯一の問題は、画像がオブジェクトのフリンジの背景画像の一部であるという事実です。この画像は適切にトリミングされているので、下の画像を操作するだけです。私が最初に思いついた最も明白な答えは、おそらくエッジ検出アルゴリズム (キャニー) を使用し、それを使用して背景がどこにあるかの手がかりを与えることでした。ただし、画像自体は技術的には何でもかまいませんので、ノイズが多く、さまざまな異常なエラーが発生する可能性があるため、できればその道をたどりたくありません。backgroundsubtraction MOG も見ましたが、単一の静止画像ではなく、ビデオで機能するように見えました。私が間違っていた場合に備えて、次のコードを試しましたが、効果はありませんでした:

  BackgroundSubtractorMOG  bs_mog(3, 4, 0.8);
  Mat foreground_mog;
  bs_mog (cropped_img,  foreground_mog, -1.0);

おそらく私はそれを間違っています。したがって、私の考えはエッジ検出以外であり、backgroundsubtractorMOGが動画専用である場合、フリンジの背景画像を削除するために検討できる他のアイデアやオプションはありますか(すべてを白に変えたい)

ここに画像の説明を入力

あなたのアイデアやコメントを事前にありがとう

編集:

他の人がすでに投稿したロジックはよくわかりませんが、この下の画像のマスクを作成する最良の方法が何であるかはわかりません。画像は技術的には何でもかまいません。丸くする必要はありません。また、アルゴリズムの変更により、オブジェクトが背景から分離された後に形状のサイズを変更する必要があります。これは、サイズの違いにより、参照画像を使用してマスクを作成し、そのマスクをこの画像で使用することができないことを意味します。

4

1 に答える 1

0

セグメンテーションは機能する可能性があります。カスタマイズされたマスクを試してみてcvgrabCut()ください。

  • 境界に非常に近いすべてのピクセルを背景として設定します。(下の画像の赤)
  • 画像の中央領域を前景として設定します。(下の画像の緑色)
  • 中間ピクセルは、おそらく foregroundに設定します。(下の画像の灰色)

ここに画像の説明を入力

于 2013-07-10T09:34:20.667 に答える