如何在matlab中将图像旋转45度并在结尾处保持相同的尺寸?

时间:2012-11-29 03:18:31

标签: matlab image-processing octave

我想:

  1. 以45度旋转图像(尺寸512x512)。
  2. 对其进行一些处理。
  3. 以-45度旋转图像。
  4. 我的问题是当我应用45度和-45度的旋转时,图像的大小会发生变化,我希望它是相同的。

2 个答案:

答案 0 :(得分:2)

旋转图像的常用步骤是向上缩放图像,旋转图像并缩小图像。这样,您可以避免旋转时出现的暗边距。

Matlab自动完成此过程。因此,如果您想要图像的特定尺寸,则必须在旋转图像后选择适当的图像区域。

假设我们想要旋转图像并希望保留与原始图像相同的尺寸,我们可以这样做:

    img = imread('image.png'); 
    r = numel(img(:,1));
    c = numel(img(:,2));
    nimg = imrotate(img, 45);
    nimg = imrotate(nimg, 45);
    n_R = numel(nimg(:,1));
    n_C = numel(nimg(:,2));
    n_R = n_R+mod(n_R, 2); %to avoid dimensions being in double datatype
    n_C = n_C+mod(n_C, 2);
    oimg = nimg(((n_R/2)-(r/2)):((n_R/2)+(r/2)), ((n_C/2)-(c/2)):((n_C/2)+(c/2)),:);
    imwrite(oimg, 'rot_image.png');

答案 1 :(得分:1)

你不能这样做。这没有意义。简单的实验:

  1. 拿一张正方形的纸,把它靠在白墙上
  2. 在墙上画出正方形的边框
  3. 将纸张旋转45度
  4. 在墙上绘制另一个包围旋转纸张的方块
  5. 把那张纸从墙上拿出来,观察为什么你不能这样做
  6. 将标记留在墙上,以免忘记