如何在python中使用scikit-image greycomatrix()-函数?

时间:2019-04-23 10:28:07

标签: python numpy python-imaging-library scikit-image glcm

我正在尝试从图像中计算灰度共现矩阵以进行特征提取。我正在使用greycomatrix进行此任务,但是由于出现以下错误,因此我对该过程似乎不了解:

  

ValueError:缓冲区源数组为只读

(完整的跟踪信息可以在下面找到)

这就是我所做的:

通过8种量化级别将(PIL)图像转换为灰度:

greyImg = img.convert('L', colors=8)

然后计算glcm矩阵:

glcm = greycomatrix(greyImg, distances=[1], angles=[0, np.pi/4, np.pi/2], 
                    symmetric=True, normed=True)

这会导致一个相当隐秘的错误:

  

glcm =灰色comatrix(img,距离= [1],角度= [0,np.pi / 4,np.pi / 2],级别= 256,对称= True,normed = True)

     

_glcm_loop(图像,距离,角度,水平,P)

     

skimage.feature._texture._glcm_loop中的文件“ skimage / feature / _texture.pyx”,第18行

     

View.MemoryView.memoryview_cwrapper中的文件“ stringsource”(行654)

     

View.MemoryView.memoryview._cinit__中的文件“ stringsource”,第349行   ValueError:缓冲区源数组是只读的

我一直在尝试刺耳参量,但我似乎不知道为什么会这样。计算glcm矩阵的正确方法是什么?

更新

问题出在灰度转换中。 需要进行以下更改:

import numpy as np

greyImg = np.array(img.convert('L', colors=8))

1 个答案:

答案 0 :(得分:0)

函数greycomatrix需要NumPy ndarray而不是PIL Image对象。您需要像这样转换greyImg

import numpy as np

greyImg = np.asarray(img.convert('L', colors=8))