1.背景

因为数据集很少,项目还需要进行图像的识别,因此利用图像增广技术产生相似但是又不同的样本,扩大数据集的规模,从而降低模型对某些属性的依赖,从而提高模型的泛化能力。常见的图像增广技术有:翻转和剪切,变换颜色等。接下来介绍的这种是图像的旋转

2.实现方法

import cv2
from math import *
import osdef remote(img, degree):height, width = img.shape[:2]radians = float(degree / 180 * pi)heightNew = int(width * fabs(sin((radians))) + height * fabs(cos((radians))))widthNew = int(height * fabs(sin((radians))) + width * fabs(cos((radians))))# 得到二维矩阵的旋转的仿射矩阵matRotation = cv2.getRotationMatrix2D((width / 2, height / 2), degree, 1)# 中心位置的实际平移matRotation[0, 2] += (widthNew - width) / 2matRotation[1, 2] += (heightNew - height) / 2imgRotation = cv2.warpAffine(img, matRotation, (widthNew, heightNew), borderValue=(255, 255, 255))return imgRotationif __name__ == "__main__":# 图片路径image_path = r"C:/Users/zhang/Desktop/pic03/"# 角度列表agree_list = [-30, -60, -90, -120, -150, -180, -210, -240, -270, -300, -330]for dirpath, dirnames, filenames in os.walk(image_path):for filename in filenames:img = cv2.imread(os.path.join(image_path, filename))for agree in agree_list:imgRotation = remote(img, agree)cv2.imwrite(image_path + filename.split('.')[0] + "-" + str(agree) + ".jpg", imgRotation)

3.实现原理

  1. 基于最近邻取值的正向映射法
    以顺时针旋转为例来堆到旋转变换公式。如下图所示。

    旋转前:

x0=rcosb;y0=rsinb

旋转a角度后:

x1=rcos(b-a)=rcosbcosa+rsinbsina=x0cosa+y0sina

y1=rsin(b-a)=rsinbcosa-rcosbsina=-x0sina+y0cosa

正向映射即根据原图的坐标推导出旋转图像对应点坐标,然后直接将原图坐标灰度值赋给x1,y1

2.基于最近邻取值的反向映射法

旋转前:

x1=rcosc;y1=rsinc

旋转a角度后:

x0=rcos(c+a)=rcosccosa-rsincsina=x1cosa-y1sina

y0=rsin(c+a)=rsinccosa+rcoscsina=-x1sina+y1cosa

反向映射即已知旋转后图像坐标,通过公式推导出原始图像上对应坐标,将该坐标对应灰度值赋给旋转后坐标。因为计算得到的y0, x0非整数,最近邻方法即将与(Xo,Yo)距离最近的像素的灰度值作为(Xo,Yo)的灰度值赋给(X1,Y1)点。
3.基于双线性插值的反向映射法
在计算(Xo,Yo)的灰度值时,采用如下方法计算:

4.实现方法的理解

其实步骤2代码采用的方法其实是最近邻取值的正向映射法,在计算出旋转变换矩阵M后,计算一下可以正常包含旋转后图像的外接矩形框的长和宽,然后计算外接矩形框的中心和原矩形框中心的距离,最后将旋转后的图像中心移到新的外接矩形框的中心。

参考
1:https://zhuanlan.zhihu.com/p/109099445
2:https://blog.csdn.net/liyuan02/article/details/6750828
3:https://blog.csdn.net/lkj345/article/details/50555870

