Изменение подмассива, выбранного двумя последовательными логическими массивами - PullRequest
0 голосов
/ 07 июня 2018

Я хотел бы изменить подмножество массива, который выбирается двумя последовательными логическими массивами.В моем случае у меня есть изображение im, и я вытаскиваю интересующую область roi, используя какое-то условие.С пикселями в области интереса я делаю некоторые вычисления и получаю субрегион target.Теперь я хочу применить преобразование к пикселям в target в исходном изображении.В коде:

x, y = np.meshgrid(np.arange(800), np.arange(600))
im = (x + y) / 6 # a test image to work with
# use some arbitrary conditions to illustrate this
roi = (im > 64) & (im < 128)
target = (im[roi] & 0xf) > 0x7

Теперь я хочу сделать что-то вроде

im[roi][target] = 0

, но это происходит молча, потому что im[roi] напрямую не ссылается на элементы исходного массива (в отличие от обычного среза).

Какой хороший чистый способ сделать то, что я хочу здесь?

1 Ответ

0 голосов
/ 07 июня 2018

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

roi[roi] = target
im[roi] etc.

Это перезаписывает roi.Если вам нужно сохранить его:

roit = np.zeros_like(roi)
roit[roi] = target
im[roit] etc.

Или используйте индексы:

import operator
I, J = map(operator.itemgetter(target), np.where(roi))
im[I, J] etc.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...