我想使用parfor循环进行图像处理。我对单幅图像和图像堆栈进行操作。为了保持较低的内存使用量,我想阻止将所有图像存储在内存中。如何在不将所有图像加载在一起的情况下使用PARFOR循环进行图像处理
我从单元格结构变量开始Imagepaths {} {}包含 路径的单元格结构中单元格中的不同图像。 功能1在所有单个图像上运行并且功能2对图像堆栈进行操作,将它们组合成单个新图像。
例如:Imagepaths {} {}包含12个单元格。每个单元格包含一个1x5单元格和图像的路径。 功能2对这样的1x5图像堆栈进行操作。
以下代码我最初尝试使用,但变量Images {}给PARFOR循环提供了一个错误。
parfor l = 1:numel(Imagepaths)
for k = 1:numel(Imagepaths{l})
Image = imread(Imagepaths{l}{k});
Images{k} = function1(Image)
end
Image2{l} = function2(Images)
end
我附带了以下解决方案,但缺点是它需要大量的内存,因为所有的图像都存储。
parfor l = 1:numel(Imagepaths)
for k = 1:numel(Imagepaths{l})
Image = imread(Imagepaths{l}{k});
Images{l}{k} = function1(Image)
end
end
parfor l = 1:numel(Imagepaths)
Image2{l} = function2(Images{l})
end
有人可以提到一个解决方案来保存所有图像。
非常感谢您的回答。实际上,你的解决方案,迫使“图像”是暂时的,足以让“parfor”工作,我发现。但使用“tmp”也可以保留将不必要的信息发送到不同的核心,尽管它不是很多。 –