图像增广——图片旋转任意角度(python实现)相关推荐

  1. JQuery插件让图片旋转任意角度且代码极其简单 - 摘自网友

    JQuery插件让图片旋转任意角度且代码极其简单 2012-04-01 09:57:03     我来说两句       收藏    我要投稿 引入下方的jquery.rotate.js文件,然后通过 ...

  2. JQuery插件让图片旋转任意角度且代码极其简单

    引入下方的jquery.rotate.js文件,然后通过$("选择器").rotate(角度);可以旋转任意角度, 例如$("#rotate-image").r ...

  3. html图片旋转任意角度,将图像快速旋转任意角度 - jixu2008的日志 - VB爱好者乐园(VBGood) - Powered by Discuz!...

    ' '下面是窗体代码,在 VB6 调试通过 '需在窗体放置以下 6 个控件,所有控件不必设置任何属性(包括位置和大小),全部采用默认设置: '   Command1.Command2.Label1.P ...

  4. 图像处理:手写实现图像增广算法(旋转、亮度调整、裁剪与拼接)

    目录 前言 算法理论 基础实现 a.旋转 b.亮度调整 c.裁剪及拼接 随机调整参数 d.随机翻转算法 e.随机颜色明暗调整算法 f.随机裁剪算法 实验分析 本章小结 参考文章 前言 图像增广算法在计 ...

  5. y空间兑换代码_进行图像增广的15+种功能总结和Python代码实现

    python代码可以自己扩充图像数据集. ​ 无论我们喜欢Keras还是Pytorch,我们都可以使用丰富的资料库来有效地增广我们的图像. 但是如果遇到特殊情况: 我们的数据集结构复杂(例如3个输入图 ...

  6. 【图像增广库imgaug】官方文档翻译(一):加载并增强图片

    文章目录 前言 一.加载并增广一张图片 二.加载并显示一张图片 三.增强图像 四.增强一组图像 五.同时用很多增强图像技术 六.增强不同尺寸的图片 前言 imgaug是一个很好用的图像增广库.学习的最 ...

  7. 进行图像增广的15+种功能总结和Python代码实现

    python代码可以自己扩充图像数据集. ​ 无论我们喜欢Keras还是Pytorch,我们都可以使用丰富的资料库来有效地增广我们的图像. 但是如果遇到特殊情况: 我们的数据集结构复杂(例如3个输入图 ...

  8. opencv图片旋转关于中心旋转任意角度与坐标转换

    如下例子,实现图片关于中心旋转任意角度,及坐标变换 import os import os.path import cv2 import numpy as np from math import co ...

  9. c++实现图像旋转任意角度

    图形图像处理-之-任意角度的高质量的快速的图像旋转 上篇 纯软件的任意角度的快速旋转                                 HouSisong@GMail.com   200 ...

  10. 街景字符识别2-图像读取及图像增广

    1 目的 PIL读取数据 PIL+Torch生成小批量图像数据样本 理解Baseline中torchvision.transforms进行图像增广的基本使用方法. 2 图像读取 Python中完成数据 ...

最新文章

  1. Spring中的异步任务
  2. mysql提取数据字符_如何从MySQL查询的字符串中提取数值?
  3. 注册用户模块 password bug
  4. jsr303自定义验证_JSR 310新日期/时间API的自定义JSR 303 Bean验证约束
  5. 洛谷 P2389 电脑班的裁员 解题报告
  6. c语言栈指针移动原理,C指针原理(4)-ATamp;T汇编
  7. mui 框架:a标签无法跳转 - 解决篇
  8. 小米新生态总监董红光:致力打造智能服务开放平台
  9. Python黑帽编程 3.4 跨越VLAN
  10. 智能优化算法应用:基于GWO优化的指数熵图像多阈值分割 - 附代码
  11. ASCII码,HTML转义字符表,以及快捷键
  12. Qt Android treeWidget树状单击展开
  13. 如何让自己的博客被搜索引擎收录
  14. Mybatis实现订单案例的五表联合操作
  15. Java中String中split方法
  16. 高速版双底形态选股关联自选股票池!股票量化分析工具QTYX-V2.3.4
  17. 亚马逊、Lazada、Shopee、速卖通、wish、eBay、沃尔玛、煤炉、阿里国际、Tik Tok测评(补单)是怎么操作的,核心关键是什么?
  18. Bloxorz I bfs
  19. 川农《水力学(本科)》21年12月作业考核
  20. Idea运行支付宝网站支付demo踩坑解决及其测试注意事项

热门文章

  1. InnoDB存储引擎MVCC实现原理
  2. c语言习题集(含答案)
  3. 《网络工程师教程(第五版)》大纲及与第四版比较
  4. 2022年各种经典java小游戏
  5. ASP.NET 文件后缀名详解
  6. XP系统装python
  7. 单片机C语言程序设计实训100例大集合
  8. 哪些软件翻译英文文献比较准确呢?
  9. 今日复习的linux命令
  10. 斗鱼php开发面经,斗鱼面经