Roiei 2023. 9. 6. 15:50
반응형

픽셀간의 값의 빈도를 계산한 matrix 입니다. (즉, histogram)

 

아래 page에 들어가면 간단한 sample을 볼 수 있습니다. 

https://scikit-image.org/docs/stable/api/skimage.feature.html#skimage.feature.graycomatrix

 

skimage.feature — skimage 0.21.0 documentation

[2] Oren, M., Papageorgiou, C., Sinha, P., Osuna, E., & Poggio, T. (1997, June). Pedestrian detection using wavelet templates. In Computer Vision and Pattern Recognition, 1997. Proceedings., 1997 IEEE Computer Society Conference on (pp. 193-199). IEEE. htt

scikit-image.org

다음과 같은 sample에 대해서 sklearn package가 제공하는 함수를 통해 glcm을 계산합니다.

image = np.array([[0, 0, 1, 1],
                  [0, 0, 1, 1],
                  [0, 2, 2, 2],
                  [2, 2, 3, 3]], dtype=np.uint8)
result = graycomatrix(image, [1], [0, np.pi/4, np.pi/2, 3*np.pi/4],
                      levels=4)

설정된 parameter에 대한 설명은 다음과 같습니다. 

  • image: 입력 이미지이며 2차원의 shape을 지닌 numpy array 입니다.
  • 두번째 인자 [1]은 distance를 의미합니다. 두개의 pixel을 pick 할 때 1은 바로 1칸 옆 즉, 서로 붙은 두 개의 pixel을 가지고 계산하는 것을 의미합니다. [2]인 경우 한칸 띄우고 두 개의 pixel로 계산합니다.
  • [0, np.pi/4, ...] 이는 angle(theta를 의미합니다) 0도인 경우 바로 우측이며, 90은 바로 아래의 값을 취하는 것을 의미합니다.
  • levels=4는 입력 image 내 각 pixel의 값이 0에서 3까지의 값 만을 지니는 것을 의미합니다.
  • 즉, levels의 값의 크기에 따라 결과 histogram matrix의 크기 (levels x levels)가 결정됩니다. 
    • 위의 예에서는 levels에 4의 값을 설정하고 있기에 결과 matrix의 크기는 4x4가 됩니다. 

 

angle이 0인 경우의 결과는 다음과 같습니다. 

result[:, :, 0, 0]
array([[2, 2, 1, 0],
       [0, 2, 0, 0],
       [0, 0, 3, 1],
       [0, 0, 0, 1]], dtype=uint32)

위와 같이 결과가 나온 과정을 그림을 통해서 샆펴보겠습니다. (간단한 과정이므로 추가적인 설명없이 그림을 통해서 충분히 이해 가능할 것 입니다)

 

우선 다음과 같이 결과를 저장할 2차원 matrix (for histogram)을 준비합니다. 

이제 처음 2개의 값 부터 마지막 값 까지 2-sized moving window를 이동해 가면서 값의 빈도를 계산해 보겠습니다. 

 

 

 

반응형