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 はどちらも double データ型です。.mat ファイルを作成する前に IMG_DATA を強制的に uint8 にすると、new_IMG_DATA の値のほとんどが 255 になります。

以下は、matfile として保存する前の IMG_DATA のサンプルです: 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)

ans(:,:,1) = 16366

ans(:,:,2) = 18216

ans(:,:,3) = 19648

アンズ (:,:,4) = 19578

ans(:,:,5) = 19203

ans(:,:,6) = 18682

ans(:,:,7) = 17123

.mat ファイルを適切に保存およびロードできるようにしたい。どうすればいいですか?

4

1 に答える 1

1

答えは上記のコメントにあります。ypnos は、私が想定していた 8 bpp ではなく、データが 16 bpp であることを指摘しました。

于 2012-11-27T18:32:18.867 に答える