图像旋转

%双线性内插法做图像旋转
clear,home
format compact
a=imread('Gone_with_the_wind_8bits.bmp');%读入图像
[m,n]=size(a);
alpha_=input('请输入旋转角(角度制):');alpha_=mod(alpha_,360);alpha=alpha_*pi/180;
%则旋转后的图形的大框的高度和宽度为
gd=round(abs(m*cos(alpha))+abs(n*sin(alpha)));kd=round(abs(m*sin(alpha))+abs(n*cos(alpha)));
b=zeros(gd,kd);%旋转后的图像
for i_=1:gd
    for j_=1:kd
        if alpha_>=0 && alpha_<=90%四种情况的旋转角度下的平移坐标变换
            i=i_;j=round(j_-m*sin(alpha));
        elseif alpha_>90 && alpha_<=180
            i=round(i_-m*sin(alpha-pi/2));j=j_-kd;
        elseif alpha_>180 && alpha_<=270
            i=i_-gd;j=round(j_-n*cos(alpha-pi));
        else
            i=round(i_-n*cos(alpha-pi*3/2));j=j_;
        end
        y_=j*cos(alpha)+i*sin(alpha);x_=-j*sin(alpha)+i*cos(alpha);%旋转坐标变换(注意:这里是逆向旋转变换)
        x=fix(x_);y=fix(y_);%这里用fix是为了向下取整,上面用round是为了四舍五入减小误差
        u=x_-x;v=y_-y;
        if x>0&&y>0&&y<n&&x<m
            b(i_,j_)=(1-u)*(1-v)*double(a(x,y))+(1-u)*v*double(a(x,y+1))...
                +(1-v)*u*double(a(x+1,y))+u*v*double(a(x+1,y+1));%双线性内插法
        end
    end
end
imshow(uint8(b));

转载于:https://www.cnblogs.com/yunwux/p/3461098.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值