5.5 RandomAffine
功能:对图像进行仿射变换,仿射变换是二维的线性变换,由五种基本原子变换构成,分别是旋转、平移、缩放、错切和翻转
• degrees:旋转角度设置
• translate:平移区间设置,如(a, b), a设置宽(width),b设置高(height)
图像在宽维度平移的区间为 -img_width * a < dx < img_width * a
• scale:缩放比例(以面积为单位)
• fill_color:填充颜色设置
RandomAffine(degrees, translate=None, scale=None, shear=None, resample=False, fillcolor=0)
5.6 RandomErasing()
功能:对图像进行随机遮挡
• p:概率值,执行该操作的概率
• scale:遮挡区域的面积
• ratio:遮挡区域长宽比
• value:设置遮挡区域的像素值,(R, G, B) or (Gray)
RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False)
5.7 transforms.Lambda()
功能:用户自定义lambda方法
• lambd:lambda匿名函数
lambda [arg1 [,arg2, … , argn]] : expression
transforms.Lambda(lambd)
例:
transforms.TenCrop(200, vertical_flip=True), transforms.Lambda(lambda crops: torch.stack([transforms.Totensor()(crop) for crop in crops])),
六、transforms的操作
6.1 transforms.RandomChoice()
功能:从一系列transforms方法中随机挑选一个
transforms.RandomChoice([transforms1, transforms2, transforms3])
6.2 transforms.RandomApply()
功能:依据概率执行一组transforms操作
transforms.RandomApply([transforms1, transforms2, transforms3], p=0.5)
6.3 transforms.RandomOrder()
功能:对一组transforms操作打乱顺序
transforms.RandomOrder([transforms1, transforms2, transforms3])
七、自定义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
7.1椒盐噪声
椒盐噪声又称为脉冲噪声,是一种随机出现的白点或者黑点, 白点称为盐噪声,黑色为椒噪声
信噪比(Signal-Noise Rate, SNR)是衡量噪声的比例,图像中为图像像素的占比
class AddPepperNoise(object): def __init__(self, snr, p): self.snr = snr self.p = p def __call__(self, img): ``` 添加椒盐噪声具体实现过程 ``` return img
class Compose(object): def __call__(self, img): for t in self.transforms: img = t(img) return img
八、transforms方法总览
一、裁剪
• transforms.CenterCrop
• transforms.RandomCrop
• transforms.RandomResizedCrop
• transforms.FiveCrop
• transforms.TenCrop
二、翻转和旋转
• transforms.RandomHorizontalFlip
• transforms.RandomVerticalFlip
• transforms.RandomRotation
三、图像变换
• transforms.Pad
• transforms.ColorJitter
• transforms.Grayscale
• transforms.RandomGrayscale
• transforms.RandomAffine
• transforms.LinearTransformation
• transforms.RandomErasing
• transforms.Lambda
• transforms.Resize
• transforms.Totensor
• transforms.Normalize
四、transforms的操作
• transforms.RandomChoice
• transforms.RandomApply
• transforms.RandomOrd
点赞!收藏!感谢支持!
这是pytorch目前提供的方法
from torchvision import transforms from PIL import Image import matplotlib.pyplot as plt img = Image.open("img/5.jpg") data1 = transforms.RandomResizedCrop(224)(img) # 功能:随机大小、长宽比裁剪图片 # data2 = transforms.RandomResizedCrop(224)(img) # data3 = transforms.RandomResizedCrop(224)(img) data4 = transforms.RandomCrop(224)(img) # 从图片中随机裁剪出尺寸为size的图片 data5 = transforms.Resize([512, 512])(img) data6 = transforms.CenterCrop([512, 512])(img) # 从图像中心裁剪图片 data7 = transforms.RandomHorizontalFlip(p=0.9)(img) # 功能:依概率水平(左右)翻转图片 data8 = transforms.RandomVerticalFlip(p=0.9)(img) # 功能:依概率垂直(上下)翻转图片 data9 = transforms.RandomRotation(45)(img) # 功能:随机旋转图片 data10 = transforms.Pad(padding=100)(img) # 功能:对图片边缘进行填充 data11 = transforms.ColorJitter(brightness=5, contrast=0, saturation=0, hue=0)(img) # 功能:调整亮度、对比度、饱和度和色相 data12 = transforms.RandomErasing(p=0.5, scale=(0.02, 0.33), # 遮挡区域的面积 ratio=(0.3, 3.3), # 遮挡区域长宽比 value=0, # 设置遮挡区域的像素值,(R, G, B) or (Gray) inplace=False)(img) data13 = transforms.GaussianBlur(5)(img) plt.subplot(2, 2, 1), plt.imshow(img), plt.title("input") plt.subplot(2, 2, 2), plt.imshow(data1), plt.title("data1") plt.subplot(2, 2, 3), plt.imshow(data4), plt.title("data2") plt.subplot(2, 2, 4), plt.imshow(data13), plt.title("data3") plt.show()