iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >pytorch transforms图像增强实现方法
  • 230
分享到

pytorch transforms图像增强实现方法

Python 官方文档:入门教程 => 点击学习

摘要

目录一、前言二、图像处理下面为常见的图像变换1.原始图片2.调整图片大小transfORMs.Resize2.1.transforms.Resize(x)2.2.transforms

一、前言

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

本文基于的是PyTorch2.7.1

二、图像处理

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

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

下面为常见的图像变换

1.原始图片

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

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)

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])

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

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关于图片的恢复

测试代码

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,表示需要裁剪的图片大小

代码示例:

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的填充值

代码示例:

 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:插值方法

代码示例:

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为旋转的概率

代码示例:

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垂直翻转

代码示例

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:旋转点设置,默认中心旋转

代码示例:

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()的简单用法

PyTorch 08:transforms 数据增强:裁剪、翻转、旋转

Pytorch中transforms.RandomResizedCrop()等图像操作

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

到此这篇关于pytorch transforms图像增强的文章就介绍到这了,更多相关pytorch 图像增强内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: pytorch transforms图像增强实现方法

本文链接: https://www.lsjlt.com/news/203230.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • pytorch transforms图像增强实现方法
    目录一、前言二、图像处理下面为常见的图像变换1.原始图片2.调整图片大小transforms.Resize2.1.transforms.Resize(x)2.2.transforms...
    99+
    2023-05-14
    pytorch 图像增强 pytorch transforms图像增强 pytorch transforms
  • pytorch transforms图像增强怎么实现
    这篇文章主要介绍“pytorch transforms图像增强怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“pytorch transforms图像增强怎么实现”文章能帮...
    99+
    2023-07-05
  • Pytorch中的图像增广transforms类和预处理方法
    目录1.随机翻转(水平和垂直)2.随机裁剪缩放3.随机修改颜色(颜色抖动)4.将图像转化为张量5.标准化操作6.同时结合多种增广方法1.随机翻转(水平和垂直) torchvision...
    99+
    2023-05-14
    Pytorch图像增广和预处理 Pytorch图像增广transforms类
  • Pytorch中的图像增广transforms类和预处理方法是什么
    这篇文章主要讲解了“Pytorch中的图像增广transforms类和预处理方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Pytorch中的图像增广transforms类和预处理方...
    99+
    2023-07-05
  • python实现图像增强算法
    本文实例为大家分享了python实现图像增强算法的具体代码,供大家参考,具体内容如下 图像增强算法,图像锐化算法 1)基于直方图均衡化 2)基于拉普拉斯算子 3)基于对数变换 4)基...
    99+
    2022-11-11
  • Python实现图像增强
    本文实例为大家分享了Python实现图像增强的具体代码,供大家参考,具体内容如下 题目描述:对于下面这幅图像(图 1),请问可以通过那些图像增强的手段,达到改善视觉效果的目的?请显示...
    99+
    2022-11-11
  • 详解Python实现图像分割增强的两种方法
    方法一 import random import numpy as np from PIL import Image, ImageOps, ImageFilter from skim...
    99+
    2022-11-13
  • Python基于域相关实现图像增强的方法教程
    目录介绍昆虫增强使用针的增强实验结果介绍 当在图像上训练深度神经网络模型时,通过对由数据增强生成的更多图像进行训练,可以使模型更好地泛化。常用的增强包括水平和垂直翻转/移位、以一定角...
    99+
    2022-11-12
  • 如何使用OpenCV实现图像增强
    本篇内容介绍了“如何使用OpenCV实现图像增强”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本期将介绍如何通过图像处理从低分辨率/模糊/低...
    99+
    2023-06-20
  • Python基于域相关实现图像增强的方法是什么
    这篇文章主要讲解了“Python基于域相关实现图像增强的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python基于域相关实现图像增强的方法是什么”吧!介绍当在图像上训练深度神经...
    99+
    2023-06-26
  • Python OpenCV实现图像增强操作详解
    目录创作背景图像亮度增强和降低旋转水平镜像和垂直镜像高斯噪声其它图像增强的方法创作背景 最近在忙着两个YOLOv7项目,通过看大量的论文,发现很多的相关的论文都会在收集图像后进行图像...
    99+
    2022-11-11
  • C# Bitmap图像处理(含增强对比度的三种方法)
    目录Bitmap类BitmapData类参考:Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据...
    99+
    2022-11-12
  • Vue.js中class与style的增强绑定实现方法
    目录一、v-bind绑定class属性(1)绑定class样式,字符串写法(2)绑定class样式,数组写法(3)绑定class样式,对象写法二、v-bind绑定内联样式style(...
    99+
    2023-05-16
    Vue.js class与style绑定 Vue.js class与style
  • JavaScript实现图像压缩的方法
    目录一、简单压缩二、使用canvas 将base64 图像压缩到指定文件大小以内1、 方法一2.、方法二三、使用 canvas 和 web workers 来实现图像压缩J...
    99+
    2023-01-11
    js 图像压缩 canvas web workers 图像压缩 js canvas压缩
  • OpenCV 图像梯度的实现方法
    目录概述梯度运算礼帽黑帽Sobel 算子计算 x计算 y计算 x+y融合概述 OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 Op...
    99+
    2022-11-12
  • C++实现旋转图像的方法
    这篇文章主要讲解了“C++实现旋转图像的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++实现旋转图像的方法”吧!Rotate Image 旋转图像You are given an&n...
    99+
    2023-06-20
  • iOS实现摄像头实时采集图像的方法
    小编给大家分享一下iOS实现摄像头实时采集图像的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!iOS实现摄像头实时采集图像的具体内容如下新接到一个实时获取摄像...
    99+
    2023-06-14
  • Android裁剪图像实现方法示例
    本文实例讲述了Android裁剪图像实现方法。分享给大家供大家参考,具体如下: package com.xiaoma.piccut.demo; import java.io....
    99+
    2022-06-06
    示例 方法 Android
  • Python实现生成bmp图像的方法
    之前使用过c、java、go语言实现过生成纯色BMP图片的功能。 现在由python语言完成该功能。 from array import array class bmp: ...
    99+
    2022-11-12
  • angular强制更新ui视图的实现方法
    目录angular 强制更新ui视图方法1 主要使用方法类 ChangeDetectorRef2 赋值引入3方法中调用angular踩坑 数据发生改变,视图未更新解决方案 ...
    99+
    2023-03-06
    angular强制更新ui视图 强制更新视图 angular更新ui视图
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作