簡體   English   中英

在2D NumPy數組中聚類非零值

[英]Cluster non-zero values in a 2D NumPy array

我想將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]]

我不確定我是否正確理解了您的問題,但是我認為scikit-image的labelregionprops可以完成工作。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM