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{:});
Другие вопросы по тегам