GLCM with scikit-image

Neil yager.neil at gmail.com
Mon Jul 8 09:21:38 EDT 2013


I wouldn't worry too much about the warning. Whenever you convert an image 
from floating point (64 bits per pixel) to bytes (8 bits per pixel), there 
may be a loss of precision.

The lines:

im = skimage.img_as_ubyte(im)
im /= 32

are just a quick way to scale the pixel intensities to have 8 different 
levels. The first step converts the image from floats to bytes (this is 
where you get the warning). We now have an image with 256 levels (from 0 to 
255). After dividing by 32, there are only 8 possible levels (from 0 to 7). 
It is likely that matlab use a different procedure for converting from a 
floating point image to an image with only 8 levels.

The [0][0] is to specify which offset you want. The first 0 gives the index 
for the distances, and the second is the index for the angles. In this 
example, we are only computing one offset (distance=1 and angle=0). 
However, in many real-life applications you will want to compute the 
statistics for a number of offsets to capture differences in scale and 
orientation.

Neil

On Monday, 8 July 2013 14:00:11 UTC+1, ely... at mail.com wrote:
>
> Hi,
>
> Thanks a lot for the reply.
>
> Indeed graycoprops normalizes the gray-level co-occurrence matrix:
>
> “graycoprops normalizes the gray-level co-occurrence matrix (GLCM) so that 
> the sum of its elements is equal to 1. Each element (r,c) in the normalized 
> GLCM is the joint probability occurrence of pixel pairs with a defined 
> spatial relationship having gray level values r and c in the image. 
> graycoprops uses the normalized GLCM to calculate properties.” (
> http://www.mathworks.co.uk/help/images/ref/graycoprops.html)
>
> The modified script:
> import skimage
>
> from skimage.io import imread
> from skimage.feature import greycomatrix
> from skimage.feature import greycoprops
>
> im = imread('C:/Users/Asher_dell/Desktop/ImgTemp/python.jpg', as_grey=True)
>
> im = skimage.img_as_ubyte(im)
> im /= 32
> g = skimage.feature.greycomatrix(im, [1], [0], levels=8, symmetric=False, 
> normed=True)
>
> contrast= skimage.feature.greycoprops(g, 'contrast')[0][0]
> energy= skimage.feature.greycoprops(g, 'energy')[0][0]
> homogeneity= skimage.feature.greycoprops(g, 'homogeneity')[0][0]
> correlation=skimage.feature.greycoprops(g, 'correlation')[0][0]
> dissimilarity=skimage.feature.greycoprops(g, 'dissimilarity')[0][0]
> ASM=skimage.feature.greycoprops(g, 'ASM')[0][0]
>
>
> print('contrast is: ', contrast)
> print('energy is: ', energy)
> print('homogeneity is: ', homogeneity)
> print('correlation is: ', correlation)
> print('dissimilarity is: ', dissimilarity)
> print('ASM is: ', ASM)
>
>
> Output:
> skimage.dtype_converter: WARNING: Possible precision loss when converting 
> from float64 to uint8
> contrast is:  0.301542207792
> energy is:  0.29069020973
> homogeneity is:  0.883463991917
> correlation is:  0.971624675221
> dissimilarity is:  0.243464091878
> ASM is:  0.0845007980331
>
> Based on the output I have few more questions on the modified script:
> - Does the "skimage.dtype_converter: WARNING: Possible precision loss when 
> converting from float64 to uint8" means that the output values are wrong?
> - Can you please explain me why you use these lines:
>
> im = skimage.img_as_ubyte(im)
> im /= 32
> - Why do you use the [0][0] when you call skimage.feature.greycoprops 
> (e.g.,skimage.feature.greycoprops(g, 'contrast')[0][0])?
>
> Thanks a lot again.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/scikit-image/attachments/20130708/557bf2a5/attachment.html>


More information about the scikit-image mailing list