在MATLAB中加载多个图像
image-processing
matlab
26
0

这是所需的工作流程:

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

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

我将如何去做?

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

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

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

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

请注意,这100张图像将占用过多的内存。例如,如果一个单一的1Kx1K图像是uint8 RGB值,则将需要3 MB来存储。这看起来似乎不是很大。

但是,其中100张映像将需要300 MB RAM。真正的问题是,如果您对这些图像进行的操作将它们变成两倍,那么它们现在将占用2.4 GIGA内存。这将很快消耗掉您拥有的RAM,特别是如果您未使用64位版本的MATLAB。

收藏
评论

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

完成后,使用IMWRITE可以将它们从内存中取出。

收藏
评论

假设您的图像是按顺序命名的,则可以执行以下操作:

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包含每个图像的输出。

请注意,根据图像的大小,预取图像可能会耗尽内存。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题