本文主要講述dicom標准及dicom通訊的工作方式。dicom全稱醫學數字圖像與通訊 其實嘛就兩個方面 那就是“存儲”跟“通訊”。 文件數據組織方式 網絡數據組織方式。文件數據組織方式就是解析靜態的dicom文件 在 《dicom格式文件解析器》一文中已經闡述過了 就不再說了。網絡數據組織方式 簡而言之就是各種協議 命令控制 數據序列化。那麼這一章中我們將會講他,但是進行實際操作將在後面幾章。
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本實體的系統配置信息
用戶或系統設計人員通過對比兩種不同實現的一致性聲明 就能夠判斷出兩個系統是否可以進行互操作和通訊
---------------------------------------------------------------------------
說得那麼復雜 其實主要就是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