一次一页导入多页TIFF图像



我有一些多页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

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

我会在循环结束时设置一个断点,这样您就可以在一次迭代后检查调试器中是否只导入了image。另外,如果你在调用完clear后马上检查内存,你可能会知道发生了什么。

同样值得注意的可能是尝试其他导入函数,如tiffread2,它是为tiff堆栈优化的,对我来说工作得很好,但我的堆栈小于1GB。

相关内容

  • 没有找到相关文章

最新更新