2012-02-25 83 views
10

我有一個大的numpy數組,我已經應用了一個過濾器。我想確定這個蒙版陣列中的連續區域。在這裏,如果對於任何其他索引(x2,y2)的索引(x1,y1),如果存在沿着軸的相等整數步長的值的路徑(對角線是有效步驟),則它們屬於相同區域,所以我將該區域定義爲連續的。識別二維numpy陣列中的連續區域

這可能不像一張簡單的照片那樣清晰。鑑於面膜:

0010000 
0100000 
0110000 
0000011 
1000010 

應該有三個區域確定使得輸出是一樣的東西

[ [[0,2],[1,1],[2,1],[2,2]], [[3,5],[3,6],[4,5]], [[4,0]] ] 

我想使用內置numpy的東西,而不是訴諸寫我自己Flood Fill算法。在文檔中的一點點研究只是發現了我所問的1D version

回答

14

您正在尋找scipy.ndimage.label,更多詳情herelabel返回數組相同的形狀,其中每個「獨特的功能,具有獨特的價值」的輸入,所以如果你想要的功能指標,你可以這樣做:

labels, numL = label(array) 
label_indices = [(labels == i).nonzero() for i in xrange(1, numL+1)]