2015-04-03 8 views
0

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

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

ответ

0

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

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

Пока datacube имеет байт данных, frame будут пригодны для IDLffVideoWrite::put.

UPDATE: редактирование ответа, потому что в комментарии есть ограниченные возможности форматирования.

Так что вы на самом деле есть 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]) 
+0

Спасибо большое! Еще один маленький вопрос, я переформатировал свой datacube, чтобы поиграть с моими данными, теперь куб содержит RGB-Data, но все еще имеет вид datacube [w, h, frames], например, фрейм 0 содержит Red, frame 1 содержит зеленый, а рамка 2 содержит синий цвет, а затем снова кадр 3 содержит красный и т. д. Как я могу отформатировать это сейчас эффективно в правильной рамке для метода Put-Method? – user3199134

+0

Снова большое спасибо за помощь, она отлично работает! – user3199134