在没有并行处理工具包的情况下,在MATLAB中对非常大的图像集进行图像处理的并行化

时间:2015-04-06 08:49:36

标签: image matlab parallel-processing

我在一台计算机上处​​理大约2,500,000张图像。我目前按顺序运行一个输入图像,用于单个输出到我的函数(计算需要大约5秒)。这显然需要太多时间。我可以采用哪些其他方法来加快这一过程?我想过启动MATLAB的多个实例并在数据子集上运行每个实例,但我不确定我是否真的实现了这种方法的并行性。什么是提高整体速度的更好方法?

1 个答案:

答案 0 :(得分:0)

由于没有人似乎在帮忙,我想我会尝试一下,看看能否让你开始进行一些并行化。我不使用Windows或Matlab,因此可能需要进行一些修正......所以,如果有人知道更好......请随时做出贡献。

你可以在Windows下的Cygwin下安装GNU Parallel - 如果你谷歌的话,有很多教程和博客描述这个过程。

首先,我猜/希望以下命令将从命令行处理一个这样的图像,所以做一个小实验,看看在你进入下一步之前它是否会起作用

matlab.exe -nodisplay -nosplash -nodesktop -r "run('mfile.m image.jpg');exit;"

然后,要并行运行,您需要生成所有2,500,000个JPEG的列表,这样看起来就像这样

DIR /B /S | FINDSTR /I "*JPG$"

你需要将它提供给GNU Parallel,就像这样

DIR /B /S | FINDSTR /I "*JPG$" | parallel matlab.exe -nodisplay -nosplash -nodesktop -r "run('mfile.m {}');exit;"

显然,在虚拟目录中使用一些文件的副本对此进行测试,以免被破坏或覆盖。

正如@Daniel建议的那样,启动Matlab会有开销,所以更改代码以处理作为参数提供的所有图像可能会更好,那么也许你可以将2-8个图像传递给Matlab的每个调用,类似于每个Matlab工作4个图像:

DIR /B /S | FINDSTR /I "*JPG$" | parallel -N 4 matlab.exe -nodisplay -nosplash -nodesktop -r "run('mfile.m {1} {2} {3} {4}');exit;"