【问题标题】:how to create non-rectangular bounding box around specific values in 2d numpy array?如何在 2d numpy 数组中的特定值周围创建非矩形边界框?
【发布时间】:2011-10-12 14:07:10
【问题描述】:

我有一个 2D numpy 数组。我想在数组的特定值周围找到非矩形边界框。矩形边界框已经在Question:How to select all locations of unique elements in numpy 2d array with bounding box around them?中解决了

让我们考虑以下示例

array([[1, 1, 2, 2],\
      [0, 1, 0, 1],\
      [3, 0, 1, 4],\
      [0, 3, 1, 1]])

结果有点复杂

 For one unique value 1, (0,0),(0,1),(1,1),(1,2),(1,3),(2,2), (3,2),(3,3)

我们希望以这样一种方式构建索引,即在区域内考虑极值内的零值。从这个意义上说,它更像是一个区域段问题,除了区域内的零之外,它的值完全相同。它定义了一个区域的边界。

需要注意的是,该区域仅由唯一值和零组成。通过构造问题,彼此之间不能存在任何非唯一值。

也许是图像处理意义上的图像中的轮廓查找问题(我不确定)

我们找到了这个区域。我们想从一堆特征中搜索哪个特征位于某个区域。例如,我们检测 SIFT。我们想找出哪些 sift 特征位于一个独特的区域,而不需要对特征进行任何比较。

请让我知道进一步澄清。

编辑:重要的是要注意这不是连接组件问题。在连通分量中,一个区域实际上由同质值组成。在我们的例子中,两者之间可以有零(或任何其他值)。所以这只是检测受唯一值约束的区域。还需要注意的是,在该区域内不能有任何任意值,只能有一个值,例如描绘背景的零或 255。

非常感谢。

【问题讨论】:

    标签: python image-processing numpy


    【解决方案1】:

    您可以使用基于graph partition method 的分段算法。例如,您可以使用Random Walker。但是您必须通过以下方式更改权重。

    对于每个像素 v_i 让 g_i 为像素的颜色。而原始算法将 w_{ij} 定义为:

    w_{ij} = exp{-beta*(g_i - g_j)^2)}
    

    然后您应该在g_i==0g_j==0 时设置w_{ij}=0

    【讨论】:

    • 有一个区别,在连通分量算法中,连通区域中的所有值都应该相同。在我的情况下,在连接的组件已经失败的地方可能会有零点。非常感谢您的回答。
    • 在运行连接组件之前只需将零更改为每个唯一值。
    • 那么它将是一个带有零的区域,该区域无论如何都无济于事......
    • 或者如果我的理解有误,如果您能提供更多详细信息会很好...谢谢
    • 但是这个掩码将包括可能在另一个区域中的每个 0 像素。它不会工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    相关资源
    最近更新 更多