0

我正在尝试将大量图像组合成一个 .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)

答案(:,:,1)= 133

答案(:,:,2)= 141

答案(:,:,3)= 142

答案(:,:,4)= 145

答案(:,:,5)= 156

答案(:,:,6)= 157

答案(:,:,7)= 158

这是加载回来后的 new_IMG_DATA 示例: NEWIMG_DATA.IMG_DATA(400,400,4:10)

答案(:,:,1)= 16366

答案(:,:,2)= 18216

答案(:,:,3)= 19648

答案(:,:,4)= 19578

答案(:,:,5)= 19203

答案(:,:,6)= 18682

答案(:,:,7)= 17123

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

4

1 回答 1

1

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

于 2012-11-27T18:32:18.867 回答