學習使用DCMTK工具

2021-08-16 19:15:47 字數 3908 閱讀 7400

學習使用dcmtk工具

一、了解dicom

1、dicom語法

dicom維護乙個所有標準屬性(超過2000個)的列表,即所謂的dicom資料字典(dicom data dictionary)。dicom依靠資料字典來保證屬性命名和處理的一致性。

把這些超過2000個的專案按照一定順序排列,所有專案首先被分成編號的專案組(group)(如果專案內容的大概相似就分為一組)。專案組是由單獨的元素組合在一起的。因此,每個專案都有其自己的編號「(專案組,元素)」,這就是所謂的元素「標籤(tag)」。 所有進行標籤的元素都稱作「屬性(attribute)」,或 者dicom「資料元素(data element)」 或簡稱為dicom「元素」。專案組和元素都是用十六進製制數字編號的,「(專案組,元素)」標籤唯一地對應屬性名稱。

摘錄(group,element) tag

(專案組,元素)標

籤attribute(data element) name

屬性(資料元素)名稱

vrvm

(0008,0001)

length to end

到結尾的長度

(0008,0005)

specific character set特定的字符集

cs1-n

(0010,0010)

patient name

病人姓名

pn(0010,0020)

patient id

病人id

lo(0010,0030)

patient』s birth date

病人出生日期

da(0010,0032)

patient』s birth time

病人出生時間

tmvr:值表現,dicom標準在ps 3.5中定義了27個基本資料型別,每個vr都有他自己兩個字母的縮寫;表示內容的定義;資料中允許出現的字母描述;以及規定的資料長度。

vm:資料元素值多樣性。

2、dicom服務命令

處理復合(composite)資料的dimse服務稱作「dimse-c」服務;而處理常規資料的dimse服務稱為「dimse-n」服務。「c」和「n」這種標記經常會作為服務名稱的字首,放在服務名稱之前。

例子:c-echo:用來校驗乙個dicom ae是否與另乙個ae建立了連線。

c-store:承載著要儲存的資料。

c-find:在c-find服務提供者(如數字歸檔)那裡進行匹配的查詢引數。

3、dicom通訊

連線建立的兩端都成為ae,為了區分服務請求者和服務提供者,dicom稱前者為服務類使用者(service class users,scu),稱後者為服務類提供者(service class providers,scp)。

請求連線(呼叫)的ae建立並傳送乙個a-associate-rq訊息,即向接收(被呼叫)的ae發出請求,要求其開啟乙個連線。這個訊息由多個呈現上下文(我們的名片),以及附加的使用者資訊資料打包而成,其中使用者資訊資料描述了ae初始化連線的能力(使用者所用的請求ae)。接收ae會檢視所有建議的通訊引數,如果連線被接受,它會選擇最合適的引數,並返回乙個a-assciate-ac訊息。

二、了解dcmtk

1、dcmtk編譯

2、dcmtk工具介紹

scu -->  scp  傳送dcm檔案

storescp.exe是dcmtk工具包中用於接收dicom影像並進行儲存的服務端程式

scu -->  scp  查詢內容

scp: wlmscpfs.exe-dfr -dfp wlistdb 104

scu: findscu 127.0.0.1 104 wlistqry/wlistqry.wl -aec offis

findscu 192.168.1.7 4007 -aec "myonly" -v -k0008,0052="study" query.dcm -s

findscu.exe -v -w -k 0008,0060=dr -aecdicomworklist -x 127.0.0.1 3000 worklist.dcm

如果需要查多個值,只需要重複寫-k 0008,0060=dr 這個引數,當然你需要查出來你所需要的屬性所對應的兩個4位碼。

-k 0010,0020="123456"   patientid欄位為123456的患者資料

-dfr表接受欄位不完整的dicom檔案作為查詢內容;

-dfpwlistdb 表wlmscpfs.exe搜尋的資料夾的路徑,可以為絕對路徑;

104  為工作列表程式的埠號;

movescu192.168.1.7 4008 -aec "myonly" -v -k0020,000d="1.2.840.113619.2.67.2158294438.15745010109084247.20000"move.dcm -s

scp接受多項服務

d:\dcmtk\bin\dcmqrscp.exe -d --configdcmqrscp.cfg   

scu:測試是否能連線

d:\dcmtk\bin\echoscu.exe -d localhost 11110-aec acme_store -aet acme1

d:\dcmtk\bin\echoscu.exe -d 192.168.1.65104 -aec acme_store

scu:傳輸dcm檔案

d:\dcmtk\bin\storescu.exe -d localhost11110 d:\ct.dcm -aec acme_store

scu:查詢dcm檔案

d:\dcmtk\bin\findscu.exe -d 127.0.0.1 11110-k queryretrievelevel=study -k 0010,0010 -k 0010,0020 -k 0020,0010 -aecacme_store -v -s

d:\dcmtk\bin\movescu.exe -d 192.168.1.65104 +p 5003 -aec acme_store -k queryretrievelevel=study -k 0010,0020=7637 -odd:\dicom\worklist\

dcm -->  bmp  轉換檔案

dcm2pnm.exe +obct.1.2.840.113704.9.4021.3.1.1.200927949440ct.1.2.840.113704.9.4021.3.1.1.200927949440.bmp

解析資料

dcmdump.exe d:\ct.dcm

dcmqrscp.cfg:

networktcpport  = 104

maxpdusize      = 16384

maxassociations =16

hosttable begin

echoscu            = (echoscu, ywu-pc, 5000)

findscu            = (findscu, ywu-pc, 5001)

storescu           = (storescu, ywu-pc, 5002)

movescu             = (movescu, ywu-pc, 5003)

acmectcompany   = echoscu, findscu, storescu, movescu

hosttable end

vendortable begin

"acme ctcompany"   = acmectcompany

vendortable end

aetable begin

acme_store    d:\dicom\dcmscuscp   rw (9, 1024mb)   acmectcompany

aetable end

DCMTK工具使用(搭建小型PACS)

echoscu 執行dcmprscp後服務就啟動了,接下來需要使用echo確定是否能聯通服務端,命令如下 echoscu aet acme1 aec local2 d 172.16.119.129 10086 aec是服務的aet,172.16.119.129是服務端位址,如果是本地的話可以輸入12...

使用dcmtk進行worklist服務的測試方法

伺服器端,把dcmtk 3.5.4 dcmwlm wlistdb offis目錄下的檔案通過dump2dcm轉換到l dcmtk testwlmscpfs offis目錄下,用如下語句啟動 wlmscpfs v dfp l dcmtk testwlmscpfs 666 客戶端,把dcmtk 3.5....

DCMTK學習筆記2 建立工程,執行案例

iphlpapi.lib ws2 32.lib wsock32.lib netapi32.lib ofstd.lib oflog.lib dcmdata.lib dcmdsig.lib dcmnet.lib dcmsr.lib dcmimgle.lib dcmqrdb.lib dcmtls.lib ...