Is graycomatrix's NumLevels and GrayLimits the same thing MATLAB

277 views Asked by At

Ive been looking at implementing GLCM within MATLAB using graycomatrix. There are two arguments that I have discovered (NumLevels and GrayLimits) but in in my research and implementation they seem to achieve the same result.

GrayLimits specified bins between a range set [low high], causing a restricted set of gray levels.

NumLevels declares the number of gray levels in an image.

Could someone please explain the difference between these two arguments, as I don't understand why there would be two arguments that achieve the same result.

1

There are 1 answers

0
Cris Luengo On BEST ANSWER

From the documentation:

'GrayLimits': Range used scaling input image into gray levels, specified as a two-element vector [low high]. If N is the number of gray levels (see parameter 'NumLevels') to use for scaling, the range [low high] is divided into N equal width bins and values in a bin get mapped to a single gray level.

'NumLevels': Number of gray levels, specified as an integer.

Thus the first parameter sets the input gray level range to be used (defaults to the min and max values in the image), and the second parameter sets the number of unique gray levels considered (and thus the size of the output matrix, defaults to 8, or 2 for binary images).

For example:

>> graycomatrix(img,'NumLevels',8,'GrayLimits',[0,255])
ans =
       17687        1587          81          31           7           0           0           0
        1498        7347        1566         399         105           8           0           0
          62        1690        3891        1546         298          38           1           0
          12         335        1645        4388        1320         145           4           0
           2          76         305        1349        4894         959          18           0
           0          16          40         135         965        7567         415           0
           0           0           0           2          15         421        2410           0
           0           0           0           0           0           0           0           0

>> graycomatrix(img,'NumLevels',8,'GrayLimits',[0,127])
ans =
           1           9           0           0           0           0           0           0
           7       17670        1431         156          50          31          23          15
           1        1369        3765         970         350         142          84          92
           0         128        1037        1575         750         324         169         167
           0          46         361         836        1218         747         335         260
           0          16         163         330         772        1154         741         547
           0          10          74         150         370         787        1353        1208
           0           4          67         136         294         539        1247       21199

>> graycomatrix(img,'NumLevels',4,'GrayLimits',[0,255])
ans =
       28119        2077         120           0
        2099       11470        1801           5
          94        1829       14385         433
           0           2         436        2410

As you can see, these parameters modify the output in different ways:

  1. In the first case above, the range [0,255] was mapped to columns/rows 1-8, putting 32 different input grey values into each.
  2. In the second case, the smaller range [0,127] was mapped to 8 indices, putting 16 different input grey values into each, and putting the remaining grey values 128-255 into the 8th index.
  3. In the third case, the range [0,255] was mapped to 4 indices, putting 64 different input grey values into each.