日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】基于DCMTK的DICOM相关程序编写攻略

發(fā)布時(shí)間:2023/12/10 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】基于DCMTK的DICOM相关程序编写攻略 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)自:https://blog.csdn.net/jackmacro/article/details/5332654

零、前言:

?????? 由于現(xiàn)在的醫(yī)學(xué)影像設(shè)備的圖像存儲(chǔ)和傳輸正在逐漸向DICOM標(biāo)準(zhǔn)靠攏,因此,我們?cè)谶M(jìn)行醫(yī)學(xué)圖像處理的過程中,經(jīng)常需要自己編寫和DICOM格式的圖像相關(guān)的各種程序模塊,以完成自己處理功能。如果從頭開始理解DICOM的協(xié)議,然后完全自己編寫這些代碼來實(shí)現(xiàn)這些協(xié)議,是一件工程浩大的事情。德國offis公司開發(fā)的DCMTK,為我們提供了實(shí)現(xiàn)DICOM協(xié)議的一個(gè)平臺(tái),使得我們可以在它的基礎(chǔ)上輕松的完成自己的主要工作,而不必把太多的精力放在實(shí)現(xiàn)DICOM協(xié)議的細(xì)節(jié)問題上。本文以WINDOWSXP+VC6.0為開發(fā)平臺(tái),從DCMTK的下載、調(diào)試、使用等方面介紹基于DCMTK的DICOM相關(guān)程序編寫過程。

一、DCMTK簡介

?????? DCMTK是由德國offis公司提供的開源項(xiàng)目,并擁有相應(yīng)的版權(quán)。這個(gè)開發(fā)包經(jīng)過10多年的開發(fā)和維護(hù),已經(jīng)基本實(shí)現(xiàn)了DICOM協(xié)議的所有內(nèi)容。該開發(fā)包提供所有的源代碼、支持庫和幫助文檔。DCMTK提供了在各種操作系統(tǒng)下使用的可能版本,如LINUX、SUN、WINDOWS等,用戶可更具自己的開發(fā)平臺(tái)進(jìn)行編譯。目前DCMTK的版本是3.5.3。

二、DCMTK的下載和調(diào)試

?????? DCMTK公司的主頁是:?http://dicom.offis.de。

1、首先下載DTMTK源代碼。可以通過以下地址:ftp://dicom.offis.de/pub/dicom/offis/software/dcmtk/dcmtk353/dcmtk-3.5.3.zip

2、下載相關(guān)的支持庫:ftp://dicom.offis.de/pub/dicom/offis/software/dcmtk/dcmtk353/support/dcmtk-3.5.3-win32-i386-support.zip

3、安裝或調(diào)試。

?????? (1)首先是將DCMTK的源代碼解壓后和它的支持庫放在同一個(gè)目錄下面。

?????? (2)使用CMake軟件得到DCMTK的工程文件。

?????? 使用MAKE工具CMake,不僅可以創(chuàng)建DCMTK編譯項(xiàng)目文件,還可以對(duì)DCMTK進(jìn)行配置。步驟如下

?????? ①從http://www.cmake.org/HTML/Download.html下載CMake for Windows最新的版本。

?????? ②安裝CMake并對(duì)CMake的如下選項(xiàng)進(jìn)行設(shè)置(設(shè)置前需先刪除原來的舊項(xiàng)目文件):如圖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創(chuàng)建DCMTK編譯項(xiàng)目文件

?????? (3)用VC6打開項(xiàng)目文件DCMTK.dsw進(jìn)行編譯,根據(jù)提示,在編譯環(huán)境(Tools->Option->Directories)中加入相應(yīng)的頭文件和庫文件。

?????? (4)DCMTK的編譯可能需要比較長的時(shí)間,過程中也可能出現(xiàn)各種連接錯(cuò)誤,大都是因?yàn)榫幾g環(huán)境引起的。

三、基于DCMTK的DICOM相關(guān)程序。

?????? 1、建立自己的應(yīng)用工程并將其加入DCMTK的工作空間(Project->Insert Project To WorkSpace)。

?????? 2、在自己的工程中加入需要使用的DCMTK靜態(tài)庫和頭文件。

?????? 按照正確的順序填寫鏈接庫文件(對(duì)于鏈接庫來說順序也是很重要的!) DCMTK庫有下面這些依賴關(guān)系:

