Slicer平台是基于VTK、ITK、CTK、KWWidgets、CMake、Qt和Python等开源软件开发的。主要采用的编程语言是C++、Python、JavaScript。
Slicer体系架可以分为3层:基础层、算法层和应用层。
由操作系统提供的最底层的库,典型如OpenGL、硬件驱动。OpenGL可为基于3D的、专业的应用程序提供优质的3D图形图像性能,以便高效使用主机系统提供的窗口和图形资源。硬件驱动满足加速渲染。
架构的中间层,是可移植的依赖库,包括基础编程语言库(C++、Python)和一些实现图像处理的算法库。提供了更高层系的功能和抽象,包括CMake、ITK、VTK、CTK等。其中:
1.CMake实现了Slicer和其他算法库之间的跨平台构建配置、封装、测试;
2.VTK提供计算机图形和三维可视化的关键组成部分;
3.ITK医学图像配准和分割的工具包;
4.CTK,Common Toolkit是以提供应用程序级别的DICOM支持,插件框架和专门的GUI部件为重点的生物医学图像运算库;
5.Qt搭建跨平台的GUI;
6.DCMTK实现DICOM标准,并使DCM和DCM数据服务进行交互。
该层中的很大一部分依赖库,如ITK、VTK、CMake、CTK,都是有NA-MIC开发的,他们和Slicer一道被称为NA-MIC工具包。
Slicer应用程序,包括Core、Slicer modules、Slicer Extensions。
1.应用程序核心Core实现了用户界面,提供了了数据输入/输出接口,利用算法实现可视化,并且预留了开发新的模块和扩展的接口。
2.模块和扩展实现数据处理算法,例如分割、配准、图像滤波的算法。
2.程序框架
Slicer模块是一些基于ITK、VTK、VTK等算法库实现其功能的独立插件。包括三种类型:
- Command Line Interface Modules 命令行模块
- Loaded modules 可加载模块
- Scripted modules 脚本模块
Slicer扩展功能插件也是基于算法的一些功能模块,Modules已经被完全集成进Slicer;而Extension需要用户自行添加。
2.1 Command Line Interface Module 命令行模块
可以独立执行的模块,但输入输出参数是有限的,输入/输出的类型无法选择
CLIM是Slicer所有模块中数量最多的模块,一般使用ITK实现其功能。这些ITK算法主要有图像过滤模块、扩散成像功能模块、表面图像模块、 配准和分割模块。
2.2 Loaded Modules 可加载模块
可加载模块是一种使用C++开发的模块,针对每个模块的功能,开发了特定的图形用户界面,并添加了一些基本功能。如Color模块提供了颜色表,用以区分人体组织结构;Data模块分析当前显示的数据。
主要的可加载模块和功能如下:
绝大多数可加载模块的功能都与算法无关,只是给Slicer提供了一种基本功能。Generally Speaking,Modules used to realize algrithm are earsier in CLI modues or Scripted modules.但是,最基础的功能,如果也采用命令行或者脚本模块的形式来实现反而不方便,这个时候就能体现C++的便利性。
2.3 Scripted Modules 脚本模块
采用Python脚本语言开发的,模块通过调用Python封装的VTK、ITK、Ot等库的API实现模块的功能。Slicer中包含的Python脚本模块主要包括以下几个:
3.Slicer模块的加载(插件技术)
Slicer的模块很多,又不是必须需要,为了提高用户体验度,Slicer的模块加载环节采用了“Plug-in”机制。
“Plug-in”机制指Slicer功能模块设计时保持了很高的独立性,使用时可以选择性加载。
"Plug-in"(Plug-in,addin,add-in,addon或add-on)是一种计算机应用程序,它和主应用程序(host application)互相交互,以提供特定的功能。应用程序支持Plugin有许多原因,一些主要原因包括:使得第三方开发者有能力扩展应用程序,以提供无法先期预料的特色;减小应用程序的大小;由于软件版权之间的不兼容性将源代码和应用程序分享。
关于插件更多的细节,参考百度百科:
https://baike.baidu.com/item/plugin/5015240?fr=aladdin&fromid=6689350&fromtitle=plug-in
4.Slicer的扩展
Slicer Extension就是根据需要安装的外部插件,通过一个或几个模块完成一项功能,具有很强的共享性。这种机制很像当下比较热门的Android操作系统以及其应用程序APP。