transforms图像增强(二)

一、图像变换

1、transforms.Pad

transforms.Pad是一个用于对图像边缘进行填充的数据转换操作。

参数:

  • padding:设置填充大小。可以是单个整数,表示在上下左右四个方向上均填充相同数量的像素;也可以是一个包含两个整数的元组 (a, b),表示在上下方向上填充 b 个像素,在左右方向上填充 a 个像素;还可以是一个包含四个整数的元组 (a, b, c, d),分别表示在左、上、右、下四个方向上填充 a, b, c, d 个像素。
  • padding_mode:填充模式,有四种模式可选:
    • 'constant':使用常数填充,填充值由 fill 参数指定。
    • 'edge':使用图像边缘像素进行填充。
    • 'reflect':使用图像边缘像素的镜像进行填充。
    • 'symmetric':使用图像边缘像素的对称像素进行填充。
  • fill:当 padding_mode'constant' 时,设置填充的像素值。可以是一个包含三个整数的元组 (R, G, B) 表示彩色图像的填充值,或者是一个整数表示灰度图像的填充值。
    使用transforms.Pad可以在图像的边缘进行填充,以增加图像的尺寸或保持图像的大小不变。

示例:

import torchvision.transforms as transforms
transform = transforms.Compose([transforms.Pad(padding=2, fill=(255, 0, 0), padding_mode='constant')
])
# 对图像进行填充
padded_image = transform(image)

在上面的示例中,transforms.Pad(padding=2, fill=(255, 0, 0), padding_mode='constant')将图像的边缘填充了2个像素,填充的像素值为红色 (255, 0, 0)。填充模式为 'constant',表示使用常数填充。

注意:填充操作通常在图像预处理阶段使用,以确保所有图像具有相同的尺寸或符合模型的输入要求。填充后的图像尺寸会增加,因此在应用填充之前需要考虑好图像的尺寸和比例关系。

2、transforms.ColorJitter

transforms.ColorJitter是一个用于调整图像亮度、对比度、饱和度和色相的数据转换操作。

参数:

  • brightness:亮度调整因子。可以是单个浮点数 a,表示在范围 [max(0, 1-a), 1+a] 中随机选择亮度调整因子;也可以是一个包含两个浮点数的元组 (a, b),表示在范围 [a, b] 中选择亮度调整因子。
  • contrast:对比度参数,与亮度调整因子的使用方式相同。
  • saturation:饱和度参数,与亮度调整因子的使用方式相同。
  • hue:色相参数。可以是单个浮点数 a,表示在范围 [-a, a] 中选择色相调整参数,注意 0 <= a <= 0.5;也可以是一个包含两个浮点数的元组 (a, b),表示在范围 [a, b] 中选择色相调整参数,注意 -0.5 <= a <= b <= 0.5
    使用transforms.ColorJitter可以对图像进行亮度、对比度、饱和度和色相的随机调整,增加图像的多样性。
    示例:
import torchvision.transforms as transforms
transform = transforms.Compose([transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.1)
])
# 对图像进行颜色调整
adjusted_image = transform(image)

在上面的示例中,transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.1)将图像的亮度、对比度、饱和度和色相进行了随机调整,亮度调整因子在范围 [0.8, 1.2] 内随机选择,对比度调整因子在范围 [0.8, 1.2] 内随机选择,饱和度调整因子在范围 [0.8, 1.2] 内随机选择,色相调整参数在范围 [-0.1, 0.1] 内随机选择。

注意:颜色调整操作通常在图像增强和数据增强阶段使用,以增加模型对不同光照、对比度和饱和度等条件的鲁棒性。调整后的图像将具有不同的颜色外观,可以增加数据集的多样性。

3、transforms.RandomGrayscale

transforms.RandomGrayscaletransforms.Grayscale都是用于将图像转换为灰度图的数据转换操作。

