Main Content

imdilate

説明

J = imdilate(I,SE) は、構造化要素 SE を使用して、グレースケール イメージ、バイナリ イメージ、またはパックされたバイナリ イメージ I の膨張処理を行います。

J = imdilate(I,nhood) は、イメージ I を膨張処理します。ここで、nhood は、構造化要素近傍を指定する 01 から構成される行列です。

この構文は、imdilate(I,strel(nhood)) と等価です。

J = imdilate(___,packopt)I がパックされたバイナリ イメージであるかどうかを指定します。

J = imdilate(___,shape) は出力イメージのサイズを指定します。

すべて折りたたむ

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

BW = imread('text.png');

垂直線状の構造化要素を作成します。

se = strel('line',11,90);

垂直線の構造化要素を使用してイメージを膨張させ、結果を比較します。

BW2 = imdilate(BW,se);
imshow(BW), title('Original')

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

figure, imshow(BW2), title('Dilated')

Figure contains an axes object. The axes object with title Dilated contains an object of type image.

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

originalI = imread('cameraman.tif');

非フラットなボール形状の構造化要素を作成します。

se = offsetstrel('ball',5,5);

イメージを膨張します。

dilatedI = imdilate(originalI,se);

元のイメージと膨張したイメージを表示します。

imshowpair(originalI,dilatedI,'montage')

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

2 つのフラットなライン状の構造化要素を、それぞれ 0 度と 90 度で作成します。

se1 = strel('line',3,0)
se1 = 
strel is a line shaped structuring element with properties:

      Neighborhood: [1 1 1]
    Dimensionality: 2

se2 = strel('line',3,90)
se2 = 
strel is a line shaped structuring element with properties:

      Neighborhood: [3x1 logical]
    Dimensionality: 2

両方の構造化要素のシーケンスと、'full' オプションを使用して、スカラー値 1 を膨張します。

composition = imdilate(1,[se1 se2],'full')
composition = 3×3

     1     1     1
     1     1     1
     1     1     1

2 つの点を含む 3 次元論理ボリュームを作成します。

BW = false(100,100,100);
BW(25,25,25) = true;
BW(75,75,75) = true;

球状の構造化要素を使用して 3 次元ボリュームを膨張します。

se = strel('sphere',25);
dilatedBW = imdilate(BW,se);

膨張したイメージ ボリュームを可視化します。

figure
isosurface(dilatedBW, 0.5)

Figure contains an axes object. The axes object contains an object of type patch.

入力引数

すべて折りたたむ

入力イメージ。任意の次元のグレースケール イメージ、バイナリ イメージまたはパックされたバイナリ イメージとして指定します。

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

構造化要素。スカラー strel オブジェクトまたは offsetstrel オブジェクトとして指定します。SE は、strel オブジェクトまたは offsetstrel オブジェクトの配列にすることもできます。この場合、imdilate は各構造化要素を続けて使用して入力イメージの膨張を複数実行します。

imdilatelogical データ型のイメージを除くすべてのイメージに対してグレースケールの膨張処理を実行します。この場合、構造化要素はフラットでなければなりません。imdilate はバイナリ膨張を実行します。

構造化要素近傍。01 から成る行列として指定します。

例: [0 1 0; 1 1 1; 0 1 0]

パックされたバイナリ イメージのインジケーター。次のいずれかに指定します。

説明

'notpacked'

I は、通常の配列として取り扱われます。

'ispacked'

I は、bwpack で出力されるパックされたバイナリ イメージとして取り扱われます。I は 2 次元の uint32 配列で、SE はフラットな 2 次元構造化要素でなければなりません。shape の値は 'same' でなければなりません。

データ型: char | string

出力イメージのサイズ。次のいずれかに指定します。

説明

'same'

出力イメージは入力イメージと同じサイズです。packopt の値が 'ispacked' の場合、shape'same' でなければなりません。

'full'

すべての膨張処理を計算します。

データ型: char | string

出力引数

すべて折りたたむ

膨張されたイメージ。グレースケール イメージ、バイナリ イメージまたはパックされたバイナリ イメージとして返されます。入力イメージ I がパックされたバイナリの場合、J もパックされたバイナリになります。J のデータ型は I と同じです。

詳細

すべて折りたたむ

バイナリ膨張

B による A の "バイナリ膨張" は、A ⨁ B のように記述され、次の集合演算で定義されます。

AB={z|(B^)zA},

ここで、B^ は構造化要素 B の鏡映です。すなわち、これはピクセル位置 z の集合です。ここで、反転した構造化要素は、z に変換された場合、A の前景ピクセルと重複します。構造化要素が反転しない膨張の定義を使用するアプリケーションもあることに注意してください。

バイナリ膨張の詳細については、[1] を参照してください。

グレースケール膨張

一般的な形式の "グレースケール膨張" では、構造化要素に高さが含まれます。B(x,y) による A(x,y) のグレースケール膨張は、次のように定義されます。

(AB)(x,y)=max{A(xx,yy)+B(x,y)|(x,y)DB},

ここで、DB は構造化要素 B の領域で、A(x, y) はイメージの領域外で −∞ と仮定されます。アプリケーションによっては、A(x – x′, y – y′) ではなく A(x + x′, y + y′) を含む方程式を使用してグレースケールの膨張が定義される点に注意してください。

高さの値にゼロ以外の値を指定して構造化要素を作成するには、構文 strel(nhood,height) を作成します。ここで、height は高さの値を指定し、nhood は構造化要素の領域 DB に対応します。

最も一般的なグレースケール膨張は、フラットな構造化要素 (B(x,y) = 0) を使用して実行されます。このような構造化要素を使用するグレースケール膨張は、次の局所的最大値の演算と等価です。

(AB)(x,y)=max{A(xx,yy)|(x,y)DB}.

strel(nhood,height)strel('arbitrary',nhood,height)、および strel('ball',___) 以外のすべての strel 構文は、フラットな構造化要素を生成します。

ヒント

  • イメージ I の次元が構造化要素の次元より高い場合、関数 imdilate は、高次元のすべての平面に対して同じモルフォロジー膨張を適用します。

    この動作を使用して、RGB イメージのモルフォロジー膨張を行うことができます。カラー チャネル別に処理を行うには、RGB イメージの 2 次元構造化要素を指定します。

  • 構造化要素近傍を指定した場合、imdilate は、floor((size(nhood)+1)/2) によって nhood の中心要素を決定します。

  • imdilate は、構造化要素オブジェクト (存在する場合) の分解を自動的に利用しています。また、分解された構造化要素オブジェクトを使用してバイナリ膨張を行う場合、imdilate は、自動的にバイナリ イメージ パックを行って膨張処理を高速化します[3]

参照

[1] Gonzalez, Rafael C., Richard E. Woods, and Steven L. Eddins. Digital Image Processing Using MATLAB. Third edition. Knoxville: Gatesmark Publishing, 2020.

[2] Haralick, Robert M., and Linda G. Shapiro. Computer and Robot Vision. 1st ed. USA: Addison-Wesley Longman Publishing Co., Inc., 1992, pp. 158-205.

[3] Boomgaard, Rein van den, and Richard van Balen. “Methods for Fast Morphological Image Transforms Using Bitmapped Binary Images.” CVGIP: Graphical Models and Image Processing 54, no. 3 (May 1, 1992): 252–58. https://doi.org/10.1016/1049-9652(92)90055-3.

拡張機能

バージョン履歴

R2006a より前に導入

参考

関数

オブジェクト