一、前言

在学习自己的项目发现自己有很多基础知识不牢,对于图像处理有点不太清楚,因此写下来作为自己的笔记,主要是我想自己动手写一下每一句代码到底做了什么,而不是单纯的我看了知道了它做了什么,说白了,不想停在看,而是要真正自己敲。

本文基于的是pytorch1.7.1

二、图像处理

深度学习是由数据驱动的,而数据的数量和分布对于模型的优劣具有决定性作用,所以我们需要对数据进行一定的预处理以及数据增强,用于提升模型的泛化能力。

一般来说深度学习神经网络训练前都需要做数据增强 (Data Augmentation) 又称为数据增广、数据扩增,它是对 训练集 进行变换,使训练集更丰富,从而让模型更具 泛化能力

下面为常见的图像变换

1.原始图片

显示图片,并读取图片大小

1

2

3

4

5

6

7

8

9

from torchvision import transforms

from PIL import Image # 用于读取图片

import  matplotlib.pyplot as plt # 用于显示图片

image_path = './dog.jpg'

image = Image.open(image_path)

plt.imshow(image)

print(image.size)

plt.show()

图片大小(1024, 683)

2.调整图片大小transforms.Resize

2.1.transforms.Resize(x)

主要用于调整PILImage对象的尺寸大小,图片短边缩放至x,长宽比保持不变

将图片短边缩放至x,长宽比保持不变,上述图片执行transforms.Resize(300)

1

2

3

4

5

6

7

8

9

10

11

from torchvision import transforms

from PIL import Image # 用于读取图片

import  matplotlib.pyplot as plt # 用于显示图片

# 图片显示,打印图片大小

image_path = './dog.jpg'

image = Image.open(image_path)

resize = transforms.Resize(300)

image1 = resize(image)

plt.imshow(image1)

print(image1.size)

plt.show()

图片大小(449, 300)

得到如下

2.2.transforms.Resize([x, y])

同时指定图片长宽,这样会改变长宽比例但是不是裁剪,可以恢复

1

2

3

4

5

6

7

8

9

10

11

from torchvision import transforms

from PIL import Image # 用于读取图片

import  matplotlib.pyplot as plt # 用于显示图片

# 图片显示,打印图片大小

image_path = './dog.jpg'

image = Image.open(image_path)

resize = transforms.Resize([512, 300])

image1 = resize(image)

plt.imshow(image1)

print(image1.size)

plt.show()

图片大小(512, 300)

2.3关于图片的恢复

测试代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

from torchvision import transforms

from PIL import Image # 用于读取图片

import  matplotlib.pyplot as plt # 用于显示图片

# 图片显示,打印图片大小

image_path = './dog.jpg'

image = Image.open(image_path)

w, h = image.size

resize = transforms.Resize([512, 300])

image1 = resize(image)

resize2 = transforms.Resize([h, w])

image2 = resize2(image1)

plt.imshow(image2)

print(image2.size)

plt.show()

图片大小(1024, 683)

注意这里要使用transforms.Resize([h, w])

3.图片裁剪

3.1中心裁剪transforms.CenterCrop

作用:中心裁剪图片

主要参数:size,表示需要裁剪的图片大小

代码示例:

1

2

3

4

5

6

7

8

9

10

11

from torchvision import transforms

from PIL import Image

import matplotlib.pyplot as plt

transform = transforms.CenterCrop(512)

image_path= "./dog.jpg"

image = Image.open(image_path)

image1 = transform(image)

plt.imshow(image1)

print(image1.size)

plt.show()

image1.save('./dog_clipping.jpg')

图片大小(512, 512)

3.2随机裁剪transforms.RandomCrop(size,padding=None,pad_if_needed=False,fill=0,padding_mode='constant')

主要参数:

size:为需要裁剪的图片大小

padding:设置填充大小

大小为a:表示上下左右都填充a个元素

大小为(a, b):表示左右填充a个元素,上下填充b个元素

大小为(a, b, c, d):表示左上右下填充a, b, c, d个元素

pad_if_needed:若图像小于设定 size,则填充,此时该项需要设置为 True

padding_mode:填充模式,主要有四种

  • constant:像素值由 fill 设定。
  • edge:像素值由图像边缘像素决定。
  • reflect:镜像填充,最后一个像素不镜像,例如 [1, 2, 3, 4] → [3, 2, 1, 2, 3, 4, 3, 2]。
  • symmetric:镜像填充,最后一个像素镜像,例如 [1, 2, 3, 4] → [2, 1, 1, 2, 3, 4, 4, 3]。

