背景画像を削除して前面画像を取得する方法

background-foreground computer-vision image-processing image-segmentation
背景画像を削除して前面画像を取得する方法

2つの画像があります

alt text http://bbs.shoucangshidai.com/attachments/month_1001/1001211535bd7a644e95187acd.jpg http://bbs.shoucangshidai.com/attachments/ month_1001 / 10012115357cfe13c148d3d8da.jpg [alt text http://bbs.shoucangshidai.com/attachments/month_1001/10012115357cfe13c148d3d8da.jpg] 1つは背景画像、もう1つは同じ背景、同じサイズ、やりたいことの写真です2番目の画像の背景を削除し、人物のプロファイルのみを抽出します。 一般的な方法は、2番目の画像から最初の画像を減算することですが、私の問題は、人の服の色が背景に似ているかどうかです。 減算の結果はひどいです。 全体のプロファイルを取得できません。 背景を削除する良いアイデアを持っている人は私にいくつかのアドバイスを与えます。 前もって感謝します。

  12  7


ベストアンサー

画像の背景を適切に推定している場合は、人物と一緒に画像からそれを差し引くのが良い最初のステップです。 しかし、それは最初のステップにすぎません。 その後、画像をセグメント化する必要があります。 画像を「背景」ピクセルと「前景」ピクセルに分割する必要がありますが、次のような制約があります。

  1. 前景エリアでは、背景との平均差
    画像は高くなければなりません

  2. 背景領域では、背景との平均差
    画像は低くなければなりません

  3. 領域は滑らかでなければなりません。 輪郭の長さと曲率は
    最小限。

  4. 領域の境界は、ソースで高いコントラストを持つ必要があります
    画像

数学的な傾向がある場合、これらの制約はMumford-Shah関数を使用して完全にモデル化できます。 http://ssg.mit.edu/group/alumni/atsai/Papers/TIP01.pdf [詳細については、こちらをご覧ください。]

ただし、他のセグメンテーションアルゴリズムを問題に適合させることができます。

高速でシンプルな(ただし完全ではない)バージョンが必要な場合は、これを試すことができます。

  • 2つの画像を引きます

  • でピクセルの最大連続「ブロブ」を見つける
    バックグラウンドとフォアグラウンドの差があるしきい値を超えています。 これは、前景画像の「人物領域」の最初の大まかな見積もりですが、セグメンテーションは上記の基準3および4を満たしていません。

  • 最大のブロブのアウトラインを見つけます(*編集:*持っていないことに注意してください
    アウトラインから始めます。 手順により自動的に最適な位置に縮小されるため、より大きなポリゴンから開始することもできます。

  • 次に、アウトラインの各ポイントを通過して、アウトラインを滑らかにします。 i.e.
    各ポイントについて、式を最小化するポイントを見つけます:c1 * L-c2 * G、ここで、Lはポイントがここに移動された場合のアウトラインポリゴンの長さ、Gはポイントが移動される場所の勾配、c1 / c2はプロセスを制御する定数です。 ポイントをその位置に移動します。 これには、ソースイメージの低勾配の領域で輪郭ポリゴンを平滑化する効果がありますが、ソースイメージの高勾配に関連付けられたままです(つまり、 人の目に見える境界)。 LとGに異なる式を試すことができます。たとえば、Lは長さと曲率を考慮に入れ、Gは背景の勾配と減算された画像を考慮に入れることができます。

  • おそらく、アウトラインポリゴンを再正規化する必要があります。 make
    アウトライン上のポイントが規則的に間隔を空けていることを確認してください。 それとも、前のステップでポイント間の距離が一定のままであることを確認してください。 (「測地蛇」)

  • 収束するまで最後の2つのステップを繰り返します

これで、目に見える人物と背景の境界線に接触し、境界線が見えないかコントラストが低い場所で滑らかに続く輪郭ポリゴンができました。 「Snakes」(http://www.cvc.uab.es/~petia/dmcourse.htm[e.g。 こちら])詳細については。

16


画像を減算する前にローパスフィルター(ぼかし)します。 次に、その差分信号をマスクとして使用して、対象のピクセルを選択します。 十分に広いフィルターは、目的のオブジェクト内の「ひどい」領域を切り分けることになりすぎる小さすぎる(高周波の)特徴を無視します。 また、ピクセルレベルのノイズや位置ずれ(最も頻度の高い情報)の強調表示を減らします。

さらに、3つ以上のフレームがある場合、時間ヒステリシスを導入すると、時間とともにより安定した関心領域を形成できます。

4


よくあると思うテクニックの1つは、http://en.wikipedia.org/wiki/Mixture_model [mixture model]を使用することです。 多数の背景フレームを取得し、ピクセルごとにその色の混合モデルを作成します。

人物を含むフレームを適用すると、各ピクセルの混合モデルの確率密度を考えると、色が前景または背景である確率が得られます。

P(ピクセルは前景)とP(ピクセルは背景)を取得したら、確率画像のしきい値を設定できます。

別の可能性は、より賢いセグメンテーションアルゴリズムの入力として確率を使用することです。 1つの例はhttp://en.wikipedia.org/wiki/Graph_cut[graph cuts]です。これは非常にうまく機能していることに気づきました。

しかし、人が背景と視覚的に見分けがつかない服を着ている場合、明らかに上記の方法はいずれも機能しません。 別のセンサー(IRやUVなど)を取得するか、胴体と頭と思われるものが見つかった場合に正しい位置に足を「追加」できる非常に精巧な「人物モデル」を用意する必要があります。

プロジェクトで頑張ってください!

1


背景と前景の検出は非常に主観的です。 アプリケーションシナリオは、バックグラウンドまたはフォアグラウンドを定義します。 しかし、あなたが詳述するアプリケーションでは、その人が前景であると暗黙的に言っていると思います。 上記の仮定を使用すると、求めるのは人物検出アルゴリズムです。 考えられる解決策は次のとおりです。

_
. haar特徴検出器+弱分類器のブーストカスケードを実行します(
詳細については、http://opencv.willowgarage.com/wiki/FaceDetection [opencv wiki])
. フレーム間モーション(差分)を計算する
. フレームに+ ve顔検出がある場合、モーションピクセルをクラスター化します。
顔の周り(http://en.wikipedia.org/wiki/K-nearest_neighbor_algorithm[kNNアルゴリズム])
_

ほら…​ 簡単な人検知器が必要です。

0


写真をCraigslistに投稿し、誰かがそれをするために5ドル支払うことを伝えます。

数分でヒットすることを保証します。

-2


単純な減算の代わりに、両方の画像をピクセル単位でステップ実行し、まったく同じピクセルのみを「減算」できます。 ただし、これはもちろん、色のわずかな違いを考慮しません。

-3


タイトルとURLをコピーしました