?????? 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)對(duì)于單文檔工程,運(yùn)行時(shí)提示:

?????? generated debug assertion

?????? if (!ProcessShellCommand(cmdInfo))

?????? return FALSE;

?????? -- File: docsingl.cpp

?????? Line: 215

原因:缺少AFX_IDS_UNTITLED的字符串

解決:在資源文件的STRING TABLE中加入 ID= AFX_IDS_UNTITLED的鍵值。

?????? (2)編輯時(shí)提示:

fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds

原因:

解決:在Project->Settings->Preprocessor definitions中去掉 _AFXDLL項(xiàng)。

?????? (3)編譯時(shí)提示:

LIBCMTD.lib(dbgheap.obj):error LNK2005: _malloc already defined in msvcrtd.lib(MSVCRTD.dll)

原因:由于VC在編譯時(shí)試圖從兩個(gè)不同的庫中寫入同一個(gè)函數(shù)代碼,只要忽略這些相沖突的默認(rèn)庫就可以解決。

解決:在Project->Settings->Link->Category->Input—>Ignore Liberies中加入

相應(yīng)的msvcprtd.lib,msvcrtd.lib等。

另一種解決:保證自己的編譯環(huán)境為:

?????? A)project->settings->c/c++->category->code generation的use run-time library 為debug multithreaded.

?????? B) 在Project->Settings->Preprocessor definitions中去掉 _AFXDLL項(xiàng)。

?????? C)如果需要,在資源文件的STRING TABLE中加入 ID= AFX_IDS_UNTITLED的鍵值。

?????? D)這樣就不需要忽略那些庫了。

還有可以:

后來嘗試了很多方法,經(jīng)過摸索,最后得出解決方法:

在Preprocessor中定義_AFXDLL

如果它提示:fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds

就這樣改:

C/C++->Code Generation->Multithread DLL (即實(shí)現(xiàn)/MD選項(xiàng))

?????? (4)編譯時(shí)提示:

dcmdata.lib(dcuid.obj) : error LNK2001: unresolved external symbol _Netbios@4

原因:缺少所需的鏈接庫文件

解決:在自己的工程中加入需要使用的DCMTK靜態(tài)庫和頭文件,并注意順序。

?????? (5)編譯時(shí)提示:

fatal error LNK1181: cannot open input file。。。。。。。 Debug.obj

原因:類似錯(cuò)誤,可能是由于目錄中含有太長的中文名字。

解決:可以將中文的目錄名改為英文就OK

?????? (6)運(yùn)行時(shí)提示:


原因:

解決:在Project->Settings->Preprocessor definitions中去掉 _AFXDLL項(xiàng)。

?????? (7)如果將已經(jīng)make好的dcmtk目錄復(fù)制到其它目錄,則需要重新make,否則會(huì)出現(xiàn)一大堆路徑錯(cuò)誤

四、一個(gè)實(shí)際的例子

?????? 我們經(jīng)常使用的DICOM主要是讀和寫DICOM文件。下面以讀寫DICOM為例DCMTK的使用方法。

五、其它一些相關(guān)的問題

?????? 1、把DCMTK當(dāng)作靜態(tài)庫使用:DCMTK本身提供的是靜態(tài)庫即Lib,在鏈接進(jìn)自己的工程時(shí)會(huì)將全部的函數(shù)加入,因此造成可執(zhí)行文件很大,而且不便于升級(jí);如果需要使用DCMTK作為動(dòng)態(tài)庫鏈接,需要自己建立相應(yīng)的Dll工程,然后把原來的程序文件加進(jìn)來,再寫一個(gè)導(dǎo)出函數(shù)的文件,這些導(dǎo)出函數(shù)保持固定。這樣其它地方使用的時(shí)候不會(huì)因?yàn)閯?dòng)態(tài)庫程序升級(jí)又重新編譯。

?????? 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標(biāo)準(zhǔn)2004版。

4、 DICOM Validation Tool (DVT)是一個(gè)DICOM有效性測(cè)試工具,用來測(cè)試產(chǎn)品的DICOM兼容性。ADVT顧名思義就是Agfa提供的DICOM Validation Tool......

5、?http://www.pacser.net/dispbbs.asp?boardID=20&ID=72&page=1

總結(jié)

以上是生活随笔為你收集整理的【转】基于DCMTK的DICOM相关程序编写攻略的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。