在MATLAB中加载多个图像

时间:2010-03-09 10:04:16

标签: matlab image-processing

以下是所需的工作流程:

  • 我想将100张图片加载到MATLAB工作区
  • 在图片上运行一堆我的代码
  • 在新数组中保存我的输出(我的代码返回的输出是一个整数数组)

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

我将如何做到这一点?

3 个答案:

答案 0 :(得分:9)

如果您知道它们所在目录的名称,或者您是否知道该目录,那么请使用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 GIGAbytes的内存。这将很快占用你的RAM量,特别是如果你没有使用64位版本的MATLAB。

答案 1 :(得分: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包含每个图像的输出。

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

答案 2 :(得分:4)

正如许多人所说,这可能会变得非常大。当你完成后,你有没有理由在记忆中需要所有这些?你完成它们后可以把各个结果写成文件,这样你在给定的时间内输入和输出图像就不会超过内存吗?

当你完成时,IMWRITE会让你的内存不足。