В примере, включенном в документацию , есть опечатка. из greycomatrix
(выделено мной):
Примеры
Вычислите 2 GLCM: одну для смещения на 1 пиксель вправо и одну для смещения на 1 пиксель вверх.
>>> 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, а не два. Эти четыре матрицы соответствуют возможным комбинациям одного расстояния и четырех углов. Для расчета GLCM, соответствующего смещению вправо на 1 пиксель, значения расстояния и угла должны быть 1
и 0
соответственно:
result = greycomatrix(image, distances=[1], angles=[0], levels=4)
тогда как для расчета GLCM, соответствующего смещению вверх на 1 пиксель, параметры должны быть 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
. При этом все GLCM, возвращаемые greycomatrix
, являются симметричными.
person
Tonechas
schedule
15.03.2017