如何读取 tif 文件的一部分以加快导入速度?

How can I read a subsection of tif files for faster import?

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

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

有没有办法导入图片的一部分来显着改进导入过程?还有其他建议吗?

这是代码的导入部分:

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

P.S。我尝试使用 PixelRegions。但是我有 Matlab 2014,我得到这个错误:

Undefined function or variable 'PixelRegion'.

考虑在命令行中使用 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 个 运行dom 数据的 TIF 图像,所有大小均为 3,500x3500 像素,然后 运行 GNU Parallel + vips 命令上面从 1,000 个 TIF 中的每一个中提取 100x100 像素的区域。

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