第十五篇—图像变换(transforms专题)
方法一:ToTensor( )
功能:把图片转换为张量(shape:H*W*C转C*H*W),并将像素值归一化(0~255转0~1);
代码实现:
结果:

方法二:Normalize(mean,std,inplace=False)
功能:按照Channel对图像进行标准化;
mean:各通道的标准差,[ R_mean,G_mean,B_mean ];
std:各通道的标准差,[ R_std,G_std,B_std ];
inplace:是否原地操作,参考第十一篇—自动求导(autograd);

代码实现:
结果:

方法三:Resize([ H, W ])
功能:调整图像的分辨率,缩放到(H,W);
代码实现:
结果:

方法四:Pad(padding,fill=0,padding_mode="constant")
功能:对图像边缘进行填充;
padding:设置填充大小,a表示左右上下边均填充a个像素,(a,b)表示左右边均填充a个像素、上下边均填充b个像素,(a,b,c,d)表示左边填充a个像素,上边填充b个像素,右边填充c个像素,下边填充d个像素;
fill:填充的像素值,默认为0(黑);
padding_mode:填充模式,默认为"constant",参考第十三篇—裁剪(Crop);
代码实现:
结果:

方法五:ColorJitter(brightness=0,contrast=0,saturation=0,hue=0)
功能:调整图像亮度、对比度、饱和度和色调;
brightness:亮度因子;
contrast:对比度因子;
saturation:饱和度因子;
hue:色调因子;
其中,亮度、对比度和饱和度为a时,表示从[max(0,1-a),1+a]中取值,为(a,b)时,表示从[a,b]中取值;色调为a(0<=a<=0.5)时,表示从[-a,a]中取值,为(a,b)(0<=a<=b<=0.5)时,表示从[a,b]中取值;
代码实现:
结果:

方法六:Grayscale(num_output_channels=1)
功能:将图片转换为灰度图;
num_output_channels:输出的通道数,只能取1或3;
代码实现:
结果:

方法七:RandomGrayscale(p=0.1)
功能:按照概率p将图片转换为灰度图;
p:转换的概率;
代码实现:
结果:

方法八:
RandomAffine(degrees,translate=None,scale=None,shear=None,fillcolor=0)
功能:对图片进行仿射变换(2维的线性变换),由5种基本操作组成:旋转、平移、缩放、翻转和错切;
degrees:旋转角度(以中心点旋转);
translate:平移区间,(a,b)表示 -W*a<=dx<=W*a,-H*b<=dy<=H*b,dx和dy为平移距离,H和W为图像高和宽;
scale:缩放比例;
shear:错切角度(包括水平错切和垂直错切),a表示仅在X轴错切、在(-a,a)之间随机选择错切角度,(a,b)表示X轴在(-a,a)之间随机选择错切角度、Y轴在(-b,b)之间随机选择错切角度,(a,b,c,d)表示X轴在(a,b)之间随机选择错切角度、Y轴在(c,d)之间随机选择错切角度;
fillcolor:填充颜色;
代码实现:
结果:

方法九:LinearTransformation(transformation_matrix,mean_vector)
功能:用一个转换矩阵和一个离线计算出的均值向量将图片进行转换;
transformation_matrix:转换矩阵,类型为Tensor,格式为二维D*D,D=C*H*W;
mean_vector:均值向量,类型为Tensor,格式为一维D,D=C*H*W;
计算过程:

代码实现:
结果:

方法十:RandomErasing(p=0.5,scale=(0.02,0.33),ratio=(0.3,3.3),value=0)
功能:对图像进行随机擦除,对象为Tensor;
p:擦除概率;
scale:擦除面积比例,在(a,b)中随机取值;
ratio:擦除区域长宽比,在(a,b)中随机取值;
value:擦除区域的像素值,默认为0(黑),因为操作对象为Tensor,像素值已被归一化,所以value需要除以255;
代码实现:
结果:

方法十一:ToPILImage()
功能:将Tensor类型转为PIL类型;
实现过程:

代码实现:
结果:

方法十二:Lambda()
功能:匿名函数;
通过匿名函数实现图片打包:
结果:
