Multiple Size Zone Matrix (MSZM) is an extension of
Instead of optimizing the number of gray levels N, we propose to construct a multiple scheme with various matrices and then to combine them into a single matrix. The MSZM principle is, for an image of 8 bits, to calculate 8 SZMs for 8 different numbers of gray levels: Nk = 2^k, k = 1, 2, ... 8, and to merge the resulting matrices by a weighted average:

Weights distribution in MSZM is given by a gaussian function centered between N4 = 16 and N5 = 32 gray levels: this distribution penalizes extreme values of the number of gray levels because low levels contain limited structural information and high levels are sensitive to noise. By the way, the weights could be automatically learnt or adapted a priori for a specific application.

For different values of Nk, the matrices have different dimensions. Even if we consider that the size of regions is quantized in the same intervals (same number of columns), the number of rows is equal to Nk. To solve this drawback, we propose to replicate each of the Nk rows in order to finally obtain 256 rows.

From a computational viewpoint, the MSZM requires to fill multiple individual SZM, but it is generally more efficient for texture classification (provides comparable or better results).

On this page is a software to fill the matrix and compute the features.
Do not hesitate to contact me if you need some explanations.

A java source code which fills matrices and computes features, but use the software pointed above for the most up to date version.

BufferedImage image = ... ; // use your reader
MGlszm mglszm = new MGlszm() ;
mglszm.Parameters(nbSizes, FixedSize, reducer, null, ForbiddenValue, EightConnex, nbCPU) ;
mglszm.Compute(vignette, nbCPU) ;
double[] features = mglszm.Features() ;

nbSizes is a coefficient to reduce the size zone. If it is equal to 1, any reduction is done. This reduction reduces the matrix width and improves slightly performances because zones with close sizes are now in the same case.
FixedSize is a variable to know if the matrix must have a fixed size. Empirically, I have never obtained better results with a fixed size, so my advice is to always use this parameter as « false ».
reducer reduces the number of gray level. Use this one.
null. Normally, it could be a leveling in order to transform the texture in flat zones before matrix filling, but it can be null. This reduction could improve results. Contact me if you want code.
ForbiddenValue The value to not take into account during computations. If it is equal to a negative value, the entire texture is process. Caution, that can depend on the class which labels connected component.
EightConnex Is the labeling realized with 8-connexity.
nbCPU is the number of thread to use for processing. As the connected component labeling is not parallelized (not in my library, but maybe algorithms exists), this parameter doesn’t matter and can just be equal to 1.

Here a complete example.

Related publication:

- 1 -
Advanced Statistical Matrices for Texture Characterization: Application to DNA Chromatin and Microtubule Netwok Classification, IEEE ICIP 2012.

- 2 - Advanced Statistical Matrices for Texture Characterization: Application to Cell Classification, IEEE Transaction on BioMedical Engineering 2014.