【Synapse数据集】Synapse数据集介绍和预处理,数据集下载网盘链接

news2024/11/26 21:50:52

【Segment Anything Model】做分割的专栏链接,欢迎来学习。
【博主微信】cvxiaoyixiao
本专栏为公开数据集的介绍和预处理,持续更新中。

文章目录

  • 1️⃣Synapse数据集介绍
    • 文件结构
    • 源文件样图
    • 文件内容
  • 2️⃣Synapse数据集百度网盘下载链接
    • 官网下载
    • 登录
    • 下载
    • 没有加速器的从百度网盘下载 永久有效💮 💯
  • 3️⃣Synapse数据集预处理目标
    • 改变Synapse数据集类别
    • 将官方Synapse数据集的Training 文件分切片转为npz保存。
    • 将官方Synapse数据集的Training的部分文件处理为hy文件格式保存
  • 4️⃣代码
    • 文件目录
    • 代码

1️⃣Synapse数据集介绍

文件结构

在这里插入图片描述
官网分为train和test train有83例患者nii原图和label。test有72名患者nii原图,没有label

源文件样图

在这里插入图片描述
在这里插入图片描述

文件内容

Synapse数据集由13个腹部器官由两名经验丰富的本科生手动标记,并由放射科医生使用MIPAV软件在体积基础上进行验证,包括:

1) 脾脏
(2) 右肾
(3) 左肾
(4) 胆囊
(5) 食道
(6) 肝
(7) 胃
(8) 主动脉
(9) 下腔静脉
(10) 门静脉和脾静脉
(11) 胰腺
(12) 右肾上腺
(13) 左肾上腺

在勾画的GT图像中,像素大小代表类别,并和上面对应,比如 像素为2的地方代表是右肾。
⚠️⚠️⚠️有些患者可能没有(2)右肾或(4)胆囊,因此没有标记。

2️⃣Synapse数据集百度网盘下载链接

官网下载

官网链接
打开点击Files 不要直接点击Download Options❌ 要点击下面三个文件,选择要下载的东西。需要登录谷歌账号和借助加速器。

在这里插入图片描述
在这里插入图片描述

登录

登录进来是这样子的,这个时候在点击Download Options,之后点击Add
在这里插入图片描述

下载

点击左侧栏目的下载箭头,点击download,输入名字,点击Download Package
在这里插入图片描述

没有加速器的从百度网盘下载 永久有效💮 💯

链接: https://pan.baidu.com/s/1jJm7tbiDMOA8S331QFu8CQ?pwd=bw5i 提取码:bw5i
–来自百度网盘超级会员V6的分享

3️⃣Synapse数据集预处理目标

改变Synapse数据集类别

官方是:

1) 脾脏
(2) 右肾
(3) 左肾
(4) 胆囊
(5) 食道
(6) 肝
(7) 胃
(8) 主动脉
(9) 下腔静脉
(10) 门静脉和脾静脉
(11) 胰腺
(12) 右肾上腺
(13) 左肾上腺

改变为:

1:脾脏
2:右肾
3:左肾
4:胆囊
5:肝脏
6:7:主动脉
8:胰腺

对应关系也就是:

hashmap = {1:1, 2:2, 3:3, 4:4, 5:0, 6:5, 7:6, 8:7, 9:0, 10:0, 11:8, 12:0, 13:0}

将官方Synapse数据集的Training 文件分切片转为npz保存。

每个npz包含一个切片img和对应的label,文件名字以样本名称和切片id命名
比如第一个样本叫case0005,保存其第2个切片,那么最好的npz名称为case0005_slice002.npz
作为训练集的输入。

将官方Synapse数据集的Training的部分文件处理为hy文件格式保存

每个h5文件包含一个切片img和对应的label,并且以样本名称和切片id命名

4️⃣代码

文件目录

在这里插入图片描述
自己划分Training文件到自己的测试集和训练集,因为官网的测试集没有label。

代码

import os
from glob import glob
import h5py
import nibabel as nib
import numpy as np
from tqdm import tqdm

