Pytorch 图像增强 实现翻转裁剪色调等 附代码(全)

2023-10-31

前言

下文中有使用到plt,不懂的可看我这篇文章:python之Matplotlib详细分析(附代码)

数据比较少的时候使用数据增强是一个不错的选择

导入对应的包:

from PIL import Image
from torchvision import transforms as tfs

读取对应的照片:

# 此处的Path 该项目的相对路径 或者 绝对路径
# 读取 显示 照片
image = Image.open('scenery.jpg')
print(image.size)
image

截图如下:
在这里插入图片描述

数据增强的处理方式有如下

1. 裁剪

裁剪之前 先叙述一遍缩放(毕竟裁剪是基于缩放的基础)

from PIL import Image
from torchvision import transforms as tfs

# 原图尺寸为474 * 379
img = Image.open('scenery.jpg')

# 默认是300 * 300 
# 缩放原图到一定比例
img1 = tfs.Resize((300,300))(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1, 2)

axs[0].set_title('474 * 379')
axs[0].imshow(img)

axs[1].set_title('300 * 300')
axs[1].imshow(img1)

截图如下:
在这里插入图片描述

1.1 中心裁剪

  • 核心函数:transforms.CenterCrop(size)

size 参数为int,将其原图 中心裁剪为设定尺寸
如果参数为(h,w),则裁剪的尺寸为(h,w)

from PIL import Image
from torchvision import transforms as tfs

# 打开对应的图片
img = Image.open('scenery.jpg')

# 默认是300 * 300 
img1 = tfs.CenterCrop(300)(img)
# 设置对应的尺寸为300 * 200 
img2 = tfs.CenterCrop((300,200))(img)

# 通过plt输出图片
import matplotlib.pyplot as plt
axs = plt.figure().subplots(1, 2)

axs[0].set_title('300 * 300')
axs[0].imshow(img1)

axs[1].set_title('300 * 200')
axs[1].imshow(img2)

截图如下:
在这里插入图片描述

1.2 随机裁剪

  • 核心函数:transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode='constant')
参数 具体说明
size 1.为size,结果为size * size
2.为(h,w),结果为h * w
padding 填充大小
1.为a,上下左右填充a
2.为(a,b)时,左右填充a个像素,上下填充b个像素
3.为(a,b,c,d)时,左、上、右、下分别填充a、b、c、d
pad_if_need 默认为False
为True,超出尺寸进行填充
fill 通道填充的颜色
padding_mode 填充模式
1.constant,像素值由fill填充
2.edge,图像边缘像素值填充
3.reflect,镜像填充,最后一个像素不镜像,也就是反射。1, 2, 3, 4 变为 3, 2, 1, 2, 3, 4, 3, 2
4.symmetric,镜像填充,最后一个像素镜像,也就是对称。1, 2, 3, 4 变为 2, 1, 1, 2, 3, 4, 4, 3
from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# 默认都300 * 300 
img1 = tfs.RandomCrop(300)(img)

# padding为填充元素
img2 = tfs.RandomCrop(300,padding=(16, 64))(img)

# fill填充的色彩
img3 = tfs.RandomCrop(300,padding=(16, 64),fill=(255, 255, 0))(img)

# 超出尺寸,该参数需要设置为True
img4 = tfs.RandomCrop(2000,pad_if_needed=True)(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,4)

axs[0].set_title('img1')
axs[0].imshow(img1)

axs[1].set_title('img2')
axs[1].imshow(img2)

axs[2].set_title('img3')
axs[2].imshow(img3)

axs[3].set_title('img4')
axs[3].imshow(img4)

截图如下:
在这里插入图片描述


按照填充模式的代码:

from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# 填充模式为constant,默认本身也是constant
img1 = tfs.RandomCrop(500,padding=128,padding_mode='constant')(img)

# 填充模式为edge
img2 = tfs.RandomCrop(500,padding=128,padding_mode='edge')(img)

# 填充模式为reflect
img3 = tfs.RandomCrop(500,padding=128,padding_mode='reflect')(img)

