2017-01-02 6 views
1

Предположим, у меня есть массив ввода numpy формы (B, H, W, C) и есть сетка, состоящая из значений x формы (B, W) и значений y формы (B, H).Векторизация массива массивов изображений пиксельных изображений

Моя цель - использовать значения x и y для захвата значений C массива изображений. Я могу сделать это, когда B = 1, когда мое изображение имеет форму (H, W, C) и когда x и y имеют форму (H\W,), но не имеют понятия, как развернуть это до партии изображений, содержащихся в одном массиве numpy.

Есть ли какая-то перестройка, которую я могу использовать?

Пример

Предположим, что у меня есть 2 кошки изображений размером (400, 400, 3). Затем input_img.shape = (2, 400, 400, 3).

У меня есть список x.shape = (2, 400) и y.shape = (2, 400) и хотели бы проиндексировать в input_img таким образом, что я получаю для каждого (x_i, y_i) Массив z_i.shape = (C,) на общую сумму z.shape = (400, C).

То, что я пытаюсь Vectorize

for i in range(batch_size): 
    z_i = input_img[i, x[i], y[i]] 
+0

Добавить случай образец? – Divakar

+0

@ Дивакар только что добавил :) –

+0

Не могли бы вы заполнить итеративный код? Итак, я предполагаю, что это будет идти по этим строкам: 'z_i = input_img [.....]'. Я не уверен в этой части '.....', которая, как я предполагаю, будет включать в себя x_i и y_i. – Divakar

ответ

2

Вот подход с использованием advanced-indexing -

input_img[np.arange(batch_size)[:,None], x, y] 
+0

Спасибо, что сработало, но это не дало результата, которого я ожидал. Я получил выходной образ формы (2, 400, 3), поэтому мне не хватает измерения (2, 400, 400, 3). У вас есть какая-то подсказка, как я могу исправить код для оценки значений пикселей для meshgrid (x_i y_i)? –

+0

@KevinZakka Попробуйте: 'input_img [np.arange (batch_size) [:, None, None], x [:, None], y]'? – Divakar

+0

Большое спасибо! 'input_img [np.arange (batch_size) [:, None, None], y0, x0]' сделал трюк :) –