当前位置: 首页 > news >正文

针对图像分类的数据增强方法,离线增强,适合分类,无标签增强

针对图像分类的数据增强方法,离线增强,适合分类,无标签增强

代码:

改变路径即可使用


# 本代码主要提供一些针对图像分类的数据增强方法# 1、平移。在图像平面上对图像以一定方式进行平移。
# 2、翻转图像。沿着水平或者垂直方向翻转图像。
# 3、旋转角度。随机旋转图像一定角度; 改变图像内容的朝向。
# 4、随机颜色。包括调整图像饱和度、亮度、对比度、锐度
# 5、缩放变形图片。
# 6、二值化图像。
# 7、随机黑色块遮挡
# 8、添加噪声from PIL import Image
from PIL import ImageEnhance
from PIL import ImageChops
import os
import numpy as np# 1、图像平移
def move(img): #平移,平移尺度为offoffset = ImageChops.offset(img, np.random.randint(1, 20), np.random.randint(1, 40))return offset# 2、翻转图像
def flip(img):   factor = np.random.randint(1, 3) #随机因子,随机上下或者左右翻转if factor == 1:filp_img = img.transpose(Image.FLIP_TOP_BOTTOM)else:filp_img = img.transpose(Image.FLIP_LEFT_RIGHT)return filp_img#  3、旋转角度
def rotation(img):factor = np.random.randint(1, 21) #随机旋转角度rotation_img = img.rotate(factor) return rotation_img# 4、随机颜色 
def color(img): """对图像进行颜色抖动:param image: PIL的图像image:return: 有颜色色差的图像image"""random_factor = np.random.randint(5, 15) / 10.  # 随机因子color_image = ImageEnhance.Color(img).enhance(random_factor)                     # 调整图像的饱和度random_factor = np.random.randint(8, 15) / 10.  # 随机因子brightness_image = ImageEnhance.Brightness(color_image).enhance(random_factor)   # 调整图像的亮度random_factor = np.random.randint(10, 13) / 10. # 随机因子contrast_image = ImageEnhance.Contrast(brightness_image).enhance(random_factor)  # 调整图像对比度random_factor = np.random.randint(5, 31) / 10.  # 随机因子random_color = ImageEnhance.Sharpness(contrast_image).enhance(random_factor)     # 调整图像锐度return random_color # 5、缩放变形图片
def crop(img):factor_1 = np.random.randint(10, 50)factor_2 = np.random.randint(20, 50)crop_img = img.crop((img.size[0]/factor_1, img.size[1]/factor_2, img.size[0]*(factor_1-1)/factor_1, img.size[1]*(factor_2-1)/factor_2))cropResize_img = crop_img.resize((img.size[0], img.size[1]))return cropResize_img# 6、二值化图像
def convert(img):convert_img = img.convert('L')return convert_img# 7、黑色块遮挡
def paste(img):# 左上右下factor_1 = np.random.randint(20, 70)factor_2 = np.random.randint(30, 60)# 随机进行左边遮罩a = np.random.randint(1,3)if a == 2:img.paste((0,0,0),(int(img.size[0]*(factor_1-np.random.randint(2,4))/factor_1), int(img.size[1]*(np.random.randint(1,25))/factor_2), int(img.size[0]*(factor_1-np.random.randint(0,2))/factor_1),int(img.size[1]*(np.random.randint(26,50))/factor_2)))else:# 随机进行底部遮罩img.paste((0,0,0),(int(img.size[0]*(np.random.randint(1,19))/factor_1), # int(img.size[1]*(factor_2-2)/factor_2), int(img.size[1]*(factor_2-np.random.randint(3,6))/factor_2),int(img.size[0]*(np.random.randint(21,41))/factor_1),# int(img.size[1]*(factor_2-1)/factor_2)int(img.size[1]*(factor_2-np.random.randint(0,3))/factor_2)))return img# 8、随机添加黑白噪声
def salt_and_pepper_noise(img, proportion = 0.00025):noise_img = imgheight,width =noise_img.size[0],noise_img.size[1]proportion = proportion * np.random.randint(1, 50)num = int(height * width * proportion) #多少个像素点添加椒盐噪声pixels = noise_img.load()for i in range(num):w = np.random.randint(0,width-1)h = np.random.randint(0,height-1)if np.random.randint(0,2) == 1:pixels[h,w] = 0else:pixels[h,w] = 255return noise_img# 概率执行函数
def random_run(probability, func, useimage):"""以probability%的概率执行func(*args)"""list = []for i in range(probability):list.append(1)                      #list中放入probability个1for x in range(100 - probability):list.append(0)                      #剩下的位置放入0a = np.random.choice(list)              #随机抽取一个if a == 0:return useimageif a == 1:image = func(useimage)return imagedef main():imageDir = "D:/adavance/resnet50/datasets/Coupling/test/norm  "            #要改变的图片的路径文件夹saveDir = imageDir#"D:/adavance/resnet50/datasets/TailCotterPin/test/norm_TailCotterPin"                 #要保存的图片的路径文件夹seed = 10                           #每张初始图片要数据增强为多少张图片for name in os.listdir(imageDir):i=0for i in range(seed):i = i+1saveName = str(name[:-4]) + str(i) +".jpg"img = Image.open(os.path.join(imageDir, name))saveImage = random_run(60, flip, img)                               # 翻转saveImage = random_run(70, color, saveImage)                        # 色彩变化saveImage = random_run(30, crop, saveImage)                         # 裁减缩放#saveImage = random_run(30, paste, saveImage)                        # 添加遮罩saveImage = random_run(20, move, saveImage)                         # 平移saveImage = random_run(50, rotation, saveImage)                     # 旋转saveImage = random_run(10, convert, saveImage)                      # 二值化  saveImage = random_run(20, salt_and_pepper_noise, saveImage)        # 添加噪声点# saveImage = random_run(90, gauss_noise, saveImage)print(type(saveImage))if saveImage != None:saveImage.save(os.path.join(saveDir, saveName))else:passprint(i)if __name__ == "__main__":main()

