Увеличение значения ROI, которое (возможно) частично выходит за пределы в Python - PullRequest
0 голосов
/ 14 мая 2018

У меня есть массив, который должен быть частично увеличен со значениями другого (меньшего) массива.Однако, даже если меньший массив начинается в границах большего массива, он может переполниться в некоторых случаях, как показано ниже.

enter image description here

В этом случае я все еще хочу, чтобы значения увеличивались / модифицировались таким образом, чтобы обрезал переполненные индексы и использовал то, что остается внутри границ.

Вот как я это делаюна данный момент

h = big_image.shape[0]
w = big_image.shape[1]

small_image = make_small_image(c) # c is the edge length

if (x+c) > w:
   small_image = small_image[:(w - x), :]

if (y+c) > h:
   small_image = small_image[:, :(h - y)]

big_image[y:y + c, x: x + c] += small_image.T

Интересно, есть ли более простой и быстрый способ сделать это (API или более совершенная техника и т. д.)

1 Ответ

0 голосов
/ 14 мая 2018

Прямо сейчас вы модифицируете массив small_image и таким образом создаете новую копию данных, когда условие if равно True.Вместо этого вы можете просто создать представление памяти для обрезанного небольшого изображения:

small_img_memview = small_image[:(w - x), :(h - y)]

Это всегда должно быть правильно, даже в случае, если условия if False и должны выполняться быстрее, чем копирование.

Конечно, вы также можете просто написать весь код в одну строку:

big_image[y:y + c, x: x + c] += small_image[:(w - x), :(h - y)].T
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...