我很难理解skimage中angle
的greycomatrix
参数。在documentation中提到的为右上方和右上方像素计算GLCM的示例中,它们提到了4个角度。他们得到了4个GLCM。
>>> image = np.array([[0, 0, 1, 1],
... [0, 0, 1, 1],
... [0, 2, 2, 2],
... [2, 2, 3, 3]], dtype=np.uint8)
>>> result = greycomatrix(image, [1], [0, np.pi/4, np.pi/2, 3*np.pi/4], levels=4)
左右像素的参数应该是什么?
最佳答案
documentation of greycomatrix
(重点是我的)中包含的示例中有一个错字:
例子
计算2个GLCM:一个用于向右偏移1个像素的GLCM,一个用于向上偏移1个像素的GLCM。
>>> image = np.array([[0, 0, 1, 1],
... [0, 0, 1, 1],
... [0, 2, 2, 2],
... [2, 2, 3, 3]], dtype=np.uint8)
>>> result = greycomatrix(image, [1], [0, np.pi/4, np.pi/2, 3*np.pi/4],
... levels=4)
实际上,
result
实际上包含四个不同的GLCM,而不是两个。这四个矩阵对应于一个距离和四个角度的可能组合。要计算与“向右1像素偏移”相对应的GLCM,距离和角度值应分别为1
和0
:result = greycomatrix(image, distances=[1], angles=[0], levels=4)
而要计算与“向上1像素偏移”相对应的GLCM,参数应为
1
和np.pi/2
:result = greycomatrix(image, distances=[1], angles=[np.pi/2], levels=4)
在示例中,
distances=[1]
和angles=[0, np.pi/4, np.pi/2, 3*np.pi/4]
。要选择特定的GLCM,必须为angles
和distances
指定适当的索引。因此,右侧GLCM的1像素为result[:, :, 0, 0]
,而上方GLCM的1像素为result[:, :, 0, 2]
。最后,如果要计算“向下1像素偏移” GLCM(↓),则只需转置“向上1像素偏移” GLCM(↑)。重要的是要注意,在大多数情况下,两个GLCM都非常相似。实际上,通过在对
symmetric
的调用中将参数True
设置为greycomatrix
,可以忽略共现强度的顺序。这样,greycomatrix
返回的GLCM都是对称的。关于python - 如何在skimage/Python中提及邻居的方向来计算glcm?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37761411/