【问题标题】:matlab how to turn image 90 degree?matlab如何将图像旋转90度?
【发布时间】:2013-02-13 22:50:24
【问题描述】:

我有 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 度!

有人可以告诉我如何将图像右转吗?当我将它们变成 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');

【问题讨论】:

  • 您存储图像的方式确实让您的生活变得更加困难 - 请参阅我的答案以获得解释(以及更好的方法)。
  • 它似乎使用 imagesc 旋转。使用 imshow 正确显示图像,否则您可以旋转图像。

标签: matlab image-processing reshape


【解决方案1】:

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

rot90(Img);

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我试过 B = imrotate(imagesc(reshape(faces(2,:),256,256)),90), imshow(B) 但它不起作用。我不知道为什么
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      示例:

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

      【讨论】:

      • 注意 - 使用您的方法,您最终会得到左/右翻转,而不仅仅是旋转;您可以通过将换位视为对角线的反射来理解这是正确的,因此您创建了一个“镜像”并且您需要做一些事情来恢复“正确”的图像。看看狒狒的眼角……
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-06
      • 2012-07-24
      • 2012-11-08
      • 1970-01-01
      • 2014-04-27
      相关资源
      最近更新 更多