2020.7.6修改,补全了对应的测试代码
transform.Pad(padding, fill=0, padding_mode='contant')
import torch
import torchvision
from torchvision.transforms import Compose, ToTensor, Pad, ColorJitter, RandomAffine, RandomErasing
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
unloader = torchvision.transforms.ToPILImage()
transforms1 = Compose([Pad(100, fill=(0, 0, 0)),
ToTensor()])
transforms2 = Compose([Pad((100,50), fill=(0, 0, 0)),
ToTensor()])
transforms3 = Compose([Pad((100,200,300,50), fill=(0, 255, 0)),
ToTensor()])
image = Image.open("lena.png").convert("RGB")
plt.subplot(2,2,1)
plt.imshow(image)
plt.subplot(2,2,2)
img=transforms1(image)
img=unloader(img)
plt.grid()
plt.imshow(img)
plt.subplot(2,2,3)
img=transforms2(image)
img=unloader(img)
plt.grid()
plt.imshow(img)
plt.subplot(2,2,4)
img=transforms3(image)
img=np.transpose(img.numpy(),(1,2,0))
plt.imshow(img)
plt.grid()
plt.savefig("out.png",dpi=300)
plt.show()
2.ColorJitter
调整亮度、对比度、饱和度和色相
transforms.ColorJitter(brightness=0,contrast=0,saturation=0,hue=0)
brightness:亮度调整因子
当为a时,从[max(0,1-a),a+1]中随机选择,当为(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
import torch
from torchvision.utils import make_grid
import torchvision
from torchvision.transforms import Compose, ToTensor, Pad, ColorJitter, RandomAffine, RandomErasing
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
unloader = torchvision.transforms.ToPILImage()
tensor = ToTensor()
transforms = Compose([ColorJitter(brightness=0.8),
ToTensor()])
transforms1=Compose([ColorJitter(contrast=0.8),
ToTensor()])
transforms2=Compose([ColorJitter(saturation=0.8),
ToTensor()])
transforms3=Compose([ColorJitter(hue=0.4),
ToTensor()])
transforms4=Compose([ColorJitter(brightness=0.8,saturation=0.8,contrast=0.8,hue=0.4),
ToTensor()])
image = Image.open("lena.png").convert("RGB")
img = tensor(image)
imgs=list()
imgs1=list()
imgs2=list()
imgs3=[]
imgs4=[]
for i in range(9):
imgT = transforms(image)
imgT1 = transforms1(image)
imgT2 = transforms2(image)
imgT3 = transforms3(image)
imgT4 = transforms4(image)
imgs.append(imgT)
imgs1.append(imgT1)
imgs2.append(imgT2)
imgs3.append(imgT3)
imgs4.append(imgT4)
img=torch.stack(imgs,dim=0)
img = make_grid(img, nrow=3,padding=5,normalize=True,scale_each=True)
img = unloader(img)
plt.imshow(img)
plt.show()
img=torch.stack(imgs1,dim=0)
img = make_grid(img, nrow=3,padding=5,normalize=True,scale_each=True)
img = unloader(img)
plt.imshow(img)
plt.show()
img=torch.stack(imgs2,dim=0)
img = make_grid(img, nrow=3,padding=5,normalize=True,scale_each=True)
img = unloader(img)
plt.imshow(img)
plt.show()
img=torch.stack(imgs3,dim=0)
img = make_grid(img, nrow=3,padding=5,normalize=True,scale_each=True)
img = unloader(img)
plt.imshow(img)
plt.show()
img=torch.stack(imgs4,dim=0)
img = make_grid(img, nrow=3,padding=5,normalize=True,scale_each=True)
img = unloader(img)
plt.imshow(img)
plt.show()
3.Grayscalea和RandomGrayscale
依据概率把图片转变成灰度图
import torch
from torchvision.utils import make_grid
import torchvision
from torchvision.transforms import Compose, ToTensor, Pad, ColorJitter,RandomGrayscale, Grayscale,RandomAffine, RandomErasing
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
unloader = torchvision.transforms.ToPILImage()
tensor = ToTensor()
transforms = Compose([Grayscale(num_output_channels=3),
ToTensor()])
transforms1=Compose([RandomGrayscale(p=0.4),
ToTensor()])
image=Image.open('lena.png').convert('RGB')
imgs=[]
for i in range(4):
if i==0:
img=transforms(image)
imgs.append(img)
else:
imgs.append(transforms1(image))
out=torch.stack(imgs)
out_img=make_grid(out,nrow=2,normalize=True,scale_each=True)
out_img=np.transpose(out_img.numpy(),(1,2,0))
plt.imshow(out_img)
plt.show()
4.RandomAffine
对图像进行仿射变换,仿射变换是二维的线性变换,由五种基本原子变换构成,分别是旋转、平移、缩放、错切和翻转
transforms.ToTensor()
transforms.RandomErasing(p=1,scale=(0.02,0.33),ratio=(0.3,3.3),value=(254,255,0,0))
6.lambda
用户自定义lambda方法
transforms.TenCrop(200,vertical_flip=True)
transforms.Lambda(lambda crops:torch.stack([transforms.ToTensor()(crop) for crop in crops]))
定义的要素: