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 相关文章推荐
Python3字符串学习教程
Aug 20 Python
Python爬虫实例爬取网站搞笑段子
Nov 08 Python
Python实现矩阵加法和乘法的方法分析
Dec 19 Python
Python实现爬虫设置代理IP和伪装成浏览器的方法分享
May 07 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
May 16 Python
Python3.5 Pandas模块之DataFrame用法实例分析
Apr 23 Python
python 通过可变参数计算n个数的乘积方法
Jun 13 Python
简单了解Python matplotlib线的属性
Jun 29 Python
使用python模拟高斯分布例子
Dec 09 Python
如何基于Python + requests实现发送HTTP请求
Jan 13 Python
python文件读取失败怎么处理
Jun 23 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
Nov 24 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_SELF的安全问题
2009/09/05 PHP
php页面消耗内存过大的处理办法
2013/03/18 PHP
php读取csc文件并输出
2015/05/21 PHP
浅谈php的优缺点
2015/07/14 PHP
PHP7基于curl实现的上传图片功能
2018/05/11 PHP
php在linux环境中如何使用redis详解
2020/12/15 PHP
Javascript学习笔记9 prototype封装继承
2010/01/11 Javascript
基于jquery的滚动鼠标放大缩小图片效果
2011/10/27 Javascript
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
2013/04/17 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
2015/10/14 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
2016/01/17 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
2017/05/17 Javascript
Node.js 8 中的 util.promisify的详解
2017/06/12 Javascript
捕获未处理的Promise错误方法
2017/10/13 Javascript
原生实现一个react-redux的代码示例
2018/06/08 Javascript
对vue中v-if的常见使用方法详解
2018/09/28 Javascript
JavaScript寄生组合式继承原理与用法分析
2019/01/11 Javascript
Vue实现导航栏点击当前标签变色功能
2020/08/19 Javascript
JS原型和原型链原理与用法实例详解
2020/02/05 Javascript
python动态参数用法实例分析
2015/05/25 Python
Python统计文件中去重后uuid个数的方法
2015/07/30 Python
浅析Python基础-流程控制
2016/03/18 Python
Python中的多行注释文档编写风格汇总
2016/06/16 Python
Python简单生成随机数的方法示例
2018/03/31 Python
Python统计文本词汇出现次数的实例代码
2020/02/27 Python
Python函数的迭代器与生成器的示例代码
2020/06/18 Python
Pycharm plot独立窗口显示的操作
2020/12/11 Python
工地资料员岗位职责
2013/12/31 职场文书
物流专业大学生职业生涯规划书范文
2014/01/15 职场文书
项目建议书模板
2014/05/12 职场文书
2015年财务人员工作总结
2015/04/10 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书
pytorch 权重weight 与 梯度grad 可视化操作
2021/06/05 Python
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python