# 填充模式为symmetric
img4 = tfs.RandomCrop(500,padding=128,padding_mode='symmetric')(img)


import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,4)

axs[0].set_title('img1')
axs[0].imshow(img1)

axs[1].set_title('img2')
axs[1].imshow(img2)

axs[2].set_title('img3')
axs[2].imshow(img3)

axs[3].set_title('img4')
axs[3].imshow(img4)

截图如下:

在这里插入图片描述

1.3 随机尺寸裁剪

  • 核心函数:transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(3/4, 4/3), interpolation=<InterpolationMode.BILINEAR: 'bilinear'>)
参数 具体说明
size 1.为size,结果为size * size
2.为(h,w),结果为h * w
scale 随机裁剪面积比例,默认区间(0.08,1)之间随机取一个数
ratio 随机长宽比,默认区间(3/4,4/3)之间随机取一个数
interpolation 插值方法(PIL. Image. NEARESTPIL. Image. BILINEARPIL. Image. BICUBIC
from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# 裁剪的尺寸都是300 * 300
# 随机裁剪面积比例为0.1-1之间的一个数
img1 = tfs.RandomResizedCrop(300,scale=(0.1,1))(img)

# 随机裁剪长宽比为1-4/3之间的一个数
img2 = tfs.RandomResizedCrop(300,ratio=(1,4/3))(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,3)

axs[0].set_title('original')
axs[0].imshow(img)

axs[1].set_title('img1')
axs[1].imshow(img1)

axs[2].set_title('img2')
axs[2].imshow(img2)

截图如下:

在这里插入图片描述

2. 翻转

2.1 水平翻转

  • 核心函数:transforms.RandomHorizontalFlip(p=0.5)

p为概率值,如果p为1,百分百翻转。p为0.5 ,百分之50的概率可能会翻转也可能不会

from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# p为1一定翻转
# p为0.5 ,百分之50的概率可能会翻转也可能不会
img1 = tfs.RandomHorizontalFlip(p=1)(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1, 2)

axs[0].set_title('original')
axs[0].imshow(img)

axs[1].set_title('flip horizontal')
axs[1].imshow(img1)

截图如下:

在这里插入图片描述

2.2 垂直翻转

  • 核心函数:transforms.RandomVerticalFlip(p=0.5)

p为概率值,如果p为1,百分百翻转。p为0.5 ,百分之50的概率可能会翻转也可能不会

from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# p为1一定翻转
# p为0.5 ,百分之50的概率可能会翻转也可能不会
# 注意区分与水平翻转的函数
img1 = tfs.RandomVerticalFlip(p=1)(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1, 2)

axs[0].set_title('original')
axs[0].imshow(img)

axs[1].set_title('flip vertical')
axs[1].imshow(img1)

截图如下:

在这里插入图片描述

2.3 随机旋转

  • 核心函数:transforms.RandomRotation(degrees, expand=False, center=None, fill=0, resample=None)
参数 具体说明
degrees 旋转角度
1.为a,在(-a,a)区间随机选择旋转角度
2.为(a,b),在在(a,b)区间随机选择旋转角度
expand 图片超出尺寸是否显示完整图
1.默认False,超出不会显示完整图
2.True,超出会显示完整图
center 旋转轴位置
默认中心旋转
resample 重采样方法
from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# 逆时针旋转45
img1 = tfs.RandomRotation(degrees=(45, 45))(img)

# 逆时针旋转45,旋转超出区域启动扩展
img2 = tfs.RandomRotation(degrees=(45, 45), expand=True)(img)

# 逆时针旋转,图外区域填充颜色
img3 = tfs.RandomRotation(degrees=(45, 45), fill=(255, 255, 0))(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,4)

axs[0].set_title('original')
axs[0].imshow(img)

axs[1].set_title('img1')
axs[1].imshow(img1)

axs[2].set_title('img2')
axs[2].imshow(img2)

axs[3].set_title('img3')
axs[3].imshow(img3)

截图如下:

在这里插入图片描述

3. 色调

3.1 灰度变换

  • 核心函数:transforms.Grayscale(num_output_channels=1)

一般不设置,默认单通道灰度,如果需要三通道灰度,则对应将其值改为3即可

from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# 灰度变换
img1 = tfs.Grayscale()(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,2)

axs[0].set_title('original')
axs[0].imshow(img)

axs[1].set_title('gray')
axs[1].imshow(img1)

截图如下:

在这里插入图片描述

3.2 色彩抖动

  • 核心函数:transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)
