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提供了一种灵活的方式来自定义数据转换操作,可以根据需求定义任何自己想要的函数功能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

粉丝投稿:从写下第1个脚本到年薪20W,我的自动化测试心路历程

我希望我的故事能够激励现在的软件测试人&#xff0c;尤其是还坚持在做“点点点”的测试人。 你可能会有疑问&#xff1a;“我也能做到这一点的可能性有多大&#xff1f;”因此&#xff0c;我会尽量把自己做决定和思考的过程讲得更具体一些&#xff0c;并尽量体现更多细节。 每…

印象笔记02: 笔记本管理系统和空间使用

印象笔记02&#xff1a; 笔记本管理系统和空间使用 印象笔记新建笔记是一件非常容易的事情。笔记多了&#xff0c;就是归纳到笔记本里。 印象笔记一共有三层的笔记结构&#xff1a;最高层级是笔记本组&#xff0c;其次是笔记本&#xff0c;最后是一个个的笔记。合理的分类能够…

SpringCloud系列篇:核心组件之注册中心组件

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于SpringCloud的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.注册中心组件是什么 二.注册中心…

一键转换,创新无限:将HTML轻松转化为PDF!

在数字时代&#xff0c;HTML与PDF已成为信息传递的两大主流格式。然而&#xff0c;在这两者之间转换常常让人感到困扰。现在&#xff0c;有了我们的创新工具&#xff0c;您只需轻点一下&#xff0c;即可一键将HTML转化为PDF&#xff01; 首先&#xff0c;我们要进入首助编辑高…

(Python + Selenium4)Web自动化测试自学Day2之动手尝试

目录 文章声明⭐⭐⭐让我们开始今天的学习吧&#xff01;小试牛刀关于select标签关于弹窗只有一个点击按钮的弹窗需要确认的弹窗用户可以输入的弹窗 文章声明⭐⭐⭐ 该文章为我&#xff08;有编程语言基础&#xff0c;非编程小白&#xff09;的 Python Selenium4 Web自动化测试…

HttpRunner自动化测试工具之获取响应数据extract提取值到变量

获取响应数据 extract: 提取 注&#xff1a;extract 应与request保持同一层级 1、响应行&#xff0c;响应头&#xff1b;通过 extract 提取响应的数据并存储到变量中&#xff0c;如下图&#xff1a; 注&#xff1a;变量名的前面要有 - # 获取响应数据: 响应行&#xff08;…

【年终总结系列 2023】成长与收获:回顾过去、展望未来,加油2024!

转眼间加入CSDN已经六年多了&#xff0c;初加入CSDN时&#xff0c;我兴致勃勃地投入到写作中&#xff0c;分享了一些CTF的解题思路和方法&#xff0c;取得了不错的反响。但随着工作忙碌和生活压力的增加&#xff0c;我在CTF方面的写作频率逐渐减少&#xff0c;也很长时间没有更…

Linux离线安装MySQL(rpm)

目录 下载安装包安装MySQL检测安装结果服务启停MySQL用户设置 下载安装包 下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 下载全量包如&#xff1a;(mysql-8.1.0-1.el7.x86_64.rpm-bundle.tar) 解压&#xff1a;tar -xzvf mysql-8.1.0-1.el7.x86_64.…

国家高等教育智慧教育平台

文章目录 1. 网站地址2. 网站简介3. 网站集合的资源与依托平台彩蛋环节a. 考试酷b. 公益学术平台 足不出户&#xff0c;就能免费学习2.7万门大学课程。包含国家精品课程&#xff0c;部分课程由国家级名师 / 院士 授课。 1. 网站地址 国家高等教育智慧教育平台网址&#xff1a;…

架构的本质是什么?

最近总是有小伙伴问我&#xff0c;如何成长为一名优秀的架构师&#xff0c;我也不知道该如何去回答&#xff0c;但是我想聊一下架构的本质。 架构不是互联网行业独有的 架构及对应的架构师职位并不是互联网行业独有的&#xff0c;只要存在组织的地方就存在架构。 比如一个木…

【C++】vector

文章目录 1. vector 的介绍2. vector 的使用2.1 vector 的定义2.2 vector iterator 的使用2.3 vector 的空间增长问题2.3 vector 增删查改 1. vector 的介绍 vector的文档介绍 vector是表示可变大小数组的序列容器。就像数组一样&#xff0c;vector也采用连续的存储空间来存储…

程序员必知!责任链模式的实战应用与案例分析

责任链模式让多个对象依次处理请求&#xff0c;降低发送者和接收者的耦合度&#xff0c;以在线购物为例&#xff0c;用户提交订单需经多步验证&#xff0c;通过责任链模式&#xff0c;验证器按顺序处理请求&#xff0c;先用户身份&#xff0c;再支付方式&#xff0c;最后配送地…

【LMM 011】MiniGPT-5:通过 Generative Vokens 进行交错视觉语言生成的多模态大模型

论文标题&#xff1a;MiniGPT-5: Interleaved Vision-and-Language Generation via Generative Vokens 论文作者&#xff1a;Kaizhi Zheng* , Xuehai He* , Xin Eric Wang 作者单位&#xff1a;University of California, Santa Cruz 论文原文&#xff1a;https://arxiv.org/ab…

java的面向对象编程(oop)概述及案例

前言&#xff1a; 学到了面向对象编程&#xff0c;整理下相关知识点。打牢基础&#xff0c;daydayup! 面向对象基础概述 1&#xff0c;什么是面向对象&#xff0c;面向对象的思考逻辑是什么&#xff1f; 面向对象就是把任何事物都看成一个又一个对象。思考逻辑为万物皆对象&am…

计算机毕业设计 基于javaweb的宠物认养系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

STHS34PF80人体存在传感器(1)----获取人体存在状态

STHS34PF80人体存在传感器.1--获取人体存在状态 概述视频教学样品申请完整代码下载主要特点硬件准备接口最小系统图生成STM32CUBEMX串口配置IIC配置CS设置串口重定向参考案例获取ID温度测量滤波方式智能识别算法使用块数据更新&#xff08;BDU&#xff09;功能设置ODR速率获取状…

多类指针式仪表自动读数系统的LabVIEW开发应用案例

多类指针式仪表自动读数系统的LabVIEW开发应用案例 工业环境中&#xff0c;多类指针式仪表的自动读数一直是一个具有挑战性的问题。本案例旨在展示如何使用LabVIEW开发一个高度智能化的多类指针式仪表自动读数系统&#xff0c;以应对复杂的工业环境。通过结合图像处理技术和深…

DDoS攻击的多种方式

DDOS攻击指分布式拒绝服务攻击&#xff0c;即处于不同位置的多个攻击者同时向一个或数个目标发动攻击&#xff0c;或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。由于攻击的发出点是分布在不同地方的&#xff0c;这类攻击称为分布式拒绝服务…

【Python学习】Python学习3-变量类型

目录 【Python学习】Python学习3-变量类型 前言变量赋值多个变量赋值标准数据类型Python Numbers(数字)Python List&#xff08;列表&#xff09;Python Tuple&#xff08;元组&#xff09;Python Dictionary&#xff08;字典&#xff09; Python数据类型转换总结参考 文章所属…

万界星空科技MES系统怎么管理生产?

MES系统&#xff08;Manufacturing Execution System&#xff0c;制造执行系统&#xff09;是一种用于管理和监控生产过程的软件系统。它通常与企业的ERP系统&#xff08;Enterprise Resource Planning&#xff0c;企业资源计划&#xff09;集成&#xff0c;用于实时收集和分析…