Main Content

graycomatrix

영상에서 명암도 동시발생 행렬 생성

설명

glcm = graycomatrix(I)는 영상 I에서 명암도 동시발생 행렬(GLCM)을 생성합니다. 명암도 동시발생 행렬의 다른 이름은 공간 명암도 의존 행렬입니다.

graycomatrix는 명암도(회색조 명암) 값 i를 가진 픽셀이 값 j를 가진 픽셀에 가로로 인접하여 나타나는 빈도를 계산하여 GLCM을 생성합니다. (Offsets 이름-값 인수를 사용하여 다른 픽셀 공간 관계를 지정할 수 있습니다.) glcm의 각 요소 (i,j)는 값 i를 가진 픽셀이 값 j를 가진 픽셀에 가로로 인접하여 나타나는 횟수를 지정합니다.

예제

glcm = graycomatrix(I,Name=Value)는 선택적 이름-값 쌍 인수의 값에 따라 하나 또는 그 이상의 명암도 동시발생 행렬을 반환합니다.

예제

[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은 대각선을 기준으로 대칭이며, 이는 1973년 하랄릭(Haralick)이 설명한 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차원 논리형 행렬로 지정됩니다.

이름-값 인수

선택적 인수 쌍을 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개의 동일 너비 Bin으로 나뉘고 하나의 Bin에 속하는 값은 하나의 회색 레벨에 매핑됩니다. 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]입니다. 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로 설정된 경우 graycomatrixOffset의 값에 따라 1,2 또는 2,1만 셉니다.

데이터형: logical

출력 인수

모두 축소

명암도 동시발생 행렬로, NumLevels×NumLevels×P 배열로 반환됩니다. 여기서 POffset의 오프셋 수입니다.

데이터형: double

GLCM 계산에 사용되는 스케일링한 영상으로, 입력 영상과 같은 크기의 숫자형 행렬로 반환됩니다. SI의 값의 범위는 1 ~ NumLevels입니다.

데이터형: double

알고리즘

graycomatrix는 스케일링된 영상에서 GLCM을 계산합니다. 기본적으로, I가 이진 영상이면 graycomatrix는 영상을 두 개의 회색 레벨로 스케일링합니다. I가 명암 영상이면 graycomatrix는 영상을 8개의 회색 레벨로 스케일링합니다. NumLevels 이름-값 인수를 사용하여 graycomatrix가 영상을 스케일링하는 데 사용하는 회색 레벨 수를 지정하고, GrayLimits 이름-값 인수를 사용하여 graycomatrix가 값을 스케일링하는 방법을 지정할 수 있습니다.

다음 그림은 graycomatrix가 4×5 영상 I의 GLCM에 있는 여러 개의 값을 계산하는 방법을 보여줍니다. 영상에서 가로로 인접한 두 픽셀의 값이 11인 경우가 한 번밖에 없기 때문에 GLCM에서 요소 (1,1)의 값은 1이 됩니다. 영상에서 가로로 인접한 두 픽셀의 값이 12인 경우는 두 번이기 때문에 GLCM에서 요소 (1,2)의 값은 2가 됩니다. graycomatrix는 이러한 처리 과정을 계속하여 GLCM의 모든 값을 채웁니다.

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

graycomatrix는 픽셀 쌍 중 하나의 값이 NaN이면 이 픽셀 쌍을 무시하며, 양의 Infs는 값 NumLevels로 바꾸고 음의 Infs는 값 1로 바꿉니다. graycomatrix는 어떤 픽셀의 이웃 픽셀이 영상의 경계 밖에 있으면 이 경계에 있는 픽셀을 무시합니다.

Symmetrictrue로 설정할 경우, 생성되는 GLCM은 대각선을 기준으로 대칭이며, 이는 1973년 하랄릭(Haralick)이 설명한 GLCM과 동일합니다. Symmetrictrue로 설정된 경우, 다음 구문으로 생성되는 GLCM은

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

Symmetricfalse로 설정된 경우에 다음 구문으로 생성되는 두 GLCM의 합과 동일합니다.

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 이전에 개발됨