本文由Markdown语法编辑器编辑完成.

1. 需求背景

近期遇到一个实际的问题, 就是当使用Slicer加载一个序列的DICOM数据时, 性能比较慢. 特别是配置比较低的服务器上, 加载时间更是非常长. 而且由于这些DICOM数据不是本地加载, 而是必须连接一个服务器将DICOM首先下载到本地, 然后再进行加载.

在一家省级机构中, 经过测试, 一个约300张的序列, 经过下载和本地加载, 约需要60s的时间. 这对于时间珍贵的用户来说, 就是不可原谅的. 所以, 如何优化下载和加载DICOM的性能, 就成了重中之重.

先说结果, 经过我们的优化和实际测试, 加载时间从原来的60s, 减少到了15s, 优化了75%的性能. 那么是怎么优化的呢, 以下是一个简要的介绍.

2. 优化思路

思路1:

第一种思路,主要是优化下载的速度。因为原来是一个线程,去依次请求服务器端,获取DICOM的图像。如果一个序列有300张图像,那么就需要发送300个request请求。
能够想到的是,采用多线程的方式下载。这样,可以并行地下载,但是并没有解决一个序列多次请求地问题。
而且经过测试,下载和加载序列的时间相当。如果加载序列没办法优化,最后还是无法达到整体优化的目的。

思路2:

第二种思路的核心就是,化整为零。这个思想,是借鉴于3d Slicer的官方开发者的一段描述。这段描述的主要意思就是,如果能够把一个DICOM的序列转化成一个nrrd格式的文件,那么在加载时就可以获得1~2个数量级的性能提升。


根据红色框内的文字,我们一下子就感觉看到了希望。因为如果这个方案是可行的化,那么我们既优化了下载的性能,又优化了加载的性能。
优化下载的性能,是因为我们不再需要每下载一张文件都发一个http的请求了;
加载优化,则是不再需要使用DICOM模块来逐张分析dicom, 而是以一个体数据的方式,直接加载到内存中。

剩下的,主要就是根据一个DICOM的序列,生成一个三维体数据了。
这里要注意,在医学影像中,三维体数据有很多不同的格式或后缀名。nrrd, nii.gz, …

以下是根据DICOM序列的路径,生成nii.gz文件的参考代码:

import numpy as np
reader = sitk.ImageSeriesReader()
dicomReader = reader.GetGDCMSeriesFileNames(series_path) #input is the DCM file path
reader.SetFileNames(dicomReader)
dicoms = reader.Execute()
sitk.WriteImage(dicoms, fileName) #fileName like "brain.nrrd/brain.nii.gz"

当生成类似brain.nii.gz的三维体数据时,在Slicer中,可以直接利用:

slicer.util.loadVolume(brain.nii.gz)

来实现加载体数据的目的。

但是这个会引起一个问题,就是直接加载体数据,会使Slicer的三个视图中的四角信息无法正常显示。
如果对于四角信息没有太多的需求,到这里就结束了。
但是,如果对于四角信息有强制显示的需求时,还需要做一些额外的工作才可以。主要就是,需要修改四角信息依赖的模块DataProbe中的一些源码。

