天天看點

dicom通訊的工作方式及dicom标準簡介

     本文主要講述dicom标準及dicom通訊的工作方式。dicom全稱醫學數字圖像與通訊 其實嘛就兩個方面 那就是“存儲”跟“通訊”。 檔案資料組織方式  網絡資料組織方式。檔案資料組織方式就是解析靜态的dicom檔案 在 《dicom格式檔案解析器》一文中已經闡述過了 就不再說了。網絡資料組織方式 簡而言之就是各種協定 指令控制 資料序列化。那麼這一章中我們将會講他,但是進行實際操作将在後面幾章。

又一篇詳盡的Dicom協定介紹:

http://blog.csdn.net/zssureqh/article/details/41016091

dicom标準簡介

dicom相關單詞整理

association            關聯

acquire               影像擷取

window level           窗位

RSNA                 北美放射學會

vendor               供應商

tag                    資料字典 即常說的Tag 以資料元素為機關

IOD                  資訊對象定義 比如病人、 系統 都是IOD ,但是IOD隻是他們的定義 并不特指某個執行個體

                   dicom使用UID 在網絡環境下辨別各種IOD對象

                   1.2.840.10008.5.1.4.1.1.2 這個特定的UID其實是代表CT圖像存儲

service class           服務類 store query print c-echo

SOP                 服務對象對 IOD跟服務類的結合  表述傳輸的這個資料對象需要對它進行什麼樣的處理

VR:                  Value Representation 可選字段:依賴于傳輸文法的值類型         

modality               成像儀)                   

LUT                      look up table

PDU                     協定資料單元

modality            成像裝置

VM                   值的多樣化

SCU/SCP              (Service Class User/Service Class Provide)服務使用者跟服務提供者

HU          射線相對于水的衰減系數之比 稱之為CT值 機關為HU (hounsfield unit)

dicom是一個全球的通訊标準

他是在以下大大的共同努力下開發出來的:

ACR(美國放射學學院)

NEMA(美國電氣制造商協會)

ESC(歐洲心髒病學會)

ACC(美國心髒病學院)

SFR(法國興業法國放射科)

DRG(DeutschenRöntgengesellschaft)

AAO(美國眼科學會)

AAD(美國皮膚病學會)

CAP(美國病理學院)

JIRA(Japaneese放射供應商協會)

COCIR(歐洲放射供應商協會)

...

dicom在93年十月被準許

dicom文檔每年更新

DICOM 2003,是DICOM2001的相容擴充

+27項變更

+3項補充說明

全球工程文檔:

http://global.ihs.com

免費網址:http://medical.nema.org/dicom.html

DICOM 3.0, DICOM 96, DICOM 98, DICOM 99, DICOM 2000,

DICOM 2001, DICOM 2003

隻是文檔釋出名稱而已

這對現有産品一緻性并沒有直接影響

dicom包括:

影像管理 dicom網絡圖像傳輸 dicom網絡列印

網絡支援,例如。 TCP / IP協定

和。。。多媒體交換/歸檔

dicom的4個主要功能:

影像管理(其實就是指worklist)  影像查詢檢索  影像存儲 硬拷貝

在今天我們能用dicom做什麼實質性的東西?

。dicom能在大多數醫學成像系統之間跨平台

。建立簡單易于實作的網絡

。提高生産效率

。建立未來PACS的必要步驟

dicom編碼 :以連續的dataElement的形式進行編碼

message=data set

發送者->DataElement    DataElement    DataElement->接收者

每個element的結構又如下:

Tag VR Value|    Length|    Value|    Field

tag: 在dicom資料字典裡的唯一tag定義

VR: Value Representation 可選字段:依賴于傳輸文法的值類型

dicom 标準由14部分組成

1簡介 introduction and overview

2一緻性聲明 這個是廠商自己對外公開的純文字性的說明

3資訊對象定義IOD 分為簡單型 複合型

4 服務類規範 service class specifications 就是對服務類的結構進行說明要實作那些接口 主要描述指令及其産生的結果

5資料結構和編碼 怎樣對資訊對象類和服務類進行構造和編碼

6資料字典 所謂的資料字典就是鍵值對 即屬性 一個IOD由多個屬性 也就是資料字典組成

7消息交換 MessageExchange 定義通訊所用到的服務和協定 一個典型的dicom消息由一個指令和緊随其後的資料流(可選)組成 這裡定義了各服務類所發送和接收的消息 并闡述了以下規則:

