一次导入多页TIFF图像

时间:2015-08-04 15:06:24

标签: image matlab multidimensional-array tiff imread

我有一些多页TIFF图像,每个图像大小为4 GB。我的电脑无法使用imread处理导入,因此我想使用循环一次导入一个页面,按照我想要的方式执行操作,并在每一步清除内存。 我红了this post关于这样做的可能性。无论如何,我似乎无法做我想做的事情,就像当我使用info=imfinfo('my_image.tif'),然后numel(info)(如我链接的帖子中所建议的那样)时,这最后一个命令应该告诉我我的多页TIFF中的页数,但它只输出1.我想这与我创建图像的方式有关:我使用了GRASS GIS(结合i.groupr.out.gdal函数)。< / p>

此外,我从imfinfo获得的信息显示了不同声音的页数(720):

  1. BitsPerSample1x720 double
  2. SamplesPerPixel720
  3. MaxSampleValueMinSampleValue(都是1x720 double
  4. SampleFormat1x720 cell
  5. 编辑1

    我忘了提及我的代码(就像链接一样):

    fname = 'my_file_with_lots_of_images.tif';
    info = imfinfo(fname);
    num_images = numel(info);
    for k = 1:num_images
        A = imread(fname, k, 'Info', info);
        % ... Do something with image A ...
        clear A
    end
    

    当我运行时,MATLAB被卡住了。我也尝试设置k = 1:2来测试两个页面的导入,但程序仍然被卡住了,我认为它不是只导入一个页面而是同时导入所有页面。图像尺寸为1677x927x720。

1 个答案:

答案 0 :(得分:0)

根据我的经验,Matlab在释放内存方面存在问题,它似乎也取决于您所使用的操作系统(see here)。

我会在循环结束时设置断点,因此您可以在一次迭代后检查是否只在调试器中导入了图像。此外,如果您在明确通话后check for memory,您可能会知道发生了什么。

另外值得注意的可能是尝试其他导入功能,例如tiffread2,它针对tiff堆栈进行了优化,对我来说效果很好,但我的堆栈小于1GB。