如何读取 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 秒内写入磁盘。
我需要循环读取数千个 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 秒内写入磁盘。