我有以下代码,其中我试图获得与我给出的面具相对应的图像的一部分。然后我想在该部分应用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]]
有任何想法如何完成这项工作?
谢谢!
答案 0 :(得分:1)
您无法直接将屏蔽图像传递给greycomatrix
。好消息是,您可以通过在代码中引入一些小变化来计算从图像中感兴趣的区域提取的Haralick特征的近似值。
基本思想包括保存灰度级,比如说0
,以标记那些落在感兴趣区域(ROI)之外的图像像素。要使此方法正常工作,您需要将原始强度为0
的ROI内的像素强度更改为不同(但相似)的值,例如1
。请注意,以这种方式修改图像不可避免地会在共生矩阵中引入不准确性,但只要您的图像足够大并且具有平滑的直方图,您就可以安全地假设所获得的要素与精确值非常接近。 。同样重要的是要注意,你必须摆脱共生矩阵的0 th 行和0 th 列,以便不考虑用于标记非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:, :, :]