MATLAB实现图像绕某点(非图像中心点)旋转及放大并保持图像尺寸不变
数字图像处理课上发布了一则下图所示的练习,
网上查找了相关资料并没有与非中心点为旋转点的,下贴出具体实现代码。关键就是原坐标与变换后坐标间关系。
function[]=pic()
myRotation('TestCard.bmp',-30);
end
function []=myRotation(pho,angle)
im1=imread(pho);
subplot(121);
imshow(im1);
title('输入图像');
im1=double(im1);
[r,c]=size(im1);
R=angle*pi/180; %转弧度
r2 =r;%向上取整
c2 =c;
im2=zeros(r2,c2);%初始化输出图像
%旋转
T=[cos(R) -sin(R);
sin(R) cos(R) ];
for x=1:r2
for y=1:c2
temp=([x y]-[200,100])/(3*T)+[200,100];
temp=round(temp);
if temp(2)>0 && temp(2)<=c && temp(1)>0 && temp(1)<=r
im2(y,x)=im1(temp(2),temp(1));
end
end
end
subplot(122);
imshow(uint8(im2));
title('输出图像');
end