transforms.RandomGrayscale是一个随机操作,根据给定的概率将图像转换为灰度图。

  • num_output_channels:输出通道数。可以是1或3。如果设置为1,则输出的灰度图像只有一个通道;如果设置为3,则输出的灰度图像会复制到三个通道,以便与彩色图像的通道数匹配。
  • p:概率值,表示图像被转换为灰度图的概率。取值范围为0到1之间,例如,设置为0.1表示有10%的概率将图像转换为灰度图。
    使用transforms.RandomGrayscale可以在数据增强过程中以一定的概率将图像转换为灰度图,增加数据集的多样性。
    示例:
import torchvision.transforms as transforms
transform = transforms.Compose([transforms.RandomGrayscale(num_output_channels=1, p=0.5)
])
# 对图像进行随机灰度转换
grayscale_image = transform(image)

在上面的示例中,transforms.RandomGrayscale(num_output_channels=1, p=0.5)以50%的概率将图像转换为灰度图,输出的灰度图像只有一个通道。

4、transforms.Grayscale

transforms.Grayscale是一个确定性操作,将图像转换为灰度图。

  • num_output_channels:输出通道数。可以是1或3。如果设置为1,则输出的灰度图像只有一个通道;如果设置为3,则输出的灰度图像会复制到三个通道,以便与彩色图像的通道数匹配。
    示例:
import torchvision.transforms as transforms
transform = transforms.Compose([transforms.Grayscale(num_output_channels=1)
])
# 将图像转换为灰度图
grayscale_image = transform(image)

在上面的示例中,transforms.Grayscale(num_output_channels=1)将图像转换为灰度图,输出的灰度图像只有一个通道。

注意:灰度图像只有一个通道,每个像素的值表示灰度级别。与彩色图像相比,灰度图像的信息量较少,但在某些场景中可以提供更加简洁和高效的特征表示。

5、transforms.RandomAffine

transforms.RandomAffine是一个用于对图像进行随机仿射变换的数据转换操作。

参数:

  • degrees:旋转角度范围。可以是一个单个的浮点数 a,表示在范围 [-a, a] 内随机选择旋转角度;也可以是一个包含两个浮点数的元组 (a, b),表示在范围 [a, b] 内随机选择旋转角度。
  • translate:平移区间设置。可以是一个包含两个浮点数的元组 (a, b),表示在宽度和高度维度上分别设置平移的区间。例如,如果设置为 (0.1, 0.1),则图像在宽度维度上的平移区间为 [-img_width * 0.1, img_width * 0.1],在高度维度上的平移区间为 [-img_height * 0.1, img_height * 0.1]
  • scale:缩放比例。可以是一个单个的浮点数 a,表示在范围 [1-a, 1+a] 内随机选择缩放比例;也可以是一个包含两个浮点数的元组 (a, b),表示在范围 [1-a, 1+b] 内随机选择缩放比例。缩放比例是以图像面积为单位的。
  • shear:错切角度范围。可以是一个单个的浮点数 a,表示在范围 [-a, a] 内随机选择错切角度;也可以是一个包含两个浮点数的元组 (a, b),表示在范围 [a, b] 内随机选择错切角度。
  • resample:是否使用重采样方法。默认为 False,表示不使用重采样方法,采用最近邻插值;如果设置为 True,则使用双线性插值进行重采样。
  • fillcolor:填充颜色设置。可以是一个整数值,表示填充的颜色。
    使用transforms.RandomAffine可以对图像进行随机的仿射变换,包括旋转、平移、缩放、错切和翻转等操作,增加图像的多样性。
    示例:
import torchvision.transforms as transforms
transform = transforms.Compose([transforms.RandomAffine(degrees=10, translate=(0.1, 0.1), scale=(0.9, 1.1), shear=10)
])
# 对图像进行随机仿射变换
transformed_image = transform(image)

