在 MATLAB 中保存非常大的图像
Posted
技术标签:
【中文标题】在 MATLAB 中保存非常大的图像【英文标题】:saving a very large image in MATLAB 【发布时间】:2015-12-06 03:46:14 【问题描述】:我知道以前有人问过这个问题。但是,我找不到明确的答案。我有一个非常高分辨率的彩色图像的数据,大小为 50,000 x 60,000,数据类型为 unit8。我无法使用 imwrite 保存整个图像。我得到的错误是:
“图像必须包含少于 2^32 - 1 个字节的数据”
有没有办法在 MATLAB 中保存整个图像? 现在,我必须将数据分成更小的部分(子图像),然后使用 imwrite 将每个部分写入 png 文件。文件的输出格式并不重要。
【问题讨论】:
【参考方案1】:您的图像占用 8*50000*60000*3 = 7.2000e+10 字节的数据,是 MATLAB 图像大小限制的 16.7638 倍。为什么不将其拆分为 20 块,保存它们然后手动合并它们?如果您将图像分成 6 个 8x50000x3000x3 块,它们都将符合 2^32 的限制。
我确信 OP 有足够的能力来做到这一点,但我还是会解释这个过程。将您的图像转换为 50000x60000x3 数组并执行以下操作:
x = 0:3000:60000;
for i = 1:length(x)-1
imwrite(A(:,x(i)+1:x(i+1),:),strcat('image',num2str(i),'.png'),'png');
end
这将为您创建 20 个名称为“image1.png”、“image2.png”等的图像。然后,您可以使用this first google search result 手动合并这些图像。也许,有一些更好的方法可以做到这一点,但我认为这是最简单的方法。
【讨论】:
这就是我现在的做法。我在 adobe photoshop 中合并子图像。我想可能有一种方法,我不必使用任何其他软件来合并图像。 不确定OpenCV能否解决问题。【参考方案2】:Another question 有一个对我有用的答案:如果您的图像存储为双矩阵,请使用im2uint8(img)
转换为 uint8,然后保存。
【讨论】:
以上是关于在 MATLAB 中保存非常大的图像的主要内容,如果未能解决你的问题,请参考以下文章