ドキュメンテーション

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

graycomatrix

イメージからグレーレベルの同時生起行列を作成

構文

glcms = graycomatrix(I)
glcms = graycomatrix(I,Name,Value,...)
[glcms,SI] = graycomatrix(___)

説明

glcms = graycomatrix(I) は、イメージ I からグレー レベルの同時生起行列 (GLCM) を作成します。グレー レベルの同時生起行列の別名は、"グレー レベルの空間依存行列" です。また、"同時生起 (co-occurrence)" という語は文献でハイフンのない "cooccurrence" という表記もよく使用されます。

graycomatrix は、グレー レベル (グレースケール強度) 値 i のピクセルが値 j のピクセルに水平方向に隣接して出現する頻度を計算することにより GLCM を作成します。その他のピクセルの空間的関係は 'Offsets' パラメーターで指定することができます。glcm の各要素 (i,j) は、値 i のピクセルが値 j のピクセルに水平方向に隣接して出現した回数を指定します。

glcms = graycomatrix(I,Name,Value,...) はオプションの名前/値のペアの値に応じて 1 つ以上のグレー レベルの同時生起行列を返します。パラメーター名は省略形でも構いません。大文字と小文字は区別されません。

[glcms,SI] = graycomatrix(___) はグレーレベル同時生起行列の計算に使用されるスケーリングされたイメージ SI を返します。SI の値は 1NumLevels になります。

すべて折りたたむ

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

I = imread('circuit.tif');

グレースケール イメージのグレー レベル同時生起行列 (GLCM) を計算します。既定の設定では、graycomatrix はピクセルの水平方向の近接度 ([0 1]) に基づいて GLCM を計算します。これは同じ行での対象となるピクセルの隣のピクセルです。この例では異なるオフセット (同じ列で 2 行離れている) を指定しています。

glcm = graycomatrix(I,'Offset',[2 0])
glcm = 

       14205        2107         126           0           0           0           0           0
        2242       14052        3555         400           0           0           0           0
         191        3579        7341        1505          37           0           0           0
           0         683        1446        7184        1368           0           0           0
           0           7         116        1502       10256        1124           0           0
           0           0           0           2        1153        1435           0           0
           0           0           0           0           0           0           0           0
           0           0           0           0           0           0           0           0

3 行 6 列のシンプルなサンプル配列を作成します。

I = [ 1 1 5 6 8 8; 2 3 5 7 0 2; 0 2 3 5 6 7]
I = 

     1     1     5     6     8     8
     2     3     5     7     0     2
     0     2     3     5     6     7

グレー レベル同時生起行列 (GLCM) を計算して、計算に使用したスケーリングされたイメージを返します。この例では、GrayLimits パラメーターに空の角かっこを指定することによって、入力イメージの最小と最大のグレースケール値を範囲として使用しています。

[glcm, SI] = graycomatrix(I,'NumLevels',9,'GrayLimits',[])
glcm = 

     0     0     2     0     0     0     0     0     0
     0     1     0     0     0     1     0     0     0
     0     0     0     2     0     0     0     0     0
     0     0     0     0     0     2     0     0     0
     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     2     1     0
     0     0     0     0     0     0     0     1     1
     1     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     1

SI = 

     2     2     6     7     9     9
     3     4     6     8     1     3
     1     3     4     6     7     8

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

I = imread('cell.tif');

4 つのオフセットを定義します。

offsets = [0 1; -1 1;-1 0;-1 -1];

GLCM を計算すると共にスケーリングされたイメージも返します。

[glcms, SI] = graycomatrix(I,'Offset',offsets);

4 つの GLCM の配列が返されています。

whos
  Name           Size              Bytes  Class     Attributes

  I            159x191             30369  uint8               
  SI           159x191            242952  double              
  glcms          8x8x4              2048  double              
  offsets        4x2                  64  double              

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

I = imread('circuit.tif');

Symmetric オプションを使用して GLCM を計算します。Symmetric を true に設定した場合に作成される GLCM は対角線に対して対称で、Haralick (1973) によって記述された GLCM と等価です。

glcm = graycomatrix(I,'Offset',[2 0],'Symmetric', true)
glcm = 

       28410        4349         317           0           0           0           0           0
        4349       28104        7134        1083           7           0           0           0
         317        7134       14682        2951         153           0           0           0
           0        1083        2951       14368        2870           2           0           0
           0           7         153        2870       20512        2277           0           0
           0           0           0           2        2277        2870           0           0
           0           0           0           0           0           0           0           0
           0           0           0           0           0           0           0           0

入力引数

すべて折りたたむ

入力イメージ。2 次元、実数、非スパースの数値配列または論理配列として指定します。

例:

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

名前/値のペアの引数

オプションの Name,Value 引数のペアをコンマ区切りで指定します。ここで、Name は引数名で、Value は対応する値です。Name は単一引用符 (' ') で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順番で指定できます。

例:

