我有一个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,描述背景。
非常感谢。
答案 0 :(得分:1)
您可以使用基于graph partition method的分段算法。例如,您可以使用Random Walker。但是你必须按照以下方式改变权重。
对于每个像素v_i,让g_i为像素的颜色。虽然原始算法将w_ {ij}定义为:
w_{ij} = exp{-beta*(g_i - g_j)^2)}
然后,您应该在w_{ij}=0
或g_i==0
时设置g_j==0
。