【问题标题】:Loading multiple images in MATLAB在 MATLAB 中加载多个图像
【发布时间】:2012-07-20 14:20:49
【问题描述】:

这是所需的工作流程:

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

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

我该怎么做呢?

【问题讨论】:

    标签: matlab image-processing


    【解决方案1】:

    如果您知道它们所在目录的名称,或者如果您 cd 到该目录,则使用 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 MB 来存储。这似乎不是一个巨大的数额。

    但是其中 100 个图像将需要 300 MB 的 RAM。如果您对这些图像的操作将它们变成双精度图像,那么真正的问题就出现了,那么它们现在将占用 2.4 GB 的内存。这将很快耗尽您拥有的 RAM 量,尤其是在您使用的不是 64 位版本的 MATLAB 时。

    【讨论】:

      【解决方案2】:

      假设您的图像是按顺序命名的,您可以这样做:

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

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

      【讨论】:

        【解决方案3】:

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

        当你完成后,IMWRITE 会很好地让它们从内存中消失。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-05
          • 1970-01-01
          • 2015-02-16
          • 2017-07-31
          • 2013-01-22
          • 2016-12-06
          相关资源
          最近更新 更多