在做人脸或物体检测的任务中,往往需要对训练集进行随机旋转,做数据增强,增加模型的鲁棒性。

在进行图像随机旋转的同时,相应的label值坐标也要进行相应的旋转。

如人脸关键点检测中人脸对应的关键点坐标,物体检测任务中的物体所在box坐标。

(1).原理-------坐标旋转变换公式

原理参照博客:

https://blog.csdn.net/u012686154/article/details/88854386

最终变换公式如下:

坐标(x,y)顺时针旋转 β 度,则经过矩阵相乘,转换成新的坐标(x‘,y')

(2).实现-------python代码实现

import math
from PIL import Image#box为0~1的值,为[ymin, xmin, ymax, xmax]
#landmarks为0~1的值,为[y0,x0,y1,x1,y2,x2......yn,xn]
def random_rotation(image, box, landmarks, max_angle=90):#为随机旋转的角度-90~90度angle = np.random.uniform(-max_angle,max_angle)theta = angle*(math.pi/180.0)#获取旋转的中心坐标#也即是图像的中心坐标image_height = image.shape[0]image_width = image.shape[1]scaler = np.stack([image_height, image_width], axis=0)center = np.reshape(0.5*scaler, [1, 2])#求旋转矩阵rotation = np.stack([np.cos(theta), np.sin(theta),-np.sin(theta), np.cos(theta)], axis=0)rotation_matrix = np.reshape(rotation, [2, 2])#旋转方框ymin, xmin, ymax, xmax = boxh, w = ymax - ymin, xmax - xminbox = np.stack([ymin, xmin, ymin, xmax,ymax, xmax, ymax, xmin], axis=0)box = np.matmul(np.reshape(box, [4, 2])*scaler - center, rotation_matrix) + centerbox = box/scalery ,x  = box[:,0],box[:,1]ymin, ymax = np.min(y), np.max(y)xmin, xmax = np.min(x), np.max(x)box = np.stack([ymin, xmin, ymax, xmax], axis=0)#旋转坐标landmarks = np.matmul(landmarks*scaler - center, rotation_matrix) + centerlandmarks = landmarks/scaler#旋转图像image = Image.fromarray(image)im_rotate = image.rotate(angle)im_rotate = np.array(im_rotate)return im_rotate, box, landmarks

版权声明:本文为qq_16564093原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/qq_16564093/article/details/106000209

【Python-随机旋转】图像随机旋转及坐标进行旋转原理相关推荐

  1. python实现向图像随机添加高斯白噪声,并修改尺寸

    基于python向图像随机添加高斯噪声,并修改尺寸 噪声分布设置为(均值为0,方差分布在0~50之间) # -*- coding: utf-8 -*- """ Creat ...

  2. 8.3 Python图像处理之图像典型分割-分水岭分割

    8.3 Python图像处理之图像典型分割-分水岭分割 文章目录 8.3 Python图像处理之图像典型分割-分水岭分割 1 算法原理 2 代码 3 效果 1 算法原理 分水岭概念是以对图像进行三维可 ...

  3. 8.2 Python图像处理之图像典型分割-主动轮廓

    8.2 Python图像处理之图像典型分割-主动轮廓 文章目录 8.2 Python图像处理之图像典型分割-主动轮廓 1 算法原理 2 代码 3 效果 1 算法原理 主动轮廓模型,将图像分割问题转换为 ...

  4. 8.1 Python图像处理之图像典型分割-SUSAN边缘检测

    8.1 Python图像处理之图像典型分割-SUSAN边缘检测 文章目录 8.1 Python图像处理之图像典型分割-SUSAN边缘检测 1 算法原理 2 代码 3 效果 1 算法原理 SUSAN 的 ...

  5. python图像增强之随机翻转或随机旋转

    假设输入的图像数据为img,标签label组成为classid.x.y.w.h,因此labels维度为Nx5.假设旋转前的坐标和尺寸为x0.y0.w0.h0.x.y.w.h均为归一化后坐标,即已经除以 ...

  6. 图像中某点绕点旋转后的坐标,图像旋转坐标位置

    图像中某点绕点旋转后的坐标,图像旋转坐标位置 在平面坐标上,任意点P(x1,y1),绕一个坐标点Q(x2,y2)旋转θ角度后,新的坐标设为(x, y)的计算公式: x= (x1 - x2)*cos(θ ...

  7. Python图像处理丨图像缩放、旋转、翻转与图像平移

    摘要:本篇文章主要讲解Python调用OpenCV实现图像位移操作.旋转和翻转效果,包括四部分知识:图像缩放.图像旋转.图像翻转.图像平移. 本文分享自华为云社区<[Python图像处理] 六. ...

  8. 【python图像处理】图像的缩放、旋转与翻转

    图像的几何变换,如缩放.旋转和翻转等,在图像处理中扮演着重要的角色,python中的Image类分别提供了这些操作的接口函数,下面进行逐一介绍. 1.图像的缩放 图像的缩放使用resize()成员函数 ...

  9. Python图像识别实战(一):实现按数量随机抽取图像复制到另一文件夹(附源码和实现效果)

    前面我介绍了可视化的一些方法以及机器学习在预测方面的应用,分为分类问题(预测值是离散型)和回归问题(预测值是连续型)(具体见之前的文章). 从本期开始,我将做一个关于图像识别的系列文章,让读者慢慢理解 ...

最新文章

  1. [译]一个系统管理员眼中的DevOps
  2. getopt()和getopt_long()用法
  3. [文摘]标准的软件开发过程
  4. 更新node_kubernetes证书更新
  5. PHP笔记-获取文件扩展名例子
  6. 【Socket】关于socket长连接的心跳包
  7. Arbitrage(判断正环 spfa写法)
  8. python 常用代码
  9. 开发一个Linux调试器(八):堆栈展开
  10. SharePoint 解决管理员密码修改后的问题
  11. mysql 5.7多层级json查询_MySql5.7 json查询
  12. 阿里巴巴在ITU-T成功立项数据安全相关标准
  13. lsoci mysql_【MySQL】InnoDB日志机制深入分析
  14. 华为HG8240F光猫破解
  15. 华罗庚黄金分割优选法
  16. 计算机键盘各个键的用途,给大家介绍键盘各个键的功能图解
  17. 外联css不生效,css外联样式不起作用的解决方法
  18. 终端操作GitHub代码以及代码的版本控制(develop/master)多图
  19. Android基础新手教程——4.1.3 Activity登堂入室
  20. 【定时同步系列5】Farrow内插器结构原理和MATLAB实现

热门文章

  1. ue4导入倾斜摄影_干货 | 6款倾斜摄影裸眼3D采集软件推荐给大家
  2. TCP报文发送的那些事
  3. V神:区块链跨链技术大规模应用将在一到两年内爆发
  4. 用几何画板演示涡旋电场的方法
  5. 工作者对象HttpWorkerRequest
  6. ORA-07445:[SIGFPE] [Integer divide by zero]内部错误一例
  7. 活动目录数据库授权恢复
  8. java加密工作模式None_java加解密算法--对称加密工作模式
  9. px4 uavcan linux,UAVCAN总线 - UAVCAN固件升级 - 《PX4开发指南》 - 书栈网 · BookStack
  10. python如何绘制曲线图_python pandas plot画折线图如何显示x轴的值?