参数 具体说明
brightness 亮度
1.元组(min, max),给定区间随机变换,不可有负值
2.浮点数,亮度范围为[max(0, 1 - brightness), 1 + brightness]
contrast 对比度。规则同上
saturation 饱和度。规则同上
hue 色调
1.元组(min, max),给定区间随机变换,不可有负值
2.浮点数,色调范围为[-hue, hue]区间随机变换
整体区间范围为[0,0.5] or [-0.5,0.5]
from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# 亮度设置3
img1 = tfs.ColorJitter(brightness=(3, 3))(img)

# 对比度设置3
img2 = tfs.ColorJitter(contrast=(3, 3))(img)

# 饱和度设置3
img3 = tfs.ColorJitter(saturation=(3, 3))(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,4)

axs[0].set_title('original')
axs[0].imshow(img)

axs[1].set_title('brightness')
axs[1].imshow(img1)

axs[2].set_title('contrast')
axs[2].imshow(img2)

axs[3].set_title('saturation')
axs[3].imshow(img3)

截图如下:
在这里插入图片描述

3.3 随机翻转颜色

  • 核心函数:transforms.RandomInvert(p=0.5)
    p为概率值,如果p为1,百分百翻转。p为0.5 ,百分之50的概率可能会翻转也可能不会
from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# 随机翻转图片颜色
img1 = tfs.RandomInvert(p=0.5)(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,2)

axs[0].set_title('original')
axs[0].imshow(img)

axs[1].set_title('img1')
axs[1].imshow(img1)

截图如下:

在这里插入图片描述

3.4 随机调整锐度

  • 核心函数:transforms.RandomAdjustSharpness(sharpness_factor, p=0.5)

sharpness_factor 该参数为调整锐度,0为模糊,1为原图。随着数字越大,锐度越高,没有设置锐度上限
p为概率值,如果p为1,百分百翻转。p为0.5 ,百分之50的概率可能会翻转也可能不会

from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# 随机调转图片锐度
img1 = tfs.RandomAdjustSharpness(200)(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,2)

axs[0].set_title('original')
axs[0].imshow(img)

axs[1].set_title('img1')
axs[1].imshow(img1)

截图如下:
在这里插入图片描述

3.5 高斯模糊

  • 核心函数:transforms.GaussianBlur(kernel_size, sigma=(0.1, 2.0))
参数 具体说明
kernel_size 模糊半径(奇数)
sigma 正态分布标准差
1.为(min, max),在(min, max)区间随机取一个数
2.浮点数,则为该数
from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# size为11,标准差为10
img1 = tfs.GaussianBlur(11,10)(img)

# size为51,标准差为10
img2 = tfs.GaussianBlur(51,10)(img)

# size为101,标准差为100
img3 = tfs.GaussianBlur(101,100)(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,4)

axs[0].set_title('original')
axs[0].imshow(img)

axs[1].set_title('img1')
axs[1].imshow(img1)

axs[2].set_title('img2')
axs[2].imshow(img2)

axs[3].set_title('img3')
axs[3].imshow(img3)

截图如下:

在这里插入图片描述

4. 边缘填充

  • 核心函数:transforms.Pad(padding, fill=0, padding_mode=‘constant’)
