transforms数据预处理方法(一)
发布时间:2024-02-10点击次数:

文章目录

transforms数据预处理方法(一)

1.transforms——裁剪

(1) transforms.CenterCrop(size)

功能:从图像中心裁剪图片
size:所需裁剪图片尺寸

transforms.CenterCrop(196)

(2) transforms.RandomCrop (size, padding= None , pad_if_needed= False ,fill= 0 , padding_mode= ‘constant’)

功能:从图片中随机裁剪出尺寸为size的图片
size:所需裁剪图片尺寸
padding:设置填充大小 ;
当为a时,上下左右均填充a个像素 ;
当为(a,b)时,上下填充b个像素,左右填充a个像素 ;
当为(a, b, c, d)时,左,上,右,下分别填充a, b, c, d
pad_if_need:若图像小于设定size,则填充 padding_mode:
填充模式,有4种模式
constant:像素值由fill设定 edge:像素值由图像边缘像素决定
reflect:镜像填充,最后一个像素不镜像,eg:[1,2,3,4] → [3,2,1,2,3,4,3,2]
symmetric:镜像填充,最后一个像素镜像,eg:[1,2,3,4] → [2,1,1,2,3,4,4,3]
fill:constant时,设置填充的像素值

transforms.Randomcrop(224,padding=16)

裁剪图片尺寸为224*224
上下左右均填充16个元素

 transforms.RandomCrop(224,padding=(16,64))

裁剪图片尺寸为224*224
上下左右均填充16个元素,上下填充64

 ransforms.RandomCrop(224,padding=16,fill=(255,0,0))

裁剪图片尺寸为224*224
上下左右均填充16个元素,填充采用RGB(255,0,0) 正红色

 transforms.RandomCrop(512, pad if needed=True), # pad if needed=True

如果裁剪大小大于图片本身大小 那么pad if needed 一定设为True 不然出问题

ransforms.RandomCrop(224,padding=64,padding mode='edge')

裁剪图片尺寸为224*224
上下左右均填充64个元素,用边缘的颜色进行填充

 transforms.RandomCrop(224,padding-64,padding_mode='reflect')

裁剪图片尺寸为224*224
上下左右均填充64个元素,用不包括边缘像素对称填充

 transforms.RandomCrop(1024, padding=1024,padding mode='symmetric'),

裁剪图片尺寸为1024*1024
上下左右均填充1024个元素,用包括边缘像素对称填充

(3) RandomResizedCrop (size, scale=(0.08, 1.0), ratio=(3/4, 4/3), interpolation)

功能:随机大小、长宽比裁剪图片
size:所需裁剪图片尺寸
scale:随机缩放面积比例, 默认(0.08, 1)
ratio:随机长宽比,默认(3/4, 4/3)
interpolation:插值方法

  • PIL.Image.NEAREST
  • PIL.Image.BILINEAR
  • PIL.Image.BICUBIC
tansforms.RandomResized(size=224,scale(0.08,1))

首先根据 scale 的比例缩放原图,然后根据 ratio 的长宽比裁剪,最后使用插值法把图片变换为 size 大小。

裁剪尺寸是224*224

(4) transforms.FiveCrop(size)

功能:在原始图片的左上右上左下右下中间裁剪size大小的图片
size:所需裁剪图片尺寸

transforms.FiveCrop(112),
transforms.lambada(lambda crops:torch.stack([(transforms.ToTensor()(crop)) for crop in crops])  # 变成张量的形式
(5) transforms.TenCrop(size, vertical_flip=False)

功能:在图像的上下左右以及中心裁剪出尺寸为size的5张图片,TenCrop对这5张图片 进行水平或者垂直镜像获得10张图片
size:所需裁剪图片尺寸
vertical_flip:是否垂直翻转

transforms.TenCrop(112,vertical_flip=True)
transforms.lambada(lambda crops:torch.stack([(transforms.ToTensor()(crop)) for crop in crops])  # 变成张量的形式

2.transform—翻转 旋转

(1) RandomHorizontalFlip(p=0.5)
(2) RandomVerticalFlip(p=0.5)

功能:依概率水平(左右)或垂直(上下)翻转图片
p:翻转概率

transforms.RandomHorizontalFlip(p=0.5)
transforms.RandomVerticalFlip(p=0.5)


(3) RandomRotation (degrees, resample=False, expand=False, center=None)

功能:随机旋转图片
degrees:旋转角度
当为a时,在(-a,a)之间选择旋转角度
当为(a, b)时,在(a, b)之间选择旋转角度
resample:重采样方法
expand:是否扩大图片,以保持原图信息
center:旋转点设置,默认中心旋转

transforms.RandomRotation(90)

角度是(-90-90)

transforms.RandomRotation((90),expand=True)

角度是(-90-90) 填充 以保持原图信息

transforms.RandomRotation(30,center=(0,0)

以左上角为定点进行旋转 角度是(-30-30)

transforms.RandomRotation(30,center(0,0),expand=True)

以左上角为轴进行旋转 角度为(-30,30)

发现图片还是有丢失 是因为它的机制适用于围绕着中心点旋转这一种情况,而这个代码围绕的是左上角 ,所以会造成填充不完整 ,图像缺失。

3. 小结

transform 裁剪:
CenterCrop
RadomCrop
RadomResizedCrop
FiveCrop
TenCrop

transform 翻转 旋转
RadomHorizontalFlip
RadomVerticalFlip
RadomRotation


TEL:402-135-4540    FAX:+86-163-4235    EMAIL:56foto.com

版权所有:Copyright © 2010-2024 bg视讯·(中国)官方网站 版权所有网站地图     公司地址:河北省石家庄市  吉ICP备06001715号

友情链接: