【问题标题】:Trouble saving and loading mat files无法保存和加载 mat 文件
【发布时间】:2015-04-21 17:59:06
【问题描述】:

我正在尝试将大量图像组合成一个 .mat 文件。图像为 512x512,灰度。有 31 个这样的图像。

我执行以下操作来创建 matfile 并保存它:

    fid1 = fopen('C:\Users\...\MATLAB\fileList_IMG.txt','r');
    PATH_IMG = 'C:\Users\...\IMAGES\';
    PATH_MAT = 'C:\Users\...\IMAGES\MATfiles\';
    IMG_DATA = zeros(512, 512, 31);
    while ~feof(fid1)
        folderName = fgetl(fid1);

        for i=1:31
            fileName = sprintf('%s%s\\%s\\%s_%02d.png',PATH_IMG, folderName, folderName, folderName, i);
            tempImg = imread(fileName);
            IMG_DATA(:,:,i) = tempImg(:,:,1);
        end

        save_fileName = sprintf('%s%s', PATH_MAT, folderName);
        save(save_fileName, 'IMG_DATA');
    end

我为加载 matfile 做了以下操作:

     fileName = 'C:\Users\...\IMAGES\MATfiles\balloon.mat';
     NEWIMG_DATA = load(fileName);

为了便于阅读,假设这是 new_IMG_DATA。

我注意到值不同!它不像值被放大,因为 IMG_DATA 中的 170 和 172 的值对应于 new_IMG_DATA 中的 3709 和 3666。 IMG_DATA 和 new_IMG_DATA 都是双精度数据类型。如果我在创建 .mat 文件之前强制 IMG_DATA 为 uint8,则 new_IMG_DATA 的大部分值都是 255。

以下是 IMG_DATA 保存为 matfile 之前的一些示例: IMG_DATA(400,400,4:10)

ans(:,:,1) = 133

ans(:,:,2) = 141

ans(:,:,3) = 142

ans(:,:,4) = 145

ans(:,:,5) = 156

ans(:,:,6) = 157

ans(:,:,7) = 158

以下是加载后的 new_IMG_DATA 示例: NEWIMG_DATA.IMG_DATA(400,400,4:10)

ans(:,:,1) = 16366

ans(:,:,2) = 18216

ans(:,:,3) = 19648

ans(:,:,4) = 19578

ans(:,:,5) = 19203

ans(:,:,6) = 18682

ans(:,:,7) = 17123

我希望能够正确保存和加载 .mat 文件。我该怎么做?

【问题讨论】:

  • 您需要创建一个非常简短的代码示例来重现此错误,因为 MATLAB 在加载/保存时出现错误是非常罕见的。在代码 sn-p 中显示 SAVE 之前的值,以及 SAVE 之后的值。如果这是一个真正的 MATLAB 错误,您应该能够以非常简单的方式重现
  • 这是来自 CAVE 数据库的多光谱图像吗?这些图像是 16 位的,所以它们的范围是 0 到 65535。你应该试试 tempImg = double(imread(fileName))/255.;
  • 看图片时可以试试im2double吗?你用的是什么版本的matlab?在您的偏好中,您保存 mat 文件的格式是什么?如果更改这些设置,是否会影响保存的数据?
  • @ypnos:是的。感谢您指出它是 16 bpp。当我在 IrfanView 中打开图像时,我不断得到 512x512x8BPP。所以我假设它是8BPP。无论如何,我在读回 matfile 时这样做了:new_IMG_DATA = uint8(new_IMG_DATA./255);
  • @ypnos,你创造了沙鼠!惊人的!我已经使用了一段时间了,它非常好!

标签: matlab octave


【解决方案1】:

答案在上面的 cmets 中。 ypnos 指出数据是 16 bpp 而不是我假设的 8 bpp。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-17
    • 2021-07-25
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 2014-07-21
    • 1970-01-01
    相关资源
    最近更新 更多