不采用MATLAB中的几何变换函数对图像进行旋转

本文详细介绍了使用MATLAB进行图像旋转变换的过程,包括确定新图像尺寸、坐标变换、逆变换及新图像赋值等步骤,并提供了完整的代码实现,通过最邻近差值和双线性差值方法使旋转后的图像边缘更加平滑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、图像旋转变换的流程
1、确定旋转后新图像的尺寸,设原始大小为M,N
在这里插入图片描述
在这里插入图片描述
由以上公式得到:

x=[0,(M-1)*cos(Angle),(M-1)*cos(Angle)+(N-1)*sin(Angle),(N-1)*sin(Angle)];         %旋转后新坐标系横坐标
y=[0,-(M-1)*sin(Angle),-(M-1)*sin(Angle)+(N-1)*cos(Angle),(N-1)*cos(Angle)];           %旋转后新坐标系纵坐标

2、坐标变换
在这里插入图片描述
3、旋转逆变换
在这里插入图片描述
4、新图像赋值
赋值方法有最邻近差值与双线性差值,其中双线性插值法可以使的图像的边缘更加的平滑。

二、完整matlab代码

f=im2bw(imread('picture1.png'));
M=size(f,1);            %行
N=size(f,2);            %列
Angle=pi/6;     %逆时针角度

x=[0,(M-1)*cos(Angle),(M-1)*cos(Angle)+(N-1)*sin(Angle),(N-1)*sin(Angle)];         %旋转后新坐标系横坐标
y=[0,-(M-1)*sin(Angle),-(M-1)*sin(Angle)+(N-1)*cos(Angle),(N-1)*cos(Angle)];           %旋转后新坐标系纵坐标


x1=round(max(x(:)-min(x(:))+1));        %round()函数表示四舍五入取整
y1=round(max(y(:))-min(y(:))+1);        %计算新图像分辨率

g=zeros(x1,y1);                        %新图像的像素点矩阵

for i=0:1:(x1-1)
    for j=0:1:(y1-1)

        i1=i+min(x(:));
        j1=j+min(y(:));                     %坐标变换到原坐标系

        i2=i1*cos(Angle)-j1*sin(Angle);    
        j2=i1*sin(Angle)+j1*cos(Angle);      %旋转逆变换
        
        i3=round(i2);
        j3=round(j2);                     
          
        if(i3>(M-1)||j3>(N-1)||i3<0||j3<0)  %插值运算
            g(i+1,j+1)=255;
        else
            g(i+1,j+1)=f(i3+1,j3+1);
        end
        
    end
end
subplot(121),imshow(f),title('原图像');
subplot(122),imshow(g),title('旋转后图像');

三、运行结果
在这里插入图片描述
参考文献:
[1] 蔡利梅 王利娟 数字图像处理[M]. 中国矿业大学出版社 2014

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值