首页 > 解决方案 > 如何在 python 中使用 scikit-image graycomatrix() -function?

问题描述

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

ValueError:缓冲区源数组是只读的

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

所以这就是我所做的:

将(PIL)图像转换为具有 8 个量化级别的灰度:

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 = graycomatrix(img,距离=[1],角度=[0,np.pi/4,np.pi/2],级别=256,对称=真,规范=真)

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

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

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))

标签: pythonnumpypython-imaging-libraryscikit-imageglcm

解决方案


该函数greycomatrix需要一个 NumPyndarray而不是 PILImage对象。你需要greyImg像这样转换:

import numpy as np

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

推荐阅读