MATLAB - 如何在不加载到内存的情况下读取大尺寸多频段TIFF

时间:2014-12-01 10:04:43

标签: image matlab memory load tiff

我有一个1675x965x365的TIFF图像(> 2GB),这个图像太大而无法在MATLAB中导入而不会让我的计算机速度大幅下降(到目前为止,我无法打开它!)。有没有一种有效的方法来读取我的图像,而不必将其加载到内存(我想这是问题)?无论如何,我的最终目标是将每个波段的值与其他波段相加,即得到尺寸为1675x965的二维图像,其中(例如)[1,1]中的像素是所有像素的总和。位置[1,1]的365个波段。我希望能够清楚地解释我的问题。提前谢谢!

2 个答案:

答案 0 :(得分:1)

使用imread ()的索引功能可以让您在任何时候都不会加载超过两个数据的平面:

ImgInfo = imfinfo('imgFile.tif');

BaseImg = zeros(ImgInfo(1).Width, ImgInfo(1).Height);

for k = 1:length(ImgInfo)

    BaseImg = BaseImg + double(imread('imgFile.tif', k, 'Info', ImgInfo));

end

BaseImg = BaseImg/length(ImgInfo);

答案 1 :(得分:0)

我已经编写了一个用于延迟加载TIFF图像的matlab类;数据保留在磁盘上,仅在访问时加载。这应该照顾你的记忆问题。看看它是否对你有帮助。

Lazy loading of TIFF stacks for Matlab