【Python-随机旋转】图像随机旋转及坐标进行旋转原理
在做人脸或物体检测的任务中,往往需要对训练集进行随机旋转,做数据增强,增加模型的鲁棒性。
在进行图像随机旋转的同时,相应的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-随机旋转】图像随机旋转及坐标进行旋转原理相关推荐
- python实现向图像随机添加高斯白噪声,并修改尺寸
基于python向图像随机添加高斯噪声,并修改尺寸 噪声分布设置为(均值为0,方差分布在0~50之间) # -*- coding: utf-8 -*- """ Creat ...
- 8.3 Python图像处理之图像典型分割-分水岭分割
8.3 Python图像处理之图像典型分割-分水岭分割 文章目录 8.3 Python图像处理之图像典型分割-分水岭分割 1 算法原理 2 代码 3 效果 1 算法原理 分水岭概念是以对图像进行三维可 ...
- 8.2 Python图像处理之图像典型分割-主动轮廓
8.2 Python图像处理之图像典型分割-主动轮廓 文章目录 8.2 Python图像处理之图像典型分割-主动轮廓 1 算法原理 2 代码 3 效果 1 算法原理 主动轮廓模型,将图像分割问题转换为 ...
- 8.1 Python图像处理之图像典型分割-SUSAN边缘检测
8.1 Python图像处理之图像典型分割-SUSAN边缘检测 文章目录 8.1 Python图像处理之图像典型分割-SUSAN边缘检测 1 算法原理 2 代码 3 效果 1 算法原理 SUSAN 的 ...
- python图像增强之随机翻转或随机旋转
假设输入的图像数据为img,标签label组成为classid.x.y.w.h,因此labels维度为Nx5.假设旋转前的坐标和尺寸为x0.y0.w0.h0.x.y.w.h均为归一化后坐标,即已经除以 ...
- 图像中某点绕点旋转后的坐标,图像旋转坐标位置
图像中某点绕点旋转后的坐标,图像旋转坐标位置 在平面坐标上,任意点P(x1,y1),绕一个坐标点Q(x2,y2)旋转θ角度后,新的坐标设为(x, y)的计算公式: x= (x1 - x2)*cos(θ ...
- Python图像处理丨图像缩放、旋转、翻转与图像平移
摘要:本篇文章主要讲解Python调用OpenCV实现图像位移操作.旋转和翻转效果,包括四部分知识:图像缩放.图像旋转.图像翻转.图像平移. 本文分享自华为云社区<[Python图像处理] 六. ...
- 【python图像处理】图像的缩放、旋转与翻转
图像的几何变换,如缩放.旋转和翻转等,在图像处理中扮演着重要的角色,python中的Image类分别提供了这些操作的接口函数,下面进行逐一介绍. 1.图像的缩放 图像的缩放使用resize()成员函数 ...
- Python图像识别实战(一):实现按数量随机抽取图像复制到另一文件夹(附源码和实现效果)
前面我介绍了可视化的一些方法以及机器学习在预测方面的应用,分为分类问题(预测值是离散型)和回归问题(预测值是连续型)(具体见之前的文章). 从本期开始,我将做一个关于图像识别的系列文章,让读者慢慢理解 ...
最新文章
- [译]一个系统管理员眼中的DevOps
- getopt()和getopt_long()用法
- [文摘]标准的软件开发过程
- 更新node_kubernetes证书更新
- PHP笔记-获取文件扩展名例子
- 【Socket】关于socket长连接的心跳包
- Arbitrage(判断正环 spfa写法)
- python 常用代码
- 开发一个Linux调试器(八):堆栈展开
- SharePoint 解决管理员密码修改后的问题
- mysql 5.7多层级json查询_MySql5.7 json查询
- 阿里巴巴在ITU-T成功立项数据安全相关标准
- lsoci mysql_【MySQL】InnoDB日志机制深入分析
- 华为HG8240F光猫破解
- 华罗庚黄金分割优选法
- 计算机键盘各个键的用途,给大家介绍键盘各个键的功能图解
- 外联css不生效,css外联样式不起作用的解决方法
- 终端操作GitHub代码以及代码的版本控制(develop/master)多图
- Android基础新手教程——4.1.3 Activity登堂入室
- 【定时同步系列5】Farrow内插器结构原理和MATLAB实现
热门文章
- ue4导入倾斜摄影_干货 | 6款倾斜摄影裸眼3D采集软件推荐给大家
- TCP报文发送的那些事
- V神:区块链跨链技术大规模应用将在一到两年内爆发
- 用几何画板演示涡旋电场的方法
- 工作者对象HttpWorkerRequest
- ORA-07445:[SIGFPE] [Integer divide by zero]内部错误一例
- 活动目录数据库授权恢复
- java加密工作模式None_java加解密算法--对称加密工作模式
- px4 uavcan linux,UAVCAN总线 - UAVCAN固件升级 - 《PX4开发指南》 - 书栈网 · BookStack
- python如何绘制曲线图_python pandas plot画折线图如何显示x轴的值?