PS: 记得备份原图,要不然出差错了,就不好恢复了

相关文章:

针对图像分类的数据增强方法,离线增强,适合分类,无标签增强

针对图像分类的数据增强方法,离线增强,适合分类,无标签增强 代码: 改变路径即可使用 # 本代码主要提供一些针对图像分类的数据增强方法# 1、平移。在图像平面上对图像以一定方式进行平移。 # 2、翻转图像。沿着水平或者垂直方向…...

润色论文Prompt

你好,我现在开始写论文了,我希望你可以扮演帮我润色论文的角色我写的论文是关于xxxxx领域的xxxxx,我希望你能帮我检查段落中语句的逻辑、语法和拼写等问题我希望你能帮我检查以下段落中语句的逻辑、语法和拼写等问题同时提供润色版本以符合学…...

配置简单VLAN

1、 需求 : 1)创建VLAN 10、20、30 2)将端口加入VLAN 3)查看VLAN信息 2、方案 使用eNSP搭建实验环境,如图所示。 3、步骤 实现此案例需要按照如下步骤进行。 1)交换机创建VLAN 10、20、30 [sw1]vla…...

手机是否能登陆国际腾讯云服务器?

在当今社会,跟着互联网的开展,越来越多的用户开始运用云服务器来存储和处理数据。其间,腾讯云服务器作为国内知名的云服务器供给商,受到了广大用户的欢迎。可是,有一些用户可能还不清楚手机是否能登陆腾讯云服务器。本…...

5分钟Python安装实战(MAC版本)

最近在学习Chatgpt接口,官方提供三种方式调用Chatgpt接口,分别是curl、python、node.js:具体介绍我放在下方图片 因为熟悉Python,所以我选择了python这种方式,顺便记录下安装过程,整体并不复杂,…...

python自动化测试(十一):写入、读取、修改Excel表格的数据

目录 一、写入 1.1 安装 xlwt 1.2 增加sheet页 1.2.1 新建sheet页 1.2.2 sheet页写入数据 1.2.3 excel保存 1.2.4 完整代码 1.2.5 同一坐标,重复写入 二、读取 2.1 安装读取模块 2.2 读取sheet页 2.2.1 序号读取shee页 2.2.2 通过sheet页的名称读取she…...

【milkv】添加LCD屏GC9306

