fish is what

clc;
clear all;
tic;


for i=1:48
   img{i}=imread(['C:\Users\Administrator\Desktop\验残图片\数字\Sidel\left',int2str(i-1),'.jpg']);
   im_init = double(img{i});
   im_height = size(im_init,1);
   im_width = size(im_init,2);
%[im_width im_height]=size(im_init);
% 分别处理灰度图像和RGB图像
% if ndims(im_init) == 3
im_final = zeros(im_height,im_width,3);
R = im_init(:,:,1);
G = im_init(:,:,2);
B = im_init(:,:,3);
R_final = im_final(:,:,1);
G_final = im_final(:,:,2);
B_final = im_final(:,:,3);
% else
% im_final = zeros(im_height,im_width);
% end
r=im_width;
for h = 1:im_height
   for w = 1:im_width
      % 平移至原点,旋转,然后再平移回去
     m=h - im_height/2;
     n=w - im_width/2;
     
     
      if (m^2+n^2)<r^2
          
          
      x=(m*r)/sqrt(r^2-n^2);
      %x=r*(m-im_width/2)/(sqrt(r^2-n^2))+im_width/2;
      % x=m;
       y=(n*r)/sqrt(r^2-m^2);
        
  %y=n;
      new_position =  [x;y] + [im_height/2;im_width/2];
      
      
      
      
      
       % 这里是认为图像中心处为原点,建立局部坐标系,方向还是向下向右
      % 旋转后,再平移回去
       new_position(1) = mod(new_position(1),im_height);
       new_position(2) = mod(new_position(2),im_width);
          % 由于旋转有可能会跑出图像边界,进行了模操作
           % 这是控制操作范围的好方法
         if new_position(1) <= 1
          new_position(1) = 1;  
         end
         if new_position(2) <= 1
         new_position(2) = 1;
         end
      % 当然,图像阵默认是从1开始计量,所以不能出现0
             % 如果新位置为整数,那么直接赋予灰度值或者RGB值
         % 否则,按照双线性插值计算,使用后向映射
    
    if ndims(im_init) == 3
        new_position(1) = round(new_position(1));
       new_position(2) = round(new_position(2));
        R_final(new_position(1),new_position(2)) = R(h,w);
        if(new_position(1)>1)&&(new_position(2)>1)
        if(new_position(1)<im_height)&&(new_position(2)<im_width)
         R_final(new_position(1)+1,new_position(2)) = R(h,w);
         R_final(new_position(1)-1,new_position(2)) = R(h,w);
         R_final(new_position(1),new_position(2)+1) = R(h,w);
         R_final(new_position(1),new_position(2)-1) = R(h,w);
        end
        end
           G_final(new_position(1),new_position(2)) = G(h,w);
    if(new_position(1)>1)&&(new_position(2)>1)
    if(new_position(1)<im_height)&&(new_position(2)<im_width)
      G_final(new_position(1)+1,new_position(2)) = G(h,w);
      G_final(new_position(1),new_position(2)+1) = G(h,w);
      G_final(new_position(1)-1,new_position(2)) = G(h,w);
      G_final(new_position(1),new_position(2)-1) = G(h,w);
    end
    end
      B_final(new_position(1),new_position(2)) = B(h,w);
    if(new_position(1)>1)&&(new_position(2)>1)
    if(new_position(1)<im_height)&&(new_position(2)<im_width)
     B_final(new_position(1)+1,new_position(2)) = B(h,w);
     B_final(new_position(1)-1,new_position(2)) = B(h,w);
     B_final(new_position(1),new_position(2)+1) = B(h,w);
     B_final(new_position(1),new_position(2)-1) = B(h,w);
    end
    end
    else
   im_final(h,w) = im_init(uint32(new_position(1)),uint32(new_position(2)));
    end
   
    end
% 这里可以出对应的final位置的像素是旋转后所在位置对应的原图像像素值


     
end
end
if ndims(im_init) == 3


im_final(:,:,1) = R_final;
im_final(:,:,2) = G_final;
im_final(:,:,3) = B_final;
else
im_final = im2uint8(mat2gray(im_final));
end
% 整合图像
figure;
subplot(1, 2, 1);
imshow(im2uint8(mat2gray(im_init)));
title('原始图像')
subplot(1, 2, 2);
imshow(uint8(im_final))
title('旋转图像')
imwrite(uint8(im_final),strcat('F:\images\left\',[num2str(i),'.jpg']));
 end
toc
time=toc;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值