Сохранение размера изображения при вращении - PullRequest
0 голосов
/ 21 февраля 2019

Кто-нибудь знает, как я могу повернуть изображение, а затем повернуть его назад, не теряя индексную информацию?Это означает, что я хочу повернуть изображение, выполнить определенную операцию, а затем повернуть его обратно.Потому что, когда вы поворачиваете изображение, размер изменяется, и он становится еще больше, когда вы поворачиваете его назад.Я хотел бы, чтобы это второе вращение вернуло изображение к его первоначальному размеру.Как мне это сделать?

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 голосов
/ 21 февраля 2019

Документация для 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]);
...