時頻圖數據集更正程序,去除坐標軸白邊及調整對應的標簽值

當數據集是時頻圖時可能有一個尷尬的問題,就是數據集制作好后,發現有白邊。

其實這也不影響訓練模型,可能對模型訓練效果的影響也是微乎其微的,于是大多數情況我會選擇直接用整張圖片訓練模型。但是,有的情況下,去掉白邊模型訓練效果好,不去白邊模型某個類別效果就不好。比如圖中的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
英文地址,請注明出處:http://en.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…