fill:当填充模式为padding_mode的填充值

代码示例:

1

2

3

4

5

6

7

8

9

10

11

from torchvision import transforms

import matplotlib.pyplot as plt

from PIL import Image

transform = transforms.RandomCrop(size=(512, 512), padding=50, pad_if_needed=True, fill=0,padding_mode="constant")

image_path = "./dog.jpg"

image = Image.open(image_path)

random_crop_image = transform(image)

print(random_crop_image.size)

plt.imshow(random_crop_image)

plt.show()

random_crop_image.save("./random_crop_image.jpg")

图片大小(512, 512)

3.3transforms.RandomResizedCrop

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

将给定图像随机裁剪为不同的大小和宽高比,然后缩放所裁剪得到的图像为制定的大小;

主要参数:

size:为最终图片要resize的大小

scale:为随机采样最少要覆盖原图的比例,在resize前

ratio:为随机采样宽高的比例,也在resize前

interpolation:插值方法

代码示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

from torchvision import transforms

import matplotlib.pyplot as plt

from PIL import Image

transform = transforms.RandomResizedCrop(size=(256, 256),

scale=(0.08, 1),

ratio=(3/ 4, 4/3),

interpolation=Image.NEAREST)

image_path = "./dog.jpg"

image = Image.open(image_path)

random_resize_crop_image = transform(image)

print(random_resize_crop_image.size)

plt.imshow(random_resize_crop_image)

plt.show()

random_resize_crop_image.save("./dog_random_resize_crop.jpg")

图片大小(256, 256)

4.图片翻转与旋转

4.1.transforms.RandomHorizontalFlip(p=0.5)水平翻转

p为旋转的概率

代码示例:

1

2

3

4

5

6

7

8

9

10

11

from torchvision import transforms

import matplotlib.pyplot as plt

from PIL import Image

transform = transforms.RandomHorizontalFlip(p=0.7)

image_path = "./dog.jpg"

image = Image.open(image_path)

RandomHorizontalFlip_image = transform(image)

print(RandomHorizontalFlip_image.size)

plt.imshow(RandomHorizontalFlip_image)

plt.show()

RandomHorizontalFlip_image.save("./RandomHorizontalFlip_image.jpg")

图片大小(1024, 683)

4.2transforms.RandomVerticalFlip垂直翻转

代码示例

1

2

3

4

5

6

7

8

9

10

11

from torchvision import transforms

import matplotlib.pyplot as plt

from PIL import Image

transform = transforms.RandomVerticalFlip(p=0.8)

image_path = "./dog.jpg"

image = Image.open(image_path)

RandomVerticalFlip_image = transform(image)

print(RandomVerticalFlip_image.size)

plt.imshow(RandomVerticalFlip_image)

plt.show()

RandomVerticalFlip_image.save("./RandomVerticalFlip_image.jpg")

图片大小(1024, 683)

4.3旋转transforms.RandomRotation

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

主要参数:

  • degrees:旋转角度。

当为 a 时,在 (-a, a) 之间随机选择旋转角度。

当为 (a, b) 时,在 (a, b) 之间随机选择旋转角度。

  • resample:重采样方法。
  • expand:是否扩大图片,以保持原图信息。
  • center:旋转点设置,默认中心旋转

代码示例:

1

2

3

4

5

6

7

8

9

10

11

from torchvision import transforms

import matplotlib.pyplot as plt

from PIL import Image

transform = transforms.RandomRotation(degrees=90,resample=False, expand=True, center=None, fill=0)

image_path = "./dog.jpg"

image = Image.open(image_path)

RandomRotation_image = transform(image)

print(RandomRotation_image.size)

plt.imshow(RandomRotation_image)

plt.show()

RandomRotation_image.save("./RandomRotation_image.jpg")

图片大小(1214, 1203)

参考博客与资料:

Pytorch transforms.Resize()的简单用法_xiongxyowo的博客-CSDN博客

PyTorch 08:transforms 数据增强:裁剪、翻转、旋转 - YEY 的博客 | YEY Blog

Pytorch中transforms.RandomResizedCrop()等图像操作_心向林丶的博客-CSDN博客

Illustration of transforms — Torchvision main documentation (pytorch.org)

