图像旋转

  

clear;
clc;
imagDat=imread('t3','bmp');
imagGray=rgb2gray(imagDat);%注意这里需要转换成灰度图像
[row column]=size(imagGray);
angle=25;

Angle=25;%用于matlab中自带图像旋转函数的角度参数
angle=pi*angle/180;%用于可代码的角度参数    注意这里代入的是以弧度为单位的角度值
  cosa=cos(angle);  
  sina=sin(angle);
  %计算源图像旋转后要显示的区域  
  Wold=row;Hold=column;
  SrcX1=(-0.5*Wold);  
  SrcY1=(0.5*Hold);  
  SrcX2=(0.5*Wold);  
  SrcY2=(0.5*Hold);  
  SrcX3=(-0.5*Wold);  
  SrcY3=(-0.5*Hold);  
  SrcX4=(0.5*Wold);  
  SrcY4=(-0.5*Hold);
 
    %新图像对应数值  
  DstX1=cosa*SrcX1+sina*SrcY1;  
  DstY1=-sina*SrcX1+cosa*SrcY1;  
  DstX2=cosa*SrcX2+sina*SrcY2;  
  DstY2=-sina*SrcX2+cosa*SrcY2;  
  DstX3=cosa*SrcX3+sina*SrcY3;  
  DstY3=-sina*SrcX3+cosa*SrcY3;  
  DstX4=cosa*SrcX4+sina*SrcY4;  
  DstY4=-sina*SrcX4+cosa*SrcY4; 
 
  %新图像的宽高  
  Wnew   =   fix(max(abs(DstX4-DstX1),abs(DstX3-DstX2)));  
  Hnew   =   fix(max(abs(DstY4-DstY1),abs(DstY3-DstY2)));  
  num1   =  -0.5*Wnew*cosa-0.5*Hnew*sina+0.5*Wold;  
  num2   =   0.5*Wnew*sina-0.5*Hnew*cosa+0.5*Hold;  
 
    %旋转操作  
  for y1=1:Hnew  
      for x1=1:Wnew  
      %得到横坐标和纵坐标在原图中的位置   注意这里是用已旋转的图像坐标(x1,y1)来计算其在原来图像中的坐标(x0,y0)

      %一开始写这个代码时  下面这个公式被一篇研究生毕业论文误导(现在研究生的水平真的是不行呀)   
      x0=   fix(x1*cosa+y1*sina+num1);  
      y0=   fix(-x1*sina+y1*cosa+num2);
        if x0>0  &&   x0<Wold   &&   y0>0   &&   y0<Hold   
            newImag(x1,y1)=imagGray(x0,y0);
        end
      end
  end
  figure
imshow(imagGray);
title('old');
figure
imshow(newImag);
title('newImag');

newImagB = imrotate(imagGray,Angle);%用matlab自带的旋转函数对比
figure
imshow(newImagB);
title('newImagB');

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像数据增强是一种广泛应用于计算机视觉任务中的技术,它可以通过对原始图像进行一系列变换来增加训练数据的多样性。图片旋转是其中一种常见的数据增强方式之一。 在图像旋转过程中,可以使用旋转矩阵来对图像进行变换。旋转矩阵定义了一个旋转角度和旋转中心点,通过将每个像素点围绕中心点按照指定的角度进行旋转,从而实现图像旋转操作。 在进行图像旋转时,可以选择不同的角度来生成不同方向的旋转图像。常见的角度包括90度、180度和270度等,也可以使用任意角度进行旋转。 以下是一个使用Python和OpenCV库进行图像旋转的示例代码: ```python import cv2 def rotate_image(image, angle): # 获取图像尺寸 height, width = image.shape[:2] # 计算旋转中心点 center = (width / 2, height / 2) # 定义旋转矩阵 rotation_matrix = cv2.getRotationMatrix2D(center, angle, 1.0) # 执行旋转操作 rotated_image = cv2.warpAffine(image, rotation_matrix, (width, height)) return rotated_image # 读取图像 image = cv2.imread('image.jpg') # 旋转图像 rotated_image = rotate_image(image, 90) # 显示旋转后的图像 cv2.imshow('Rotated Image', rotated_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 以上代码中,`rotate_image` 函数用于对图像进行旋转操作。首先获取图像的尺寸,然后通过 `cv2.getRotationMatrix2D` 函数计算旋转矩阵。最后使用 `cv2.warpAffine` 函数执行旋转操作,生成旋转后的图像。 请注意,以上代码仅为示例,实际使用时可能需要根据具体需求进行调整。另外,OpenCV还提供了其他图像旋转的函数和参数选项,可以根据需要进行更灵活的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值