# 自己手动选择的测试样本
test_data = [1, 2, 3, 4, 8, 22, 25, 29, 32, 35, 36, 38]
# 源数据集类别和我们规定的类别对应关系
hashmap = {1:1, 2:2, 3:3, 4:4, 5:0, 6:5, 7:6, 8:7, 9:0, 10:0, 11:8, 12:0, 13:0}

use_normalize=True
# 文件夹路径,保存处理之后的npz文件
dst_path="./pre_over_dataset"
def preprocess_train_image(image_files: str, label_files: str) -> None:
    # 创建一个文件夹,保存处理之后的npz文件
    os.makedirs(f"{dst_path}/train_npz", exist_ok=True)

    a_min, a_max = -125, 275
    b_min, b_max = 0.0, 1.0
    print(len(image_files))

    pbar = tqdm(zip(image_files, label_files), total=len(image_files))
    for image_file, label_file in pbar:
        # **/imgXXXX.nii.gz -> parse XXXX
        number = image_file.split('/')[-1][3:10]

        if int(number) in test_data:
            continue

        image_data = nib.load(image_file).get_fdata()
        label_data = nib.load(label_file).get_fdata()

        image_data = image_data.astype(np.float32)
        label_data = label_data.astype(np.float32)
        # 除去像素中在最大值和最小值之外的。
        # 如果某个像素小于最小值则替换成最小值,如果某个像素大于最大值,则替换成最大值
        image_data = np.clip(image_data, a_min, a_max)
        # 是否进行归一化
        if use_normalize:
            assert a_max != a_min
            image_data = (image_data - a_min) / (a_max - a_min)

        H, W, D = image_data.shape
        # 通道最先
        image_data = np.transpose(image_data, (2, 1, 0))  # [D, W, H]
        label_data = np.transpose(label_data, (2, 1, 0))

        counter = 1
        # 遍历哈希表,将元数据分类对应我们规定的新分类。
        for k in sorted(hashmap.keys()):
            assert counter == k
            counter += 1
            # 并更改对应位置像素值,到新的分类
            label_data[label_data == k] = hashmap[k]
        # 按照deep分切片保存
        for dep in range(D):
            save_path = f"{dst_path}/train_npz/case{number}_slice{dep:03d}.npz"
            # 保存成npz,里面是label和image
            np.savez(save_path, label=label_data[dep,:,:], image=image_data[dep,:,:])
    pbar.close()


def preprocess_valid_image(image_files: str, label_files: str) -> None:
    os.makedirs(f"{dst_path}/test_vol_h5", exist_ok=True)
#我们规定的最大最小像素。可以改
    a_min, a_max = -125, 275
    b_min, b_max = 0.0, 1.0

    pbar = tqdm(zip(image_files, label_files), total=len(image_files))
    for image_file, label_file in pbar:
        # **/imgXXXX.nii.gz -> parse XXXX
        number = image_file.split('/')[-1][3:7]

        if int(number) not in test_data:
            continue

        image_data = nib.load(image_file).get_fdata()
        label_data = nib.load(label_file).get_fdata()

        image_data = image_data.astype(np.float32)
        label_data = label_data.astype(np.float32)

        image_data = np.clip(image_data, a_min, a_max)
        if use_normalize:
            assert a_max != a_min
            image_data = (image_data - a_min) / (a_max - a_min)

        H, W, D = image_data.shape

        image_data = np.transpose(image_data, (2, 1, 0))
        label_data = np.transpose(label_data, (2, 1, 0))

        counter = 1
        for k in sorted(hashmap.keys()):
            assert counter == k
            counter += 1
            label_data[label_data == k] = hashmap[k]

        save_path = f"{dst_path}/test_vol_h5/case{number}.npy.h5"
        f = h5py.File(save_path, 'w')
        f['image'] = image_data
        f['label'] = label_data
        f.close()
    pbar.close()


