Python解析多帧dicom数据详解

作者:pkrobbie 时间:2022-08-13 21:16:13 

概述

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做参数的方法。

来源:https://blog.csdn.net/pkrobbie/article/details/87827145

标签:Python,多帧,dicom数据
0
投稿

猜你喜欢

  • python中pymysql的executemany使用方式

    2024-01-12 14:35:46
  • go实现grpc四种数据流模式

    2024-02-01 15:51:56
  • 部署Django到阿里云服务器教程示例

    2022-03-28 23:46:19
  • 线上问题排查之golang使用json进行对象copy

    2023-10-06 05:03:23
  • 详解Vue的ref特性的使用

    2024-06-07 15:23:02
  • SQL中的开窗函数(窗口函数)

    2024-01-24 09:59:43
  • Python中的sort()方法使用基础教程

    2022-03-07 21:44:09
  • Python Matplotlib条形图之垂直条形图和水平条形图详解

    2022-07-24 04:07:45
  • Python数字比较与类结构

    2023-07-29 13:33:51
  • 在ASP处理程序时,进度显示

    2008-08-04 13:27:00
  • Python调用scp向服务器上传文件示例

    2023-12-09 18:56:34
  • Python入门教程(十)Python布尔值介绍

    2022-06-01 18:01:55
  • 教你使用TensorFlow2识别验证码

    2022-06-26 19:24:38
  • Python django框架输入汉字,数字,字符生成二维码实现详解

    2022-12-13 00:23:24
  • Yii1.0 不同页面多个验证码的使用实现

    2024-05-11 09:53:57
  • python类的方法属性与方法属性的动态绑定代码详解

    2023-07-02 03:31:26
  • SQL Server UPDATE语句的用法详解

    2024-01-17 06:39:23
  • Vue.js添加组件操作示例

    2024-05-11 09:16:32
  • 基于python内置函数与匿名函数详解

    2021-02-02 08:27:26
  • Python编程之微信推送模板消息功能示例

    2022-11-15 03:45:04
  • asp之家 网络编程 m.aspxhome.com