scipy.ndimage.

binary_fill_holes#

scipy.ndimage.binary_fill_holes(input, structure=None, output=None, origin=0, *, axes=None)[源代码]#

填充二进制对象中的孔洞。

参数:
inputarray_like

要填充孔洞的 N 维二进制数组

structurearray_like,可选

计算中使用的结构元素; 大尺寸元素可以加快计算速度,但可能会错过与背景之间有薄区域分隔的孔洞。 默认元素(具有等于 1 的方形连通性)产生直观的结果,其中输入中的所有孔洞都已被填充。

outputndarray,可选

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

originint,int 元组,可选

结构元素的位置。

axesint 或 None 的元组

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

返回:
outndarray

初始图像 input 的转换,其中孔洞已填充。

注释

此函数中使用的算法包括使用二进制膨胀从图像的外边界侵入 input 中形状的互补部分。 孔洞不与边界相连,因此不会被侵入。 结果是被侵入区域的互补子集。

参考文献

示例

>>> from scipy import ndimage
>>> import numpy as np
>>> a = np.zeros((5, 5), dtype=int)
>>> a[1:4, 1:4] = 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]])
>>> ndimage.binary_fill_holes(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]])
>>> # Too big structuring element
>>> ndimage.binary_fill_holes(a, structure=np.ones((5,5))).astype(int)
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]])