在上面的示例中,transforms.RandomAffine(degrees=10, translate=(0.1, 0.1), scale=(0.9, 1.1), shear=10)将对图像进行随机的仿射变换,旋转角度在范围 [-10, 10] 内随机选择,平移区间设置为 (0.1, 0.1),缩放比例在范围 [0.9, 1.1] 内随机选择,错切角度在范围 [-10, 10] 内随机选择。

注意:仿射变换是二维的线性变换,由旋转、平移、缩放、错切和翻转等基本原子变换构成。通过对图像进行随机的仿射变换,可以增加数据集的多样性,提高模型的鲁棒性。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6、transforms.RandomErasing

transforms.RandomErasing是一个用于对图像进行随机遮挡的数据转换操作。

参数:

  • p:执行该操作的概率。默认为0.5,表示有50%的概率执行该操作。
  • scale:遮挡区域的面积范围。可以是一个包含两个浮点数的元组 (a, b),表示遮挡区域的面积为原图面积的 [a, b] 之间的随机比例。
  • ratio:遮挡区域的长宽比范围。可以是一个包含两个浮点数的元组 (a, b),表示遮挡区域的长宽比为 [a, b] 之间的随机比例。
  • value:设置遮挡区域的像素值。可以是一个整数或一个包含3个整数的元组 (R, G, B),表示遮挡区域的像素值为指定的颜色;也可以是一个整数,表示遮挡区域为灰度图像,像素值为指定的灰度值。
  • inplace:是否原地操作。默认为 False,表示返回一个新的遮挡后的图像;如果设置为 True,则在原图像上进行原地操作。
    使用transforms.RandomErasing可以在训练过程中随机遮挡图像的一部分,以增强模型对遮挡和噪声的鲁棒性。
    示例:
import torchvision.transforms as transforms
transform = transforms.Compose([transforms.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3))
])
# 对图像进行随机遮挡
transformed_image = transform(image)

在上面的示例中,transforms.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3))将以50%的概率对图像进行随机遮挡,遮挡区域的面积在原图面积的 [0.02, 0.33] 之间随机选择,遮挡区域的长宽比在 [0.3, 3.3] 之间随机选择。

注意:随机遮挡可以模拟真实世界中的遮挡和噪声情况,以增加数据集的多样性。这有助于提高模型的鲁棒性和泛化能力。

7、transforms.Lambda

transforms.Lambda是一个用于用户自定义lambda方法的数据转换操作。

参数:

  • lambd:lambda匿名函数,用于定义自定义的数据转换操作。
    使用transforms.Lambda可以通过lambda表达式定义自己的数据转换操作。lambda表达式是一种匿名函数,可以在一行代码中定义简单的函数功能。
    示例:
import torchvision.transforms as transforms
# 定义一个lambda函数,将输入的图像进行裁剪
crop_lambda = transforms.Lambda(lambda x: x.crop((10, 10, 100, 100)))
# 使用lambda函数进行图像裁剪
transformed_image = crop_lambda(image)

在上面的示例中,transforms.Lambda(lambda x: x.crop((10, 10, 100, 100)))定义了一个lambda函数,该函数接受一个输入参数 x,并对其进行裁剪操作。然后,通过将图像 image 传递给 crop_lambda,可以使用lambda函数对图像进行裁剪。

注意:transforms.Lambda提供了一种灵活的方式来自定义数据转换操作,可以根据需求定义任何自己想要的函数功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/327240.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PEFT: 在低资源硬件上对十亿规模模型进行参数高效微调

1 引言 最近&#xff0c;深度学习的研究中出现了许多大型预训练模型&#xff0c;例如 GPT-3、BERT 等&#xff0c;这些模型可以在多种自然语言处理任务中取得优异的性能表现。而其中&#xff0c;ChatGPT 模型因为在对话生成方面的表现而备受瞩目&#xff0c;成为了自然语言处理…

webgl调试之排查内存泄漏

