图像旋转MATLAB代码实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图像旋转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在原图像范围内
x_low=floor(x);
x_up=ceil(x);
y_low=floor(y);
y_up=ceil(y);
if (x-x_low)<=(x_up-x) %采用最近点法,选取距离最近点的像素赋给新图像x=x_low;
else
x=x_up;
end
if (y-y_low)<=(y_up-y)
y=y_low;
else
y=y_up;
end
p1=Img(x_low,y_low); %双线性插值,p1到p4是(x,y)周围的四个点p2=Img(x_up,y_low);
p3=Img(x_low,y_low);
p4=Img(x_up,y_up);
s=x-x_low;
t=y-y_low;
Imgnew1(u,v)=Img(x,y);
Imgnew2(u,v)=(1-s)*(1-t)*p1+(1-s)*t*p3+(1-t)*s*p2+s*t*p4;
end
end
end
imshow(Imgnew1,[]); figure;imshow(Imgnew2,[]);
B=imrotate(Img,alpha/pi*180); figure;imshow(B,[]);