介绍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

相关文章

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)

《MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)》掌握多表联查(INNERJOIN,LEFTJOIN,RIGHTJOIN,FULLJOIN)和子查询(标量、列、行、表子查询、相关/非相关、... 目录第一部分:多表联查 (JOIN Operations)1. 连接的类型 (JOIN Types)

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.

Pytorch介绍与安装过程

《Pytorch介绍与安装过程》PyTorch因其直观的设计、卓越的灵活性以及强大的动态计算图功能,迅速在学术界和工业界获得了广泛认可,成为当前深度学习研究和开发的主流工具之一,本文给大家介绍Pyto... 目录1、Pytorch介绍1.1、核心理念1.2、核心组件与功能1.3、适用场景与优势总结1.4、优

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe