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制作数据导入导出工具
Jul 31 Python
python django 实现验证码的功能实例代码
May 18 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
Jan 09 Python
python使用tkinter实现简单计算器
Jan 30 Python
python中virtualenvwrapper安装与使用
May 20 Python
python中字符串的操作方法大全
Jun 03 Python
django+tornado实现实时查看远程日志的方法
Aug 12 Python
python config文件的读写操作示例
Sep 27 Python
Python学习笔记之装饰器
Aug 06 Python
Python提取视频中图片的示例(按帧、按秒)
Oct 22 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
Feb 02 Python
Python 里最强的地图绘制神器
Mar 01 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 session 检测和注销
2009/03/16 PHP
九个你必须知道而且又很好用的php函数和特点
2013/08/08 PHP
搭建基于Docker的PHP开发环境的详细教程
2015/07/01 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
页面定时刷新(1秒刷新一次)
2013/11/22 Javascript
jQuery中val()方法用法实例
2014/12/25 Javascript
js实现Select列表内容自动滚动效果代码
2015/08/20 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
jquery动态添加带有样式的HTML标签元素方法
2018/02/24 jQuery
Vue父子组件之间的通信实例详解
2018/09/28 Javascript
微信小程序日历组件使用方法详解
2018/12/29 Javascript
jQuery 筛选器简单操作示例
2019/10/02 jQuery
原生javascript实现类似vue的数据绑定功能示例【观察者模式】
2020/02/24 Javascript
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python实现代码行数统计示例分享
2014/02/10 Python
在Python的Django框架中simple-todo工具的简单使用
2015/05/30 Python
Python实现单词翻译功能
2017/06/06 Python
Python使用回溯法子集树模板解决迷宫问题示例
2017/09/01 Python
Python 查看文件的编码格式方法
2017/12/21 Python
深入浅析Python传值与传址
2018/07/10 Python
python 快速把超大txt文件转存为csv的实例
2018/10/26 Python
python实现从pdf文件中提取文本,并自动翻译的方法
2018/11/28 Python
Python matplotlib的使用并自定义colormap的方法
2018/12/13 Python
python 同时运行多个程序的实例
2019/01/07 Python
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
2020/02/14 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
HTML5中的拖放实现详解
2017/08/23 HTML / CSS
大一学生职业生涯规划
2014/03/11 职场文书
优秀食品类广告词
2014/03/19 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
优秀班主任材料
2014/12/16 职场文书
小学庆六一主持词
2015/06/30 职场文书
圣诞晚会主持词
2015/07/01 职场文书
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js
Python matplotlib多个子图绘制整合
2022/04/13 Python