Python解析多帧dicom数据详解


Posted in Python onJanuary 13, 2020

概述

pydicom是一个常用python DICOM parser。但是,没有提供解析多帧图的示例。本文结合相关函数和DICOM知识做一个简单说明。

DICOM多帧数据存储

DICOM标准中关于多帧数据存储的最重要一部分说明是PS3.5 Annex A.4 A.4 Transfer Syntaxes For Encapsulation of Encoded Pixel Data。

无论何时,Pixel Data都存放在Pixel Data (7FE0,0010)中。有可能是直接存放的(native),也有可能是被打包存放的(encapsulated)。常见的多帧图一般采用打包存放的方式,特别是在数据存采用压缩格式的时候。

在打包存放时,数据被拆分成很多数据段(Data Stream Fragment),每个段保存成一个Tag为(FFFE,E000)的DICOM 项目(item)。其中第一个项目保存基础偏移表(Basic Offset Table),保存每个帧的起始偏移。然后,后面的数据段保存真正的数据。

**理论上,一帧(Frame)可以保存在多个数据段(Fragment)中。**但是,一个数据段不会保存两帧的数据。实际应用中,很少见到Frame跨数据段的情况,不过好的DICOM Parser应该支持这种情况。这就是导致有些DICOM库的接口看起来有点古怪的原因。

pydicom应用

以pydicom 1.2为例,pydicom.encaps封装了多帧有关的功能。解析最可能用到的几个函数

多帧使用 pydicom.encaps来处理

pydicom.encaps.decode_data_sequence 返回每个(FFFE,E000)组成的item,形式是byte string的list。这样一次拿到了所有fragment数据,可能比较耗内存。注意理论上拿到的不是帧(Frame)

pydicom.encaps.generate_pixel_data 生成一个generator。每次迭代,返回做成一个fragments tuple,每个fragment是一个bytes,每个tuple是一个Frame。如果一个Fame保存在一个Fragment中。tuple就只有一个元素。

pydicom.encaps.generate_pixel_data_frame 迭代每次返回一个bytes,这个bytes代表了帧的全部数据。这应该是最常用的函数。代码实现就是把generate_pixel_data生成的tuple给拼接起来了。

这几个方法的输入都是pixel_array。相应的Pydicom提供了用fp做参数的方法。

以上这篇Python解析多帧dicom数据详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python2.x中str与unicode相关问题的解决方法
Mar 30 Python
python利用paramiko连接远程服务器执行命令的方法
Oct 16 Python
如何在python中使用selenium的示例
Dec 26 Python
Python实现手写一个类似django的web框架示例
Jul 20 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
Jul 26 Python
基于PyQt4和PySide实现输入对话框效果
Feb 27 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
Sep 20 Python
Python使用pyyaml模块处理yaml数据
Apr 14 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
May 22 Python
pytorch实现查看当前学习率
Jun 24 Python
python 三种方法实现对Excel表格的读写
Nov 19 Python
用python批量下载apk
Dec 29 Python
python 将dicom图片转换成jpg图片的实例
Jan 13 #Python
基于Python和PyYAML读取yaml配置文件数据
Jan 13 #Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
Jan 13 #Python
利用python实现.dcm格式图像转为.jpg格式
Jan 13 #Python
如何基于Python + requests实现发送HTTP请求
Jan 13 #Python
python+tifffile之tiff文件读写方式
Jan 13 #Python
python读取tif图片时保留其16bit的编码格式实例
Jan 13 #Python
You might like
php的XML文件解释类应用实例
2014/09/22 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
使用基于jquery的gamequery插件做JS乒乓球游戏
2011/07/31 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
2014/12/18 Javascript
angularJS 中$attrs方法使用指南
2015/02/09 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
2015/06/19 Javascript
JavaScript去除数组里重复值的方法
2015/07/13 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
2015/08/06 Javascript
基于jQuery实现带动画效果超炫酷的弹出对话框(附源码下载)
2016/02/22 Javascript
论JavaScript模块化编程
2016/03/07 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
全面了解addEventListener和on的区别
2016/07/14 Javascript
javascript中setAttribute兼容性用法分析
2016/12/12 Javascript
详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现
2017/03/11 Javascript
详解如何使用webpack打包Vue工程
2017/05/27 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
2017/12/04 Javascript
详解webpack import()动态加载模块踩坑
2018/07/17 Javascript
Vue匿名插槽与作用域插槽的合并和覆盖行为
2019/04/22 Javascript
vue给对象动态添加属性和值的实例
2019/09/09 Javascript
JavaScript this关键字指向常用情况解析
2020/09/02 Javascript
[01:19:33]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第一场 2月2日
2021/03/11 DOTA
Python fileinput模块使用介绍
2014/11/30 Python
用python简单实现mysql数据同步到ElasticSearch的教程
2018/05/30 Python
Python读取实时数据流示例
2019/12/02 Python
Python 实现自动登录+点击+滑动验证功能
2020/06/10 Python
html5实现九宫格抽奖可固定抽中某项奖品
2020/06/15 HTML / CSS
作弊检讨书1000字
2014/02/01 职场文书
12月小学生校园广播稿
2014/02/04 职场文书
软环境建设心得体会
2014/09/09 职场文书
健康状况证明书
2014/11/26 职场文书
网络营销计划
2015/01/17 职场文书
行政文员岗位职责
2015/02/04 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers