08transforms图像增强(二)

本文详细介绍了PyTorch中的图像增强transforms,包括Pad、ColorJitter、Grayscale、RandomAffine、RandomErasing等,讲解了它们的参数设置和应用场景,并探讨了数据增强的原则与实战应用。
摘要由CSDN通过智能技术生成

一、transforms——图像变换

1.1 transforms.Pad

transforms.Pad(padding, fill=0, padding_mode=' constant')

功能:对图片边缘进行填充

  • padding: 设置填充大小
    • 当为a时, 上下左右均填充a个像素
    • 当为(a, b)时, 上下填充b个像素,左右填充a个像素
    • 当为(a,b,c, d)时, 左,上,右,下分别填充a, b, c, d
  • padding_mode: 填充模式,有4种模式, constant,edge,reflect和symmetric
  • fill: constant时, 设置填充的像素值, (R, G, B) or (Gray)

1.2 transforms.ColorJitter

transforms.ColorJitter(brightness=0,contrast=0,saturation=0,hue=0)

功能: 调整亮度、对比度、饱和度和色相

  • brightness: 亮度调整因子
    • 当为a时,从[max(0, 1-a), 1+a]中随机选择
    • 当为(a, b)时,从[a, b]中选择
  • contrast: 对比度参数,同brightness
  • saturation: 饱和度参数,同brightness
  • hue: 色相参数,
    • 当为a时, 从[-a, a]中选择参数,注::0<= a <=0.5
    • 当为(a, b)时,从[a, b]中选择参数,注:-0.5 <= a <= b <= 0.5

1.3 transforms.Grayscale

transforms.Grayscale(num_output_channels)

功能: 依概率将图片转换为灰度图

  • num_ouput channels: 输出通道数只能设1或3

1.4 transforms.RandomGrayscale

transforms.RandomGrayscale(num_output_channels,p=0.1)

功能: 依概率将图片转换为灰度图

  • num_ouput channels: 输出通道数只能设1或3
  • p: 概率值,图像被转换为灰度图的概率

1.5 transforms.RandomAffine

transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=False, fillcolor=0)

功能:对图像进行仿射变换,仿射变换是二维的线性变换,由五种基本原子变换构成, 分别是旋转、平移、缩放、错切和翻转

  • degrees: 旋转角度设置
  • translate: 平移区间设置, 如(a, b), a设置宽(width), b设置高(height),图像在宽维度平移的区间为 -img_width *a < dx < img_width *a
  • scale: 缩放比例(以面积为单位)
  • shear: 错切角度设置,有水平错切和垂直错切
    • 若为a,则仅在x轴错切,错切角度在(-a, a)之间
    • 若为(a, b),则a设置x轴角度, b设置y的角度
    • 若为(a, b, c, d), 则a, b设置x轴角度, c, d设置y轴角度
  • resample: 重采样方式, 有NEAREST、BILINEAR, BICUBIC
  • fill_color: 填充颜色设置

注意:

  1. RandomAffine()必须要设置degrees,如果不想设置,就设置为0
  2. shear中设置(a, b, c, d),如果想只设置y轴角度,就设置a,b为0

1.6 transforms.RandomErasing

transforms.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False)

功能: 对图像进行随机遮挡

  • p: 概率值,执行该操作的概率
  • scale: 遮挡区域的面积
  • ratio: 遮挡区域长宽比
  • value: 设置遮挡区域的像素值, (R, G, B) or (Gray)

注意:

  1. transforms.RandomErasing()是对张量进行操作的,所以在使用前,要先用transforms.ToTensor()
  2. value设置的像素值是要在0到1之间,也可以设置成字符串,产生彩色的覆盖区域

1.7 transforms.Lambda

transforms.Lambda (lambd)

功能: 用户自定义lambda方法

  • lambd: lambda匿名函数
    lambda [arg1 [L,arg2, … , argn]] : expression

eg:

transforms.TenCrop(200, vertical_flip=True)
transforms.Lambda(lambda crops: torch.stack([transforms.Totensor()(crop) for crop in crops]))

二、transforms——transforms方法操作

2.1 transforms.RandomChoice

功能: 从一系列transforms方法中随机挑选一个

transforms.RandomChoice([transforms1, transforms2, transforms3])

2.2 transforms.RandomApply

功能: 依据概率执行一组transforms操作

transforms.RandomApply([transforms1, transforms2, transforms3], p=0.5)

2.3 transforms.RandomOrder

功能: 对一组transforms操作打乱顺序

transforms.RandomOrder([transforms1, transforms2, transforms3]) 

三、自定义transforms

3.1 自定义transforms方法

自定义transforms要素:

  1. 仅接收一个参数,返回一个参数
  2. 注意上下游的输出与输入
class Compose(object):
	def call (self, img):
		for t in self.transforms:
			img =t(img) 
		return img

通过类实现多参数传入:

class YourTransforms(object):
	def init(self, ...):
		...
	def call_(self, img):
		...
	return img

3.2 自定义transforms示例

椒盐噪声

椒盐噪声又称为脉冲噪声, 是一种随机出现的白点或者黑点, 白点称为盐噪声,黑色为椒噪声

信噪比(Signal-Noise Rate, SNR)是衡量噪声的比例, 图像中为图像像素的占比

import os
import numpy as np
import torch
import random
import torchvision.transforms as transforms
from PIL 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值