1

1 と 0 の大きなマトリックスがあり、ローカルに密集している領域を 1 で「埋める」方法を探しています。最初に配列に対してこのタスクを実行し、問題の要素の特定の半径内にある 1 の数を数えました。たとえば、半径が 5 で、私のしきい値が 4 の場合、左または右に 5 つの要素内に「1」とマークされた 4 つの要素を持つポイントは 1 に変更されます。

基本的に、これを 2 次元配列に一般化し、1 の「滑らかな」領域と「接続された」領域を持ち、「斑状の」スポットのない結果のマトリックスを作成したいと考えています。

例として、マトリックス

1 0 0 1 0 0 0

0 0 1 0 1 0 0

0 1 0 1 0 0 0

0 0 1 1 1 0 0

理想的には次のように変更されます

1 0 0 1 1 0 0

0 0 1 1 1 0 0

0 1 1 1 1 0 0

0 0 1 1 1 0 0

または似たようなもの

4

2 に答える 2

1

バイナリ イメージの場合、MATLAB に実装されているモルフォロジー演算は、接続領域の形状とサイズを操作するのに最適です。具体的には、画像を閉じるプロセスは、接続された領域の穴を埋めるように設計されています。MATLAB では、関数 isで、フィルター カーネルと同様にイメージと構造化要素を取得し、隣接するピクセルが穴とギャップの充填にどのように影響するかを示します。の簡単な呼び出しは、imcloseimclose

IM2 = imclose(IM,strel(ones(3)));

より大きな構造化要素を使用して、隣接するピクセルの影響範囲を拡大することで、より大きなギャップを埋めることができます。たとえば、半径 10 ピクセルの円盤を使用します。

IM2 = imclose(IM,strel('disk',10));

imcloseはグレースケールおよびバイナリ (0 および 1) 画像をサポートしますが、この関数はbwmorphバイナリ画像のみを操作するように設計されていますが、すべてのモルフォロジー操作および操作のさまざまな適切な組み合わせ (例: 、 など) への汎用インターフェイスを提供し'bothat'ます'tophat'。閉じるための構文は、次のように簡略化されていbwmorphます。

BW2 = bwmorph(BW,'close');

ここで、構造化要素は standardones(3)です。

于 2013-10-14T07:59:20.117 に答える
0

次のような単純なフィルターでうまくいくかもしれません。

h = [     0     1     0
          1     0     1
          0     1     0];

img2=(imfilter(img,h)>2) | img;

例えば:

img =

     1     0     0     1     0     0     0
     0     0     1     0     1     0     0
     0     1     0     1     0     0     0
     0     0     1     1     1     0     0

img2 =

     1     0     0     1     0     0     0
     0     0     1     1     1     0     0
     0     1     1     1     1     0     0
     0     0     1     1     1     0     0

出力を変更するために、さまざまなフィルタを試すことができますimg2

これは、画像処理ツールボックスを使用します。それがない場合は、matlab exchange から同等のルーチンを検索することをお勧めします。

于 2013-10-12T23:55:17.530 に答える