IDL - преобразование 2D-массива в 3D-массив

В IDL у меня есть куб данных, содержащий изображения (в градациях серого) в разное время: куб данных [w, h, frames]. Теперь я хочу преобразовать этот куб данных в анимацию, используя IDLFFVideoWrite, но проблема в том, что метод Put использует только кадры из сортировочного фрейма [3, w, h].

Как я могу преобразовать один кадр моего куба данных в подходящий кадр, который будет использовать IDLffVideoWrite::Put?

1 ответ

Решение

У вас есть изображения в оттенках серого, поэтому нам нужно сделать все три полосы (R, G и B) просто копиями одной полосы. REBIN а также REFORM инструменты для "жонглирования размерами" вот так:

frame = rebin(reform(datacube[*, *, i], 1, w, h), 3, w, h)

Пока datacube имеет байтовые данные, frame подойдет для IDLffVideoWrite::put,

ОБНОВЛЕНИЕ: редактирование ответа, потому что у меня ограниченные возможности форматирования в комментарии.

Итак, у вас есть datacube этой формы тогда:

datacube[w, h, 3 * n_frames]

Так что вы должны сделать это, чтобы datacube чтобы было легче иметь дело с:

datacube = transpose(reform(datacube, w, h, 3, n_frames), [2, 0, 1, 3])

Затем, чтобы получить iЭтот кадр вы можете просто сделать:

frame = reform(datacube[*, *, *, i])
Другие вопросы по тегам