2

私は 100 個の灰色の画像 (256*256 ピクセル) を持っており、faces.mat ファイルに保存されています。したがって、faces.mat ファイルには、100 行と 65536(256*256) 列があります。各行は 1 つのイメージを表します。

ここで、顔の行列を再形成して画像を表示したいと思います。

私が使う:

for i=1:N    
    imagesc(reshape(faces(i,:)'),256,256));
    colormap gray;
end

しかし、私のイメージが 90 度回転していることがわかりました。 ここに画像の説明を入力

誰かが画像を右に向ける方法を教えてもらえますか? 画像を face.mat に変換するときに画像を間違って処理しましたか? 以下は、画像をマトリックスに保存するために書いたコードです。

function ImageGenerate
Files = dir(strcat('D:\face\','*.tiff'));
LengthFiles = length(Files);
faces = [];
for i = 1:LengthFiles;
    Img = imread(strcat('D:\face\',Files(i).name));
    temp = im2double(Img);
    [row, col] = size(temp);
    vector = [];
    for i =1 : row
        for j = 1:col
            vector = [vector temp(i,j)];
        end
    end
    faces = [faces;vector];
end
save('faces2.mat','faces');
4

4 に答える 4

5

90度のint乗数で画像を回転させるには、次のrot90関数があります。

rot90(Img);

これは、他の回答で提案された単なる転置よりも効率的でimrotateあり、より一般的です。

于 2013-02-28T09:21:40.680 に答える
3

を使用imrotateして画像を回転できます。反時計回りに 90 度回転するには、次のように記述します。

img = reshape(faces(i,:)'),256,256);
img = imrotate(img, 90);
于 2013-02-27T22:36:02.367 に答える
1

画像処理ツールボックスを持っていない人は、転置 (X と Y を反転) を適用し、続いて X 軸を中心に鏡像を適用することで、同じことを実現できます。

img = reshape(faces(i,:), [256 256]);
rightImg = flipdim(img', 1);

ところで、顔を書き込むコードを次のように変更することで、多くの問題を回避できたと思います。

temp = im2double(Img);
faces = [faces;temp(:)];

その時点で、画像内のすべてのボクセルを正しい順序で保存し、個々の画像を

fre = reshape(faces,[256 256 100]);
img = fre(:,:,ii);

これが機能する理由を理解するには、Matlab が要素の順序で配列に要素を格納することを理解する必要があります。つまり、m(1,1)、m(2,1)、m(3,1)、m(1,2) )、m(2,2)、...など。これを行った方法では、画像内のピクセルの順序が保持されるため、最後に行う必要があるのは、マトリックスを再形成して i 番目の面を復元することだけです。

于 2013-02-27T23:21:06.137 に答える
0

画像は値の行列として表されるため、行列を転置するだけで、imgNew = img';

例:

  load mandrill
  X2=X';
  figure()
  image(X);
  colormap(map)
  figure()
  image(X2)
  colormap(map)

ここに画像の説明を入力してください

ここに画像の説明を入力してください

于 2013-02-28T08:29:29.323 に答える