MATLAB:从 uint8 图像的元胞数组创建电影
MATLAB: Create movie from cell array of uint8 images
我有 20 张 uint8
类型的灰度图像存储在名为 flow8
的 1x20 元胞数组中。我想用它们制作一部电影。我目前的做法是:
% 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)
在这里,我添加了图像生成循环以使代码可编译。
使用这段代码,生成的电影只有一条水平线。
我需要做什么才能获得合适的电影?或者有没有更好的方法可以将我的图像制作成电影?
我在 Windows 7.
上使用 MATLAB R2015b academic
如果您仔细查看您的代码,flow8
是 1 x 20
。当您进行重塑时,您计算 matSize
时:
matSize = size(flow8, 1)
嗯,那个值是 1
,因为正如我们所说的元胞数组的形状是 1 x 20
。
相反,您可能想要 每张图片 的大小。在这种情况下,您需要对元胞数组进行索引以获取值,然后获取 that.
的大小
matSize = size(flow8{1});
可能是另一种(更短的)方法来做到这一点,所以它使用 cat
沿着第 4 个维度连接。然后你避免了所有的 reshape
和 permute
操作。
imageStack = cat(4, flow8{:});
我有 20 张 uint8
类型的灰度图像存储在名为 flow8
的 1x20 元胞数组中。我想用它们制作一部电影。我目前的做法是:
% 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)
在这里,我添加了图像生成循环以使代码可编译。
使用这段代码,生成的电影只有一条水平线。
我需要做什么才能获得合适的电影?或者有没有更好的方法可以将我的图像制作成电影?
我在 Windows 7.
上使用 MATLAB R2015b academic如果您仔细查看您的代码,flow8
是 1 x 20
。当您进行重塑时,您计算 matSize
时:
matSize = size(flow8, 1)
嗯,那个值是 1
,因为正如我们所说的元胞数组的形状是 1 x 20
。
相反,您可能想要 每张图片 的大小。在这种情况下,您需要对元胞数组进行索引以获取值,然后获取 that.
的大小matSize = size(flow8{1});
可能是另一种(更短的)方法来做到这一点,所以它使用 cat
沿着第 4 个维度连接。然后你避免了所有的 reshape
和 permute
操作。
imageStack = cat(4, flow8{:});