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 相关文章推荐
Python抓取Discuz!用户名脚本代码
Dec 30 Python
Python操作MySQL数据库的三种方法总结
Jan 30 Python
用Python3创建httpServer的简单方法
Jun 04 Python
python爬取网易云音乐评论
Nov 16 Python
python数据类型之间怎么转换技巧分享
Aug 20 Python
如何运行带参数的python脚本
Nov 15 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
Mar 10 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
May 24 Python
Pandas的Apply函数具体使用
Jul 21 Python
Scrapy爬虫文件批量运行的实现
Sep 30 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
Dec 11 Python
Python一行代码实现自动发邮件功能
May 30 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
使用MaxMind 根据IP地址对访问者定位
2006/10/09 PHP
php设计模式 Delegation(委托模式)
2011/06/26 PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
2020/04/06 PHP
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
JS获取并操作iframe中元素的方法
2013/03/21 Javascript
常见表单重复提交问题整理及解决方法
2013/11/13 Javascript
基于jQuery实现仿淘宝套餐选择插件
2015/03/04 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
Vue自定义图片懒加载指令v-lazyload详解
2020/12/31 Javascript
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
微信小程序中使用ECharts 异步加载数据的方法
2018/06/27 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
2018/12/06 jQuery
基于vue实现图片验证码倒计时60s功能
2019/12/10 Javascript
浅谈Vue.use到底是什么鬼
2020/01/21 Javascript
JavaScript中CreateTextFile函数
2020/08/30 Javascript
numpy.delete删除一列或多列的方法
2018/04/03 Python
使用Python如何测试InnoDB与MyISAM的读写性能
2018/09/18 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
基于python生成器封装的协程类
2019/03/20 Python
django的model操作汇整详解
2019/07/26 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
Rosetta Stone官方网站:语言学习
2019/01/05 全球购物
企业治理工作自我评价
2013/09/26 职场文书
外企求职信范文分享
2013/12/31 职场文书
2014学校庆三八妇女节活动总结
2014/03/01 职场文书
建筑工程专业大学生求职信
2014/04/23 职场文书
新教师培训方案
2014/06/08 职场文书
党员四风剖析材料
2014/08/27 职场文书
乡镇领导班子四风对照检查材料
2014/09/27 职场文书
校长师德表现自我评价
2015/03/05 职场文书
初中物理教学反思
2016/02/19 职场文书
PHP策略模式写法
2021/04/01 PHP
Java实现学生管理系统(IO版)
2022/02/24 Java/Android