初衷
最近在转医学影像软件开发,发现系统性的资料非常少,所以决定把需求,技术调研,开发的过程记录下来,希望最终可以形成一个系统性的学习资料。
GitHub地址:youngjunejy/learningMedicalViewer (github.com)
需求调研
因为初衷是学习,所以需要开发的功能是主要是行业需要掌握的一些基础,最好有开源代码参考。
在浏览联影医学影像软件 (united-imaging.com)官网时,一开始决定从Dental (牙齿)应用开始学习,选择原因主要是之前简单参与过类似的项目,对全景曲线的绘制感兴趣。但随着调研发现很多基础的影像基础操作实现还没搞懂,步子迈太大。
最后决定参考联影的uVIEWER,先做通用的一个viewer,等常用功能懂得如何开发之后在深入特定的器官和疾病。
具体的功能主要包括三部分,参考了这个文章医学影像后处理技术超详细收藏版(上)_表面遮盖技术名词解释-CSDN博客。
- 数据读取
- DICOM
- nii
- nrrd
- 辅助观察
- 渲染:MPR,VR,CPR,MIP,etc
- 操作:pan,zoom,rotate,etc
- 辅助诊断
- measurement
- segmentation
- detection
- registration
技术栈调研
产品级别的代码肯定以C++为基础,3D Slicer采用的是qt+vtk,uViewer使用开源工具Detect-It-Easy检查使用的是MFC,渲染相关的库应该是自研的。
我尝试性的用了一下MFC,发现是真的难用,qt+vtk环境好搭建,但是在学习过程中需要学习的东西太多,上手难度太大。
最后在调研了python可以使用的桌面应用开发框架后,选择了python+qt+vtk的路线。选择python主要原因就是好上手,可以专心学习影像处理相关知识,并且python在医学领域也是常用的技术。等领域相关知识掌握后,计划回过头使用c++开发相同的功能,补齐短板。
以上是核心库的选择,其他库例如simpleITK等用到时在给出分析。
最后
以上就是本周可以写出来的内容,调研过程其实遇到很多问题,但精力有限没法详细展开,所以欢迎大家留言提问。
目前已经在开发MPR渲染部分,希望下周可以完成这部分的内容然后写出来。