【Promise12数据集】Promise12数据集介绍和预处理
【Segment Anything Model】做分割的专栏链接,欢迎来学习。
【博主微信】cvxiayixiao
本专栏为公开数据集的介绍和预处理,持续更新中。
要是只想把Promise12数据集的raw形式分割为png形式,快速导航,直接看2,4标题即可
这里只处理了test 换个路径在走一边train就行 是一样的
文章目录
- 1️⃣Promise12数据集介绍
- 🌵介绍
- 🌿临床意义
- 🌱Promise12数据集特点
- 🍃源文件样图
- 2️⃣下载Promise12数据集
- 3️⃣python读取一张Promise12数据集并展示
- 🍀使用 Python 的 zipfile 模块来访问 ZIP 文件
- 🍃注意 ⚠️ ⚠️⚠️
- 🌳提取第一个raw
- 🌲python读取raw
- 🌱python读取分割切片结果
- 4️⃣python处理整个Promise12数据集
- 1. 数据集下载到本地之后先将zip解压
- 2. 处理解压之后的数据集,将raw转为png
- 3. 将所有png图像分为image文件夹和label文件夹
- 5️⃣Promise12数据集官方给的评价指标
1️⃣Promise12数据集介绍
🌵介绍
数据集来源一个比赛Prostate MR Image Segmentation 2012。是一个广泛用于前列腺磁共振成像(MRI)分割的数据集。
这个数据集最初是在2012年的MICCAI 'Prostate MR Image Segmentation’挑战赛中使用的,🚩目标是比较用于前列腺MRI的交互式和(半)自动分割算法。可以下载。官网 下载地址在 Download里面
🌿临床意义
前列腺在MR图像上的分割在临床上尤为重要,👀因为它可以帮助确定前列腺的体积,这对于评估前列腺疾病,预测前列腺癌的病理阶段,了解预后,并帮助预测治疗反应都极为重要。
前列腺的大小,形状,以及相对于相邻器官的位置的信息是进行前列腺切除手术,🗿放射治疗以及新兴的微创疗法(如冷冻治疗和高强度聚焦超声)的手术规划的重要组成部分。Promise12数据集可以为这些应用提供关键的、精确的前列腺分割信息🚩。
🌱Promise12数据集特点
这个数据集的特点包括:
多中心,多数据供应商: 数据集中的图像来自多个不同的医疗中心和机构,使其可以覆盖和代表各种不同的病例和设备来源。
训练和测试数据:数据集提供训练和测试数据,均有相应的真实分割(ground truth)作为参考。
算法比较和评估:提交的结果会被自动评估并与参考标准进行比较,从而可以直观地比较和评价不同的分割算法的性能。
🍎🍎🍎这些特性使Promise12成为了前列腺MRI分割任务的重要基准数据集。研究者通过使用这个数据集来训练并评估他们的前列腺分割算法。
🍃源文件样图

2️⃣下载Promise12数据集
官网有三个包可以下载

livechallenge_test_data中的结构如下。这是比赛之后官网验证的数据集,比赛中不可见,是测试部分。
每个样本由4个文件组成分别是原始img的mhd,分割img的mhd。原始img的raw 分割img的raw
MHD和RAW是常用于医学图像处理和存储的文件格式。
MHD用于存储医学图像数据和相关的元数据信息。MHD文件通常是一个文本文件,其中包含图像数据的描述信息,例如图像的维度、像素类型、像素间距、数据存储顺序等。MHD文件本身并不包含图像数据,而是引用一个相应的RAW文件来存储实际的图像数据。RAW文件则是包含原始图像数据的二进制文件。它通常与MHD文件配套使用,用于存储实际的图像像素值。RAW文件中的数据可以是未经处理的原始像素值,例如灰度值或颜色值,具体取决于图像的类型和采集设备。

test_data是提供给参赛人员的测试样本,结构一样。

training_data训练数据,也一样

