LearningMedicalViewer(一)

204 阅读2分钟

初衷

最近在转医学影像软件开发,发现系统性的资料非常少,所以决定把需求,技术调研,开发的过程记录下来,希望最终可以形成一个系统性的学习资料。

GitHub地址:youngjunejy/learningMedicalViewer (github.com)

需求调研

因为初衷是学习,所以需要开发的功能是主要是行业需要掌握的一些基础,最好有开源代码参考。

在浏览联影医学影像软件 (united-imaging.com)官网时,一开始决定从Dental (牙齿)应用开始学习,选择原因主要是之前简单参与过类似的项目,对全景曲线的绘制感兴趣。但随着调研发现很多基础的影像基础操作实现还没搞懂,步子迈太大。

最后决定参考联影的uVIEWER,先做通用的一个viewer,等常用功能懂得如何开发之后在深入特定的器官和疾病。

具体的功能主要包括三部分,参考了这个文章医学影像后处理技术超详细收藏版(上)_表面遮盖技术名词解释-CSDN博客

  1. 数据读取
    • DICOM
    • nii
    • nrrd
  2. 辅助观察
    • 渲染:MPR,VR,CPR,MIP,etc
    • 操作:pan,zoom,rotate,etc
  3. 辅助诊断
    • 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渲染部分,希望下周可以完成这部分的内容然后写出来。