Определение смежных областей в 2D-Numpy массива

Обновить

December 2018

Просмотры

4.3k раз

12

У меня есть большой numpyмассив , который я применил фильтр снова. Я хотел бы определить смежную области в этом массиве замаскированного. Здесь я определяю область , чтобы быть непрерывным , если для любого индекса (x1,y1)любого другого индекса (x2,y2), они принадлежат к одной и той же области , если существует путь Trueзначений вдоль равных целых шагов по осяму (диагонали являются правильными шагами).

Это не может быть столь же ясно, как простая картина. Учитывая маску:

0010000
0100000
0110000
0000011
1000010

Там должно быть три области определены таким образом, что выход что-то вроде

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

Я хотел бы использовать что - то встроенное в numpy, не прибегая к написанию своего собственной Заливки алгоритма. Немного исследований в документации только подвернулась версию 1D , что я спрашиваю.

1 ответы

16

Вы ищете scipy.ndimage.label, больше информации здесь . labelвозвращает массив ту же форму, что и вход , где каждая «уникальная особенность имеет уникальное значение», так что если вы хотите , чтобы индексы функций вы можете сделать что - то вроде:

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