3️⃣python读取一张Promise12数据集并展示
🍀使用 Python 的 zipfile 模块来访问 ZIP 文件
import zipfile
import os
import SimpleITK as sitk
import matplotlib.pyplot as plt
# 设置文件的路径
zip_file_path = 'F:\BaiduNetdiskDownload\promise12\\test_data.zip'
#
# 检查文件是否存在
if os.path.exists(zip_file_path):with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:# 获取 ZIP 文件中的文件列表file_list = zip_ref.namelist()# 选取第一个文件(或任意一个文件)作为样本来展示sample_file = file_list[0] if file_list else None# 如果找到样本文件,则读取并展示其内容if sample_file:# 提取样本文件到当前目录或其他指定目录zip_ref.extract(sample_file, './extract/')print(f"样本文件 '{sample_file}' 已提取。")else:print("ZIP 文件中没有找到任何文件。")
else:print(f"文件路径 '{zip_file_path}' 不存在。")
运行结果为
打开mhd文件,就是此图像的成像描述

🍃注意 ⚠️ ⚠️⚠️
文件关联问题:.mhd 文件应包含指向 .raw 文件的引用。也就是上图中的最后一行
一定确保 .mhd 文件中的路径指向 .raw 文件是正确的,并且 .raw 文件位于指定的位置。一定确保同时有 .mhd 和 .raw 文件。
🌳提取第一个raw
刚才的代码提取了第一个mhd文件,为了保证文件关联性,mhd 文件要指向 .raw 文件的引用。所以现在提取第一个raw文件,才能展示出图像。
上面代码这个改成1就好了

此代码的运行效果就是 提取到了mhd和raw到同一文件夹里面

🌲python读取raw
虽说图像信息保存在了raw里面,但其实读取的是mhd文件,mhd文件里面有raw文件的引用
读取代码如下
import zipfile
import os
import SimpleITK as sitk
import matplotlib.pyplot as plt
# 设置文件的路径
zip_file_path = 'F:\BaiduNetdiskDownload\promise12\\test_data.zip'
#
# 检查文件是否存在
if os.path.exists(zip_file_path):with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:# 获取 ZIP 文件中的文件列表file_list = zip_ref.namelist()# 选取第一个文件(或任意一个文件)作为样本来展示sample_file = file_list[1] if file_list else None# 如果找到样本文件,则读取并展示其内容if sample_file:# 提取样本文件到当前目录或其他指定目录image_file = './extract/' + sample_filezip_ref.extract(sample_file, './extract/')image = sitk.ReadImage('./extract/Case00.mhd')# 将 SimpleITK 图像转换为 NumPy 数组image_array = sitk.GetArrayFromImage(image)# 选择一个切片来展示slice_index = 0 # 你可以选择不同的切片索引selected_slice = image_array[slice_index]# 使用 matplotlib 展示图像切片plt.imshow(selected_slice, cmap='gray')plt.axis('off') # 不显示坐标轴plt.show()print(f"样本文件 '{sample_file}' 已提取。")else:print("ZIP 文件中没有找到任何文件。")
else:print(f"文件路径 '{zip_file_path}' 不存在。")
效果如下

