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)[source]#

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

图像的开运算是指使用结构元素对图像进行腐蚀,然后再进行膨胀

参数::
inputarray_like

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

structurearray_like, optional

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

iterationsint, optional

开运算的腐蚀步骤和膨胀步骤分别重复iterations 次(默认值为 1)。如果iterations 小于 1,则每个操作会重复进行,直到结果不再改变为止。只接受整数迭代次数。

outputndarray, optional

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

originint 或 int 元组,optional

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

maskarray_like, optional

如果给出了 mask,则每次迭代只修改对应 mask 元素为 True 的元素。

版本 1.1.0 中添加。

border_valueint(转换为 0 或 1),optional

输出数组中边界的数值。

版本 1.1.0 中添加。

brute_forceboolean, optional

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

版本 1.1.0 中添加。

返回值::
binary_opening布尔型 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]])