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如何实现一个刷网页小程序
Nov 27 Python
python微信撤回监测代码
Apr 29 Python
python将字典列表导出为Excel文件的方法
Sep 02 Python
详解Python 中sys.stdin.readline()的用法
Sep 12 Python
浅谈python之自动化运维(Paramiko)
Jan 31 Python
将python文件打包exe独立运行程序方法详解
Feb 12 Python
Python基于Twilio及腾讯云实现国际国内短信接口
Jun 18 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
Aug 19 Python
Python识别处理照片中的条形码
Nov 16 Python
scrapy-splash简单使用详解
Feb 21 Python
python基础详解之if循环语句
Apr 24 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
风格模板初级不完全修改教程
2006/10/09 PHP
谈谈关于php的优点与缺点
2013/04/11 PHP
PHP实现留言板功能的详细代码
2017/03/25 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
JS实现简单的顶部定时关闭层效果
2014/06/15 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
JavaScript开发者必备的10个Sublime Text插件
2016/02/27 Javascript
JS三级可折叠菜单实现方法
2016/02/29 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
bootstrap css样式之表单
2017/01/19 Javascript
Angular1.x复杂指令实例详解
2017/03/01 Javascript
关于javascript获取内联样式与嵌入式样式的实例
2017/06/01 Javascript
基于vue.js中事件修饰符.self的用法(详解)
2018/02/23 Javascript
JavaScript常用工具方法封装
2019/02/12 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
Node.js中console.log()输出彩色字体的方法示例
2019/12/01 Javascript
Vue 3.0 全家桶抢先体验
2020/04/28 Javascript
[02:17]2016国际邀请赛中国区预选赛VG战队领队采访
2016/06/26 DOTA
[51:15]完美世界DOTA2联赛PWL S2 PXG vs Magma 第一场 11.21
2020/11/24 DOTA
Django中对数据查询结果进行排序的方法
2015/07/17 Python
使用Python保存网页上的图片或者保存页面为截图
2016/03/05 Python
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
python多行字符串拼接使用小括号的方法
2020/03/19 Python
Python3.7实现中控考勤机自动连接
2018/08/28 Python
Django Model中字段(field)的各种选项说明
2020/05/19 Python
python中关于数据类型的学习笔记
2020/07/19 Python
详解BeautifulSoup获取特定标签下内容的方法
2020/12/07 Python
python接口自动化框架实战
2020/12/23 Python
CSS3教程:边框属性border的极致应用
2009/04/02 HTML / CSS
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
顶丰TOPPIK台湾官网:增发纤维假发,告别秃发困扰
2018/06/13 全球购物
京剧自荐信
2014/01/26 职场文书
物业管理毕业生的自我评价
2014/02/17 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
创业计划之特色精品店
2019/08/12 职场文书
Windows和Linux上部署Golang并运行程序
2022/04/22 Servers