メインコンテンツ

imfill

イメージ領域と穴の塗りつぶし

説明

バイナリ イメージ

BW2 = imfill(BW,locations) は、locations で指定した点から開始し、塗りつぶし操作を入力バイナリ イメージ BW の背景ピクセルに適用します。

BW2 = imfill(BW,locations,conn) は、locations で定義された領域を塗りつぶします。ここで、conn は連結性を指定します。

BW2 = imfill(BW,"holes") は、入力バイナリ イメージ BW の穴を塗りつぶします。この構文にある穴 (hole) とは、イメージのエッジからの背景の塗りつぶしが到達できない背景ピクセルの集合です。

BW2 = imfill(BW,conn,"holes") は、バイナリ イメージ BW の穴を塗りつぶします。ここで、conn は連結性を指定します。

グレースケール イメージ

I2 = imfill(I) は、グレースケール イメージ I の穴を塗りつぶします。この構文では、穴は、明るいピクセルで囲まれた暗いピクセルの領域として定義されます。

I2 = imfill(I,conn) は、グレースケール イメージ I の穴を塗りつぶします。ここで、conn は連結性を指定します。

対話型動作

BW2 = imfill(BW) は、スクリーン上にバイナリ イメージ BW を表示し、マウスを使用して対話形式で点を選択して塗りつぶす領域を定義します。この構文を使用するには、BW は、2 次元イメージでなければなりません。

以前に選択していた点を除去するには、Backspace または Delete を押します。Shift クリック、右クリックまたはダブルクリックにより、最後の点を選択して、塗りつぶし操作を開始します。Enter キーを押すと、点を追加しないで、選択を終了します。

BW2 = imfill(BW,0,conn) では、対話形式で位置を指定すると、既定の連結性をオーバーライドすることができます。

[BW2, locations_out] = imfill(BW) は、locations_out に対話形式で選択した点の位置を返します。この構文を使用するには、BW は、2 次元イメージでなければなりません。

すべて折りたたむ

8×8 のバイナリ イメージを作成します。

BW1 = logical([1 0 0 0 0 0 0 0
               1 1 1 1 1 0 0 0
               1 0 0 0 1 0 1 0
               1 0 0 0 1 1 1 0
               1 1 1 1 0 1 1 1
               1 0 0 1 1 0 1 0
               1 0 0 0 1 0 1 0
               1 0 0 0 1 1 1 0]);

BW1(3,3) の位置から塗りつぶし操作を実行します。4 連結を使用してイメージを塗りつぶすには、3 番目の入力引数を 4 として指定します。この操作により、イメージの左上領域の穴が埋められます。

BW2 = imfill(BW1,[3 3],4)
BW2 = 8×8 logical array

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

次に、8 連結を使用して、同じピクセルから塗りつぶし操作を実行します。塗りつぶされた領域には、イメージの右下領域の穴も含まれるようになりました。

BW3 = imfill(BW1,[3 3],8)
BW3 = 8×8 logical array

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

イメージをワークスペースに読み取ります。

I = imread('coins.png');
figure
imshow(I)
title('Original Image')

Figure contains an axes object. The hidden axes object with title Original Image contains an object of type image.

イメージをバイナリ イメージに変換します。

BW = imbinarize(I);
figure
imshow(BW)
title('Original Image Converted to Binary Image')

Figure contains an axes object. The hidden axes object with title Original Image Converted to Binary Image contains an object of type image.

バイナリ イメージにある穴を塗りつぶして結果を表示します。

BW2 = imfill(BW,'holes');
figure
imshow(BW2)
title('Filled Image')

Figure contains an axes object. The hidden axes object with title Filled Image contains an object of type image.

I = imread('tire.tif');
I2 = imfill(I);
figure, imshow(I), figure, imshow(I2)

Figure contains an axes object. The hidden axes object contains an object of type image.

Figure contains an axes object. The hidden axes object contains an object of type image.

入力引数

すべて折りたたむ

バイナリ イメージ。任意の次元の logical 配列として指定します。

データ型: logical

