scipy.ndimage.

morphological_gradient#

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

多维形态学梯度。

形态学梯度计算为输入图像经过给定结构元素膨胀和腐蚀后的差值。

参数:
inputarray_like

计算形态学梯度的数组。

sizetuple of ints

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

footprintarray of ints, optional

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

structurearray of ints, optional

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

outputarray, optional

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

mode{‘reflect’, ‘constant’, ‘nearest’, ‘mirror’, ‘wrap’}, optional

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

cvalscalar, optional

如果 mode 为 ‘constant’,则用此值填充输入图像的边缘外部分。默认为 0.0。

originscalar, optional

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

axestuple of int or None

应用滤波器的轴。如果为 None,则沿所有轴对 input 进行滤波。如果提供了 origin 元组,则其长度必须与轴数匹配。

返回:
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]])