【问题标题】:importing multipage TIFF image one page at a time一次一页导入多页 TIFF 图像
【发布时间】:2015-08-04 15:06:23
【问题描述】:

我有一些多页 TIFF 图像,每个 >4 GB 大小。我的电脑无法使用imread 处理导入,所以我想使用循环一次导入一页,用它做我想做的事,并在每一步清除内存。 我红色this post 关于这样做的可能性。无论如何,我似乎无法做我想做的事,就像我使用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。

【问题讨论】:

  • 也许可以尝试使用pdfimages - Poppler 包的一部分。

标签: image matlab multidimensional-array tiff imread


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多