Документация для imrotate
содержит 4-й необязательный аргумент, который позволяет поддерживать размеры изображения:
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]);