图像变换

  1. Pad

    对图片边缘进行填充

    transforms.Pad(padding,fill=0,padding_mode='constant')
  • padding:设置填充大小,(a,b,c,d)左上右下填充abcd
  • padding_mode:填充模式,4种模式,constant,edge,reflect,symmetric
  • fill:constant时,设置填充的像素值,(r,g,b) or (gray)
# ==================01 pad==================
flag = True
# flag = False
if flag:
x_img = Image.open("face.jpg")
x_img_handled = transforms.Pad(padding=150, fill=200, padding_mode='constant')(x_img)
x_img_handled.show()
  1. ColorJitter

    调整亮度、对比度、饱和度和色相

    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
# ==================02 ColorJitter==========
flag = True
# flag = False
if flag:
x_img = Image.open("face.jpg")
x_img_handled = transforms.ColorJitter(brightness=(1.5, 1.5),
contrast=(1.5,1.5),
saturation=(1.5,1.5),
hue=0.7)(x_img)
x_img_handled.show()
  1. Grayscale

    Grayscale(num_output_channels)
# ==================03 Grayscale==========
flag = True
# flag = False
if flag:
x_img = Image.open("face.jpg")
x_img_handled = transforms.Grayscale(3)(x_img)
x_img_handled.show()
  1. RandomGrayscale

    RandomGrayscale(num_output_channels,p=0.1)

    依概率将图片转换为灰度图
  • num_output_channels:输出通道数,1 or 3
  • p:概率值,图像被转换为灰度图的概率
# ==================04 RandomGrayscale==========
flag = True
# flag = False
if flag:
x_img = Image.open("face.jpg")
x_img_handled = transforms.RandomGrayscale(p=0.7)(x_img)
x_img_handled.show()
  1. RandomAffine

    RandomAffine(degrees, translate=None, scale=None, shear=None,resample=False,fillcoloor=0)

    对图像进行仿射变换,仿射变换是二维的线性变换,旋转、评议、缩放、错切、翻转
  • shear:错切角度设置,有水平错切和垂直错切

    参数为a,仅在x轴错切,错切角度在(-a,a)之间

    参数为(a,b),a设置x轴角度,b设置y轴角度

    为(a,b,c,d),则a,b设置x轴角度,c,d设置y轴角度
  • resample:重采样方式,NEAREST,BILINEAR,BICUBIC
# ==================05 RandomAffine=============
flag = True
# flag = False
if flag:
x_img = Image.open("face.jpg")
x_img_handled = transforms.RandomAffine(30,shear=(30,50))(x_img)
plt.imshow(x_img_handled)
plt.show()
  1. RandomErasing

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

    功能:对图像进行随机遮挡
  • p:概率值,执行该操作的概率
  • scale:遮挡区域的面积
  • ratio:遮挡区域的长宽比
  • value:设置遮挡区域的像素值,(R,G,B) OR (GRAY)
# ==================06 RandomErasing=============
flag = True
# flag = False
if flag:
x_img = Image.open("face.jpg")
x_img = transforms.ToTensor()(x_img)
x_img_handled = transforms.RandomErasing(p=1,scale=(0.04,0.04),ratio=(0.3,3.3),value="random",inplace=False)(x_img)
x_img_handled = transform_invert(x_img_handled, transforms.ToTensor)
x_img_handled.show()
# plt.imshow(x_img_handled)
# plt.show()
  1. transforms.Lambda

    用户自定义lambda方法

    transforms.Lambda(lambd)

    lambd: lambda匿名函数

    transforms.TenCrop(200, vertical_flip=True),
transforms.Lambda(lambda crops: torch.stack([transforms.Totensor()(crop) for crop in crops]))

