【发布时间】:2016-07-04 10:32:16
【问题描述】:
我在使用 matlab 2015a Win10 X64 16GB Ram 时遇到一些问题。
有一堆图像(1280x960x8bit),我想将它们加载到 3d 矩阵中。理论上,对于 1001 张图像,矩阵应该存储约 1.2GB。
到目前为止我所拥有的是:
values(:,:,:)= zeros(960, 1280, 1001, 'uint8');
for i = Start:Steps:End
file = strcat(folderStr, filenameStr, num2str(i), '.png');
img = imread(file);
values(:,:,i-Start+1) = img;
end
此代码适用于少量图像,但将其用于所有 1001 个图像我得到“内存不足”错误。 另一个问题是速度。 读取 50 张图片并保存大约需要 2 秒,读取 100 张图片大约需要 48 秒。
我认为这种方法的作用是分配内存并逐张更改矩阵的“z元素”。但显然它拥有的内存超出了执行单个任务所需的内存。
有没有什么方法可以将 2d 图片序列的灰度值存储到 matlab 中的 3d 矩阵中,而不会浪费那么多时间和资源?
谢谢
【问题讨论】:
-
你可以Download more RAM 。严肃地说,如果您的计算机 RAM 无法存储该信息,您将无法创建包含所有信息的单个变量.....您应该如何处理它?如果它是一个变量,那么任何涉及它的东西都需要加载整个变量,而且它不适合你的记忆!!但是,请检查变量类型。 img 是
double还是uint8?它的范围是多少? -
补充一下我所说的。如果你把它们加载为
uint8(imread(file)),你还会得到错误吗? -
分辨率 1280x960x8bit depthx1001 图片 = 1174MB 有超过 14GB 的免费 RAM,这应该不是问题! No uint8(..) is not working 图片是8bit色深。
-
内存中的图片也是8bit色深吗?当您输入
whos img时,它会告诉您这是 Classuint8吗?另外,为什么不迭代为i=1:steps:1001?如果在您的代码中未设置 for 循环变量,则值会增长很多。你也可以从values的定义中删除(:,:,:) -
图片为8位色深(也在whos img中)。我不使用 i=1:steps:1001 因为图像的名称不是 1,2,3,4,... 因为它们是以传感器的位置命名的。肯定还有另一个问题,正如我所说的,最初读取 50 张图像运行良好且速度足够快,但随着图像数量的增加,它使用的内存和时间呈指数级增长。
标签: matlab