scipy.ndimage.

binary_fill_holes#

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

填充二值对象中的空洞。

参数:
inputarray_like

具有待填充空洞的 N 维二值数组

structure类数组,可选

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

outputndarray,可选

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

originint, int 元组, 可选

结构元素的位置。

axes整数元组或 None

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

返回:
outndarray

初始图像 input 的变换结果,其中空洞已被填充。

附注

该函数使用的算法原理是通过二值膨胀,从图像的外边界向内侵蚀 input 中形状的补集。由于空洞与边界不连通,因此不会被侵蚀。最终结果即为被侵蚀区域的补集。

数组 API 标准支持

binary_fill_holes 除了支持 NumPy 外,还对兼容 Python Array API 标准的后端提供了实验性支持。请考虑通过设置环境变量 SCIPY_ARRAY_API=1 并提供 CuPy、PyTorch、JAX 或 Dask 数组作为数组参数来测试这些功能。目前支持以下后端与设备(或其他功能)的组合。

CPU

GPU

NumPy

不适用

CuPy

不适用

PyTorch

JAX

⚠️ 无 JIT

Dask

⚠️ 计算图

不适用

有关更多信息,请参阅 对数组 API 标准的支持

参考文献

示例

>>> 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]])