🌱python读取分割切片结果
先用 Python 的 zipfile 模块来访问 ZIP 文件的代码把3,4切片的mhd和raw读取到extract文件夹里面
这个过程和第一个代码一样,就是改一下数字
import zipfile
import os
import SimpleITK as sitk
import matplotlib.pyplot as plt
# 设置文件的路径
zip_file_path = 'F:\BaiduNetdiskDownload\promise12\\test_data.zip'
#
# 检查文件是否存在
if os.path.exists(zip_file_path):with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:# 获取 ZIP 文件中的文件列表file_list = zip_ref.namelist()# 选取第一个文件(或任意一个文件)作为样本来展示sample_file = file_list[3] if file_list else None# 如果找到样本文件,则读取并展示其内容if sample_file:# 提取样本文件到当前目录或其他指定目录zip_ref.extract(sample_file, './extract/')# image = sitk.ReadImage('./extract/Case00_segmentation.mhd')# # 将 SimpleITK 图像转换为 NumPy 数组# image_array = sitk.GetArrayFromImage(image)# # 选择一个切片来展示# slice_index = 9 # 你可以选择不同的切片索引# selected_slice = image_array[slice_index]# # 使用 matplotlib 展示图像切片# plt.imshow(selected_slice, cmap='gray')# plt.axis('off') # 不显示坐标轴# plt.show()print(f"样本文件 '{sample_file}' 已提取。")else:print("ZIP 文件中没有找到任何文件。")
else:print(f"文件路径 '{zip_file_path}' 不存在。")
sample_file = file_list[3] if file_list else None这一行先改成2在改成3.
这样就能把3,4切片的mhd和raw读取到extract文件夹里面
之后运行下面的代码就能读取到分割结果的切片
import zipfile
import os
import SimpleITK as sitk
import matplotlib.pyplot as plt
# 设置文件的路径
zip_file_path = 'F:\BaiduNetdiskDownload\promise12\\test_data.zip'
#
# 检查文件是否存在
if os.path.exists(zip_file_path):with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:# 获取 ZIP 文件中的文件列表file_list = zip_ref.namelist()# 选取第一个文件(或任意一个文件)作为样本来展示sample_file = file_list[3] if file_list else None# 如果找到样本文件,则读取并展示其内容if sample_file:# 提取样本文件到当前目录或其他指定目录zip_ref.extract(sample_file, './extract/')image = sitk.ReadImage('./extract/Case00_segmentation.mhd')# 将 SimpleITK 图像转换为 NumPy 数组image_array = sitk.GetArrayFromImage(image)# 选择一个切片来展示slice_index = 9 # 你可以选择不同的切片索引selected_slice = image_array[slice_index]# 使用 matplotlib 展示图像切片plt.imshow(selected_slice, cmap='gray')plt.axis('off') # 不显示坐标轴plt.show()print(f"样本文件 '{sample_file}' 已提取。")else:print("ZIP 文件中没有找到任何文件。")
else:print(f"文件路径 '{zip_file_path}' 不存在。")

4️⃣python处理整个Promise12数据集
👍👍👍 以上我们完成的是使用python读取到了一张原图和一张分割结果的示例图👉👉👉以下我们要做的是使用python处理数据集把她分为网络接受的图片。这里处理成png
1. 数据集下载到本地之后先将zip解压
import zipfile
import os
import SimpleITK as sitk
import matplotlib.pyplot as plt
# 设置文件的路径
zip_file_path = 'F:\BaiduNetdiskDownload\promise12\\test_data.zip'
#
# 检查文件是否存在
if os.path.exists(zip_file_path):with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:# 获取 ZIP 文件中的文件列表file_list = zip_ref.namelist()# 选取第一个文件(或任意一个文件)作为样本来展示for i in file_list:zip_ref.extract(i, './extract/')

2. 处理解压之后的数据集,将raw转为png
import SimpleITK as sitk
import numpy as np
import imageio
import osdef convert_raw_to_png(raw_folder, output_folder):for file in os.listdir(raw_folder):if file.endswith(".mhd"):image_path = os.path.join(raw_folder, file)image = sitk.ReadImage(image_path)array = sitk.GetArrayFromImage(image)for i, slice in enumerate(array):slice_min = slice.min()slice_max = slice.max()slice_normalized = ((slice - slice_min) / (slice_max - slice_min) * 255).astype(np.uint8)file=os.path.splitext(file)[0]output_path = os.path.join(output_folder, f"{file}_{i}.png")imageio.imwrite(output_path, slice_normalized)raw_folder = "./extract"
output_folder = "./png_images"
os.makedirs(output_folder, exist_ok=True)
convert_raw_to_png(raw_folder, output_folder)