if __name__ == "__main__":
    # 根目录,到Training文件夹就行
    data_root = "./Training"

    # 获取所有训练测试文件
    image_files = sorted(glob(f"{data_root}/img/*.nii.gz"))
    label_files = sorted(glob(f"{data_root}/label/*.nii.gz"))
    # 传入预处理函数,这个是转为npz的
    preprocess_train_image(image_files, label_files)
    # 这个是转为h5的
    preprocess_valid_image(image_files, label_files)

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

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

相关文章

RocketMQ —消费进度管理

Apache RocketMQ 通过消费位点管理消费进度,本文为您介绍 Apache RocketMQ 的消费进度管理机制。 背景信息​ Apache RocketMQ 的生产者和消费者在进行消息收发时,必然会涉及以下场景,消息先生产后订阅或先订阅后生产。这两种场景下&#x…

【springboot3.x 记录】关于spring-cloud-gateway引入openfeign导致的循环依赖问题

最近升级springboot3真是一挖一个坑,又给我发现了 spring-cloud-gateway 引入 openfeign 会导致循环依赖异常,特此记录一下这个坑 一、发现问题 网关里面有一个全局的过滤器,因为要查询一些配置信息,目前是通过 feign client 的方…

中秋《乡村振兴战略下传统村落文化旅游设计》许少辉八月新书——2023学生思乡季辉少许

中秋《乡村振兴战略下传统村落文化旅游设计》许少辉八月新书——2023学生思乡季辉少许 中秋《乡村振兴战略下传统村落文化旅游设计》许少辉八月新书——2023学生思乡季辉少许

【C++ • STL】探究string的源码

文章目录 一、深浅拷贝二、传统版写法的string类(简单)三、string类的模拟实现四、现代版写法的string类五、总结 ヾ(๑╹◡╹)ノ" 人总要为过去的懒惰而付出代价ヾ(๑╹◡╹)ノ" 一、深浅拷贝 浅拷贝:也称位…

数据结构与算法之HashBitMap

一:引入 1.Hash扩容算法在多线程情况有什么问题? 2.如何在3亿个整数(0~2亿)中判断某一个数是否存在?内存限制500M,一台机器。 分治: 布隆过滤器:神器 Redis Hash: 开3亿个空间&#…

[Go 夜读 第 148 期] Excelize 构建 WebAssembly 版本跨语言支持实践

Excelize 是 Go 语言编写的用于操作电子表格文档的基础库,支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式,高度兼容带有样式、图片 (表)、透视表、切片器等复杂组件的文档,并提供流式读写支持,用于处理包含大规模数据的工…

【项目管理】--敏捷开发管理之Scrum

目录 一、前言二、what---敏捷开发是什么2.1、敏捷开发宣言2.2、敏捷开发原则2.3、一句话概述敏捷开发三、why---为什么会有敏捷开发3.1、传统开发模式和敏捷开发模式对比四、how---敏捷开发怎么实践到项目团队4.1、what---Scrum是什么4.2、what---Scrum有哪些内容(1)、Scrum之…

【C语言练习】DOS黑框框通讯录(使用结构体、动态内存管理联系人信息,函数指针等)

文章目录 1. contacts.h 头文件、函数/常量/结构体声明2. test.c 主界面菜单打印、菜单功能选项选择3. contacts.c 函数实现4. 使用结构体、动态内存&#xff0c;函数指针实现时的注意点5. 运行演示 1. contacts.h 头文件、函数/常量/结构体声明 #pragma once#include <std…

浏览器原生JavaScript离线文字转语音TTS播放,支持Windows自带TTS语音和移动端(安卓、IOS)

前言 JS已经可以实现语音合成(文字转语音)和语音识别(语音转文字),各个浏览器支持列表如下所示: 语音识别支持列表: 因此,浏览器上面使用语音合成非常简单。 页面效果示例: 实现功能 1、支持速度,音调设置 2、支持下拉选择语音模板 3、文字转语音 代码实现 …

自学视觉SLAM(1)

引言 小编研究生的研究方向是视觉SLAM&#xff0c;目前在自学&#xff0c;已经学了Linux系统的基本操作&#xff0c;vim编辑器以及高翔老师的一些视屏。本篇文章为初学笔记。 文章目录 引言1 熟悉 Linux1.1 如何在 Ubuntu 中安装软件&#xff08;命令⾏界⾯&#xff09;&#x…

