DICOM醫學檔案的解析

virtualman發表於2021-02-06

最近導師一直讓做智慧醫療的一個專案,這裡面涉及到DICOM格式的檔案處理,在這裡分享一下自己學到的關於DCM檔案的一些內容。

DICOM

DICOM(DigitalImaging andCommunications inMedicine)是指醫療數字影像傳輸協定,是用於醫學影像處理、儲存、列印、傳輸的一組通用的標準協定。它包含了檔案格式的定義以及網路通訊協議。DICOM是以TCP/IP為基礎的應用協定,並以TCP/IP聯絡各個系統。兩個能接受DICOM格式的醫療儀器間,可通過DICOM格式的檔案,來接收與交換影像及病人資料。

目前,DICOM被廣泛應用於放射醫療,心血管成像以及放射診療診斷裝置(X射線,CT,核磁共振,超聲等),並且在眼科和牙科等其它醫學領域得到越來越深入廣泛的應用。

DICOM的儲存格式

DICOM檔案的整體結構如圖2.1所示,先是128位元組的導言部分(沒有實際資訊),接著是四個位元組組成的"DICM"字串,然後是若干DataElement元素依次排列直至檔案結束。
在這裡插入圖片描述

DataElement的三種結構

DataElement是儲存檔案資訊的主體,DataElement的總體結構如圖2.2所示:

在這裡插入圖片描述

Tag由2 Byte的組號和2 Byte的元素號組成,VR是DICOM特有的值表示法,按照VR的型別以及是否顯示VR,DataElement又分為三種具體的結構。
在這裡插入圖片描述

DataElement的Tag

DataElement的Tag用於標識Element的資料內容,比如病人資訊、影像的格式等。Tag總共有2000多個,常用的主要組號:0002組描述裝置通訊,0008組描述特徵引數,0010組描述患者資訊,0028組描述影像資訊引數。

Dicom檔案資料中所有dataElement從前到後按tag又可簡單分段:檔案元Tag,普通Tag,畫素Tag。
1) 檔案元Tag(組號+0000):不受傳輸語法影響,總是以顯示VR方式表示,用於定義了傳輸語法;檔案元Tag的dataElement,並沒有多大的意義,它的值長度是整個組所有DataElement的位元組長度,一個Dicom中可以只有一個檔案元Tag,也可以有多個檔案元Tag。
2) 普通Tag:除了檔案元Tag和畫素Tag,其餘的都是普通Tag資料。包括:影像寬,高,資料傳輸格式,病人姓名,病人生日,病歷醫院,病歷科室,病情的描述等等資料;
3) 畫素Tag(7fe0,0010):表示DataElement儲存的是病歷的影像資料。

DataElement的VR

VR(Value Representation)值表示法是DICOM檔案中特有的一種資料型別表示方式,規定了不同資料型別的含義及儲存格,共有27種VR。在隱式VR的結構中會根據元素標識進行判斷。Tag和VR是有對應關係的,每一種Tag其實是有一個固定的VR型別。

DataElement的資料長度

資料長度用兩個位元組儲存了資料元素值的長度,所有DICOM資料元素都應該為偶數長度,若為奇數,追加空格或空NULL。當資料長度為0xFFFFFFFF時,資料一直到截止符為止。

現有的解析庫

基於C++的DCMTK
基於Java的dcm4che
基於python的pydicom
基於C#的fo-dicom【本次專案基於fo-dicom實現】

通過在工程中引入它們可以避免軟體開發人員去進行底層的解析工作,可為專案開發提高效率。

相關文章