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模拟登录百度贴吧(百度贴吧登录)实例
Dec 18 Python
Python isinstance函数介绍
Apr 14 Python
pycharm安装图文教程
May 02 Python
Python实现读取并保存文件的类
May 11 Python
python执行使用shell命令方法分享
Nov 08 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
Jan 17 Python
Python实现替换文件中指定内容的方法
Mar 19 Python
总结python中pass的作用
Feb 27 Python
python使用pandas处理大数据节省内存技巧(推荐)
May 05 Python
python微信公众号开发简单流程实现
Mar 09 Python
jupyter notebook插入本地图片的实现
Apr 13 Python
尝试使用Python爬取城市租房信息
Apr 12 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二维数组用键名分组相加实例函数
2013/11/06 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
2014/11/17 PHP
js宝典学习笔记(上)
2007/01/10 Javascript
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
关于this和self的使用说明
2010/08/01 Javascript
js单向链表的具体实现实例
2013/06/21 Javascript
js、jquery图片动画、动态切换示例代码
2014/06/03 Javascript
jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解
2014/11/19 Javascript
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
jquery.mobile 共同布局遇到的问题小结
2015/02/10 Javascript
原生js结合html5制作简易的双色子游戏
2015/03/30 Javascript
分享十五款 jQuery 社交网络分享插件
2015/05/16 Javascript
Node连接mysql数据库方法介绍
2017/02/07 Javascript
微信小程序 页面跳转如何实现传值
2017/04/05 Javascript
详解jenkins自动化部署vue
2019/05/14 Javascript
Echarts地图添加引导线效果(labelLine)
2019/09/30 Javascript
小程序表单认证布局及验证详解
2020/06/19 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
2020/09/21 Javascript
python for和else语句趣谈
2019/07/02 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
python 利用百度API识别图片文字(多线程版)
2020/12/14 Python
收集的22款给力的HTML5和CSS3帮助工具
2012/09/14 HTML / CSS
使用phonegap获取设备的一些信息方法
2017/03/31 HTML / CSS
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
eVitamins日本:在线购买折扣维生素、补品和草药
2019/04/04 全球购物
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
2014/01/05 面试题
土木工程应届生自荐信
2013/09/24 职场文书
师范院校学生自荐信范文
2013/12/27 职场文书
自行车租赁公司创业计划书
2014/01/28 职场文书
应届中专生自荐书范文
2014/02/13 职场文书
校园文明标语
2014/06/13 职场文书
写给同学的新学期寄语
2015/02/27 职场文书
余世维讲座观后感
2015/06/11 职场文书
Idea连接MySQL数据库出现中文乱码的问题
2021/04/14 MySQL
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python