您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > matlab旋转实现(最近邻值-双线性-三次卷积插值实现插值)
对图像进行旋转,使用最近邻插值法,双线性插值,三次卷积插值三种方法进行插值。源码:clc;clearall;closeall;Img=imread('test1.bmp');Img=double(Img);[hw]=size(Img);alpha=pi/6;%逆时针旋转的角度wnew=w*cos(alpha)+h*sin(alpha);%新图像的宽widthhnew=w*sin(alpha)+h*cos(alpha);%新图像的高heighthwnew=ceil(wnew);%取整hnew=ceil(hnew);u0=w*sin(alpha);%平移量T=[cos(alpha),sin(alpha);-sin(alpha),cos(alpha)];%变换矩阵Imgnew1=zeros(hnew,wnew);Imgnew2=zeros(hnew,wnew);Imgnew3=zeros(hnew,wnew);foru=1:hnew%u和v是新图像坐标,变换到原图像坐标x和y中。forv=1:wnewtem=T*([u;v]-[u0;0]);x=tem(1);y=tem(2);ifx=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;elsex=x_up;endif(y-y_low)=(y_up-y)y=y_low;elsey=y_up;endp1=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;endifx=2&x=h-2&y=2&y=w-2%若变换出的x和y在原图像范围内x_1=floor(x)-1;x_2=floor(x);x_3=floor(x)+1;x_4=floor(x)+2;y_1=floor(y)-1;y_2=floor(y);y_3=floor(y)+1;y_4=floor(y)+2;A=[sw(1+x-x_2),sw(x-x_2),sw(1-(x-x_2)),sw(2-(x-x_2))];C=[sw(1+y-y_2),sw(y-y_2),sw(1-(y-y_2)),sw(2-(y-y_2))];B=[Img(x_1,y_1),Img(x_1,y_2),Img(x_1,y_3),Img(x_1,y_4);Img(x_2,y_1),Img(x_2,y_2),Img(x_2,y_3),Img(x_2,y_4);Img(x_3,y_1),Img(x_3,y_2),Img(x_3,y_3),Img(x_3,y_4);Img(x_4,y_1),Img(x_4,y_2),Img(x_4,y_3),Img(x_4,y_4)];Imgnew3(u,v)=A*B*C';endendendsubplot(2,2,1),imshow(Img,[]),title('原图');subplot(2,2,2),imshow(Imgnew1,[]),title('最近邻插值法');subplot(2,2,3),imshow(Imgnew2,[]),title('双线性插值法');subplot(2,2,4),imshow(Imgnew3,[]),title('三次卷积插值法');
本文标题:matlab旋转实现(最近邻值-双线性-三次卷积插值实现插值)
链接地址:https://www.777doc.com/doc-7775424 .html