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=0∑n−1j=0∑n−1G(i,j)2
Cor=i=0∑n−1j=0∑n−1σiσjG(i,j)[(i−μi)(j−μj)
H=i=0∑n−1j=0∑n−1G(i,j)/(1+(i−j)2)
Con=i=0∑n−1j=0∑n−1G(i,j)(i−j)2
μi=i=0∑n−1j=0∑n−1i∗G(i,j)
μj=i=0∑n−1j=0∑n−1j∗G(i,j)
σi=i=0∑n−1j=0∑n−1G(i,j)(i−μi)2
σj=i=0∑n−1j=0∑n−1G(i,j)(j−μj)2
- E: Energy
- Cor: Correlation
- H: Homogeneity
- Con: Contrast
- G(i,j): 입력 Matrix의 i, j 값
- n: Gray Level
다중 채널의 경우 각 채널에 대하여 측정 값을 얻습니다.
알고리즘 동작 결과 |
 |
Fig. 실행 결과
Energy는 이미지의 균일함을 측정합니다. 이미지가 균일한 경우에는 1을 아닌 경우 1 이하의 값을 반환합니다.
Correlation은 어느 한 픽셀이 이웃 픽셀과의 상관관계가 있는지 측정하는 값입니다. -1에서 1의 값을 가집니다.
Homogeneity는 동질성을 표현하며 높은 경우 1에 가까운 값을 낮은 경우 0에 가까운 값을 반환합니다.
Contrast는 이웃 픽셀 간의 명함 대비를 반환하며 이미지가 균일한 경우 0을 반환합니다.
3 파라미터 설정 및 사용 방법
- 세팅 함수
SetGrayLevel
SetDirection
- Matrix를 구하는 방향을 설정합니다.
EDirection_Degree0
: 0 도
EDirection_Degree45
: 45 도
EDirection_Degree90
: 90 도
EDirection_Degree135
: 135 도
EDirection_Mean
: 모든 모드의 평균
4 예제 코드
CGrayLevelCooccurrenceMatrix grayLevelCooccurrenceMatrix;
CFLImage fliSourceImage;
grayLevelCooccurrenceMatrix.SetSourceImage(fliSourceImage);
int32_t i32GrayLevel;
grayLevelCooccurrenceMatrix.SetGrayLevel(i32GrayLevel);
CGrayLevelCooccurrenceMatrix::EDirection eDirection;
grayLevelCooccurrenceMatrix.SetDirection(eDirection);
grayLevelCooccurrenceMatrix.Execute();
CFLArray<CFLArray<double>> flaEnergy;
grayLevelCooccurrenceMatrix.GetResultEnergy(flaEnergy);
CFLArray<CFLArray<double>> flaCorrelation;
grayLevelCooccurrenceMatrix.GetResultCorrelation(flaCorrelation);
CFLArray<CFLArray<double>> flaHomogeneity;
grayLevelCooccurrenceMatrix.GetResultHomogeneity(flaHomogeneity);
CFLArray<CFLArray<double>> flaContrast;
grayLevelCooccurrenceMatrix.GetResultContrast(flaContrast);
CGrayLevelCooccurrenceMatrix grayLevelCooccurrenceMatrix = new CGrayLevelCooccurrenceMatrix();
CFLImage fliSourceImage = new CFLImage();
grayLevelCooccurrenceMatrix.SetSourceImage(ref fliSourceImage);
int i32GrayLevel;
grayLevelCooccurrenceMatrix.SetGrayLevel(i32GrayLevel);
CGrayLevelCooccurrenceMatrix.EDirection eDirection = new CGrayLevelCooccurrenceMatrix.EDirection();
grayLevelCooccurrenceMatrix.SetDirection(eDirection);
grayLevelCooccurrenceMatrix.Execute();
List<List<double>> flaEnergy = new List<List<double>>();
grayLevelCooccurrenceMatrix.GetResultEnergy(ref flaEnergy);
List<List<double>> flaCorrelation = new List<List<double>>();
grayLevelCooccurrenceMatrix.GetResultCorrelation(ref flaCorrelation);
List<List<double>> flaHomogeneity = new List<List<double>>();
grayLevelCooccurrenceMatrix.GetResultHomogeneity(ref flaHomogeneity);
List<List<double>> flaContrast = new List<List<double>>();
grayLevelCooccurrenceMatrix.GetResultContrast(ref flaContrast);
grayLevelCooccurrenceMatrix = CGrayLevelCooccurrenceMatrix()
fliSourceImage = CFLImage()
grayLevelCooccurrenceMatrix.SetSourceImage(fliSourceImage)
i32GrayLevel = 0
grayLevelCooccurrenceMatrix.SetGrayLevel(i32GrayLevel)
eDirection = CGrayLevelCooccurrenceMatrix.EDirection.Degree0
grayLevelCooccurrenceMatrix.SetDirection(eDirection)
grayLevelCooccurrenceMatrix.Execute()
flaEnergy = List[List[Double]]()
grayLevelCooccurrenceMatrix.GetResultEnergy(flaEnergy)
flaCorrelation = List[List[Double]]()
grayLevelCooccurrenceMatrix.GetResultCorrelation(flaCorrelation)
flaHomogeneity = List[List[Double]]()
grayLevelCooccurrenceMatrix.GetResultHomogeneity(flaHomogeneity)
flaContrast = List[List[Double]]()
grayLevelCooccurrenceMatrix.GetResultContrast(flaContrast)