您好,登錄后才能下訂單哦!
這篇文章主要介紹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數據的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。