Заменить все значения RGB выше порога - PullRequest
1 голос
/ 24 апреля 2019

У меня есть пустой массив 3 d, полный значений RGB, например, для приведенной формы = (высота, ширина, 3)

  matrix = np.array( [[[0,0.5,0.6],[0.9,1.2,0]])

Я должен заменить значение RGB, если какое-либо из значений вышеПорог, например, Порог = 0,8, замена = [2,2,2], затем

matrix = [[[0,0.5,0.6],[2,2,2]]

Как я могу сделать это на эффективный манер с NumPy?В настоящее время я использую двойной цикл for и проверяю, находится ли какое-либо значение rgb выше порога, я заменяю его, однако это довольно медленно для массива n = 4000.

Как бы я сделал это более эффективно с numpy, может быть, что-тос нп. где?

1 Ответ

1 голос
/ 24 апреля 2019

Я расширил вашу матрицу еще одним width измерением.

matrix = np.array([[[0,0.5,0.6],[0.9,1.2,0]],[[0,0.5,0.6],[0.9,1.2,0]]])

Вы можете построить маску, используя np.any на оси 2 (начинается с 0, поэтому третья ось):

mask = np.any((matrix > 0.8), axis=2)

# mask:
array([[False,  True],
       [False,  True]], dtype=bool)

matrix[mask] = np.array([2,2,2])

Ваш результат matrix:

array([[[ 0. ,  0.5,  0.6],
        [ 2. ,  2. ,  2. ]],

       [[ 0. ,  0.5,  0.6],
        [ 2. ,  2. ,  2. ]]])
...