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 unicode特性
Nov 28 Python
python数据结构之图的实现方法
Jul 08 Python
使用python3.5仿微软记事本notepad
Jun 15 Python
python模仿网页版微信发送消息功能
Feb 24 Python
使用Python监控文件内容变化代码实例
Jun 04 Python
Python使用爬虫爬取静态网页图片的方法详解
Jun 05 Python
python实现批量修改图片格式和尺寸
Jun 07 Python
python框架flask表单实现详解
Nov 04 Python
tensorflow使用range_input_producer多线程读取数据实例
Jan 20 Python
AUC计算方法与Python实现代码
Feb 28 Python
Python脚本如何在bilibili中查找弹幕发送者
Jun 04 Python
Python爬虫获取豆瓣电影并写入excel
Jul 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
CI(CodeIgniter)框架介绍
2014/06/09 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
2016/10/08 PHP
PHP读取大文件的几种方法介绍
2016/10/27 PHP
PHP设计模式之组合模式定义与应用示例
2020/02/01 PHP
JavaScript iframe的相互操作浅析
2009/10/14 Javascript
javascript 闭包疑问
2010/12/30 Javascript
神奇的7个jQuery 3D插件整理
2011/01/06 Javascript
js前端面试题及答案整理(一)
2016/08/26 Javascript
jQuery中ztree 点击文本框弹出下拉框的实例代码
2017/02/05 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
python抓取网页中的图片示例
2014/02/28 Python
python的绘图工具matplotlib使用实例
2014/07/03 Python
Python中使用Flask、MongoDB搭建简易图片服务器
2015/02/04 Python
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
Python检测QQ在线状态的方法
2015/05/09 Python
Python当中的array数组对象实例详解
2019/06/12 Python
利用python实现AR教程
2019/11/20 Python
Python编译成.so文件进行加密后调用的实现
2019/12/23 Python
Python filter()及reduce()函数使用方法解析
2020/09/05 Python
Django返回HTML文件的实现方法
2020/09/17 Python
python获取天气接口给指定微信好友发天气预报
2020/12/28 Python
Pycharm 跳转回之前所在页面的操作
2021/02/05 Python
CSS3中的注音对齐属性ruby-align用法指南
2016/07/01 HTML / CSS
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
亚瑟士美国官网:ASICS美国
2017/02/01 全球购物
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
linux系统都有哪些运行级别
2012/04/15 面试题
团队精神演讲稿
2013/12/31 职场文书
法学个人求职信范文
2014/01/27 职场文书
中国梦演讲稿3分钟
2014/08/19 职场文书
2014年招生工作总结
2014/11/26 职场文书
公司股份合作协议书
2014/12/07 职场文书
幼儿园开学家长寄语(2015秋季)
2015/05/27 职场文书
《蚂蚁和蝈蝈》教学反思
2016/02/22 职场文书
2016年第十九届推普周活动总结
2016/04/06 职场文书