scipy.ndimage.

binary_fill_holes#

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

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

参数:
input类数组

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

structure类数组, 可选

用于计算的结构元素;大尺寸元素可加快计算速度,但可能会遗漏被细小区域与背景分隔的孔洞。默认元素(方形连通性为一)会产生直观的结果,即输入中的所有孔洞都已被填充。

outputndarray, 可选

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

origin整型, 整型元组, 可选

结构元素的位置。

axes整型元组或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]])