ドキュメンテーション

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

imdilate

構文

IM2 = imdilate(IM,SE)
IM2 = imdilate(IM,NHOOD)
IM2 = imdilate(___,PACKOPT)
IM2 = imdilate(___,SHAPE)
gpuarrayIM2 = imdilate(gpuarrayIM,___)

説明

IM2 = imdilate(IM,SE) は、グレースケール イメージ、バイナリ イメージまたはパックされたバイナリ イメージ IM に膨張操作を行い、結果のイメージ IM2 を返します。引数 SE は、構造化要素オブジェクトまたは構造化要素オブジェクトの配列で、関数 strel で作成されます。

IM が論理値で、構造化要素がフラットな場合、imdilate は、バイナリ膨張を実行します。その他の場合、グレースケール膨張が実施されます。SE が構造化要素オブジェクトの配列の場合、imdilate は、連続的に SE の中の個々の構造化要素を使って、入力イメージの複数の膨張を実行します。

IM2 = imdilate(IM,NHOOD) は、イメージ IM を膨張処理します。ここで、NHOOD は、構造化要素近傍を指定する 0 と 1 から構成される行列です。これは、構文 imdilate(IM,strel(NHOOD)) と等価です。関数 imdilate は、floor((size(NHOOD)+1)/2) で近傍の中心要素を決定します。

IM2 = imdilate(___,PACKOPT)IM がパックされたバイナリ イメージかどうかを指定します。PACKOPT は以下のいずれかの値をとることができます。既定値は、中かっこ ({}) で囲まれています。

説明

'ispacked'

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

{'notpacked'}

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

IM2 = imdilate(___,SHAPE) は出力イメージのサイズを指定します。SHAPE は次のいずれかの値をとることができます。既定値は、中かっこ ({}) で囲まれています。

説明

{'same'}

入力イメージと同じサイズの出力イメージを作成します。PACKOPT の値が 'ispacked' の場合、SHAPE'same' でなければなりません。

'full'

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

gpuarrayIM2 = imdilate(gpuarrayIM,___) は、GPU (グラフィックス処理装置) で処理を実行します。ここで、gpuarrayIM はグレースケール イメージまたはバイナリ イメージを含む gpuArray です。gpuarrayIM2 は入力イメージと同じクラスの gpuArray です。PACKOPT 構文は GPU ではサポートされていないので注意してください。この構文では Parallel Computing Toolbox™ が必要です。

コード生成

imdilate は、MATLAB からのコード生成をサポートします。効率のよい、製品レベルの品質をもつ C/C++ コードを生成できます。コード生成時には、以下の点に注意してください。

  • 入力イメージ IM は、2 次元または 3 次元のイメージでなければなりません。

  • 入力引数 SEPACKOPT および SHAPE はコンパイル時の定数でなければなりません。

  • 構造化要素引数 SE は単一の要素でなければなりません。構造化要素の配列はサポートされていません。構造化要素の配列を使用した場合と同じ結果を得るには、関数を順次呼び出します。

この関数で生成されるコードでは、プリコンパイルされた、プラットフォーム固有の共有ライブラリを使用します。コード生成をサポートするツールボックス関数の詳細な一覧を確認するには、「サポートされている関数の一覧と使用上の注意事項」を参照してください。

クラス サポート

IM は、論理値か数値のいずれかで、実数で非スパースでなければなりません。それは任意の次元にできます。IM が logical の場合、SE はフラットでなければなりません。出力は入力と同じクラスになります。入力がパックされたバイナリの場合、出力もパックされたバイナリになります。

gpuarrayIMuint8 型または logical 型の gpuArray でなければなりません。gpuarray と併用する場合、構造化要素はフラットかつ 2 次元でなければなりません。出力は入力と同じクラスになります。

すべて展開する

垂直線の構造化要素によるバイナリ イメージの膨張

バイナリ イメージを読み取ります。

bw = imread('text.png');

構造化要素を作成します。

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

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

bw2 = imdilate(bw,se);
imshow(bw), title('Original')
figure, imshow(bw2), title('Dilated')

ローリング ボールの構造化要素によるグレースケール イメージの膨張

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

I = imread('cameraman.tif');

構造化要素を作成します。

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

ローリング ボールの構造化要素を使って、グレースケール イメージに膨張を適用します。

I2 = imdilate(I,se);
imshow(I), title('Original')
figure, imshow(I2), title('Dilated')

2 つのフラットな構造化要素の構成領域の決定

2 つのフラットな構造化要素の構成領域を決定するために、'full' オプションと共に両方の構造化要素を連続的に使用してスカラー値 1 を膨張させます。

フラットな構造化要素を作成します。

se1 = strel('line',3,0)
se1 =
 
Flat STREL object containing 3 neighbors.
Neighborhood:
     1     1     1

別のフラットな構造化要素を作成します。

se2 = strel('line',3,90)
se2 =
 
Flat STREL object containing 3 neighbors.
Neighborhood:
     1
     1
     1

両方の構造化要素を連続で使用して、スカラー値 1 を膨張させます。

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

GPU での垂直線の構造化要素によるバイナリ イメージの膨張

バイナリ イメージを読み取ります。

 originalBW = imread('text.png');

構造化要素を作成します。

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

垂直線の構造化要素を使用してイメージを膨張させ、結果を比較します。この例において、イメージが imdilate に渡される際、どのようにして関数 gpuArray に渡されるのかに注意してください。

dilatedBW = imdilate(gpuArray(originalBW),se);
figure, imshow(originalBW), figure, imshow(dilatedBW)

GPU での円盤型の構造化要素によるグレースケール イメージの膨張

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

 originalI = imread('cameraman.tif');

構造化要素を作成します。

 se = strel('disk',5);

ローリング ボールの構造化要素を使って、グレースケール イメージに膨張を適用します。

dilatedI = imdilate(gpuArray(originalI),se);
figure, imshow(originalI), figure, imshow(dilatedI)

定義

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

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

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

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

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

ここで、DB は構造化要素 B の領域で、A(x,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 のすべての構文ではフラットな構造化要素が生成されます。

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

詳細

すべて展開する

アルゴリズム

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

ビット圧縮を使用した膨張は、参考文献 [3] を参照してください。

参考文献

[1] Gonzalez, R. C., R. E. Woods, and S. L. Eddins, Digital Image Processing Using MATLAB, Gatesmark Publishing, 2009.

[2] Haralick, R. M., and L. G. Shapiro, Computer and Robot Vision, Vol. I, Addison-Wesley, 1992, pp. 158-205.

[3] van den Boomgard, R, and R. van Balen, "Methods for Fast Morphological Image Transforms Using Bitmapped Images," Computer Vision, Graphics, and Image Processing: Graphical Models and Image Processing, Vol. 54, Number 3, pp. 254-258, May 1992.

この情報は役に立ちましたか?