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

FlowSDF中转换数据集格式的脚本

🔄 转换流程

输入格式(原始数据)

 
文件类型格式内容
图像文件 .tif 灰度组织病理图像
标注文件 .xml 包含细胞核轮廓的多边形坐标(Region/Vertex标签)

输出格式(处理后)

 
文件类型格式内容用途
原始图像 .tif 灰度图(不变) 模型输入
分割掩码 .png 二值图像(0=背景,255=细胞核) 语义分割标签
符号距离函数 .npy NumPy数组(正值=核内,负值=核外) 辅助损失函数/边界监督
数据集划分 .csv 训练/测试集文件路径列表 数据加载

 

代码如下

import os
import cv2
import numpy as np
import pandas as pd
import xml.etree.ElementTree as ET
from scipy.ndimage import distance_transform_edtimage_dir = "MoNuSeg/Images"
xml_dir = "MoNuSeg/Annotations"out_dir = "datasets/monuseg"
img_out = os.path.join(out_dir, "images")
mask_out = os.path.join(out_dir, "masks")
sdf_out = os.path.join(out_dir, "sdf")os.makedirs(img_out, exist_ok=True)
os.makedirs(mask_out, exist_ok=True)
os.makedirs(sdf_out, exist_ok=True)records = []for file in os.listdir(image_dir):if not file.endswith(".tif"):continuename = file.replace(".tif","")img_path = os.path.join(image_dir,file)xml_path = os.path.join(xml_dir,name+".xml")img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)mask = np.zeros(img.shape, np.uint8)tree = ET.parse(xml_path)root = tree.getroot()for region in root.iter("Region"):coords = []for vertex in region.iter("Vertex"):x = int(float(vertex.attrib["X"]))y = int(float(vertex.attrib["Y"]))coords.append([x,y])coords = np.array(coords,np.int32)cv2.fillPoly(mask,[coords],1)pos = distance_transform_edt(mask)neg = distance_transform_edt(1-mask)sdf = pos - negimg_save = os.path.join(img_out,name+".tif")mask_save = os.path.join(mask_out,name+".png")sdf_save = os.path.join(sdf_out,name+".npy")cv2.imwrite(mask_save,mask*255)np.save(sdf_save,sdf)records.append({"image":f"images/{name}.tif","mask":f"masks/{name}.png","sdf":f"sdf/{name}.npy"})cv2.imwrite(img_save,img)df = pd.DataFrame(records)train = df.sample(frac=0.8,random_state=42)
test = df.drop(train.index)train.to_csv(os.path.join(out_dir,"train.csv"),index=False)
test.to_csv(os.path.join(out_dir,"test.csv"),index=False)print("Dataset preprocessing finished.")

 

http://www.jsqmd.com/news/492439/

相关文章:

  • ADS中村田电感模型导入实战:.mod与.s2p文件的应用对比与性能分析
  • Phi-3-vision-128k-instruct教学场景应用:学生作业图像题自动解答案例
  • Vue大屏适配神器V-Scale-Screen实战:从4K到1080P的无缝缩放方案
  • 重大升级!戳戳 Oracle巡检系统,现已支持DG与RAC集群
  • 一只比芝麻还小的蜂,大脑只有几百个神经元,却让现在的AI显得很笨重
  • BunnyScholar和嘎嘎降AI怎么选?实测对比给你答案
  • Golang开发的Hawkeye工具全解析:从安装到高级功能使用指南
  • Qwen3-14b_int4_awq Chainlit前端实操:上传文件、多轮对话、清除历史记录
  • 罗兰艺境GEO技术架构:基于DSS原则的认知基建工程体系 - 罗兰艺境GEO
  • 基于ESP32-S3与TMC2209的立创EDA 3D裸眼风扇广告机开源项目全解析
  • 3步解决ComfyUI-Florence2模型加载故障终极指南
  • AD组策略密码安全配置指南:从默认策略到企业级防护
  • 轻量模型新选择:Qwen1.5-1.8B GPTQ与同类模型在AIGC任务上的效果横评
  • 3/15打卡
  • ai辅助开发新体验:让快马ai智能推荐并验证win10镜像
  • 企业级渗透测试实战:如何用AppScan标准版快速定位SQL注入漏洞(附登录态配置技巧)
  • 存储型XSS的隐藏威胁:如何通过评论区漏洞入侵你的网站
  • 【Rust日报】 RAVEN — RISC-V 模拟器与集成开发环境
  • 告别重复造轮子:用快马ai编程一键生成用户认证模块提升效率
  • BAAI/bge-m3快速搭建:一键部署高性能语义分析服务
  • 【书生·浦语】internlm2-chat-1.8b部署教程:OpenEuler操作系统兼容性验证
  • 第二十届智能车信标系统:从硬件连接到策略配置的全流程解析
  • QMI8658A和QMC5883L传感器校准全攻略:从零偏校准到椭球拟合
  • TI电赛开发板开源软件例程深度解析与实战指南
  • 使用uv来管理Python项目
  • FPGA实战1-调制解调
  • Phi-3-vision-128k-instruct惊艳效果:含数学公式的教材插图推理与解题步骤生成
  • 风电轴承故障频率计算与诊断实践
  • 2026二手电子元器件回收优质品牌推荐榜:电子元器件库存回收/通讯设备元器件回收/ic芯片电子元器件回收/选择指南 - 优质品牌商家
  • WeChatExporter:微信聊天记录全类型数据备份的开源解决方案