介绍3D Slicer的另一个身份:医学影像IDE

2023-11-25 07:30

本文主要是介绍介绍3D Slicer的另一个身份:医学影像IDE,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

IDE(Integrated Development Environment )集成开发环境一般是指程序员在进行软件开发时,需要使用的一整套环境和应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等。大家比较熟悉的IDE有Microsoft Visual Studio、Eclipse、PyCharm等。IDE的选择通常和开发语言和应用领域密切相关。例如,如果做Windows C++/C#应用开发,基本都会优先选择Visual Studio;如果做Java开发,则倾向首选Eclipse;PyCharm则是很多Python开发程序员的首选。

 

在医学影像算法开发领域,大家是否注意到近年来的两个趋势。第一,越来越多的人喜欢用Python做为开发语言,进行快速原型开发和验证。正所谓,“人生苦短,我用Python”。第二个趋势,为了进一步加快原型开发的速度,尤其是避免重复“造轮子”,大家通常会选择ITK、VTK、QT这个“三剑客”组合,来作为图像处理、可视化和图形界面的三大基石。并且,这两大趋势正在融合形成一个汇总趋势:使用Python作为开发语言,调用ITK、VTK、QT这三大基础库,进行医学影像算法原型的开发。

 

分析到这里,终于要引出我们这篇小文章要讨论的主要问题了。想要用Python调用ITK、VTK和QT进行开发,有哪些好的IDE可供选择?

 

对于高手来讲,直接从Python安装包开始,然后逐个安装SimpleITK、VTK、PyQt,就可以了。也可以借助Anaconda来建立多版本开发环境。但对于新手和小白,这个过程并不简单。需要解决安装包下载、版本选择、PIP安装命令等一系列问题,才能够入门,建立起真正能够开始编程的环境。

 

那么,有没有更省事一步到位的解决办法?答案是,有。这个一步到位的解决方法就是本文要介绍的3D Slicer。

 

3D Slicer是一个开源的跨平台医学影像可视化和处理分析软件,由美国国家卫生研究院(National Institutes of Health)支持开发,迄今已经有超过20年的开发历史,但仍然保持着一个活跃的开发群体。关于3D Slicer的详细介绍,可以参考官方网站:https://www.slicer.org/。

 

本文重点介绍3D Slicer中集成的Python开发环境。假定大家已经从网站下载最新的4.8.1版本,完成了安装。软件启动后,将显示下面的界面:

注意到红色箭头指向的右上方按钮图标了吗?这不就是Python的代表性Logo吗?没错,只要安装好3D Slicer,内部就会直接准备好了Python 2.7的开发环境。点击这个按钮,就会在软件的下方启动Python的交互式开发环境。如下图红色箭头指向所示。

 

 

是不是有些小小的惊喜和意外?这还远不是全部。在这个开发环境中,你可以直接调用SimpleITK、VTK和PyQt的函数和功能。关于如何在Slicer中进行Python编程,大家可以参考官方网站介绍,(https://www.slicer.org/wiki/Documentation/Nightly/Developers/Python_scripting),非常详细。

 

在真正入坑,开始折腾之前,大家可能都会先思考一个问题。我用这个工具能够做什么事情,达到什么样的效果?回答这个问题的最佳方式就是,举个例子。

 

下面介绍一个基于3D Slicer环境,采用Python开发的椎弓根螺钉手术规划和模拟扩展应用:PedicleScrewSimulator。

 

PedicalScrewSimulator为开源软件(https://github.com/smclach/PedicleScrewSimulator)。整个工程,如果不统计资源和模型文件,一共包含了10个Python文件。其中最长的文件,代码行数为919行。大多数文件的代码行数,都在300行以内。这与Python编程,“少写代码,多半实事”的追求目标非常一致啊。

 

PedicleScrewSimulator非常“友好”,在左侧面板中,提供了操作向导,指导和提示用户逐步操作。包含下述步骤。

 

  1.  加载DICOM影像

 

上方是软件整体界面。在界面左侧,显示的是向导面板,具体如下图。

 

 

可以看到提供了多种加载方式。整个数据加载步骤,包括上面的图形用户界面,由LoadDataStep.py文件实现,一共168行代码。其中加载影像的核心功能是通过调用Slicer内部已经集成的辅助功能模块来实现的。核心代码只有一句话,代码如下:

slicer.util.openAddDataDialog()

 

2. 裁剪感兴趣区域

在第二步中,软件会在三个正交切面图像(MPR)上显示感兴趣区域裁剪框,让用户手工拖拽调节,选择感兴趣区域。其中左侧的操作面板(如下图所示),都是采用PyQt搭建出来的。

右上方的Volume Rendering绘制窗口则基于Slicer中内置的下述module来实现。

slicer.modules.volumerendering

 

3. 标记植入点

 

在这一步中需要指定植入点的位置。可以直接在VR窗口中点击确定。

 

4. 植入过程模拟

 

在这一步中,可以先选择要植入的骨钉型号,然后选择要植入的深度。之后,点击“Insert Screw”按钮,就可以看到蓝色的骨钉动态的钻入骨骼中。还可以点击“Backout Screw”来撤回骨钉。

 

5. 术后效果模拟

在最后一步中,可以采用在上方VR窗口以半透明骨骼效果,观察骨钉植入效果。还可以在3个MPR窗口中,观察骨钉出现在哪些切面层面和轮廓。如下图所示。

 

至此,对于PedicScrewSimulator“蜻蜓点水”式介绍完成。没有深入技术细节和代码,只是想通过图片分享的方式,让大家初步了解和感受在Slicer这个IDE进行开发,可以完成哪些工作,达到什么样的效果。

 

用3D Slicer作为医学影像算法快速开发的IDE,突出优势是已经集成好了ITK、VTK和QT常用“三大件”,并且可以使用Slicer内部若干已经开发完成的Module,来加快开发进程。但是所有的馅饼都不是白来的,要想能够在Slicer中进行开发,学习和熟悉Slicer的设计理念、软件架构仍然是必须的。友提,真正入坑之前,还是把官方指导网页大致看一遍,才能更好决定,这是不是适合自己的那盘菜。

 

官方指导网页:

https://www.slicer.org/wiki/Documentation/Nightly/Developers/Python_scripting

这篇关于介绍3D Slicer的另一个身份:医学影像IDE的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/423372

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

Mysql BLOB类型介绍

BLOB类型的字段用于存储二进制数据 在MySQL中,BLOB类型,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储的大小不同。 TinyBlob 最大 255 Blob 最大 65K MediumBlob 最大 16M LongBlob 最大 4G

arduino ide安装详细步骤

​ 大家好,我是程序员小羊! 前言: Arduino IDE 是一个专为编程 Arduino 微控制器设计的集成开发环境,使用起来非常方便。下面将介绍如何在不同平台上安装 Arduino IDE 的详细步骤,包括 Windows、Mac 和 Linux 系统。 一、在 Windows 上安装 Arduino IDE 1. 下载 Arduino IDE 打开 Arduino 官网

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系