1

我想在 NumPy 2D 数组中对非零位置进行聚类以进行 MSER 检测。然后我想找到每个集群中的点数并删除那些在某些 x 和 y(10 和 300)之间没有点数的集群。

我尝试通过搜索相邻点来对它们进行聚类,但该方法对于凹形非零聚类失败。

[[0, 1, 0, 0, 1],
 [0, 1, 1, 1, 1],
 [0, 0, 0, 0, 0],
 [1, 1, 0, 1, 1],
 [1, 0, 0, 1, 1]]

应该输出,对于 x=4 和 y=5(都包括在内)

[[0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 1, 1],
 [0, 0, 0, 1, 1]]
4

1 回答 1

2

我不确定我是否正确理解了您的问题,但我认为 scikit-imagelabel可以regionprops完成工作。

In [6]: import numpy as np

In [7]: from skimage import measure, regionprops

In [8]: img = np.array([[0, 7, 0, 0, 7],
   ...:                 [0, 9, 1, 1, 4], 
   ...:                 [0, 0, 0, 0, 0], 
   ...:                 [2, 1, 0, 2, 1],
   ...:                 [1, 0, 0, 6, 4]])
   ...: 

In [9]: arr = measure.label(img > 0)

In [10]: arr
Out[10]: 
array([[0, 1, 0, 0, 1],
       [0, 1, 1, 1, 1],
       [0, 0, 0, 0, 0],
       [2, 2, 0, 3, 3],
       [2, 0, 0, 3, 3]])

In [11]: print('Label\t# pixels')
    ...: for region in measure.regionprops(arr):
    ...:     print(f"{region['label']}\t{region['area']}")
    ...:
Label   # pixels
1       6
2       3
3       4
于 2019-05-13T22:49:08.357 回答