2012-02-25 13 views
10

私はフィルタを適用した大きなnumpy配列を持っています。私は、このマスクされた配列内の連続領域を特定したいと思います。ここでは、任意のインデックスの他のインデックス(x2,y2)に対して、Trueという値が軸に沿って等しい整数ステップに沿った値(対角線は有効なステップ)であれば、それらは同じ領域に属します。2D numpy配列の連続した領域を特定します

単純な画像ほどはっきりしない場合があります。マスクを考える:

0010000 
0100000 
0110000 
0000011 
1000010 

出力は、私は自分のFlood Fillアルゴリズムを書くに頼ることなく、numpyに組み込まれたものを使用したい

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

のようなものであるように識別三つの領域があるはずです。ドキュメントの研究のほんの少しは、私が求めているものの1D versionとなっていました。

答えて

14

scipy.ndimage.label、詳細情報hereをお探しですか? labelは、それぞれの「ユニークなフィーチャがユニークな値を持つ」入力と同じ形状を返します。したがって、フィーチャのインデックスが必要な場合は、次のようにすることができます。

labels, numL = label(array) 
label_indices = [(labels == i).nonzero() for i in xrange(1, numL+1)] 
関連する問題