时频图数据集更正程序,去除坐标轴白边及调整对应的标签值

当数据集是时频图时可能有一个尴尬的问题,就是数据集制作好后,发现有白边。

其实这也不影响训练模型,可能对模型训练效果的影响也是微乎其微的,于是大多数情况我会选择直接用整张图片训练模型。但是,有的情况下,去掉白边模型训练效果好,不去白边模型某个类别效果就不好。比如图中的BPSK和Frank信号。

一开始我设置416*416的神经网络输入大小,甚至BPSK,Frank信号检测出来的概率特别低,10个中有2个的样子?上面的检测结果是640*640大小训练出来的,虽然信号检测出来的,BPSK,Frank这种特别窄的信号置信度很低,见下图。

这种情况白边就不是可留可不留的了,是必须要去掉。白边占的面积还是挺大的。

裁剪图片并不难,难的是还要对应修正labels中的数值。于是,我写了一个更正程序,既可以裁剪图片,也可以修正labels。

#作者:zhouzhichao
#时间:25年7月4日
#功能:裁剪数据集的图片和调整对应标签数值import os
from PIL import Image, ImageDraw# origin_img_path = ""
# target_img_path = ""
# origin_label_path = ""
# target_label_path = ""origin_width = 875
origin_height = 656x1 = 114
x2 = 791
y1 = 49
y2 = 583after_cut_width = x2 - x1
after_cut_height = y2 - y1def cut_img(target_path):# 设置文件夹路径folder_path = target_pathoutput_folder = target_path# 如果输出文件夹不存在,则创建if not os.path.exists(output_folder):os.makedirs(output_folder)# 获取文件夹中的所有图片for filename in os.listdir(folder_path):if filename.endswith(('.png', '.jpg', '.jpeg')):  # 根据需要修改图片格式img_path = os.path.join(folder_path, filename)img = Image.open(img_path)# 裁剪区域:左上角(114, 49)到右下角(791, 583)cropped_img = img.crop((x1, y1, x2, y2))# 保存裁剪后的图片到输出文件夹output_path = os.path.join(output_folder, filename)cropped_img.save(output_path)print("裁剪完成!")def modify_label(labels_folder):output_folder = labels_folderfor filename in os.listdir(labels_folder):if filename.endswith('.txt'):txt_path = os.path.join(labels_folder, filename)with open(txt_path, 'r') as file:lines = file.readlines()# 修改后的数据将存储在这里modified_lines = []for line in lines:parts = line.strip().split()  # 拆分每一行class_id = parts[0]x_center = float(parts[1])y_center = float(parts[2])width = float(parts[3])height = float(parts[4])# 修改第2列为0.5,第4列为1modified_y_center = (y_center*origin_height-y1)/after_cut_heightmodified_y_height = height*origin_height/after_cut_height# 拼接修改后的行modified_line = f"{class_id} {0.5:.3f} {modified_y_center:.3f} {1:.3f} {modified_y_height:.3f}\n"modified_lines.append(modified_line)# 保存修改后的文件output_txt_path = os.path.join(output_folder, filename)with open(output_txt_path, 'w') as output_file:output_file.writelines(modified_lines)def watch(images_folder,labels_folder,output_folder):for filename in os.listdir(labels_folder):if filename.endswith('.txt'):txt_path = os.path.join(labels_folder, filename)# 获取对应的图片文件名img_filename = filename.replace('.txt', '.jpg')img_path = os.path.join(images_folder, img_filename)# 打开图片img = Image.open(img_path)draw = ImageDraw.Draw(img)# 读取标签文件with open(txt_path, 'r') as file:lines = file.readlines()# 遍历每一行标签,绘制矩形框for line in lines:parts = line.strip().split()  # 拆分每一行class_id = int(parts[0])x_center = float(parts[1]) * img.widthy_center = float(parts[2]) * img.heightwidth = float(parts[3]) * img.widthheight = float(parts[4]) * img.height# 计算矩形框的左上角和右下角坐标x1 = x_center - width / 2y1 = y_center - height / 2x2 = x_center + width / 2y2 = y_center + height / 2# 绘制矩形框,使用红色边框draw.rectangle([x1, y1, x2, y2], outline="white", width=2)# 保存带框的图片output_img_path = os.path.join(output_folder, img_filename)img.save(output_img_path)if __name__ == "__main__":img_path = "D:\english\yolov7\datasets_higher_cut\images\\train"label_path = "D:\english\yolov7\datasets_higher_cut\labels\\train"output_img_path = "D:\english\yolov7\datasets_higher_cut\watch"# cut_img(img_path)# modify_label(label_path)watch(img_path, label_path, output_img_path)

