0 如何利用文档
VTK 是由 Will Schroeder 等创立的 Kitware Inc. 的开放源码产品。Kitware 提供关于VTK 的技术支持和各种服务产品,包括教科书和用户指南:The Visualization Toolkit An Object-Oriented Approach To 3D Graphics, 3rd edition 和 The Visualization Toolkit User's Guide 。两本书的内容各有侧重,教科书主要介绍可视化的各种算法以及 VTK 中的数据结构,而用户指南强调软件的使用方法。可以根据使用过程中遇到的不同问题参考两本书中的相应章节。编程中对具体的类、函数等的使用可以参考电子版的手册。编程中遇到的问题,可以在 VTK 的 maillist 上提出,一般都会有解答。 1 编译 VTK 库
1.1 准备源代码
从 http://www.vtk.org/ 下载源代码。源代码按成熟度依次分为官方发行版、每日打包版和 CVS 开发版,其中官方发行版最稳定,CVS 开发版最新。一般应用使用官方发行版即可。 1.2 用 CMake 产生具体平台下的工程文件
VTK 是用 C++ 语言开发的平台无关的图形库。为了使相互关联的 VTK 库代码能在不同平台(如 Windows 和 Unix)和不同编译器(如 Visual Studio 6.0 和 Borland)下方便使用,Kitware 开发了 CMake 这一转换工具。比如使用 CMake,可以为 Windows 平台下的 Visual Studio 6.0 产生相应的工程文件(.dsp 或 .dsw 文件),此后就可以在 Visual Studio的集成开发环境(IDE)下进行编译连接了。
CMake 提供一个用户界面,用户可以定制某些变量,其中比较重要的是 BUILD_SHARED_LIBS,根据它的选择可以生成 VTK 的静态库或者动态链接库。如果编译成静态库,那么在开发应用程序时要将相应库代码加入可执行程序;如果是动态库,则可执行程序与动态链接库是分离的。用动态库的好处是可以减小主程序的体积,缺点是可执行程序不能独立运行。不过在有些情况下,因为某些专利算法在商业用途里只能授权使用,所以 VTK 提供的部分代码只能以动态链接库的方式使用,所以应该熟悉编译动态链接库的方法。其他较常见的重要变量有 VTK_USE_PATENTED 、VTK_USE_HYBRID 等,编译时使它们打开开关,就可以编译出相应的库以便日后使用了。
图 1
1.3 编译库
以下以 Windows 平台下的 Visual Studio 6.0 编译环境为例来说明使用方法,不再声明。 打开用 CMake 产生的 .dsw 文件,选择工程类型进行编译。工程类型主要分两类:Release 和 Debug ,开发过程中一般用 Debug ,到发行时再用 Release ,所以在此用Debug即可。编译整个工程产生全部库,这个过程所需时间很长。编译完成后,会在 CMake 里面指定的目标目录内(如 vtkbin )产生编译出的库文件(缺省在 vtkbin/bin/Debug 目录内)。 2 在 Visual Studio 6.0开发环境下使用 VTK 库
VTK 库编译好了以后,就可以在 Visual Studio 开发环境下使用 VTK 库了。使用 VTK库首先要设置头文件和库文件的路径,以便使用 VTK 库的程序在编译和链接的时候可以搜索到。头文件的位置即源代码的各个子目录,里面包含了大量的 .h 文件。将其路径加入到 Visual Studio 6.0 的 Tools -> Options -> Directories 内,如图 2。注意除了源码的各个子目录外,还要加上一个 vtkConfigure.h 文件的路径,它在 CMake 产生的目标目录内。库文件的
设置与此类似,也在 Directories 页面进行,其路径是前述编译产生库文件的目录(如 vtkbin/bin/Debug )。这样设置好路径以后,使用 VTK 库的程序就可以正确地编译和链接了。对于使用动态链接库的程序来说,此时还不能运行编译出来的可执行程序( .exe),还需要一步,即把 VTK 的动态链接库文件所在路径加入操作系统的环境变量 PATH ,或直接将这些库文件拷贝到系统目录。
图 2
3 VTK 库编程特点
VTK 库是用面向对象的 C++ 语言写成的,由于主要开发者有着十数年涉及可视化系统的经验,所以 VTK 拥有非常合理的模型和结构。
VTK 的编程风格在教科书的附录 A,包括命名规范、术语定义、各类对象的用途说明等。值得注意的,比如它的对象工厂(Object Factory)概念。在 VTK 里,是用 VTK 中实现了数百个类及其方法,它们之间简化的继承和关联关系可以从教科书附录 A.3 的图中看到。熟悉不同的类的用途和它们之间的关系,对编程十分有利。 对开发者来说,如何扩充这个类库是重要的,教科书的附录 A.4 介绍了这个问题,而用户指南的开发者指南部分有一章来讲具体的做法。 4通过例子学习 VTK 概念及编程 要用 VTK 库进行可视化编程首先要对可视化要有一定的概念和基础。除了普通的可视化教科书以外,VTK 提供的教科书本身就非常好。VTK 源程序包的 Example 目录包括了一系列例子,它们都有详尽的注释。一步步学习这些例子,可以很容易理解 VTK 涉及的可视化概念和 VTK 编程的一般特点。 学习这些例子首先要成功编译运行它们。这个步骤跟编译库类似,也需要先用 CMake 工具生成 Visual Studio 的工程文件,然后编译;而要保证程序能正确运行,还得保证 VTK 库文件在环境变量的 PATH 内。 初学者应该从 Tutorial 目录内的 Step x 例子入手,它们从最简单的 VTK 程序开始,一步步地增加概念,演示了各种可视化概念。注意例子里的注释,以第一个程序(Step1 的 Cone 程序)为例,看一下源程序: 源程序:Example/Tutorial/Step1/Cxx/Cone.cxx // // This example creates a polygonal model of a cone, and then renders it to // the screen. It will rotate the cone 360 degrees and then exit. The basic // setup of source -> mapper -> actor -> renderer -> renderwindow is // typical of most VTK programs. // // First include the required header files for the VTK classes we are using. #i nclude \"vtkConeSource.h\" #i nclude \"vtkPolyDataMapper.h\" #i nclude \"vtkRenderWindow.h\" #i nclude \"vtkCamera.h\" #i nclude \"vtkActor.h\" int main( int argc, char *argv[] ) { // // Next we create an instance of vtkConeSource and set some of its // properties. The instance of vtkConeSource \"cone\" is part of a // visualization pipeline (it is a source process object); it produces data // (output type is vtkPolyData) which other filters may process. // vtkConeSource *cone = vtkConeSource::New(); cone->SetHeight( 3.0 ); cone->SetRadius( 1.0 ); cone->SetResolution( 10 ); // // In this example we terminate the pipeline with a mapper process object. // (Intermediate filters such as vtkShrinkPolyData could be inserted in // between the source and the mapper.) We create an instance of // vtkPolyDataMapper to map the polygonal data into graphics primitives. We // connect the output of the cone souece to the input of this mapper. // vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New(); coneMapper->SetInput( cone->GetOutput() ); 程序段 1 这个简单的例子是一个控制台下的程序,创建一个棱锥,在屏幕上绘制,旋转360度后退出。程序虽简单,但已经包括了数据源、映射器、演员、绘制器、绘制窗口等概念,这些概念在 VTK 编程中几乎都是必然涉及的。通过这个例子,就可以对教科书里讲到的各种可视化概念(如相机、演员),编程模型(如管道)等有直观的了解了。 这里仅举这个最简单的例子,事实上,VTK 自带的例子循序渐进,从简单的概念,到各种复杂的概念、算法和数据结构、GUI 编程、直到具体的应用等,都做了很好的例证。结合教科书和例子,可以较快地理解 VTK 的各个方面。 比如说,如果要用 VTK 在 Win32 环境下编程,应该学习 Example/GUI/Win32 下的例程,如果要用 MFC 框架,那么可以参考其中的 vtkMFC 例程。体会 VTK 库和 Win32 的关系、和 MFC 框架的关系,以便在这些平台上开发自己的程序。这需要对 VTK和操作系统、编程环境本身有比较深入的了解,而这种了解对自行开发程序是十分必要的。 5 用 VTK 进行 CT 片三维重构 VTK 作为一种通用的可视化类库,在科学和工程界有着广泛的应用。其中一种重要而常见的应用就是在医学领域,比如著名的“可视化人”项目,就有 VTK 的应用。实际上,VTK 在医学方面的应用是是 VTK 比较强调的,在它提供的例程应用中,就有专门的医学目录。学习它们,并应用于我们的项目中,是一条合适的途径。 比如,如果要做一个 3D 的医学影像系统,其中重要的一个环节就是三维重构,这也是在全膝置换手术中需要的。所以,用 VTK 进行 CT 片的三维重构,就是一个合适的应用的例子。 利用 VTK 做 CT 片的三维重构,从算法和数据结构来看,就是一个读取数据问题和一个 图形显示问题。 对于我们手里的 CT 片,因为它们符合 DICOM 3.0 标准,所以对它们的读取还是相对容易的。VTK 已经实现了这类数据的读取,vtkImageSource类的很多子类都可以完成这种工作,如vtkImageReader 类或者 vtkVolumeReader 等。这样我们编程的时候只要指定必须的参数,就可以实现对单张 CT 片乃至 CT 片序列的读取了。根据 VTK 的数据管道,原始数据读取入了以后,就可以使用各种各种过滤器进行数据转换,在这个例子里,即进行表面抽取、影射,然后就可以绘制了。因为是三维重建,所以还应该加入交互器,以便可以在绘制窗口里进行交互。 关于重建算法,对于 CT 片这种三维规则数据场,可以采取成熟、基本的算法来进行三维重建,比如 MarchingCubes 算法。 我们使用 Visual Studio 6.0 开发平台来完成上述的工作,使对 CT 片的读取、重建及显示、交互等功能融合到 MFC 的框架中,以便提供一个方便的用户接口。具体的程序另件给出,各部分的功能可以参考注释。 [参考文献] 1.The Visualization Toolkit An Object-Oriented Approach To 3D Graphics, 3rd edition 2.The Visualization Toolkit User's Guide 3.VTK 源码:http://www.vtk.org/get-software.php 4.VTK 电子文档:http://www.vtk.org/get-software.php 5.VTK 邮件列表:http://public.kitware.com/mailman/listinfo/vtkusers 6.http://digitalne.nju.edu.cn/new/course/vtk/index.htm 一些三维方面的开源代码 1 microterra http://microterra.sourceforge.net/index.html 2 Demeter Terrain Engine http://www.terrainengine.com/ 3 http://dmoz.org/Computers/Software/Graphics/3D/Terrain/ 4 blue marblevierer an OSG example http://www.andesengineering.com/BlueMarbleViewer/ VTK简介: VTK(Visualization ToolKit)是一个开放源码、自由获取的软件系统,全世界的数以千计的研究人员和开发人员用它来进行3D计算机图形,图像处理,可视化。众多的翻译接口层,包括Tcl/Tk,VTK包含一个c++类库,Java,Python。 Visualization Toolkit 是一个用于可视化应用程序构造与运行的支撑环境,它是在三维函数库它将我们在可视化开发过程中会经常遇到的细节屏蔽起OpenGL 的基础上采用面向对象的设计方法发展起来的, 来,并将一些常用的算法封装起来。比如Visualization Toolkit 将我们在表面重建中比较常见的Marching Cubes 算法封装起来,以类的形式给我们以支持,这样我们在对三维规则点阵数据进行表面重建时就不必再重复编写MarchingCubes 算法的代码,而直接使用Visualization Toolkit 中已经提供的vtkMarchingCubes 类。 Visualization Toolkit 是给从事可视化应用程序开发工作的研究人员提供直接的技术支持的一个强大的可视化开发工具,它以用户使用的方便性和灵活性为主要原则,具有如下的特点: 1) 具有强大的三维图形功能。Visualization Toolkit 既支持基于体素Voxel-basedrendering 的体绘制Volume Rendering又保留了传统的面绘制,从而在极大的改善可视化效果的同时又可以充分利用现有的图形库和图形硬件 2) Visualization Toolkit 的体系结构使其具有非常好的流streaming 和高速缓存caching 的能力,在处理大量的数据时不必考虑内存资源的限制 3) Visualization Toolkit 能够更好的支持基于网络的工具比如Java 和VRML 随着Web 和Internet 技术的发展Visualization Toolkit 有着很好的发展前景 4) 能够支持多种着色如OpenGL 等 5) Visualization Toolkit 具有设备无关性使其代码具有良好的可移植性 6) Visualization Toolkit 中定义了许多宏,这些宏极大的简化了编程工作并且加强了一致的对象行为 7) Visualization Toolkit 具有更丰富的数据类型,支持对多种数据类型进行处理 8) 既可以工作于Windows 操作系统又可以工作于Unix 操作系统极大的方便了用户 1. 到 http://www.vtk.org/get-software.php 的 Wintel Pre-Compiled Binaries (Windows 9x/NT) 下 下载 vtk42-LatestRelease.exe , 这是已经编译好的vtk 包,当然也可以下载 源码版来自己build. 假设将vtk包 安装到c:\\program files\\vtk42 下, 安装完毕后可以在该目录下看到 bin, lib, include 等目录 2.将c:\\program files\\vtk42\\bin 添加到PATH 环境变量. 3.打开 vs6, 在工具->选项->目录 选项卡中添加 c:\\program files\\vtk42\\include\\vtk 到Include files, 添加c:\\program files\\vtk42\\lib\\vtk 到Library files 4. 打开cone.cxx 文件, 编译, 应该能够通过, 如果有问题的话请检查step 2,3 的配置. 连接此程序发现11 linking errors, 需要如下设置: 工程->设定->link 选项卡, 在Object/library modules 中添加:vtkCommon.lib vtkFiltering.lib vtkGraphics.lib vtkHybrid.lib vtkImaging.lib vtkIO.lib vtkpng.lib vtkjpeg.lib vtkParallel.lib vtkRendering.lib vtkzlib.lib(注意 各个文件名之间用空格分隔), 确定. 5. 成功连接 运行. “生物工程与虚拟现实”讲学 发布时间:2004-7-3 21:07:28 时间:从7月5日(星期一)开始讲10天。上午:8:30~11:30 下午2:30~5:30 地点:哈工大科学园(原哈尔滨动物园)C1栋(机器人所) 412房间。 讲座人:新加坡国家医学图像实验室 Nowinski 教授 Biomedical Engineering Day 1 Morning 1. Introduction 介绍 2. How to do research 如何开展研究工作 Afternoon 3. Overview of bioengineering 生物工程学概况 (definition, disciplines, biomechanics, biomaterials, biosensors, biotechnology, biomedical instrumentation, medical imaging, medical informatics, Day 2 Morning 4. Human body anatomy 人体解剖结构 5. Brain anatomy 大脑解剖结构 (cross-sectional anatomy on axial, coronal, and sagittal slices; 3D anatomy; vasculature) Afternoon 6. Images and their properties 医学图象及特点 (image formation, image characteristics (spatial , contrast, and temporal resolutions), image formats, DICOM header) Day 3 Morning 7. Overview of imaging modalities 成像形式概述(physical basis, anatomical, functional, vascular) Afternoon 8. Anatomy imaging 解剖成像 (X-ray, CT, MRI, US) 9. Functional imaging 功能性成像(PET, SPECT, fMRI) 10. Angiography imaging 血管造影成像术(DSA, CTA, MRA, rotational angio, Doppler) 11. Molecular imaging 分子成像 12. Others 其他成像方式(MR elastography, microscopy imaging) Day 4 Morning 13. Overview of image processing and analysis techniques 图象处理和分 析技术概况 Afternoon 14. Image enhancement 图象特征增强技术 (histogram operations, spatial filtering, frequency filtering, image restoration) 15. Image segmentation 图象分割技术(thresholding, region growing, mathematical morphology) 16. Image classification 图象分类技术(supervised and unsupervised) Day 5 Morning 17. Image registration 图象配准(feature-based, volume based, similarity criteria, optimization, rigid and affine transformations, flexible, Talairach transformation and its automation) Afternoon 18. Visualization 图象可视化(multiplanar reformatting, curved sectioning, maximum intensity projection, surface rendering, volume rendering, comparison, virtual endoscopy) Day 6 Morning 19. Geometric modeling 几何建模(curves, surfaces, splines, contour-based, iso-surface extraction, vascular modeling) Afternoon 20. Physical modeling 物理建模(meshing, FEM, spring-based approach, material characteristics, tactile feedback) Day 7 Morning 21. Human body modeling 人体建模(data sources, approaches, examples) Afternoon 22. Virtual reality 虚拟现实(definition, surgical simulation, examples of applications) Day 8 Morning 23. Medical imaging tools 医学图象处理工具(BIL-kit, VTK, ITK) Afternoon 24. Processing of neuroimages 神经图象的处理(brain extraction, midsagittal plane identification, identification of the anterior and posterior commissures, segmentation of the ventricular system, atlas-based segmentation of subcortical structures; construction of the probabilistic functional maps) Day 9 Morning/afternoon 25. Human brain mapping 人脑映射 (surface-based data acquisition, tomographic-based data acquisition, postmortem, analysis, databases and atlases) Day 10 Morning 26. Validation 验证 Afternoon 27. Summary/discussion/questions 总结/讨论/提问 本系统的设计目标是开发一个从医学切片图像到有限元网格平台.当然这是导师的项目,不过系统架构和主要的编码还是由我作的.对这次开发过程中出现的问题以及最终解决问题的途径,我觉得还是比较有代表性的. 先介绍一下用户需求,其实就是导师脑袋里的想法结合我们的能力的东东了,编程技术不会太复杂,毕竟俺还是个学生,太复杂的东西是有风险的. 1)将切片图像读取(以后还要增加读取三维图像),图像预处理(裁减,平滑),图像分割,三维重建,几何模型导出和有限元网格生成等功能模块有机结合在统一的用户界面下,提供简洁初始界面,使用户能轻松识别各个功能区。因为该软件面向对象是科研工作者的,所以都是采用英文界面(这里没有歧视非科技工作者的意识,这是导师的原话.我对该观点抱否定态度,但实话说英文注释和界面开发起来方便,至少不用考虑输入法切换和Unicode转换). 2)对从切片图像读取到有限元网格生成这样一系列功能的实现在具有流线型特征的同时应该是可回溯性。(这里的回溯性,是比较高级的东西.利用了ITK和VTK的管道机制.) 3)为了提高图像处理的效率,对裁减、分割、重建这样的主要功能,应该具有策略存取功能,从而实现自动化或半自动化。 4)实现不同分割或重建方法结果可视化比较。 5)设计应该考虑界面功能模块的扩展和底层算法扩展。 根据这样的目标,我们制定了系统的设计方案: 1)系统基于VC6.0+sp5.0开发,采用MFC + ITK + VTK结构完成程序的用户界面、图像处理和可视化机制。 2)设计简约的系统界面,划分主要功能模块。功能模块主要包括数据处理模块、裁减模块、分割模块、分割过滤器模块、重建模块、表面模型平滑简化模块以及有限元网格划分模块等。 3)设计合理的数据流。实现各功能模块独立化,数据模块、处理模块和界面模块分离,提高系统的移植性。 4)在各功能模块之间可动态生成管道线。 等测试完毕,欢迎大家下载试用! Rolei注:文章不长,是本文作者的总结,提纲携领,相关的说细文档出处比较详尽,并提供了相关的工具软件及开发程序,希望对大家有所帮助。同时也希望大家能够多多的发一些贴子过来,原创或是转贴。共同关注,共同进步,这是我们建立此论坛的真正目的。 医学数字影像和通讯(DICOM)编程简介 刚开接触dicom时网上可查的资料真是太少了。 在此写出一些心得和经验和大家分享,希望坛子里做dicom的网友能够得到一些启发。 目录: 一 dicom是什么? 二 dicom文件结构 三 如何编写dicom程序 四 利用开发包开发dicom程序 五 dcmtk使用介绍 一 dicom是什么? dicom全名是医学数字影像和通讯。它是个编码和数据传输协议。医院里的ct机出来的x光胶片就是遵从这个协议编码的。当然其他仪器比如核磁共振等等也是如此。平时看到的胶片只是打印出来的dicom文件的部分数据。ct机所有的操作包括打印、生成文件、传输都要遵从dicom协议。 dicom官方网站在这里 中国PACS论坛 http://medical.nema.org 。dicom英文协议可以在这里下载。 http://www.cnpacs.org 这里有一个专门讨论dicom的板块里面有很多资料其中有网友翻译 的dicom中文协议。(本文大部分资料都出自这个论坛) 二 dicom文件结构 如图就是dicom文件的结构。 图中所用软件是“jdicom”这是一个用java编写的免费软件,这个软件是我作dicom开发不可缺少的参考。它的网址是 http://www.tiani.com 进入网站在菜单research里面有“jdicom”一项。由于是java软件需要下载一个 http://java.sun.com/products/archive/index.html 当 “j2re-1_3_1_14-windows-i586-i.exe”网址在这里 然“www.tiani.com”也会有相关联接。 下面引用pacs论坛上总版主JB的一片帖子忘记了。 来简要介绍dicom文件结构。相信有了上面软件“jdicom”直接对dicom的观察和这篇pacs上的帖子再加对dicom协议的阅读后相信对dicom文件的结构会有一个清晰的了解。 以下是帖子内容: DICOM 文件格式 DICOM 文件内容在 Part 3 DICOM IOD 里定义。CT, MR, CR, DR, US, NM, PET, XA 等各有自己的内容定义,由共同的专有的部分 (IE 和 Modules) 组成。 DICOM 文件内容由两个部分组成:存参数的 header 和图点数据 (pixel data)。 header 只描述图像的基本参数:如病人基本资料、检验基本资料、系列资料、位置资料等等。 DICOM 的 4 个内容层次: 1. Patient (病人) 2. Study (检验) 3. Series (系列) 4. Image (图像) 尽管头几层的内容在很多图像里是相同的,它们在每个图像文件里都要有。 每一层叫一个 Information Entity,或 IE (从 relational database schema 设计引用而来)。每一层又细分成 Module。每个 Module 里面的最小单元叫做一个 attribute 或 element。 现在举个例子:CR 图像 (DICOM Part 3, A.2.3, Table A.2-1 1. Patient IE: a. Patient Module (参考 C.7.1.1) 2. Study IE: a. Study Module (参考 C.7.2.1) b. Patient Study Module (参考 C.7.2.2) 3. Series IE: a. General Series (参考 C.7.3.1) b. CR Series (参考 C.8.1..1) c. General Equipment (参考 C.7.5.1) 4. Image IE: a. Genrral Image (C.7.6.1) b. Image Pixel (C.7.6.3) c. Contrast/bolus (C.7.6.4) d. CR Image (C.8.1.2) ... i. SOP Common (C.12.1) 将这些 modules (tables) 里的所有 elements 都找出来就做成了一个 CR 图像的架构。 要注意的是这些 module 有些是一定要的 (modatory) 有些是用户选用的 (user)。 到了每个 module 里 attribute/element 表又有分五类 Type 1, 1C, 2, 2C 和 3。 Type 1 是一定要的,2 也是一定要的但是内容可以是空的。Type 3 则可要可不要。 所以浓缩一下,一个 CR 图像里的元素 (elements) 也不是太多。 把这些表格展开后,这些 elements 组成一个 dataset。 那么写到一个文件里或通过网路传送又是个什么格式呢?这就要看 Part 5。 一个元素 (element) 的结构是: 1. group tag: 16-bit 2. element tag: 16-bit 3. length (or VR/length): 32-bit 4. data (bytes of length) 对应每一个用到的 element DICOM 标准 Part 6 都定义了一个 group tag 和 element tag。比如说: patient name: 0x0010, 0x0010 patient ID: 0x0010, 0x0020 ... VR 说 的 是 element 格 式 , 比 如 说 patinet name 的 VR 是 PN 。 格 式 是 last_name^first_name^middle_name^prefix^surfix。那么我的英文名字就是: Wang^JB^^Dr.^ 往外写时要做几个事情: 1. 要把所有元素按 group tage 和 element tag 理一遍 (sort)。从小排到大。 2. 如果是写 DICOM 介质的 DICOM file 还先写 128 bytes preamble (一般是空白),加 \"DICM\加 group 2 Meta header。(讲到 Part 10 时再细说) 3. 如果 dataset 里面含有 Sequence elements, sequence 里面每一个 Item 又是一个 dataset。 [注意]:dicom协议共有15章,其中第三章是“信息对象定义”,第五章是“数据结构和编码”,第六章是“数据字典”这几张比较重要。 三 如何编写dicom程序 自己编写dicom很困难,编出来的程序经常会有兼容性的问题。 本人提倡用开发包进行dicom程序编写,但是为了加深对dicom协议的了解还是应该尝试一下至少看一看别人的代码。 这里提供两个程序。这两个程序都存在兼容性的问题,有的dicom文件会读不出来。但是作为初学者的参考还是值得一看的。 第一个程序是pacs论坛上的总版主JB所写(对!还是那个人),“DcmBmp转换程序.rar”主要是把dicom文件中的像素信息转换成bmp文件。 第二个程序是一个pacs论坛上的一个网友wakyrei所写(由于服务器数据库文件以外遭到破坏这个人在pacs论坛上的所有信息都已经消失的无影无踪了),“dcm”此程序相当粗燥读起来需要一定耐心,作者好像根本不懂怎样使用mfc,不过其中的dicom类还是值得推敲的。 五 四利用开发包开发dicom程序 开发dicom的工具包有很多,这里要说的是dcmtk这个开发包是免费全部开发源代码。 dcmtk开发包的官方网站是 http://www.dcmtk.org 。在左面的DICOM Software中点击DCMTK一项就进 入了dcmtk下载项。这里有很多链接。只需要下载两项: 1.DCMTK 3.5.3 - source code and documentation (2004-05-27) 2.DCMTK 3.5.3 - support libraries for Windows 先别忙着解压,还需要另外一个软件来生成工程文件。这个软件叫cmake。官方网站是这个 http://www.cmake.org 很多医学相关的开发包像vtk/itk都需要这个软件来生成工程文件。 下图就是cmake打开dcmtk开发包的样子。 需要说明的是几个WITH_*选项就是“2.DCMTK 3.5.3 - support libraries for Windows”解压出来的东西。点击两次configure之后就可以点ok生成工程文件了。 工程文件编译好之后程序会生成很多例子程序可以用来参考。举个例子:运行dcmdata\\apps\\Debug\\dcmdump.exe这个程序。这是一个解析dicom文件的程序。如果想开发dicom文件可以参照这个程序。 调用库的时候要注意几个问题: 1.工程设置/cc++/preprocessor/附加包含路径。这里设置头文件 2.工程设置/link/input/对象库模块。这里设置库文件。 3.工程设置/link/project option/。这里设置库文件路径。 4.工程设置/cc++/code generation/Use run-time library。 5.以上几项需要和例子程序中的设置保持一致。 五dcmtk使用介绍 由于dcmtk不能在mfc下使用。所以需要生成库之后再调用。 这里给出两个程序。 1.利用dcmtk生成的静态库。 2.调用静态库生成了一个读dicom目录文件的程序。 整个程序都是参考dcmtk里的例子dcmdump.exe做的 http://www.vchelp.net/ASP/cdf_pic/200410/reply_1_747225.rar http://www.vchelp.net/cndevforum/subject_view.asp?subject_id=135248&forum_id= 源文档 < http://www.cnpacs.org/bbs/dispbbs.asp?boardID=16&ID=5207&page=1>; VTK: http://www.kitware.com VTK主战; http://public.kitware.com/Insight/Web/index.htm ITK a toolkit for visible human project registration and segmentation, open source under developing http://users.info.unicaen.fr/~karczma/docs/vtkhtml/Examples.html VTK Examples sorted by Object http://www.cc.nih.gov/cip/software/etdips/ Source Code http://www.image-registration.com/ VTK CISG Registration Toolkit Too Cool!!!!!!!!!!!!!! voxel-based affine registration using Normalized Mutual Information (NMI) voxel-based non-rigid registration (free form deformation) on the basis of B-spline interpolation using Normalized Mutual Information (NMI http://public.kitware.com/cgi-bin/vtkfaq VTK的FAQ,因为重要才单独写出来 http://mailarchivers.ncsa.uiuc.edu/cgi-bin/mailarchivers/mainscreen.pl?archive=VTKUSERS The VTK Discussion Place, http://mailarchivers.ncsa.uiuc.edu/ 自己看吧 http://www.barre.nom.fr/medical/index.html 比较好的VTK个人站点 http://www.esat.kuleuven.ac.be/~vtkedit/cgi-bin/download.pl vtkEdit http://rrvtk.free.fr/vtk/perfs/ VTK Bench Marks 测试 http://www.slicer.org MIT的VTK医学扩展要注册才能得到免费的和开放源码的程序的说。COOL http://www.crd.ge.com/~lorensen/seg12/#introduction 一个VTK的很好的例子 http://www.lumens.com/vtk/index.html The best VTK instruction Site I have ever seen http://solvedeath.stanford.edu/~spicer/svr_html/svr.html Open source Sean’s Volume Rendering Library, on SGI Onyx2 http://www.principiamathematica.com/ VizStudio, encapsulates VTK http://mayavi.sourceforge.net/ a VTK Application http://www.atamai.com/ an VTK application http://www.crd.ge.com/esl/cgsp/ GE The Computer Graphics and Systems Program!!! http://cens.ioc.ee/projects/pyvtk/ PYVTK Project http://www.cineca.it/download/devel/vtkClasses.html A Great Deve Team for VTK http://www.colorado-research.com/~gourlay/software/Graphics/Ogle/ very excellent site!! http://www.medres.ch/~jstifter/vtkandqt/index.html VTK and QT http://stsc.hill.af.mil/crosstalk/1997/dec/visualization.asp visualization and measurement of source code http://newton.rex.dmu.ac.uk/~ronaldo/new/vtk.html A personal website, not too bad http://ltswww.epfl.ch/~cuisenai/vtk/ A PostDoc Who writes some vtk New Classes http://www.aero.iitm.ernet.in/~prabhu/software/vtk/index.html VTK and Linux 因篇幅问题不能全部显示,请点此查看更多更全内容