【转】DICOM命令集和数据集解析!!
轉自:DICOM命令集和數據集解析 - 微笑的艾米 - 博客園
摘?? 要:本文通過分析一個典型的DICOM消息,詳細地解析了DICOM命令集和數據集的構成方式和其含義。并在此基礎上,提出了一種實現DICOM命令集和數據集解析的實施方案,并對該種方案的設計思路和具體實現方法進行了詳細的闡述。
關鍵詞:醫學數字成像及通信標準,信息對象定義,服務對象對
1.???????前言
DICOM(Digital Imaging and Communications in Medicine)是醫療設備的國際標準通信協議,它為在不同醫療設備之間對醫學圖像等數字信息進行各種命令操作定義了統一的規范?,F在,越來越多的醫療設備生產廠家開始施行并支持DICOM標準?,F在廣泛使用的版本是DICOM3.0。
在本文中,利用一個實例來分析DICOM協議是如何利用DICOM命令集和數據集在不同醫療設備之間進行圖像存儲操作的,并在此基礎上,提出了一個解析DICOM命令集和數據集的實現方案。
2.????信息對象定義
DICOM是一個數字醫學圖像的網絡通訊接口標準。基于此,將現實世界中的實體進行抽象數據化是制定標準的一個重要步驟。DICOM標準描述了許多信息對象類(Information Object Class,簡稱IOC)。這些信息對象類為現實世界中能夠以數字醫學圖像這種方式通訊的實體提供了一個面向對象的抽象定義,這個定義稱作信息對象定義(Information Object Definition,簡稱IOD)。一個信息對象定義(IOD)是由若干包含相關信息的信息實體組成。每一個信息實體對應著DICOM應用模型中的現實世界實體(如患者、圖像等)的一個數據抽象。每個信息實體是由若干屬性組成的,屬性是現實世界實體性質(如患者的姓名、年齡、圖像的成像日期等)的抽象。在DICOM標準中,每個屬性用一個數據元素來描述,而一個信息實體的相關屬性的集合則用數據集來描述。
3.?服務對象對
面向對象的設計不僅描述了對象本身的屬性,同時還說明了怎樣處理這些對象的方法。DICOM標準就是利用這個概念,定義了諸如存儲圖像、獲取病人信息之類的服務。由于是面向對象的設計,故服務又被稱作服務類。一個服務類由若干個相關的服務對象類(Service Object Pair Class,簡稱SOP Class)組成。SOP類是DICOM標準中定義的基本功能單位。對于一個特定的SOP類來說,一臺裝置可能扮演以下兩個角色:一:服務類提供者(Service Class Provider,簡稱SCP),扮演這個角色的機器提供SOP類的服務,它相當于客戶/服務器模型中的服務器(Server);二:服務類使用者(Service Class User,簡稱SCU),扮演這個角色的裝置使用SOP類的服務,它相當于客戶/服務器模型中的客戶。例如一臺成像裝置要打印一幅圖像,在這種情況下,該成像裝置為與打印相關的SOP類的SCU,打印機為SCP。一個SOP類的一次具體實現稱作服務對象對實例,存儲圖像、獲取病人信息等操作就是通過SOP實例實現的。
圖1形象地描述了SOP類及其實例的關系。
????
?????????動詞:Store ??服務(DIMSE)
????????????名詞:MRI?Image ??信息對象定義IOD
一般句子:Store?a?MRI?image ??SOP類
特指句子:Store?this?MRI?image ??SOP實例
?????????????
圖1 SOP類與實例
4.???????DICOM消息
一個SOP類被定義為一組特定的服務與一個相關的信息對象(IOD)的結合,一個SOP類的具體實現是通過DICOM消息的交互完成的。
在DICOM標準中,DICOM消息由命令集和數據集組成,其中數據集描述現實世界信息對象的一個實例,而命令集則描述對這個信息對象實例做何種操作。命令集由若干個命令元素組成,每個命令元素由標簽域、值長度域和值域組成。而數據集由若干個數據元素組成,每個數據元素由標簽域、數據表示類型域(可選域)、值長度域和值域組成。
無論是在命令集還是數據集中,標簽都唯一的標識一個命令或者數據元素,元素必須按標簽的升序依次排列,且每個元素一般最多只能出現一次(嵌套除外),元素標簽由一對組號和元素號組成,兩者均為16位無符號整數;值長度域是以字節數表明值域的長度,其值必須為偶數;值域包含了有關操作命令的屬性值(針對命令元素而言)或者現實世界信息對象實例的屬性的具體值(針對數據元素而言),其長度是可變的,但是不能超過值長度域所規定的長度。
在數據集中,數據表示類型域是一個可選項,說明值域的類型。當元素中包含該域時,稱作顯式VR(Value Representation),否則稱作隱式VR。
下面的表格描述了一個典型DICOM消息,其中數據集描述了一個圖像的具體實例,而命令集的含義則是請求對該圖像實例做存儲(C-STORE)服務,很顯然,這是一個從SCU發往SCP的存儲(C-STORE)請求(REQUEST)消息。其中組號為0000的元素為命令元素,其它為數據元素。如表1所示。
表1 C-Store服務的DICOM請求消息
| 組 | 元素 | 長度 | 值 | 意義 | 說明 |
| 0000 | 0000 | 0004 0000 | 0056 0000 | 從本字段的結束至下一組開始的偶數字節 | |
| 0000 | 0001 | 0004 0000 | 01A0 0010 | 從本字段的結束至報文結束的偶數字節 | |
| 0000 | 0010 | 000C 0000 | 4341 2D52 454E 414D 3120 302E | “ACR-NEMA 1.0” | 識別碼 |
| 0000 | 0100 | 0002 0000 | 0001 | 0001H | 命令字段=C-Store-Request |
| 0000 | 0110 | 0002 0000 | 123A | 123A | 由成像裝置生成的報文識別號 |
| 0000 | 0200 | 0004 0000 | 4344 3148 | “DCH1” | 發送者邏輯地址 |
| 0000 | 0300 | 0004 0000 | 4341 3148 | “ACH1” | 接收者邏輯地址 |
| 0000 | 0800 | 0002 0000 | 0000 | 0000H | 數據類型=圖像 |
| 0008 | 0000 | 0004 0000 | 0080 0000 | ||
| 0008 | 0001 | 0004 0000 | 013E 0100 | ||
| 0008 | 0010 | 000C 0000 | 4341 2D52 454E 414D 3120 302E | “ACR-NEMA 1.0” | 識別碼 |
| 0008 | 0020 | 000A 0000 | 3032 3230 312E 2E31 3532 | “2002.11.25” | 分項檢查日期 |
| 0008 | 0030 | 0008 0000 | 3231 303A 3A35 | “12:05:59” | 分項檢查時間 |
| 0008 | 0040 | 0002 0000 | 0000 | 0000H | 數據集類型=圖像 |
| 0008 | 0060 | 0002 0000 | 5254 | “DR” | 成像模式 |
| 0008 | 0070 | 0004 0000 | 4241 4443 | “ABCD” | 制造商 |
| 0008 | 0080 | 000E 0000 | 454D 4352 2059 4F48 5053 5449 4C41 | “Mercy Hospital” | 醫院識別號 |
| 0008 | 0090 | 0000 0000 | 檢查醫師未知 | ||
| 0010 | 0000 | 0004 0000 | 0042 0000 | 組長度 | |
| 0010 | 0010 | 000E 0000 | 4F4A 454E 2C53 4A20 4D49 4320 202E | “JONES, Jim C. “ | 患者姓名 |
| 0010 | 0020 | 0008 0000 | 3031 2D32 3033 2034 | “102-304 “ | 患者識別號 |
| 0010 | 0030 | 000A 0000 | 3931 3632 312E 2E31 3532 | “1926.11.25” | 患者出生日期 |
| 0010 | 0040 | 0002 0000 | 204D | “M “ | 患者性別=男 |
| 0018 | 0000 | 0004 0000 | 0000 0000 | 組長度為零—無其它元素傳送 | |
| 0020 | 0000 | 0004 0000 | 0018 0000 | 組長度 | |
| 0020 | 0010 | 0004 0000 | 3932 3330 | “2903” | 分項檢查號 |
| 0020 | 0020 | 0004 0000 | 5C52 2046 | “R/F” | 患者取向 |
| 0028 | 0000 | 0004 0000 | 002C 0000 | 組長度 | |
| 0028 | 0010 | 0002 0000??? | 0400 | 0400H | 行數=1024 |
| 0028 | 0011 | 0002 0000 | 0400 | 0400H | 列數=1024 |
| 0028 | 0030 | 0006 0000 | 2E20 5C33 332E | “ .3\.3” | 像素的實際尺寸=0.3*0.3像素 |
| 0028 | 0100 | 0002 0000 | 0008 | 008H | 每個像素指定的位數=8 |
| 7FE0 | 0000 | 0004 0010 | 0008 0010 | 組長度 | |
| 7FE0 | 0010 | 0000 0000 | *******…***** | 像素數據(524,288字節) |
5.???????編碼
在實際應用中,利用兩個基類CElement和CElementSet分別表示數據元素(或者命令元素)以及這些元素集合的抽象,并且描述各自的基本特征屬性。利用這兩個基本類可以派生出其它類。例如,我們利用類CElementSet的一個派生類DcmFile來描述一個DICOM圖像文件,在這個類中,我們實現了兩個主要方法loadDcmFile()和writeToDcmFile(),它們的含義分別是從指定的路徑下讀取DICOM圖像文件和把數據集中的所有數據元素還原成指定路徑下的DICOM圖像文件;同樣,我們利用類CElementSet的另外一個派生類CommandSet來描述一個命令集,它包含兩個主要方法getCmdValue()和getDataType(),其含義分別是獲取此命令集描述的服務和消息類型以及獲取此命令集的操作對象(數據集)所描述的信息實體類型。
在解析一個命令集(或者數據集,例如一個DICOM圖像文件)時,可以以標簽為標識,讀出感興趣的命令元素(或者數據元素),并將該命令元素(數據元素)作為類CCommandElement(或者類CDataElement,均為類 CElement的派生類)的一個實例來處理。
例如在解析表1的DICOM消息時,首先應該讀取它的命令集,即組號為0000的元素。讀取的每個命令元素作為類CCommandElement (類CElement的派生類)的一個實例存在,而讀取的所有命令元素的集合作為類CommandSet的一個實例存在。然后,再利用CommandSet提供的方法getCmdValue()和getDataType()獲取此命令集描述的服務和消息類型以及此命令集的操作對象(即數據集)所描述的信息實體類型。在本例中,根據DICOM標準,由于命令集中標簽為[0000,0010]的值域的具體值是0001H,所以,該命令集所描述的是C-STORE服務請求,而標簽為[0000,0080]的值域的具體值是0000H,因此,該命令集的操作對象(即數據集)的類型是圖像。綜合起來,這個DICOM消息的含義就是存儲封裝在數據集中的圖像文件。
解析完命令集后,根據解析結果,再讀取同一個DICOM消息中的數據集,即組號不是0000的元素,這里,將每個讀取的數據元素作為類CDataElement(類CElement的派生類)的一個實例存在,而讀取的所有數據元素的集合作為類DcmFile的一個實例存在。然后,調用類DcmFile所提供的writeToDcmFile()方法,將這些數據元素還原成圖像文件的形式并加以存儲。最后,根據命令執行的成功與失敗,構造一個響應信息,返回給服務請求端。
6.結束語
DICOM標準是第一個廣為接受的醫療設備間通訊的國際標準,它作為一個計算機和醫學相關聯的紐帶起著非常重要的作用。
本文通過分析一個典型的DICOM消息,詳細地解析了DICOM命令集和數據集的構成方式和其含義。并在此基礎上,提出了一種實現DICOM命令集和數據集解析的實施方案,并對該種方案的設計思路和具體實現方法進行了詳細的闡述。實現DICOM命令集和數據集的解析為遠程醫療應用提供了基礎。
參考文獻
1.?????? National Electrical Manufacturer Association. Digital Imaging and Communication in Medicine(DICOM)[S],1999
2.?????? 賈克斌,沈波. 實現醫學影像存檔和傳輸系統中的若干關鍵技術[J]. 中國圖像圖形學報,2000,5(A)(7):539-544
總結
以上是生活随笔為你收集整理的【转】DICOM命令集和数据集解析!!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 兴业虚拟信用卡可以办分期吗
- 下一篇: python image 转成字节_就是