scipy.ndimage.

形态学梯度#

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

多维形态梯度。

形态梯度是通过给定结构元素对输入进行膨胀和腐蚀之间的差异来计算的。

参数:
输入array_like

用于计算形态梯度的数组。

大小整数元组

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

足迹整数数组,可选

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

结构整数数组,可选

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

输出数组,可选

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

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

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

cval标量,可选

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

起源标量,可选

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

返回:
形态梯度ndarray

input 的形态梯度。

注释

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

参考文献

[1]

https://en.wikipedia.org/wiki/数学形态学

示例

>>> 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]])