Python解析多帧dicom数据详解

 更新时间:2020年01月13日 15:43:15   作者:pkrobbie  
今天小编就为大家分享一篇Python解析多帧dicom数据详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

概述

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实战之大鱼吃小鱼游戏的实现

    这篇文章主要介绍了如何利用Python制作一个经典游戏之大鱼吃小鱼,文中的示例代码讲解详细,对我们学习Python有一定帮助,需要的可以参考一下
    2022-04-04
  • Python入门教程(三十五)Python中文件的打开

    Python入门教程(三十五)Python中文件的打开

    这篇文章主要介绍了Python入门教程(三十五)Python中文件的打开,在Python中文件的读取主要是用open()函数,那么open()函数有哪些方法呢,今天我们就来看一看,需要的朋友可以参考下
    2023-05-05
  • python pygame实现打砖块游戏

    python pygame实现打砖块游戏

    这篇文章主要为大家详细介绍了python pygame实现打砖块游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 使用selenium和pyquery爬取京东商品列表过程解析

    使用selenium和pyquery爬取京东商品列表过程解析

    这篇文章主要介绍了使用selenium和pyquery爬取京东商品列表过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python 函数用法简单示例【定义、参数、返回值、函数嵌套】

    Python 函数用法简单示例【定义、参数、返回值、函数嵌套】

    这篇文章主要介绍了Python 函数用法,结合实例形式分析了Python函数定义、参数、返回值及函数嵌套相关使用技巧,需要的朋友可以参考下
    2019-09-09
  • Python使用scrapy爬取阳光热线问政平台过程解析

    Python使用scrapy爬取阳光热线问政平台过程解析

    这篇文章主要介绍了Python使用scrapy爬取阳光热线问政平台过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python中使用md5sum检查目录中相同文件代码分享

    Python中使用md5sum检查目录中相同文件代码分享

    这篇文章主要介绍了Python中使用md5sum检查目录中相同文件代码分享,本文直接给出实现代码,需要的朋友可以参考下
    2015-02-02
  • 使用python实现ftp的文件读写方法

    使用python实现ftp的文件读写方法

    今天小编就为大家分享一篇使用python实现ftp的文件读写方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python疫情确诊折线图实现数据可视化实例详解

    Python疫情确诊折线图实现数据可视化实例详解

    数据可视化是指用图形或表格的方式来呈现数据。图表能够清楚地呈现数据性质, 以及数据间或属性间的关系,可以轻易地让人看图释义。用户通过探索图(Exploratory Graph)可以了解数据的特性、寻找数据的趋势、降低数据的理解门槛
    2022-09-09
  • 浅析Python是如何实现集合的

    浅析Python是如何实现集合的

    之前我们介绍过字典的实现原理,它底层是基于哈希表实现的,而集合也是如此。本次我们来聊一下 Python 的集合是怎么实现的,希望对大家有所帮助
    2022-12-12

最新评论