【问题标题】:MATLAB: Create movie from cell array of uint8 imagesMATLAB:从 uint8 图像的元胞数组创建电影
【发布时间】:2016-11-22 15:15:22
【问题描述】:

我有 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。

【问题讨论】:

    标签: image matlab video image-processing movie


    【解决方案1】:

    如果您仔细查看您的代码,flow8 就是1 x 20。当你进行重塑时,你计算matSize

    matSize = size(flow8, 1)
    

    嗯,这个值是1,因为正如我们所说的,元胞数组的形状是1 x 20

    相反,您可能想要每张图片的大小。在这种情况下,您需要对元胞数组进行索引以获取值,然后获取 that 的大小。

    matSize = size(flow8{1});
    

    可能是另一种(更短)的方法来做到这一点,所以使用cat 沿第四维连接。然后你就避免了所有的reshapepermute 操作。

    imageStack = cat(4, flow8{:});
    

    【讨论】:

    • 该死的……别打我了! +1。
    • 我实际上把那行改成了matSize = size(flow8{1},1);,就成功了。非常感谢@Suever!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    相关资源
    最近更新 更多