Borrar filtros
Borrar filtros

How to normalize GLCMs created for four offsets?

12 visualizaciones (últimos 30 días)
Mohammad Farhad Aryan
Mohammad Farhad Aryan el 22 de Mzo. de 2020
Comentada: nissrine Neyy el 23 de Jun. de 2022
I am using Matlab 2019b to extract texture features of images using gray level co-occurrence matrix (glcm). I have written the following code to extract rotation invariant features with directions 0, 45, 90, 135. The code creates four glcms and every feature has four values; one per direction.
I = imread('test.jpg')
offsets = [0 1; -1 1;-1 0;-1 -1];
glcm = graycomatrix(I, 'GrayLimits', [], 'Offset',offsets);
stats = graycoprops(glcm);
I want to normalize the glcms then extract each feature from the normalized glcms.
Any help is greatly appreciated.
  2 comentarios
Image Analyst
Image Analyst el 22 de Mzo. de 2020
Not sure what you want. Do you just want this
glcm = glcm / sum(glcm(:));
or
glcm = glcm / max(glcm(:));
or
glcm = rescale(glcm, 0, 1);
Mohammad Farhad Aryan
Mohammad Farhad Aryan el 23 de Mzo. de 2020
Editada: Mohammad Farhad Aryan el 24 de Mzo. de 2020
Thank you Image Analyst for your quick reply.
Actually some papers used normalized and unnormalized glcms for texture analysis and showed that normalized glcm outperformed unnormalized glcm. So I want to practise both and compare the result.
I was able to normalize glcms created for each direction (0, 45, 90, 135) but when I pass the resultant glcms to the function graycoprops, it produces error saying 'Expected input number 1, GLCM, to be integer-valued'.
This is the code I used:
offsets = [0 1; -1 1;-1 0;-1 -1];
glcm1 = graycomatrix(rgb2gray(mskRgbImg), 'GrayLimits', [], 'Offset',offsets);
size_glcm_3 = size(glcm1,3);
for k = 1:size_glcm_3
glcm_sum(k) = sum(sum(glcm1(:,:,k)));
glcm(:,:,k) = glcm1(:,:,k)./glcm_sum(k); % Normalize each glcm
end
stats = graycoprops(glcm);
Help me please!

Iniciar sesión para comentar.

Respuestas (2)

Image Analyst
Image Analyst el 24 de Mzo. de 2020
Regarding your last comment above . . .It told you it's not integer and it needs integer. So, cast it to integer:
uint8Image = uint8(rescale(rgb2gray(mskRgbImg), 0, 255));
Then pass that into graycomatrix().
See my attached glcm demo.
  3 comentarios
Image Analyst
Image Analyst el 25 de Mzo. de 2020
So don't normalize it. Why do you think each should be normalized? If each is normalized independently then how can you compare them?
Mohammad Farhad Aryan
Mohammad Farhad Aryan el 25 de Mzo. de 2020
Based on literature review which I have done, some papers used normalized and unnormalized glcms and compared the results of classification using these glcms. Therefore, I wanted to use normalized and unnormalized glcms for texture features extraction and compare the results of classification using each of these glcms.
The following file normalized each glcm but calculated texture features using equations not via graycoprops() function.
Thanks

Iniciar sesión para comentar.


Hend Abouche
Hend Abouche el 8 de Abr. de 2022
Editada: Image Analyst el 8 de Abr. de 2022
Hello, I am working on texture features extraction and I want to ask you why you didn't use just the function graycomatrix in a simple way, but you used the offset. Did you do it so you can specify the pixels that you want to calculate their co-occurrence?
  5 comentarios
Hend Abouche
Hend Abouche el 9 de Abr. de 2022
So I did, thank you so much for ur time
nissrine Neyy
nissrine Neyy el 23 de Jun. de 2022
Hi @Image Analyst, i have a question in the same context, what's the difference between using symmetric and not (set it to false or true), i know how it works but in term of results which is better and what does it give or add as an information ?

Iniciar sesión para comentar.

Productos


Versión

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by