scipy.ndimage.

binary_opening#

scipy.ndimage.binary_opening(input, structure=None, iterations=1, output=None, origin=0, mask=None, border_value=0, brute_force=False, *, axes=None)[源代码]#

使用给定的结构元素进行多维二值开运算。

输入图像通过结构元素的开运算是图像通过结构元素的腐蚀后的膨胀

参数:
inputarray_like

要进行开运算的二值 array_like。非零(True)元素形成要进行开运算的子集。

structurearray_like, 可选

用于开运算的结构元素。非零元素被认为是 True。如果没有提供结构元素,则会生成一个具有等于 1 的方形连通性的元素(即,只有最近的邻居连接到中心,对角连接的元素不被视为邻居)。

iterationsint, 可选

开运算的腐蚀步骤,然后膨胀步骤,每个步骤都重复 iterations 次(默认一次)。如果 iterations 小于 1,则每次操作都会重复执行,直到结果不再改变。只接受整数的迭代次数。

outputndarray, 可选

与输入形状相同的数组,输出将被放入其中。默认情况下,会创建一个新数组。

originint 或 int 元组,可选

滤波器的位置,默认为 0。

maskarray_like, 可选

如果给定了掩码,则在每次迭代时,只有在相应掩码元素处具有 True 值的元素才会被修改。

1.1.0 版本新增。

border_valueint(强制转换为 0 或 1),可选

输出数组中边界的值。

1.1.0 版本新增。

brute_forceboolean, 可选

内存条件:如果为 False,则只跟踪上次迭代中值发生变化的像素,作为当前迭代中要更新的候选;如果为 True,则所有像素都被视为更新的候选,无论前一次迭代发生了什么。默认为 False。

1.1.0 版本新增。

axesint 元组或 None

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

返回:
binary_openingbool 的 ndarray

输入通过结构元素的开运算。

备注

开运算 [1] 是一种数学形态学操作 [2],它包括使用相同的结构元素对输入进行腐蚀和膨胀的连续操作。因此,开运算会移除小于结构元素的物体。

闭运算 (binary_closing) 一起,开运算可用于去除噪声。

参考

示例

>>> from scipy import ndimage
>>> import numpy as np
>>> a = np.zeros((5,5), dtype=int)
>>> a[1:4, 1:4] = 1; a[4, 4] = 1
>>> a
array([[0, 0, 0, 0, 0],
       [0, 1, 1, 1, 0],
       [0, 1, 1, 1, 0],
       [0, 1, 1, 1, 0],
       [0, 0, 0, 0, 1]])
>>> # Opening removes small objects
>>> ndimage.binary_opening(a, structure=np.ones((3,3))).astype(int)
array([[0, 0, 0, 0, 0],
       [0, 1, 1, 1, 0],
       [0, 1, 1, 1, 0],
       [0, 1, 1, 1, 0],
       [0, 0, 0, 0, 0]])
>>> # Opening can also smooth corners
>>> ndimage.binary_opening(a).astype(int)
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]])
>>> # Opening is the dilation of the erosion of the input
>>> ndimage.binary_erosion(a).astype(int)
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]])
>>> ndimage.binary_dilation(ndimage.binary_erosion(a)).astype(int)
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]])