参数 具体说明
padding 拓展大小
1.为a,上下左右填充a
2.为(a,b)时,左右填充a个像素,上下填充b个像素
3.为(a,b,c,d)时,左、上、右、下分别填充a、b、c、d
fill 填充值
默认0,黑色。也可填充三通道
padding_mode 填充模式
1.constant,像素值由fill填充
2.edge,图像边缘像素值填充
3.reflect,镜像填充,最后一个像素不镜像,也就是反射。1, 2, 3, 4 变为 3, 2, 1, 2, 3, 4, 3, 2
4.symmetric,镜像填充,最后一个像素镜像,也就是对称。1, 2, 3, 4 变为 2, 1, 1, 2, 3, 4, 4, 3
from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# 第一个参数:扩充的宽度
# 第二个参数:填充颜色
img1 = tfs.Pad(100,fill=(0, 0, 255))(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,2)

axs[0].set_title('original')
axs[0].imshow(img)

axs[1].set_title('img1')
axs[1].imshow(img1)

截图如下:

在这里插入图片描述

5. 仿射变换

该含义为:旋转、平移、缩放、扭曲等组合

  • 核心函数:transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=0, fillcolor=0)
参数 具体说明
degrees 随机旋转角度范围,0为不旋转
translate 水平和垂直平移因子
为(a, b),水平平移位置为 (-img_width * a , img_width * a)该区间随机选择一个数。垂直平移为 (-img_height * b , img_height * b)该区间随机选择一个数
scale 缩放因子
为(a, b),在(a, b)区间随机选择一个数
shear 随机扭曲角度范围
为(a, b),在(a, b)区间随机选择一个数
resample 重采样
fillcolor 填充色彩,可三通道填充
from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# 随机旋转
img1 = tfs.RandomAffine(45)(img)

# 随机平移
img2 = tfs.RandomAffine(0, (0.7, 0))(img)

# 随机缩放
img3 = tfs.RandomAffine(0, None, (3, 5))(img)

# 随机扭曲
img4 = tfs.RandomAffine(0, None, None, (45, 90))(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,4)

axs[0].set_title('img1')
axs[0].imshow(img1)

axs[1].set_title('img2')
axs[1].imshow(img2)

axs[2].set_title('img3')
axs[2].imshow(img3)

axs[3].set_title('img4')
axs[3].imshow(img4)

截图如下:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pytorch 图像增强 实现翻转裁剪色调等 附代码(全) 的相关文章

