Slicer加载DICOM性能优化初探索
本文由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性能优化初探索相关推荐
- (十二)运行环境(加载、性能优化、安全)【这些会了,你就可以飞了】
运行环境 运行环境 网页加载过程 加载资源的形式 加载资源的过程 渲染页面的过程 性能优化.体验优化 原则 从何入手 让加载更快 让渲染更快 安全 XSS跨站请求攻击 XXS攻击 XSS预防 XSRF ...
- 如何对网页的加载进行性能优化
1.图片优化,压缩文本和图片 2.减少请求次数 3.合并JS文件和CSS样式 4.延迟显示可见区域外的内容 5.延迟加载和执行非必要的脚本 6.确保功能性图片优先加载 7.使用AJAX请求 8.精简代 ...
- SAP Spartacus CMS 页面加载逻辑和性能的优化
https://github.com/SAP/spartacus/issues/3649 SAP Commerce Cloud CMS 页面加载的一些优化点: Payload of the CMS p ...
- python怎么加载图片-怎样用python加载dicom图片
用python加载dicom图片的方法:使用pydicom.CV2.numpy.matplotlib等库即可.pydicom库是专门用来处理dicom图像的python专用库. python读取DIC ...
- 解决Google AdSense导致网站加载慢的优化方法
1.Google AdSense 代码精简 首先我们需要精简优化 Google AdSense 谷歌广告的JS代码,我们申请 Google AdSense 广告的时候每创建一个广告位都会是以下这样: ...
- QML的图片加载,内存优化研究(一)
QML的图片加载,内存优化研究(一) QML加载图片的两个控件 Image控件及其相关属性 Image加载图片的内存问题 代码一: 代码二: 代码三: 代码四: 代码五: 通过源码来分析 QML加载图 ...
- 自定义动画(仿Win10加载动画)——优化
此为前文章写的仿Win10加载动画的优化版 源代码 已更新到github 优化分析 原生 自定义高仿(v1版) 一直觉得自己写的与原生的有差别,经过仔细对比观察,发现: 原生的圆点出发位置不是都在底部 ...
- vue第一次加载慢怎么优化_vue如何优化首屏加载速度?面试过程遇到的性能优化问题...
问题:vue如何优化首屏加载速度? 问题描述: 在Vue项目中,引入到工程中的所有js.css文件,编译时都会被打包进vendor.js,浏览器在加载该文件之后才能开始显示首屏.若是引入的库众多,那么 ...
- iOS图片加载渲染的优化
首先我们来看iOS加载一张图片所经历的过程:(下面所讲述的代码基本以 imageWithContentsOfFile 方法来举例) 数据加载 我们优先创建UIImageView,把获得的图像 ...
最新文章
- python tar.gz格式压缩、解压
- 《Adobe Illustrator大师班:经典作品与完美技巧赏析》目录—导读
- 一石二鸟:推荐系统多目标任务建模方法
- 手撸移动端轮播图(内含源码)
- win10下TensorFlow-GPU安装(GTX1660+CUDA10+CUDNN7.4)
- linux系统最大打开文件数(/etc/security/limits.conf:待更新其他设置)
- 从业16年,经历了这7个数据仓库的变化,总结出了这份干货
- 2021-2025年中国氮化碳行业市场供需与战略研究报告
- Bailian2932 期末考试第三题——最大最小数之差【文本+进制】
- 推荐三款windows下提高工作效率的软件(altrun、everything、ditto)
- 不透明度百分比 16进制值对照表;rgb色值16进制转化原理
- iOS 签名机制与证书
- 微信公众账号登陆授权开发——2
- 深度学习中的感受野计算
- 微信小程序:连续签到7天签到积分获得功能设计
- AD与DNS集成,且有备份AD与DNS,主AD与DNS坏,备份DNS如何成为主
- MIT赵选贺再发《Nature Biomedical Engineering》​!
- RTX4060参数 RTX4060功耗 RTX4060 显卡性能
- 阿兰·麦席森·图灵 介绍
- [工具]网络流量控制软件NetLimiter
热门文章
- C语言零基础项目:2D 赛车游戏,详细思路+源码分享
- [转]Google开发拼音输入法背后的故事
- blueStacks模拟器安装应用慢的问题
- 数据扩充和数据预处理
- 第三方接口开发转译实体入库
- autocad2014 菜单栏 闪退_AutoCAD2014_Windows 10 闪退
- 摄影后期用计算机,摄影后期处理中计算机技术的结合应用研究
- 利用python对优衣库销售数据进行分析!
- 菜单栏应用图标隐藏软件 Hidden Bar 1.7中文版
- 想在Java中把PPT转化为PDF吗?教你用Aspose.Slides轻松搞定!