學習使用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 ...