scipy.ndimage.

generate_binary_structure#

scipy.ndimage.generate_binary_structure(rank, связность)[источник]#

Сгенерировать бинарную структуру для бинарных морфологических операций.

Параметры:
rankint

Количество измерений массива, к которому будет применен структурный элемент, как возвращено np.ndim.

связностьint

связность определяет, какие элементы выходного массива принадлежат структуре, т.е. считаются соседями центрального элемента. Элементы до квадрата расстояния связность от центра считаются соседями. связность может варьироваться от 1 (диагональные элементы не являются соседями) до rank (все элементы являются соседями).

Возвращает:
выводndarray из булевых значений

Структурирующий элемент, который может использоваться для бинарных морфологических операций, с rank размерности и все размерности равны 3.

Смотрите также

iterate_structure, binary_dilation, binary_erosion

Примечания

generate_binary_structure может создавать структурирующие элементы только с размерностями, равными 3, то есть минимальными размерностями. Для больших структурирующих элементов, которые полезны, например, для эрозии больших объектов, можно использовать iterate_structure, или создавайте напрямую пользовательские массивы с функциями numpy, такими как numpy.ones.

Примеры

>>> from scipy import ndimage
>>> import numpy as np
>>> struct = ndimage.generate_binary_structure(2, 1)
>>> struct
array([[False,  True, False],
       [ True,  True,  True],
       [False,  True, False]], dtype=bool)
>>> a = np.zeros((5,5))
>>> a[2, 2] = 1
>>> a
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]])
>>> b = ndimage.binary_dilation(a, structure=struct).astype(a.dtype)
>>> b
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.],
       [ 0.,  1.,  1.,  1.,  0.],
       [ 0.,  0.,  1.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]])
>>> ndimage.binary_dilation(b, structure=struct).astype(a.dtype)
array([[ 0.,  0.,  1.,  0.,  0.],
       [ 0.,  1.,  1.,  1.,  0.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 0.,  1.,  1.,  1.,  0.],
       [ 0.,  0.,  1.,  0.,  0.]])
>>> struct = ndimage.generate_binary_structure(2, 2)
>>> struct
array([[ True,  True,  True],
       [ True,  True,  True],
       [ True,  True,  True]], dtype=bool)
>>> struct = ndimage.generate_binary_structure(3, 1)
>>> struct # no diagonal elements
array([[[False, False, False],
        [False,  True, False],
        [False, False, False]],
       [[False,  True, False],
        [ True,  True,  True],
        [False,  True, False]],
       [[False, False, False],
        [False,  True, False],
        [False, False, False]]], dtype=bool)