KISS Dicom Viewer

  项目地址:CodeChinaGitHub


前言

  一直没有找到一个合适的Dicom浏览器。Windos下的小蚂蚁(RadiAnt Dicom Viewer)很好用但可惜不是跨平台的,只有Windos版本。平时工作系统是Ubuntu/Deepin,虽然用deepin-wine5也可以安装RadiAnt Dicom Viewer但是跟Windos下比起来很多功能不能用,比如pacs scu,数据库(rdvdb)用deepin-wine5装的也有bug,小蚂蚁中文版还有很多乱码。
  全平台都支持并且跟小蚂蚁一样又小又快的我找到两个PapayaDWV,该有的功能很齐全,虽然开源但是一个是JavaScript一个是lua,如果想大改自己改也无从下手。
  ItkSnap3DSlicer也都是全平台的,都很强大而且都是开源的。架构都很好,可以自己任意开发插件添加进去。如果把这两个只当成DICOM浏览器实在有点大材小用。

下载: RadiAnt Dicom ViewerPapayaDWVItkSnap3DSlicer

  干脆自己做一个吧,正好还可以自己学习。花了一个月在2020.9搞了个大概能用就搁浅了。2021年由于疫情的关系,就留在杭州过年了。时间充裕,计划把KISS Dicom Viewer做完吧。


Demo展示

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


软件介绍

1) 软件命名

  KISS Dicom Viewer
  
    KISS指:Keep it Simple and Stupid

2) 第三方库

3) 程序架构

  想了下好像也没啥功能,只是个图片浏览器。简单的事件驱动就够了。

4) 代码规范

  目前还在开发阶段,而且是空余时间,没做代码优化逻辑很乱也不是很规范,到处抄的代码,命名也一塌糊涂,等想做的功能都实现了在Reviewer

5) Modality支持

  目前适配的Modality包括CT、XA、IVUS、OCT、US,其余的可以浏览影像,但是注释等设置和交互参数只能为默认值。这个已经封装成XML配置,后续慢慢加。

实现方法

  记录下实现的办法,方便日后查找。如果有一样需求的也可以帮助大家快速实现。

1) 显示ui — 屏幕分割显示布局

  Qt 实现 屏幕分割显示布局,可以任意拖拽显示

2) Dicom数据结构 ---- DicomImage --> QSharedData

  把DicomImage封装成 QSharedData 使用 (显式共享)

   把DicomImage封装成 QSharedData ,让后利用Qt实现可视化。
      ├── PATIENT (病人)
      │ │ └── STUDY (检查)
      │ │ │ │ └── SERIES (序列)
      │ │ │ │ │ │ └── IMAGE (影像 高度为未知)
      │ │ │ │ └── SERIES (序列)
      │ │ │ │ │ │ └── IMAGE (影像 高度为1)
      │ │ │ │ │ │ └── IMAGE (影像 高度为1)
      │ │ └── STUDY (检查)
      │ │ │ │ └── SERIES (序列)
      │ │ │ │ │ │ └── IMAGE (影像)

3) Dicom数据结构 ---- DicomImage --> Series

  Dicom数据结构 ---- DicomImage --> SeriesInstance

   根据协议可以知道每个Series中可以有单帧或多帧。
   多帧时 每帧影像尺寸高度是1
   单帧时 每帧影像尺寸高度未知

  • 单帧模式高度代表当前时间 !
  • 多帧模式高度代表空间位置 !
    enum  SeriesPattern {
        Empty_Frame,  //
        Single_Frame, // 单帧
        Multi_Frame,  // 多帧
    };

   涉及到Series,2D可视化肯定会有方向
  (多帧模式下)区分平面
  (单帧模式下)只有XY平面显示模式,另外两个平面表示时间密度曲线,与其相关打算作为插件用opencv做,所以这里封装的Series其余两个平面均指多帧模式。

4) 打开数据 ---- 打开 dcm 文件、打开 dcm 文件夹

  Qt 实现 打开 文件/文件夹 同一个接口
  Qt 实现一个批量加载线程(单线程)
  Qt 实现一个 文件监听线程
如何打开一个dcm影像
  把DicomImage封装成 QSharedData 使用 (显式共享) 2.4 DcmFileFormat 获取 常用标签/图片

5) 图片浏览器交互 ---- 框选ROI 自适应窗位窗宽

  Qt 实现 RubberBandDrag 框选

6) 图片浏览器交互 ---- 浏览序列

  QGraphicsView 按住鼠标实现帧数切换

7) Dcmtk Pacs 开发:小型dicom数据库(sqlite)

  Dcmtk Pacs 开发:小型dicom数据库(sqlite)

8) Dcmtk Pacs 开发:StoreScp 实现

   Dcmtk Pacs 开发:StoreScp 实现

9) Dcmtk Pacs 开发:Echo 实现

   Dcmtk Pacs 开发:Echo 实现

10) DCMTK 遍历 DICOM 标签/Tags 并 可视化

   DCMTK 遍历 DICOM 标签/Tags 并 可视化

11) 利用QTimer实现 Dicom 播放功能

   利用QTimer实现 Dicom 播放功能

12) KISS Dicom Viewer:插件实现方法

   KISS Dicom Viewer:插件实现方法

13) 仿照小蚂蚁实现 sharpen smooth Edge Emboss

   仿照小蚂蚁实现 sharpen smooth Edge Emboss

x) 慢慢完善…

  • 16
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 24
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值