前言 本章介绍如何添加LCD屏GC9306驱动。 电路图 dts build\boards\cv180x\cv1800b_milkv_duo_sd\dts_riscv\cv1800b_milkv_duo_sd.dts &spi2 {status "okay";/delete-node/ spidev0;gc9306: gc93060{compatible "sitronix,gc9306";reg <0&g…...

设计模式--开篇

什么是设计模式 设计模式是软件开发过程中面临的通用问题的解决方案。 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性 按使用目的分类 创建型–主要用于创建对象 单例模式-某个类只能有一个实例&#xff0c;提供一个全局的访问点工厂方法模式-创建…...

Android 原生进度条ProgressBar【自带】【水平风格】自定义

由于不想从零开始自定义&#xff0c;Android原生的进度条就已经很够用了呀&#xff01; <ProgressBar​android:id"id/pb_storage"​style"style/Widget.AppCompat.ProgressBar.Horizontal"​android:layout_width"match_parent"​android:l…...

Nginx实现tcp代理并支持TLS加密实验

Nginx源码编译 关于nginx的搭建配置具体参考笔者之前的一篇文章&#xff1a;实时流媒体服务器搭建试验&#xff08;nginxrtmp&#xff09;_如何在线测试流媒体rtmp搭建成功了吗-CSDN博客中的前半部分&#xff1b;唯一变化的是编译参数&#xff08;添加stream模块并添加其对应ss…...

vue3+setup 解决:this.$refs引用子组件报错 is not a function

一、如果在父组件中以下四步都没问题的话&#xff0c;再看下面步骤 二、如果父组件引用的是index页面 请在 头部加上以下代码 &#xff08;如果是form页面请忽略这一步&#xff09; <template> <a-modalv-model:visible"visible"title"头部名称&…...

189. 轮转数组

给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,4…...

com.alibaba:tools:jar com.alibaba:jconsole:jar

com.alibaba:tools:jar com.alibaba:jconsole:jar...

洛谷 P1020 [NOIP1999 普及组] 导弹拦截【一题掌握三种方法:动态规划+贪心+二分】最长上升子序列LIS解法详解

P1020 [NOIP1999 普及组] 导弹拦截 前言题目题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示题目分析注意事项 代码动态规划&#xff08;NOIP要求&#xff1a;时间复杂度O(n^2^)&#xff09;贪心二分&#xff08;O(nlgn)&#xff09; 后话额外测试用例样例输入 #1…...

golang的管道阻塞问题

package mainimport ("fmt""sync"//"time" ) var wg sync.WaitGroup func writeData(intchan chan int){defer wg.Done()for i : 1; i < 9; i {intchan<-ifmt.Println("写入的数据为&#xff1a;",i)//time.Sleep(time.Seco…...

用HTML + javaScript快速完成excel表格信息除重并合并

今天突然接到一个工作&#xff0c;要把两个存储在.xls的主体信息表&#xff0c;除重后合并成一个主体信息表&#xff0c;并且补充主体类型和所在县区这两列信息。 完成这项工作的方法有很多&#xff0c;如果信息表中的信息量不大的话&#xff0c;手工处理一下也行&#xff0c;如…...

高性能网络编程 - The C10M problem

文章目录 Pre概述回顾C10K实现C10M的挑战思路总结 Pre 高性能网络编程 - The C10K problem 以及 网络编程技术角度的解决思路 概述 在接下来的10年里&#xff0c;因为IPv6协议下每个服务器的潜在连接数都是数以百万级的&#xff0c;单机服务器处理数百万的并发连接&#xff0…...

java计算机毕业设计SpringBoot在线答疑系统

项目介绍 本文从学生的功能要求出发&#xff0c;建立了在线答疑系统&#xff0c;系统中的功能模块主要是实现管理员权限&#xff1b;首页、个人中心、学生管理、教师管理、问题发布管理、疑难解答管理。教师权限&#xff1a;首页、个人中心、疑难解答管理、试卷管理、试题管理…...

Doc as Code (4):使用Git做版本管理,而不是使用目录做版本管理

▲ 搜索“大龙谈智能内容”关注GongZongHao▲ 在引入版本管理工具之前&#xff0c;文档工程师使用文件系统提供的功能来管理文件。大家是这样工作的&#xff1a; 文件按照分类放在不同的目录里&#xff0c;使用编辑器&#xff08;如&#xff1a;MS Word&#xff09;打开文档进…...

【Codeforces】 CF1870E Another MEX Problem

题目链接 CF方向 Luogu方向 题目解法 解法1 考虑优化 d p dp dp 转移次数&#xff0c;即只转移有用的区间 不难发现&#xff0c; m e x ( l , r ) m e x ( l 1 , r ) mex(l,r)mex(l1,r) mex(l,r)mex(l1,r) 或 m e x ( l , r ) m e x ( l , r − 1 ) mex(l,r)mex(l,r-1…...

告别‘炼丹’低效!手把手教你用TinyViT的‘稀疏软标签’实现快速模型蒸馏

突破计算瓶颈&#xff1a;TinyViT稀疏软标签蒸馏实战指南 在模型压缩领域&#xff0c;知识蒸馏一直是个让人又爱又恨的技术。它能将大模型的知识精华提炼给小模型&#xff0c;但传统方法需要反复调用庞大的教师模型&#xff0c;这种"炼丹"过程不仅耗时耗力&#xff0…...

原电脑只运行了:npm install -g openclaw 要把它迁移到一个新电脑,怎么操作,菜鸟教程

好的&#xff0c;这份菜鸟教程会帮你把原电脑上的 OpenClaw 完整“搬家”到新电脑&#xff0c;所有配置、密钥、聊天记录都会原样保留。&#x1f4e6; 准备工作&#xff1a;原电脑上打包数据 在原电脑上操作。关闭 OpenClaw 网关 打开 PowerShell&#xff08;管理员身份&#x…...

线程安全 ≠ 协程安全:当全局缓存同时遇上线程池和 async,优秀 Python 工程师该如何设计?

线程安全 ≠ 协程安全&#xff1a;当全局缓存同时遇上线程池和 async&#xff0c;优秀 Python 工程师该如何设计&#xff1f; Python 让很多人第一次感受到编程的温柔&#xff1a;语法简洁&#xff0c;生态丰富&#xff0c;既能写 Web 服务&#xff0c;也能做数据分析、自动化脚…...

告别信号衰减!PCIe 5.0硬件设计实战:从板材选择到玻纤效应的完整避坑指南

PCIe 5.0硬件设计实战&#xff1a;从板材选择到玻纤效应的完整避坑指南 当32GT/s的高速信号在PCB走线上疾驰时&#xff0c;每一个设计细节都可能成为性能的绊脚石。作为经历过三代PCIe标准迭代的硬件工程师&#xff0c;我至今记得第一次看到PCIe 5.0眼图崩溃时的震撼——那些理…...

Chapter 9:企业实战案例与架构沉淀

Chapter 9:企业实战案例与架构沉淀 9.1 企业级 Agent 系统设计 设计原则 ┌─────────────────────────────────────────────────────────────┐ │ 企业级 Agent 系统六大原则 …...

智能图片去重工具AntiDupl.NET:4大核心模块高效释放存储空间终极指南

智能图片去重工具AntiDupl.NET&#xff1a;4大核心模块高效释放存储空间终极指南 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否经常面临手机相册被重复照片塞满…...

初识VTK中的类

QVTKOpenGLNativeWidget&#xff1a;用于在QT中嵌入显示VTK数据的widget VTKOpenGLNativeWidget* m_vtk new QVTKOpenGLNativeWidget(this);vtkGenericOpenGLRenderWindow&#xff1a;VTK 渲染窗口 vtkSmartPointer<vtkGenericOpenGLRenderWindow> m_renderWindow vtkS…...

智能硬件监控新范式:LibreHardwareMonitor的架构解析与实战指南

智能硬件监控新范式&#xff1a;LibreHardwareMonitor的架构解析与实战指南 【免费下载链接】LibreHardwareMonitor Libre Hardware Monitor is free software that can monitor the temperature sensors, fan speeds, voltages, load and clock speeds of your computer. 项…...

全网都在找的是vocaAI英语口语练习下载教程它来了#vocaai #vocaai下载 #vocaai下载教程

全网都在找的是vocaAI英语口语练习下载教程它来了#vocaai #vocaai下载 #vocaai下载教程 vocaai下载链接: https://pan.baidu.com/s/10uls0_QDIEomdXcGaYMQ9w?pwd6666 提取码: 6666...

3个维度重构你的Windows体验:Win11Debloat系统深度优化解码

3个维度重构你的Windows体验&#xff1a;Win11Debloat系统深度优化解码 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter a…...