scipy.ndimage.

grey_dilation#

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

计算灰度膨胀,使用结构元素或对应于平坦结构元素的足迹。

灰度膨胀是一种数学形态学运算。对于完整且平坦的结构元素的简单情况,它可以被视为滑动窗口上的最大值滤波器。

参数:
inputarray_like

要计算灰度膨胀的数组。

sizetuple of ints

用于灰度膨胀的平坦且完整的结构元素的形状。如果提供了 footprintstructure,则为可选。

footprintarray of ints, optional

用于灰度膨胀的平坦结构元素的非无限元素的位置。非零值给出中心邻域的集合,从中选择最大值。

structurearray of ints, optional

用于灰度膨胀的结构元素。structure 可以是非平坦的结构元素。structure 数组对邻域中的每个像素应用一个附加偏移量。

outputarray, optional

可以提供用于存储膨胀输出的数组。

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

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

cvalscalar, optional

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

originscalar, optional

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

axestuple of int or None

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

返回:
grey_dilationndarray

input 的灰度膨胀。

注释

图像输入通过在域 E 上定义的结构元素 s 进行的灰度膨胀由下式给出

(input+s)(x) = max {input(y) + s(x-y), for y in E}

特别是,对于定义为当 y 在 E 中时 s(y) = 0 的结构元素,灰度膨胀计算输入图像在由 E 定义的滑动窗口内的最大值。

灰度膨胀 [1] 是一种数学形态学运算 [2]

参考文献

示例

>>> from scipy import ndimage
>>> import numpy as np
>>> 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.grey_dilation(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, 3, 3, 2, 0],
       [0, 1, 1, 2, 2, 2, 0],
       [0, 1, 1, 2, 2, 2, 0],
       [0, 0, 0, 0, 0, 0, 0]])
>>> ndimage.grey_dilation(a, footprint=np.ones((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, 3, 3, 2, 0],
       [0, 1, 1, 2, 2, 2, 0],
       [0, 1, 1, 2, 2, 2, 0],
       [0, 0, 0, 0, 0, 0, 0]])
>>> s = ndimage.generate_binary_structure(2,1)
>>> s
array([[False,  True, False],
       [ True,  True,  True],
       [False,  True, False]], dtype=bool)
>>> ndimage.grey_dilation(a, footprint=s)
array([[0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 3, 1, 0, 0],
       [0, 1, 3, 3, 3, 1, 0],
       [0, 1, 1, 3, 2, 1, 0],
       [0, 1, 1, 2, 2, 2, 0],
       [0, 0, 1, 1, 2, 0, 0],
       [0, 0, 0, 0, 0, 0, 0]])
>>> ndimage.grey_dilation(a, size=(3,3), structure=np.ones((3,3)))
array([[1, 1, 1, 1, 1, 1, 1],
       [1, 2, 4, 4, 4, 2, 1],
       [1, 2, 4, 4, 4, 2, 1],
       [1, 2, 4, 4, 4, 3, 1],
       [1, 2, 2, 3, 3, 3, 1],
       [1, 2, 2, 3, 3, 3, 1],
       [1, 1, 1, 1, 1, 1, 1]])