すべて折りたたむ

入力イメージをグレー レベルにスケーリングするために使用する範囲。2 要素ベクトル [low high] として指定します。N がスケーリングに使用されるグレー レベルの数 (パラメーター 'NumLevels' を参照) である場合、範囲 [low high]N 個の等幅のビンに分割され、ビン内の値が単一のグレー レベルにマッピングされます。low 以下のグレースケール値は 1 にスケーリングされます。high 以上のグレースケール値は 'NumLevels' にスケーリングされます。'GrayLimits'[] に設定された場合、graycomatrixI の最小および最大グレースケール値を範囲 [min(I(:)) max(I(:))] として使用します。たとえば、double クラスの場合は [0 1]int16 クラスの場合は [-32768 32767] です。

例:

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

グレー レベルの数。整数として指定します。たとえば、NumLevels が 8 の場合、graycomatrixI の値をスケーリングして 1 から 8 の整数値にします。グレーレベルの数により、グレーレベル同時生起行列 (glcm) のサイズが決まります。

例:

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

対象となるピクセルとその近傍との間の距離。p 行 2 列の整数の配列として指定します。配列内の各行は 2 要素ベクトル [row_offset, col_offset] であり、1 組のピクセルの関係、つまり "オフセット" を指定します。row_offset は対象となるピクセルとその近傍との間の行数です。col_offset は対象となるピクセルとその近傍との間の列数です。このオフセットは角度で表されることが多いので、以下にピクセル距離 D が与えられたときの一般的な角度を指定するオフセット値を示します。

角度

オフセット

0

[0 D]

45

[-D D]

90[-D 0]
135[-D -D]

次の図は次の配列を示したものです。offset = [0 1; -1 1; -1 0; -1 -1]

例:

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

値の順序を考慮します。ブール値 true または false として指定します。たとえば、'Symmetric'true に設定された場合、graycomatrix は値 1 が値 2 に隣接する回数を計算するときに、「1、2」の組と「2、1」の組を両方カウントします。'Symmetric'false に設定された場合、'offset' の値に応じて graycomatrix は「1、2」の組と「2、1」の組のどちらか一方だけをカウントします。

例:

データ型: logical

出力引数

すべて折りたたむ

グレー レベルの同時生起行列。double クラスの NumLevels x NumLevels x P の配列として返されます。ここで、POffset のオフセット数です。

GLCM 計算で使用するスケーリングされたイメージ。入力イメージと同じサイズの double 行列として返されます。

アルゴリズム

graycomatrix はスケーリングされたイメージから GLCM を計算します。既定の設定では、I がバイナリ イメージの場合、graycomatrix はイメージを 2 段階のグレーレベルにスケーリングします。I が強度イメージの場合、graycomatrix はイメージを 8 段階のグレーレベルにスケーリングします。graycomatrix でイメージのスケーリングに使用するグレー レベルの段階数を指定するには 'NumLevels' パラメーターを使用します。graycomatrix が値をスケーリングする方法を指定するには 'GrayLimits' パラメーターを使用します。

次の図は graycomatrix が 4 行 5 列イメージ I の GLCM の複数の値を計算する様子を示したものです。GLCM の要素 (1,1) には値 1 が格納されます。これは、水平方向に隣接する 2 つのピクセルに値 11 があるイメージにインスタンスが 1 つしかないからです。GLCM の要素 (1,2) には値 2 が格納されます。これは、水平方向に隣接する 2 つのピクセルが値 12 をもつインスタンスが、イメージ内に 2 つあるからです。graycomatrix は GLCM の値をすべて塗りつぶすまでこの処理を続行します。

ピクセルの組の一方に NaN が格納されている場合、graycomatrix はそのピクセルの組を無視します。また、正の Infs を値 NumLevels に置き換え、負の Infs を値 1 に置き換えます。graycomatrix は対応する近傍ピクセルがイメージ境界の外側にある場合、境界のピクセルを無視します。

'Symmetric'true に設定された場合に作成される GLCM は対角線に対して対称で、Haralick (1973) によって記述された GLCM と等価です。'Symmetric'true に設定された以下の構文で生成される GLCM について考えてみます。

 graycomatrix(I, 'offset', [0 1], 'Symmetric', true)

この GLCM は以下のステートメントによって生成される 2 つの GLCM の和と等価です。ここで、'Symmetric'false に設定されています。

graycomatrix(I, 'offset', [0 1], 'Symmetric', false) 
graycomatrix(I, 'offset', [0 -1], 'Symmetric', false)

参照

[1] Haralick, R.M., K. Shanmugan, and I. Dinstein, "Textural Features for Image Classification", IEEE Transactions on Systems, Man, and Cybernetics, Vol. SMC-3, 1973, pp. 610-621.

[2] Haralick, R.M., and L.G. Shapiro. Computer and Robot Vision: Vol. 1, Addison-Wesley, 1992, p. 459.

R2006a より前に導入

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