1. 程式人生 > 程式設計 >Python解析多幀dicom資料詳解

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資料詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。