matlab 如何将图像旋转90度?

iszxjhcz  于 2022-11-24  发布在  Matlab
关注(0)|答案(4)|浏览(1156)

我有100个灰度图像(256256像素),它们存储在faces.mat文件中。因此,在faces.mat文件中,有100行和65536(256256)列。每行代表一个图像。
现在我要重新塑造面孔矩阵并显示图像。
我用途:

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

但是我发现我的图像转了90度!x1c 0d1x
有人能告诉我如何正确地转换图像吗?当我把图像转换成face.mat时,我处理图像的方式是否有误?下面是我写的将图像存储到matrix的代码。

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');
jyztefdp

jyztefdp1#

由于图像被表示为值的矩阵,因此您可以转置矩阵,因此imgNew= img ';

范例:

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

goqiplq2

goqiplq22#

对于整数乘数为90度的旋转图像,存在rot90函数:

rot90(Img);

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

qlfbtfca

qlfbtfca3#

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

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

xriantvc4#

对于没有图像处理工具箱的人,可以通过应用转置(翻转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张脸。

相关问题