二维 NumPy 数组中的聚类非零值
Cluster non-zero values in a 2D NumPy array
我想在 NumPy 二维数组中对非零位置进行聚类以进行 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]]
我不确定我是否正确理解了您的问题,但我认为 scikit-image 的 label
and 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
我想在 NumPy 二维数组中对非零位置进行聚类以进行 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]]
我不确定我是否正确理解了您的问题,但我认为 scikit-image 的 label
and 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