scipy.ndimage.

morphological_gradient#

scipy.ndimage.morphological_gradient(input, size=None, footprint=None, structure=None, output=None, mode='reflect', cval=0.0, origin=0)[source]#

多维形态梯度。

形态梯度计算为使用给定结构元素对输入进行膨胀和腐蚀后的差值。

参数:
inputarray_like

要计算形态梯度的数组。

size整数元组

用于数学形态学操作的扁平化和完整结构元素的形状。如果提供 footprintstructure,则为可选。较大的 size 会产生更模糊的梯度。

footprint整数数组,可选

用于形态学操作的扁平化结构元素中非无穷元素的位置。较大的足迹会产生更模糊的形态梯度。

structure整数数组,可选

用于形态学操作的结构元素。 structure 可以是非扁平化结构元素。 structure 数组对邻域中的像素应用偏移量(在膨胀期间偏移量是加性的,在腐蚀期间是减性的)。

output数组,可选

可以提供一个用于存储形态梯度输出的数组。

mode{‘reflect’, ‘constant’, ‘nearest’, ‘mirror’, ‘wrap’},可选

mode 参数决定如何处理数组边界,其中 cval 是当模式等于 ‘constant’ 时的值。默认值为 ‘reflect’

cval标量,可选

如果 mode 为 ‘constant’ ,则填充输入边缘以外的值。默认值为 0.0。

origin标量,可选

origin 参数控制过滤器的放置位置。默认值 0

返回值:
morphological_gradientndarray

input 的形态梯度。

注释

对于扁平化结构元素,在给定点计算的形态梯度对应于以该点为中心的结构元素所覆盖的输入元素之间的最大差异。

参考文献

示例

>>> from scipy import ndimage
>>> import numpy as np
>>> a = np.zeros((7,7), dtype=int)
>>> a[2:5, 2:5] = 1
>>> ndimage.morphological_gradient(a, size=(3,3))
array([[0, 0, 0, 0, 0, 0, 0],
       [0, 1, 1, 1, 1, 1, 0],
       [0, 1, 1, 1, 1, 1, 0],
       [0, 1, 1, 0, 1, 1, 0],
       [0, 1, 1, 1, 1, 1, 0],
       [0, 1, 1, 1, 1, 1, 0],
       [0, 0, 0, 0, 0, 0, 0]])
>>> # The morphological gradient is computed as the difference
>>> # between a dilation and an erosion
>>> ndimage.grey_dilation(a, size=(3,3)) -\
...  ndimage.grey_erosion(a, size=(3,3))
array([[0, 0, 0, 0, 0, 0, 0],
       [0, 1, 1, 1, 1, 1, 0],
       [0, 1, 1, 1, 1, 1, 0],
       [0, 1, 1, 0, 1, 1, 0],
       [0, 1, 1, 1, 1, 1, 0],
       [0, 1, 1, 1, 1, 1, 0],
       [0, 0, 0, 0, 0, 0, 0]])
>>> a = np.zeros((7,7), dtype=int)
>>> a[2:5, 2:5] = 1
>>> a[4,4] = 2; a[2,3] = 3
>>> a
array([[0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 3, 1, 0, 0],
       [0, 0, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 2, 0, 0],
       [0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0]])
>>> ndimage.morphological_gradient(a, size=(3,3))
array([[0, 0, 0, 0, 0, 0, 0],
       [0, 1, 3, 3, 3, 1, 0],
       [0, 1, 3, 3, 3, 1, 0],
       [0, 1, 3, 2, 3, 2, 0],
       [0, 1, 1, 2, 2, 2, 0],
       [0, 1, 1, 2, 2, 2, 0],
       [0, 0, 0, 0, 0, 0, 0]])