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静态方法实例
Jan 14 Python
python简单判断序列是否为空的方法
Jun 30 Python
八大排序算法的Python实现
Jan 28 Python
python生成随机图形验证码详解
Nov 08 Python
详谈python3中用for循环删除列表中元素的坑
Apr 19 Python
Python使用itertools模块实现排列组合功能示例
Jul 02 Python
Python简单读写Xls格式文档的方法示例
Aug 17 Python
django使用LDAP验证的方法示例
Dec 10 Python
Python时间序列缺失值的处理方法(日期缺失填充)
Aug 11 Python
Python中的四种交换数值的方法解析
Nov 18 Python
解决python3.6用cx_Oracle库连接Oracle的问题
Dec 07 Python
用python批量解压带密码的压缩包
May 31 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中实现进程间通讯
2006/10/09 PHP
PHP HTML代码串截取代码
2008/12/29 PHP
PHP数据类型的总结分析
2013/06/13 PHP
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
2018/01/16 PHP
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
基于JQuery的列表拖动排序实现代码
2013/10/01 Javascript
javaScript如何处理从java后台返回的list
2014/04/24 Javascript
jQuery Ajax使用实例
2015/04/16 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
2017/01/19 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
SpringMVC简单整合Angular2的示例
2017/07/31 Javascript
微信小程序倒计时功能实现代码
2017/11/09 Javascript
JS实现访问DOM对象指定节点的方法示例
2018/04/04 Javascript
详解JSON Web Token 入门教程
2018/07/30 Javascript
vue移动端下拉刷新和上拉加载的实现代码
2018/09/08 Javascript
Bootstrap 按钮样式与使用代码详解
2018/12/09 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
2020/05/11 Javascript
JavaScript鼠标悬停事件用法解析
2020/05/15 Javascript
[01:00:35]2018DOTA2亚洲邀请赛3月30日B组 EffcetVSMineski
2018/03/31 DOTA
python数据处理之如何选取csv文件中某几行的数据
2019/09/02 Python
使用Pandas将inf, nan转化成特定的值
2019/12/19 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
Django重设Admin密码过程解析
2020/02/10 Python
Python如何将函数值赋给变量
2020/04/28 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
Python如何使用ElementTree解析xml
2020/10/12 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
台湾时尚彩瞳专门店:imeime
2019/08/16 全球购物
安全在我心中演讲稿
2014/09/01 职场文书
2014年卫生保健工作总结
2014/12/08 职场文书
庆七一活动简报
2015/07/20 职场文书
2016年党建工作简报
2015/11/26 职场文书
HTML5来实现本地文件读取和写入的实现方法
2021/05/25 HTML / CSS
如何利用python实现Simhash算法
2022/06/28 Python