2010-03-09 32 views
7

这里的多个图像是期望的工作流程:载入在MATLAB

  • 欲100倍的图像加载到MATLAB工作区
  • 运行上的图像
  • 保存我的输出一堆我的代码(输出由我的代码返回是一个整数阵列)在一个新的阵列

到最后,我应该有一个数据结构存储图像1-100代码的输出。

我该怎么做呢?

回答

4

假设你的图像在一个连续的命名方式,你可以这样做:

N = 100 
IMAGES = cell(1,N); 
FNAMEFMT = 'image_%d.png'; 

% Load images 
for i=1:N 
    IMAGES{i} = imread(sprintf(FNAMEFMT, i)); 
end 

% Run code 
RESULT = cell(1,N); 

for i=1:N 
    RESULT{i} = someImageProcessingFunction(IMAGES{i}); 
end 

单元阵列RESULT则包含每个图像的输出。

请注意,根据图像的大小,预取图像可能会导致内存不足。

8

如果您知道所在目录的名称,或者如果您转到该目录,请使用dir获取映像名称列表。

现在,它只是一个for循环加载图像。将图像存储在单元阵列中。例如...

D = dir('*.jpg'); 
imcell = cell(1,numel(D)); 
for i = 1:numel(D) 
    imcell{i} = imread(D(i).name); 
end 

请注意这100个图像会占用太多的内存。例如,如果是uint8 RGB值,则单个1Kx1K图像需要3兆字节才能存储。这似乎不是一个巨大的数额。

但是,这些图像中的100个将需要300 MB的RAM。真正的问题是如果您对这些映像的操作将它们变成双打,那么它们现在将占用2.4 GIGA内存。这会很快耗尽你拥有的RAM数量,特别是如果你不使用64位版本的MATLAB。

4

正如很多人所说,这可能会相当大。完成后是否有理由在记忆中需要所有这些内容?当你完成它们时,你可以将单个结果写成文件吗?这样在给定的时间内,你永远不会有超过内存中的输入和输出图像?

IMWRITE在你完成后很容易让他们失去记忆。