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

相关文章

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

Spring Security介绍及配置实现代码

《SpringSecurity介绍及配置实现代码》SpringSecurity是一个功能强大的Java安全框架,它提供了全面的安全认证(Authentication)和授权(Authorizatio... 目录简介Spring Security配置配置实现代码简介Spring Security是一个功能强

JSR-107缓存规范介绍

《JSR-107缓存规范介绍》JSR是JavaSpecificationRequests的缩写,意思是Java规范提案,下面给大家介绍JSR-107缓存规范的相关知识,感兴趣的朋友一起看看吧... 目录1.什么是jsR-1072.应用调用缓存图示3.JSR-107规范使用4.Spring 缓存机制缓存是每一

Java中 instanceof 的用法详细介绍

《Java中instanceof的用法详细介绍》在Java中,instanceof是一个二元运算符(类型比较操作符),用于检查一个对象是否是某个特定类、接口的实例,或者是否是其子类的实例,这篇文章... 目录引言基本语法基本作用1. 检查对象是否是指定类的实例2. 检查对象是否是子类的实例3. 检查对象是否

什么是ReFS 文件系统? ntfs和refs的优缺点区别介绍

《什么是ReFS文件系统?ntfs和refs的优缺点区别介绍》最近有用户在Win11Insider的安装界面中发现,可以使用ReFS来格式化硬盘,这是不是意味着,ReFS有望在未来成为W... 数十年以来,Windows 系统一直将 NTFS 作为「内置硬盘」的默认文件系统。不过近些年来,微软还在研发一款名

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib