一、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: 填充颜色设置
注意:
- RandomAffine()必须要设置degrees,如果不想设置,就设置为0
- 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)
注意:
- transforms.RandomErasing()是对张量进行操作的,所以在使用前,要先用transforms.ToTensor()
- 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要素:
- 仅接收一个参数,返回一个参数
- 注意上下游的输出与输入
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