ピクセル位置を識別するインデックス。次のいずれかのオプションとして指定します。

  • 添字インデックスを使用して p 個の位置を指定するには、正の整数の pndims(BW) 列の行列を指定します。ここで、ndims(BW) は入力イメージの次元数であり、各行には 1 つの位置の添字インデックスが含まれています。

  • 線形インデックスを使用して p 個の位置を指定するには、正の整数の p 要素の列ベクトルを指定します。

例: [3 4] は、2 次元入力イメージ内で行と列のインデックス (3, 4) をもつ 1 つの位置を指定します。

例: [2 2 2; 4 5 6] は、3 次元入力イメージ内で添字インデックス (2, 2, 2) と (4, 5, 6) をもつ 2 つの位置を指定します。

例: 2 は、線形インデックス 2 に対応する単一の位置を指定します。

例: [2; 8; 16] は、線形インデックス 2、8、および 16 に対応する 3 つの位置を指定します。

データ型: double

ピクセルの連結性。次の表のいずれかの値を指定します。既定の連結性は 2 次元イメージでは 4、3 次元イメージでは 6 です。

意味

2 次元連結性

4

ピクセルのエッジの部分が接触している場合、ピクセルは連結されます。ピクセルの近傍は水平方向または垂直方向に隣接するピクセルです。

3-by-3 pixel neighborhood with four pixels connected to the center pixel

現在のピクセルを灰色で示します。

8

ピクセルのエッジまたはコーナーが接触している場合、ピクセルは連結されます。ピクセルの近傍は水平方向、垂直方向または対角方向に隣接するピクセルです。

3-by-3 pixel neighborhood with 8 pixels connected to the center pixel

現在のピクセルを灰色で示します。

3 次元連結性

6

面が接触している場合、ピクセルは連結されます。ピクセルの近傍は次のように隣接するピクセルです。

  • 次のいずれかの方向: 奥、手前、左、右、上および下

3-by-3-by-3 pixel neighborhood with 6 pixels connected to the faces of the center pixel

現在のピクセルを灰色で示します。

18

面またはエッジが接触している場合、ピクセルは連結されます。ピクセルの近傍は次のように隣接するピクセルです。

  • 次のいずれかの方向: 奥、手前、左、右、上および下

  • 右下または上の奥など、2 つの方向の組み合わせ

3-by-3-by-3 pixel neighborhood with 6 pixels connected to the faces and 12 pixels connected to the edges of the center pixel

現在のピクセルは立方体の中心です。

26

面、エッジまたはコーナーが接触している場合、ピクセルは連結されます。ピクセルの近傍は次のように隣接するピクセルです。

  • 次のいずれかの方向: 奥、手前、左、右、上および下

  • 右下または上の奥など、2 つの方向の組み合わせ

  • 右上の奥または左下の奥など、3 つの方向の組み合わせ

3-by-3-by-3 pixel neighborhood with 6 pixels connected to the faces, 12 pixels connected to the edges, and 8 pixels connected to the corners of the center pixel

現在のピクセルは立方体の中心です。

高次元の場合、imfill は既定値 conndef(ndims(BW),"minimal") を使用します。

連結性は、01 から成る 3 × 3 × ... × 3 行列を指定し、任意の次元に対してより一般的に定義することもできます。1 の値を持つ要素は、conn の中心要素に対する近傍の位置を定義します。conn は、その中心要素に関して対称でなければなりません。詳細については、カスタム連結性の定義を参照してください。

データ型: double | logical

グレースケール イメージ。任意の次元の数値配列として指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

出力引数

すべて折りたたむ

塗りつぶされたバイナリ イメージ。logical 配列として返されます。

ピクセル位置の線形インデックス。数値ベクトルまたは行列として返されます。

塗りつぶされたグレースケール イメージ。数値配列として返されます。

アルゴリズム

imfill は、モルフォロジー再構成をベースにしたアルゴリズムを使用しています [1]

参照

[1] Soille, P., Morphological Image Analysis: Principles and Applications, Springer-Verlag, 1999, pp. 173–174.

拡張機能

すべて展開する

バージョン履歴

R2006a より前に導入

すべて展開する