Как удалить некоторые связанные компоненты в 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] - самый важный трюк с маской в ​​моем мнении.

Другие вопросы по тегам