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

根据YOLO数据集标签计算检测框内目标面积占比(YOLO7-10都适用)

程序:

路径改成自己的,阈值可以修改也可以默认

#zhouzhichao
#25年5月17日
#计算时频图中信号面积占检测框面积的比值import os
import numpy as np
import pandas as pd
from PIL import Image# Define the path to the directory containing the label txt files
label_dir = r'D:\实验室\论文\论文-多信号参数估计\JCR3\Principle\微调原理\diff_snr\snr_dataset\label_txt'
img_dir = r'D:\实验室\论文\论文-多信号参数估计\JCR3\Principle\微调原理\diff_snr\snr_dataset\6'
binary_output_dir = r'D:\实验室\论文\论文-多信号参数估计\JCR3\Principle\像素面积比值\binary img'# Make sure the output directory exists
os.makedirs(binary_output_dir, exist_ok=True)# Initialize lists for storing the results for each class
ratios_0 = []
ratios_1 = []
ratios_2 = []
ratios_3 = []# Function to calculate the ratio of signal area to the bounding box area
def calculate_area_ratio(image_path, label_path, binary_output_dir):# Load the image and convert it to grayscaleimage = Image.open(image_path).convert('L')  # Convert to grayscale (L mode)image_array = np.array(image)# Read the label filewith open(label_path, 'r') as file:labels = file.readlines()for label in labels:# Parse the labellabel_data = label.strip().split()class_id = int(label_data[0])  # Class IDx_center = float(label_data[1])  # x center normalizedy_center = float(label_data[2])  # y center normalizedbox_width = float(label_data[3])  # box width normalizedbox_height = float(label_data[4])  # box height normalized# Convert the normalized values to pixel values based on image sizeimg_width, img_height = image.sizex_center_px = int(x_center * img_width)y_center_px = int(y_center * img_height)box_width_px = int(box_width * img_width)box_height_px = int(box_height * img_height)# Calculate the bounding box coordinatesx_min = max(x_center_px - box_width_px // 2, 0)y_min = max(y_center_px - box_height_px // 2, 0)x_max = min(x_center_px + box_width_px // 2, img_width)y_max = min(y_center_px + box_height_px // 2, img_height)# Extract the bounding box regionbbox_region = image_array[y_min:y_max, x_min:x_max]# Threshold the image (binary thresholding)binary_region = np.where(bbox_region > 128, 1, 0)  # 128 as threshold# Calculate the area of the signal inside the bounding box (sum of binary values)signal_area = np.sum(binary_region)# Calculate the area of the bounding boxbox_area = box_width_px * box_height_px# Save the binary image of the region to the output folderbinary_image = Image.fromarray(binary_region.astype(np.uint8) * 255)  # Convert to 0-255 scale for savingbinary_image.save(os.path.join(binary_output_dir, f'binary_{class_id}_{x_center_px}_{y_center_px}.png'))# Calculate the area ratioarea_ratio = signal_area / box_area if box_area > 0 else 0if class_id==0:ratios_0.append(area_ratio)if class_id==1:ratios_1.append(area_ratio)if class_id == 2:ratios_2.append(area_ratio)if class_id == 3:ratios_3.append(area_ratio)# Traverse all the label files and calculate area ratios
for label_file in os.listdir(label_dir):if label_file.endswith('.txt'):# Get corresponding image pathlabel_path = os.path.join(label_dir, label_file)image_name = label_file.replace('.txt', '.jpg')  # Assuming image is in .jpg formatimage_path = os.path.join(img_dir, image_name)# Calculate area ratios for the current label filecalculate_area_ratio(image_path, label_path, binary_output_dir)data = {'ratios_0': ratios_0,'ratios_1': ratios_1,'ratios_2': ratios_2,'ratios_3': ratios_3
}# 创建一个 DataFrame
df = pd.DataFrame(data)# 保存到 Excel 文件
file_path = r'D:\实验室\论文\论文-多信号参数估计\JCR3\Principle\像素面积比值\area_ratios.xlsx'
df.to_excel(file_path, index=False)
print()

程序依照的公式:

生成结果:

可用于绘制论文实验图:

http://www.lryc.cn/news/2384809.html

相关文章:

  • Helm简介、安装、配置、使用!
  • LLM笔记(九)KV缓存(2)
  • 开发 前端搭建npm v11.4.0 is known not to run on Node.js v14.18.1.
  • LVS 负载均衡集群应用实战
  • MySQL——基本查询内置函数
  • Day34打卡 @浙大疏锦行
  • 【Jitsi Meet】(腾讯会议的平替)Docker安装Jitsi Meet指南-使用内网IP访问
  • AdGuard解锁高级版(Nightly)_v4.10.36 安卓去除手机APP广告
  • C++修炼:红黑树的模拟实现
  • 基于Python+YOLO模型的手势识别系统
  • 自制操作系统day10叠加处理
  • docker初学
  • ## Docker 中 Elasticsearch 启动失败:日志文件权限问题排查与解决
  • 鸿蒙Flutter实战:23-混合开发详解-3-源码模式引入
  • leetcode:2469. 温度转换(python3解法,数学相关算法题)
  • 【软件安装】Windows操作系统中安装mongodb数据库和mongo-shell工具
  • 跨域问题及其CORS解决方案:gin框架中配置跨域
  • 记共享元素动画导致的内存泄露
  • Flyweight(享元)设计模式 软考 享元 和 代理属于结构型设计模式
  • Win/Linux安装flash attention2
  • 【原创】ubuntu22.04下载编译AOSP 15
  • 服务器网络配置 netplan一个网口配置两个ip(双ip、辅助ip、别名IP别名)
  • 响应面法(Response Surface Methodology ,RSM)
  • 针对面试-java集合篇
  • Spring Boot 拦截器:解锁5大实用场景
  • 展锐 Android 15 锁定某个App版本的实现
  • 有两个Python脚本都在虚拟环境下运行,怎么打包成一个系统服务,按照顺序启动?
  • 【Linux cmd】查找进程信息
  • 与网格共舞 - 服务网格的运维与问题排查 (Istio 实例)
  • Python 脚本执行命令的深度探索:方法、示例与最佳实践