transforms

  1. transforms.RandomChoice

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

    transforms.RandomChoice([transforms1,transforms2,transforms3])
  2. transforms.RandomApply

    依概率执行一组transforms操作

    transforms.RandomApply([transforms1,transforms2,transforms3], p=0.5)
  3. transforms.RandomOrder

    对一组transforms操作打乱顺序

    transforms.RandomOrder([transforms1,transforms2,transforms3

自定义transforms

自定义transforms要素:

  1. 仅接收一个参数,返回一个参数
  2. 注意上下游的输出与输入(上一个的输出是下一个输入)
class Compose(object):
def __call__(self, img):
for t in self.transforms:
img = t(img)
return img

设置多个参数(通过类方法):

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

椒盐噪声

脉冲噪声,随机出现的白点或者黑点,白点成为盐噪声,黑色为椒噪声

信噪比(Signal-Noise Rate,SNR)是衡量噪声的比例,图像中为图像像素的占比

add salt pepper noise

基本结构

class AddPepperNoise(object):
def __init__(self,snr,p):
self.snr = snr
self.p = p def __call__(self,img):
...
# 具体实现过程
...
return img
class Compose(object):
def __call__(self,img):
for t in self.transforms:
img = t(img)
return img
from PIL import Image
from torchvision import transforms
import cv2
from common_tools import transform_invert
import random
import numpy as np
snr = 0.9
img = Image.open("face.jpg")
imgdeld = np.array(img).copy()
h, w, c = imgdeld.shape
signal_pic = snr
noise_pic = 1-snr
mask = np.random.choice((0,1,2),size=(h,w,1),p=[signal_pic,noise_pic/2.,noise_pic/2])
mask = np.repeat(mask, c, axis=2)
imgdeld[mask == 1] =255
imgdeld[mask == 2] =0
masked = Image.fromarray(mask.astype('uint8')).convert('RGB')
imgdeld=Image.fromarray(imgdeld.astype('uint8')).convert('RGB')
imgdeld.show()
# print(mask.shape)

pytorch(10)transform模块(进阶)的更多相关文章

  1. Python模块(进阶3)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6411917.html 本文出自:[Edwin博客园] Python模块(进阶3) 1. python中模块和 ...

  2. Python标准库笔记(10) — itertools模块

    itertools 用于更高效地创建迭代器的函数工具. itertools 提供的功能受Clojure,Haskell,APL和SML等函数式编程语言的类似功能的启发.它们的目的是快速有效地使用内存, ...

  3. Python模块进阶、标准库、扩展库

    模块进阶 Python有一套很有用的标准库(standard library).标准库会随着Python解释器,一起安装在你的电脑中的. 它是Python的一个组成部分.这些标准库是Python为你准 ...

  4. pytorch(09)transform模块(基础)

    transforms transforms运行机制 torchvision.transforms:常用的图像预处理方法 torchvision.datasets:常用数据及的dataset实现,mni ...

  5. 巨蟒python全栈开发-第10天 函数进阶

    一.今日主要内容总览(重点) 1.动态传参(重点) *,** *: 形参:聚合 位置参数*=>元组 关键字**=>字典 实参:打散 列表,字符串,元组=>* 字典=>** 形参 ...

  6. Pytorch Torchvision Transform

    Torchvision.Transforms Transforms包含常用图像转换操作.可以使用Compose将它们链接在一起. 此外,还有torchvision.transforms.functio ...

  7. 初涉JavaScript模式 (10) : 函数 【进阶用法】

    写在前面 不知不觉写到第10篇了.这篇写起来很忐忑,终于和高级搭上边了(呵呵),这篇我们 主要 说一下 JS 方法的部分高级用法(我知道的),笔者水平有限,难免有错.废话不多少,进入正文. 初始化 我 ...

  8. Python开发——10.面向对象编程进阶

    一.isinstance(obj,cls)和issubclass(sub,super) 1.isinstance(obj,cls) 判断obj是不是由cls产生的类 2.issubclass(sub, ...

  9. Python记录10:模块

    ''' 1. 什么是模块     模块就一系列功能的集合体 模块有三种来源:         1. 内置的模块         2. 第三方的模块:pip install +模块名称         ...

随机推荐

  1. hdu3506 Monkey Party

    Problem Description Far away from our world, there is a banana forest. And many lovely monkeys live ...

  2. Java基础(第一期)

    Java基础 1.注释 Java中注释有三种: 单行注释 // 多行注释 /* */ 文本注释(用的较少) /** */ 书写注释是一个非常好的习惯 BAT 平时写代码一定要注意规范 //有趣的代码注 ...

  3. C# 替换文件名的字符

    https://www.cnblogs.com/lindexi/p/8970466.html

  4. HDU - 4725 The Shortest Path in Nya Graph 【拆点 + dijkstra】

    This is a very easy problem, your task is just calculate el camino mas corto en un grafico, and just ...

  5. Java之一个整数的二进制中1的个数

    这是今年某公司的面试题: 一般思路是:把整数n转换成二进制字符数组,然后一个一个数: private static int helper1(int i) { char[] chs = Integer. ...

  6. 写给程序员的机器学习入门 (十一) - 对象识别 YOLO - 识别人脸位置与是否戴口罩

    这篇将会介绍目前最流行的对象识别模型 YOLO,YOLO 的特征是快,识别速度非常快

  7. Generator function vs Async/Await

    Generator function vs Async/Await generator async /await refs xgqfrms 2012-2020 www.cnblogs.com 发布文章 ...

  8. Serverless & FaaS

    Serverless & FaaS Function as a Service 通过 Functions(一个事件驱动型无服务器计算平台,还可以解决复杂的业务流程问题)更加高效地进行开发; 在 ...

  9. Flutter & UI system & GUI & API & SDK

    Flutter & UI system & GUI & API & SDK https://book.flutterchina.club/chapter14/flutt ...

  10. Github & DMCA Takedown & git remove history

    Github & DMCA Takedown & git remove history Github & DMCA Takedown Policy Removing files ...