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 相关文章推荐
Django在Win7下的安装及创建项目hello word简明教程
Jul 14 Python
python 与GO中操作slice,list的方式实例代码
Mar 20 Python
详解 Python 与文件对象共事的实例
Sep 11 Python
python2 与python3的print区别小结
Jan 16 Python
Python实现PS滤镜的旋转模糊功能示例
Jan 20 Python
Python2.7 实现引入自己写的类方法
Apr 29 Python
python中字符串的操作方法大全
Jun 03 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
Nov 01 Python
解决Python一行输出不显示的问题
Dec 03 Python
python networkx 包绘制复杂网络关系图的实现
Jul 10 Python
Scrapy框架实现的登录网站操作示例
Feb 06 Python
Python虚拟环境virtualenv是如何使用的
Jun 20 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魔术方法__GET、__SET使用实例
2014/11/25 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
2016/03/21 PHP
Yii2框架数据库简单的增删改查语法小结
2016/08/31 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
2019/10/22 PHP
CL vs ForZe BO5 第四场 2.13
2021/03/10 DOTA
Javascript实例教程(19) 使用HoTMetal(2)
2006/12/23 Javascript
Extjs学习笔记之四 工具栏和菜单
2010/01/07 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
jquery简单图片切换显示效果实现方法
2015/01/14 Javascript
基于javascript数组实现图片轮播
2016/05/02 Javascript
js实现上传图片及时预览
2016/05/07 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
2017/12/26 Javascript
vue 移动端适配方案详解
2018/11/15 Javascript
JS中FormData类实现文件上传
2020/03/27 Javascript
实用的 vue tags 创建缓存导航的过程实现
2020/12/03 Vue.js
python实现应用程序在右键菜单中添加打开方式功能
2017/01/09 Python
Python 使用os.remove删除文件夹时报错的解决方法
2017/01/13 Python
Python  pip安装lxml出错的问题解决办法
2017/02/10 Python
python 二分查找和快速排序实例详解
2017/10/13 Python
Python的几种主动结束程序方式
2019/11/22 Python
基于python+selenium的二次封装的实现
2020/01/06 Python
python 带时区的日期格式化操作
2020/10/23 Python
Python如何使用ConfigParser读取配置文件
2020/11/12 Python
python字典按照value排序方法
2020/12/28 Python
用html5实现语音搜索框的方法
2014/03/18 HTML / CSS
乌克兰在线商店的价格比较:Price.ua
2019/07/26 全球购物
高中生校园生活自我评价
2013/09/19 职场文书
日语专业个人求职信范文
2014/02/02 职场文书
医学专业毕业生推荐信
2014/07/12 职场文书
小学生成绩单评语
2014/12/31 职场文书
2016年“我们的节日·重阳节”主题活动总结
2016/04/01 职场文书
母婴行业实体、电商模式全面解析
2019/08/01 职场文书
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL
Java实现添加条码或二维码到Word文档
2022/06/01 Java/Android
python读取mat文件生成h5文件的实现
2022/07/15 Python