gpt4 book ai didi

matlab - 将 Matlab 图形保存为图像(例如 PNG)的快速计算方法

转载 作者:行者123 更新时间:2023-12-01 16:42:14 25 4
gpt4 key购买 nike

我有一个程序,可以创建很多图,我想将它们保存为 fig001、fig002、...。目前,我能做到这一点的唯一方法是在使用 print() 时将它们一一保存,或者将它们保存到图形对象 FIG 中.

不幸的是,我必须按顺序创建绘图(无法并行化)。如果我边保存边保存,那么这需要相当长的时间;如果我存储在 FIG 中,然后对所有数字执行 parfor 循环,那么速度会更快。但是,它仍然相当慢,并且是我的代码中的主要瓶颈。

Matlab 会自动写入 1200x900 像素图像。实际上,它只是一个带有一些(水平)直线的图表。我真的不需要很高的图像质量;也许减少这个会有助于加快速度?我也找不到如何做到这一点。

我在网上查看过,特别是其他SE问题,但我一直无法找到解决方案。关于“玩转硬核函数”有很多内容。我是一名数学家,想要一个代码来获得对问题的一些直觉;我不是一个合格的程序员!因此,“玩弄一个函数”(这可能会导致 Matlab 崩溃)对我来说相当困难!


我已经使用 Matlab movie 函数对此进行了排序。感谢塞西莉亚的帮助!

最佳答案

因为您的目的是在幻灯片中使用图像。我建议制作一部电影并使用它。我已经进行了一些测试,保存电影比保存单个 png 快得多。在我的简单测试中,我发现速度提高了大约 5 倍。

numImages = 25;

%Saving one figure at a time
tic;
for i= 1:numImages
x = 0:0.1:2*pi;
y = i*sin(x);
plot(x, y);

fig = gcf;
print('img.png', '-dpng', '-r50'); %Downsample resolution
end
toc;

tic;

%Saving a movie
v = VideoWriter('mov.avi');
open(v);
for i = 1:numImages
x = 0:0.1:2*pi;
y = i*sin(x);
plot(x, y);

drawnow; %Force the figure to render
frame = getframe; %Convert the figure to a movie frame
writeVideo(v, frame); %Write the frame to the movie file
end
close(v);

toc;

使用 writeVideo 还具有永远不会将整个电影存储在内存中的优点。相反,当捕获每一帧时,它会立即写入文件。一个缺点是,由于需要以正确的顺序写入帧,因此您不能使用 parfor

您还可以考虑制作电影矩阵。每个元素都是一个框架。因此,要初始化矩阵的大小,您需要类似的东西

numImages = 25;
mov(numImages) = struct('cdata',[],'colormap',[]);

然后使用 parfor,您可以按正确的顺序将所有图像分配到 mov 矩阵。循环完成后,您可以使用 VideoWriter 将影片写入文件。然而,在生成图形时,您需要将整个电影保存在内存中,并且存在与 parfor 相关的开销,因此它最终可能不会更高效。

关于matlab - 将 Matlab 图形保存为图像(例如 PNG)的快速计算方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41148284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com