Я работаю над скриптом сегментации, который фильтрует сегменты на основе размера сегмента (площади) и общей интенсивности пикселей в каждом сегменте.
Я понял, как удалить сегменты в зависимости от площади, следуя ответу в этом посте:
Возврат определенных индексов меток numpy для изображения
В заключительной части скрипта я хотел бы удалить сегменты, общая интенсивность которых ниже определенного порога.
Надеюсь, этот пример показывает, чего я пытаюсь достичь:
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.])`
Я хотел бы иметь возможность преобразовывать любые сегменты с суммой меньше 10 в нули. Любая помощь очень ценится. Спасибо
1 ответ
Работая с 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]])
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.