We have seen how to generate the GLCM matrix and as a continuation, we will focus on the different measures
that can be obtained from the GLCM matrix. These measures are broadly
classified into three different groups.
Contrast
Group:
- Contrast
(Con)
- Dissimilarity
(Diss)
- Homogeneity
(Hom)
Orderliness Group:
- Angular
Second Moment (Asm)
- Maximum
Probability (Max)
- Entropy
(Entropy)
Statistics Group:
- GLCM
Mean
- GLCM
Variance
- GLCM
Correlation
GLCM matrix contains the number of occurrences of two
grey levels and let’s perform normalization to measure the probability of occurrence
of these two pixels.
NORMALIZATION:
Divide the GLCM matrix by total counts of the pixel occurrences.
Sum of the values in GLCM matrix = 20
MATLAB
CODE:
GProb = glcm./sum(glcm(:));
MATLAB
CODE:
%INITIALIZE THE VARIABLES
Con=0;
Diss=0;
Hom=0;
Asm=0;
Meanx=0;
Meany=0;
Varx=0;
Vary=0;
GLCMCorrelation=0;
%NORMALIZATION
GProb = glcm./sum(glcm(:));
for i = 1:size(glcm,1)
for j = 1:size(glcm,2)
ij = (i-j);
Con = Con +(GProb(i,j).*(ij).^2);
Diss = Diss +(GProb(i,j).*abs(ij));
Hom = Hom +(GProb(i,j)/(1 + ij * ij));
Asm = Asm+(GProb(i,j).^2);
Meanx = Meanx + (GProb(i,j)*i);
Meany = Meany + (GProb(i,j)*j);
end
end
Energy = sqrt(Asm);
MaxGLCM = max(GProb(:));
Entropy = sum(-GProb .*
log10(GProb+0.00001));
CG=sprintf("Contrast Group:\nContrast:%f\nDissimilarity:%f\nHomogeneity:%f\n",Con,Diss,Hom);
OG=sprintf("Orderliness Group:\nAngular Second Moment :%f\nMax Probability:%f\nEntropy:%f\nEnergy:%f\n",Asm,MaxGLCM,Entropy,Energy);
display(CG);
display(OG);
MATLAB CODE:
GLCMMean = (Meanx+Meany)/2;
%COMPUTE VARIANCE
for i = 1:size(glcm,1)
for j = 1:size(glcm,2)
Varx = Varx+(GProb(i,j)*(i-Meanx).^2);
Vary = Vary+(GProb(i,j)*(j-Meany).^2);
end
end
GLCMVar = (Varx+Vary)/2;
%COMPUTE CORRELATION
for i = 1:size(glcm,1)
for j = 1:size(glcm,2)
GLCMCorrelation = GLCMCorrelation
+(GProb(i,j)*(i-Meanx)*(j-Meany)/sqrt(Varx*Vary));
end
end
SG=sprintf("Statistics
Group:\nGLCM Mean:%f\nGLCM Variance:%f\nGLCM Correlation:%f\n",GLCMMean,GLCMVar,GLCMCorrelation);
display(SG);
EXPLANATION:
The above listed measures are computed on the
normalized GLCM matrix.
MATLAB
CODE:
A = imread('cameraman.tif');
%OFFSET AND DIRECTION
Displacementx = -1;
Displacementy = 1;
As = (A-min(A(:)))+1;
NumQuantLevels = max(As(:));
glcm =
zeros([NumQuantLevels,NumQuantLevels]);
if ( Displacementx < 0 )
sx=abs(Displacementx)+1;
ex=size(As,1);
else
sx=1;
ex=size(As,1)-Displacementx;
end
if ( Displacementy < 0 )
sy=abs(Displacementy)+1;
ey=size(As,2);
else
sy=1;
ey =size(As,2)-Displacementy;
end
for i=sx:ex
for j=sy:ey
glcm(As(i,j),As(i+(1*Displacementx),j+(1*Displacementy)))=glcm(As(i,j),As(i+(1*Displacementx),j+(1*Displacementy)))+1;
end
end
GLCMProb = glcm./sum(glcm(:));
[jj,ii]=meshgrid(1:size(glcm,1),1:size(glcm,2));
ij=ii-jj;
Con =
sum(sum(GLCMProb.*(ij).^2));
Diss =
sum(sum(GLCMProb.*abs(ij)));
Hom =
sum(sum(GLCMProb./(1+(ij).^2)));
Asm = sum(sum(GLCMProb.^2));
Meanx =
sum(sum(GLCMProb.*ii));
Meany = sum(sum(GLCMProb.*jj));
Energy = sqrt(Asm);
MaxGLCM = max(GLCMProb(:));
Entropy = sum(sum(-GLCMProb .*
log10(GLCMProb+0.00001)));
GLCMMean = (Meanx+Meany)/2;
Varx =
sum(sum(GLCMProb.*(ii-Meanx).^2));
Vary =
sum(sum(GLCMProb.*(jj-Meany).^2));
GLCMVar = (Varx+Vary)/2;
GLCMCorrelation =
sum(sum(GLCMProb.*(ii-Meanx).*(jj-Meany)/sqrt(Varx*Vary)));
CG=sprintf("Contrast
Group:\nContrast:%f\nDissimilarity:%f\nHomogeneity:%f\n",Con,Diss,Hom);
OG=sprintf("Orderliness
Group:\nAngular Second Moment :%f\nMax
Probability:%f\nEntropy:%f\nEnergy:%f\n",Asm,MaxGLCM,Entropy,Energy);
SG=sprintf("Statistics
Group:\nGLCM Mean:%f\nGLCM Variance:%f\nGLCM Correlation:%f\n",GLCMMean,GLCMVar,GLCMCorrelation);
display(CG);
display(OG);
display(SG);
EXPLANATION:
The above code works also for the diagonal directions.
In this example, the diagonal direction
45 is considered with displacement of 1 pixel. The minimum value of the chosen example
image, ‘cameraman.tif’ is 7 and maximum is 253 and it is scaled between 1 and
247. The quantization level is chosen as 247 so the GLCM matrix will be of size
247x247.
NOTE:
· Some
of the measures obtained will be different from the computing using ‘graycoprops’
in MATLAB due to some difference in the equations adopted. For more reference,
cross check with the MATLAB documentation
· The
input image or matrix is scaled between 1 and the maximum pixel value of the image.
And the Quantization level is set based on it.