Python解析多幀dicom數(shù)據(jù)詳解
概述
pydicom是一個(gè)常用python DICOM parser。但是,沒(méi)有提供解析多幀圖的示例。本文結(jié)合相關(guān)函數(shù)和DICOM知識(shí)做一個(gè)簡(jiǎn)單說(shuō)明。
DICOM多幀數(shù)據(jù)存儲(chǔ)
DICOM標(biāo)準(zhǔn)中關(guān)于多幀數(shù)據(jù)存儲(chǔ)的最重要一部分說(shuō)明是PS3.5 Annex A.4 A.4 Transfer Syntaxes For Encapsulation of Encoded Pixel Data。
無(wú)論何時(shí),Pixel Data都存放在Pixel Data (7FE0,0010)中。有可能是直接存放的(native),也有可能是被打包存放的(encapsulated)。常見(jiàn)的多幀圖一般采用打包存放的方式,特別是在數(shù)據(jù)存采用壓縮格式的時(shí)候。
在打包存放時(shí),數(shù)據(jù)被拆分成很多數(shù)據(jù)段(Data Stream Fragment),每個(gè)段保存成一個(gè)Tag為(FFFE,E000)的DICOM 項(xiàng)目(item)。其中第一個(gè)項(xiàng)目保存基礎(chǔ)偏移表(Basic Offset Table),保存每個(gè)幀的起始偏移。然后,后面的數(shù)據(jù)段保存真正的數(shù)據(jù)。
**理論上,一幀(Frame)可以保存在多個(gè)數(shù)據(jù)段(Fragment)中。**但是,一個(gè)數(shù)據(jù)段不會(huì)保存兩幀的數(shù)據(jù)。實(shí)際應(yīng)用中,很少見(jiàn)到Frame跨數(shù)據(jù)段的情況,不過(guò)好的DICOM Parser應(yīng)該支持這種情況。這就是導(dǎo)致有些DICOM庫(kù)的接口看起來(lái)有點(diǎn)古怪的原因。
pydicom應(yīng)用
以pydicom 1.2為例,pydicom.encaps封裝了多幀有關(guān)的功能。解析最可能用到的幾個(gè)函數(shù)
多幀使用 pydicom.encaps來(lái)處理
pydicom.encaps.decode_data_sequence 返回每個(gè)(FFFE,E000)組成的item,形式是byte string的list。這樣一次拿到了所有fragment數(shù)據(jù),可能比較耗內(nèi)存。注意理論上拿到的不是幀(Frame)
pydicom.encaps.generate_pixel_data 生成一個(gè)generator。每次迭代,返回做成一個(gè)fragments tuple,每個(gè)fragment是一個(gè)bytes,每個(gè)tuple是一個(gè)Frame。如果一個(gè)Fame保存在一個(gè)Fragment中。tuple就只有一個(gè)元素。
pydicom.encaps.generate_pixel_data_frame 迭代每次返回一個(gè)bytes,這個(gè)bytes代表了幀的全部數(shù)據(jù)。這應(yīng)該是最常用的函數(shù)。代碼實(shí)現(xiàn)就是把generate_pixel_data生成的tuple給拼接起來(lái)了。
這幾個(gè)方法的輸入都是pixel_array。相應(yīng)的Pydicom提供了用fp做參數(shù)的方法。
以上這篇Python解析多幀dicom數(shù)據(jù)詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python pandas對(duì)excel的操作實(shí)現(xiàn)示例
這篇文章主要介紹了Python pandas對(duì)excel的操作實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07python中pow函數(shù)用法及功能說(shuō)明
在本篇文章里小編給大家整理的是一篇關(guān)于python中pow函數(shù)用法及功能說(shuō)明內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2020-12-12基于python腳本實(shí)現(xiàn)軟件的注冊(cè)功能(機(jī)器碼+注冊(cè)碼機(jī)制)
用戶(hù)運(yùn)行程序后,通過(guò)文件自動(dòng)檢測(cè)認(rèn)證狀態(tài),如果未經(jīng)認(rèn)證,就需要注冊(cè)。這篇文章主要介紹了基于python腳本實(shí)現(xiàn)軟件的注冊(cè)功能(機(jī)器碼+注冊(cè)碼機(jī)制)的相關(guān)資料,需要的朋友可以參考下2016-10-10TF-IDF的算法原理以及Python實(shí)現(xiàn)過(guò)程
這篇文章主要介紹了TF-IDF的算法原理以及Python實(shí)現(xiàn)過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2018-01-01Python裝飾器實(shí)現(xiàn)函數(shù)運(yùn)行時(shí)間的計(jì)算
這篇文章主要為大家詳細(xì)介紹了Python函數(shù)運(yùn)行時(shí)間的計(jì)算,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02解決Python3.7.0 SSL低版本導(dǎo)致Pip無(wú)法使用問(wèn)題
這篇文章主要介紹了解決Python3.7.0 SSL低版本導(dǎo)致Pip無(wú)法使用問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09關(guān)于python中密碼加鹽的學(xué)習(xí)體會(huì)小結(jié)
這篇文章主要介紹了關(guān)于python中密碼加鹽的學(xué)習(xí)體會(huì)小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07