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');
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(:)];В этот момент Вы бы сохранили все воксели в изображении в правильной последовательности и могли бы обратиться к отдельному изображению с
Чтобы понять, почему это работает, вы должны понимать, что Matlab хранит элементы в массиве в порядке элементов-так m (1,1), m(2,1), m(3,1), m(1,2), m(2,2),... и т.д. То, как я это сделал, сохраняет порядок пикселей в изображении, поэтому все, что мне нужно сделать в конце, - это изменить форму матрицы и восстановить I-ю грань.fre = reshape(faces,[256 256 100]); img = fre(:,:,ii);
Поскольку изображение представлено в виде матрицы значений, вы можете просто транспонировать матрицу, поэтому imgNew=img';
Пример:
load mandrill X2=X'; figure() image(X); colormap(map) figure() image(X2) colormap(map)


Comments