如何在2d numpy数组中的特定值周围创建非矩形边界框?

时间:2011-10-12 14:07:10

标签: python image-processing numpy

我有一个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。我们希望找到哪个筛选功能位于一个独特区域,而不对功能进行任何比较。

如果需要进一步说明,请与我们联系。

编辑:请务必注意,这不是连接组件问题。在连通分量中,一个区域实际上由同质值组成。在我们的例子中,中间可以有零(或任何其他值)。因此,这仅仅是检测受唯一值约束的区域。同样重要的是要注意,在区域内部不能有任何任意值,而是单个值,如零或255,描述背景。

非常感谢。

1 个答案:

答案 0 :(得分:1)

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

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

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

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