旋转时保留图像尺寸

时间:2019-02-21 15:08:47

标签: matlab image-processing rotation

有人知道我如何旋转图像,然后将其旋转回去,而又不会丢失索引信息?这意味着,我想旋转图像,执行某些操作,然后再旋转回去。因为当旋转图像时,尺寸会发生变化,而向后旋转时,尺寸会变得更大。我希望第二次旋转可以将图像恢复到原始大小。我该怎么办?

I_rot = imrotate(I,45);
%size changes I_rot has different size than I
I_rot_back = imrotate(I_rot,-45);
%I_rot_back should have the same dimensions as I. 

1 个答案:

答案 0 :(得分:2)

documentation to imrotate显示第四个可选参数,可让您保持图像尺寸:

I_rot = imrotate(I,45,'bicubic','crop'); % the default method is 'nearest', but 'bucubic' is much better!
I_rot_back = imrotate(I_rot,-45,'bicubic','crop');

但是,这会使您丢失图像角落中的信息。最好允许第一次旋转增加图像的大小,以便保留所有信息,然后在第二次旋转之后将图像裁剪到其原始大小。您可以为此使用imcrop

isz = [size(I,2),size(I,1)];  % note the reversed indices!
I_rot = imrotate(I,45,'bicubic');
I_rot_back = imrotate(I_rot,-45,'bicubic');
osz = [size(I_rot_back,2),size(I_rot_back,1)];
I_rot_back = imcrop(I_rot_back, [(osz-isz)/2, isz]);