内存泄漏自然而然是要看内存是不是涨了 然后我们如何确认泄露了呢&#xff0c;我们需要把代码梳理清楚&#xff0c;知道哪个时机&#xff0c;在delete&#xff0c;在create&#xff0c;那么这个时候&#xff0c;按道理&#xff0c;delete了n个对象&#xff0c;create了N个对象&…

Python从入门到网络爬虫(MySQL链接)

前言 在实际数据分析和建模过程中&#xff0c;我们通常需要从数据库中读取数据&#xff0c;并将其转化为 Pandas dataframe 对象进行进一步处理。而 MySQL 数据库是最常用的关系型数据库之一&#xff0c;因此在 Python 中如何连接 MySQL 数据库并查询数据成为了一个重要的问题…

实验笔记之——基于Linux服务器复现Instant-NGP及常用的tmux指令

之前博客实现了基于windows来复现Instant-NGP&#xff0c;本博文在linux服务器上测试 实验笔记之——基于windows复现Instant-NGP-CSDN博客文章浏览阅读444次&#xff0c;点赞15次&#xff0c;收藏7次。之前博客对NeRF-SLAM进行了调研&#xff0c;本博文先复现一下Intant-NGP。…

QT----Visual stdio翻金币案例,附源码

历经一个月&#xff0c;各种事情磕磕绊绊&#xff0c;终于结束了&#xff0c;自己还是太菜了 案例的文档写的教程已经很详细&#xff0c;这边主要是记录一些问题 github代码 gitee代码 1、图片无法加载 一开始加载首页图片和标题出不来&#xff0c;结果是paintEvent重写的字打…

rust 注释文档生成 cargo doc

rust的cargo文档生成 只需要在每个函数写清楚注释&#xff0c;就可以自动生成文档&#xff0c;很方便 即不用写文档&#xff0c;又可以快速查看&#xff0c;是开发rust的必备技能 rust安装和开发环境配置&#xff0c;可以参考&#xff1a;链接 1.写注释的方法 连续三个 \ 即…

【已解决】js定义对象属性是.如何访问

当变量没有length属性的时候&#xff0c;可能是个对象变量&#xff0c;当有键值对的时候就可能是个对象&#xff0c;读者都知道的是&#xff0c;用typeof(变量)可以查看属性&#xff0c;今天本文解决的问题是如果js定义对象中属性是"点"如何访问 问题再现 var a {…

【性能测试入门】详解客户端性能测试和服务器端性能测试!

一&#xff1a;客户端性能测试和服务器端性能测试 客户端性能测试和服务器端性能测试是两个不同但相关的概念: 客户端性能测试: - 测试应用程序客户端(如Web浏览器、移动应用等)的性能,例如加载时间,响应时间等。 - 测试在不同系统配置(CPU、内存、网络等)下客户端的运行性…

【HarmonyOS】装饰器下的状态管理与页面路由跳转实现

从今天开始&#xff0c;博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”&#xff0c;对于刚接触这项技术的小伙伴在学习鸿蒙开发之前&#xff0c;有必要先了解一下鸿蒙&#xff0c;从你的角度来讲&#xff0c;你认为什么是鸿蒙呢&#xff1f;它出现的意义又是…

Python中的cls语法

在Python中&#xff0c;cls 是一个用于指代类本身的约定性名称&#xff0c;通常用作类方法&#xff08;class method&#xff09;中的第一个参数。cls 类似于 self&#xff0c;它是对类的引用&#xff0c;而不是对实例的引用。cls 通常在类方法中用于访问类级别的属性和方法。举…

计算机中的数据运算

放上计算机中的数据的表示方法 计算机中的数据表示方法-CSDN博客 补码的运算&#xff1a; 连同符号位一起相加&#xff0c;符号位产生的进位自然丢掉&#xff0c;这里要特别注意机器数的位数&#xff0c;计算数的位数决定了可以存放的数据的大小&#xff0c;加减产生的数据的…

面试官:说说接口和抽象类有什么区别

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…