2012-02-25 9 views
10

Tengo una gran matriz numpy sobre la que he aplicado un filtro. Me gustaría identificar las regiones contiguas en esta matriz enmascarada. Aquí estoy definiendo una región contigua si, para cualquier índice (x1,y1) a cualquier otro índice (x2,y2), pertenecen a la misma región si hay una ruta de True valores a lo largo de pasos enteros iguales a lo largo de los ejes (las diagonales son pasos válidos).Identificar regiones contiguas en la matriz numpy 2D

Eso puede no ser tan claro como una imagen simple. Dada la máscara:

0010000 
0100000 
0110000 
0000011 
1000010 

Debe haber tres regiones identificadas tal que la salida es algo así como

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

me gustaría usar algo integrado en numpy, sin recurrir a escribir mi propio algoritmo Flood Fill . Un poco de investigación en los documentos solo apareció un 1D version de lo que estoy pidiendo.

Respuesta

14

Está buscando scipy.ndimage.label, más información here. label devuelve una matriz de la misma forma que la entrada donde cada "característica única tiene un valor único", por lo que si desea los índices de las características puede hacer algo como:

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