You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在scipy.ndimage中对已标记特征按指定结构进行扩张

解决方案

你要的功能可以通过scipy.ndimage.binary_dilation配合掩码逻辑实现,核心思路是先提取目标标签的区域做膨胀,再只把膨胀后落在背景区域的部分赋值为目标标签,避免覆盖其他已标记的特征。

完整可运行代码如下:

import numpy as np
from scipy import ndimage

# 你的原有逻辑
a = np.full((8, 8), 1)
a[2, :] = a[5, :] = 0
a[:, 2] = a[:, 5] = 0

s = [
    [0, 1, 0],
    [1, 1, 1],
    [0, 1, 0],
]

labeled, num = ndimage.label(a, structure=s)

# 标签扩张实现
target_label = 2
# 1. 提取目标标签的二值掩码
target_mask = labeled == target_label
# 2. 对目标掩码做膨胀,structure用你自定义的结构元,iterations控制扩张次数
dilated_mask = ndimage.binary_dilation(target_mask, structure=s, iterations=1)
# 3. 仅将膨胀后落在原背景(值为0)的区域替换为目标标签,不覆盖其他已有标签
grown = labeled.copy()
grown[np.logical_and(dilated_mask, labeled == 0)] = target_label

# 打印结果
print(grown)

运行输出和你期望的效果完全一致:

[[1 1 2 2 2 2 3 3]
 [1 1 2 2 2 2 3 3]
 [0 0 0 2 2 0 0 0]
 [4 4 0 5 5 0 6 6]
 [4 4 0 5 5 0 6 6]
 [0 0 0 0 0 0 0 0]
 [7 7 0 8 8 0 9 9]
 [7 7 0 8 8 0 9 9]]

补充说明:

  • 调整iterations参数可以控制扩张步数,值越大扩张范围越大
  • 如果需要同时扩张多个标签,可以按优先级从高到低依次执行上述逻辑,避免低优先级标签覆盖高优先级标签的区域
  • 该方法天然支持n维数组,只需保证结构元的维度和输入数组维度一致即可正常工作

内容的提问来源于stack exchange,提问作者nieswand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 23:33:02