version 1.3.1.0 (3.75 KB) by
Rune Monzel

This function calculates all Haralick Features in an effective way without for-loops.

It only uses matrix products and makes calculating the GLCM fast. In version 1.x are only two foor-loops.

For better legacy you decide with the optional variable xFeature which Haralick Feature you want use.

All Haralick Features were take from the original paper. See (http://haralick.org/journals/TexturalFeatures.pdf) for more information.

Rune Monzel (2020). haralickTextureFeatures (https://www.mathworks.com/matlabcentral/fileexchange/58769-haralicktexturefeatures), MATLAB Central File Exchange. Retrieved .

Created with
R2006a

Compatible with any release

**Inspired by:**
STATISTICAL MEASURES OF TEXTURE IN AN IMAGE, GLCM texture features

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

Start Hunting!Create scripts with code, output, and formatted text in a single executable document.

Basim KhalidHi

i am trying to calculate Haralic features so i download this file and just changed the image name , i have got many of errors can anyone help me please

Error using graycomatrix

Expected input number 1, I, to be two-dimensional.

Error in graycomatrix>ParseInputs (line 260)

validateattributes(I,{'logical','numeric'},{'2d','real','nonsparse'}, ...

Error in graycomatrix (line 167)

[I, Offset, NL, GL, makeSymmetric] = ParseInputs(varargin{:});

Error in haralickTextureFeatures (line 46)

glcm = graycomatrix(I, 'offset', [0 1], 'Symmetric', true);

>>

Rune MonzelHi Mohamad Ahmad,

please take a look into the original paper of Haralick (http://haralick.org/journals/TexturalFeatures.pdf), page 10 of 12, equation 4) describes the Variance. The equation 4) consists of (i - μ). i describes the row entry. μ describes the mean of the gray level co occurrence matrix.

MOHAMAD AHMADThank you for the function, super helpful!

It's already almost 2 years old, but I noticed that you take, for the Variance, a normal mean. Should this not be a row or column mean?

Rune MonzelHi Rehan,

their mathematical formulae be found here: https://de.mathworks.com/help/images/ref/graycoprops.html

A good and short description can be found here: https://de.mathworks.com/help/images/texture-analysis-using-the-gray-level-co-occurrence-matrix-glcm.html

If you want more information about correlation and homogenity, you should read the original texture feature paper by Haralick (see link in my source code) and further literature. It is very important to understand the principle of a gray level occurence matrix before starting to understand the Textural Feaeture.

It should be noticed that the haralick features provides features which "measures" a structure, so different structures can be seperated by algorithms like a support vector machine.

REHAN AHMADHi Rune

Hope you are fine.

Many thanks for code on GLCM. Can you please send some information about below two features

correlationmatlab (corrm)

homogeneitymatlab (homom)

Please do send info on these two features, like what they signify, their mathematical formulae, and some other relevant information.

Please do reply.

Thanks.

Take care.

Rune MonzelHi Mobin Mhb,

the problem is in the definition of the Haralick Features "Correlation" and "Information Measures of Correlation I": Calculating those equations with a zero matrix leads to a divison 0 with 0 and is mathematically not allowed. This leads in Matlab to "NaN" ("Not a Number").

It does not look like I have an error in my code. My code just returns those NaNs.

It guess you are using just Haralick Features which are not 0!? Thus you may be add this line after the feature extraction:

x = haralickTextureFeatures(glcm); % feature extraction

x(isnan(x)) = 0; % all NaNs to zero

I hope this will help you.

Mobin Mhbhi

i need to use haralick for an image , but i have to define 5*5 mask and then use haralickTextureFeature function . but some of 5*5 mask has zero value and i got error "NaN's cannot be converted to logicals." how can i fix this??

Rune MonzelHi Rekha Ajithadoss,

the function has already an example.

I need further information of the Matlab Error: the Error in Line 278 is not specified.

Example (commented in function):

%Load an image of Matlab

I = imread('circuit.tif');

%Get the co occurence matrix (in Matlab called GLCM: Gray Level Co

%Occurence Matrix)

glcm = graycomatrix(I, 'offset', [0 1], 'Symmetric', true);

%calculate feature 4 (Variance), 5 (Inverse Difference Moment) and 6

%(Sum Average)

xFeatures = 4:6;

x = haralickTextureFeatures(glcm, xFeatures );

%Get only the features you want

x = x( xFeatures )

% Calculate all features

xall = haralickTextureFeatures(glcm)

Rekha AjithadossError in haralickTextureFeatures (line 278)

for i = 1 : sizecoOcMat(2)

Q(i,:) = sum( ...

(repmat(coOcMat(i,:),sizecoOcMat(1),1) .* coOcMat ) ./ ...

repmat( rowCoOcMat(i) .* colCoOcMat, sizecoOcMat(1),1),...

2,'omitnan');

end

please give an example to clear this error

Rune Monzelthank you very much for your comment lingxuan kong, it is now fixed

lingxuan konghey, your code is awesome, but some mistakes here:

case7:

x(7) = sum( ((2:(2*sizecoOcMat(1)))' -...

x(8)).^2 .* p_XplusY );

should be x(8) not x(12).

Javaid IqbalSave feature values in the form of .mat and than save into another format, it's working.

Anjali AcharyaI used this function to extract 14 Glcm features and while I try to copy values from matlab to excel file I get some of the values in the form ##### for variance, sum average, sum variance and entropy

What is wrong with this?

Samar QassirHi Rune

thanks for your your code, please i send you email can you answer me

Rune MonzelHi Javaid,

use the "save" function from Matlab, use my example and then type in command line:

save( 'haralickFeatures.mat', 'x');

Take a look into the Matlab documentation, it is very helpful:

mathworks.com/help/matlab/ref/save.html

Javaid IqbalHow can we save these feature values in the .mat file using MATLAB?

nie weigood resources

Javaid IqbalHi Rune Monzel

Thanks for helping I try this and working good. :)

Rune MonzelHi Javaid,

can you send me your code so I can check this? (runemonzel@googlemail.com) For me it seems like you are not using the function correctly and give wrong inputs into the function. Try the example which is also written in the function description, it will work and maybe you will get an understanding of using the function:

%Load an image of Matlab

I = imread('circuit.tif');

%Get the co occurence matrix (in Matlab called GLCM: Gray Level Co

%Occurence Matrix)

glcm = graycomatrix(I, 'offset', [0 1], 'Symmetric', true);

%calculate feature 4 (Variance), 5 (Inverse Difference Moment) and 6

%(Sum Average)

xFeatures = 4:6;

x = haralickTextureFeatures(glcm, xFeatures);

%Get only the features you want

x = x( xFeatures )

Javaid IqbalHanbrot

this is my email please send your code

javaid.ciit@gmail.com

Javaid IqbalNot enough input arguments.

Error in haralickTextureFeatures (line 77)

if ~(ismatrix(coOcMat))

77 if ~(ismatrix(coOcMat))

I found this error during executing this given code please help me how to resolve it

HanbrotActually I had debug it earlier and i find what the problem is. I can send you my code and explain my problem. I couldnot identify why is this happening. either because of the values in the glcm or something else. can I have your email please to connect with you?

Javaid Iqbalwhich steps required to run this function in MATLAB please tell me

Thanks

Rune MonzelThere are two possibilities: Either eigenvec is an empty array or eigenvec is a matrix. I do not find any explanation why the variable "eigenvec" is empty or a matrix.

I appreciate it, if you write me a private message with your code or if you would debug the code for yourself and see whats happening so that I can fix this in a newer version.

HanbrotIn an assignment A(:) = B, the number of elements in A and B must be the same.

Error in haralickTextureFeatures (line 273)

x(14) = sqrt( max(eigenvec) );

I am getting this error while finding harlick features for every pixel in the image.

Rune MonzelHi Chinmay Jog,

there may are severel reasons for this behavior.

Please first check, if your input texture ("inputTexture") has any NaNs:

sum( isnan( inputTexture(:) ) ) > 0

If yes ("1") you should try to fix this (for example setting all NaNs to zero: inputTexture( isnan(inputTexture) ) = 0;).

Also you can check if the following happens (source: https://de.mathworks.com/help/matlab/ref/nan.html):

- Any arithmetic operation on a NaN, such as sqrt(NaN)

- Addition or subtraction, such as magnitude subtraction of infinities as (+Inf)+(-Inf)

- Multiplication, such as 0*Inf

- Division, such as 0/0 and Inf/Inf

- Remainder, such as rem(x,y) where y is zero or x is infinity

I reviewed my code again and I do not think, that the NaNs are results of x3 calculations. If you still have problems, I would appreciate it, if you give me one of your texture images so I can check this.

Chinmay JogHello,

x3 correlation value is coming out NaN for some rough texture images. Why so?

Rune Monzel@Jihang Wang:

Yes, it is slightly different because of the zero cut out technique: log2(0) leads to -inf, this is the reason why I just use values which are not 0. Another possibillity would be using the smallest number in Matlab: eps, which leads to log2(eps)=-52. However, I decided to cut it out instead of using the smallest number.

@Ihsan Yassin:

The difference between correlation I and correlation II is shown in the Haralick paper: f12 and f13.

@Yuzhen Lu:

Please note that the code fits to Haralick original paper, which I used to program the code. I did not noticed that there is new literature which corrected the error in the paper. Changing the code would be lead to missunderstanding and would change the results of scripts.

Thank you for your comments.

Jihang WangYuzhen Lu, I think the code for calculating f4 sum of squares is correct. I have compared the output of this code with other code and it should be Ok. However, the output for entropy looks slightly different, I guess the reason is the zero cut technique using in the code?

Ihsan Yassinwhat is information measure of correlation I and II actually?what's the difference?

Yuzhen LuIt should be pointed out that in calculating f7 (sum variance), the original paper incorrectly use f8 in the definition, which should be f6. This is an error that has been recognized in the literature.

Yuzhen LuIn calculating f4, the mean value is not well defined the original paper, but it should be not calculated in that way in the code

Yuzhen Luworks fine with Matlab 2016b

Dominique KATALAI've found the solution. I was using MATLAB R2016a but when I tried the same function on R2016b it worked. Maybe there are some problems about compatibility. Thanks!

Dominique KATALAI can't use it as a normal function. When I try, I recieve the parse error message. I can't even try the given example. Thank you!

Rune MonzelFixed the problems Ihsan Yassin and Nicolas Yu reported in version 1.0.

Thank you both.

New version is 1.1.

Rune MonzelThank you very much for your feedbacks!

I am going to upload a new version 2.0 with the fixes. Please give me time for fixing also the coOcMat size problem (comment 27.12.2016).

Thank you!

KrisztiánIhsan Yassinfound the solution,I just removed 'if..end' command at line 175 and 178 only.worked fine if you want to observe all features,but if need only x12,that ''if..end''need to be removed.

Ihsan YassinHi, thanks for the code.helped me a lot. Just recently, I need to analyse the features one-by-one.The results seem fine from x1 to x11.but when I picked x12,all of the calculated values are -2.0000 only.but when when I picked all features(x1:14),the values for x12 are different.Why is this happen?

Nicolas YuCode is wrong here "Error in haralickTextureFeatures (line 68)

rowMean = sum( row(:).*coOcMat(:) );". The row(:) is [8 8], while coOcMat is [8 8 4]. The dimension is mismatched.

Rune MonzelHi Diana,

use this code as a normal function.

Inputs of the function:

% input: coOcMat - Co-Occurence-Matrix. see matlab documentation glcm

% xFeatures (optional) - Feature, which should be

% calculated

example for a function call is:

x = haralickTextureFeatures(glcm);

If you got any errors in the function itselfs please let me now.

Diana RahimHi good source a newbie like me.

Since I'm new in Matlab programming

How can I run this code successfully?

Rune MonzelThere is no value glcmin and pairs.

GLCM is just a graylevelcooccurence matrix. You can also use another channel, this is why I call it coOcMa (co-Occurence-Matrix).

The coOcMa should be calculated with the matlab function graycomatrix option 'symmetric' set to 'true'.

Medical Imagingwhat should be the value of glcmin,pairs in this code?