图像旋转
MATLAB
代码实现
插值时采用了最近点法和双线性插值,结果与
imrotate
函数进行了比较。
myImrotate.m
%
实现
Imrotate
函数
.
clc;clear
all
;close
all
;
Img=imread(
'E:\eye.bmp'
);
Img=double(Img);
[h w]=size(Img);
alpha=pi/4;
%
逆时针旋转的角度
wnew=w*cos(alpha)+h*sin(alpha);
%
新图像的宽
width
hnew=w*sin(alpha)+h*cos(alpha);
%
新图像的高
heighth
wnew=ceil(wnew);
%
取整
hnew=ceil(hnew);
u0=w*sin(alpha);
%
平移量
T=[cos(alpha),sin(alpha);-sin(alpha),cos(alpha)];
%
变换矩阵
Imgnew2=zeros(hnew,wnew);Imgnew1=zeros(hnew,wnew);
for
u=1:hnew
%u
和
v
是新图像坐标,变换到原图像坐标
x
和
y
中。
for
v=1:wnew
tem=T*([u;v]-[u0;0]);
x=tem(1);
y=tem(2);
if
x>=1&x<=h&y>=1&y<=w
%
若变换出的
x
和
y
在原图像范围内