【发布时间】:2018-05-15 10:32:19
【问题描述】:
我有以下代码,我试图在其中获取与给定蒙版对应的图像的一部分。然后我想在该部分应用 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]]
有什么办法可以完成这项工作吗?
谢谢!
【问题讨论】:
-
使用掩码索引一个 numpy 数组会返回一个线性数组。如果你仔细想想,这并不奇怪。如果
a = [[1, 2], [3, 4]],并且您有一个掩码b = [[1, 0], [1, 1]],则结果为a[b] = [1, 3, 4]。所以它不是二维数组。如果每行上有不同数量的屏蔽元素,它就不能返回二维数组,所以它永远不会。但是,如果您只想将遮罩外的所有内容设置为黑色,您可以使用cruda[~imaskc] = 0轻松完成。 -
感谢您的回答,但我想做的是获取图像的一部分,以便将其传递给 glcm 函数
-
想想你在这里真正想要什么。看看我上面的例子,1 是
True,0 是False。在该示例中应该返回a[b]是什么样的? -
对不起,我不太明白你的意思。你刚才说返回 a[b] = [1,2,3]
-
正是……那个数组有多少维?只有一个。
glcm需要二维输入。使用掩码进行索引只会线性地给出与掩码相对应的所有元素。换句话说:如果a = np.array([[1, 2], [3, 4]])和b = np.array([[1, 0], [1, 1]])然后a[b] = np.array([1, 3, 4])但你可能想要的是a[~b] = 0,这样a = np.array([[1, 0], [3, 4]]),它是二维的。
标签: python opencv mask scikit-image glcm