python版:使用TotalSegmentator工具可在1分钟内自动分割全身117个器官,附批量技巧

TotalSegmentator用于对 CT 图像中超过 117 个类别进行分割的工具。它接受了各种不同 CT 图像(不同扫描仪、机构、协议等)的训练,因此应该适用于大多数图像。大部分训练数据集可以从Zenodo下载(1228 个主题)。您还可以在totalsegmentator.com上在线试用该工具。

TotalSegmentator v2版本

一句话概要:TotalSegmentator是在大型数据集上使用nnUNet V2训练的一个AI模型,可以在CT数据上自动分割全身117个器官(见文末)!同时还可以分割部分血管,脑出血,胸腔积液等(后面会介绍)。

文章目录

    • Totalsegmentator 版本
    • Totalsegmentator python版安装
      • 如何安装
    • Totalsegmentator 快速使用
    • Totalsegmentator 高级使用
      • 1. 除了上述器官分割外,还可以分割下面的一些子任务
      • 2. 分割单一器官或几个器官
      • 3.预览分割结果
      • 4.所有器官分割结果存在一个文件里面
      • 5.批量处理所有图像
      • 6. 在python中运行totalsegmentator
    • Totalsegmentator可以分割哪些器官

Totalsegmentator 版本

一共有两个版本,各有千秋,选择适合自己的版本

  • 3D Slicer版本: 之前已经介绍过了,并且获得了广大朋友的喜欢。也是迄今为止Tina姐最受欢迎的教程。它的优势是提供了可视化的界面,自动分割完后,可以对结果进行实时修改。缺点是可调参数比python版少,只能one by one, 没法批量操作。且受网速影响,有的朋友在3D Slicer中并不能顺畅使用。

【公-众-号查看】

  • python版本: 它的特点是一次安装好后,即可在终端使用少量命令进行批处理。也可以设置想要的分割哪些器官,不用全部分割。对编程能力有一定要求,且分割完的结果需要手动审阅修改。

接下来是 python 版本实战

Totalsegmentator python版安装

如何安装

TotalSegmentator 可在 Ubuntu、Mac 和 Windows 以及 CPU 和 GPU 上运行。由于它是个AI模型,最好是在GPU上安装,CPU上只有快速版本,分割又慢效果也差些

首先确保有如下依赖项:

  • Python >= 3.9
  • Pytorch >= 1.12.1

直接在终端(选择合适的虚拟环境)pip

pip install TotalSegmentator

Totalsegmentator 快速使用

使用TotalSegmentator -h 查看使用说明

快速分割一幅图像

