このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
imdilate
イメージの膨張
説明
例
垂直線の構造化要素によるイメージの膨張
バイナリ イメージをワークスペースに読み取ります。
BW = imread('text.png');
垂直線状の構造化要素を作成します。
se = strel('line',11,90);
垂直線の構造化要素を使用してイメージを膨張させ、結果を比較します。
BW2 = imdilate(BW,se);
imshow(BW), title('Original')
figure, imshow(BW2), title('Dilated')
ローリング ボールを使用したグレースケール イメージの膨張
グレースケール イメージをワークスペースに読み取ります。
originalI = imread('cameraman.tif');
非フラットなボール形状の構造化要素を作成します。
se = offsetstrel('ball',5,5);
イメージを膨張します。
dilatedI = imdilate(originalI,se);
元のイメージと膨張したイメージを表示します。
imshowpair(originalI,dilatedI,'montage')
構造化要素の構成領域の決定
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
球状の構造化要素を使用した 3 次元空間内の点の膨張
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)
入力引数
I
— 入力イメージ
グレースケール イメージ | バイナリ イメージ | パックされたバイナリ イメージ
入力イメージ。任意の次元のグレースケール イメージ、バイナリ イメージまたはパックされたバイナリ イメージとして指定します。
データ型: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| logical
SE
— 構造化要素
strel
オブジェクト | offsetstrel
オブジェクト | strel
オブジェクトの配列 | offsetstrel
オブジェクトの配列
構造化要素。スカラー strel
オブジェクトまたは offsetstrel
オブジェクトとして指定します。SE
は、strel
オブジェクトまたは offsetstrel
オブジェクトの配列にすることもできます。この場合、imdilate
は各構造化要素を続けて使用して入力イメージの膨張を複数実行します。
imdilate
は logical
データ型のイメージを除くすべてのイメージに対してグレースケールの膨張処理を実行します。この場合、構造化要素はフラットでなければなりません。imdilate
はバイナリ膨張を実行します。
nhood
— 構造化要素近傍
0
と 1
から成る行列
構造化要素近傍。0
と 1
から成る行列として指定します。
例: [0 1 0; 1 1 1; 0 1 0]
shape
— 出力イメージのサイズ
'same'
(既定値) | 'full'
出力イメージのサイズ。次のいずれかに指定します。
値 | 説明 |
---|---|
| 出力イメージは入力イメージと同じサイズです。 |
| すべての膨張処理を計算します。 |
データ型: char
| string
出力引数
詳細
バイナリ膨張
B による A の "バイナリ膨張" は、A ⨁ B のように記述され、次の集合演算で定義されます。
ここで、 は構造化要素 B の鏡映です。すなわち、これはピクセル位置 z の集合です。ここで、反転した構造化要素は、z に変換された場合、A の前景ピクセルと重複します。構造化要素が反転しない膨張の定義を使用するアプリケーションもあることに注意してください。
バイナリ膨張の詳細については、[1] を参照してください。
グレースケール膨張
一般的な形式の "グレースケール膨張" では、構造化要素に高さが含まれます。B(x,y) による A(x,y) のグレースケール膨張は、次のように定義されます。
ここで、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) を使用して実行されます。このような構造化要素を使用するグレースケール膨張は、次の局所的最大値の演算と等価です。
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.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
imdilate
では C コードの生成がサポートされています (MATLAB® Coder™ が必要)。汎用のMATLAB Host Computer
ターゲット プラットフォームを選択した場合、プリコンパイルされたプラットフォーム固有の共有ライブラリを使用するコードが、imdilate
によって生成されます。共有ライブラリを使用するとパフォーマンスの最適化は維持されますが、コードを生成できるターゲット プラットフォームが限定されます。詳細については、Image Processing Toolbox でサポートされているコード生成のタイプを参照してください。入力イメージ
I
は 2 次元または 3 次元でなければなりません。構造化要素
SE
は単一の要素でなければなりません。構造化要素の配列はサポートされていません。構造化要素の配列を使用した場合と同じ結果を得るには、関数を順次呼び出します。ターゲットが
MATLAB Host Computer
の場合、引数packopt
およびshape
はコンパイル時の定数でなければなりません。ターゲットがその他のプラットフォームの場合には、packopt
構文はサポートされません。
GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。
使用上の注意および制限:
入力イメージ
I
は 2 次元または 3 次元でなければなりません。パックされたバイナリ入力イメージ (
packopt
構文) はサポートされません。チャネル数が 3 つよりも多い 3 次元イメージの場合、C/C++ コードのみ生成されます。
構造化要素
SE
はコンパイル時の定数でなければなりません。CUDA® コードは、1 次元または 2 次元の構造化要素についてのみ生成されます。構造化要素が 3 次元の場合、C/C++ コードが生成されます。3 次元を超える構造化要素ではコード生成はサポートされません。フラットでない構造化要素では、C/C++ コードのみ生成されます。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数は、スレッドベースの環境を完全にサポートします。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
使用上の注意および制限:
gpuArray
入力はuint8
型またはlogical
型でなければなりません。構造化要素
SE
はフラットで 2 次元でなければなりません。GPU では
packopt
引数はサポートされていません。
詳細については、GPU でのイメージ処理を参照してください。
バージョン履歴
R2006a より前に導入R2022b: スレッドベース環境のサポート
imdilate
は、スレッドベースの環境をサポートするようになりました。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)