python - 如何在 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))
解决方案
该函数greycomatrix
需要一个 NumPyndarray
而不是 PILImage
对象。你需要greyImg
像这样转换:
import numpy as np
greyImg = np.asarray(img.convert('L', colors=8))
推荐阅读
- c++ - 这个失败的测试是否将零添加到空指针未定义的行为、编译器错误或其他什么?
- javascript - 如何更新数组内列表中的项目?
- javascript - 如何将其转换为 Java,也许使用 Maps
- linux - Git 错误:gpg 未能在 Linux 上对数据进行签名
- ajax - react-native 获取请求失败
- c++ - 逐字节删除 void* 是否安全?
- javascript - 在 JQuery 的自定义队列中使用 .delay()
- assembly - 未抛出 x86 程序集标志标志
- c# - 不调用 Collision2D
- java - 使用多线程从正在写入的数组中安全读取