基於DCMTK的DICOM相關程式編寫攻略

來源:互聯網
上載者:User

標籤:

 

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 [email protected]

原因:缺少所需的連結庫檔案

解決:在自己的工程中加入需要使用的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

基於DCMTK的DICOM相關程式編寫攻略

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.