【问题标题】:read 2d grey images and combine them to 3d matrix读取 2d 灰度图像并将它们组合成 3d 矩阵
【发布时间】: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 时,它会告诉您这是 Class uint8 吗?另外,为什么不迭代为 i=1:steps:1001 ?如果在您的代码中未设置 for 循环变量,则值会增长很多。你也可以从values的定义中删除(:,:,:)
  • 图片为8位色深(也在whos img中)。我不使用 i=1:steps:1001 因为图像的名称不是 1,2,3,4,... 因为它们是以传感器的位置命名的。肯定还有另一个问题,正如我所说的,最初读取 50 张图像运行良好且速度足够快,但随着图像数量的增加,它使用的内存和时间呈指数级增长。

标签: matlab


【解决方案1】:

我能看到的唯一可能是您的 idex 不好。但我只能猜测,因为没有给出 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 以获得更好的文件名访问

【讨论】:

  • 文件名和路径最好使用fullfile 而不是strcat
  • 确实是@Shai!我什至没有看,只是试图修复其他的东西!
  • 数字原来命名不同,取值为:piezoStart = 43000;压电结束 = 63000; piezoSteps = 20;
  • @akirahinoshiro 所以我是正确的。你的循环的最后一次迭代将有 values(:,:,20001) 这是一个巨大的矩阵,比你试图制作的大 20 倍。
猜你喜欢
  • 2022-06-14
  • 2011-12-03
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
相关资源
最近更新 更多