3. 将所有png图像分为image文件夹和label文件夹
此时的图像都是混在一起的,一个名字对应一个原图和分割结果,我们把它分开在两个文件夹,更有利于构建dataset和dataloader
先把png_images文件夹里面的segmentation全部复制到label文件夹里面
在将png_images文件里里面的segmentation删除
import shutil
import os
path="./png_images"
new_folder='./label'
os.makedirs(new_folder, exist_ok=True)
for i in os.listdir(path):if "segmentation" in i:ori_seg_path=os.path.join(path,i)seg_path=os.path.join(new_folder,i)# 复制文件shutil.copy2(ori_seg_path, seg_path)# 删除混在一起的os.remove(ori_seg_path)



5️⃣Promise12数据集官方给的评价指标
Dice相似系数 (Dice Similarity Coefficient, DSC): 常用评价指标,用于量化分割结果与真实标签之间的重叠度。Dice系数的值范围从0到1,值越高表示分割结果与真实情况的一致性越好。
-
敏感度 (Sensitivity)或真正率 (True Positive Rate, TPR): 衡量了分割算法正确识别出正类(即前列腺组织)的能力。 -
特异性 (Specificity)或真负率 (True Negative Rate, TNR): 评估了分割算法正确识别出负类(即非前列腺组织)的能力。 -
Hausdorff距离 (Hausdorff Distance): 这是一个几何度量,用于衡量预测边界与真实边界之间的最大不一致性。 -
平均表面距离 (Average Surface Distance, ASD): 用于计算预测边界与真实边界之间的平均距离,也是一个评估分割精度的重要指标。 -
体积重叠误差 (Volume Overlap Error, VOE):评估分割体积与真实体积之间的重叠程度。

