MATLAB: создание фильма из массива изображений uint8
У меня есть 20 изображений в градациях серого типа uint8
хранится в массиве ячеек 1x20 с именем flow8
, Я хочу создать фильм из них. Мой текущий подход:
% Generate images.
for i = 1:20
flow8{i} = round(rand(100, 100)*255+1);
end
% Get into 4-D shape.
n = size(flow8,2);
matSize = size(flow8,1);
imageStack = reshape(cell2mat(flow8),matSize,[],n);
imageStack = permute(imageStack, [1 2 4 3]);
% Create movie.
mov = immovie(imageStack, gray)
implay(mov)
Здесь я добавил цикл генерации изображения, чтобы сделать код компилируемым.
С этим кодом сгенерированный фильм состоит только из одной горизонтальной линии.
Что мне нужно сделать, чтобы получить правильный фильм? Или есть лучший способ сделать фильм из моих изображений?
Я использую MATLAB R2015b Academic на Windows 7.
1 ответ
Если вы внимательно посмотрите на свой код, flow8
является 1 x 20
, Когда вы делаете свое изменение, вы вычисляете matSize
с:
matSize = size(flow8, 1)
Ну, это значение 1
потому что, как мы уже говорили, форма массива ячеек 1 x 20
,
Вместо этого вы, вероятно, хотели размер каждого изображения. В этом случае вы захотите проиндексировать массив ячеек, чтобы получить значение, а затем принять его размер.
matSize = size(flow8{1});
Потенциально другой (гораздо более короткий) способ сделать это, хотя, так что используйте cat
объединить вдоль 4-го измерения. Тогда вы избегаете всего reshape
а также permute
Манипуляции.
imageStack = cat(4, flow8{:});