随机推荐

  • cuda-cnn之mnist文件读取(1)

    https github com zhxfl CUDA CNN 第一步是通过readMnistData读取训练样本和测试样本 mnist train images idx3 ubyte 训练样本 mnist train labels idx
  • 回归分析

    线性回归分析的内容 能否找到一个线性组合来说明一组自变量和因变量的关系 如果能的话 这种关系的强度有多大 也就是利用自变量的线性组合来预测因变量的能力有多强 整体解释能力是否具有统计上的显著性意义 在整体解释能力显著的情况下 哪些自变量有显
  • 【Java】BufferedOutputStream与BufferedInputStream字节缓存输出流和字节缓存输入流的使用

    理解 BufferedInputStream 用于读取文本文件内容 它继承于FilterInputStream BufferedOutputStream 本身带有一个缓冲区 在写入数据时 先放到缓冲区中 实现缓冲的数据流 BufferedO
  • bash测试test详解

    bash测试test详解 概述 任何相对完整的计算机语言都能够测试某个条件 然后根据测试的结果采取不同的动作 对于测试条件 Bash使用test命令 各种方括号和圆括号 if then结构等来测试条件 7 1 Test Constructs
  • c++调用python,传递python的类

    引用yahstudio
  • 设计模式 - abstract class和interface区别

    本文摘自书籍 大话设计模式 此系列文章GitHub地址 abstract class和interface区别 abstract class和interface在Java语言中都是用来进行抽象类 本文中的抽象类并非从abstract clas
  • 斯坦福大学吴恩达教授machine learning(1): octave安装

    刚开始学习 写博客只为督促一下自己 记录一下学习的点滴 菜鸟开始了 一 octave的下载 octave官网 点击打开链接 如图所示 下载地址 点击打开链接 如下图 我选的octave 4 22 w64 installer exe 当前最新
  • ValueError:Shape of `pred` and `label should be equal, but there are [1, 288, 384] and [1, 292, 384]

    在用PaddleSeg训练时遇到问题 ValueError Shape of pred and label should be equal but there are 1 288 384 and 1 292 384 目录 问题分析 批量查询
  • 实现 后台需要显示订单信息,但是订单信息里面涉及到查询2张表 。本代码使用了MapListHandler

    Dao层的代码实现 Service层实现 Servlet层实现 Bean 实现效果 以上是图片展示 一下是部分代码展示 DAO部分 通过查出2个表的数据where u id o id的数据MapListHandler 然后再通过遍历MapL
  • CVE-2021-21287:MiniO未授权SSRF漏洞

    一 介绍 MinIO 是一个基于Apache License v2 0开源协议的对象存储服务 它兼容亚马逊S3云存储服务接口 非常适合于存储大容量非结构化的数据 例如图片 视频 日志文件 备份数据和容器 虚拟机镜像等 而一个对象文件可以是任
  • 尼科彻斯定理

    链接 尼科彻斯定理 牛客题霸 牛客网 nowcoder com 描述 验证尼科彻斯定理 即 任何一个整数m的立方都可以写成m个连续奇数之和 例如 1 3 1 2 3 3 5 3 3 7 9 11 4 3 13 15 17 19 输入一个正整
  • [Machine Learning & Algorithm] 随机森林(Random Forest)

    1 什么是随机森林 作为新兴起的 高度灵活的一种机器学习算法 随机森林 Random Forest 简称RF 拥有广泛的应用前景 从市场营销到医疗保健保险 既可以用来做市场营销模拟的建模 统计客户来源 保留和流失 也可用来预测疾病的风险和病
  • 使用MySQL8.0以上版本和MySQL驱动包8.0以上出现的问题

    目录 1 时区问题 2 驱动程序类问题 1 时区问题 问题代码
  • dll,lib,.a,.so的联系与区别。什么是共享库?与dll的区别是什么?

    dll lib a so的联系与区别 什么是共享库 与dll的区别是什么 区别与联系 静态库与动态库 问题 疑问 什么是共享存档 其他内容 map pdb 文件 区别与联系 本文结合所学和理解进行简单了描述dll与lib a so文件的关系
  • IBatis.net介绍

    从上而下的理解IBatis net这个简易的ORM框架 1 DAL层 public class AccountService public int TestInsertOne Accounts account Object obj Mapp
  • 基于QT开发的截图工具

    概述 这是一个使用QT设计的截图工具 目前效果图 历程 意动 现在网上免费的截图工具很多 最近用了一款很不错的 叫Snipaste 这个软件就是基于QT开发的 不过并没有开源 软件设计的很好用 界面也很清新 于是我也想自己尝试这设计一个这样
  • Oracle 性能最大化

    配置和优化有什么不同 获得最大的性能 配置操作系统 配置Oracle Oracle 性能 调整和配置数据库对象 优化Oracle 最大化 如果你问很多Oracle DBA 你工作中最大的一部分是什么 几乎所有的回答都是 数据库的配置和优化
  • google cartographer参数配置和话题转发

    为了对google cartographer进行实验仿真 安装完成后首先用官方rosbag进行实验没问题后再尝试用自己的rosbag文件 重要的参考资料 https google cartographer ros readthedocs i
  • win10安装TeXLive2019

    下载安装包 到TeX Live官网下载iso安装包 Acquiring TeX Live as an ISO image 点击上图中的链接 会根据网络选择合适的镜像 方便我们下载 我的镜像是上海交通大学的 http mirrors sjtu
  • Pytorch 图像增强 实现翻转裁剪色调等 附代码(全)

    目录 前言 1 裁剪 1 1 中心裁剪 1 2 随机裁剪 1 3 随机尺寸裁剪 2 翻转 2 1 水平翻转 2 2 垂直翻转 2 3 随机旋转 3 色调 3 1 灰度变换 3 2 色彩抖动 3 3 随机翻转颜色 3 4 随机调整锐度 3 5