TotalSegmentator -i ct.nii.gz -o segmentations`
  • i: input image, 待分割的图像地址
  • o: output image, 分割结果文件夹,不同的分割目标生成不同的文件

注意:允许将包含一名患者的所有 DICOM 切片的 Nifti 文件或文件夹作为输入

注意:如果您在CPU 上运行,请使用该选项--fast--roi_subset来大大提高运行时间。

从交互界面可以看到,当你第一次调用TotalSegmentator,它会先下载预训练好的模型。这需要一定的时间(取决于你的网络)。第二次使用就不会再下载了。整个分割过程不到1分钟。

第二次分割,仅用28秒完成104个器官的分割

这里自动分割结果按照不同器官进行存储。像我这样安装的是V1版本,因此仅分割了104个器官,就有104个分割文件。如图

将原始图像和你的目标器官加载进ITK-SNAP或者3D slicer等标注软件就可以进行手动修改。大大减少标注时间,提升标注效率

Totalsegmentator 高级使用

1. 除了上述器官分割外,还可以分割下面的一些子任务

通过在命令中增加-ta参数即可:

TotalSegmentator -i ct.nii.gz -o segmentations -ta <task_name>

ta可以为如下值

  • total - 分割上述所有器官
  • lung_vessels - 肺血管
  • cerebral_bleed - 脑出血
  • hip_implant - 髋关节植入物
  • coronary_arteries - 冠状动脉
  • body - 身体
  • pleural_pericard_effusion - 胸膜心包积液
  • liver_vessels - 肝血管
  • bones_extremities - 骨骼四肢
  • tissue_types - 组织类型
  • heartchambers_highres - 心腔高分辨率
  • head - 头部
  • aortic_branches - 主动脉分支
  • heartchambers_test - 心腔测试
  • bones_tissue_test - 骨骼组织测试
  • aortic_branches_test - 主动脉分支测试
  • test - 测试

2. 分割单一器官或几个器官

在快速使用案例中,会自动分割所有器官,但实际应用中,我们可能只对其中的一个或几个器官感兴趣。分割太多耗时长,还占内存。这时候怎么处理?

只需要在命令后添加 -rs参数

TotalSegmentator -i CT1202301051207_ZHOU_JUN/P_to_V.nii.gz -o CT1202301051207_ZHOU_JUN -rs liver

上述命令表示只分割肝脏,如需多个就括起来 [licer kindey_left pancreas]中间用个空格分开

当我只分割肝脏时,分割时间从原来的28秒降到3秒

3.预览分割结果

通过生成所有类的 3D 渲染,让您快速了解分割是否有效以及失败的位置。只需要添加--preview参数

TotalSegmentator -i CT1202301051207_ZHOU_JUN/P_to_V.nii.gz -o CT1202301051207_ZHOU_JUN/P_to_V_liver --preview 

上述命令如果报错OSError: Can not find Xvfb. Please install it and try again
通过下面命令进行安装sudo apt-get install xvfb

讲真,我安装有问题,没解决(如上图)。其实我蛮需要这个功能的,为了解决这个功能,我把电脑都搞崩了,最后重装了驱动。有大佬解决滴滴我一下,TQ。

虽然没直接解决,我绕弯解决了。

如果环境有问题,我们可以直接用官方的docker。当然,前提是安装好了

docker run --gpus 'device=0' --ipc=host -v /absolute/path/to/my/data/directory:/tmp wasserth/totalsegmentator:2.0.0 TotalSegmentator -i /tmp/ct.nii.gz -o /tmp/segmentations

4.所有器官分割结果存在一个文件里面

我们之前的结果都是一个器官一个文件,想合并在同一个nii.gz文件,怎么办?

只需要添加--ml参数,这将保存一个包含所有标签的 nifti 文件,而不是为每个类保存一个文件。在保存 nifti 文件期间节省运行时间

TotalSegmentator -i CT1202301051207_ZHOU_JUN/P_to_V.nii.gz -o CT1202301051207_ZHOU_JUN/P_to_V_seg  --ml 

其他

  • –statistics:这将生成一个statistics.json包含体积(以 mm³ 为单位)和每个类别的平均强度的文件。
  • –radiomics:这将生成一个statistics_radiomics.json包含每个类别的放射组学特征的文件。您必须安装 Pyradiomics 才能使用此功能 ( pip install pyradiomics)。

5.批量处理所有图像

以上的功能都仅是针对单个病人进行处理。显然在深度学习中,我们需要勾画几百上千个病人,如何对这些病人进行批量处理变得非常重要。这可不是官方提供的,Tina姐独家配方!!

假设你的数据在train–>patient–>p_to_v.nii.gz.这里有多个patient文件夹。需要对每个文件夹下的p_to_v.nii.gz进行分割。使用循环即可

for i in `ls`; do cd $i; TotalSegmentator -i P_to_V.nii.gz -o ./  --preview; cd ..; done

注意:仅针对LINUX系统,并且熟悉shell的同学。不然你直接复制我的命令可能得不到你想要的结果。

6. 在python中运行totalsegmentator

如果你不习惯用终端操作。你也可以在python中调用totalsegmentator

import nibabel as nib
from totalsegmentator.python_api import totalsegmentator

if __name__ == "__main__":
    # option 1: provide input and output as file paths
    totalsegmentator(input_path, output_path)

    # option 2: provide input and output as nifti image objects
    input_img = nib.load(input_path)
    output_img = totalsegmentator(input_img)
    nib.save(output_img, output_path)

Totalsegmentator可以分割哪些器官

  • spleen(脾),kidney_right(右肾),kidney_left(左肾),
  • gallbladder(胆囊),liver(肝),stomach(胃),
  • pancreas(胰腺),adrenal_gland_right(右肾上腺),
  • adrenal_gland_left(左肾上腺),lung_upper_lobe_left(左肺上叶),
  • lung_lower_lobe_left(左肺下叶),lung_upper_lobe_right(右肺上叶),
  • lung_middle_lobe_right(右肺中叶),lung_lower_lobe_right(右肺下叶),
  • esophagus(食管),trachea(气管),
  • thyroid_gland(甲状腺),small_bowel(小肠),
  • duodenum(十二指肠), colon(结肠),
  • urinary_bladder(膀胱),prostate(前列腺),
  • kidney_cyst_left(左肾囊肿),kidney_cyst_right(右肾囊肿),
  • sacrum(骶骨),vertebraeC1-S1(椎体,颈1椎体为C1类,胸1椎体为T1类,腰1椎体为L1类,依次类推),
  • heart(心脏),aorta(主动脉),
  • pulmonary_vein(肺静脉),brachiocephalic_trunk(颈总动脉干),
  • subclavian_artery_right(右锁骨下动脉),subclavian_artery_left(左锁骨下动脉),
  • common_carotid_artery_right(右颈总动脉),common_carotid_artery_left(左颈总动脉),
  • brachiocephalic_vein_left(左肱头静脉),brachiocephalic_vein_right(右肱头静脉),
  • atrial_appendage_left(左心房附属物),
  • superior_vena_cava(上腔静脉),inferior_vena_cava(下腔静脉),
  • portal_vein_and_splenic_vein(门静脉和脾静脉),
  • iliac_artery_left(左髂动脉),iliac_artery_right(右髂动脉),
  • iliac_vena_left(左髂静脉),iliac_vena_right(右髂静脉),
  • humerus_left(左肱骨),humerus_right(右肱骨),
  • scapula_left(左肩胛骨),scapula_right(右肩胛骨),
  • clavicula_left(左锁骨),clavicula_right(右锁骨),
  • femur_left(左股骨),femur_right(右股骨),
  • hip_left(左髋),hip_right(右髋),
  • spinal_cord(脊髓),
  • gluteus_maximus_left(左臀大肌),gluteus_maximus_right(右臀大肌),
  • gluteus_medius_left(左臀中肌),gluteus_medius_right(右臀中肌),
  • gluteus_minimus_left(左臀小肌),gluteus_minimus_right(右臀小肌),
  • autochthon_left(左本位肌),autochthon_right(右本位肌),
  • iliopsoas_left(左髂腰肌),iliopsoas_right(右髂腰肌),
  • brain(大脑),skull(头骨),
  • rib_left_1-12(左肋骨1-12),rib_right_1-12(右肋骨1-12)
  • sternum(胸骨),costal_cartilages(肋软骨)

文章持续更新,可以关注微公【医学图像人工智能实战营】获取最新动态,一个关注于医学图像处理领域前沿科技的号。坚持以实践为主,手把手带你做项目,打比赛,写论文。凡原创文章皆提供理论讲解,实验代码,实验数据。只有实践才能成长的更快,关注我们,一起学习进步~

我是Tina, 我们下篇博客见~

白天工作晚上写文,呕心沥血

觉得写的不错的话最后,求点赞,评论,收藏。或者一键三连

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

由浅到深认识Java语言(7):方法(函数)

该文章Github地址&#xff1a;https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…

ZYNQ EMIO MIO

1 概述 先来了解GPIO的BANK分布&#xff0c;在UG585文档GPIO一章中可以看到GPIO是有4个BANK&#xff0c; 注意与MIO的BANK区分。 BANK0 控制32个信号&#xff0c;BANK1控制22个信号&#xff0c;总共是MIO的54个引脚&#xff0c;也就是诸如 SPI,I2C,USB,SD 等 PS 端外设接口&am…

【二进制求公约数】【数学】【数论】2543. 判断一个点是否可以到达

本文涉及知识点 二进制求公约数 LeetCode2543. 判断一个点是否可以到达 给你一个无穷大的网格图。一开始你在 (1, 1) &#xff0c;你需要通过有限步移动到达点 (targetX, targetY) 。 每一步 &#xff0c;你可以从点 (x, y) 移动到以下点之一&#xff1a; (x, y - x) (x - y…

基于python+vue灾害应急救援平台flask-django-php-nodejs

灾害应急救援平台的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品&#xff0c;体验高科技时代带给人们的方便&#xff0c;同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓&#xff0c;iOS相比较起来&#xff0c;…

(二)RabbitMQ实战——rabbitmq高可用集群搭建

前言 本节内容是关于rabbitmq高可用集群的部署搭建&#xff0c;使用的是centos7系统&#xff0c;我们准备三台服务器作为rabbitmq的高可用服务器&#xff0c;rabbitmq集群本身不是天然支持高可用的&#xff0c;我们通过配置rabbitmq服务器的镜像队列&#xff0c;以确保消息可以…

突然发现!原来微信批量自动加好友这么简单!

你知道如何更好地管理和利用微信资源&#xff0c;实现客户拓展和沟通吗&#xff1f;下面就教大家一招&#xff0c;帮助大家实现统一管理多个微信号以及批量自动加好友。 想要统一管理多个微信号&#xff0c;不妨试试微信管理系统&#xff0c;不仅可以多个微信号同时登录&#…

无插件网页视频播放器,支持图像绘制(包含方格子、方框等),支持音视频播放、支持录像截图,提供源码下载

前言 本播放器内部采用jessibuca插件接口&#xff0c;支持录像、截图、音视频播放等功能。播放器播放基于ws流&#xff0c;图像绘制操作&#xff1a;1&#xff09;支持绘制方格子&#xff0c;用于监控移动检测画框&#xff1b;2&#xff09;支持绘制不透明方框&#xff0c;用于…

如何进行设备的非对称性能测试

非对称性能测试介绍 RFC2544是RFC组织提出的用于评测网络互联设备&#xff08;防火墙、IDS、Switch等&#xff09;的国际标准。主要是对RFC1242中定义的性能评测参数的具体测试方法、结果的提交形式作了较详细的规定。标准中定义了4个重要的参数&#xff1a;吞吐量&#xff08…

【No.12】蓝桥杯可撤销并查集|查找|合并|撤销(C++)

前置知识 蓝桥杯并查集|路径压缩|合并优化|按秩合并|合根植物(C)-CSDN博客 可撤销并查集 关键注意 可撤销并查集的撤销功能如何实现可撤销并查集能不能用路径压缩 可撤销并查集(Reversible Union-Find)是一种扩展了标准并查集(Union-Find)数据结构的数据结构&#xff0c;它允…

Python螺旋折线蓝桥杯(来源lanqiao.cn 题目176) 时间超限

题目描述 如图所示的螺旋折线经过平面上所有整点恰好一次。 对于整点(X, Y)&#xff0c;我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度。 例如dis(0, 1)3, dis(-2, -1)9 给出整点坐标(X, Y)&#xff0c;你能计算出dis(X, Y)吗&#xff1f; 输入格式 …

【Unity】层(Layer)详解

1.什么是Layer? 我们在做游戏开发的时候&#xff0c;尤其是场景比较复杂的时候&#xff0c;我们就需要使用Layer来分类。 比如&#xff1a; 排除不被灯光照亮的Layer 射线检测特定的 Layer 摄像机只能看到某些 Layer 对象之间的碰撞检测 Layer … 2.添加Layer ①在Inspecto…

GZ083 产品艺术设计赛题第十

全国职业院校技能大赛 产品艺术设计赛项赛题十 赛项名称 产品艺术设计 英语名称 Product Art Design 赛项编号 GZ083 归属产业 数字产业 任务名称 “绣羽鸣春”鸟形象主题文具收纳袋设计 赛项组别 中职组 高职组 □学生组 □教师组 □师生联队试点赛项 R学生组 …

Echarts地图之——如何给地图添加背景图片

上期我们已经给地图添加了一个阴影3d的效果&#xff0c;但是背景纯色的感觉还是不怎么好看&#xff0c;希望能给地图加个背景图。 一般来说给地图加背景图的情况较少&#xff0c;加个渐变色或者根据数据的情况给某些省份设置不一样的背景色&#xff0c;这样的做法是比较多的。…

C++关键字:const

文章目录 一、const的四大作用1.修饰 变量、数组2.修饰 函数的形参、修饰 引用 (最常用&#xff09;3.修饰 指针&#xff1a;常量指针、指针常量 、只读指针4.修饰 类的成员函数、修饰 类的对象 一、const的四大作用 1.修饰 变量、数组 1.const修饰变量&#xff1a; 被const修…

MySQL 如何修改密码

** MySQL 如何修改 root 密码 ** 一、如果 mysql 未设置 root 初始密码&#xff0c;可直接登录&#xff0c;修改密码。 mysql -u root -p --- 连接权限数据库 mysql> use mysql; --- 低版本 mysql 5.x mysql> update user set passwordpassword(123) where userro…

Type-C一拖多智能快充线方案

一拖二快充线PD芯片&#xff1a;技术革新与充电效率的提升 在移动设备日益普及的今天&#xff0c;充电技术的革新显得尤为重要。一拖二快充线PD芯片作为充电技术领域的一项创新成果&#xff0c;不仅提高了充电效率&#xff0c;还满足了用户多设备同时充电的需求。本文将深入探…

Python 三维可视化库之visualpython使用详解

概要 在科学计算和数据可视化领域,交互式三维可视化是一种强大的工具,可以帮助研究人员直观地探索数据和模拟结果。Python 的 visualpython 库就是这样一款强大的工具,它提供了丰富的功能和易用的接口,可以让用户轻松创建交互式的三维场景,展示复杂的科学计算结果。本文将…

springboot项目yml文件中${}的使用

作用 项目启动时可以灵活的通过修改环境变量来替换配置中的值&#xff0c;如果没有传该环境变量时&#xff0c;就是用默认值&#xff1b; 格式&#xff1a;${自定义参数名:默认值} 代码举例&#xff0c;已开启应用的端口号为例&#xff1a; server: port: ${SERVER_PORT:9…

Python代码实现Excel表格转HTML文件

Excel工作簿是常用的表格格式&#xff0c;广泛用于组织、分析及展示数据。Excel文件通常需要专门的文档阅览器进行查看。如果我们想要以更兼容的方式展示Excel表格&#xff0c;可以将其转换为HTML格式&#xff0c;使其能够在各种浏览器中直接进行查看。同时&#xff0c;将Excel…

[VulnHub靶机渗透] Kioptrix1.2

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…