matlab как повернуть изображение на 90 градусов?



У меня есть 100 серых изображений (256*256 пикселей), и они хранятся в лицах.мат-файл.
Так и в лицах.файл мата, есть 100 строк и 65536 (256*256) столбцов.
Каждая строка представляет собой одно изображение.



Теперь я хочу изменить форму матрицы лиц и показать изображения.

Я использую:



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


Но я обнаружил, что мое изображение повернулось на 90 градусов!
Введите описание изображения здесь

Может ли кто-нибудь сказать мне, как повернуть изображение вправо? Разве я неправильно обрабатываю образы, когда превращаю их в лицо?мат? Ниже приведен код, который я написал для храните изображения в матрице.



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');
1232   4  

4 ответов:

Вы можете использовать imrotate для поворота изображений. Чтобы повернуть на 90 градусов против часовой стрелки, просто напишите

img = reshape(faces(i,:)'),256,256);
img = imrotate(img, 90);

Для вращающихся изображений с множителями int 90 градусов существует rot90 функция:

rot90(Img);

Это более эффективно, чем imrotate и более общие, чем просто транспонируют, которые были предложены в других ответах.

Для людей, у которых нет инструментов обработки изображений, то же самое можно сделать, применив транспозицию (которая переворачивает 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-ю грань.

Поскольку изображение представлено в виде матрицы значений, вы можете просто транспонировать матрицу, поэтому imgNew=img';

Пример:

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

Введите описание изображения здесь

Введите описание изображения здесь

Comments

    Ничего не найдено.