How to improve speed when printing multiple images inside a for loop

My code generates a figure on each iteration of a for loop, which is printed to a png file each time. Is there a way to speed up this process by letting Matlab continue with the loop while the printing is ongoing? (like a fork-join kind of flow). Any help will be welcome. Example code:
for k=1:10
aux = randn(1e3);
fh = figure('visible','off'); imagesc(aux);
print(fh,'-dpng','-r0','./temp.png'); close(fh)
end

2 Comments

You are overwriting the image on each loop iteration. And have you tried parfor?
The actual code within the for loop (not the example I wrote above) is not compatible with parfor (neither it overwrites the image each time).

Sign in to comment.

 Accepted Answer

I just found a solution form the parallel computing toolbox, which is the use of parfeval function. This function allows an asynchronous running of another function. The original example is optimized by writing
for k=1:10
aux = randn(1e3);
fh = figure('visible','off'); imagesc(aux);
parfeval(@print,0,fh,'-dpng','-r0','./temp.png'); close(fh)
end

More Answers (1)

It is also possible print is inherently slower than it could be, in which case the screencapture FEX submission by Yair Altman might result in a speed increase. You can even use that parfeval in combination with this.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Products

Asked:

on 1 Feb 2018

Answered:

Rik
on 2 Feb 2018

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!