我有一个1675x965x365的TIFF图像(> 2GB),这个图像太大而无法在MATLAB中导入而不会让我的计算机速度大幅下降(到目前为止,我无法打开它!)。有没有一种有效的方法来读取我的图像,而不必将其加载到内存(我想这是问题)?无论如何,我的最终目标是将每个波段的值与其他波段相加,即得到尺寸为1675x965的二维图像,其中(例如)[1,1]中的像素是所有像素的总和。位置[1,1]的365个波段。我希望能够清楚地解释我的问题。提前谢谢!
答案 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类;数据保留在磁盘上,仅在访问时加载。这应该照顾你的记忆问题。看看它是否对你有帮助。