相关文章:
【Promise12数据集】Promise12数据集介绍和预处理
【Segment Anything Model】做分割的专栏链接,欢迎来学习。 【博主微信】cvxiayixiao 本专栏为公开数据集的介绍和预处理,持续更新中。 要是只想把Promise12数据集的raw形式分割为png形式,快速导航,直接看2,4标题即可 …...
Qt设置整体背景颜色
this->setStyleSheet("border:none;background-color:white");...
Stream流常见操作
.stream() 常用方法 .forEach() 该方法接收一个 Consumer 接口函数,会将每一个流元素交给该函数进行处理 .filter():过滤 该接口接收一个 Predicate 函数式接口参数(可以是一个Lambda或方法引用)作为筛…...
INFINI Labs 产品更新 | 发布 Easysearch Java 客户端,Console 支持 SQL 查询等功能
近年来,日志管理平台越来越流行。使用日志管理平台可以实时地、统一地、方便地管理和查看日志,挖掘日志数据价值,驱动运维、运营,提升服务管理效率。 方案架构 Beats 是轻量级采集器,包括 Filebeat、Metricbeat 等。E…...
前端调试只会console.log()?
前言 相信大家在日常开发中调试代码是必不可少的步骤,毕竟谁也不能保证代码不出问题,总得debug一下,输出信息看看数据有没有问题。是不是习惯性console.log(‘XXX’)或者debugger呢。而JavaScript中的console对象提供了丰富的方法用于更灵活…...
CentOS Linux release 7.9.2009 (Core)中安装配置Tomcat
一、安装JDK 部分内容可以参考我这篇文章:Windows11与CentOS7下配置与检测JDK与Maven环境变量 中的 2.2 安装jdk-8u371-linux-x64.tar.gz和配置环境变量/etc/profile //1、安装redhat-lsb yum install -y redhat-lsb//2、查看系统版本信息 lsb_release -a //3、查…...
移动机器人路径规划(四)--- 考虑机器人模型下的运动规划KINODYNAMIC PATHFINDING
目录 1 动力学概念简介 2 State Lattice Planning 3 Boundary Value Problem 4 混合A*算法 Hybrid A* 5 Kinodynamic RRT* 1 动力学概念简介 一种生成机器人的运动同时受限制于运动学的约束(避障)以及动力学的约束(在速度加速度力的约束…...
服务器数据恢复—VMware虚拟化下误操作导致服务器崩溃的数据恢复案例
服务器故障&分析: VMware虚拟化,vmfs文件系统,共3块磁盘。工作人员误操作将VMware虚拟化重装系统,服务器崩溃。 正常情况下,重装系统会导致文件系统元文件被覆盖。要恢复数据须找到重装系统前的文件系统残留信息并…...
微服务实战系列之Gateway
前言 人类世界自工业革命以来,无论从金融、货币、制度,还是科技、资源、社会各个方面,都发生了翻天覆地的变化。物质极大丰富,从而也推动了科技的极速发展。当计算机问世也仅仅不到80年,而如今我们的生活处处有它的影子…...
GZ038 物联网应用开发赛题第10套
2023年全国职业院校技能大赛 高职组 物联网应用开发 任 务 书 (第10套卷) 工位号:______________ 第一部分 竞赛须知 一、竞赛要求 1、正确使用工具,操作安全规范; 2、竞赛过程中如有异议,可向现场考…...
重生之我是一名程序员 35
哈喽啊大家晚上好!今天给大家带来的知识很简单啊,所以今天呢给大家带来的是C语言中的另一个库函数——strlen。 首先,让我先给大家介绍一下它,strlen函数是C语言中的一个字符串处理函数,它用于计算一个字符串的长度&a…...
计算机毕业设计选题推荐-点餐微信小程序/安卓APP-项目实战
✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...
分享禁止Win10更新的两种方法
深恶痛绝 Windows更新简直就是毒瘤,总是在某些不需要的时候提示更新,而且关闭服务后总有办法重启。老是关不掉。 如果每次都是正常更新,好像也没啥所谓,但是总有那么一两次会蓝屏、黑屏、开不了机…… 52出品 下面是吾爱社区找…...
SPASS-回归分析
回归分析概述 确定性关系与非确定性关系 变量与变量之间的关系分为确定性关系和非确定性关系,函数表达确定性关系。研究变量间的非确定性关系,构造变量间经验公式的数理统计方法称为回归分析。 回归分析基本概念 回归分析是指通过提供变量之间的数学表达式来定量描述变量间…...
【使用vscode在线web搭建开发环境--code-server搭建】
官方版本下载 https://github.com/coder/code-server/releases?q4.0.0&expandedtrue使用大于版本3.8.0,因为旧版本有插件市场不能访问的情况版本太高需要更新环境依赖 拉取安装包 []# wget "https://github.com/coder/code-server/releases/download/v4.0.0/code-…...
c++ list容器使用详解
list容器概念 list是一个双向链表容器,可高效地进行插入删除元素。 List 特点: list不可以随机存取元素,所以不支持at.(position)函数与[]操作符。可以对其迭代器执行,但是不能这样操作迭代器:it3使用时包含 #includ…...
【案例】可视化大屏
人狠话不多,直接上效果图 这里放的地图自己去实现吧,如果也想实现3D地球话,等笔者那天有心情写篇文章; 说明:script中methods部分代码是没用,可以直接删掉,根据个人情况去写, 内容:笔者也就对页面布局进行了设计,内容的填充就靠个人了 <template><div :sty…...
js制作动态表单
JS制作动态表单,可以通过以下步骤实现: HTML布局:在HTML中创建一个表单元素,并设置一个ID属性。 <form id"myForm"><label for"name">姓名:</label><input type"text…...
解决Kibana初始化失败报错: Unable to connect to Elasticsearch
现象: 原因: docker run生成容器的时候,指定elastic server时指向了localhost 为什么不能是localhost, 因为这个localhost指向的是容器本身的网络,而elastic用的是物理网络,两个网络是隔离的,所以如果kiba…...
流媒体服务器
市面上优秀的流媒体服务器解决方案有很多,比如SRS,Red5,EasyDarwin,nginx-rtmp,live555,mediasoup等等。 这些服务器框架各有优缺点,没有一款完美的流媒体服务器解决方案,在流媒体选…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...
命令行关闭Windows防火墙
命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)方法二:CMD命令…...
