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])