ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

pytorch基础(八)----------transforms图像增强(二)

2021-12-27 13:00:18  阅读:289  来源: 互联网

标签:__ img self 噪声 像素 pytorch transforms ---------- 图像增强


注意:以下方法也都是作用在transforms.Compose([ ])方法中的

一、transforms------图像变换

1、transforms.Pad(padding, fill=0, padding_mode=‘constant’)

功能:对图像边缘进行填充
参数:
padding:设置填充大小,当为a时,上下左右均填充a个像素;当为(a,b)时,上下填充b个像素,左右填充a个像素;当为(a,b,c,d)时,左、上、右、下分别填充a、b、c、d个像素
padding_mode:填充模式,共有四种
    1、constant:像素值由fill设定
    2、edge:像素值由图像边缘设定
    3、reflect:镜像填充,最后一个像素不镜像。eg:对[1,2,3,4]的边缘进行两个像素的填充 -> [3,2,1,2,3,4,3,2]
    4、symmetric:镜像填充,最后一个像素镜像。eg:[1,2,3,4] -> [2,1,1,2,3,4,4,3]
fill:padding_mode为constant时,设置填充的像素值

2、transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)

功能:调整亮度、对比度、饱和度和色相
参数:
brightness:亮度调整因子,当为a时,从[max(0, 1-a), 1+a]中随机选择;当为(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)

3、transforms.Grayscale(num_output_channels)
4、transforms.RandomGrayscale(num_output_channels,p=0.1)

功能:依据概率将图片转化为灰度图
参数:
num_output_channels:输出通道数,只能设置为1或3
p:概率

5、transforms.RandomAffine(degress, translate=None, scale=None, shear=None, resample=False, fillcolor=0)

功能:对图像进行仿射变换,仿射变换是二维的线性变换,有五种基本原子变换构成,分别是旋转、平移、缩放、错切和翻转
参数:
degrees:旋转角度设置
translate:平移区间设置,如(a,b),a设置宽,b设置高
sclae:缩放比例(以面积为单位)
fill_color:填充颜色设置
shear:错切角度设置,有水平错切和垂直错切。若为a,则仅在x轴错切,错切角度在(-a,a)之间;若为(a,b),则设置a为x轴角度,b设置y轴角度,若为(a,b,c,d),则a,b设置x轴角度,c,d设置y轴角度
resample:重采样方法

6、transforms.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 0.3), value=0, inplace=False)

功能:对图像进行随机遮挡
参数:
p:概率
scale:遮挡区域的面积
ratio:遮挡区域的长宽比
value:设置遮挡区域的像素值
注意:这个方法是对张量进行操作的,之前的方法都是对PIL进行操作,所以在这个方法前面需要加上一句代码‘transforms.ToTensor()’

7、transforms.Lambda(lambd)

功能:用户自定义lambda方法
参数:lambd:lambda匿名函数
该方法通常的使用方法,代码展示

# 通常是在随机裁剪多张图片形成元组时,对元组进行转换成PIL或tensor
transforms.TenCrop(200, vertical_filp=True)
transforms.Lambda(lambda crops: torch.stack([transforms.Totensor()(crop) for crop in crops]))

二、transforms------transforms方法操作

1、transforms.RandomChoice([transforms1, transforms2, transforms3])

功能:从一系列transforms方法中随机挑选一个

2、transforms.RandomApply([transforms1, transforms2, transforms3], p=0.5)

功能:依据概率执行一组transforms操作

3、transforms.RandomOrder([transforms1, transforms2, transforms3])

功能:对一组transforms操作打乱顺序

三、自定义transforms方法

自定义transforms要素:1、仅接收一个参数,返回一个参数;2、注意上下游的输入输出,下游的输入是上游的输出,它们之间的数据类型一定要匹配
下面是我们在使用系统自带的transforms方法的流程

class Compose(object):
	def __call__(self, img):
		for t in self.transforms:
			img = t(img)
		return img

下面是我们自己通过类实现多参数传入时的方法:

class MyTransforms(object):
	def __init__(self, ......):
		...
	def __call__(self, img):
		...
		return img

下面是自定义transforms方法的一个例子:自定义椒盐噪声
椒盐噪声的概念:又称为脉冲噪声,是一种随机出现的白点或者黑点,白点称为盐噪声,黑点称为椒噪声
信噪比:是衡量噪声的比例,图像中为图像像素的占比,也就是信噪比越小图像像素的占比越小,图像越模糊

import numpy as np
from PIL import Image
class AddPepperNoise(object):
	def __init__(self, snr, p=0.9):
		# snr代表信噪比
		# p代表概率
		self.snr = snr
		self.p = p
	def __call__(self, img):
		'''
		添加椒盐噪声
		'''
		# 判断根据一定的概率去执行椒盐噪声
		if random.uniform(0, 1) < self.p:
			# 将PIL格式的图像转化为numpy数组
			img_ = np.array(img).copy()

			# 获取图像的宽、高和通道数
			h, w, c = img_.shape
			
			# 获取信噪比
			sigual_pct = self.snr
			noise_pct = (1 - sigual_pct)

			# 通过(0, 1, 2)来表示0代表原始图像,1表示盐噪声,2表示椒噪声
			mask = np.random.choice((0, 1, 2), size=(h, w, 1), p=[sigual_pct, noise_pct/2, noise_pct/2])
			mask = np.repeat(mask, c, axis=2)
			img_[mask == 1] == 255   # 将mask=1的地方设置为255,白色,为盐噪声
			img_[mask == 2] == 0	# 将mask=2的地方设置为0,黑色,为椒噪声
			# 将numpy数组转化为PIL格式
			return Image.fromarray(img_.astype('uint8')).convert('RGB')
		else:
			return img

# 椒盐噪声的使用
transforms.Compose([
	AddPepperNoise(0.9, p=0.9)
])

标签:__,img,self,噪声,像素,pytorch,transforms,----------,图像增强
来源: https://blog.csdn.net/m0_55769743/article/details/122167489

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有