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...@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.