pytorch transforms图像增强相关推荐

  1. pytorch —— transforms图像增强(一)

    1.数据增强(data augmentation) 数据增强又称为数据增广,数据扩增,它是对训练集进行变换,使训练集更丰富,从而让模型更具泛化能力. 在中学阶段就已经接触过数据增强的概念,看一个例子, ...

  2. 4.3 pytorch数据预处理:transforms图像增强方法

    一.数据增强概述 二.数据增强方法:裁剪 三.数据增强方法:翻转和旋转 四.数据增强方法:变换 五.transforms方法的选择操作 一.数据增强概述 我们来看图片中的数据增强是怎么样的. 左边的图 ...

  3. Pytorch transforms.Resize()的简单用法

    简单来说就是调整PILImage对象的尺寸,注意不能是用io.imread或者cv2.imread读取的图片,这两种方法得到的是ndarray. 将图片短边缩放至x,长宽比保持不变: transfor ...

  4. PyTorch数据Pipeline标准化代码模板

    前言 PyTorch作为一款流行深度学习框架其热度大有超越TensorFlow的感觉.根据此前的统计,目前TensorFlow虽然仍然占据着工业界,但PyTorch在视觉和NLP领域的顶级会议上已呈一 ...

  5. 【PyTorch】03数据处理

    3 PyTorch数据处理 3.1 数据读取机制DataLoader与Dataset [PyTorch]2.1 DataLoader与Dataset epoch:对训练集的全部数据进行一次完整的训练, ...

  6. 【小白学习PyTorch教程】十七、 PyTorch 中 数据集torchvision和torchtext

    @Author:Runsen 对于PyTorch加载和处理不同类型数据,官方提供了torchvision和torchtext. 之前使用 torchDataLoader类直接加载图像并将其转换为张量. ...

  7. pytorch.tensor格式图像的resize操作

    在pytorch中,输入网络的图像的shape=[B,C,H,W]. 有时我们需要在网络中对图像张量进行resize操作,这时就要用到transforms.Resize([H,W]) 操作.示例如下: ...

  8. 语义分割系列6-Unet++(pytorch实现)

    目录 Unet++网络 Dense connection deep supervision 模型复现 Unet++ 数据集准备 模型训练 训练结果 Unet++:<UNet++: A Neste ...

  9. 语义分割系列2-Unet(pytorch实现)

    Unet发布于MICCAI.其论文的名字也说得相对很明白,用于生物医学图像分割. <U-Net: Convolutional Networks for Biomedical Image Segm ...

最新文章

  1. android 组件导出安全,App安全检测实践基础:组件安全(二)
  2. VC包含目录、附加依赖项、库目录及具体设置
  3. MATLAB——nctoolbox安装及使用
  4. 一种Android闪屏页实现方法(偏门别类)
  5. 在类别无法直接使用的一些对象或方法
  6. 原生js封装table表格操作,获取任意行列td,任意单行单列方法
  7. php artisan passport,API 认证解决方案:Laravel Passport
  8. 硅谷VC想对CIO说这些
  9. meteor是什么东西?
  10. 怎样给 ActiveX 控件签名并打包发布
  11. 验证 decimal 和 数字
  12. 魅族android面试题,【魅族小米IT面试题】面试问题:Android… - 看准网
  13. Hibernate之多对多映射
  14. 仿Hex-Editor,实现简单地二进制文件查看器JHexer
  15. Ghost 博客平台安装和配置
  16. php在线售卡系统,云尚在线发卡系统PHP源码|专门为个人或小型企业提供在线售卡,订单处理系统...
  17. C/C++的刷题练习之牛客网,一个友好的网站
  18. 最新台式计算机CPU,三月台式电脑CPU性能排行榜, 2019年3月最新版CPU天梯图
  19. 蓝桥杯 历年试题 矩阵翻硬币
  20. createfile调用失败_Java NIO Files.createFile()以NoSuchFileException失败

热门文章

  1. 教你怎么召唤百度贴吧繁体字ID
  2. HDU-4037-线段树-区间开根号
  3. 每日分享html之3个logo、1个背景、1个button
  4. 自定义ViewPager和弹性圆PagerIndicator
  5. 当数据中心碰上云计算
  6. 130、易燃气体的火灾危险性
  7. Java视频教程(浙江大学翁恺)
  8. TIMESAT 无格式文件迭代转tif
  9. 【英语六级】【仔细阅读】(1)
  10. 升级iOS CocoaPods 版本