Matlab实现图像旋转

Matlab实现图像旋转

%实现图像的旋转
%图像旋转为顺时针
%采用行插值
clc;clear;
a=imread('girl.jpg');
d=a;
a=a(:,:,1);
[M,N]=size(a);
sita=input('请输入sita(弧度):','s');
sita=str2num(sita);
%对图像进行旋转
for i=1:M
    for j=1:N
        X=(i-M/2)*cos(sita)+(j-N/2)*sin(sita)+min(M,N);
        Y=-(i-M/2)*sin(sita)+(j-N/2)*cos(sita)+min(M,N);
        X=round(X);        %因为经过旋转后的坐标不是整数,需要取整
        Y=round(Y);
        b(X,Y)=a(i,j);     %将a所对应位置的灰度赋值给变换后的吧b
    end
end
%对旋转后的图像进行行插值
%缺点是图像边缘会有锯齿
[mm,nn]=size(b);
m=1;
while m<=mm      
c=find(b(m,:));    %找到b矩阵在m行时,非零元素的位置
if isempty(c)~=1   %判断c向量是否为空向量,当不为空时,才进行循环
for i=c(1):c(length(c))  % 在b矩阵m行,从非零元素的最小坐标到最大坐标之间进行插值
      if (b(m,i)==0)
          b(m,i)=b(m,i-1);
      end
end
end
m=m+1;
end
imshow(a)
title('原图像');
figure
imshow (b)
title('变换后图像');
figure
imshow(d);

小白练手,敬请斧正。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值