Удалить сегменты из массива numpy, которые имеют общую интенсивность ниже определенного порога - PullRequest
1 голос
/ 15 апреля 2020

Я работаю над сценарием сегментации, который фильтрует сегменты на основе размера сегмента (области) и общей интенсивности пикселей в каждом сегменте.

Я выяснил, как удалять сегменты на основе области, следуя инструкциям ответ в этом посте:

Возвращение указателей c numpy индексов меток для изображения

В заключительной части скрипта я бы хотел удалить сегменты которые имеют общую интенсивность ниже определенного порога.

Надеюсь, этот пример показывает, что я пытаюсь выполнить sh:

import numpy as np
from scipy import ndimage
A = np.array([

      [0, 0, 0, 0, 0, 0, 2, 2, 0, 0],
      [0, 2, 7, 3, 0, 0, 0, 0, 0, 0],
      [0, 0, 4, 2, 0, 0, 0, 0, 0, 0],
      [0, 0, 2, 0, 0, 0, 0, 1, 0, 0],
      [0, 0, 0, 0, 0, 0, 2, 3, 0, 0],
      [0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
      [0, 0, 0, 5, 0, 0, 0, 0, 0, 0],
      [0, 0, 4, 9, 3, 0, 0, 4, 0, 0],
      [0, 0, 0, 6, 0, 0, 0, 5, 3, 0],
      [0, 3, 0, 0, 0, 0, 0, 0, 0, 0],
])

Я могу получить сумму каждого сегмента, используя:

label_A, nb_labels = ndimage.label(A)
seg_sum = ndimage.sum(A, label_A, range(nb_labels + 1))
seg_sum

Output: array([ 0.,  4., 20.,  7., 27., 12.,  3.])`

I хотелось бы иметь возможность конвертировать любые сегменты с суммой менее 10 в нули. Буду признателен за любую оказанную помощь. Спасибо

1 Ответ

1 голос
/ 15 апреля 2020

Работая с seg_sum, вы можете проверить, какие компоненты суммируют меньше 10, и использовать np.in1d, чтобы проверить, какие значения обнулить в A:

labels_to_zero = np.arange(1,len(seg_sum))[seg_sum[1:]>=10]
# array([2, 4, 5])

ix = np.in1d(label_A, labels_to_zero)

np.where(ix, A.ravel(), 0).reshape(A.shape)

array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 2, 7, 3, 0, 0, 0, 0, 0, 0],
       [0, 0, 4, 2, 0, 0, 0, 0, 0, 0],
       [0, 0, 2, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 5, 0, 0, 0, 0, 0, 0],
       [0, 0, 4, 9, 3, 0, 0, 4, 0, 0],
       [0, 0, 0, 6, 0, 0, 0, 5, 3, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...