在MATLAB中加载多个图像

Jon*_*nny 7 matlab image-processing

这是所需的工作流程:

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

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

我该怎么做呢?

小智 9

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

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

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

请注意,这100张图片会占用太多内存.例如,如果是uint8 RGB值,则单个1Kx1K图像将需要3兆字节存储.这可能看起来不是很大.

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


Han*_*rén 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
Run Code Online (Sandbox Code Playgroud)

然后,元胞数组RESULT包含每个图像的输出。

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