Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

graycomatrix

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

説明

glcm = graycomatrix(I) は、イメージ I からグレーレベルの同時生起行列 (GLCM) を作成します。グレー レベルの同時生起行列の別名は、"グレー レベルの空間依存行列" です。

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

glcm = graycomatrix(I,Name=Value) はオプションの名前と値の引数の値に応じて 1 つ以上のグレーレベルの同時生起行列を返します。

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

すべて折りたたむ

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

I = imread('circuit.tif');
imshow(I)

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

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

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

       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 = 3×6

     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 = 9×9

     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 = 3×6

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

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

I = imread('cell.tif');
imshow(I)

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

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

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

GLCM を計算すると共にスケーリングされたイメージも返します。スケーリングされたイメージを表示します。[0, 1] の範囲に収まるようにデータ値のスケーリングを再実行します。

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

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

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');
imshow(I)

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

Symmetric オプションで GLCM を計算すると共にスケーリングされたイメージも返します。Symmetrictrue に設定された場合に作成される GLCM は対角線に対して対称で、Haralick (1973) によって記述された GLCM と等価です。

[glcm,SI] = graycomatrix(I,'Offset',[2 0],'Symmetric',true);
glcm
glcm = 8×8

       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

スケーリングされたイメージを表示します。[0, 1] の範囲に収まるようにデータ値のスケーリングを再実行します。

imshow(rescale(SI))

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

入力引数

すべて折りたたむ

入力イメージ。2 次元数値行列または 2 次元 logical 行列として指定します。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: glcm = graycomatrix(I,Offset=[2 0]) は、行のオフセットとして 2、列のオフセットとして 0 を指定します。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: glcm = graycomatrix(I,"Offset",[2 0]) は、行のオフセットとして 2、列のオフセットとして 0 を指定します。

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

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

対象となるピクセルとその近傍との間の距離。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]

Each row of the offset array indicates the horizontal and vertical offset from the center pixel, respectively.

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

データ型: logical

出力引数

すべて折りたたむ

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

データ型: double

GLCM 計算で使用するスケーリングされたイメージ。入力イメージと同じサイズの数値行列として返されます。SI の値は 1NumLevels になります。

データ型: 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 の値をすべて埋めるまでこの処理を続行します。

Mapping between three pairs of pixels in an image and the corresponding elements of the GLCM

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

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

 graycomatrix(I,Offset=[0 1],Symmetric=true)

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

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 より前に導入