2012-02-25 29 views
10

Ho un grande array numpy su cui ho applicato un filtro. Mi piacerebbe identificare le regioni contigue in questo array mascherato. Qui sto definendo una regione contigua se, per qualsiasi indice (x1,y1) in qualsiasi altro indice (x2,y2), appartengono alla stessa regione se esiste un percorso di valori True lungo passi interi uguali lungo gli assi (le diagonali sono passaggi validi).Identificare le regioni contigue nell'array numpy 2D

Potrebbe non essere chiaro come una semplice immagine. Data la maschera:

0010000 
0100000 
0110000 
0000011 
1000010 

ci dovrebbero essere tre regioni identificate in modo tale che l'uscita è qualcosa di simile

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

Mi piacerebbe usare qualcosa di costruito in numpy, senza ricorrere a scrivere il mio algoritmo Flood Fill . Un po 'di ricerca nei documenti ha trovato solo un 1D version di quello che sto chiedendo.

risposta

14

Stai cercando scipy.ndimage.label, altre informazioni here. label restituisce un array con la stessa forma dell'input in cui ogni "caratteristica univoca ha un valore univoco", quindi se vuoi gli indici delle funzionalità puoi fare qualcosa del tipo:

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