建立和終止關聯(association)的規則

控制交換網絡指令請求和響應的規則

用于建造指令流資料和消息的編碼規則 其實就是說怎樣去組織這個用于完成特定功能的網絡流

服務類的指令和IOD資料都要經過編碼成指定結構的資料流才能形成消息 明白了嗎 用戶端請求列印的時候會說 我要列印這些東西:然後是資料服務指令跟IOD一起包裝成套接字資料流

8消息交換的網絡通訊支援 大概是說消息交換的底層的東西吧

9消息交換的點對點通訊支援 這個是為了相容 nema2.0 也就是dicom2.0而定義的東西 不用管

10資料媒體存儲和檔案格式 說白了這個是描述那些字尾為.dcm的檔案組織方式的

11媒體存儲政策 不用管

12資料交換的存儲功能和媒體格式 不用管

13點對點通訊支援的列印管理 不用管

14灰階顯示功能 grayscaleStandardDisplayFunction 這個有用規定了灰階級顯示裝置的标準 顯示方式

2~9部分是重點内容

一個裝置或診斷系統為一個應用實體

如果廠商的裝置聲稱支援dicom 那麼都應該有一緻性聲明,就是說你到底怎麼個支援法。

一緻性聲明包括:

1本系統支援的dicom資訊對象

2本實體支援的服務類 不同的廠商可支援不同的服務類 。這展現了dicom是一個可擴充的面向對象的标準

3支援的協定

4所支援的表示上下文資訊

5本實體的系統配置資訊

使用者或系統設計人員通過對比兩種不同實作的一緻性聲明 就能夠判斷出兩個系統是否可以進行互操作和通訊

---------------------------------------------------------------------------

dicom通訊的工作方式:

說得那麼複雜 其實主要就是soket的dimse通訊 而dimse是屬于應用層的就跟http協定ftp協定一樣。 就是socket上的資料流而已 隻不過這種特定的資料組織方式稱之為dimse 。就是說你要自己去實作一個類似http的協定。

dimse由指令集跟資料集組成

指令集指導目标怎樣去操作某種東西,資料集就是指“待操作的東西”其實就是指廚師做菜的“材料”。 也不一定所有的都一定要有資料集。比如“我想擷取你的機器狀态”, 請求端就不需要資料集。有些需要資料集,比如“我給你個圖像 你把它拿去存儲”就需要資料集。指令集你可了解為通過各種各樣不同的指令一起完成了某件事情某個服務。資料集了解為IOD的執行個體化 比如病人姓名 病人年齡 等tag 一起組成了一個病人執行個體。dicom就是通過這種服務類跟IOD的組合在兩個應用實體間正确的“傳達意圖”。進而兩個裝置之間進行互操作,這是dicom裝置通訊和互操作的核心思想。

但是在這之前還得進行一件事情 那就是表達上下文協商。

什麼叫表達上下文

表達 想象一下人與人之間的交流,我們需要的是正确的傳達意圖 傳達内容,計算機也是一樣,但是他們之間先得确定一個一緻的方式。從來沒有聽說我跟朋友聊天還需要協商表達上下文哇 。我勒個去 在現實社會之中我們進行交流可能從來沒有意識到他的存在 因為我們在這個環境中生活的太久了 也沒有語言障礙 覺得理所當然。表達上下文主要有兩個東西 absSyntax 跟transferSyntax absSyntax确定了将要做的事 transferSyntax确定了編碼規則。由此可見表達上下文是為了确定兩個東西 以讓目标計算機能正确的“了解”本地主機所發出的資料。協商的内容 兩個實體對同一個應用上下文達成共識。

dicom 的協商過程到底在協商些什麼  一件事情的表達 讓雙方都能夠了解 分為詞彙跟語義 ,tag就是所謂的詞彙 那個tag表示什麼指令 哪個tag表示病人姓名。 而資料組織方式就是語義 。通過這樣的協商讓雙方才能夠進行正常的dicom通訊

達成共識後我們就需要建立連接配接

上文說了那麼多 但是dimse的基礎資料機關是data-element 和pdu

