我在使用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-elements"矩阵图片的图片。但显然它拥有比执行单一任务所需的更多内存。
有没有任何方法可以将2d图片序列的灰度值存储到matlab中的3d矩阵中,而不会浪费那么多时间和资源?
谢谢
答案 0 :(得分:1)
我能看到的唯一可能是你的意见不好。但我只能猜测,因为没有给出start step和End的值。如果End为100000000,Start为1且step为100000000,则您只读取2个图像,但是您正在访问值(:,:,100000000),从而使变量非常大。那很可能是你的问题。
要解决此问题,请创建一个新变量:
imagenames=Start:Step:End; %note that using End as a variable sucks, better ending
for ii=1:numel(imagenames);
file = strcat(folderStr, filenameStr, num2str(imagenames(ii)), '.png');
img = imread(file);
values(:,:,ii) = img;
end
正如Shai建议的那样,请查看fullfile
以获得更好的文件名访问权限