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)
裁剪图片尺寸为224224
上下左右均填充16个元素*
transforms.RandomCrop(224,padding=(16,64))
裁剪图片尺寸为224224
上下左右均填充16个元素,上下填充64*
ransforms.RandomCrop(224,padding=16,fill=(255,0,0))
裁剪图片尺寸为224224
上下左右均填充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')
裁剪图片尺寸为224224
上下左右均填充64个元素,用边缘的颜色进行填充*
transforms.RandomCrop(224,padding-64,padding_mode='reflect')
裁剪图片尺寸为224224
上下左右均填充64个元素,用不包括边缘像素对称填充*
transforms.RandomCrop(1024, padding=1024,padding mode='symmetric'),
裁剪图片尺寸为10241024
上下左右均填充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
版权归原作者 ZHANGYAN 所有, 如有侵权,请联系我们删除。