scipy.ndimage.

binary_closing#

scipy.ndimage.binary_closing(input, structure=None, iterations=1, output=None, origin=0, mask=None, border_value=0, brute_force=False)[source]#

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

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

参数:
inputarray_like

要闭合的二进制数组。非零 (True) 元素构成要闭合的子集。

structurearray_like, 可选

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

iterationsint, 可选

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

outputndarray, 可选

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

originint 或整数元组,可选

过滤器的放置,默认值为 0。

maskarray_like, 可选

如果给定掩码,则在每次迭代中只修改对应掩码元素为 True 的元素。

在版本 1.1.0 中添加。

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

输出数组中边界处的 value。

在版本 1.1.0 中添加。

brute_force布尔值,可选

内存条件:如果为 False,则只跟踪在上次迭代中其值已更改的像素作为在当前迭代中更新的候选像素;如果为 True,则无论上次迭代中发生了什么,都将所有像素视为更新的候选像素。默认情况下为 False。

在版本 1.1.0 中添加。

返回:
binary_closing布尔型 ndarray

输入通过结构元素的闭合。

注释

闭合 [1] 是一种数学形态学运算 [2],它由使用相同结构元素的膨胀和腐蚀的连续执行组成。因此,闭合会填充小于结构元素的孔。

开运算 (binary_opening) 结合,闭合可用于去除噪声。

参考文献

示例

>>> from scipy import ndimage
>>> import numpy as np
>>> a = np.zeros((5,5), dtype=int)
>>> a[1:-1, 1:-1] = 1; a[2,2] = 0
>>> a
array([[0, 0, 0, 0, 0],
       [0, 1, 1, 1, 0],
       [0, 1, 0, 1, 0],
       [0, 1, 1, 1, 0],
       [0, 0, 0, 0, 0]])
>>> # Closing removes small holes
>>> ndimage.binary_closing(a).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]])
>>> # Closing is the erosion of the dilation of the input
>>> ndimage.binary_dilation(a).astype(int)
array([[0, 1, 1, 1, 0],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
       [0, 1, 1, 1, 0]])
>>> ndimage.binary_erosion(ndimage.binary_dilation(a)).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]])
>>> a = np.zeros((7,7), dtype=int)
>>> a[1:6, 2:5] = 1; a[1:3,3] = 0
>>> a
array([[0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 0, 1, 0, 0],
       [0, 0, 1, 0, 1, 0, 0],
       [0, 0, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 0, 0],
       [0, 0, 0, 0, 0, 0, 0]])
>>> # In addition to removing holes, closing can also
>>> # coarsen boundaries with fine hollows.
>>> ndimage.binary_closing(a).astype(int)
array([[0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 0, 1, 0, 0],
       [0, 0, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 0, 0],
       [0, 0, 0, 0, 0, 0, 0]])
>>> ndimage.binary_closing(a, structure=np.ones((2,2))).astype(int)
array([[0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 0, 0],
       [0, 0, 0, 0, 0, 0, 0]])