如何阅读tif文件的子部分以便更快地导入?

时间:2016-05-19 21:37:12

标签: image matlab image-processing tiff

我需要循环读取数千个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'.

1 个答案:

答案 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秒内写入磁盘。