`

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

阅读更多

基于 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, ofs td

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、

6、

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

分享到:
评论

相关推荐

    DCMTK工具下载,实现dicom传输文件等功能

    这个工具集是基于DICOM(Digital Imaging and Communications in Medicine)标准,这是一个国际广泛采纳的标准,用于在医疗环境中存储、交换和传输医学图像以及相关的临床信息。 DICOM标准不仅定义了数据格式,还...

    dcmtk3.6.7 最新版 dicom开发包

    这意味着开发者可以基于DCMTK开发能在不同操作系统上运行的应用。 6. **动态链接库**:"win64-dynamic"可能表明此版本是为64位Windows系统编译的动态链接库(DLL),这意味着在运行时需要依赖相应的库文件,而不是...

    读取DICOM文件(c编写)

    在C语言中编写代码来读取DICOM文件,需要理解DICOM文件的结构和相关库的使用。 DICOM文件通常包含图像数据以及与之相关的元数据,如患者信息、设备信息、扫描参数等。文件结构基于网络标准TCP/IP,采用二进制文件...

    dcmtk-3.6.4-html-help.zip_CTK和DCMTK_Help!_dcmtk_dcmtk help_dcmtk

    这对于深入理解DCMTK的内部工作原理和编写基于DCMTK的程序非常有帮助。 在"dcmtk-3.6.4-html-help"这个压缩包中,包含的HTML格式的帮助文档可能包括以下部分: 1. **概述**:介绍DCMTK项目的基本信息,如设计目标...

    Dcmtk3.6.6.rar

    在开发基于DCMTK的应用时,首先需要了解DICOM标准,这包括数据结构、传输协议和词汇表等内容。然后,通过引用include目录下的头文件,并链接lib目录中的库文件,可以开始编写处理DICOM数据的代码。使用bin目录中的...

    dcmtk-3.6.6.rar

    DCMTK是基于C++编写的,它提供了一系列的库、实用工具和示例代码,涵盖了DICOM网络、存储、打印、查询/检索(Q/R)以及文件处理等功能。 在解压“dcmtk-3.6.6”后,你可以看到以下几个关键部分: 1. **Source代码*...

    dcmtk工具包(32位)

    DCMTK工具包是用于医学图像处理和通信的开源软件库,主要基于DICOM标准。在32位系统上,DCMTK3.6.3版本提供了预编译的二进制工具,这些工具通常已经静态链接,意味着它们不依赖于外部的运行时库,可以在没有特定库...

    基于c#winfrom Dicom图像解析,包括dic,dcm.pk文件

    在"基于c# winfrom Dicom图像解析,包括dic,dcm.pk文件"的项目中,开发者使用C#编程语言,构建了一个Windows Forms应用程序,该程序能够解析和显示DICOM图像。DICOM文件通常以.dcm为扩展名,而".pk"可能是压缩格式...

    DICOM图像源码dicom.rar

    在您提供的资源“dicom.rar”中,包含了用DELPHI6编写的程序,该程序能够处理DICOM图像。DELPHI是一款强大的面向对象的编程环境,基于Pascal语言,广泛用于开发Windows应用软件。在DICOM图像处理领域,DELPHI因其...

    修改dicom的检查号

    描述中提到,该程序是在Visual Studio 2010环境下编写的,这意味着它很可能是一个基于C++的项目,因为VS2010主要支持C++开发。程序的功能是解析DICOM文件,提取各个Tag的值,并对其中的检查号进行修改。具体来说,它...

    DCMTK3.60库

    6. **使用DCMTK**:一旦编译并安装成功,你就可以在你的应用程序中包含DCMTK的头文件,链接库文件,并开始编写处理DICOM数据的代码。DCMTK提供了一系列类和函数,例如DcmDataset用于操作DICOM数据集,DcmFileFormat...

    dcmtk在PACS开发中的应用 工作列表 测试文件

    6. **编程接口**:DCMTK提供了C++接口,开发者可以通过这些接口编写自定义应用程序来处理DICOM数据和网络交互。 7. **错误处理和日志记录**:在使用DCMTK时,理解错误代码和正确使用日志记录对于调试和优化代码至关...

    DicomDisplayMDI.rar_DicomDisplayM_DicomDisplayMDI_DicomDisplayMD

    DICOM(Digital Imaging and Communications in Medicine)是一种标准格式,用于在医疗环境中交换医学影像和相关数据。`DicomDisplayMDI.rar` 提供了一个名为 `DicomDisplayMD` 的应用程序,该程序允许用户查看和...

    基于QVTKWidget的MainWindow

    在本文中,我们将深入探讨如何基于Qt框架创建一个桌面应用程序,该程序利用QVTKWidget对DICOM图像数据进行渲染。QVTKWidget是VTK(Visualization Toolkit)与Qt集成的组件,允许我们在Qt界面中无缝展示3D可视化效果...

    bmp格式转换dcm(C语言)

    5. **DICOM库**:编写DCM文件通常需要使用第三方库,如DCMTK(DICOM Toolkit),它提供了处理DICOM数据的API,可以方便地创建、修改和解析DCM文件。在C语言项目中,需要正确链接和使用这些库。 6. **错误处理**:在...

    BMP2DCM

    BMP2DCM是一个基于Delphi编写的程序,用于将位图文件(BMP)转换为DICOM(Digital Imaging and Communications in Medicine)格式的文件。在医学图像处理领域,DCM文件是广泛使用的标准格式,因为它可以包含元数据,...

    DicomRouter-开源

    Java的强大库支持和丰富的社区资源为dcmrouter提供了坚实的技术基础,开发者可以利用已有的Java DICOM库,如dcm4che或DCMTK,轻松实现与DICOM设备的交互。 作为一款“路由器”,dcmrouter的核心功能在于接收来自...

    dcmnet包移植到wince(omap3530平台)

    标题提到的“dcmnet包移植到wince(omap3530平台)”是一项技术任务,涉及到将DCMTK的网络组件dcmnet移植到基于Windows CE(wince)的操作系统上,用于OMAP3530嵌入式平台。OMAP3530是一款由Texas Instruments推出的...

    医学影像三维重建系统的研究与实现.pdf

    在技术实现方面,论文描述了如何使用Visual Studio 2010作为开发环境,配合Windows 7操作系统,通过C++语言和OpenGL API来编写和调试程序。此外,作者还研究了如何整合VTK与GPU编程技术,以提高三维渲染的效率和质量...

Global site tag (gtag.js) - Google Analytics