Объединить маску по всем каналам - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть некоторые условия, проверенные во всех 3 каналах изображения, поэтому у меня есть что-то вроде:

import numpy as np
check = np.array([[[True, True], [True, False]], [[True, False], [False, False]], [[True, True], [True, True]]])

где размеры: канал (RGB), высота, ширина.
Я хочу получить 2D-массив, который показывает, что все соответствующие пиксели разных каналов имеют значение true, поэтому я хочу получить

result = np.array([[True, False], [False, False]]) 

В настоящее время я делаю это следующим образом:

result = np.logical_and(check[0, :, :], check[1, :, :], check[2, :, :])

Но Я уверен, что есть более элегантный способ сделать это

1 Ответ

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

Вы можете использовать numpy .all вдоль интересующей оси:

import numpy as np

check = np.array([[[True, True], 
                   [True, False]], 
                  [[True, False], 
                   [False, False]], 
                  [[True, True], 
                   [True, True]]])

np.all(check, axis=0)
array([[ True, False],
       [False, False]])

В качестве альтернативы вы можете использовать списочное понимание на check только потому, что вы сравниваете по первая ось:

np.logical_and(*[c for c in check])
array([[ True, False],
       [False, False]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...