Как удалить некоторые связанные компоненты в Python?
Рассмотрим бинаризованное изображение, я использую scipy.ndimage.label()
на нем, а затем применить find_objects()
на результат.
Теперь у меня есть список кортежей, состоящий из N кортежей, каждый из которых состоит из двух частей, например:
index value
0 (slice(0, 21, None) slice(0, 12, None))
1 (slice(0, 42, None) slice(7, 31, None))
. (...., ....)
который описывает координату границы xy из-за связанного компонента.
Взять кортеж index 0 в качестве примера:
slice(0, 21, None)
означает номер строки от 0 до 21 и
slice(0, 12, None)
означает номер столбца от 0 до 12.
Итак, мы будем знать, что область этой копии 21 * 12 = 252
,
Теперь я хочу удалить те подключенные компоненты, площадь которых меньше 300.
Я уже знаю, чтобы сделать это итерации по всем из них. Я хотел бы сделать это более эффективным способом; кто нибудь знает как это сделать?
1 ответ
Используйте этот код, чтобы решить мою проблему:
def CC(Map):
label_img, cc_num = ndimage.label(Map)
CC = ndimage.find_objects(label_img)
cc_areas = ndimage.sum(Map, label_img, range(cc_num+1))
area_mask = (cc_areas < 1500)
label_img[area_mask[label_img]] = 0
return label_img, CC
area_mask [label_img] - самый важный трюк с маской в моем мнении.