Gray Level Co-occurrence Matrix

1 개요

이미지 Gray Level Co-occurrence Matrix의 통계적 측정 값을 구하는 알고리즘입니다.

2 알고리즘 상세 설명

입력된 이미지의 Gray Level Co-occurrence Matrix를 생성한 후 해당 Matrix의 Energy, Correlation, Homogeneity, Contrast를 구합니다.

Gray Level Co-occurrence Matrix를 구하는 방향은 0, 45, 90, 135, Mean이 지원되며 Mean의 경우 나머지 4개의 방향의 합을 평균한 값이 됩니다.

알고리즘 입력 방향
입력


Matrix의 통계적 측정 값을 구하는 식은 다음과 같습니다.

E=i=0n1j=0n1G(i,j)2E = \sum_{i=0}^{n-1} \sum_{j=0}^{n-1} G(i, j)^2

Cor=i=0n1j=0n1G(i,j)[(iμi)(jμj)σiσjCor = \sum_{i=0}^{n-1} \sum_{j=0}^{n-1} \frac{G(i, j)[(i - \mu_i)(j - \mu_j)}{\sigma_i\sigma_j}

H=i=0n1j=0n1G(i,j)/(1+(ij)2)H = \sum_{i=0}^{n-1} \sum_{j=0}^{n-1} G(i, j)/(1 + (i - j)^2)

Con=i=0n1j=0n1G(i,j)(ij)2Con = \sum_{i=0}^{n-1} \sum_{j=0}^{n-1} G(i, j)(i - j)^2

μi=i=0n1j=0n1iG(i,j)\mu_i = \sum_{i=0}^{n-1} \sum_{j=0}^{n-1} i*G(i, j)

μj=i=0n1j=0n1jG(i,j)\mu_j = \sum_{i=0}^{n-1} \sum_{j=0}^{n-1} j*G(i, j)

σi=i=0n1j=0n1G(i,j)(iμi)2\sigma_i = \sum_{i=0}^{n-1} \sum_{j=0}^{n-1} G(i, j)(i - \mu_i)^2

σj=i=0n1j=0n1G(i,j)(jμj)2\sigma_j = \sum_{i=0}^{n-1} \sum_{j=0}^{n-1} G(i, j)(j - \mu_j)^2

다중 채널의 경우 각 채널에 대하여 측정 값을 얻습니다.

알고리즘 동작 결과
입력
Fig. 실행 결과

Energy는 이미지의 균일함을 측정합니다. 이미지가 균일한 경우에는 1을 아닌 경우 1 이하의 값을 반환합니다.

Correlation은 어느 한 픽셀이 이웃 픽셀과의 상관관계가 있는지 측정하는 값입니다. -1에서 1의 값을 가집니다.

Homogeneity는 동질성을 표현하며 높은 경우 1에 가까운 값을 낮은 경우 0에 가까운 값을 반환합니다.

Contrast는 이웃 픽셀 간의 명함 대비를 반환하며 이미지가 균일한 경우 0을 반환합니다.

3 파라미터 설정 및 사용 방법

4 예제 코드

\n\n$1
// 알고리즘 객체 생성합니다.
CGrayLevelCooccurrenceMatrix GLCM;

// 이미지를 입력합니다.
CFLImage fliSourceImage;
GLCM.SetSourceImage(fliSourceImage);

// Gray Level 설정
int32_t i32GrayLevel;
GLCM.SetGrayLevel(i32GrayLevel);

// Matrix를 구하는 방향을 설정
CGrayLevelCooccurrenceMatrix::EDirection eDirection;
GLCM.SetDirection(eDirection);

// 알고리즘 실행
GLCM.Execute();

// Energy 반환
CFLArray<CFLArray<double>> flaEnergy;
GLCM.GetResultEnergy(flaEnergy);

// Correlation 반환
CFLArray<CFLArray<double>> flaCorrelation;
GLCM.GetResultCorrelation(flaCorrelation);

// Homogeneity 반환
CFLArray<CFLArray<double>> flaHomogeneity;
GLCM.GetResultHomogeneity(flaHomogeneity);

// Contrast 반환
CFLArray<CFLArray<double>> flaContrast;
GLCM.GetResultContrast(flaContrast);
\n\n$1csharp
// 알고리즘 객체 생성합니다.
CGrayLevelCooccurrenceMatrix GLCM = new CGrayLevelCooccurrenceMatrix();

// 이미지를 입력합니다.
CFLImage fliSourceImage = new CFLImage();
GLCM.SetSourceImage(ref fliSourceImage);

// Gray Level 설정
int i32GrayLevel;
GLCM.SetGrayLevel(i32GrayLevel);

// Matrix를 구하는 방향을 설정
CGrayLevelCooccurrenceMatrix.EDirection eDirection;
GLCM.SetDirection(eDirection);

// 알고리즘 실행
GLCM.Execute();

// Energy 반환
List<List<double>> flaEnergy = new List<List<double>>();
GLCM.GetResultEnergy(out flaEnergy);

// Correlation 반환
List<List<double>> flaCorrelation = new List<List<double>>();
GLCM.GetResultCorrelation(out flaCorrelation);

// Homogeneity 반환
List<List<double>> flaHomogeneity = new List<List<double>>();
GLCM.GetResultHomogeneity(out flaHomogeneity);

// Contrast 반환
List<List<double>> flaContrast = new List<List<double>>();
GLCM.GetResultContrast(out flaContrast);