【问题标题】:How to use the scikit-image greycomatrix() -function in python?如何在 python 中使用 scikit-image graycomatrix() -function?
【发布时间】:2019-09-12 12:27:47
【问题描述】:

我正在尝试从图像中计算灰度共现矩阵以进行特征提取。我正在使用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, distances=[1], Angles=[0, np.pi/4, np.pi/2], levels=256, symmetric=True, normed=True)

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

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

文件“stringsource”,第 654 行,在 View.MemoryView.memoryview_cwrapper 中

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

我一直在尝试对参数感到刺痛,但我似乎无法弄清楚为什么会发生这种情况。计算 glcm 矩阵的正确方法是什么?

更新

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

import numpy as np

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 您可能想使用skimage.io 读取图像。手动从 PIL 进行转换很脆弱。
    • 是的,那是我的问题。谢谢你。但是,np.asarray() 产生了完全相同的错误。 np.array 成功了。
    • 它们中的任何一个都在我的计算机上运行良好。看看this post
    猜你喜欢
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 2021-06-17
    • 2017-04-21
    • 2021-04-10
    相关资源
    最近更新 更多