其中,cut_img是裁剪图片的,modify_label是更正标签的,watch是检测更正结果的。

①裁剪效果:

每张图片原本大小是875*656,把左上角114,49到右下角的791,583,覆盖原图。

②label更正效果,原标签:

更正后标签:

主要是把这些数字中的第2列都改成0.5,第4列改成1,第3列改成原来的数值称原图片高度减去y1后除以裁剪后的图片高度。最后一列改成原值乘以原图高度除以裁剪后的图片高度。

③检查效果

最后,用这个程序需要注意,对一个文件架不能使用两次,那图片不就被裁了2次嘛,label的数值不就改乱了嘛。

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

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

相关文章

mv重命名报错:bash:未预期的符号 ‘(‘附近有语法错误

文章目录 一、报错背景二、解决方法2.1、方法一:文件名加引号2.2、方法二:特殊字符前加\进行转义 一、报错背景 在linux上对一文件执行重命名时报错。原因是该文件名包含空格与括号。 文件名如下: aa (1).txt执行命令及报错如下…

Unity-MMORPG内容笔记-其三

继续之前的内容: 战斗系统 无需多言,整个项目中最复杂的部分,也是代码量最大的部分。 属性系统 首先我们要定义一系列属性,毕竟所谓的战斗就是不断地扣血对吧。 属性系统是战斗系统的核心模块,负责管理角色的所有…

Linux入门篇学习——Linux 帮助手册

目录 一、Linux 帮助手册 1.怎么打开帮助手册 2.安装依赖 3.使用手册查看命令 一、Linux 帮助手册 1.怎么打开帮助手册 打开 ubuntu ,输入 man 命令打开帮助手册,直接在控制台输入 man 就可以了, man 手册一共有 9 页&#xff0c…

2025年后端主流框架对比和竞争格局及趋势发展

2025年的后端开发呈现出云原生主导、性能革命、AI深度融合的技术格局,主流框架在细分领域持续分化,新兴技术快速渗透关键场景。以下是基于行业实践与技术演进的深度解析: 一、主流框架竞争态势与核心能力 1. Java生态:企业级市场的…

bRPC简介

bRPC基础介绍。 什么是RPC? 互联网上的机器大都通过TCP/IP协议相互访问,但TCP/IP只是往远端发送了一段二进制数据,为了建立服务还有很多问题需要抽象: 数据以什么格式传输?不同机器间,网络间可能是不同的字节序&am…

力扣网C语言编程题:在数组中查找目标值位置之二分查找法

一. 简介 上一篇文章对力扣网上"有序数组中查找目标值范围"题目进行了普通的解法。文章如下: 力扣网C语言编程题:在数组中查找目标值位置之暴力解法-CSDN博客 本文使用二分查找法进行实现,因为二分查找法符合题目要求&#xff0…

前端查询条件加密传输方案(SM2加解密)

一、需求背景 控台项目甲方进行安全测试,测试报告其中一条:敏感信息明文传输 1 敏感信息明文传输 中危 查询接口传输手机号、银行卡号等敏感信息时未加密/脱敏处理。 二、解决方案 讨论出的方案是通过前端查询条件加密,后端对加密的…

【Python】Flask网页

Flask第三方库安装命令:pip install flask代码:from flask import Flask app Flask(__name__)app.route("/") def hello():return "Hello world!"if __name__ "__main__":app.run()其中的"Hello world!"可以改…

数字资产革命中的信任之锚:RWA法律架构的隐形密码

首席数据官高鹏团队律师创作,AI辅助 在数字经济的浪潮中,资产的边界正在被重新定义。当一块地产、一笔应收账款、甚至一份碳配额被转化为链上的数字代币时,技术的光芒固然耀眼,但真正决定其生命力的,是背后隐匿的“信…

mobaxterm终端sqlplus乱码问题解决

背景。使用mobaxterm终端连接linux。在查询数据库表注释时发现**?**中文乱码。影响对表的分析。完成以下三个编码设置再打开sqlplus查询含中文的数据就正常了 总结。需要查看sqlplus的编码是什么 SELECT parameter, value FROM nls_database_parameters WHERE pa…

一个简单的分布式追踪系统

1. 准备工作 导入必要的库 import contextvars import time from typing import Any, Optional, Dict, List, Union from dataclasses import dataclass, field2. 定义上下文变量 # 定义两个上下文变量,存储当前 Span 和 Trace _current_span: contextvars.Conte…

【Qt】事件处理、事件分发器、事件过滤器

事件处理 一. 事件事件处理鼠标事件处理按键事件处理定时器事件处理窗口事件处理 二. 事件分发器三. 事件过滤器 虽然 Qt 是跨平台的 C 开发框架,Qt 的很多能力其实是操作系统提供的,只不过 Qt 封装了系统 API,程序是运行在操作系统上的&…

广东省省考备考(第三十八天7.4)——言语理解:逻辑填空(题目训练)

错题解析 本题可从第二空入手,横线处搭配“理论”,且根据“使得”可知,横线处与前文构成因果关系,即“遗传学的空白和古生物证据的缺乏”导致他的理论在某些方面存在不足,A项“捉襟见肘”指拉一拉衣襟,就露…

5G网络切片技术

5G中的网络切片技术是一种通过虚拟化将单一物理网络划分为多个独立、可定制的虚拟网络的技术,旨在满足不同应用场景对网络性能、带宽、时延等需求的差异化要求。以下从技术原理、核心价值、应用场景、实现方式及未来趋势五个维度展开分析:一、技术原理&a…

算法学习笔记:7.Dijkstra 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题

在计算机科学领域,图论算法一直占据着重要地位,其中 Dijkstra 算法作为求解单源最短路径问题的经典算法,被广泛应用于路径规划、网络路由等多个场景。无论是算法竞赛、实际项目开发,还是计算机考研 408 的备考,Dijkstr…

汇编 函数调用栈

前言 网上很多对函数栈的解释,说的不是很清楚感觉,尤其是对到底是谁的栈,以及指令的微小但是很致命的细节没说,特写本文,一是帮助自己记忆,二是为了帮助大家,如有疏忽错误请指正。 核心概念 首先…

基于Apache MINA SSHD配置及应用

Apache MINA SSHD 是一个基于 Java 的 SSH 服务器和客户端实现,它是 Apache MINA 项目的一部分,提供了完整的 SSH 协议支持。 主要特性 SSH 协议支持: 支持 SSH2 协议 兼容大多数 SSH 客户端 支持多种加密算法和密钥交换方法 服务器功能…

Excel 如何让数据自动按要求排序或筛选?

让数据按要求排序和筛选是Excel数据处理的基础核心功能,也是进行有效分析前必做的准备工作。下面我们分开讲解这两个功能。 一、排序 (Sort):让数据井井有条 排序的目的是重新排列数据行的顺序,以便更好地观察和比较。 1. 快速单列排序 (最…

Django 安装使用教程

一、Django 简介 Django 是一个高级 Python Web 框架,鼓励快速开发和简洁实用的设计。它内置 ORM、认证系统、后台管理、表单处理、路由控制等功能,广泛用于开发企业级网站、内容管理系统、电商平台等。 二、环境准备 2.1 安装 Python Django 基于 Py…

前沿交叉:Fluent与深度学习驱动的流体力学计算体系

基础模块 流体力学方程求解 1、不可压缩N-S方程数值解法(有限差分/有限元/伪谱法) Fluent工业级应用:稳态/瞬态流、两相流仿真(圆柱绕流、入水问题) Tecplot流场可视化与数据导出 2、CFD数据的AI预处理 基于P…