2012-02-25 14 views
10

Mam dużą tablicę numpy, w której zastosowałem filtr. Chciałbym zidentyfikować sąsiednie regiony w tej zamaskowanej tablicy. Tutaj definiuję region, który ma być ciągły, jeżeli dla dowolnego indeksu (x1,y1) do dowolnego innego indeksu (x2,y2), należą one do tego samego regionu, jeśli istnieje ścieżka o równych całkowitych stopniach wzdłuż osi (przekątne są prawidłowymi krokami).Identyfikacja sąsiednich regionów w tablicy numpy 2D

To może nie być tak jasne, jak zwykłe zdjęcie. Biorąc pod maską:

0010000 
0100000 
0110000 
0000011 
1000010 

Istnieją trzy regiony powinny być zidentyfikowane tak, że wyjście jest coś takiego jak

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

chciałbym użyć czegoś wbudowany numpy, bez uciekania się do pisania mój własny algorytm Flood Fill . Trochę badań w dokumentach tylko okazało się 1D version o to, o co proszę.

Odpowiedz

14

Szukasz scipy.ndimage.label, więcej informacji here. label zwraca tablicę o tym samym kształcie, co wejście, w którym każda "unikatowa funkcja ma unikalną wartość", więc jeśli chcesz mieć indeksy funkcji, możesz zrobić coś takiego:

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