如何在2D numpy数组中围绕特定值创建非矩形边界框?
我有一个二维的numpy数组。我想找到围绕数组中特定值的非矩形边界框。矩形边界框的问题已经在这个问题中解决了:如何选择numpy二维数组中唯一元素的所有位置,并围绕它们画出边界框?
我们来看一个例子
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这样的单一值,表示背景。
非常感谢。
1 个回答
1
你可以使用一种基于图分割方法的分割算法。比如,你可以用随机行走(Random Walker)这个方法。但是,你需要对权重进行一些调整。
对于每一个像素 v_i,设 g_i 为这个像素的颜色。原来的算法是这样定义权重 w_{ij} 的:
w_{ij} = exp{-beta*(g_i - g_j)^2)}
然后,当 g_i==0
或者 g_j==0
时,你应该把 w_{ij}=0
。