我需要循环读取数千个TIF文件(大小为3500x3500)。
imread是最大的瓶颈。我只处理图像的一小部分,我有行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'.
答案 0 :(得分:3)
考虑在命令行使用 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
我建议您在开始试验之前进行备份......
基准时间
我创建了1000张随机数据的TIF图像,全部大小为3,500x3500像素,然后运行上面的 GNU Parallel + vips 命令,从1000个TIF中的每一个中提取100x100像素的区域。 / p>
在合理的规格iMac上,提取了1,000个子图像并在11秒内写入磁盘。