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, *, axes=None)[source]#
使用给定结构元素的多维二值开运算。
输入图像通过结构元素的开运算是图像通过结构元素的腐蚀操作后的膨胀操作。
- 参数:
- input类数组
要进行开运算的二值类数组。非零(True)元素构成要进行开运算的子集。
- structure类数组, 可选
用于开运算的结构元素。非零元素被视为 True。如果未提供结构元素,则会生成一个方形连通性等于1的元素(即,只有最近的邻居连接到中心,对角线连接的元素不被视为邻居)。
- iterationsint, 可选
开运算的腐蚀步骤和随后的膨胀步骤各重复 iterations 次(默认为1次)。如果 iterations 小于1,则每个操作会重复执行,直到结果不再变化为止。只接受整数次迭代。
- outputndarray, 可选
与输入形状相同的数组,用于存放输出结果。默认情况下,会创建一个新数组。
- originint 或 int 元组, 可选
滤波器放置位置,默认为0。
- mask类数组, 可选
如果提供了掩码,则在每次迭代中只修改掩码对应元素处为 True 的那些元素。
1.1.0 版本新增。
- border_valueint (转换为 0 或 1), 可选
输出数组边界处的值。
1.1.0 版本新增。
- brute_force布尔值, 可选
内存条件:如果为 False,则只有在上次迭代中值发生变化的像素才会被跟踪为当前迭代中待更新的候选像素;如果为 True,则所有像素都被视为更新的候选像素,无论上一次迭代中发生了什么。默认为 False。
1.1.0 版本新增。
- axesint 元组或 None
应用滤波器的轴。如果为 None,则 input 将沿所有轴进行滤波。如果提供了 origin 元组,其长度必须与轴的数量匹配。
- 返回:
- 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]])