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

如何在带不同标签的矩阵中查找所有值完全相同的矩形区域

问题原因

scipy.ndimage.find_objects返回的是每个连通区域的最小外接矩形切片,不会验证矩形内部所有像素都等于目标值,你得到的只是包围了所有等于目标值像素的边界框,而非全为目标值的实心矩形。
你示例中值为5的像素仅分布在[0:100, 0:100]的边框位置,它的连通外接矩形刚好是[0:100, 0:100],但矩形内部存在值为6、7的像素,因此不符合要求。

修正方案

你可以在拿到外接矩形后增加一步全局校验,过滤掉内部存在其他值的矩形,参考实现如下:

import numpy as np
import scipy.ndimage as nd

a = np.zeros((120, 120), dtype=np.uint16)
a[:100, :100] = 5
a[10:100, 10:100] = 6
a[12:100, 12:100] = 7

for v in np.unique(a):
    if v == 0:
        continue
    mask = (a == v).astype(int)
    labels, _ = nd.label(mask)
    all_bboxes = nd.find_objects(labels)
    # 校验每个外接矩形是否全为目标值
    valid_bboxes = [bbox for bbox in all_bboxes if np.all(a[bbox] == v)]
    print(f"值{v}的有效全同值矩形:{valid_bboxes}")

运行结果

值5的有效全同值矩形:[]
值6的有效全同值矩形:[]
值7的有效全同值矩形:[(slice(12, 100, None), slice(12, 100, None))]

和实际矩阵的数值分布一致。如果你的需求是提取连通区域内所有小的全同值矩形,可以基于二值掩码用经典的柱状图法求解全1矩形逻辑扩展即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:15:02