Slicer加载DICOM性能优化初探索相关推荐

  1. (十二)运行环境(加载、性能优化、安全)【这些会了,你就可以飞了】

    运行环境 运行环境 网页加载过程 加载资源的形式 加载资源的过程 渲染页面的过程 性能优化.体验优化 原则 从何入手 让加载更快 让渲染更快 安全 XSS跨站请求攻击 XXS攻击 XSS预防 XSRF ...

  2. 如何对网页的加载进行性能优化

    1.图片优化,压缩文本和图片 2.减少请求次数 3.合并JS文件和CSS样式 4.延迟显示可见区域外的内容 5.延迟加载和执行非必要的脚本 6.确保功能性图片优先加载 7.使用AJAX请求 8.精简代 ...

  3. SAP Spartacus CMS 页面加载逻辑和性能的优化

    https://github.com/SAP/spartacus/issues/3649 SAP Commerce Cloud CMS 页面加载的一些优化点: Payload of the CMS p ...

  4. python怎么加载图片-怎样用python加载dicom图片

    用python加载dicom图片的方法:使用pydicom.CV2.numpy.matplotlib等库即可.pydicom库是专门用来处理dicom图像的python专用库. python读取DIC ...

  5. 解决Google AdSense导致网站加载慢的优化方法

    1.Google AdSense 代码精简 首先我们需要精简优化 Google AdSense 谷歌广告的JS代码,我们申请 Google AdSense 广告的时候每创建一个广告位都会是以下这样: ...

  6. QML的图片加载,内存优化研究(一)

    QML的图片加载,内存优化研究(一) QML加载图片的两个控件 Image控件及其相关属性 Image加载图片的内存问题 代码一: 代码二: 代码三: 代码四: 代码五: 通过源码来分析 QML加载图 ...

  7. 自定义动画(仿Win10加载动画)——优化

    此为前文章写的仿Win10加载动画的优化版 源代码 已更新到github 优化分析 原生 自定义高仿(v1版) 一直觉得自己写的与原生的有差别,经过仔细对比观察,发现: 原生的圆点出发位置不是都在底部 ...

  8. vue第一次加载慢怎么优化_vue如何优化首屏加载速度?面试过程遇到的性能优化问题...

    问题:vue如何优化首屏加载速度? 问题描述: 在Vue项目中,引入到工程中的所有js.css文件,编译时都会被打包进vendor.js,浏览器在加载该文件之后才能开始显示首屏.若是引入的库众多,那么 ...

  9. iOS图片加载渲染的优化

    首先我们来看iOS加载一张图片所经历的过程:(下面所讲述的代码基本以      imageWithContentsOfFile 方法来举例) 数据加载 我们优先创建UIImageView,把获得的图像 ...

最新文章

  1. python tar.gz格式压缩、解压
  2. 《Adobe Illustrator大师班:经典作品与完美技巧赏析》目录—导读
  3. 一石二鸟:推荐系统多目标任务建模方法
  4. 手撸移动端轮播图(内含源码)
  5. win10下TensorFlow-GPU安装(GTX1660+CUDA10+CUDNN7.4)
  6. linux系统最大打开文件数(/etc/security/limits.conf:待更新其他设置)
  7. 从业16年,经历了这7个数据仓库的变化,总结出了这份干货
  8. 2021-2025年中国氮化碳行业市场供需与战略研究报告
  9. Bailian2932 期末考试第三题——最大最小数之差【文本+进制】
  10. 推荐三款windows下提高工作效率的软件(altrun、everything、ditto)
  11. 不透明度百分比 16进制值对照表;rgb色值16进制转化原理
  12. iOS 签名机制与证书
  13. 微信公众账号登陆授权开发——2
  14. 深度学习中的感受野计算
  15. 微信小程序:连续签到7天签到积分获得功能设计
  16. AD与DNS集成,且有备份AD与DNS,主AD与DNS坏,备份DNS如何成为主
  17. MIT赵选贺再发《Nature Biomedical Engineering》​!
  18. RTX4060参数 RTX4060功耗 RTX4060 显卡性能
  19. 阿兰·麦席森·图灵 介绍
  20. [工具]网络流量控制软件NetLimiter

热门文章

  1. C语言零基础项目:2D 赛车游戏,详细思路+源码分享
  2. [转]Google开发拼音输入法背后的故事
  3. blueStacks模拟器安装应用慢的问题
  4. 数据扩充和数据预处理
  5. 第三方接口开发转译实体入库
  6. autocad2014 菜单栏 闪退_AutoCAD2014_Windows 10 闪退
  7. 摄影后期用计算机,摄影后期处理中计算机技术的结合应用研究
  8. 利用python对优衣库销售数据进行分析!
  9. 菜单栏应用图标隐藏软件 Hidden Bar 1.7中文版
  10. 想在Java中把PPT转化为PDF吗?教你用Aspose.Slides轻松搞定!