基于DCMTK的DICOM相关程序编写攻略
?
2008年09月10日 星期三 15:35
基于DCMTK的DICOM相關程序編寫攻略
前言:
?????? 由于現在的醫學影像設備的圖像存儲和傳輸正在逐漸向DICOM標準靠攏,在我們進行醫學圖像處理的過程中,經常需要自己編寫和DICOM格式的圖像相關的各種程序模塊,以完成自己處理功能。如果從頭開始理解DICOM的協議,然后完全自己編寫這些代碼來實現這些協議,是一件工程浩大的事情。德國offis公司開發的DCMTK,為我們提供了實現DICOM協議的一個平臺,使得我們可以在它的基礎上輕松的完成自己的主要工作,而不必把太多的精力放在實現DICOM協議的細節問題上。本文以WINDOWSXP+VC6.0為開發平臺,從DCMTK的下載、調試、使用等方面介紹基于DCMTK的DICOM相關程序編寫過程。
一、???????????? DCMTK簡介
?????? DCMTK是由德國offis公司提供的開源項目,并擁有相應的版權。這個開發包經過10多年的開發和維護,已經基本實現了DICOM協議的所有內容。該開發包提供所有的源代碼、支持庫和幫助文檔。DCMTK提供了在各種操作系統下使用的可能版本,如LINUX、SUN、WINDOWS等,用戶可更具自己的開發平臺進行編譯。目前DCMTK的版本是3.5.3。
二、DCMTK的下載和調試
?????? DCMTK公司的主頁是: http://dicom.offis.de。
1、首先下載DTMTK源代碼。可以通過以下地址:ftp://dicom.offis.de/pub/dicom/offis/software/dcmtk/dcmtk353/dcmtk-3.5.3.zip
2、下載相關的支持庫:
ftp://dicom.offis.de/pub/dicom/offis/software/dcmtk/dcmtk353/support/dcmtk-3.5.3-win32-i386-support.zip
3、安裝或調試。
?????? (1)首先是將DCMTK的源代碼解壓后和它的支持庫放在同一個目錄下面。
?????? (2)使用CMake軟件得到DCMTK的工程文件。
?????? 使用MAKE工具CMake,不僅可以創建DCMTK編譯項目文件,還可以對DCMTK進行配置。步驟如下
?????? ①從http://www.cmake.org/HTML/Download.html下載CMake for Windows最新的版本。
?????? ②安裝CMake并對CMake的如下選項進行設置(設置前需先刪除原來的舊項目文件):如圖1所示
??? Where is the source code: dcmtk-3.5.3 path
??? Where to build the binaries: dcmtk-3.5.3 path
??? Build for: Visual Studio 6
??? Configure --> Modify Cache Values! --> Configure
??? OK!
圖1。使用CMake創建DCMTK編譯項目文件
?????? (3)用VC6打開項目文件DCMTK.dsw進行編譯,根據提示,在編譯環境(Tools->Option->Directories)中加入相應的頭文件和庫文件。
?????? (4)DCMTK的編譯可能需要比較長的時間,過程中也可能出現各種連接錯誤,大都有編譯環境引起。
三、基于DCMTK的DICOM相關程序。
?????? 1、建立自己的應用工程并將其加入DCMTK的工作空間(Project->Insert Project To WorkSpace)。
?????? 2、在自己的工程中加入需要使用的DCMTK靜態庫和頭文件。
?????? 按照正確的順序填寫鏈接庫文件(對于鏈接庫來說順序也是很重要的!) DCMTK庫有下面這些依賴關系:
?????? dcmdata -》 ofstd
?????? dcmimage -》 dcmimgle, dcmdata, ofstd
?????? dcmimgle -》dcmdata, ofstd
?????? dcmjpeg -》ijg8, ijg12, ijg16, dcmimage, dcmimgle, dcmdata, ofstd
?????? dcmnet -》dcmdata, ofstd
?????? dcmpstat -》 dcmimage, dcmimgle, dcmsign, dcmsr, imagectn, dcmtls, dcmnet, dcmdata,?????? ofstd
?????? dcmsign -》dcmdata, ofstd
?????? dcmsr -》dcmdata, ofstd
?????? dcmtls -》dcmnet, dcmdata, ofstd
?????? dcmwlm -》dcmnet, dcmdata, ofstd
?????? imagectn -》 dcmnet, dcmdata, ofstd
?????? 3、編譯自己的工程。
4、不成功的可能有如下一些問題。
?????? (1)對于單文檔工程,運行時提示:
?????? generated debug assertion
?????? if (!ProcessShellCommand(cmdInfo))
?????? return FALSE;
?????? -- File: docsingl.cpp
?????? Line: 215
原因:缺少AFX_IDS_UNTITLED的字符串
解決:在資源文件的STRING TABLE中加入 ID= AFX_IDS_UNTITLED的鍵值。
?????? (2)編輯時提示:
fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds
原因:
解決:在Project->Settings->Preprocessor definitions中去掉 _AFXDLL項。
?????? (3)編譯時提示:
LIBCMTD.lib(dbgheap.obj):error LNK2005: _malloc already defined in msvcrtd.lib(MSVCRTD.dll)
原因:由于VC在編譯時試圖從兩個不同的庫中寫入同一個函數代碼,只要忽略這些相沖突的默認庫就可以解決。
解決:在Project->Settings->Link->Category->Input—>Ignore Liberies中加入
相應的msvcprtd.lib,msvcrtd.lib等。
另一種解決:保證自己的編譯環境為:
?????? A)project->settings->c/c++->category->code generation的use run-time library 為debug multithreaded.
?????? B) 在Project->Settings->Preprocessor definitions中去掉 _AFXDLL項。
?????? C)如果需要,在資源文件的STRING TABLE中加入 ID= AFX_IDS_UNTITLED的鍵值。
?????? D)這樣就不需要忽略那些庫了。
還有可以:
后來嘗試了很多方法,經過摸索,最后得出解決方法:
在Preprocessor中定義_AFXDLL
如果它提示:fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds
就這樣改:
C/C++->Code Generation->Multithread DLL (即實現/MD選項)
?????? (4)編譯時提示:
dcmdata.lib(dcuid.obj) : error LNK2001: unresolved external symbol _Netbios@4
原因:缺少所需的鏈接庫文件
解決:在自己的工程中加入需要使用的DCMTK靜態庫和頭文件,并注意順序。
?????? (5)編譯時提示:
fatal error LNK1181: cannot open input file。。。。。。。 Debug.obj
原因:類似錯誤,可能是由于目錄中含有太長的中文名字。
解決:可以將中文的目錄名改為英文就OK
?????? (6)運行時提示:
原因:
解決:在Project->Settings->Preprocessor definitions中去掉 _AFXDLL項。
?????? (7)如果將已經make好的dcmtk目錄復制到其它目錄,則需要重新make,否則會出現一大堆路徑錯誤
四、一個實際的例子
?????? 我們經常使用的DICOM主要是讀和寫DICOM文件。下面以讀寫DICOM為例DCMTK的使用方法。
五、其它一些相關的問題
?????? 1、把DCMTK當作靜態庫使用:DCMTK本身提供的是靜態庫即Lib,在鏈接進自己的工程時會將全部的函數加入,因此造成可執行文件很大,而且不便于升級;如果需要使用DCMTK作為動態庫鏈接,需要自己建立相應的Dll工程,然后把原來的程序文件加進來,再寫一個導出函數的文件,這些導出函數保持固定。這樣其它地方使用的時候不會因為動態庫程序升級又重新編譯。
?????? 2、
參考文件:
1、 DCMTK的常見問題論壇:http://forum.dcmtk.org/
2、 DCMTK的幫助文檔:ftp://dicom.offis.de/pub/dicom/offis/software/dcmtk/dcmtk353/docs/dcmtk-3.5.3-html-help.zip
3、 DICOM標準2004版。
4、 DICOM Validation Tool (DVT)是一個DICOM有效性測試工具,用來測試產品的DICOM兼容性。ADVT顧名思義就是Agfa提供的DICOM Validation Tool......
5、 http://www.pacser.net/dispbbs.asp?boardID=20&ID=72&page=1
轉載于:https://www.cnblogs.com/h2zZhou/p/4911556.html
總結
以上是生活随笔為你收集整理的基于DCMTK的DICOM相关程序编写攻略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一副解剖图是谁画的啊?
- 下一篇: 电动车电瓶多少钱一个啊?