3

我有以下代码,我试图在其中获取与我给定的掩码相对应的图像的一部分。然后我想在该部分应用 skimage.feature.glcm 。但我得到了错误:

glcm = greycomatrix(mancha, [2], [0], levels=None, symmetric = True, normed = True)
File "D:\WinPython-64bit-2.7.13.1ZeroNew\python-2.7.13.amd64\lib\site-packages\skimage\feature\texture.py", line 101, in greycomatrix
assert_nD(image, 2)
File "D:\WinPython-64bit-2.7.13.1ZeroNew\python-2.7.13.amd64\lib\site-packages\skimage\_shared\utils.py", line 178, in assert_nD
raise ValueError(msg_incorrect_dim % (arg_name, '-or-'.join([str(n) for n in ndim])))
ValueError: The parameter `image` must be a 2-dimensional array

代码是:

mask = cv2.imread(pathMask, 0)
cruda = cv2.imread(pathCruda, 0)
imaskc = mask > 0
mancha = cruda[imaskc]

glcm = greycomatrix(mancha, [2], [0], levels=None, symmetric = True, normed = True)
energy = greycoprops(glcm, 'energy')
homogeneity = greycoprops(glcm, 'homogeneity')

我也尝试过不成功:

labeled_image, nb_labels = ndimage.label(mascara)
blobs = ndimage.find_objects(labeled_image)

glcm = greycomatrix(cruda[blobs[0]]

任何想法如何完成这项工作?

谢谢!

4

1 回答 1

3

您不能直接将蒙版图像传递给greycomatrix. 好消息是,您可以通过在代码中引入小的更改来计算从图像感兴趣区域提取的 Haralick 特征的近似值。

基本思想在于保存一个灰度级,例如0,以标记那些落在感兴趣区域 (ROI) 之外的图像像素。为了使这种方法正常工作,您需要将 ROI 内那些原始强度为0不同(但相似)值的像素的强度更改为不同(但相似)的值,例如1. 请注意,以这种方式修改图像不可避免地会在共现矩阵中引入不准确性,但只要您的图像足够大并且具有平滑的直方图,您就可以放心地假设获得的特征非常接近精确值. 同样重要的是要注意,您必须摆脱第 0和第 0共现矩阵的列,以便不考虑用于标记非 ROI 像素的灰度级。

要实现上述解决方法,您只需更改以下两行:

mancha = cruda[imaskc]
glcm = greycomatrix(mancha, [2], [0], levels=None, symmetric=True, normed=True)

至:

mancha = cruda.copy()
mancha[mancha == 0] = 1
mancha[~imaskc] = 0
glcm = greycomatrix(mancha, [2], [0], levels=None, symmetric=True, normed=True)[1:, 1:, :, :]
于 2018-02-07T13:38:56.957 回答