【问题标题】:How can I read a subsection of tif files for faster import?如何读取 tif 文件的一小部分以加快导入速度?
【发布时间】:2016-05-20 19:56:33
【问题描述】:

我需要循环读取数千个 TIF 文件(大小为 3500x3500)。

而imread是最大的瓶颈。我只处理我拥有 row-col 范围的图像的一小部分。

是否可以导入图像的一部分以显着改进导入过程?还有其他建议吗?

这是代码的导入部分:

for m = 1:length(pFileNames)
    if ~exist(precipFileNames{m}, 'file')
        continue;
    end
    pConus = imread(pFileNames{m});
end

附:我尝试使用 PixelRegions。但我有 Matlab 2014,我得到这个错误:

Undefined function or variable 'PixelRegion'.

【问题讨论】:

    标签: image matlab image-processing tiff


    【解决方案1】:

    考虑在命令行中使用 vips 从每个图像中提取您想要的区域,命令如下:

    vips extract_area INPUT.TIF OUTPUT.TIF left top width height
    

    然后将其与 GNU Parallel 结合,一次执行 4 或 8 个,如下所示:

    parallel vips extract_area {} sub_{} left top width height ::: *.tif
    

    我建议您在开始实验之前先备份...

    基准时间

    我创建了 1,000 张随机数据的 TIF 图像,所有图像的大小均为 3,500x3500 像素,然后运行上面的 GNU Parallel + vips 命令,从 1,000 个 TIF 中的每一个中提取 100x100 像素的区域。

    在合理规格的 iMac 上,1000 个子图像在 11 秒内被提取并写入磁盘。

    【讨论】:

      猜你喜欢
      • 2011-09-17
      • 1970-01-01
      • 2015-11-07
      • 2011-07-07
      • 2019-07-20
      • 2018-03-26
      • 2019-08-13
      • 2011-06-25
      • 1970-01-01
      相关资源
      最近更新 更多