所有資料都封裝在TCp協定資料單元(PDU)中進行傳輸 該層負責TCP連接配接的建立 釋放以及TCP上PDU的傳送和接收 為Dicom上層協定提供TCP連接配接服務DICOM上層服務包括A-ASSOCLATE A-RELEASE A-ABORT P-DATA A-P-ABORT五種服務。這些上層服務允許對等的dicom應用之間建立連接配接 傳送資料 中斷連接配接 DICOM應用實體就是利用這些上層服務來完成消息傳送和資訊交換。

PDU是一種資料結構 dataElement是一種資料結構

pdu結構總共7種 其中用于連接配接控制的就占了6種

A-Associate—RQ PDU

連接配接請求協定資料單元,用于關聯請求。

A-Associate.AC PDU

基于DICOM标準的醫學圖像通信過程的實作

連接配接接受協定資料單元,

A.Associate—RJ PDU

連接配接拒絕協定資料單元,

A-Release-RQ PDU

用于對關聯請求的應答。

用于拒絕關聯請求。

連接配接釋放請求協定資料單元,

A-Release.RSP PDU

連接配接釋放響應協定資料單元,

A.Abort PDU

傳輸内容的pdu隻有一種P.DATA.TF PDU,

當通訊雙方建立了關聯之後,就可以使用P.DATA-TF所提供的傳輸服務來實作不同的通信功能了。在最新的DICOM3.0标準中,共列舉出11個通訊服務類。其中有5個針對複合IOD的操作,包括C.STORE、C.GET、C-MOVE、C.FIND和C-ECHO;AET唯一的标示了網絡中指定系統上的服務或者應用

是以整個通訊過程應該是 應用層也是就是程式段提出需求我需要做什麼 比如存儲一幅CT圖像 ,然後根據各種參數及IOD 确定服務原語 dimse 服務類規範,根據各種參數确定dimse 。然後把這些東西序列化為pdu的方式通過tcp傳輸出去

從低到高分為五層:TCP Socket層、DICOM上層協定層、消息層、DIMSE(DICOM Message Exchange)層、SCU/SCP層。

TCP保證資料的可靠性傳輸。

dicom上層協定 ul upLayer(ULP)

其實就是指的那幾個associate-RQ RJ 啥的 用來建立關聯釋放連接配接

實作DICOM上層協定層,主要是在TCP Socket的基礎上,接收來自TCP網

絡的資料流,并按照DICOM協定單元關聯過程中的A.Associate.RQ/AC的資料結

構分析資料流,然後根據分析的結果,傳回相應結構的資料。其核心就是動态接

收資料,并實時對資料進行分析,解析出A.Associate-RQ中的各種參數,并做出

A.Associate.AC回應,完成關聯過程。關聯過程一旦完成,SCU與SCP之間就可

以實作DICOM中規定的其它服務類操作。

然後就是dimse層(連接配接建立後的資訊交換單元) ,C-Find 那些屬于dimse 具體表現為 P.DATA.TF PDU。

dicom應用實體在通信時的流程是:接收指令->确定角色->構成SOP->編碼(生成消息資料)->消息資料裝進PDU->通過套接字socket将PDU發出。其中的編碼部分就是消息層的主要工作。生成的消息由指令集合和資料集合組成。意思是dimse層主要是對SOP進行編碼? 而SOP由服務類跟IOD組成 比如用c-store存儲一幅圖像 貌似就是指的c-get  c-move c-find n-get那些東西?他們分為兩種操作operation 和傳回狀态notification dicom3.0裡面規定的dimse服務中隻有n-event-report 是notification其他的全是operation

然後是scu/scp層 就是啥服務類啊 那些大的功能 比如我想實作一個網絡列印,我想實作一個圖形存儲

原語是個什麼東東

C-STORE C-FIND那些是屬于DIMSE的 他包括各種亂七八糟的服務原語?

DICOM上層協定是指建立關聯 associate 釋放連接配接 那些?

socket層 負責發送P-DATA PDU資料?DICOM最底層的代碼?

DIMSE消息服務層的主要功能就是将SCU/SCP層的通信需求轉換成DICOM中規定的各種消息服務原語,然後将消息服務原語傳給下一層

dicom網絡底層 是用PDu的形式進行交換 pdu總共有7種類

其中有6種是專門用來建立釋放連接配接的 隻有一種是用來資訊及資料交換的

在以後的幾篇我們将手把手的分析一個dicom網絡列印的通訊過程 并實作dicomPrint_SCP