1

我有一些多页 TIFF 图像,每个 >4 GB 大小。我的电脑无法处理导入imread,所以我想使用循环一次导入一页,用它做我想做的事,并在每一步清除内存。我把这篇文章加红了关于这样做的可能性。无论如何,我似乎无法做我想做的事,就像我使用info=imfinfo('my_image.tif'), 然后numel(info)(如我链接的帖子中所建议的那样),最后一个命令应该告诉我我的多页 TIFF 中的页数,但它仅输出 1。我想这与我创建图像的方式有关:我使用了 GRASS GIS(结合了i.groupr.out.gdal函数)。

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

  1. BitsPerSample(即1x720 double
  2. SamplesPerPixel(即720
  3. MaxSampleValueMinSampleValue(都是1x720 double
  4. SampleFormat(即1x720 cell

编辑 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。

4

1 回答 1

0

根据我的经验,Matlab 在释放内存方面存在问题,而且它似乎也取决于您使用的操作系统(请参见此处)。

我会在循环结束时设置一个断点,这样您就可以在一次迭代后检查调试器中是否只导入了图像。此外,如果您在明确呼叫后立即检查内存,您可能会知道发生了什么。

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

于 2015-08-04T21:22:40.597 回答