算法竞赛备赛之动态规划训练提升,DP基础掌握

1.背包问题 1.1.01背包问题 01背包问题是在M件物品中选择若干件放在空间为W的背包中&#xff0c;每件物品的体积为W1&#xff0c;W2至Wn&#xff0c;价值为P1&#xff0c;P2至Pn&#xff0c;01背包的约束条件是给定几种物品&#xff0c;每种物品有且只有一个&#xff0c;并且…

(4) OpenCV图像处理kNN近邻算法-识别数字0和1

我们的目标是构建一个可以读取手写数字的应用程序。为此,我们需要创建一个手写数字的图片文件 “ digits.png ”,图像的像素为:( 320*40 ), 其中包含 32个手写数字(每个数字16个),每个数字都是20x20的图像,如下图。 因此,我们的第 1 步是将图像分割成 32 个不…

华为OD机试 - 第k个排列 - 全排列递归(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

C语言刷题篇(备赛中......)--------( 篇章1 )

前言: 博主报名了一个小比赛&#xff0c;用来写一些基础的C语言题目&#xff0c;正好借此巩固一下基础 希望这些题对你们也有帮助 猫猫跟你说:该学习了 目录 前言: 题目&#xff08; 1 &#xff09; 解题思路 题目&#xff08; 2 &#xff09; 解题思路 题目&#xff…

Linux虚拟机磁盘空间不足怎么办

我是一个目录 1. 在虚拟机客户端扩充磁盘空间2. 检查磁盘空间3. 扩展空间而无需重启虚拟机4. 创建新磁盘分区5. 创建物理卷6. 扩展逻辑卷 对大多数系统管理员来说&#xff0c;扩充 Linux 服务器的磁盘空间是日常的工作之一&#xff0c;下面会通过使用 Linux 命令&#xff0c;在…

Text-to-SQL小白入门(七)PanGu-Coder2论文——RRTF

论文概述 学习这个RRTF之前&#xff0c;可以先学习一下RLHF。 顺带一提&#xff1a;eosphoros-ai组织「DB-GPT开发者」最新有个新项目Awesome-Text2SQL&#xff1a;GitHub - eosphoros-ai/Awesome-Text2SQL: Curated tutorials and resources for Large Language Models, Text2…

ps 去除图标背景色

百度安全验证 https://baijiahao.baidu.com/s?id1766678909759797922&wfrspider&forpc 使用魔术橡皮擦工具&#xff0c;超级简单 最后&#xff0c;保存为PNG格式&#xff0c;因为PNG格式支持透明背景。

大二毕设.3-网盘系统-文件模块讲解

目录 模块功能介绍 抽象文件存储引擎顶级接口 高性能单文件上传-sendfile零拷贝 为什么要分片上传 文件存储引擎模块讲解 文件模块具体实现讲解 项目演示博客 模块功能介绍 文件列表查询 聚簇索引和非聚簇索引回表查询最左前缀原则覆盖索引创建文件夹文件重命名文件删除 …

jvs-rules(规则引擎)和jvs智能bi(自助式数据分析)9.22更新内容

规则引擎更新功能 新增: 1.新增节点匹配筛选 用于做多个条件的数据筛选&#xff0c;以便将符合条件的数据传递给下一个节点进行处理&#xff0c;通常用于实现复杂的查询逻辑。 2.复合变量节点新增判断条件选项说明 用户可以根据自己的需求&#xff0c;为复合变量节点添加不…

全球化、国际化、本地化和翻译:GILT 的方法

为促进公司走向全球市场&#xff0c;您需要与客户沟通&#xff0c;并成功传达您的信息。您可能会认为&#xff0c;您需要的只是一支强大的翻译团队。但是&#xff0c;翻译并不像看起来那么简单。 将公司信息翻译成另一种语言&#xff0c;需要了解一些细微差别和文化背景。要想在…