2016-05-31 8 views
2

添付されているバイナリは私が直面している問題です。私は黒い領域内の小さな白い穴を埋めるしたいです。私は白黒に変換し、imfill関数を使用しようとしましたが、問題はそれがちょうど真ん中の大きなものを含むすべての白い領域を埋めるということです。誰も私にこれを助けることができますか?ありがとう! binary大きな領域に小さな穴を埋めるには?

私は形態学的侵食を試みてから、dilatedをse = strel( 'diamond'、10)としました。それは実際に穴を埋めることができるだけでなく、結果に影響する白と黒の領域を別々に変えることができます。私はクラスタを分離するために流域を使用する予定であるので(ブラック)、それらの数と面積を数えます。開閉の使い方を正しく分かりません。

+0

形態学的浸食を試みましたか? –

+0

メジアンフィルタが動作する可能性があります。 – K3N

答えて

0

あなたは特定のツールについて言及していませんでしたので、コマンドラインからImageMagickを試してみました。ほとんどのLinuxディストリビューションにインストールされ、OSXとWindows用に無料でダウンロードできます。Python、Perl、.Net、PHP、ノード、Ruby、Javaバインディングなど、MatlabやOpenCVでも可能です。

基本的には、まずイメージを縮小して適切な結果を得る必要があると思います。私はこれを試みた:

convert holey.png -resize 10% -threshold 75% -median 3 \ 
    -morphology erode:2 disk:1.5      \ 
    -morphology dilate:2 disk:1.5 -resize 3872x2592! result.jpg 

オリジナルの10%までのサイズを減少させ、そして得られた灰色のピクセルをしきい値と、その後のノイズを除去するために小さなメジアンフィルタを適用しています。その後、エロージョンとそれに続く膨張を行い、画像を元に戻し、result.jpgとして保存します。

enter image description here

が、私はその後、実行することにより、効果を視覚化し、それが実際にやっているかを見るために少しGIFアニメーションを作っ:

convert -delay 100 holey.png result.jpg animated.gif 

enter image description here

今小さいがあること、より管理しやすい数の白い塊を作成したら、「ブロブ解析」または「接続されたコンポーネント」を実行して削除することができます選択したサイズ/面積の閾値以下の斑点。

0

問題は、暗い領域内の穴だけを埋める必要があることです。だから最初に黒い部分を見つけたり、白い部分を削除したり(一時的に)しなければなりません。

  1. 接続されたコンポーネントラベルは、白いパターンにのみ適用されます。
  2. 最大の白いパターンを見つける
  3. 最も大きな白いパターンを消去して保存します。
  4. 既に試したとおりに穴を埋める。
  5. 最大の白いパターンを戻します。
0

お寄せいただきありがとうございます。私はそれを試して、今では集約のセグメンテーションに取り組んでいます。しかしこのステップの前に、修正されたバイナリイメージを初期RGBイメージにマスクし、いくつかの操作後にその違いを表示する必要があります。

関連する問題