構造化要素
モルフォロジー膨張演算および収縮演算の本質的な部分は、入力イメージを調べるために使用する構造化要素です。構造化要素は、イメージ内の各ピクセルの処理に使用される近傍を定義する行列です。構造化要素の中心ピクセルは "原点" と呼ばれ、処理されるイメージ内のピクセルを識別します。
通常は、入力イメージ内で処理するオブジェクトと同じサイズと形状をもつ構造化要素を選択します。たとえば、イメージの中の線を検出するには、線形の構造化要素を作成します。
構造化要素には、"フラット" と "非フラット" の 2 種類があります。フラットな構造化要素は、2 次元または多次元のバイナリ値の近傍であり、true
(1
の値) のピクセルがモルフォロジー演算に含められ、false
(0
の値) のピクセルが除外されます。関数 strel
を使用してフラットな構造化要素を作成します。バイナリ イメージおよびグレースケール イメージのフラットな構造化要素を使用できます。次の図はフラットな構造化要素を示しています。
非フラットな構造化要素を使用できるのはグレースケール イメージに限られます。非フラットな構造化要素には、近傍の各ピクセルに対する追加オフセットが含まれます。有限の実数値をもつ近傍のピクセルがモルフォロジー演算に使用されます。値 -Inf
をもつ近傍内のピクセルは演算に使用されません。非フラットな構造化要素を作成するには、関数 offsetstrel
を使用します。
構造化要素の原点の決定
モルフォロジー関数は、次のコードを使用して任意のサイズと次元の構造化要素の原点座標を得ることができます。
origin = floor((size(nhood)+1)/2)
ここで、nhood
は構造化要素を定義する近傍です。フラットな構造化要素の近傍を確認するには、strel
オブジェクトの Neighborhood
プロパティを表示します。非フラットな構造化要素の近傍を確認するには、offsetstrel
オブジェクトの Offset
プロパティを表示します。
たとえば、次の図はフラットな菱形の構造化要素の原点を示しています。
構造化要素の分解
性能を高めるため、関数 strel
と関数 offsetstrel
は構造化要素をより小さい部分に分解します。これは、"構造化要素の分解" として知られている手法です。
たとえば、11 行 11 列の正方形構造化要素による膨張は、1 行 11 列の構造化要素を使用してから 11 行 1 列の構造化要素を使用して膨張することによって達成できます。これにより、実際の速度がそれほど向上しない場合でも、5.5 の因子の理論上の速度が向上されます。
"disk"
および "ball"
形状で使用される構造化要素分解は、近似であり、その他すべての分解は完全一致になります。分解はフラットな構造化要素の近傍行列がすべて 1
でない限り、任意の要素の構造化要素と共に使用されません。
分解の中で使用されている構造化要素のシーケンスを表示するには、decompose
メソッドを使用します。strel
オブジェクトと offsetstrel
オブジェクトはいずれも decompose メソッドをサポートします。decompose
メソッドは分解したものから構成される構造化要素の配列を返します。たとえば、菱形の構造化要素の分解内に作成された構造化要素群を示します。
SE = strel("diamond",4)
SE = strel is a diamond shaped structuring element with properties: Neighborhood: [9x9 logical] Dimensionality: 2
decompose メソッドを呼び出します。このメソッドは構造化要素の配列を返します。
decompose(SE)
ans = 3x1 strel array with properties: Neighborhood Dimensionality