Как указать направление соседей для расчета glcm в skimage/Python?

У меня возникли проблемы с пониманием параметра angle для greycomatrix в skimage. В примере, упомянутом в документации чтобы вычислить 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)

Какие должны быть параметры для пикселя вправо и вниз?


person Indranil Dutta    schedule 11.06.2016    source источник


Ответы (1)


В примере, включенном в документацию , есть опечатка. из 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
comment
потрясающий ответ. Я в настоящее время пытаюсь понять это. Не могли бы вы также расширить параметр «уровни»? - person Nathan Thomas; 07.04.2017
comment
Согласно документации skimage: < i>Входное изображение должно содержать целые числа в диапазоне [0, уровни-1], где уровни указывают количество подсчитанных уровней серого (обычно 256 для 8-битного изображения). Этот аргумент требуется для 16-битных изображений или выше и обычно является максимальным для изображения. Поскольку выходная матрица имеет как минимум уровни x уровней, может быть предпочтительнее использовать бинирование входного изображения, а не большие значения для уровней. Значение levels определяет размер матрицы совпадения уровней серого. - person Tonechas; 07.04.2017
comment
Вы можете взглянуть на этот ответ, чтобы получить более глубокое понимание параметра levels. - person Tonechas; 07.04.2017
comment
Спасибо - действительно полезно. Я получаю много черного пространства на моем изображении, и я не совсем уверен, что происходит, поэтому я задам новый вопрос по этому поводу. - person Nathan Thomas; 07.04.2017
comment
Я разместил это: stackoverflow.com/questions/43266623/black -space-in-glcm-image - если вы можете посмотреть - person Nathan Thomas; 07.04.2017