ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

imfill

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

説明

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

オプションで、塗りつぶし操作を GPU を使用して実行できます (Parallel Computing Toolbox™ が必要)。詳細は、GPU での画像処理を参照

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 キーを押すと、点を追加しないで、選択を終了します。

GPU では、この構文はサポートされていません。

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

GPU では、この構文はサポートされていません。

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

GPU では、この構文はサポートされていません。

すべて折りたたむ

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]);

BW2 = imfill(BW1,[3 3],8)
BW2 = 8x8 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')

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

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

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

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

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

シンプルなサンプル バイナリ イメージを作成します。

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 =

     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

gpuArray を作成します。

BW1 = gpuArray(BW1);    

指定した開始位置からイメージの背景を塗りつぶします。

BW2 = imfill(BW1,[3 3],8)
BW2 =

     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

入力引数

すべて折りたたむ

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

GPU を使用してイメージ領域と穴を塗りつぶすには、BW を任意の次元の実数、非スパースの logical 配列を含む gpuArray として指定します。

例: BW = imread('text.png');

例: BW = gpuArray(imread('text.png'));

データ型: logical

ピクセル位置を識別する線形インデックス。正の整数の数値ベクトルまたは 2 次元数値行列として指定します。locations が、p 行 1 列のベクトルの場合、開始位置の線形インデックスを含んでいます。locations が、p 行 ndims(BW) 列の行列の場合、個々の行は開始位置の 1 つの配列インデックスを含んでいます。

例: [3 3]

データ型: double

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

GPU を使用してイメージ領域と穴を塗りつぶすには、I を任意の次元の実数、非スパースの数値配列を含む gpuArray として指定します。

例: I = imread('cameraman.tif');

例: I = gpuArray(imread('cameraman.tif'));

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

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

平均

2 次元連結性

4 連結

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

8 連結

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

3 次元連結性

6 連結

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

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

18 連結

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

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

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

26 連結

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

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

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

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

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

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

データ型: double | logical

出力引数

すべて折りたたむ

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

GPU を使用してイメージ領域と穴を塗りつぶす場合、BW2 は logical 配列を含む gpuArray として返されます。

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

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

GPU を使用してイメージ領域と穴を塗りつぶす場合、I2 は数値配列を含む gpuArray として返されます。

アルゴリズム

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

参照

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

拡張機能

R2006a より前に導入