2017-02-24 6 views
1

Pythonを使用してプログラムの左側の画像(またはOpenCVのようなツール)を左に移動するにはどうすればよいですか?Pythonで画像をクリッピング/バックグラウンドでプログラム的に削除

original processed

私はクリッピングのためのオンラインツールを用いて手でこれを作りました。私は画像処理において(特に実際には)全く問題ない。私はいくつかのエッジまたは輪郭検出を適用してマスクを作成することを考えていましたが、後で原画像に適用して、他のすべての領域(関心領域を除く)を黒く塗りつぶします。しかし、私は悲惨に失敗しました。

目的は、CNNバイナリクラシファイアをトレーニングするために、非常に似たイメージのデータセットを前処理することです。私は関心のある領域の近くで画像を切り取るだけでそれを練習しようとしましたが、CNNがまったく何も学んでいないほどノイズが高いです。

誰かが私にこの前処理を手伝ってもらえますか?

答えて

1

あなたの問題を解決するためにOpenCVのwatershedアルゴリズムの実装を使用しました。 this great tutorialを読んで使用する方法を知ることができますので、私はこれについて多くの詳細を説明しません。

4点(マーカー)を選択しました。 1つは抽出したい領域にあり、1つは外側にあり、もう1つは興味のないインテリアの下部/上部にあります。私はその後、空の整数配列(いわゆるマーカイメージ)を作成し、ゼロで埋めました。次に、マーカ位置のピクセルに一意の値を割り当てました。以下

画像が原画像上に描画され、マーカーの位置とマーカー値を示す:

enter image description here

Iは、同じエリア内の複数のマーカーの領域に属している(例えば、いくつかのマーカーを選択することができますその場合はすべて同じ値(この場合は255)を持つ必要があります。

私は流域を使用しました。最初の入力は入力した画像で、2番目の入力はマーカー画像です(マーカ位置を除くすべての場所でゼロ)。アルゴリズムは結果をマーカー画像に格納します。興味のある領域が(この場合は255で)領域マーカーの値が付いている:

enter image description here

私はゼロに255価値を持っていなかったすべてのピクセルを設定します。得られた画像を3x3カーネルで3回膨張させた。それから私は、元の画像のためのマスクとして膨張画像を使用(私はゼロにマスクの外側の全ての画素を設定する)、これは私が得た結果である:あなたは、おそらく方法のいくつかの種類が必要になります

enter image description here

こと自動的にマーカーが見つかります。この作業の難しさは、入力画像のセットに大きく依存します。場合によっては、上記のリンク先のチュートリアルのように、このメソッドを単純明快にすることができますが、時にはこれを解読するのが難しい場合もあります。しかし、あなたのイメージがどのように一般的に見えるかわからないので(私はあなたが提供しているだけです)、何もお勧めできません。 :)

+0

非常に有望ですね。すべての画像は非常に似ているので、データセット全体の平均または標準偏差からマスクを作ることができます。私はそれを今日か明日にしようとします、そして、私はあなたにそれがどのように行ったかを知らせます。良い仕事、ありがとう! – TasosGlrs

関連する問題