matlab如何将图像转90度?

时间:2013-02-27 22:33:05

标签: matlab image-processing reshape

我有100张灰色图像(256 * 256像素),它们存储在faces.mat文件中。 所以在faces.mat文件中,有100行和65536(256 * 256)列。 每行代表一张图片。

现在我想重塑面部矩阵并显示图像。

我用:

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

但我发现我的图像变成了90度! enter image description here

有人可以告诉我如何正确转动图像吗?当我把它们变成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 个答案:

答案 0 :(得分:5)

对于具有90度int乘数的旋转图像,有rot90函数:

rot90(Img);

这比imrotate更有效,而且比其他答案中提出的just transpose更为通用。

答案 1 :(得分:3)

您可以使用imrotate旋转图像。要逆时针旋转90度,只需写入

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

答案 2 :(得分: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个面

答案 3 :(得分:0)

由于图像表示为值矩阵,因此您只需转置矩阵即可imgNew = img';

示例:

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

enter image description here

enter image description here